自动化立体仓库 - WMS系统
#
18516761980
2021-08-20 c48a47ed9189f4ac0ce64177484425a3540ce4ce
#
1个文件已删除
2个文件已添加
35个文件已修改
4561 ■■■■ 已修改文件
pom.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/LocDetlController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MobileController.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/LocDetl.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/ViewStayTimeBean.java 230 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/ViewWorkInBean.java 219 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WaitPakin.java 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WaitPakinLog.java 55 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WrkDetl.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WrkDetlLog.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/LocDetlAdjustParam.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/StockOutParam.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/LocDetlMapper.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/WrkDetlMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/LocDetlService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/WrkDetlService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/VersionUtils.java 66 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/CodeBuilder.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/model/MobileLocDetlVo.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/model/OutLocDto.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/UpdateThread.cs 1732 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/LocDetlMapper.xml 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/ViewStayTimeMapper.xml 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/ViewWorkInMapper.xml 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WaitPakinLogMapper.xml 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WaitPakinMapper.xml 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkDetlLogMapper.xml 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkDetlMapper.xml 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/css/admin.css 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/matCode/matCode.js 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/layui/lay/modules/admin.js 1667 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/matCode/matCode.html 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/matCode/matCode_detail.html 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml
@@ -15,7 +15,7 @@
    <properties>
        <java.version>1.8</java.version>
        <cool.version>2.0.0</cool.version>
        <cool.version>2.2.0</cool.version>
        <mysql-driver.version>5.1.47</mysql-driver.version>
        <mybatis-plus.version>2.3.2</mybatis-plus.version>
        <fastjson.version>1.2.58</fastjson.version>
src/main/java/com/zy/asrs/controller/LocDetlController.java
@@ -118,7 +118,7 @@
    @RequestMapping(value = "/locDetl/update/auth")
    @ManagerAuth(memo = "库位明细修改")
    public R update(LocDetl locDetl){
        if (Cools.isEmpty(locDetl) || null==locDetl.getMatnr()){
        if (Cools.isEmpty(locDetl) || null==locDetl.getMatNo()){
            return R.error();
        }
        locDetl.setModiUser(getUserId());
@@ -155,13 +155,13 @@
    @ManagerAuth
    public R query(String condition) {
        EntityWrapper<LocDetl> wrapper = new EntityWrapper<>();
        wrapper.like("matnr", condition);
        wrapper.like("mat_no", condition);
        Page<LocDetl> page = locDetlService.selectPage(new Page<>(0, 10), wrapper);
        List<Map<String, Object>> result = new ArrayList<>();
        for (LocDetl locDetl : page.getRecords()){
            Map<String, Object> map = new HashMap<>();
            map.put("id", locDetl.getMatnr());
            map.put("value", locDetl.getMatnr());
            map.put("id", locDetl.getMatNo());
            map.put("value", locDetl.getMatNo());
            result.add(map);
        }
        return R.ok(result);
src/main/java/com/zy/asrs/controller/MobileController.java
@@ -82,36 +82,36 @@
            List<MobileLocDetlVo> res = new ArrayList<>();
            locDetls.forEach(locDetl -> {
                MobileLocDetlVo vo = new MobileLocDetlVo();
                List<WrkDetl> wrkDetlsList = wrkDetlService.queryWrkDetl(locDetl.getMatnr(), locDetl.getLocNo());
                List<WrkDetl> wrkDetlsList = wrkDetlService.queryWrkDetl(locDetl.getMatNo(), locDetl.getLocNo());
                final Double[] pickNum = {0.0};
                wrkDetlsList.forEach(item -> {
                    pickNum[0] = pickNum[0] + item.getAnfme();
                    pickNum[0] = pickNum[0] + item.getQty();
                });
                vo.setPickNum(pickNum[0]);
                vo.setLocNo(locDetl.getLocNo());
                vo.setMatnr(locDetl.getMatnr());
                vo.setMaktx(locDetl.getMaktx());
                vo.setCount(locDetl.getAnfme());
                vo.setMatNo(locDetl.getMatNo());
                vo.setMatName(locDetl.getMatName());
                vo.setCount(locDetl.getQty());
                res.add(vo);
            });
            return R.ok().add(res);
        }
        if (!Cools.isEmpty(matNo)) {
            List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>()
                    .eq("matnr", matNo).orderBy("appe_time", false));
                    .eq("mat_no", matNo).orderBy("appe_time", false));
            List<MobileLocDetlVo> res = new ArrayList<>();
            locDetls.forEach(locDetl -> {
                MobileLocDetlVo vo = new MobileLocDetlVo();
                List<WrkDetl> wrkDetlsList = wrkDetlService.queryWrkDetl(locDetl.getMatnr(), locDetl.getLocNo());
                List<WrkDetl> wrkDetlsList = wrkDetlService.queryWrkDetl(locDetl.getMatNo(), locDetl.getLocNo());
                final Double[] pickNum = {0.0};
                wrkDetlsList.forEach(item -> {
                    pickNum[0] = pickNum[0] + item.getAnfme();
                    pickNum[0] = pickNum[0] + item.getQty();
                });
                vo.setPickNum(pickNum[0]);
                vo.setLocNo(locDetl.getLocNo());
                vo.setMatnr(locDetl.getMatnr());
                vo.setMaktx(locDetl.getMaktx());
                vo.setCount(locDetl.getAnfme());
                vo.setMatNo(locDetl.getMatNo());
                vo.setMatName(locDetl.getMatName());
                vo.setCount(locDetl.getQty());
                res.add(vo);
            });
            return R.ok().add(res);
@@ -137,23 +137,23 @@
            locDetls.forEach(locDetl -> {
                MobileLocDetlVo vo = new MobileLocDetlVo();
                vo.setLocNo(locDetl.getLocNo());
                vo.setMatnr(locDetl.getMatnr());
                vo.setMaktx(locDetl.getMaktx());
                vo.setCount(locDetl.getAnfme());
                vo.setMatNo(locDetl.getMatNo());
                vo.setMatName(locDetl.getMatName());
                vo.setCount(locDetl.getQty());
                res.add(vo);
            });
            return R.ok().add(res);
        }
        if (!Cools.isEmpty(matNo)) {
            List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>()
                    .eq("matnr", matNo).orderBy("appe_time", false));
                    .eq("mat_no", matNo).orderBy("appe_time", false));
            List<MobileLocDetlVo> res = new ArrayList<>();
            locDetls.forEach(locDetl -> {
                MobileLocDetlVo vo = new MobileLocDetlVo();
                vo.setLocNo(locDetl.getLocNo());
                vo.setMatnr(locDetl.getMatnr());
                vo.setMaktx(locDetl.getMaktx());
                vo.setCount(locDetl.getAnfme());
                vo.setMatNo(locDetl.getMatNo());
                vo.setMatName(locDetl.getMatName());
                vo.setCount(locDetl.getQty());
                res.add(vo);
            });
            return R.ok().add(res);
src/main/java/com/zy/asrs/entity/LocDetl.java
@@ -27,21 +27,25 @@
    @TableField("loc_no")
    private String locNo;
    @ApiModelProperty(value= "产品")
    @TableId(value = "matnr", type = IdType.INPUT)
    private String matnr;
    @ApiModelProperty(value= "产品编码")
    @TableId(value = "mat_no", type = IdType.INPUT)
    private String matNo;
    @ApiModelProperty(value= "产品描述")
    private String maktx;
    @ApiModelProperty(value= "产品名称")
    @TableId(value = "mat_name")
    private String matName;
    @ApiModelProperty(value= "规格")
    private String lgnum;
    private String specs;
    @ApiModelProperty(value= "产品类别")
    private String type;
    @ApiModelProperty(value= "尺寸")
    private String size;
    @ApiModelProperty(value= "颜色")
    private String color;
    @ApiModelProperty(value= "单重")
    private Double weight;
    @ApiModelProperty(value= "供应商")
    private String supplier;
@@ -53,10 +57,10 @@
    private String brand;
    @ApiModelProperty(value= "数量")
    private Double anfme;
    private Double qty;
    @ApiModelProperty(value= "单位")
    private String altme;
    private String unit;
    @ApiModelProperty(value= "托盘条码")
    private String zpallet;
src/main/java/com/zy/asrs/entity/ViewStayTimeBean.java
@@ -9,21 +9,16 @@
 */
@Data
public class ViewStayTimeBean {
    private int tbnum;          //转储请求编号
    private int tbpos;          //行项目
    private String zmatid;      //产品标签ID
    private String matnr;      //产品
    private String maktx;      //产品描述
    private String werks;      //工厂
    private double anfme;       //数量
    private String altme;      //单位
    private String specs;      //规格
    private Double qty;       //数量
    private String unit;      //单位
    private String size;    //尺寸
    private String color;    // 颜色
    private Double weight;           //单重
    private String zpallet;    //托盘条码
    private String bname;      //用户ID
    private String lgnum;        //规格
    private String type;        // 产品类别
    private String color;    // 颜色
    private String supplier;    // 供应商
    private String warehouse;    // 仓库
    private String brand;    // 品牌
@@ -31,8 +26,7 @@
    private String loc_no;      //库位号
    private String mat_no;      //产品代号
    private Long ctns;          //箱数
    private Long qty;           //数量
    private double wt;            //重量
//    private Double wt;            //重量
    private String memo;        //备注
    private String mat_name;      //产品名称
    private String str1;
@@ -45,25 +39,11 @@
    private String str8;
    private String str9;
    private String str10;
    private String str11;
    private String str12;
    private String str13;
    private String str14;
    private String str15;
    private String str16;
    private String str17;
    private String str18;
    private String str19;
    private String str20;
    private String str21;
    private String str22;
    private String str23;
    private double num1;
    private double num2;
    private double num3;
    private double num4;
    private double num5;
    private double num6;
    private String modi_user;
    private String modi_time;
    private String stay_time;
@@ -74,61 +54,79 @@
    private String end_date;   //查询截止日期
    private String barcode;
    private String date1;
    public String getLgnum() {
        return lgnum;
    public String getSpecs() {
        return specs;
    }
    public void setLgnum(String lgnum) {
        this.lgnum = lgnum;
    public void setSpecs(String specs) {
        this.specs = specs;
    }
    public int getTbnum() {
        return tbnum;
    public Double getQty() {
        return qty;
    }
    public void setTbnum(int tbnum) {
        this.tbnum = tbnum;
    public void setQty(Double qty) {
        this.qty = qty;
    }
    public int getTbpos() {
        return tbpos;
    public String getUnit() {
        return unit;
    }
    public void setTbpos(int tbpos) {
        this.tbpos = tbpos;
    public void setUnit(String unit) {
        this.unit = unit;
    }
    public String getZmatid() {
        return zmatid;
    public String getSize() {
        return size;
    }
    public void setZmatid(String zmatid) {
        this.zmatid = zmatid;
    public void setSize(String size) {
        this.size = size;
    }
    public String getMatnr() {
        return matnr;
    public String getColor() {
        return color;
    }
    public void setMatnr(String matnr) {
        this.matnr = matnr;
    public void setColor(String color) {
        this.color = color;
    }
    public String getMaktx() {
        return maktx;
    public Double getWeight() {
        return weight;
    }
    public void setMaktx(String maktx) {
        this.maktx = maktx;
    public void setWeight(Double weight) {
        this.weight = weight;
    }
    public String getWerks() {
        return werks;
    public String getSupplier() {
        return supplier;
    }
    public void setWerks(String werks) {
        this.werks = werks;
    public void setSupplier(String supplier) {
        this.supplier = supplier;
    }
    public double getAnfme() {
        return anfme;
    public String getWarehouse() {
        return warehouse;
    }
    public void setAnfme(double anfme) {
        this.anfme = anfme;
    public void setWarehouse(String warehouse) {
        this.warehouse = warehouse;
    }
    public String getAltme() {
        return altme;
    public String getBrand() {
        return brand;
    }
    public void setAltme(String altme) {
        this.altme = altme;
    public void setBrand(String brand) {
        this.brand = brand;
    }
    public String getZpallet() {
        return zpallet;
    }
@@ -165,18 +163,12 @@
    public void setCtns(Long ctns) {
        this.ctns = ctns;
    }
    public Long getQty() {
        return qty;
    }
    public void setQty(Long qty) {
        this.qty = qty;
    }
    public double getWt() {
        return wt;
    }
    public void setWt(double wt) {
        this.wt = wt;
    }
//    public double getWt() {
//        return wt;
//    }
//    public void setWt(double wt) {
//        this.wt = wt;
//    }
    public String getStay_time() {
        return stay_time;
    }
@@ -434,90 +426,6 @@
    }
    public void setEnd_date(String end_date) {
        this.end_date = end_date;
    }
    public String getStr11() {
        return str11;
    }
    public void setStr11(String str11) {
        this.str11 = str11;
    }
    public String getStr12() {
        return str12;
    }
    public void setStr12(String str12) {
        this.str12 = str12;
    }
    public String getStr13() {
        return str13;
    }
    public void setStr13(String str13) {
        this.str13 = str13;
    }
    public String getStr14() {
        return str14;
    }
    public void setStr14(String str14) {
        this.str14 = str14;
    }
    public String getStr15() {
        return str15;
    }
    public void setStr15(String str15) {
        this.str15 = str15;
    }
    public String getStr16() {
        return str16;
    }
    public void setStr16(String str16) {
        this.str16 = str16;
    }
    public String getStr17() {
        return str17;
    }
    public void setStr17(String str17) {
        this.str17 = str17;
    }
    public String getStr18() {
        return str18;
    }
    public void setStr18(String str18) {
        this.str18 = str18;
    }
    public String getStr19() {
        return str19;
    }
    public void setStr19(String str19) {
        this.str19 = str19;
    }
    public String getStr20() {
        return str20;
    }
    public void setStr20(String str20) {
        this.str20 = str20;
    }
    public String getStr21() {
        return str21;
    }
    public void setStr21(String str21) {
        this.str21 = str21;
    }
    public String getStr22() {
        return str22;
    }
    public void setStr22(String str22) {
        this.str22 = str22;
    }
    public String getStr23() {
        return str23;
    }
    public void setStr23(String str23) {
        this.str23 = str23;
    }
    public double getNum6() {
        return num6;
    }
    public void setNum6(double num6) {
        this.num6 = num6;
    }
    public String getBarcode() {
        return barcode;
src/main/java/com/zy/asrs/entity/ViewWorkInBean.java
@@ -10,21 +10,15 @@
@Data
public class ViewWorkInBean {
    private int tbnum;          //转储请求编号
    private int tbpos;          //行项目
    private String zmatid;      //产品标签ID
    private String matnr;      //产品
    private String maktx;      //产品描述
    private String werks;      //工厂
    private double anfme;       //数量
    private String altme;      //单位
    private String specs;      //规格
    private Double qty;       //数量
    private String unit;      //单位
    private String size;    //尺寸
    private String color;    // 颜色
    private Double weight;           //单重
    private String zpallet;    //托盘条码
    private String bname;      //用户ID
    private String lgnum;        //规格
    private String type;        // 产品类别
    private String color;    // 颜色
    private String supplier;    // 供应商
    private String warehouse;    // 仓库
    private String brand;    // 品牌
@@ -43,21 +37,7 @@
    private String str8;
    private String str9;
    private String str10;
    private String str11;
    private String str12;
    private String str13;
    private String str14;
    private String str15;
    private String str16;
    private String str17;
    private String str18;
    private String str19;
    private String str20;
    private String str21;
    private String str22;
    private String str23;
    private Long ctns;          //箱数
    private Long qty;           //数量
    private double wt;            //重量
    private int pageNumber;
    private int pageSize;
@@ -69,66 +49,87 @@
    private double num3;
    private double num4;
    private double num5;
    private double num6;
    private String barcode;
    private String date1;
    private String crn_str_time;
    private String crn_end_time;
    public String getLgnum() {
        return lgnum;
    public String getSpecs() {
        return specs;
    }
    public void setLgnum(String lgnum) {
        this.lgnum = lgnum;
    public void setSpecs(String specs) {
        this.specs = specs;
    }
    public int getTbnum() {
        return tbnum;
    public Double getQty() {
        return qty;
    }
    public void setTbnum(int tbnum) {
        this.tbnum = tbnum;
    public void setQty(Double qty) {
        this.qty = qty;
    }
    public int getTbpos() {
        return tbpos;
    public String getUnit() {
        return unit;
    }
    public void setTbpos(int tbpos) {
        this.tbpos = tbpos;
    public void setUnit(String unit) {
        this.unit = unit;
    }
    public String getZmatid() {
        return zmatid;
    public String getSize() {
        return size;
    }
    public void setZmatid(String zmatid) {
        this.zmatid = zmatid;
    public void setSize(String size) {
        this.size = size;
    }
    public String getMatnr() {
        return matnr;
    public String getColor() {
        return color;
    }
    public void setMatnr(String matnr) {
        this.matnr = matnr;
    public void setColor(String color) {
        this.color = color;
    }
    public String getMaktx() {
        return maktx;
    public Double getWeight() {
        return weight;
    }
    public void setMaktx(String maktx) {
        this.maktx = maktx;
    public void setWeight(Double weight) {
        this.weight = weight;
    }
    public String getWerks() {
        return werks;
    public String getSupplier() {
        return supplier;
    }
    public void setWerks(String werks) {
        this.werks = werks;
    public void setSupplier(String supplier) {
        this.supplier = supplier;
    }
    public double getAnfme() {
        return anfme;
    public String getWarehouse() {
        return warehouse;
    }
    public void setAnfme(double anfme) {
        this.anfme = anfme;
    public void setWarehouse(String warehouse) {
        this.warehouse = warehouse;
    }
    public String getAltme() {
        return altme;
    public String getBrand() {
        return brand;
    }
    public void setAltme(String altme) {
        this.altme = altme;
    public void setBrand(String brand) {
        this.brand = brand;
    }
    public String getQuery_date() {
        return query_date;
    }
    public String getZpallet() {
        return zpallet;
    }
@@ -182,12 +183,6 @@
    }
    public void setCtns(Long ctns) {
        this.ctns = ctns;
    }
    public Long getQty() {
        return qty;
    }
    public void setQty(Long qty) {
        this.qty = qty;
    }
    public double getWt() {
        return wt;
@@ -267,84 +262,6 @@
    public void setStr10(String str10) {
        this.str10 = str10;
    }
    public String getStr11() {
        return str11;
    }
    public void setStr11(String str11) {
        this.str11 = str11;
    }
    public String getStr12() {
        return str12;
    }
    public void setStr12(String str12) {
        this.str12 = str12;
    }
    public String getStr13() {
        return str13;
    }
    public void setStr13(String str13) {
        this.str13 = str13;
    }
    public String getStr14() {
        return str14;
    }
    public void setStr14(String str14) {
        this.str14 = str14;
    }
    public String getStr15() {
        return str15;
    }
    public void setStr15(String str15) {
        this.str15 = str15;
    }
    public String getStr16() {
        return str16;
    }
    public void setStr16(String str16) {
        this.str16 = str16;
    }
    public String getStr17() {
        return str17;
    }
    public void setStr17(String str17) {
        this.str17 = str17;
    }
    public String getStr18() {
        return str18;
    }
    public void setStr18(String str18) {
        this.str18 = str18;
    }
    public String getStr19() {
        return str19;
    }
    public void setStr19(String str19) {
        this.str19 = str19;
    }
    public String getStr20() {
        return str20;
    }
    public void setStr20(String str20) {
        this.str20 = str20;
    }
    public String getStr21() {
        return str21;
    }
    public void setStr21(String str21) {
        this.str21 = str21;
    }
    public String getStr22() {
        return str22;
    }
    public void setStr22(String str22) {
        this.str22 = str22;
    }
    public String getStr23() {
        return str23;
    }
    public void setStr23(String str23) {
        this.str23 = str23;
    }
    public double getNum1() {
        return num1;
    }
@@ -374,12 +291,6 @@
    }
    public void setNum5(double num5) {
        this.num5 = num5;
    }
    public double getNum6() {
        return num6;
    }
    public void setNum6(double num6) {
        this.num6 = num6;
    }
    public String getBarcode() {
        return barcode;
src/main/java/com/zy/asrs/entity/WaitPakin.java
@@ -1,6 +1,7 @@
package com.zy.asrs.entity;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.core.common.Cools;
import io.swagger.annotations.ApiModelProperty;
@@ -16,18 +17,37 @@
    private static final long serialVersionUID = 1L;
    /**
     * 产品
     */
    @ApiModelProperty(value= "产品")
    private String matnr;
    @ApiModelProperty(value= "产品编码")
    @TableId(value = "mat_no")
    private String matNo;
    @ApiModelProperty(value= "产品名称")
    @TableId(value = "mat_name")
    private String matName;
    @ApiModelProperty(value= "规格")
    private String specs;
    @ApiModelProperty(value= "尺寸")
    private String size;
    @ApiModelProperty(value= "颜色")
    private String color;
    @ApiModelProperty(value= "单重")
    private Double weight;
    /**
     * 产品描述
     * 数量
     */
    @ApiModelProperty(value= "产品描述")
    private String maktx;
    @ApiModelProperty(value= "数量")
    private Double qty;
    /**
     * 单位
     */
    @ApiModelProperty(value= "单位")
    private String unit;
    /**
     * 仓库号
@@ -40,12 +60,6 @@
     */
    @ApiModelProperty(value= "产品类别")
    private String type;
    /**
     * 仓库号
     */
    @ApiModelProperty(value= "颜色")
    private String color;
    /**
     * 仓库号
@@ -64,18 +78,6 @@
     */
    @ApiModelProperty(value= "品牌")
    private String brand;
    /**
     * 数量
     */
    @ApiModelProperty(value= "数量")
    private Double anfme;
    /**
     * 单位
     */
    @ApiModelProperty(value= "单位")
    private String altme;
    /**
     * 托盘条码
src/main/java/com/zy/asrs/entity/WaitPakinLog.java
@@ -1,6 +1,7 @@
package com.zy.asrs.entity;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.core.common.Cools;
import io.swagger.annotations.ApiModelProperty;
@@ -17,17 +18,37 @@
    private static final long serialVersionUID = 1L;
    /**
     * 产品
     */
    @ApiModelProperty(value= "产品")
    private String matnr;
    @ApiModelProperty(value= "产品编码")
    @TableId(value = "mat_no")
    private String matNo;
    @ApiModelProperty(value= "产品名称")
    @TableId(value = "mat_name")
    private String matName;
    @ApiModelProperty(value= "规格")
    private String specs;
    @ApiModelProperty(value= "尺寸")
    private String size;
    @ApiModelProperty(value= "颜色")
    private String color;
    @ApiModelProperty(value= "单重")
    private Double weight;
    /**
     * 产品描述
     * 数量
     */
    @ApiModelProperty(value= "产品描述")
    private String maktx;
    @ApiModelProperty(value= "数量")
    private Double qty;
    /**
     * 单位
     */
    @ApiModelProperty(value= "单位")
    private String unit;
    /**
@@ -41,12 +62,6 @@
     */
    @ApiModelProperty(value= "产品类别")
    private String type;
    /**
     * 仓库号
     */
    @ApiModelProperty(value= "颜色")
    private String color;
    /**
     * 仓库号
@@ -65,18 +80,6 @@
     */
    @ApiModelProperty(value= "品牌")
    private String brand;
    /**
     * 数量
     */
    @ApiModelProperty(value= "数量")
    private Double anfme;
    /**
     * 单位
     */
    @ApiModelProperty(value= "单位")
    private String altme;
    /**
     * 托盘条码
src/main/java/com/zy/asrs/entity/WrkDetl.java
@@ -1,7 +1,9 @@
package com.zy.asrs.entity;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import com.core.common.Cools;
import com.core.common.SpringUtils;
import com.zy.system.entity.User;
@@ -33,48 +35,39 @@
    @TableField("io_time")
    private Date ioTime;
    /**
     * 产品
     */
    @ApiModelProperty(value= "产品")
    private String matnr;
    @ApiModelProperty(value= "产品编码")
    @TableId(value = "mat_no")
    private String matNo;
    /**
     * 产品描述
     */
    @ApiModelProperty(value= "产品描述")
    private String maktx;
    @ApiModelProperty(value= "产品名称")
    @TableId(value = "mat_name")
    private String matName;
    /**
     * 仓库号
     */
    @ApiModelProperty(value= "规格")
    private String lgnum;
    private String specs;
    /**
     * 仓库号
     */
    @ApiModelProperty(value= "产品类别")
    private String type;
    @ApiModelProperty(value= "尺寸")
    private String size;
    /**
     * 仓库号
     */
    @ApiModelProperty(value= "颜色")
    private String color;
    /**
     * 仓库号
     */
    @ApiModelProperty(value= "供应商")
    private String supplier;
    @ApiModelProperty(value= "单重")
    private Double weight;
    /**
     * 仓库号
     * 单据编号
     */
    @ApiModelProperty(value= "仓库")
    private String warehouse;
    @ApiModelProperty(value= "单据编号")
    @TableField("bill_no")
    private String billNo;
    /**
     * 序号
     */
    @ApiModelProperty(value= "序号")
    @TableField("seq_no")
    private String seqNo;
    /**
     * 仓库号
@@ -86,13 +79,13 @@
     * 数量
     */
    @ApiModelProperty(value= "数量")
    private Double anfme;
    private Double qty;
    /**
     * 单位
     */
    @ApiModelProperty(value= "单位")
    private String altme;
    private String unit;
    /**
     * 托盘条码
src/main/java/com/zy/asrs/entity/WrkDetlLog.java
@@ -1,6 +1,7 @@
package com.zy.asrs.entity;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.core.common.Cools;
import com.core.common.SpringUtils;
@@ -33,48 +34,39 @@
    @TableField("io_time")
    private Date ioTime;
    /**
     * 产品
     */
    @ApiModelProperty(value= "产品")
    private String matnr;
    @ApiModelProperty(value= "产品编码")
    @TableId(value = "mat_no")
    private String matNo;
    /**
     * 产品描述
     */
    @ApiModelProperty(value= "产品描述")
    private String maktx;
    @ApiModelProperty(value= "产品名称")
    @TableId(value = "mat_name")
    private String matName;
    /**
     * 仓库号
     */
    @ApiModelProperty(value= "规格")
    private String lgnum;
    private String specs;
    /**
     * 仓库号
     */
    @ApiModelProperty(value= "产品类别")
    private String type;
    @ApiModelProperty(value= "尺寸")
    private String size;
    /**
     * 仓库号
     */
    @ApiModelProperty(value= "颜色")
    private String color;
    /**
     * 仓库号
     */
    @ApiModelProperty(value= "供应商")
    private String supplier;
    @ApiModelProperty(value= "单重")
    private Double weight;
    /**
     * 仓库号
     * 单据编号
     */
    @ApiModelProperty(value= "仓库")
    private String warehouse;
    @ApiModelProperty(value= "单据编号")
    @TableField("bill_no")
    private String billNo;
    /**
     * 序号
     */
    @ApiModelProperty(value= "序号")
    @TableField("seq_no")
    private String seqNo;
    /**
     * 仓库号
@@ -86,13 +78,13 @@
     * 数量
     */
    @ApiModelProperty(value= "数量")
    private Double anfme;
    private Double qty;
    /**
     * 单位
     */
    @ApiModelProperty(value= "单位")
    private String altme;
    private String unit;
    /**
     * 托盘条码
src/main/java/com/zy/asrs/entity/param/LocDetlAdjustParam.java
@@ -16,17 +16,17 @@
    public static class LocDetlAdjust {
        // 产品号
        private String matnr;
        private String matNo;
        // 变更数量
        private Double count;
        public String getMatnr() {
            return matnr;
        public String getMatNo() {
            return matNo;
        }
        public void setMatnr(String matnr) {
            this.matnr = matnr;
        public void setMatNo(String matNo) {
            this.matNo = matNo;
        }
        public Double getCount() {
src/main/java/com/zy/asrs/entity/param/StockOutParam.java
@@ -35,7 +35,7 @@
        private String locNo;
        // 产品号
        private String matnr;
        private String matNo;
        // 数量
        private Double count;
@@ -48,12 +48,12 @@
            this.locNo = locNo;
        }
        public String getMatnr() {
            return matnr;
        public String getMatNo() {
            return matNo;
        }
        public void setMatnr(String matnr) {
            this.matnr = matnr;
        public void setMatNo(String matNo) {
            this.matNo = matNo;
        }
        public Double getCount() {
src/main/java/com/zy/asrs/mapper/LocDetlMapper.java
@@ -18,13 +18,13 @@
    Integer getStockOutPageCount(Map<String, Object> map);
    @Update("update asr_loc_detl set anfme=#{anfme}, modi_time = getDate() where loc_no = #{locNo} and matnr = #{matnr}")
    int updateAnfme(Double anfme, String locNo, String matnr);
    @Update("update asr_loc_detl set qty=#{qty}, modi_time = getDate() where loc_no = #{locNo} and mat_no = #{matNo}")
    int updateAnfme(Double qty, String locNo, String matNo);
    @Update("update asr_loc_detl set loc_no = #{newLocNo}, modi_time=getDate() where loc_no = #{oldLocNo}")
    int updateLocNo(String newLocNo, String oldLocNo);
    @Select("SELECT ld.loc_no FROM asr_loc_detl ld LEFT JOIN asr_loc_mast lm ON ld.loc_no = lm.loc_no WHERE (1 = 1 AND ld.matnr = #{matnr} AND lm.loc_sts = 'F' AND DateDiff(dd, lm.modi_time, getdate()) = 0) ORDER BY lm.modi_time ASC")
    List<String> selectSameDetlToday(String matnr);
    @Select("SELECT ld.loc_no FROM asr_loc_detl ld LEFT JOIN asr_loc_mast lm ON ld.loc_no = lm.loc_no WHERE (1 = 1 AND ld.mat_no = #{matNo} AND lm.loc_sts = 'F' AND DateDiff(dd, lm.modi_time, getdate()) = 0) ORDER BY lm.modi_time ASC")
    List<String> selectSameDetlToday(String matNo);
}
src/main/java/com/zy/asrs/mapper/WrkDetlMapper.java
@@ -11,5 +11,5 @@
@Mapper
@Repository
public interface WrkDetlMapper extends BaseMapper<WrkDetl> {
    List<WrkDetl> queryWrkDetl(@Param("matnr") String matnr,@Param("locNo") String locNo);
    List<WrkDetl> queryWrkDetl(@Param("matNo") String matNo,@Param("locNo") String locNo);
}
src/main/java/com/zy/asrs/service/LocDetlService.java
@@ -13,15 +13,15 @@
    /**
     * 修改库存明细数量,如果数量为0,则删除记录
     */
    boolean updateAnfme(Double anfme, String locNo, String matnr);
    boolean updateAnfme(Double qty, String locNo, String matNo);
    boolean updateLocNo(String newLocNo, String oldLocNo);
    /**
     * 获取当天相同规格货物的深库位号
     * @param matnr 产品号
     * @param matNo 产品号
     * @return locNo 库位号
     */
    List<String> getSameDetlToday(String matnr);
    List<String> getSameDetlToday(String matNo);
}
src/main/java/com/zy/asrs/service/WrkDetlService.java
@@ -10,5 +10,5 @@
    void createWorkDetail(Integer workNo, List<MatCodeCountDto> matCodeCountDtos, String barcode, Long userId);
    List<WrkDetl> queryWrkDetl(String matnr, String locNo);
    List<WrkDetl> queryWrkDetl(String matNo, String locNo);
}
src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
@@ -21,11 +21,11 @@
    }
    @Override
    public boolean updateAnfme(Double anfme, String locNo, String matnr) {
        if (anfme <= 0) {
            return delete(new EntityWrapper<LocDetl>().eq("loc_no", locNo).eq("matnr", matnr));
    public boolean updateAnfme(Double qty, String locNo, String matNo) {
        if (qty <= 0) {
            return delete(new EntityWrapper<LocDetl>().eq("loc_no", locNo).eq("mat_no", matNo));
        } else {
            int res = baseMapper.updateAnfme(anfme, locNo, matnr);
            int res = baseMapper.updateAnfme(qty, locNo, matNo);
            return res > 0;
        }
    }
@@ -36,8 +36,8 @@
    }
    @Override
    public List<String> getSameDetlToday(String matnr) {
        return this.baseMapper.selectSameDetlToday(matnr);
    public List<String> getSameDetlToday(String matNo) {
        return this.baseMapper.selectSameDetlToday(matNo);
    }
}
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -48,7 +48,7 @@
            WaitPakin waitPakin = new WaitPakin();
            waitPakin.setZpallet(param.getBarcode());   // 托盘码
            waitPakin.setStatus("Y");    // 状态
            waitPakin.setAnfme(combMat.getCount());  // 数量
            waitPakin.setQty(combMat.getCount());  // 数量
            waitPakin.setIoStatus("N");     // 入出状态
            waitPakin.setAppeUser(userId);
            waitPakin.setAppeTime(new Date());
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -136,10 +136,10 @@
        // 获取库位明细
        List<LocDetlDto> locDetlDtos = new ArrayList<>();
        for (StockOutParam.LocDetl paramLocDetl : param.getLocDetls()) {
            if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getCount())) {
            if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatNo(), paramLocDetl.getCount())) {
                LocDetl sqlParam = new LocDetl();
                sqlParam.setLocNo(paramLocDetl.getLocNo());
                sqlParam.setMatnr(paramLocDetl.getMatnr());
                sqlParam.setMatNo(paramLocDetl.getMatNo());
                LocDetl one = locDetlService.selectOne(new EntityWrapper<>(sqlParam));
                if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount()));
            }
@@ -220,8 +220,8 @@
                WrkDetl wrkDetl = new WrkDetl();
                wrkDetl.setWrkNo(workNo);
                wrkDetl.setIoTime(new Date());
                Double anfme = ioType==101?detlDto.getLocDetl().getAnfme():detlDto.getCount();
                wrkDetl.setAnfme(anfme); // 数量
                Double qty = ioType==101?detlDto.getLocDetl().getQty():detlDto.getCount();
                wrkDetl.setQty(qty); // 数量
                VersionUtils.setWrkDetl(wrkDetl, detlDto.getLocDetl()); // 版本控制
                wrkDetl.setAppeTime(new Date());
                wrkDetl.setAppeUser(userId);
@@ -372,12 +372,12 @@
        // 获取库位明细
        List<LocDetlDto> locDetlDtos = new ArrayList<>();
        for (StockOutParam.LocDetl paramLocDetl : param.getLocDetls()) {
            if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr())) {
            if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatNo())) {
                LocDetl sqlParam = new LocDetl();
                sqlParam.setLocNo(paramLocDetl.getLocNo());
                sqlParam.setMatnr(paramLocDetl.getMatnr());
                sqlParam.setMatNo(paramLocDetl.getMatNo());
                LocDetl one = locDetlService.selectOne(new EntityWrapper<>(sqlParam));
                if (null != one) locDetlDtos.add(new LocDetlDto(one, one.getAnfme()));
                if (null != one) locDetlDtos.add(new LocDetlDto(one, one.getQty()));
            }
        }
        if (!locDetlDtos.isEmpty()) {
@@ -434,7 +434,7 @@
            WrkDetl wrkDetl = new WrkDetl();
            wrkDetl.setWrkNo(workNo);
            wrkDetl.setIoTime(new Date());
            wrkDetl.setAnfme(locDetl.getAnfme());
            wrkDetl.setQty(locDetl.getQty());
            VersionUtils.setWrkDetl(wrkDetl, locDetl); // 版本控制
            wrkDetl.setAppeTime(new Date());
            wrkDetl.setAppeUser(userId);
@@ -505,22 +505,22 @@
            throw new CoolException("库位不存在");
        }
        for (LocDetlAdjustParam.LocDetlAdjust adjust : param.getList()) {
            if (Cools.isEmpty(adjust.getMatnr())) {
            if (Cools.isEmpty(adjust.getMatNo())) {
                throw new CoolException(BaseRes.PARAM);
            }
            LocDetl sqlParam = new LocDetl();
            sqlParam.setLocNo(locMast.getLocNo());
            sqlParam.setMatnr(adjust.getMatnr());
            sqlParam.setMatNo(adjust.getMatNo());
            LocDetl one = locDetlService.selectOne(new EntityWrapper<>(sqlParam));
            // 保存新库存明细
            if (Cools.isEmpty(one)) {
                if (adjust.getCount() == 0){
                    continue;
                }
                MatCode matCode = matCodeService.selectById(adjust.getMatnr());
                MatCode matCode = matCodeService.selectById(adjust.getMatNo());
                LocDetl locDetl = new LocDetl();
                locDetl.setLocNo(locMast.getLocNo());
                locDetl.setAnfme(adjust.getCount()); // 数量
                locDetl.setQty(adjust.getCount()); // 数量
                VersionUtils.setLocDetl(locDetl, matCode); // 版本控制
                locDetl.setModiUser(userId); // 操作人员信息
                locDetl.setModiTime(new Date());
@@ -532,14 +532,14 @@
                // 保存调整记录
                AdjDetl adjDetl = new AdjDetl();
                adjDetl.setLocNo(locDetl.getLocNo());
                adjDetl.setMatNo(locDetl.getMatnr());
                adjDetl.setMatNo(locDetl.getMatNo());
                adjDetl.setOriQty(0.0D);
                adjDetl.setAdjQty(adjust.getCount());
                adjDetlService.save(adjDetl, userId);
            // 修改原库存明细
            } else {
                // 如果数量修改,则更新库存明细
                if (!adjust.getCount().equals(one.getAnfme())) {
                if (!adjust.getCount().equals(one.getQty())) {
                    // 当数量被修改为 0 时,直接清除库存明细
                    if (adjust.getCount() == 0) {
                        if (!locDetlService.delete(new EntityWrapper<>(one))) {
@@ -547,20 +547,20 @@
                        }
                    } else {
                        LocDetl sqlParam1 = new LocDetl();
                        sqlParam1.setAnfme(adjust.getCount());
                        sqlParam1.setQty(adjust.getCount());
                        sqlParam1.setModiTime(new Date());
                        sqlParam1.setModiUser(userId);
                        if (!locDetlService.update(sqlParam1, new EntityWrapper<LocDetl>()
                                .eq("loc_no", locMast.getLocNo())
                                .eq("matnr", adjust.getMatnr()))) {
                                .eq("mat_no", adjust.getMatNo()))) {
                            throw new CoolException("修改库存明细失败");
                        }
                    }
                    // 保存调整记录
                    AdjDetl adjDetl = new AdjDetl();
                    adjDetl.setLocNo(locMast.getLocNo());
                    adjDetl.setMatNo(adjust.getMatnr());
                    adjDetl.setOriQty(one.getAnfme());
                    adjDetl.setMatNo(adjust.getMatNo());
                    adjDetl.setOriQty(one.getQty());
                    adjDetl.setAdjQty(adjust.getCount());
                    adjDetlService.save(adjDetl, userId);
                }
src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java
@@ -38,7 +38,7 @@
            WrkDetl wrkDetl = new WrkDetl();
            wrkDetl.setWrkNo(workNo);
            wrkDetl.setIoTime(new Date());
            wrkDetl.setAnfme(dto.getCount()); // 数量
            wrkDetl.setQty(dto.getCount()); // 数量
            VersionUtils.setWrkDetl(wrkDetl, matCode); // 版本控制
            wrkDetl.setZpallet(barcode); // 托盘条码
            wrkDetl.setAppeUser(userId);
@@ -53,7 +53,7 @@
    @Override
    @Transactional
    public List<WrkDetl> queryWrkDetl(String matnr, String locNo) {
        return baseMapper.queryWrkDetl(matnr, locNo);
    public List<WrkDetl> queryWrkDetl(String matNo, String locNo) {
        return baseMapper.queryWrkDetl(matNo, locNo);
    }
}
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -77,9 +77,9 @@
                    }
                    // 遍历工作明细,更新库存明细和入库通知档
                    for (WrkDetl wrkDetl : wrkDetls) {
                        LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getLocNo()).eq("matnr", wrkDetl.getMatnr()));
                        LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getLocNo()).eq("mat_no", wrkDetl.getMatNo()));
                        if (null != locDetl) {
                            boolean res = locDetlService.updateAnfme(wrkDetl.getAnfme(), wrkMast.getLocNo(), wrkDetl.getMatnr());
                            boolean res = locDetlService.updateAnfme(wrkDetl.getQty(), wrkMast.getLocNo(), wrkDetl.getMatNo());
                            if (!res) {
                                exceptionHandle("全板入库 ===>> 更新库存明细失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                            }
@@ -99,8 +99,8 @@
                            setParam.setIoStatus("Y");
                            boolean updateRes = waitPakinService.update(setParam
                                    , new EntityWrapper<WaitPakin>().eq("zpallet", wrkDetl.getZpallet())
                                            .eq("matnr", wrkDetl.getMatnr())
                                            .eq("anfme", wrkDetl.getAnfme()));
                                            .eq("mat_no", wrkDetl.getMatNo())
                                            .eq("qty", wrkDetl.getQty()));
                            if (!updateRes && updateRes) {
                                exceptionHandle("全板入库 ===>> 更新入库通知档失败;[workNo={0}]", wrkMast.getWrkNo());
                            }
@@ -127,9 +127,9 @@
                    }
                    for (WrkDetl wrkDetl:wrkDetls53) {
                        // 修改库存明细数量,如果工作明细数量为0时,删除库存明细
                        LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()).eq("matnr", wrkDetl.getMatnr()));
                        LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()).eq("mat_no", wrkDetl.getMatNo()));
                        if (null != locDetl) {
                            if (!locDetlService.updateAnfme(locDetl.getAnfme() - wrkDetl.getAnfme(), locMast.getLocNo(), wrkDetl.getMatnr())) {
                            if (!locDetlService.updateAnfme(locDetl.getQty() - wrkDetl.getQty(), locMast.getLocNo(), wrkDetl.getMatNo())) {
                                exceptionHandle("拣料入库 ===>> 修改库存明细数量失败;[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
                            }
                            // todo:luxiaotao 3)修改出库通知档 status ==> Y
@@ -155,10 +155,10 @@
                    }
                    // 修改库存明细数量,如无库存,曾新增
                    for (WrkDetl wrkDetl:wrkDetls54) {
                        LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()).eq("matnr", wrkDetl.getMatnr()));
                        LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()).eq("mat_no", wrkDetl.getMatNo()));
                        if (null != locDetl) {
                            if (!locDetlService.updateAnfme(wrkDetl.getAnfme(), locMast.getLocNo(), wrkDetl.getMatnr())) {
                                exceptionHandle("并板入库 ===>> 修改库存明细数量失败;[workNo={0}],[matnr={1}]", wrkMast.getWrkNo(), wrkDetl.getMatnr());
                            if (!locDetlService.updateAnfme(wrkDetl.getQty(), locMast.getLocNo(), wrkDetl.getMatNo())) {
                                exceptionHandle("并板入库 ===>> 修改库存明细数量失败;[workNo={0}],[matNo={1}]", wrkMast.getWrkNo(), wrkDetl.getMatNo());
                            }
                        } else {
                            locDetl = new LocDetl();
@@ -167,7 +167,7 @@
                            locDetl.setModiTime(now);
                            locDetl.setAppeTime(now);
                            if (!locDetlService.insert(locDetl)) {
                                exceptionHandle("并板入库 ===>> 新增库存明细失败;[workNo={0}],[matnr={1}]", wrkMast.getWrkNo(), wrkDetl.getMatnr());
                                exceptionHandle("并板入库 ===>> 新增库存明细失败;[workNo={0}],[matNo={1}]", wrkMast.getWrkNo(), wrkDetl.getMatNo());
                            }
                        }
                        // todo:luxiaotao 3)修改出库通知档 status ==> Y
src/main/java/com/zy/asrs/utils/VersionUtils.java
@@ -14,51 +14,55 @@
    // 业务 ----------------------------------------------------------------------
    public static void setWrkDetl(WrkDetl wrkDetl, MatCode matCode) {
        wrkDetl.setMatnr(matCode.getMatNo()); // 产品编号
        wrkDetl.setMaktx(matCode.getMatName()); // 产品描述
        wrkDetl.setLgnum(matCode.getStr2()); // 规格
        wrkDetl.setColor(matCode.getStr3()); // 助记码
        wrkDetl.setAltme(matCode.getStr1()); // 单位
        wrkDetl.setBname(matCode.getStr4()); // 库位名称
        wrkDetl.setMatNo(matCode.getMatNo()); // 产品编码
        wrkDetl.setMatName(matCode.getMatName()); // 产品名称
        wrkDetl.setSpecs(matCode.getSpecs()); // 规格
        wrkDetl.setUnit(matCode.getUnit()); // 单位
        wrkDetl.setSize(matCode.getSize()); // 尺寸
        wrkDetl.setColor(matCode.getColor()); // 颜色
        wrkDetl.setWeight(matCode.getWeight()); // 单重
    }
    public static void setWrkDetl(WrkDetl wrkDetl, LocDetl locDetl) {
        wrkDetl.setMatnr(locDetl.getMatnr()); // 产品编号
        wrkDetl.setMaktx(locDetl.getMaktx()); // 产品描述
        wrkDetl.setLgnum(locDetl.getLgnum()); // 规格
        wrkDetl.setColor(locDetl.getColor()); // 助记码
        wrkDetl.setBname(locDetl.getBname()); // 库位名称
        wrkDetl.setAltme(locDetl.getAltme()); // 单位
        wrkDetl.setMatNo(locDetl.getMatNo()); // 产品编号
        wrkDetl.setMatName(locDetl.getMatName()); // 产品描述
        wrkDetl.setSpecs(locDetl.getSpecs()); // 规格
        wrkDetl.setUnit(locDetl.getUnit()); // 单位
        wrkDetl.setSize(locDetl.getSize()); // 尺寸
        wrkDetl.setColor(locDetl.getColor()); // 颜色
        wrkDetl.setWeight(locDetl.getWeight()); // 单重
        wrkDetl.setZpallet(locDetl.getZpallet()); // 托盘条码
    }
    public static void setLocDetl(LocDetl locDetl, MatCode matCode) {
        locDetl.setMatnr(matCode.getMatNo()); // 产品编号
        locDetl.setMaktx(matCode.getMatName()); // 产品描述
        locDetl.setLgnum(matCode.getStr2()); // 规格
        locDetl.setColor(matCode.getStr3()); // 助记码
        locDetl.setBname(matCode.getStr4()); // 库位名称
        locDetl.setAltme(matCode.getStr1()); // 单位
        locDetl.setMatNo(matCode.getMatNo()); // 产品编号
        locDetl.setMatName(matCode.getMatName()); // 产品描述
        locDetl.setSpecs(matCode.getSpecs()); // 规格
        locDetl.setUnit(matCode.getUnit()); // 单位
        locDetl.setSize(matCode.getSize()); // 尺寸
        locDetl.setColor(matCode.getColor()); // 颜色
        locDetl.setWeight(matCode.getWeight()); // 单重
    }
    public static void setLocDetl(LocDetl locDetl, WrkDetl wrkDetl) {
        locDetl.setMatnr(wrkDetl.getMatnr()); // 产品编号
        locDetl.setMaktx(wrkDetl.getMaktx()); // 产品描述
        locDetl.setLgnum(wrkDetl.getLgnum()); // 规格
        locDetl.setColor(wrkDetl.getColor()); // 助记码
        locDetl.setBname(wrkDetl.getBname()); // 库位名称
        locDetl.setAnfme(wrkDetl.getAnfme()); // 数量
        locDetl.setAltme(wrkDetl.getAltme()); // 单位
        locDetl.setMatNo(wrkDetl.getMatNo()); // 产品编号
        locDetl.setMatName(wrkDetl.getMatName()); // 产品描述
        locDetl.setSpecs(wrkDetl.getSpecs()); // 规格
        locDetl.setUnit(wrkDetl.getUnit()); // 单位
        locDetl.setSize(wrkDetl.getSize()); // 尺寸
        locDetl.setColor(wrkDetl.getColor()); // 颜色
        locDetl.setQty(wrkDetl.getQty()); // 数量
        locDetl.setZpallet(wrkDetl.getZpallet()); // 托盘条码
    }
    public static void setWaitPakIn(WaitPakin waitPakIn, MatCode matCode) {
        waitPakIn.setMatnr(matCode.getMatNo()); // 产品编号
        waitPakIn.setMaktx(matCode.getMatName()); // 产品描述
        waitPakIn.setLgnum(matCode.getStr2()); // 规格
        waitPakIn.setColor(matCode.getStr3()); // 助记码
        waitPakIn.setAltme(matCode.getStr1()); // 单位
        waitPakIn.setBname(matCode.getStr4()); // 库位名称
        waitPakIn.setMatNo(matCode.getMatNo()); // 产品编号
        waitPakIn.setMatName(matCode.getMatName()); // 产品描述
        waitPakIn.setSpecs(matCode.getSpecs()); // 规格
        waitPakIn.setUnit(matCode.getUnit()); // 单位
        waitPakIn.setSize(matCode.getSize()); // 尺寸
        waitPakIn.setColor(matCode.getColor()); // 颜色
        waitPakIn.setWeight(matCode.getWeight()); // 单重
    }
    // excel ----------------------------------------------------------------------
src/main/java/com/zy/common/CodeBuilder.java
@@ -15,11 +15,11 @@
//        generator.password="xltys1995";
//        generator.table="sys_host";
        // sqlserver
        generator.url="127.0.0.1:1433;databasename=jsasrs";
        generator.url="127.0.0.1:1433;databasename=whthasrs";
        generator.username="sa";
        generator.password="sa@123";
        generator.table="asr_bas_plcerror";
        generator.packagePath="com.zy.asrs";
        generator.table="ints_wait_matin";
        generator.packagePath="com.zy.ints";
        generator.build();
    }
src/main/java/com/zy/common/model/MobileLocDetlVo.java
@@ -7,9 +7,9 @@
    
    private String locNo;
    private String matnr;
    private String matNo;
    private String maktx;
    private String matName;
    private Double count;
@@ -23,20 +23,20 @@
        this.locNo = locNo;
    }
    public String getMatnr() {
        return matnr;
    public String getMatNo() {
        return matNo;
    }
    public void setMatnr(String matnr) {
        this.matnr = matnr;
    public void setMatNo(String matNo) {
        this.matNo = matNo;
    }
    public String getMaktx() {
        return maktx;
    public String getMatName() {
        return matName;
    }
    public void setMaktx(String maktx) {
        this.maktx = maktx;
    public void setMatName(String matName) {
        this.matName = matName;
    }
    public Double getCount() {
src/main/java/com/zy/common/model/OutLocDto.java
@@ -50,7 +50,7 @@
        int sameNumber = 0;
        for (LocDetl locDetl : locDetls) {
            for (LocDetlDto dto : this.locDetlDtos) {
                if (dto.getLocDetl().getMatnr().equals(locDetl.getMatnr()) && dto.getCount().equals(locDetl.getAnfme())) {
                if (dto.getLocDetl().getMatNo().equals(locDetl.getMatNo()) && dto.getCount().equals(locDetl.getQty())) {
                    sameNumber++;
                    break;
                }
src/main/resources/UpdateThread.cs
File was deleted
src/main/resources/mapper/LocDetlMapper.xml
@@ -5,16 +5,17 @@
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.LocDetl">
        <result column="loc_no" property="locNo" />
        <result column="matnr" property="matnr" />
        <result column="maktx" property="maktx" />
        <result column="lgnum" property="lgnum" />
        <result column="type" property="type" />
        <result column="mat_no" property="matNo" />
        <result column="mat_name" property="matName" />
        <result column="specs" property="specs" />
        <result column="size" property="size" />
        <result column="color" property="color" />
        <result column="weight" property="weight" />
        <result column="supplier" property="supplier" />
        <result column="warehouse" property="warehouse" />
        <result column="brand" property="brand" />
        <result column="anfme" property="anfme" />
        <result column="altme" property="altme" />
        <result column="qty" property="qty" />
        <result column="unit" property="unit" />
        <result column="zpallet" property="zpallet" />
        <result column="bname" property="bname" />
        <result column="memo" property="memo" />
@@ -28,17 +29,17 @@
        <if test="loc_no!=null and loc_no!='' ">
            and a.loc_no like '%' + #{loc_no} + '%'
        </if>
        <if test="matnr!=null and matnr!='' ">
            and a.matnr like '%' + #{matnr} + '%'
        <if test="mat_no!=null and mat_no!='' ">
            and a.mat_no like '%' + #{mat_no} + '%'
        </if>
        <if test="maktx!=null and maktx!='' ">
            and a.maktx like '%' + #{maktx} + '%'
        <if test="mat_name!=null and mat_name!='' ">
            and a.mat_name like '%' + #{mat_name} + '%'
        </if>
        <if test="anfme!=null and anfme!='' ">
            and a.anfme like '%' + #{anfme} + '%'
        <if test="qty!=null and qty!='' ">
            and a.qty = #{qty}
        </if>
        <if test="altme!=null and altme!='' ">
            and a.altme like '%' + #{altme} + '%'
            and a.unit like '%' + #{unit} + '%'
        </if>
        <if test="startTime!=null and endTime!=null">
            and a.modi_time between #{startTime} and #{endTime}
@@ -49,7 +50,7 @@
        select * from
        (
            select
            ROW_NUMBER() over (order by a.appe_time,a.matnr,a.loc_no) as row,
            ROW_NUMBER() over (order by a.appe_time,a.mat_no,a.loc_no) as row,
            a.*
            from asr_loc_detl a
            left join asr_loc_mast b on a.loc_no = b.loc_no
src/main/resources/mapper/ViewStayTimeMapper.xml
@@ -8,8 +8,8 @@
        <if test="loc_no!=null and loc_no!='' ">
            and loc_no like '%' + #{loc_no} + '%'
        </if>
        <if test="matnr!=null and matnr!='' ">
            and matnr like '%' + #{matnr} + '%'
        <if test="mat_no!=null and mat_no!='' ">
            and mat_no like '%' + #{mat_no} + '%'
        </if>
        <if test="stay_time!=null and stay_time!='' ">
            and stay_time > #{stay_time}
@@ -17,17 +17,15 @@
<!--         <if test="appe_time!=null and appe_time!='' "> -->
<!--             and appe_time > #{appe_time} -->
<!--         </if> -->
        <if test="maktx!=null and maktx!='' ">
            and (maktx like '%' + #{maktx} + '%'
            or lgnum like '%' + #{maktx} + '%'
            or tbnum like '%' + #{maktx} + '%'
            or tbpos like '%' + #{maktx} + '%'
            or zmatid like '%' + #{maktx} + '%'
            or werks like '%' + #{maktx} + '%'
            or anfme like '%' + #{maktx} + '%'
            or altme like '%' + #{maktx} + '%'
            or zpallet like '%' + #{maktx} + '%'
            or bname like '%' + #{maktx} + '%'
        <if test="mat_name!=null and mat_name!='' ">
            and (mat_name like '%' + #{mat_name} + '%'
            or specs like '%' + #{mat_name} + '%'
            or size like '%' + #{mat_name} + '%'
            or color like '%' + #{mat_name} + '%'
            or weight like '%' + #{mat_name} + '%'
            or qty like '%' + #{qty} + '%'
            or unit like '%' + #{mat_name} + '%'
            or zpallet like '%' + #{mat_name} + '%'
            )
        </if>
        <if test="begin_date!=null and begin_date!='' ">
@@ -45,7 +43,7 @@
<!-- 分页查询所有信息 -->
<select id="queryViewStayTimeList" parameterType="com.zy.asrs.entity.ViewStayTimeBean" resultType="com.zy.asrs.entity.ViewStayTimeBean">
select * from ( 
select *,ROW_NUMBER() OVER(Order by appe_time,loc_no,matnr) as rowid
select *,ROW_NUMBER() OVER(Order by appe_time,loc_no,mat_no) as rowid
 from asr_stk_staytime_view
<where>
    1=1
src/main/resources/mapper/ViewWorkInMapper.xml
@@ -8,22 +8,19 @@
        <if test="loc_no!=null and loc_no!='' ">
            and loc_no like '%' + #{loc_no} + '%'
        </if>
        <if test="matnr!=null and matnr!='' ">
            and matnr like '%' + #{matnr} + '%'
        <if test="mat_no!=null and mat_no!='' ">
            and mat_no like '%' + #{mat_no} + '%'
        </if>
        <if test="maktx!=null and maktx!='' ">
            and (maktx like '%' + #{maktx} + '%'
            or matnr like '%' + #{maktx} + '%'
            or lgnum like '%' + #{maktx} + '%'
            or tbnum like '%' + #{maktx} + '%'
            or tbpos like '%' + #{maktx} + '%'
            or zmatid like '%' + #{maktx} + '%'
            or maktx like '%' + #{maktx} + '%'
            or werks like '%' + #{maktx} + '%'
            or anfme like '%' + #{maktx} + '%'
            or altme like '%' + #{maktx} + '%'
            or zpallet like '%' + #{maktx} + '%'
            or bname like '%' + #{maktx} + '%'
        <if test="mat_name!=null and mat_name!='' ">
            and (loc_no like '%' + #{mat_name} + '%'
            or mat_name like '%' + #{mat_name} + '%'
            or specs like '%' + #{mat_name} + '%'
            or size like '%' + #{mat_name} + '%'
            or color like '%' + #{mat_name} + '%'
            or weight like '%' + #{mat_name} + '%'
            or qty like '%' + #{qty} + '%'
            or unit like '%' + #{mat_name} + '%'
            or zpallet like '%' + #{mat_name} + '%'
            )
        </if>
        <if test="begin_date!=null and begin_date!='' ">
@@ -42,22 +39,19 @@
        <if test="loc_no!=null and loc_no!='' ">
            and loc_no like '%' + #{loc_no} + '%'
        </if>
        <if test="matnr!=null and matnr!='' ">
            and matnr like '%' + #{matnr} + '%'
        <if test="mat_no!=null and mat_no!='' ">
            and mat_no like '%' + #{mat_no} + '%'
        </if>
        <if test="maktx!=null and maktx!='' ">
            and (maktx like '%' + #{maktx} + '%'
            or matnr like '%' + #{maktx} + '%'
            or lgnum like '%' + #{maktx} + '%'
            or tbnum like '%' + #{maktx} + '%'
            or tbpos like '%' + #{maktx} + '%'
            or zmatid like '%' + #{maktx} + '%'
            or maktx like '%' + #{maktx} + '%'
            or werks like '%' + #{maktx} + '%'
            or anfme like '%' + #{maktx} + '%'
            or altme like '%' + #{maktx} + '%'
            or zpallet like '%' + #{maktx} + '%'
            or bname like '%' + #{maktx} + '%'
        <if test="mat_name!=null and mat_name!='' ">
            and (loc_no like '%' + #{mat_name} + '%'
            or mat_name like '%' + #{mat_name} + '%'
            or specs like '%' + #{mat_name} + '%'
            or size like '%' + #{mat_name} + '%'
            or color like '%' + #{mat_name} + '%'
            or weight like '%' + #{mat_name} + '%'
            or qty like '%' + #{qty} + '%'
            or unit like '%' + #{mat_name} + '%'
            or zpallet like '%' + #{mat_name} + '%'
            )
        </if>
        <if test="begin_date!=null and begin_date!='' ">
src/main/resources/mapper/WaitPakinLogMapper.xml
@@ -4,16 +4,16 @@
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.WaitPakinLog">
        <result column="matnr" property="matnr" />
        <result column="maktx" property="maktx" />
        <result column="lgnum" property="lgnum" />
        <result column="type" property="type" />
        <result column="mat_no" property="matNo" />
        <result column="mat_name" property="matName" />
        <result column="specs" property="specs" />
        <result column="size" property="size" />
        <result column="color" property="color" />
        <result column="supplier" property="supplier" />
        <result column="warehouse" property="warehouse" />
        <result column="brand" property="brand" />
        <result column="anfme" property="anfme" />
        <result column="altme" property="altme" />
        <result column="qty" property="qty" />
        <result column="unit" property="unit" />
        <result column="zpallet" property="zpallet" />
        <result column="bname" property="bname" />
        <result column="loc_no" property="locNo" />
src/main/resources/mapper/WaitPakinMapper.xml
@@ -4,16 +4,16 @@
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.WaitPakin">
        <result column="matnr" property="matnr" />
        <result column="maktx" property="maktx" />
        <result column="lgnum" property="lgnum" />
        <result column="type" property="type" />
        <result column="mat_no" property="matNo" />
        <result column="mat_name" property="matName" />
        <result column="specs" property="specs" />
        <result column="size" property="size" />
        <result column="color" property="color" />
        <result column="supplier" property="supplier" />
        <result column="warehouse" property="warehouse" />
        <result column="brand" property="brand" />
        <result column="anfme" property="anfme" />
        <result column="altme" property="altme" />
        <result column="qty" property="qty" />
        <result column="unit" property="unit" />
        <result column="zpallet" property="zpallet" />
        <result column="bname" property="bname" />
        <result column="loc_no" property="locNo" />
src/main/resources/mapper/WrkDetlLogMapper.xml
@@ -6,16 +6,17 @@
    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.WrkDetlLog">
        <result column="wrk_no" property="wrkNo" />
        <result column="io_time" property="ioTime" />
        <result column="matnr" property="matnr" />
        <result column="maktx" property="maktx" />
        <result column="lgnum" property="lgnum" />
        <result column="type" property="type" />
        <result column="mat_no" property="matNo" />
        <result column="mat_name" property="matName" />
        <result column="specs" property="specs" />
        <result column="size" property="size" />
        <result column="color" property="color" />
        <result column="supplier" property="supplier" />
        <result column="warehouse" property="warehouse" />
        <result column="weight" property="weight" />
        <result column="bill_no" property="billNo" />
        <result column="seq_no" property="seqNo" />
        <result column="brand" property="brand" />
        <result column="anfme" property="anfme" />
        <result column="altme" property="altme" />
        <result column="qty" property="qty" />
        <result column="unit" property="unit" />
        <result column="zpallet" property="zpallet" />
        <result column="bname" property="bname" />
        <result column="memo" property="memo" />
src/main/resources/mapper/WrkDetlMapper.xml
@@ -6,16 +6,17 @@
    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.WrkDetl">
        <result column="wrk_no" property="wrkNo" />
        <result column="io_time" property="ioTime" />
        <result column="matnr" property="matnr" />
        <result column="maktx" property="maktx" />
        <result column="lgnum" property="lgnum" />
        <result column="type" property="type" />
        <result column="mat_no" property="matNo" />
        <result column="mat_name" property="matName" />
        <result column="specs" property="specs" />
        <result column="size" property="size" />
        <result column="color" property="color" />
        <result column="supplier" property="supplier" />
        <result column="warehouse" property="warehouse" />
        <result column="weight" property="weight" />
        <result column="bill_no" property="billNo" />
        <result column="seq_no" property="seqNo" />
        <result column="brand" property="brand" />
        <result column="anfme" property="anfme" />
        <result column="altme" property="altme" />
        <result column="qty" property="qty" />
        <result column="unit" property="unit" />
        <result column="zpallet" property="zpallet" />
        <result column="bname" property="bname" />
        <result column="memo" property="memo" />
@@ -26,8 +27,8 @@
    </resultMap>
    <select id="queryWrkDetl" resultMap="BaseResultMap">
        select a.wrk_no, a.matnr, a.maktx, a.anfme
        select a.wrk_no, a.mat_no, a.mat_name, a.qty
        from asr_wrk_detl a left join asr_wrk_mast b on a.wrk_no = b.wrk_no
        where 1=1 and a.matnr = #{matnr,jdbcType=VARCHAR} and (b.loc_no = #{locNo,jdbcType=VARCHAR} or b.source_loc_no = #{locNo,jdbcType=VARCHAR})
        where 1=1 and a.mat_no = #{matNo,jdbcType=VARCHAR} and (b.loc_no = #{locNo,jdbcType=VARCHAR} or b.source_loc_no = #{locNo,jdbcType=VARCHAR})
    </select>
</mapper>
src/main/webapp/static/css/admin.css
New file
@@ -0,0 +1,2 @@
/** EasyWeb iframe v3.1.8 date:2020-05-04 License By http://easyweb.vip */
*{font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif}body{color:#595959;background-color:#f5f7f9}.layui-layout-body{overflow:auto}.layui-layout-admin{position:absolute;top:0;left:0;right:0;bottom:0;overflow:hidden;-webkit-transition:left .3s,right .3s;transition:left .3s,right .3s}.layui-layout-admin .layui-header{position:absolute;top:0;left:0;right:0;height:50px;background-color:#fff;box-shadow:0 1px 0 0 rgba(0,0,0,.03);z-index:999}.layui-layout-admin .layui-header .layui-logo{color:#ddd;width:235px;line-height:50px;background-color:#191a23;box-shadow:1px 2px 2px 0 rgba(0,0,0,.05);position:relative;vertical-align:top;white-space:nowrap;display:inline-block;-webkit-transition:width .3s;transition:width .3s;overflow:hidden}.layui-layout-admin .layui-header .layui-logo img{height:28px;vertical-align:middle}.layui-layout-admin .layui-header .layui-logo cite{font-style:normal;vertical-align:middle}.layui-layout-admin .layui-header .layui-layout-left{padding:0;vertical-align:top;display:inline-block;position:static!important}.layui-layout-admin .layui-header .layui-layout-right{padding:0}.layui-layout-admin .layui-header .layui-nav .layui-this:after,.layui-layout-admin .layui-header .layui-nav-bar{height:2px;top:0!important;background-color:#191a23}.layui-layout-admin .layui-header .layui-nav .layui-nav-item{line-height:50px;vertical-align:top}.layui-layout-admin .layui-header .layui-nav .layui-nav-item .layui-nav-child{top:55px}.layui-layout-admin .layui-header .layui-nav-item .layui-icon{font-size:16px}.layui-layout-admin .layui-header a{color:#595959;padding:0 15px;cursor:pointer}.layui-layout-admin .layui-header a:hover{color:#595959}.layui-layout-admin .layui-header .layui-nav-child a{color:#595959;text-align:center}.layui-layout-admin .layui-header .layui-nav .layui-nav-more{border-color:#8c8c8c transparent transparent}.layui-layout-admin .layui-header .layui-nav .layui-nav-mored{border-color:transparent transparent #8c8c8c}.layui-layout-admin .layui-header .layui-nav-img{width:26px;height:26px;margin-right:2px;vertical-align:middle}.layui-layout-admin .layui-header .layui-nav-img+cite{margin-right:3px;vertical-align:middle}.layui-layout-admin .layui-header .layui-badge-dot{right:8px;margin:-10px 0 0 0}.layui-layout-admin .layui-body{position:absolute;left:235px;top:50px;z-index:auto;overflow:auto;-webkit-transition:left .3s;transition:left .3s;-webkit-overflow-scrolling:touch}.admin-iframe{position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%}.layui-fluid{padding:15px}.layui-layout-admin .layui-footer{position:absolute;left:235px;background:#fff;box-sizing:border-box;border-top:1px solid #f5f7f9;-webkit-transition:left .3s;transition:left .3s;overflow:hidden}.close-footer .layui-layout-admin .layui-footer{display:none}.close-footer .layui-layout-admin .layui-body{bottom:0}.layui-layout-admin .layui-side{position:absolute;top:50px;width:235px;background-color:#191a23;box-shadow:1px 2px 2px 0 rgba(0,0,0,.05);-webkit-transition:width .3s;transition:width .3s;-webkit-user-select:none;user-select:none;z-index:1000}.layui-layout-admin .layui-side .layui-side-scroll{width:255px;-webkit-transition:width .3s;transition:width .3s}.layui-layout-admin .layui-side .layui-nav{width:235px;background-color:transparent;-webkit-transition:width .3s;transition:width .3s}.layui-layout-admin .layui-side>.layui-side-scroll>.layui-nav:first-child{margin-top:10px}.layui-layout-admin .layui-side .layui-nav .layui-nav-item>a{cursor:pointer;padding-top:5px;padding-bottom:5px}.layui-layout-admin .layui-side .layui-nav .layui-nav-item a{-webkit-transition:color .3s,background-color .3s;transition:color .3s,background-color .3s}.layui-layout-admin .layui-side .layui-nav .layui-nav-more{right:15px}.layui-layout-admin .layui-side .layui-nav .layui-nav-item>.layui-nav-child{position:static}.layui-layout-admin .layui-side .layui-nav .layui-nav-item .layui-nav-child a{padding-left:50px;cursor:pointer}.layui-layout-admin .layui-side .layui-nav .layui-nav-item .layui-nav-child .layui-nav-child a{padding-left:70px}.layui-layout-admin .layui-side .layui-nav .layui-nav-item .layui-nav-child .layui-nav-child .layui-nav-child a{padding-left:90px}.layui-layout-admin .layui-side .layui-nav .layui-nav-item .layui-nav-child .layui-nav-child .layui-nav-child .layui-nav-child a{padding-left:110px}@media screen and (min-width:769px){.layui-layout-admin.admin-nav-mini .layui-header .layui-logo{width:60px}.layui-layout-admin.admin-nav-mini .layui-header .layui-logo cite{display:none}.layui-layout-admin.admin-nav-mini .layui-header .layui-icon-shrink-right:before{content:"\e66b"}.layui-layout-admin.admin-nav-mini .layui-body,.layui-layout-admin.admin-nav-mini .layui-footer{left:60px}.layui-layout-admin.admin-nav-mini .layui-side,.layui-layout-admin.admin-nav-mini .layui-side .layui-nav{width:60px}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-item>a{overflow:visible}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-item>a>cite,.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-item>a .layui-nav-more,.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-itemed>.layui-nav-child{display:none!important}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav li.layui-nav-itemed>a{background:rgba(0,0,0,.3)}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-item>a>.layui-icon{font-size:16px;-webkit-transition:font-size .3s;transition:font-size .3s}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child{position:fixed;top:60px;left:60px;padding:5px;min-width:150px;display:block!important;background:transparent!important}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child:before{content:'';position:absolute;right:5px;left:5px;bottom:0;top:0;border-radius:4px;background:#191a23;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child dd:first-child>.layui-nav-child{margin-top:-5px}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child dd:last-child>.layui-nav-child.show-top{margin-top:5px}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child>dd>a{padding:0 20px!important}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child>dd>a .layui-nav-more{border-color:transparent transparent transparent rgba(255,255,255,.7);right:7px;margin-top:-6px}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav.arrow2 .admin-nav-hover>.layui-nav-child>dd>a .layui-nav-more,.layui-layout-admin.admin-nav-mini .layui-side .layui-nav.arrow3 .admin-nav-hover>.layui-nav-child>dd>a .layui-nav-more{-o-transform:rotate(0deg);-ms-transform:rotate(0deg);-moz-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg);width:6px;height:10px;right:10px;margin-top:-5px;font-weight:600}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav.arrow2 .admin-nav-hover>.layui-nav-child>dd>a .layui-nav-more:before,.layui-layout-admin.admin-nav-mini .layui-side .layui-nav.arrow3 .admin-nav-hover>.layui-nav-child>dd>a .layui-nav-more:before{content:"\e602";left:-4px;top:-2px}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav.arrow3 .admin-nav-hover>.layui-nav-child>dd>a .layui-nav-more:before{-o-transform:rotate(0deg);-ms-transform:rotate(0deg);-moz-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@media screen and (max-width:768px){.layui-layout-admin{left:-235px}.layui-layout-admin .layui-side,.layui-layout-admin .layui-header .layui-logo{box-shadow:none!important}.layui-layout-admin .layui-header .layui-icon-shrink-right:before{content:"\e66b"}.layui-layout-admin.admin-nav-mini{left:0;right:-235px;position:fixed}.layui-layout-admin.admin-nav-mini .layui-header .layui-icon-shrink-right:before{content:"\e668"}.layui-layout-admin.admin-nav-mini .layui-side,.layui-layout-admin.admin-nav-mini .layui-header .layui-logo{box-shadow:1px 0 2px 0 rgba(0,0,0,.05)}.layui-layout-admin.admin-nav-mini .site-mobile-shade{position:absolute;top:0;right:0;bottom:0;left:235px;background-color:rgba(0,0,0,.25);-webkit-transition:background-color .3s;transition:background-color .3s;cursor:pointer;z-index:1000}}.ew-anim-drop-in{-webkit-animation:ewTransitionDropIn .3s ease-in-out;animation:ewTransitionDropIn .3s ease-in-out;-webkit-transform-origin:0 0;transform-origin:0 0}@-webkit-keyframes ewTransitionDropIn{from{opacity:0;-webkit-transform:scale(0.8)}to{opacity:1;-webkit-transform:scale(1)}}@keyframes ewTransitionDropIn{from{opacity:0;transform:scale(0.8)}to{opacity:1;transform:scale(1)}}.layui-nav-tree .layui-nav-bar{display:none}.layui-nav-tree>.layui-nav-item>a:before{content:"";position:absolute;top:0;left:0;bottom:100%;width:4px;background-color:#009688;-webkit-transition:all .3s ease;transition:all .3s ease}.layui-nav-tree>.layui-nav-item:hover>a:before{bottom:0}.layui-nav-tree .layui-nav-item a:hover{background-color:transparent}.layui-nav-tree .layui-this>a:hover{background-color:#009688}.layui-nav-tree .layui-nav-child dd.layui-this,.layui-nav-tree .layui-this{background:transparent}.layui-nav-tree .layui-nav-item .layui-nav-child{padding:5px 0;background-color:rgba(0,0,0,.3)!important}.layui-nav-tree.arrow2 .layui-nav-more{font-family:layui-icon!important;font-size:12px;font-weight:600;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow:hidden;line-height:normal;border:0;margin:-3px 0 0 0;padding:0;width:10px;height:6px;top:50%;display:inline-block;-webkit-transition:all .3s ease;transition:all .3s ease}.layui-nav-tree.arrow2 .layui-nav-more:before{content:"\e61a";position:absolute;right:-1px;top:-4px}.layui-nav-tree.arrow2 .layui-nav-itemed>a>.layui-nav-more{-ms-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-webkit-transform:rotate(-180deg);-o-transform:rotate(-180deg);transform:rotate(-180deg)}.layui-nav-tree.arrow3 .layui-nav-more{font-family:layui-icon!important;font-size:12px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow:hidden;line-height:normal;border:0;margin:-5px 0 0 0;padding:0;width:10px;height:10px;top:50%;display:inline-block;-webkit-transition:all .3s ease;transition:all .3s ease}.layui-nav-tree.arrow3 .layui-nav-more:before{content:"\e654";position:absolute;top:-2px;left:-1px}.layui-nav-tree.arrow3 .layui-nav-itemed>a>.layui-nav-more{-ms-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-webkit-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}.layui-nav-tree.arrow3 .layui-nav-itemed>a>.layui-nav-more:before{content:'';width:8px;height:2px;background-color:rgba(255,255,255,.7);top:4px;left:1px;-ms-transform:rotate(45deg);-moz-transform:rotate(45deg);-webkit-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.layui-layout-admin .layui-body>.layui-tab{position:absolute;top:0;left:0;right:0;bottom:0;margin:0}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-content{position:absolute;left:0;right:0;bottom:0;top:40px;padding:0}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-content>.layui-tab-item{position:absolute;bottom:0;right:0;top:0;left:0;overflow:auto;-webkit-overflow-scrolling:touch;display:block;visibility:hidden;opacity:0;filter:Alpha(opacity=0)}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-content>.layui-tab-item.layui-show{visibility:visible;opacity:1;filter:Alpha(opacity=100)}.layui-layout-admin.admin-side-flexible .layui-body>.layui-tab>.layui-tab-content>.layui-tab-item{display:none}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-title{height:40px;line-height:40px;padding:0 80px 0 40px;background-color:#fff;box-shadow:0 1px 2px 0 rgba(0,0,0,.1);position:absolute;top:0;left:0;right:0;border:0;overflow:hidden;-webkit-transition:none;transition:none;z-index:998}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li{min-width:auto;max-width:160px;line-height:40px;padding:0 30px 0 15px;border-right:1px solid #f6f6f6;overflow:hidden;text-overflow:ellipsis;vertical-align:top;-webkit-transition:background-color .2s;transition:background-color .2s}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this,.layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li:hover{background-color:#f6f6f6}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this:after{height:2px;border:0;border-radius:0;background-color:#191a23}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li:first-child{padding:0 15px}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li cite{font-style:normal}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-title .layui-tab-bar{display:none}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li .layui-tab-close{width:16px;height:16px;line-height:16px;font-size:12px;border-radius:50%;position:absolute;top:12px;right:8px;-webkit-transition:background-color .2s,color .2s;transition:background-color .2s,color .2s}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li:first-child .layui-tab-close{display:none}.admin-tabs-control{position:absolute;top:0;width:40px;height:40px;line-height:40px;background-color:#fff;border-left:1px solid #f6f6f6;-webkit-transition:background-color .2s;transition:background-color .2s;text-align:center;cursor:pointer;z-index:998}.admin-tabs-control:hover{background-color:#f6f6f6}.admin-tabs-control.layui-icon-prev{left:0;border-left:none;border-right:1px solid #f6f6f6}.admin-tabs-control.layui-icon-next{right:40px}.admin-tabs-control.layui-icon-down{right:0}.admin-tabs-control>.layui-nav,.admin-tabs-control>.layui-nav .layui-nav-item{position:absolute;top:0;left:0;padding:0;width:100%;height:100%;background:transparent}.admin-tabs-control>.layui-nav .layui-nav-child{right:0;top:40px;left:auto}.admin-tabs-control>.layui-nav .layui-nav-child a{color:#595959}.admin-tabs-control>.layui-nav .layui-nav-bar,.admin-tabs-control>.layui-nav .layui-nav-more{display:none}.layui-body-header{padding:0 20px;height:40px;line-height:40px;background-color:#fff;box-shadow:0 1px 2px 0 rgba(0,0,0,.1);box-sizing:border-box;position:absolute;left:0;right:0;z-index:998;display:none}.layui-body-header.show{display:block}.layui-body-header-title{padding-left:6px;border-left:4px solid #009688}.layui-body-header.show+div{position:absolute;left:0;right:0;top:40px;bottom:0;overflow:auto;-webkit-overflow-scrolling:touch}.hide-body-title .layui-body-header.show{display:none}.hide-body-title .layui-body-header.show+div{top:0}.layui-layout-admin .layui-body>.page-loading,.layui-layout-admin .layui-body>.layui-tab>.layui-tab-content>.layui-tab-item>.page-loading,.layui-layout-admin .layui-body>div>iframe[lay-id]+.page-loading{z-index:997}.layui-layer.layui-layer-adminRight{bottom:0;top:50px!important;border:none!important;box-shadow:1px 1px 50px rgba(0,0,0,.3)!important;overflow:auto}.layui-layer.layui-layer-adminRight>.layui-layer-content,.layui-layer.layui-layer-adminRight>.layui-layer-content>iframe{height:100%!important}.layui-layer.layui-layer-adminRight>.layui-layer-title+.layui-layer-content{position:absolute;top:43px;left:0;right:0;bottom:0;height:auto!important}.layui-anim-rl{-webkit-animation-name:layui-rl;animation-name:layui-rl}@-webkit-keyframes layui-rl{from{-webkit-transform:translate3d(100%,0,0)}to{-webkit-transform:translate3d(0,0,0)}}@keyframes layui-rl{from{transform:translate3d(100%,0,0)}to{transform:translate3d(0,0,0)}}.layui-anim-lr,.layui-anim-rl.layer-anim-close{-webkit-animation-name:layui-lr;animation-name:layui-lr}@-webkit-keyframes layui-lr{from{-webkit-transform:translate3d(0,0,0);opacity:1}to{-webkit-transform:translate3d(100%,0,0);opacity:1}}@keyframes layui-lr{from{transform:translate3d(0,0,0)}to{transform:translate3d(100%,0,0)}}.layui-layer.layui-layer-admin{border:none!important;box-shadow:1px 1px 50px rgba(0,0,0,.3)!important}.layui-layer.layui-layer-admin .layui-layer-title{color:#fff;height:50px;line-height:50px;background-color:#191a23;border:0}.layui-layer.layui-layer-admin .layui-layer-setwin{top:17px}.layui-layer.layui-layer-admin .layui-layer-setwin a{color:#fff;font-size:16px;font-style:normal;font-family:layui-icon!important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-layer.layui-layer-admin .layui-layer-setwin .layui-layer-close1{background:0;margin-top:-1px}.layui-layer.layui-layer-admin .layui-layer-setwin .layui-layer-close1:before{content:"\1006"}.layui-layer.layui-layer-admin .layui-layer-setwin .layui-layer-min cite{background-color:#ddd}.layui-layer.layui-layer-admin .layui-layer-setwin .layui-layer-max{font-size:14px;padding-top:1px;background:0}.layui-layer.layui-layer-admin .layui-layer-setwin .layui-layer-max:before{content:"\e622"}.layui-layer.layui-layer-admin .layui-layer-setwin .layui-layer-maxmin:before{content:"\e758"}.layui-layer.layui-layer-admin .layui-layer-btn{padding-bottom:15px}.layui-layer.layui-layer-admin .layui-layer-btn .layui-layer-btn0{border-color:#009688;background-color:#009688}.layui-layer.layui-layer-admin .layui-layer-btn a{height:34px;line-height:34px}.layui-layer-admin{max-width:100%}.layui-layer-iframe .layui-layer-content{overflow:auto;-webkit-overflow-scrolling:touch}@media screen and (max-width:768px){.layui-layer-admin{max-width:98%;max-width:-webkit-calc(100% - 30px);max-width:-moz-calc(100% - 30px);max-width:calc(100% - 30px);width:max-content;left:0!important;right:0!important;margin:auto!important;margin-bottom:15px!important}.layui-layer-admin[area]{max-width:100%;margin-bottom:0!important}}body .layui-layer-msg{border:0;border-radius:4px;box-shadow:0 2px 12px 0 rgba(0,0,0,0.1)}body .layui-layer-load{background:transparent}.page-loading{position:absolute;display:block;width:100%;height:100%;top:0;left:0;right:0;bottom:0;z-index:19891017;background-color:#fff}body>.page-loading{position:fixed;background-color:#f5f7f9}.layui-layout-admin>.layui-body>.layui-tab>.layui-tab-content>.layui-tab-item>.page-loading,.layui-layout-admin>.layui-body>.page-loading,.layui-layout-admin>.layui-body>div>iframe[lay-id]+.page-loading{background-color:#f5f7f9}.layui-layout-admin>.layui-body>.layui-body-header.show+div+.page-loading{top:40px;height:auto}.page-no-scroll{overflow-x:hidden!important;overflow-y:hidden!important;min-height:80px}.rubik-loader,.ball-loader,.signal-loader,.layui-loader{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.ball-loader>span,.signal-loader>span{background-color:#4aca85;display:inline-block}.ball-loader>span:nth-child(1),.ball-loader.sm>span:nth-child(1),.signal-loader>span:nth-child(1),.signal-loader.sm>span:nth-child(1){-webkit-animation-delay:0s;animation-delay:0s}.ball-loader>span:nth-child(2),.ball-loader.sm>span:nth-child(2),.signal-loader>span:nth-child(2),.signal-loader.sm>span:nth-child(2){-webkit-animation-delay:.1s;animation-delay:.1s}.ball-loader>span:nth-child(3),.ball-loader.sm>span:nth-child(3),.signal-loader>span:nth-child(3),.signal-loader.sm>span:nth-child(3){-webkit-animation-delay:.15s;animation-delay:.15s}.ball-loader>span:nth-child(4),.ball-loader.sm>span:nth-child(4),.signal-loader>span:nth-child(4),.signal-loader.sm>span:nth-child(4){-webkit-animation-delay:.2s;animation-delay:.2s}.rubik-loader{width:64px;height:64px;background-image:url(img/ic_loading.gif);background-repeat:no-repeat;background-position:center;background-size:contain}.rubik-loader.sm{width:50px;height:50px}.ball-loader>span{width:20px;height:20px;margin:0 3px;border-radius:50%;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-animation:1s ball-load ease-in-out infinite;animation:ball-load 1s ease-in-out infinite}@-webkit-keyframes ball-load{0%{-webkit-transform:scale(0)}50%{-webkit-transform:scale(1)}100%{-webkit-transform:scale(0)}}@keyframes ball-load{0%{transform:scale(0)}50%{transform:scale(1)}100%{transform:scale(0)}}.ball-loader.sm>span{width:15px;height:15px;margin:0 2px}.signal-loader{width:50px;height:22px}.signal-loader>span{width:8px;height:0;position:absolute;bottom:0;left:0;margin:0;-webkit-animation:signal-load 1s infinite;animation:signal-load 1s infinite}.signal-loader>span:nth-child(2){left:14px}.signal-loader>span:nth-child(3){left:28px}.signal-loader>span:nth-child(4){left:42px}@-webkit-keyframes signal-load{0%{height:0}50%{height:22px}100%{height:0}}@keyframes signal-load{0%{height:0}50%{height:22px}100%{height:0}}.signal-loader.sm{width:32px;height:15px}.signal-loader.sm>span{width:5px;-webkit-animation:signal-load-sm 1s infinite;animation:signal-load-sm 1s infinite}.signal-loader.sm>span:nth-child(2){left:9px}.signal-loader.sm>span:nth-child(3){left:18px}.signal-loader.sm>span:nth-child(4){left:27px}@-webkit-keyframes signal-load-sm{0%{height:0}50%{height:15px}100%{height:0}}@keyframes signal-load-sm{0%{height:0}50%{height:15px}100%{height:0}}.layui-loader .layui-icon{font-size:36px;color:#bbb}.layui-loader.sm .layui-icon{font-size:30px}.layui-form.toolbar .layui-form-item,.layui-form.toolbar .layui-form-item .layui-inline>.layui-input-inline{margin-bottom:0}.layui-form.toolbar .layui-form-item .layui-inline{margin-bottom:10px}.toolbar+.layui-table,.layui-card-body>.layui-table,.toolbar+table+.layui-table-view,.layui-card-body>.layui-table-view,.toolbar+table+.ew-tree-table{margin:0}.mr0,.layui-form.toolbar .layui-form-item .layui-inline>.layui-input-inline{margin-right:0!important}.w-auto{width:auto!important}.model-form{padding:25px 30px 0 0}.model-form.no-padding{padding:0}.model-form .model-form-body{overflow-y:auto;padding:25px 30px 0 0;max-height:calc(100vh - 180px)}.model-form.no-padding .model-form-footer{padding-top:10px;padding-right:30px}.layui-form.model-form>.layui-form-item:last-child{margin-bottom:0;padding-bottom:20px}.layui-form-required:before{content:"*";display:inline-block;font-family:SimSun;margin-right:4px;font-size:14px;line-height:1;color:#ed4014}.layui-input,.layui-textarea{color:#595959}.layui-form-select .layui-input{padding-right:0}.layui-form-select-top .layui-form-select>dl{top:auto;bottom:42px}.ew-select-fixed .layui-form-selected dl{position:fixed;min-width:auto;bottom:auto;right:auto}body .layui-form-checked[lay-skin=primary] i,body .layui-form-checked[lay-skin=primary]:hover i{color:#fff}body .layui-form-checkbox[lay-skin=primary] span,body .layui-form-checkbox[lay-skin=primary]:hover span{background-color:transparent}body .layui-form-danger+.layui-form-select .layui-input,body .layui-input.layui-form-danger:focus,body .layui-textarea.layui-form-danger:focus{border-color:#ff5722!important}body .layui-laypage input.layui-input{height:30px;line-height:30px}body .layui-table-page .layui-laypage input.layui-input{height:26px;line-height:26px}body .layui-form-onswitch em{margin-left:3px;margin-right:18px}.layui-btn{-webkit-transition:background-color .2s;transition:background-color .2s}body .layui-btn.layui-btn-radius{border-radius:100px}.layui-btn-primary{color:#595959;border-color:#e6e6e6}.layui-btn-primary:hover{border-color:#bbb}.layui-btn-group .layui-btn-primary:hover{border-color:#e6e6e6}.layui-btn-group .layui-btn-primary:first-child{border-left:1px solid #e6e6e6}body .layui-btn.layui-btn-disabled,body .layui-transfer-active .layui-btn.layui-btn-disabled{background-color:#fbfbfb!important;border-color:#e6e6e6!important;color:#c9c9c9!important}body .layui-btn.layui-btn-primary{background-color:#fff}body .layui-btn.layui-btn-normal{background-color:#1e9fff}body .layui-btn.layui-btn-warm{background-color:#ffb800}body .layui-btn.layui-btn-danger{background-color:#ff5722}.layui-btn-group>.layui-btn+.layui-btn{border-radius:0}.layui-btn-group>.layui-btn:last-child{border-top-right-radius:2px;border-bottom-right-radius:2px}body .layui-transfer-active .layui-btn{background-color:#5fb878!important;border-color:#5fb878!important;color:#fff!important}.btn-circle{width:50px;height:50px;line-height:50px;border-radius:50%;background:#009688;position:fixed;right:15px;bottom:15px;color:#fff;text-align:center;box-shadow:0 0 8px rgba(0,0,0,.2);cursor:pointer}.btn-circle:hover{color:#fff;opacity:.8}.btn-circle .layui-icon{font-size:24px}.icon-date,.date-icon{background-image:url(img/icon_date.png);background-repeat:no-repeat;background-position:right center;padding-right:28px}.icon-search{background-image:url(img/icon_search.png);background-repeat:no-repeat;background-position:right center;padding-right:26px}span.icon-text>.layui-icon,a.icon-text>.layui-icon,.layui-form-label.icon-text>.layui-icon{font-size:14px;margin:0 2px}.layui-btn.icon-btn{padding:0 10px}.layui-btn.layui-btn-sm.icon-btn{padding:0 6px}.bg-white,html.bg-white>body{background-color:white}[ew-href],[lay-tips]{cursor:pointer}.inline-block{display:inline-block}.pull-right{float:right}.pull-left{float:left}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-primary,.layui-link{color:#009688!important}.text-success{color:#5fb878!important}.text-warning{color:#ffb800!important}.text-danger{color:#ff5722!important}.text-info{color:#01aaed!important}.text-muted{color:#c2c2c2!important}.layui-text a:not(.layui-btn){color:#2d8cf0;cursor:pointer}.layui-text a:not(.layui-btn):hover{text-decoration:none}.ew-console-wrapper .layui-card{box-shadow:none;border-radius:4px}.layui-card-header{color:#595959}.lay-big-font{font-size:36px;line-height:36px;padding:5px 0 10px;overflow:hidden;white-space:nowrap;word-break:break-all;text-overflow:ellipsis}.no-scrollbar{overflow-x:hidden!important;overflow-y:hidden!important}input.layui-disabled,input.layui-disabled:hover,textarea.layui-disabled,textarea.layui-disabled:hover{color:#595959!important;background-color:#f6f6f6}.layui-input::-webkit-input-placeholder,.layui-textarea::-webkit-input-placeholder{color:#ccc}.layui-input::-moz-placeholder,.layui-textarea::-moz-placeholder{color:#ccc}.layui-input::-ms-input-placeholder,.layui-textarea::-ms-input-placeholder{color:#ccc}.dropdown-menu{display:inline-block}.dropdown-menu .dropdown-menu-nav{display:none}.dropdown-menu+.dropdown-menu,.layui-btn+.dropdown-menu,.dropdown-menu+.layui-btn{margin-left:10px}::-webkit-scrollbar{width:10px;height:10px;background:transparent}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{border-radius:5px;background-color:#c1c1c1}::-webkit-scrollbar-thumb:hover{background-color:#a8a8a8}.mini-bar::-webkit-scrollbar{width:6px;height:6px}.mini-bar::-webkit-scrollbar-thumb{border-radius:3px}@media screen and (max-width:768px){::-webkit-scrollbar{width:4px;height:4px}::-webkit-scrollbar-thumb{border-radius:0}}#ew-map-select-map{height:450px}#ew-map-select-pois{height:450px;overflow-x:hidden;overflow-y:auto}.ew-map-select-search-list-item{padding:10px 30px 10px 15px;border-bottom:1px solid #e8e8e8;cursor:pointer;position:relative}.ew-map-select-search-list-item:hover{background:#f2f2f2}.ew-map-select-search-list-item:last-child{border-bottom:0}.ew-map-select-search-list-item .ew-map-select-search-list-item-title{font-size:14px;color:#262626}.ew-map-select-search-list-item .ew-map-select-search-list-item-address{font-size:12px;color:#595959;padding-top:5px}.ew-map-select-search-list-item-icon-ok{position:absolute;right:15px;top:50%;transform:translateY(-50%)}.ew-map-select-search-list-item-icon-ok .layui-icon{color:#3b74ff}.ew-map-select-tool{padding:5px 15px;box-shadow:0 1px 0 0 rgba(0,0,0,.05)}#ew-map-select-center-img{position:absolute;bottom:50%;left:50%;width:26px;margin-left:-13px}#ew-map-select-center-img2{position:absolute;left:50%;top:50%;font-size:12px;display:inline-block;margin-left:-6px;margin-top:-7px;color:#3b74ff}.bounceInDown{animation:bounceInDown 500ms;animation-direction:alternate;-webkit-animation:bounceInDown 500ms;-webkit-animation-direction:alternate}@-webkit-keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1)}0%,to{-webkit-transform:translate3d(0,0,0)}25%{-webkit-transform:translate3d(0,-30px,0)}50%{-webkit-transform:translate3d(0,-15px,0)}75%{-webkit-transform:translate3d(0,-4px,0)}}@keyframes bounceInDown{0%,60%,75%,90%,to{transition-timing-function:cubic-bezier(.215,.61,.355,1)}0%,to{transform:translate3d(0,0,0)}25%{transform:translate3d(0,-10px,0)}50%{transform:translate3d(0,-20px,0)}75%{transform:translate3d(0,-10px,0)}}#ew-map-select-tips{position:absolute;z-index:999;background:#fff;max-height:430px;overflow:auto;top:48px;left:56px;width:280px;box-shadow:0 2px 4px rgba(0,0,0,.12);border:1px solid #d2d2d2}#ew-map-select-tips .ew-map-select-search-list-item{padding:10px 15px 10px 35px}.ew-map-select-search-list-item-icon-search{position:absolute;left:10px;top:50%;transform:translateY(-50%)}.ew-map-select-search-list-item-icon-search .layui-icon{color:#8c8c8c}.table-tool-mini .layui-table-view{position:relative}.table-tool-mini .layui-table-tool{position:absolute;min-height:unset;height:auto;padding:3px 10px;width:auto;top:-38px;right:-1px;border-top-right-radius:8px;border-top-left-radius:8px;border:1px solid #e6e6e6;border-bottom:0}.table-tool-mini .layui-table-tool .layui-table-tool-temp{padding-right:0;display:inline-block}.table-tool-mini .layui-table-tool .layui-table-tool-self{position:static;display:inline-block}.table-tool-mini .layui-table-tool .layui-table-tool-self .layui-inline[lay-event]:first-child{margin:0}.table-tool-mini.full-table .layui-table-tool{top:-35px;height:1px;padding:0 10px;background:transparent;border:0}.table-tool-mini.full-table .layui-table-tool:before{content:"";position:absolute;top:-3px;right:0;left:0;height:36px;background-color:#f2f2f2;border-top-right-radius:8px;border-top-left-radius:8px;border:1px solid #e6e6e6;border-bottom:0}@media screen and (max-width:768px){.layui-laydate-range{left:0!important;top:0!important;right:0!important;margin:10px auto!important;max-width:95%}.layui-laydate-range .layui-laydate-main,.layui-laydate-range .layui-laydate-content table{width:100%}.layui-laydate-range .laydate-main-list-0 .laydate-next-m,.layui-laydate-range .laydate-main-list-0 .laydate-next-y,.layui-laydate-range .laydate-main-list-1 .laydate-prev-m,.layui-laydate-range .laydate-main-list-1 .laydate-prev-y{display:inline-block!important}.layui-laydate-range .laydate-main-list-1 .layui-laydate-header{border-top:1px solid #e2e2e2}.layui-laydate-range .laydate-main-list-1 .layui-laydate-content{border-left:none!important}.layui-laydate-range .laydate-time-list ol li{padding-left:0!important;text-align:center}.layui-laydate-range .laydate-time-list ol{overflow:auto!important}}.layui-tree-spread>div>div>span>.layui-tree-iconArrow:after{border-color:#c0c4cc transparent transparent transparent;top:6px;left:0}.layui-tree .layui-tree-iconArrow:after{transition:none}.ew-tb-cell-ck .layui-form-checkbox[lay-skin=primary]{padding-left:22px}.ew-tb-cell-ck .layui-form-checkbox[lay-skin=primary] span{padding-right:5px}.ew-field-group>.layui-elem-field{border-bottom:0;margin:0}.ew-field-group>.ew-field-box{border:1px solid #e6e6e6;padding:10px 15px;border-top:0}body .layui-elem-quote.layui-quote-nm{border-color:#e6e6e6}.layui-card>.layui-tab-brief>.layui-tab-title li{padding:0 5px;margin:0 10px;line-height:43px;height:43px;transition:color .2s;-webkit-transition:color .2s}.layui-card>.layui-tab-brief>.layui-tab-title li:after{height:43px}.layui-card>.layui-tab-brief>.layui-tab-title{border-bottom-color:#f6f6f6;height:42px;transition:none;-webkit-transition:none}.layui-card>.layui-tab-brief>.layui-tab-content{padding:10px 15px}.layui-tab.layui-tab-vertical{position:relative}.layui-tab.layui-tab-vertical:after{content:"";clear:both;display:block}.layui-tab.layui-tab-vertical>.layui-tab-title{width:130px;height:auto;border:0;border-right:1px solid #e9e9e9;box-sizing:border-box;padding:10px 0;float:left}.layui-tab.layui-tab-vertical>.layui-tab-title>li{display:block;margin-right:-1px;border-right:2px solid transparent;white-space:normal;line-height:normal;padding:10px 20px;text-align:right}.layui-tab.layui-tab-vertical>.layui-tab-title>li.layui-this{border-right:2px solid #5fb878;color:#5fb878}.layui-tab.layui-tab-vertical>.layui-tab-title>li.layui-this:after{display:none}.layui-tab.layui-tab-vertical>.layui-tab-title>li>.layui-icon{font-size:14px;margin-right:5px}.layui-tab.layui-tab-vertical>.layui-tab-content{margin-left:130px}.layui-tab.layui-tab-vertical.layui-tab-vertical-right>.layui-tab-title{float:right;border-right:0;border-left:1px solid #e9e9e9}.layui-tab.layui-tab-vertical.layui-tab-vertical-right>.layui-tab-content{margin-left:0;margin-right:130px}.layui-tab.layui-tab-vertical.layui-tab-vertical-right>.layui-tab-title>li{text-align:left;border-left:2px solid transparent;border-right:0}.layui-tab.layui-tab-vertical.layui-tab-vertical-right>.layui-tab-title>li.layui-this{border-left:2px solid #5fb878}.layui-tab.layui-tab-vertical.layui-tab-vertical-full>.layui-tab-title{position:absolute;top:0;left:0;right:auto;min-height:100%}.layui-tab.layui-tab-vertical.layui-tab-vertical-right.layui-tab-vertical-full>.layui-tab-title{right:0;left:auto}.ew-btn-loading{opacity:.8;pointer-events:none;font-size:0!important}.ew-btn-loading *{display:none!important}.ew-btn-loading>.ew-btn-loading-text{font-size:14px!important;display:inline-block!important}.ew-btn-loading.layui-btn-sm>.ew-btn-loading-text,.ew-btn-loading.layui-btn-xs>.ew-btn-loading-text{font-size:12px!important}.ew-btn-loading.layui-btn-lg>.ew-btn-loading-text{font-size:16px!important}.ew-btn-loading>.ew-btn-loading-text *{display:inline-block!important}.form-search-expand,.form-search-expand:hover{padding:0!important;color:#2d8cf0!important;border:none!important;box-shadow:none!important;background-color:transparent!important}.form-search-expand .layui-icon{font-size:12px!important;font-weight:600!important}.form-search-show-expand{display:none!important}.layui-badge-green{color:#52c41a;background:#f6ffed;border:1px solid #b7eb8f}.layui-badge-blue{color:#1890ff;background:#e6f7ff;border:1px solid #91d5ff}.layui-badge-red{color:#f5222d;background:#fff1f0;border:1px solid #ffa39e}.layui-badge-yellow{color:#faad14;background:#fffbe6;border:1px solid #ffe58f}.layui-badge-gray{color:#8c8c8c;background:#fafafa;border:1px solid #ccc}.layui-badge{height:20px;line-height:19px;box-sizing:border-box}.layui-badge-list .layui-badge{height:23px;line-height:22px;margin:0 6px 8px 0}.layui-badge-list .layui-badge.layui-bg-gray{border:1px solid #ccc;background-color:#fafafa!important}.layui-card .layui-card-header .layui-badge.pull-right{top:50%;margin-top:-10px}#ew-lock-screen-group{position:fixed;top:0;left:0;right:0;bottom:0;z-index:19891099}.ios-iframe-body{position:absolute;top:0;left:0;right:0;bottom:0}xm-select>.xm-body{margin-left:-2px}xm-select>.xm-body .xm-option{background-color:transparent!important}xm-select>.xm-body .xm-option.hide-icon.selected{background-color:#5fb878!important}xm-select>.xm-body .xm-option:hover{background-color:#f2f2f2!important}.xm-body .xm-tree{min-width:200px}.xm-body .xm-tree .xm-option-content{padding-left:6px}xm-select{border-color:#e6e6e6!important}xm-select:hover{border-color:#d2d2d2!important}xm-select[style="border-color: rgb(229, 77, 66);"]{border-color:#e54d42!important}body .ew-xmselect-tree xm-select .xm-body .xm-option .xm-option-icon{position:absolute;left:30px;top:0;right:0;bottom:0;width:auto;height:auto;border:none!important;z-index:1}body .ew-xmselect-tree xm-select .xm-body .xm-option .xm-option-icon:before{display:none}body .ew-xmselect-tree xm-select .xm-body .xm-option.selected{background-color:#f2f2f2!important}body .ew-xmselect-tree xm-select .xm-body .xm-option.selected .xm-option-content{color:#5fb878!important}.theme-blue .layui-layout-admin .layui-header .layui-logo{color:#fff;box-shadow:none;background-color:transparent}.theme-blue .layui-layout-admin .layui-header{background-color:#3c8dbc}.theme-blue .layui-layout-admin .layui-header a{color:#fff}.theme-blue .layui-layout-admin .layui-header a:hover{color:#fff}.theme-blue .layui-layout-admin .layui-header .layui-nav-child a{color:#595959}.theme-blue .layui-layout-admin .layui-header .layui-nav .layui-nav-more{border-color:#eee transparent transparent}.theme-blue .layui-layout-admin .layui-header .layui-nav .layui-nav-mored{border-color:transparent transparent #eee}.theme-blue .layui-layout-admin .layui-header .layui-nav .layui-this:after,.theme-blue .layui-layout-admin .layui-header .layui-nav-bar{background-color:#fff}.theme-blue .layui-layout-admin .layui-side{background-color:#222d32}.theme-blue .layui-side .layui-nav .layui-nav-item a{color:#b8c7ce}.theme-blue .layui-nav-tree .layui-nav-child dd.layui-this a,.theme-blue .layui-nav-tree .layui-this>a,.theme-blue .layui-nav-tree .layui-this>a:hover{color:#fff;background-color:#3c8dbc}.theme-blue .layui-nav-tree>.layui-nav-item>a:before{background-color:#3c8dbc}.theme-blue .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child:before{background:#222d32!important}.theme-blue .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this:after{background-color:#3c8dbc;top:38px}.theme-blue .layui-body-header-title{border-left-color:#3c8dbc}.theme-blue .layui-layer.layui-layer-admin .layui-layer-title{background-color:#3c8dbc}.theme-blue .layui-layer.layui-layer-admin .layui-layer-btn .layui-layer-btn0{border-color:#3c8dbc;background-color:#3c8dbc}.theme-blue .ball-loader>span,.theme-blue .signal-loader>span{background-color:#3c8dbc}.theme-blue .btn-circle{background:#3c8dbc}.theme-blue .more-theme-item:hover,.theme-blue .more-theme-item.active{border-color:#3c8dbc}.theme-blue .text-primary,.theme-blue .layui-link{color:#3c8dbc!important}.theme-blue .layui-btn{background-color:#3c8dbc}.theme-blue .layui-form-onswitch{border-color:#3c8dbc;background-color:#3c8dbc}.theme-blue .layui-form-radio>i:hover,.theme-blue .layui-form-radioed>i,.theme-blue .layui-form-checked i,.theme-blue .layui-form-checked:hover i{color:#3c8dbc}.theme-blue .layui-form-checked[lay-skin=primary] i,.theme-blue .layui-form-checked span,.theme-blue .layui-form-checked:hover span{border-color:#3c8dbc!important;background-color:#3c8dbc}.theme-blue .layui-form-checked[lay-skin=primary] i:hover,.theme-blue .layui-form-checkbox[lay-skin=primary]:hover i{border-color:#3c8dbc!important}.theme-blue .layui-form-select dl dd.layui-this{background-color:#3c8dbc}.theme-blue .layui-laypage .layui-laypage-curr .layui-laypage-em{background-color:#3c8dbc}.theme-blue .layui-laypage input:focus,.theme-blue .layui-laypage select:focus{border-color:#3c8dbc!important}.theme-blue .layui-laypage a:hover{color:#3c8dbc}.theme-blue .layui-tab-brief>.layui-tab-title .layui-this{color:#3c8dbc}.theme-blue .layui-tab-brief>.layui-tab-more li.layui-this:after,.theme-blue .layui-tab-brief>.layui-tab-title .layui-this:after{border-color:#3c8dbc!important}.theme-blue .layui-tab.layui-tab-vertical>.layui-tab-title>li.layui-this{border-color:#3c8dbc;color:#3c8dbc}.theme-blue .layui-breadcrumb a:hover{color:#3c8dbc!important}.theme-blue .layui-laydate-footer span:hover,.theme-blue .layui-laydate-header i:hover,.theme-blue .layui-laydate-header span:hover{color:#3c8dbc}.theme-blue .layui-laydate .layui-this{background-color:#3c8dbc!important}.theme-blue .layui-laydate-content td.laydate-selected{background-color:rgba(60,141,188,.1)}.theme-blue .laydate-selected:hover{background-color:rgba(60,141,188,.1)!important}.theme-blue .layui-timeline-axis{color:#3c8dbc}.theme-blue .layui-transfer-active .layui-btn{background-color:#3c8dbc!important;border-color:#3c8dbc!important}.theme-blue .layui-progress-bar{background-color:#3c8dbc}.theme-blue .layui-slider-bar{background-color:#3c8dbc!important}.theme-blue .layui-slider-wrap-btn{border-color:#3c8dbc!important}.theme-blue .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon{color:#3c8dbc}.theme-blue .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon.layui-icon-ok,.theme-blue .layui-elem-quote{border-color:#3c8dbc}.theme-blue .layui-tab.layui-steps>.layui-tab-title>li:before,.theme-blue .layui-tab.layui-steps>.layui-tab-title>li.layui-this>.layui-icon.layui-icon-ok{background-color:#3c8dbc}.theme-blue .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li{background-color:#9dc6dd}.theme-blue .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this{background-color:#3c8dbc}.theme-blue .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li:after{border-left-color:#9dc6dd!important}.theme-blue .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this+li:after{border-left-color:#3c8dbc!important}.theme-blue .ew-cascader-dropdown-list-item.active,.theme-blue .ew-cascader-dropdown-list-item.active .ew-icon-right{color:#3c8dbc}.theme-blue div.tagsinput span.tag{background:#3c8dbc}.theme-blue xm-select .xm-body .xm-option .xm-option-icon{border-color:#3c8dbc!important}.theme-blue xm-select .xm-body .xm-option.selected .xm-option-icon,.theme-blue xm-select>.xm-body .xm-toolbar .toolbar-tag:hover,.theme-blue .ew-xmselect-tree xm-select .xm-body .xm-option.selected .xm-option-content{color:#3c8dbc!important}.theme-blue xm-select .xm-label .xm-label-block,.theme-blue xm-select .xm-body .xm-option.hide-icon.selected{background-color:#3c8dbc!important}.theme-blue .city-select a.active{color:#fff!important;background-color:#3c8dbc!important}.theme-blue .city-select a:hover,.theme-blue .city-select a:focus{background-color:rgba(60,141,188,.1);color:#3c8dbc}.theme-blue .city-picker-span>.title>span:hover{background-color:rgba(60,141,188,.1)}.theme-blue .city-select-tab>a.active{color:#3c8dbc}.theme-green .layui-layout-admin .layui-header .layui-logo{color:#fff;box-shadow:none;background-color:transparent}.theme-green .layui-layout-admin .layui-header{background-color:#00a65a}.theme-green .layui-layout-admin .layui-header a{color:#fff}.theme-green .layui-layout-admin .layui-header a:hover{color:#fff}.theme-green .layui-layout-admin .layui-header .layui-nav-child a{color:#595959}.theme-green .layui-layout-admin .layui-header .layui-nav .layui-nav-more{border-color:#eee transparent transparent}.theme-green .layui-layout-admin .layui-header .layui-nav .layui-nav-mored{border-color:transparent transparent #eee}.theme-green .layui-layout-admin .layui-header .layui-nav .layui-this:after,.theme-green .layui-layout-admin .layui-header .layui-nav-bar{background-color:#fff}.theme-green .layui-layout-admin .layui-side{background-color:#222d32}.theme-green .layui-side .layui-nav .layui-nav-item a{color:#b8c7ce}.theme-green .layui-nav-tree .layui-nav-child dd.layui-this a,.theme-green .layui-nav-tree .layui-this>a,.theme-green .layui-nav-tree .layui-this>a:hover{color:#fff;background-color:#00a65a}.theme-green .layui-nav-tree>.layui-nav-item>a:before{background-color:#00a65a}.theme-green .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child:before{background:#222d32!important}.theme-green .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this:after{background-color:#00a65a;top:38px}.theme-green .layui-body-header-title{border-left-color:#00a65a}.theme-green .layui-layer.layui-layer-admin .layui-layer-title{background-color:#00a65a}.theme-green .layui-layer.layui-layer-admin .layui-layer-btn .layui-layer-btn0{border-color:#00a65a;background-color:#00a65a}.theme-green .more-theme-item:hover,.theme-green .more-theme-item.active{border-color:#00a65a}.theme-green .btn-circle{background:#00a65a}.theme-green .ball-loader>span,.theme-green .signal-loader>span{background-color:#00a65a}.theme-green .text-primary,.theme-green .layui-link{color:#00a65a!important}.theme-green .layui-btn{background-color:#00a65a}.theme-green .layui-form-onswitch{border-color:#00a65a;background-color:#00a65a}.theme-green .layui-form-radio>i:hover,.theme-green .layui-form-radioed>i,.theme-green .layui-form-checked i,.theme-green .layui-form-checked:hover i{color:#00a65a}.theme-green .layui-form-checked[lay-skin=primary] i,.theme-green .layui-form-checked span,.theme-green .layui-form-checked:hover span{border-color:#00a65a!important;background-color:#00a65a}.theme-green .layui-form-checked[lay-skin=primary] i:hover,.theme-green .layui-form-checkbox[lay-skin=primary]:hover i{border-color:#00a65a!important}.theme-green .layui-form-select dl dd.layui-this{background-color:#00a65a}.theme-green .layui-laypage .layui-laypage-curr .layui-laypage-em{background-color:#00a65a}.theme-green .layui-laypage input:focus,.theme-green .layui-laypage select:focus{border-color:#00a65a!important}.theme-green .layui-laypage a:hover{color:#00a65a}.theme-green .layui-tab-brief>.layui-tab-title .layui-this{color:#00a65a}.theme-green .layui-tab-brief>.layui-tab-more li.layui-this:after,.theme-green .layui-tab-brief>.layui-tab-title .layui-this:after{border-color:#00a65a!important}.theme-green .layui-tab.layui-tab-vertical>.layui-tab-title>li.layui-this{border-color:#00a65a;color:#00a65a}.theme-green .layui-breadcrumb a:hover{color:#00a65a!important}.theme-green .layui-laydate-footer span:hover,.theme-green .layui-laydate-header i:hover,.theme-green .layui-laydate-header span:hover{color:#00a65a}.theme-green .layui-laydate .layui-this{background-color:#00a65a!important}.theme-green .layui-laydate-content td.laydate-selected{background-color:rgba(0,166,90,.1)}.theme-green .laydate-selected:hover{background-color:rgba(0,166,90,.1)!important}.theme-green .layui-timeline-axis{color:#00a65a}.theme-green .layui-transfer-active .layui-btn{background-color:#00a65a!important;border-color:#00a65a!important}.theme-green .layui-progress-bar{background-color:#00a65a}.theme-green .layui-slider-bar{background-color:#00a65a!important}.theme-green .layui-slider-wrap-btn{border-color:#00a65a!important}.theme-green .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon{color:#00a65a}.theme-green .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon.layui-icon-ok,.theme-green .layui-elem-quote{border-color:#00a65a}.theme-green .layui-tab.layui-steps>.layui-tab-title>li:before,.theme-green .layui-tab.layui-steps>.layui-tab-title>li.layui-this>.layui-icon.layui-icon-ok{background-color:#00a65a}.theme-green .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li{background-color:#7fd2ac}.theme-green .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this{background-color:#00a65a}.theme-green .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li:after{border-left-color:#7fd2ac!important}.theme-green .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this+li:after{border-left-color:#00a65a!important}.theme-green .ew-cascader-dropdown-list-item.active,.theme-green .ew-cascader-dropdown-list-item.active .ew-icon-right{color:#00a65a}.theme-green div.tagsinput span.tag{background:#00a65a}.theme-green xm-select .xm-body .xm-option .xm-option-icon{border-color:#00a65a!important}.theme-green xm-select .xm-body .xm-option.selected .xm-option-icon,.theme-green xm-select>.xm-body .xm-toolbar .toolbar-tag:hover,.theme-green .ew-xmselect-tree xm-select .xm-body .xm-option.selected .xm-option-content{color:#00a65a!important}.theme-green xm-select .xm-label .xm-label-block,.theme-green xm-select .xm-body .xm-option.hide-icon.selected{background-color:#00a65a!important}.theme-green .city-select a.active{color:#fff!important;background-color:#00a65a!important}.theme-green .city-select a:hover,.theme-green .city-select a:focus{background-color:rgba(0,166,90,.1);color:#00a65a}.theme-green .city-picker-span>.title>span:hover{background-color:rgba(0,166,90,.1)}.theme-green .city-select-tab>a.active{color:#00a65a}.theme-purple .layui-layout-admin .layui-header .layui-logo{color:#fff;box-shadow:none;background-color:transparent}.theme-purple .layui-layout-admin .layui-header{background-color:#722ed1}.theme-purple .layui-layout-admin .layui-header a{color:#fff}.theme-purple .layui-layout-admin .layui-header a:hover{color:#fff}.theme-purple .layui-layout-admin .layui-header .layui-nav-child a{color:#595959}.theme-purple .layui-layout-admin .layui-header .layui-nav .layui-nav-more{border-color:#eee transparent transparent}.theme-purple .layui-layout-admin .layui-header .layui-nav .layui-nav-mored{border-color:transparent transparent #eee}.theme-purple .layui-layout-admin .layui-header .layui-nav .layui-this:after,.theme-purple .layui-layout-admin .layui-header .layui-nav-bar{background-color:#fff}.theme-purple .layui-layout-admin .layui-side{background-color:#222d32}.theme-purple .layui-side .layui-nav .layui-nav-item a{color:#b8c7ce}.theme-purple .layui-nav-tree .layui-nav-child dd.layui-this a,.theme-purple .layui-nav-tree .layui-this>a,.theme-purple .layui-nav-tree .layui-this>a:hover{color:#fff;background-color:#722ed1}.theme-purple .layui-nav-tree>.layui-nav-item>a:before{background-color:#722ed1}.theme-purple .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child:before{background:#222d32!important}.theme-purple .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this:after{background-color:#722ed1;top:38px}.theme-purple .layui-body-header-title{border-left-color:#722ed1}.theme-purple .layui-layer.layui-layer-admin .layui-layer-title{background-color:#722ed1}.theme-purple .layui-layer.layui-layer-admin .layui-layer-btn .layui-layer-btn0{border-color:#722ed1;background-color:#722ed1}.theme-purple .more-theme-item:hover,.theme-purple .more-theme-item.active{border-color:#722ed1}.theme-purple .btn-circle{background:#722ed1}.theme-purple .ball-loader>span,.theme-purple .signal-loader>span{background-color:#722ed1}.theme-purple .text-primary,.theme-purple .layui-link{color:#722ed1!important}.theme-purple .layui-btn{background-color:#722ed1}.theme-purple .layui-form-onswitch{border-color:#722ed1;background-color:#722ed1}.theme-purple .layui-form-radio>i:hover,.theme-purple .layui-form-radioed>i,.theme-purple .layui-form-checked i,.theme-purple .layui-form-checked:hover i{color:#722ed1}.theme-purple .layui-form-checked[lay-skin=primary] i,.theme-purple .layui-form-checked span,.theme-purple .layui-form-checked:hover span{border-color:#722ed1!important;background-color:#722ed1}.theme-purple .layui-form-checked[lay-skin=primary] i:hover,.theme-purple .layui-form-checkbox[lay-skin=primary]:hover i{border-color:#722ed1!important}.theme-purple .layui-form-select dl dd.layui-this{background-color:#722ed1}.theme-purple .layui-laypage .layui-laypage-curr .layui-laypage-em{background-color:#722ed1}.theme-purple .layui-laypage input:focus,.theme-purple .layui-laypage select:focus{border-color:#722ed1!important}.theme-purple .layui-laypage a:hover{color:#722ed1}.theme-purple .layui-tab-brief>.layui-tab-title .layui-this{color:#722ed1}.theme-purple .layui-tab-brief>.layui-tab-more li.layui-this:after,.theme-purple .layui-tab-brief>.layui-tab-title .layui-this:after{border-color:#722ed1!important}.theme-purple .layui-tab.layui-tab-vertical>.layui-tab-title>li.layui-this{border-color:#722ed1;color:#722ed1}.theme-purple .layui-breadcrumb a:hover{color:#722ed1!important}.theme-purple .layui-laydate-footer span:hover,.theme-purple .layui-laydate-header i:hover,.theme-purple .layui-laydate-header span:hover{color:#722ed1}.theme-purple .layui-laydate .layui-this{background-color:#722ed1!important}.theme-purple .layui-laydate-content td.laydate-selected{background-color:rgba(114,46,209,.1)}.theme-purple .laydate-selected:hover{background-color:rgba(114,46,209,.1)!important}.theme-purple .layui-timeline-axis{color:#722ed1}.theme-purple .layui-transfer-active .layui-btn{background-color:#722ed1!important;border-color:#722ed1!important}.theme-purple .layui-progress-bar{background-color:#722ed1}.theme-purple .layui-slider-bar{background-color:#722ed1!important}.theme-purple .layui-slider-wrap-btn{border-color:#722ed1!important}.theme-purple .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon{color:#722ed1}.theme-purple .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon.layui-icon-ok,.theme-purple .layui-elem-quote{border-color:#722ed1}.theme-purple .layui-tab.layui-steps>.layui-tab-title>li:before,.theme-purple .layui-tab.layui-steps>.layui-tab-title>li.layui-this>.layui-icon.layui-icon-ok{background-color:#722ed1}.theme-purple .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li{background-color:#b896e8}.theme-purple .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this{background-color:#722ed1}.theme-purple .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li:after{border-left-color:#b896e8!important}.theme-purple .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this+li:after{border-left-color:#722ed1!important}.theme-purple .ew-cascader-dropdown-list-item.active,.theme-purple .ew-cascader-dropdown-list-item.active .ew-icon-right{color:#722ed1}.theme-purple div.tagsinput span.tag{background:#722ed1}.theme-purple xm-select .xm-body .xm-option .xm-option-icon{border-color:#722ed1!important}.theme-purple xm-select .xm-body .xm-option.selected .xm-option-icon,.theme-purple xm-select>.xm-body .xm-toolbar .toolbar-tag:hover,.theme-purple .ew-xmselect-tree xm-select .xm-body .xm-option.selected .xm-option-content{color:#722ed1!important}.theme-purple xm-select .xm-label .xm-label-block,.theme-purple xm-select .xm-body .xm-option.hide-icon.selected{background-color:#722ed1!important}.theme-purple .city-select a.active{color:#fff!important;background-color:#722ed1!important}.theme-purple .city-select a:hover,.theme-purple .city-select a:focus{background-color:rgba(114,46,209,.1);color:#722ed1}.theme-purple .city-picker-span>.title>span:hover{background-color:rgba(114,46,209,.1)}.theme-purple .city-select-tab>a.active{color:#722ed1}.theme-red .layui-layout-admin .layui-header .layui-logo{color:#fff;box-shadow:none;background-color:transparent}.theme-red .layui-layout-admin .layui-header{background-color:#dd4b39}.theme-red .layui-layout-admin .layui-header a{color:#fff}.theme-red .layui-layout-admin .layui-header a:hover{color:#fff}.theme-red .layui-layout-admin .layui-header .layui-nav-child a{color:#595959}.theme-red .layui-layout-admin .layui-header .layui-nav .layui-nav-more{border-color:#eee transparent transparent}.theme-red .layui-layout-admin .layui-header .layui-nav .layui-nav-mored{border-color:transparent transparent #eee}.theme-red .layui-layout-admin .layui-header .layui-nav .layui-this:after,.theme-red .layui-layout-admin .layui-header .layui-nav-bar{background-color:#fff}.theme-red .layui-layout-admin .layui-side{background-color:#28333e}.theme-red .layui-nav-tree .layui-nav-child dd.layui-this a,.theme-red .layui-nav-tree .layui-this>a,.theme-red .layui-nav-tree .layui-this>a:hover{background-color:#dd4b39}.theme-red .layui-nav-tree>.layui-nav-item>a:before{background-color:#dd4b39}.theme-red .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child:before{background:#28333e!important}.theme-red .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this:after{background-color:#dd4b39;top:38px}.theme-red .layui-body-header-title{border-left-color:#dd4b39}.theme-red .layui-layer.layui-layer-admin .layui-layer-title{background-color:#dd4b39}.theme-red .layui-layer.layui-layer-admin .layui-layer-btn .layui-layer-btn0{border-color:#dd4b39;background-color:#dd4b39}.theme-red .more-theme-item:hover,.theme-red .more-theme-item.active{border-color:#dd4b39}.theme-red .btn-circle{background:#dd4b39}.theme-red .ball-loader>span,.theme-red .signal-loader>span{background-color:#dd4b39}.theme-red .text-primary,.theme-red .layui-link{color:#dd4b39!important}.theme-red .layui-btn{background-color:#dd4b39}.theme-red .layui-form-onswitch{border-color:#dd4b39;background-color:#dd4b39}.theme-red .layui-form-radio>i:hover,.theme-red .layui-form-radioed>i,.theme-red .layui-form-checked i,.theme-red .layui-form-checked:hover i{color:#dd4b39}.theme-red .layui-form-checked[lay-skin=primary] i,.theme-red .layui-form-checked span,.theme-red .layui-form-checked:hover span{border-color:#dd4b39!important;background-color:#dd4b39}.theme-red .layui-form-checked[lay-skin=primary] i:hover,.theme-red .layui-form-checkbox[lay-skin=primary]:hover i{border-color:#dd4b39!important}.theme-red .layui-form-select dl dd.layui-this{background-color:#dd4b39}.theme-red .layui-laypage .layui-laypage-curr .layui-laypage-em{background-color:#dd4b39}.theme-red .layui-laypage input:focus,.theme-red .layui-laypage select:focus{border-color:#dd4b39!important}.theme-red .layui-laypage a:hover{color:#dd4b39}.theme-red .layui-tab-brief>.layui-tab-title .layui-this{color:#dd4b39}.theme-red .layui-tab-brief>.layui-tab-more li.layui-this:after,.theme-red .layui-tab-brief>.layui-tab-title .layui-this:after{border-color:#dd4b39!important}.theme-red .layui-tab.layui-tab-vertical>.layui-tab-title>li.layui-this{border-color:#dd4b39;color:#dd4b39}.theme-red .layui-breadcrumb a:hover{color:#dd4b39!important}.theme-red .layui-laydate-footer span:hover,.theme-red .layui-laydate-header i:hover,.theme-red .layui-laydate-header span:hover{color:#dd4b39}.theme-red .layui-laydate .layui-this{background-color:#dd4b39!important}.theme-red .layui-laydate-content td.laydate-selected{background-color:rgba(221,75,57,.1)}.theme-red .laydate-selected:hover{background-color:rgba(221,75,57,.1)!important}.theme-red .layui-timeline-axis{color:#dd4b39}.theme-red .layui-transfer-active .layui-btn{background-color:#dd4b39!important;border-color:#dd4b39!important}.theme-red .layui-progress-bar{background-color:#dd4b39}.theme-red .layui-slider-bar{background-color:#dd4b39!important}.theme-red .layui-slider-wrap-btn{border-color:#dd4b39!important}.theme-red .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon{color:#dd4b39}.theme-red .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon.layui-icon-ok,.theme-red .layui-elem-quote{border-color:#dd4b39}.theme-red .layui-tab.layui-steps>.layui-tab-title>li:before,.theme-red .layui-tab.layui-steps>.layui-tab-title>li.layui-this>.layui-icon.layui-icon-ok{background-color:#dd4b39}.theme-red .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li{background-color:#eea39a}.theme-red .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this{background-color:#dd4b39}.theme-red .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li:after{border-left-color:#eea39a!important}.theme-red .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this+li:after{border-left-color:#dd4b39!important}.theme-red .ew-cascader-dropdown-list-item.active,.theme-red .ew-cascader-dropdown-list-item.active .ew-icon-right{color:#dd4b39}.theme-red div.tagsinput span.tag{background:#dd4b39}.theme-red xm-select .xm-body .xm-option .xm-option-icon{border-color:#dd4b39!important}.theme-red xm-select .xm-body .xm-option.selected .xm-option-icon,.theme-red xm-select>.xm-body .xm-toolbar .toolbar-tag:hover,.theme-red .ew-xmselect-tree xm-select .xm-body .xm-option.selected .xm-option-content{color:#dd4b39!important}.theme-red xm-select .xm-label .xm-label-block,.theme-red xm-select .xm-body .xm-option.hide-icon.selected{background-color:#dd4b39!important}.theme-red .city-select a.active{color:#fff!important;background-color:#dd4b39!important}.theme-red .city-select a:hover,.theme-red .city-select a:focus{background-color:rgba(221,75,57,.1);color:#dd4b39}.theme-red .city-picker-span>.title>span:hover{background-color:rgba(221,75,57,.1)}.theme-red .city-select-tab>a.active{color:#dd4b39}.theme-cyan .layui-layout-admin .layui-header .layui-logo{background-color:#001529}.theme-cyan .layui-layout-admin .layui-header .layui-nav .layui-this:after,.theme-cyan .layui-layout-admin .layui-header .layui-nav-bar{background-color:#001529}.theme-cyan .layui-layout-admin .layui-side{background-color:#001529}.theme-cyan .layui-nav-tree .layui-nav-child dd.layui-this a,.theme-cyan .layui-nav-tree .layui-this>a,.theme-cyan .layui-nav-tree .layui-this>a:hover{background-color:#1890ff}.theme-cyan .layui-nav-tree>.layui-nav-item>a:before{background-color:#1890ff}.theme-cyan .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child:before{background:#001529!important}.theme-cyan .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this:after{background-color:#001529}.theme-cyan .layui-body-header-title{border-left-color:#1890ff}.theme-cyan .layui-layer.layui-layer-admin{border-radius:4px}.theme-cyan .layui-layer.layui-layer-admin .layui-layer-title{color:#333;font-size:16px;padding-left:23px;background-color:#fff;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom:1px solid #f1f1f1}.theme-cyan .layui-layer.layui-layer-admin .layui-layer-setwin a{color:#8c8c8c;font-weight:600}.theme-cyan .layui-layer.layui-layer-admin .layui-layer-setwin .layui-layer-min cite{background-color:#8c8c8c}.theme-cyan .layui-layer.layui-layer-admin .layui-layer-btn a{height:32px;line-height:32px;border-radius:4px;box-shadow:0 1px 0 rgba(0,0,0,.03)}.theme-cyan .layui-layer.layui-layer-admin .layui-layer-btn .layui-layer-btn0{border-color:#1890ff;background-color:#1890ff}.theme-cyan .more-theme-item:hover,.theme-cyan .more-theme-item.active{border-color:#1890ff}.theme-cyan .btn-circle{background:#1890ff}.theme-cyan .ball-loader>span,.theme-cyan .signal-loader>span{background-color:#1890ff}.theme-cyan .text-primary,.theme-cyan .layui-link{color:#1890ff!important}.theme-cyan .layui-btn{height:36px;line-height:36px;border-radius:4px;background-color:#1890ff;box-shadow:0 1px 0 rgba(0,0,0,.03)}.theme-cyan .layui-btn-lg{height:42px;line-height:42px}.theme-cyan .layui-btn-sm{height:28px;line-height:28px}.theme-cyan .layui-btn-xs{height:22px;line-height:22px}.theme-cyan .layui-input,.theme-cyan .layui-select,.theme-cyan .layui-textarea,.theme-cyan xm-select{height:36px;border-radius:4px}.theme-cyan .layui-input:focus,.theme-cyan .layui-textarea:focus,.theme-cyan xm-select:hover{border-color:#40a9ff!important}.theme-cyan .layui-form-label,.theme-cyan .layui-form-mid{padding-top:8px;padding-bottom:8px}.theme-cyan .layui-input-block{min-height:36px}.theme-cyan .layui-form-radio{margin-top:4px}.theme-cyan .layui-form-onswitch{border-color:#1890ff;background-color:#1890ff}.theme-cyan .layui-form-radio>i:hover,.theme-cyan .layui-form-radioed>i,.theme-cyan .layui-form-checked i,.theme-cyan .layui-form-checked:hover i{color:#1890ff}.theme-cyan .layui-form-checked[lay-skin=primary] i,.theme-cyan .layui-form-checked span,.theme-cyan .layui-form-checked:hover span{border-color:#1890ff!important;background-color:#1890ff}.theme-cyan .layui-form-checked[lay-skin=primary] i:hover,.theme-cyan .layui-form-checkbox[lay-skin=primary]:hover i{border-color:#1890ff!important}.theme-cyan .layui-form-select dl dd.layui-this{background-color:#1890ff}.theme-cyan .layui-laypage .layui-laypage-curr .layui-laypage-em{background-color:#1890ff}.theme-cyan .layui-laypage input:focus,.theme-cyan .layui-laypage select:focus{border-color:#1890ff!important}.theme-cyan .layui-laypage a:hover{color:#1890ff}.theme-cyan .layui-tab-brief>.layui-tab-title .layui-this{color:#1890ff}.theme-cyan .layui-tab-brief>.layui-tab-more li.layui-this:after,.theme-cyan .layui-tab-brief>.layui-tab-title .layui-this:after{border-color:#1890ff!important}.theme-cyan .layui-tab.layui-tab-vertical>.layui-tab-title>li.layui-this{border-color:#2d8cf0;color:#2d8cf0}.theme-cyan .layui-breadcrumb a:hover{color:#1890ff!important}.theme-cyan .layui-laydate-footer span:hover,.theme-cyan .layui-laydate-header i:hover,.theme-cyan .layui-laydate-header span:hover{color:#1890ff}.theme-cyan .layui-laydate .layui-this{background-color:#1890ff!important}.theme-cyan .layui-laydate-content td.laydate-selected{background-color:rgba(24,144,255,.1)}.theme-cyan .laydate-selected:hover{background-color:rgba(24,144,255,.1)!important}.theme-cyan .layui-timeline-axis{color:#1890ff}.theme-cyan .layui-transfer-active .layui-btn{background-color:#1890ff!important;border-color:#1890ff!important}.theme-cyan .layui-progress-bar{background-color:#1890ff}.theme-cyan .layui-slider-bar{background-color:#1890ff!important}.theme-cyan .layui-slider-wrap-btn{border-color:#1890ff!important}.theme-cyan .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon{color:#1890ff}.theme-cyan .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon.layui-icon-ok,.theme-cyan .layui-elem-quote{border-color:#1890ff}.theme-cyan .layui-tab.layui-steps>.layui-tab-title>li:before,.theme-cyan .layui-tab.layui-steps>.layui-tab-title>li.layui-this>.layui-icon.layui-icon-ok{background-color:#1890ff}.theme-cyan .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li{background-color:#89c6ff}.theme-cyan .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this{background-color:#1890ff}.theme-cyan .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li:after{border-left-color:#89c6ff!important}.theme-cyan .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this+li:after{border-left-color:#1890ff!important}.theme-cyan .ew-cascader-dropdown-list-item.active,.theme-cyan .ew-cascader-dropdown-list-item.active .ew-icon-right{color:#1890ff}.theme-cyan div.tagsinput span.tag{background:#1890ff}.theme-cyan xm-select .xm-body .xm-option .xm-option-icon{border-color:#1890ff!important}.theme-cyan xm-select .xm-body .xm-option.selected .xm-option-icon,.theme-cyan xm-select>.xm-body .xm-toolbar .toolbar-tag:hover,.theme-cyan .ew-xmselect-tree xm-select .xm-body .xm-option.selected .xm-option-content{color:#1890ff!important}.theme-cyan xm-select .xm-label .xm-label-block,.theme-cyan xm-select .xm-body .xm-option.hide-icon.selected{background-color:#1890ff!important}.theme-cyan .city-select a.active{color:#fff!important;background-color:#1890ff!important}.theme-cyan .city-select a:hover,.theme-cyan .city-select a:focus{background-color:#f0faff;color:#1890ff}.theme-cyan .city-picker-span>.title>span:hover{background-color:#f0faff}.theme-cyan .city-select-tab>a.active{color:#1890ff}.theme-white .layui-layout-admin .layui-header .layui-logo{color:#262626;background-color:transparent;box-shadow:2px 8px 8px 0 rgba(29,35,41,.05)}.theme-white .layui-layout-admin .layui-header{box-shadow:0 1px 4px rgba(0,21,41,.08)}.theme-white .layui-layout-admin .layui-header .layui-nav .layui-this:after,.theme-white .layui-layout-admin .layui-header .layui-nav-bar{background-color:#2d8cf0}.theme-white .layui-layout-admin .layui-side{background-color:#fff;box-shadow:2px 8px 8px 0 rgba(29,35,41,.05)}.theme-white .layui-side .layui-nav .layui-nav-item a{color:#595959}.theme-white .layui-side .layui-nav .layui-nav-item a:hover{color:#2d8cf0}.theme-white .layui-side .layui-nav-itemed>a,.theme-white .layui-side .layui-nav-tree .layui-nav-title a,.theme-white .layui-side .layui-nav-tree .layui-nav-title a:hover{color:#595959!important}.theme-white .layui-side .layui-nav-itemed>a:hover{color:#2d8cf0!important}.theme-white .layui-side .layui-nav-tree .layui-nav-child dd.layui-this a,.theme-white .layui-side .layui-nav-tree .layui-this>a,.theme-white .layui-side .layui-nav-tree .layui-this>a:hover{color:#2d8cf0;background:#f0faff;border-right:2px solid #2d8cf0}.theme-white .layui-side .layui-nav-tree .layui-nav-item .layui-nav-child{background-color:transparent!important}.theme-white .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child:before{background:#fff!important}@media screen and (min-width:769px){.theme-white .layui-layout-admin.admin-nav-mini .layui-side .layui-nav li.layui-nav-itemed>a{background:#f0faff;color:#2d8cf0!important}}.theme-white .layui-nav-tree>.layui-nav-item>a:before{display:none}.theme-white .layui-side .layui-nav .layui-nav-more{border-color:rgba(89,89,89,.7) transparent transparent}.theme-white .layui-side .layui-nav .layui-nav-mored,.theme-white .layui-side .layui-nav-itemed>a .layui-nav-more{border-color:transparent transparent rgba(89,89,89,.7)}.theme-white .layui-side .layui-nav-tree.arrow3 .layui-nav-itemed>a>.layui-nav-more:before{background-color:rgba(89,89,89,.7)}@media screen and (min-width:769px){.theme-white .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child>dd>a .layui-nav-more{border-color:transparent transparent transparent rgba(89,89,89,.7)}}.theme-white .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title{top:8px;right:8px;height:32px;line-height:32px;box-sizing:border-box;background-color:transparent;box-shadow:-4px 4px 0 #f5f7f9;padding-right:70px}.theme-white .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li{border:0;margin-right:6px;border-radius:4px;background-color:#fff;line-height:32px;height:32px}.theme-white .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this{color:#2d8cf0;background-color:#fff}.theme-white .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li:hover{background-color:#fff}.theme-white .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this:after{display:none}.theme-white .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li .layui-tab-close,.theme-white .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li .layui-tab-close:hover{top:8px;color:#8c8c8c;background-color:transparent}.theme-white .layui-layout-admin .layui-body .admin-tabs-control,.theme-white .layui-layout-admin .layui-body .admin-tabs-control:hover{top:8px;height:32px;line-height:32px;background-color:#f5f7f9;border:0}.theme-white .layui-layout-admin .layui-body .admin-tabs-control.layui-icon-down{border-radius:4px;background-color:#fff;width:32px;right:8px}.theme-white .admin-tabs-control>.layui-nav .layui-nav-item{line-height:32px}.theme-white .admin-tabs-control>.layui-nav .layui-nav-item>a{height:32px;width:32px;padding:0}.theme-white .admin-tabs-control>.layui-nav .layui-nav-child{top:36px;border:0;border-radius:4px;box-shadow:0 1px 6px rgba(0,0,0,.2)}.theme-white .layui-layout-admin .layui-body .admin-tabs-control.layui-icon-prev:before{content:"\e603"}.theme-white .layui-layout-admin .layui-body .admin-tabs-control.layui-icon-next:before{content:"\e602"}.theme-white .layui-body-header-title{border-left-color:#2d8cf0}.theme-white .layui-body-header{box-shadow:0 1px 4px rgba(0,21,41,.08)}.theme-white .layui-layer.layui-layer-admin{border-radius:4px}.theme-white .layui-layer.layui-layer-admin .layui-layer-title{color:#262626;font-size:16px;padding-left:23px;background-color:#fff;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom:1px solid #f1f1f1}.theme-white .layui-layer.layui-layer-admin .layui-layer-setwin a{color:#8c8c8c;font-weight:600}.theme-white .layui-layer.layui-layer-admin .layui-layer-setwin .layui-layer-min cite{background-color:#8c8c8c}.theme-white .layui-layer.layui-layer-admin .layui-layer-btn a{height:32px;line-height:32px;border-radius:4px;box-shadow:0 1px 0 rgba(0,0,0,.03)}.theme-white .layui-layer.layui-layer-admin .layui-layer-btn .layui-layer-btn0{border-color:#2d8cf0;background-color:#2d8cf0}.theme-white .more-theme-item:hover,.theme-white .more-theme-item.active{border-color:#2d8cf0}.theme-white .btn-circle{background:#2d8cf0}.theme-white .ball-loader>span,.theme-white .signal-loader>span{background-color:#2d8cf0}.theme-white .text-primary,.theme-white .layui-link{color:#2d8cf0!important}.theme-white .layui-card{border-radius:4px;box-shadow:none}.theme-white .layui-btn{height:36px;line-height:36px;border-radius:4px;background-color:#2d8cf0;box-shadow:0 1px 0 rgba(0,0,0,.03)}.theme-white .layui-btn-lg{height:42px;line-height:42px}.theme-white .layui-btn-sm{height:28px;line-height:28px}.theme-white .layui-btn-xs{height:22px;line-height:22px}.theme-white .layui-input,.theme-white .layui-select,.theme-white .layui-textarea,.theme-white xm-select{height:36px;border-radius:4px}.theme-white .layui-input:focus,.theme-white .layui-textarea:focus,.theme-white xm-select:hover{border-color:#2d8cf0!important}.theme-white .layui-form-label,.theme-white .layui-form-mid{padding-top:8px;padding-bottom:8px}.theme-white .layui-input-block{min-height:36px}.theme-white .layui-form-radio{margin-top:4px}.theme-white .layui-form-onswitch{border-color:#2d8cf0;background-color:#2d8cf0}.theme-white .layui-form-radio>i:hover,.theme-white .layui-form-radioed>i,.theme-white .layui-form-checked i,.theme-white .layui-form-checked:hover i{color:#2d8cf0}.theme-white .layui-form-checked[lay-skin=primary] i,.theme-white .layui-form-checked span,.theme-white .layui-form-checked:hover span{border-color:#2d8cf0!important;background-color:#2d8cf0}.theme-white .layui-form-checked[lay-skin=primary] i:hover,.theme-white .layui-form-checkbox[lay-skin=primary]:hover i{border-color:#2d8cf0!important}.theme-white .layui-form-select dl dd.layui-this{background-color:#2d8cf0}.theme-white .layui-laypage .layui-laypage-curr .layui-laypage-em{background-color:#2d8cf0}.theme-white .layui-laypage input:focus,.theme-white .layui-laypage select:focus{border-color:#2d8cf0!important}.theme-white .layui-laypage a:hover{color:#2d8cf0}.theme-white .layui-tab-brief>.layui-tab-title .layui-this{color:#2d8cf0}.theme-white .layui-tab-brief>.layui-tab-more li.layui-this:after,.theme-white .layui-tab-brief>.layui-tab-title .layui-this:after{border-color:#2d8cf0!important}.theme-white .layui-tab.layui-tab-vertical>.layui-tab-title>li.layui-this{border-color:#2d8cf0;color:#2d8cf0}.theme-white .layui-breadcrumb a:hover{color:#2d8cf0!important}.theme-white .layui-laydate-footer span:hover,.theme-white .layui-laydate-header i:hover,.theme-white .layui-laydate-header span:hover{color:#2d8cf0}.theme-white .layui-laydate .layui-this{background-color:#2d8cf0!important}.theme-white .layui-laydate-content td.laydate-selected{background-color:rgba(45,140,240,.1)}.theme-white .laydate-selected:hover{background-color:rgba(45,140,240,.1)!important}.theme-white .layui-timeline-axis{color:#2d8cf0}.theme-white .layui-transfer-active .layui-btn{background-color:#2d8cf0!important;border-color:#2d8cf0!important}.theme-white .layui-progress-bar{background-color:#2d8cf0}.theme-white .layui-slider-bar{background-color:#2d8cf0!important}.theme-white .layui-slider-wrap-btn{border-color:#2d8cf0!important}.theme-white .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon{color:#2d8cf0}.theme-white .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon.layui-icon-ok,.theme-white .layui-elem-quote{border-color:#2d8cf0}.theme-white .layui-tab.layui-steps>.layui-tab-title>li:before,.theme-white .layui-tab.layui-steps>.layui-tab-title>li.layui-this>.layui-icon.layui-icon-ok{background-color:#2d8cf0}.theme-white .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li{background-color:#95c5f7}.theme-white .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this{background-color:#2d8cf0}.theme-white .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li:after{border-left-color:#95c5f7!important}.theme-white .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this+li:after{border-left-color:#2d8cf0!important}.theme-white .ew-cascader-dropdown-list-item.active,.theme-white .ew-cascader-dropdown-list-item.active .ew-icon-right{color:#2d8cf0}.theme-white div.tagsinput span.tag{background:#2d8cf0}.theme-white xm-select .xm-body .xm-option .xm-option-icon{border-color:#2d8cf0!important}.theme-white xm-select .xm-body .xm-option.selected .xm-option-icon,.theme-white xm-select>.xm-body .xm-toolbar .toolbar-tag:hover,.theme-white .ew-xmselect-tree xm-select .xm-body .xm-option.selected .xm-option-content{color:#2d8cf0!important}.theme-white xm-select .xm-label .xm-label-block,.theme-white xm-select .xm-body .xm-option.hide-icon.selected{background-color:#2d8cf0!important}.theme-white .city-select a.active{color:#fff!important;background-color:#2d8cf0!important}.theme-white .city-select a:hover,.theme-white .city-select a:focus{background-color:#f0faff;color:#2d8cf0}.theme-white .city-picker-span>.title>span:hover{background-color:#f0faff}.theme-white .city-select-tab>a.active{color:#2d8cf0}.theme-pink .layui-layout-admin .layui-header .layui-logo{color:#262626;background-color:transparent;box-shadow:2px 8px 8px 0 rgba(29,35,41,.05)}.theme-pink .layui-layout-admin .layui-header{box-shadow:0 1px 4px rgba(0,21,41,.08)}.theme-pink .layui-layout-admin .layui-header .layui-nav .layui-this:after,.theme-pink .layui-layout-admin .layui-header .layui-nav-bar{background-color:#fb7299}.theme-pink .layui-layout-admin .layui-side{background-color:#fff;box-shadow:2px 8px 8px 0 rgba(29,35,41,.05)}.theme-pink .layui-side .layui-nav .layui-nav-item a{color:#595959}.theme-pink .layui-side .layui-nav .layui-nav-item a:hover{color:#fb7299}.theme-pink .layui-side .layui-nav-itemed>a,.theme-pink .layui-side .layui-nav-tree .layui-nav-title a,.theme-pink .layui-side .layui-nav-tree .layui-nav-title a:hover{color:#595959!important}.theme-pink .layui-side .layui-nav-itemed>a:hover{color:#fb7299!important}.theme-pink .layui-side .layui-nav-tree .layui-nav-child dd.layui-this a,.theme-pink .layui-side .layui-nav-tree .layui-this>a,.theme-pink .layui-side .layui-nav-tree .layui-this>a:hover{color:#fb7299;background:#fff7f9;border-right:2px solid #fb7299}.theme-pink .layui-side .layui-nav-tree .layui-nav-item .layui-nav-child{background-color:transparent!important}.theme-pink .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child:before{background:#fff!important}@media screen and (min-width:769px){.theme-pink .layui-layout-admin.admin-nav-mini .layui-side .layui-nav li.layui-nav-itemed>a{background:#fff1f5;color:#fb7299!important}}.theme-pink .layui-nav-tree>.layui-nav-item>a:before{display:none}.theme-pink .layui-side .layui-nav .layui-nav-more{border-color:rgba(89,89,89,.7) transparent transparent}.theme-pink .layui-side .layui-nav .layui-nav-mored,.theme-pink .layui-side .layui-nav-itemed>a .layui-nav-more{border-color:transparent transparent rgba(89,89,89,.7)}.theme-pink .layui-side .layui-nav-tree.arrow3 .layui-nav-itemed>a>.layui-nav-more:before{background-color:rgba(89,89,89,.7)}@media screen and (min-width:769px){.theme-pink .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child>dd>a .layui-nav-more{border-color:transparent transparent transparent rgba(89,89,89,.7)}}.theme-pink .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title{top:8px;right:8px;height:32px;line-height:32px;box-sizing:border-box;background-color:transparent;box-shadow:-4px 4px 0 #f5f7f9;padding-right:70px}.theme-pink .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li{border:0;margin-right:6px;border-radius:4px;background-color:#fff;line-height:32px;height:32px}.theme-pink .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this{color:#fb7299;background-color:#fff}.theme-pink .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li:hover{background-color:#fff}.theme-pink .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this:after{display:none}.theme-pink .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li .layui-tab-close,.theme-pink .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li .layui-tab-close:hover{top:8px;color:#8c8c8c;background-color:transparent}.theme-pink .layui-layout-admin .layui-body .admin-tabs-control,.theme-pink .layui-layout-admin .layui-body .admin-tabs-control:hover{top:8px;height:32px;line-height:32px;background-color:#f5f7f9;border:0}.theme-pink .layui-layout-admin .layui-body .admin-tabs-control.layui-icon-down{border-radius:4px;background-color:#fff;width:32px;right:8px}.theme-pink .admin-tabs-control>.layui-nav .layui-nav-item{line-height:32px}.theme-pink .admin-tabs-control>.layui-nav .layui-nav-item>a{height:32px;width:32px;padding:0}.theme-pink .admin-tabs-control>.layui-nav .layui-nav-child{top:36px;border:0;border-radius:4px;box-shadow:0 1px 6px rgba(0,0,0,.2)}.theme-pink .layui-layout-admin .layui-body .admin-tabs-control.layui-icon-prev:before{content:"\e603"}.theme-pink .layui-layout-admin .layui-body .admin-tabs-control.layui-icon-next:before{content:"\e602"}.theme-pink .layui-body-header-title{border-left-color:#fb7299}.theme-pink .layui-body-header{box-shadow:0 1px 4px rgba(0,21,41,.08)}.theme-pink .layui-layer.layui-layer-admin{border-radius:4px}.theme-pink .layui-layer.layui-layer-admin .layui-layer-title{color:#262626;font-size:16px;padding-left:23px;background-color:#fff;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom:1px solid #f1f1f1}.theme-pink .layui-layer.layui-layer-admin .layui-layer-setwin a{color:#8c8c8c;font-weight:600}.theme-pink .layui-layer.layui-layer-admin .layui-layer-setwin .layui-layer-min cite{background-color:#8c8c8c}.theme-pink .layui-layer.layui-layer-admin .layui-layer-btn a{height:32px;line-height:32px;border-radius:4px;box-shadow:0 1px 0 rgba(0,0,0,.03)}.theme-pink .layui-layer.layui-layer-admin .layui-layer-btn .layui-layer-btn0{border-color:#fb7299;background-color:#fb7299}.theme-pink .more-theme-item:hover,.theme-pink .more-theme-item.active{border-color:#fb7299}.theme-pink .btn-circle{background:#fb7299}.theme-pink .ball-loader>span,.theme-pink .signal-loader>span{background-color:#fb7299}.theme-pink .text-primary,.theme-pink .layui-link{color:#fb7299!important}.theme-pink .layui-card{border-radius:4px;box-shadow:none}.theme-pink .layui-btn{height:36px;line-height:36px;border-radius:4px;background-color:#fb7299;box-shadow:0 1px 0 rgba(0,0,0,.03)}.theme-pink .layui-btn-lg{height:42px;line-height:42px}.theme-pink .layui-btn-sm{height:28px;line-height:28px}.theme-pink .layui-btn-xs{height:22px;line-height:22px}.theme-pink .layui-input,.theme-pink .layui-select,.theme-pink .layui-textarea,.theme-pink xm-select{height:36px;border-radius:4px}.theme-pink .layui-input:focus,.theme-pink .layui-textarea:focus,.theme-pink xm-select:hover{border-color:#fb7299!important}.theme-pink .layui-form-label,.theme-pink .layui-form-mid{padding-top:8px;padding-bottom:8px}.theme-pink .layui-input-block{min-height:36px}.theme-pink .layui-form-radio{margin-top:4px}.theme-pink .layui-form-onswitch{border-color:#fb7299;background-color:#fb7299}.theme-pink .layui-form-radio>i:hover,.theme-pink .layui-form-radioed>i,.theme-pink .layui-form-checked i,.theme-pink .layui-form-checked:hover i{color:#fb7299}.theme-pink .layui-form-checked[lay-skin=primary] i,.theme-pink .layui-form-checked span,.theme-pink .layui-form-checked:hover span{border-color:#fb7299!important;background-color:#fb7299}.theme-pink .layui-form-checked[lay-skin=primary] i:hover,.theme-pink .layui-form-checkbox[lay-skin=primary]:hover i{border-color:#fb7299!important}.theme-pink .layui-form-select dl dd.layui-this{background-color:#fb7299}.theme-pink .layui-laypage .layui-laypage-curr .layui-laypage-em{background-color:#fb7299}.theme-pink .layui-laypage input:focus,.theme-pink .layui-laypage select:focus{border-color:#fb7299!important}.theme-pink .layui-laypage a:hover{color:#fb7299}.theme-pink .layui-tab-brief>.layui-tab-title .layui-this{color:#fb7299}.theme-pink .layui-tab-brief>.layui-tab-more li.layui-this:after,.theme-pink .layui-tab-brief>.layui-tab-title .layui-this:after{border-color:#fb7299!important}.theme-pink .layui-tab.layui-tab-vertical>.layui-tab-title>li.layui-this{border-color:#fb7299;color:#fb7299}.theme-pink .layui-breadcrumb a:hover{color:#fb7299!important}.theme-pink .layui-laydate-footer span:hover,.theme-pink .layui-laydate-header i:hover,.theme-pink .layui-laydate-header span:hover{color:#fb7299}.theme-pink .layui-laydate .layui-this{background-color:#fb7299!important}.theme-pink .layui-laydate-content td.laydate-selected{background-color:#fff1f5}.theme-pink .laydate-selected:hover{background-color:#fff1f5!important}.theme-pink .layui-timeline-axis{color:#fb7299}.theme-pink .layui-transfer-active .layui-btn{background-color:#fb7299!important;border-color:#fb7299!important}.theme-pink .layui-progress-bar{background-color:#fb7299}.theme-pink .layui-slider-bar{background-color:#fb7299!important}.theme-pink .layui-slider-wrap-btn{border-color:#fb7299!important}.theme-pink .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon{color:#fb7299}.theme-pink .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon.layui-icon-ok,.theme-pink .layui-elem-quote{border-color:#fb7299}.theme-pink .layui-tab.layui-steps>.layui-tab-title>li:before,.theme-pink .layui-tab.layui-steps>.layui-tab-title>li.layui-this>.layui-icon.layui-icon-ok{background-color:#fb7299}.theme-pink .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li{background-color:#fdb8cc}.theme-pink .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this{background-color:#fb7299}.theme-pink .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li:after{border-left-color:#fdb8cc!important}.theme-pink .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this+li:after{border-left-color:#fb7299!important}.theme-pink .ew-cascader-dropdown-list-item.active,.theme-pink .ew-cascader-dropdown-list-item.active .ew-icon-right{color:#fb7299}.theme-pink div.tagsinput span.tag{background:#fb7299}.theme-pink xm-select .xm-body .xm-option .xm-option-icon{border-color:#fb7299!important}.theme-pink xm-select .xm-body .xm-option.selected .xm-option-icon,.theme-pink xm-select>.xm-body .xm-toolbar .toolbar-tag:hover,.theme-pink .ew-xmselect-tree xm-select .xm-body .xm-option.selected .xm-option-content{color:#fb7299!important}.theme-pink xm-select .xm-label .xm-label-block,.theme-pink xm-select .xm-body .xm-option.hide-icon.selected{background-color:#fb7299!important}.theme-pink .city-select a.active{color:#fff!important;background-color:#fb7299!important}.theme-pink .city-select a:hover,.theme-pink .city-select a:focus{background-color:#fff1f5;color:#fb7299}.theme-pink .city-picker-span>.title>span:hover{background-color:#fff1f5}.theme-pink .city-select-tab>a.active{color:#fb7299}.theme-colorful .layui-layout-admin .layui-header .layui-logo{color:#262626;background-color:transparent;box-shadow:2px 8px 8px 0 rgba(29,35,41,.05)}.theme-colorful .layui-layout-admin .layui-header{box-shadow:0 1px 4px rgba(0,21,41,.08)}.theme-colorful .layui-layout-admin .layui-header .layui-nav .layui-this:after,.theme-colorful .layui-layout-admin .layui-header .layui-nav-bar{background-color:#2d8cf0}.theme-colorful .layui-layout-admin .layui-side{background-color:#fff;box-shadow:2px 8px 8px 0 rgba(29,35,41,.05)}.theme-colorful .layui-side .layui-nav .layui-nav-item a{color:#595959}.theme-colorful .layui-side .layui-nav .layui-nav-item a:hover{color:#2d8cf0}.theme-colorful .layui-side .layui-nav-itemed>a,.theme-colorful .layui-side .layui-nav-tree .layui-nav-title a,.theme-colorful .layui-side .layui-nav-tree .layui-nav-title a:hover{color:#595959!important}.theme-colorful .layui-side .layui-nav-itemed>a:hover{color:#2d8cf0!important}.theme-colorful .layui-side .layui-nav-tree .layui-nav-child dd.layui-this a,.theme-colorful .layui-side .layui-nav-tree .layui-this>a,.theme-colorful .layui-side .layui-nav-tree .layui-this>a:hover{color:#2d8cf0;background:#f0faff;border-right:2px solid #2d8cf0}.theme-colorful .layui-side .layui-nav-tree .layui-nav-item .layui-nav-child{background-color:transparent!important}.theme-colorful .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child:before{background:#fff!important}@media screen and (min-width:769px){.theme-colorful .layui-layout-admin.admin-nav-mini .layui-side .layui-nav li.layui-nav-itemed>a{background:#f0faff;color:#2d8cf0!important}}.theme-colorful .layui-nav-tree>.layui-nav-item>a:before{display:none}.theme-colorful .layui-side .layui-nav .layui-nav-more{border-color:rgba(89,89,89,.7) transparent transparent}.theme-colorful .layui-side .layui-nav .layui-nav-mored,.theme-colorful .layui-side .layui-nav-itemed>a .layui-nav-more{border-color:transparent transparent rgba(89,89,89,.7)}.theme-colorful .layui-side .layui-nav-tree.arrow3 .layui-nav-itemed>a>.layui-nav-more:before{background-color:rgba(89,89,89,.7)}@media screen and (min-width:769px){.theme-colorful .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child>dd>a .layui-nav-more{border-color:transparent transparent transparent rgba(89,89,89,.7)}}.theme-colorful .layui-side .layui-nav .layui-nav-item a cite{vertical-align:middle}.theme-colorful .layui-side .layui-nav-item>a>.layui-icon{color:#fff;width:28px;height:28px;font-size:12px!important;line-height:28px;text-align:center;border-radius:50%;display:inline-block;vertical-align:middle;background-color:#61b2fc}.theme-colorful .layui-side .layui-nav-item:nth-child(even)>a>.layui-icon{background-color:#7dd733}.theme-colorful .layui-side .layui-nav-item:nth-child(3)>a>.layui-icon{background-color:#32a2d4}.theme-colorful .layui-side .layui-nav-item:nth-child(4)>a>.layui-icon{background-color:#2bccce}.theme-colorful .layui-side .layui-nav-item:nth-child(5)>a>.layui-icon{background-color:#7383cf}@media screen and (min-width:768px){.theme-colorful .admin-nav-mini .layui-side .layui-nav-item>a{padding-left:16px}}.theme-colorful .layui-layout-admin .layui-side .layui-nav .layui-nav-item .layui-nav-child a{padding-left:63px}.theme-colorful .layui-layout-admin .layui-side .layui-nav .layui-nav-item .layui-nav-child .layui-nav-child a{padding-left:83px}.theme-colorful .layui-layout-admin .layui-side .layui-nav .layui-nav-item .layui-nav-child .layui-nav-child .layui-nav-child a{padding-left:103px}.theme-colorful .layui-layout-admin .layui-side .layui-nav .layui-nav-item .layui-nav-child .layui-nav-child .layui-nav-child .layui-nav-child a{padding-left:123px}.theme-colorful .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title{top:8px;right:8px;height:32px;line-height:32px;box-sizing:border-box;background-color:transparent;box-shadow:-4px 4px 0 #f5f7f9;padding-right:70px}.theme-colorful .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li{border:0;margin-right:6px;border-radius:4px;background-color:#fff;line-height:32px;height:32px}.theme-colorful .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this{color:#2d8cf0;background-color:#fff}.theme-colorful .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li:hover{background-color:#fff}.theme-colorful .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this:after{display:none}.theme-colorful .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li .layui-tab-close,.theme-colorful .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li .layui-tab-close:hover{top:8px;color:#8c8c8c;background-color:transparent}.theme-colorful .layui-layout-admin .layui-body .admin-tabs-control,.theme-colorful .layui-layout-admin .layui-body .admin-tabs-control:hover{top:8px;height:32px;line-height:32px;background-color:#f5f7f9;border:0}.theme-colorful .layui-layout-admin .layui-body .admin-tabs-control.layui-icon-down{border-radius:4px;background-color:#fff;width:32px;right:8px}.theme-colorful .admin-tabs-control>.layui-nav .layui-nav-item{line-height:32px}.theme-colorful .admin-tabs-control>.layui-nav .layui-nav-item>a{height:32px;width:32px;padding:0}.theme-colorful .admin-tabs-control>.layui-nav .layui-nav-child{top:36px;border:0;border-radius:4px;box-shadow:0 1px 6px rgba(0,0,0,.2)}.theme-colorful .layui-layout-admin .layui-body .admin-tabs-control.layui-icon-prev:before{content:"\e603"}.theme-colorful .layui-layout-admin .layui-body .admin-tabs-control.layui-icon-next:before{content:"\e602"}.theme-colorful .layui-body-header-title{border-left-color:#2d8cf0}.theme-colorful .layui-body-header{box-shadow:0 1px 4px rgba(0,21,41,.08)}.theme-colorful .layui-layer.layui-layer-admin{border-radius:4px}.theme-colorful .layui-layer.layui-layer-admin .layui-layer-title{color:#262626;font-size:16px;padding-left:23px;background-color:#fff;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom:1px solid #f1f1f1}.theme-colorful .layui-layer.layui-layer-admin .layui-layer-setwin a{color:#8c8c8c;font-weight:600}.theme-colorful .layui-layer.layui-layer-admin .layui-layer-setwin .layui-layer-min cite{background-color:#8c8c8c}.theme-colorful .layui-layer.layui-layer-admin .layui-layer-btn a{height:32px;line-height:32px;border-radius:4px;box-shadow:0 1px 0 rgba(0,0,0,.03)}.theme-colorful .layui-layer.layui-layer-admin .layui-layer-btn .layui-layer-btn0{border-color:#2d8cf0;background-color:#2d8cf0}.theme-colorful .more-theme-item:hover,.theme-colorful .more-theme-item.active{border-color:#2d8cf0}.theme-colorful .btn-circle{background:#2d8cf0}.theme-colorful .ball-loader>span,.theme-colorful .signal-loader>span{background-color:#2d8cf0}.theme-colorful .text-primary,.theme-colorful .layui-link{color:#2d8cf0!important}.theme-colorful .layui-card{border-radius:4px;box-shadow:none}.theme-colorful .layui-btn{height:36px;line-height:36px;border-radius:4px;background-color:#2d8cf0;box-shadow:0 1px 0 rgba(0,0,0,.03)}.theme-colorful .layui-btn-lg{height:42px;line-height:42px}.theme-colorful .layui-btn-sm{height:28px;line-height:28px}.theme-colorful .layui-btn-xs{height:22px;line-height:22px}.theme-colorful .layui-input,.theme-colorful .layui-select,.theme-colorful .layui-textarea,.theme-colorful xm-select{height:36px;border-radius:4px}.theme-colorful .layui-input:focus,.theme-colorful .layui-textarea:focus,.theme-colorful xm-select:hover{border-color:#2d8cf0!important}.theme-colorful .layui-form-label,.theme-colorful .layui-form-mid{padding-top:8px;padding-bottom:8px}.theme-colorful .layui-input-block{min-height:36px}.theme-colorful .layui-form-radio{margin-top:4px}.theme-colorful .layui-form-onswitch{border-color:#2d8cf0;background-color:#2d8cf0}.theme-colorful .layui-form-radio>i:hover,.theme-colorful .layui-form-radioed>i,.theme-colorful .layui-form-checked i,.theme-colorful .layui-form-checked:hover i{color:#2d8cf0}.theme-colorful .layui-form-checked[lay-skin=primary] i,.theme-colorful .layui-form-checked span,.theme-colorful .layui-form-checked:hover span{border-color:#2d8cf0!important;background-color:#2d8cf0}.theme-colorful .layui-form-checkbox[lay-skin=primary] i:hover,.theme-colorful .layui-form-checkbox[lay-skin=primary]:hover i{border-color:#2d8cf0}.theme-colorful .layui-form-select dl dd.layui-this{background-color:#2d8cf0}.theme-colorful .layui-laypage .layui-laypage-curr .layui-laypage-em{background-color:#2d8cf0}.theme-colorful .layui-laypage input:focus,.theme-colorful .layui-laypage select:focus{border-color:#2d8cf0!important}.theme-colorful .layui-laypage a:hover{color:#2d8cf0}.theme-colorful .layui-tab-brief>.layui-tab-title .layui-this{color:#2d8cf0}.theme-colorful .layui-tab-brief>.layui-tab-more li.layui-this:after,.theme-colorful .layui-tab-brief>.layui-tab-title .layui-this:after{border-color:#2d8cf0!important}.theme-colorful .layui-tab.layui-tab-vertical>.layui-tab-title>li.layui-this{border-color:#2d8cf0;color:#2d8cf0}.theme-colorful .layui-breadcrumb a:hover{color:#2d8cf0!important}.theme-colorful .layui-laydate-footer span:hover,.theme-colorful .layui-laydate-header i:hover,.theme-colorful .layui-laydate-header span:hover{color:#2d8cf0}.theme-colorful .layui-laydate .layui-this{background-color:#2d8cf0!important}.theme-colorful .layui-laydate-content td.laydate-selected{background-color:rgba(45,140,240,.1)}.theme-colorful .laydate-selected:hover{background-color:rgba(45,140,240,.1)!important}.theme-colorful .layui-timeline-axis{color:#2d8cf0}.theme-colorful .layui-transfer-active .layui-btn{background-color:#2d8cf0!important;border-color:#2d8cf0!important}.theme-colorful .layui-progress-bar{background-color:#2d8cf0}.theme-colorful .layui-slider-bar{background-color:#2d8cf0!important}.theme-colorful .layui-slider-wrap-btn{border-color:#2d8cf0!important}.theme-colorful .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon{color:#2d8cf0}.theme-colorful .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon.layui-icon-ok,.theme-colorful .layui-elem-quote{border-color:#2d8cf0}.theme-colorful .layui-tab.layui-steps>.layui-tab-title>li:before,.theme-colorful .layui-tab.layui-steps>.layui-tab-title>li.layui-this>.layui-icon.layui-icon-ok{background-color:#2d8cf0}.theme-colorful .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li{background-color:#96c6f8}.theme-colorful .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this{background-color:#2d8cf0}.theme-colorful .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li:after{border-left-color:#96c6f8!important}.theme-colorful .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this+li:after{border-left-color:#2d8cf0!important}.theme-colorful .ew-cascader-dropdown-list-item.active,.theme-colorful .ew-cascader-dropdown-list-item.active .ew-icon-right{color:#2d8cf0}.theme-colorful div.tagsinput span.tag{background:#2d8cf0}.theme-colorful xm-select .xm-body .xm-option .xm-option-icon{border-color:#2d8cf0!important}.theme-colorful xm-select .xm-body .xm-option.selected .xm-option-icon,.theme-colorful xm-select>.xm-body .xm-toolbar .toolbar-tag:hover,.theme-colorful .ew-xmselect-tree xm-select .xm-body .xm-option.selected .xm-option-content{color:#2d8cf0!important}.theme-colorful xm-select .xm-label .xm-label-block,.theme-colorful xm-select .xm-body .xm-option.hide-icon.selected{background-color:#2d8cf0!important}.theme-colorful .city-select a.active{color:#fff!important;background-color:#2d8cf0!important}.theme-colorful .city-select a:hover,.theme-colorful .city-select a:focus{background-color:#f0faff;color:#2d8cf0}.theme-colorful .city-picker-span>.title>span:hover{background-color:#f0faff}.theme-colorful .city-select-tab>a.active{color:#2d8cf0}
src/main/webapp/static/js/matCode/matCode.js
@@ -7,7 +7,7 @@
    cols.push.apply(cols, matCols);
    cols.push({field: 'modiUser$', align: 'center',title: '修改人员', hide: true}
        ,{field: 'modiTime$', align: 'center',title: '修改时间', hide: true}
        ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:80})
        ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:110})
    return cols;
}
layui.use(['table','laydate', 'form','upload'], function(){
@@ -236,6 +236,27 @@
    table.on('tool(matCode)', function(obj){
        var data = obj.data;
        switch (obj.event) {
            // 编辑
            case 'edit':
                layer.open({
                    type: 2,
                    title: '编辑',
                    maxmin: true,
                    area: [top.detailWidth, top.detailHeight],
                    shadeClose: true,
                    content: 'matCode_detail.html',
                    success: function(layero, index){
                        setFormVal(layer.getChildFrame('#detail', index), data, true);
                        // top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
                        top.convertDisabled(layer.getChildFrame('#matNo', index), true);
                        // layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#prompt', index).hide();
                        layer.getChildFrame('#data-detail-submit-save,#prompt', index).hide();
                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
                        layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
                    }
                });
                break;
            // 详情
            case 'detail':
                layer.open({
src/main/webapp/static/layui/lay/modules/admin.js
New file
@@ -0,0 +1,1667 @@
/** EasyWeb iframe v3.1.8 date:2020-05-04 License By http://easyweb.vip */
layui.define(['layer'], function (exports) {
    var $ = layui.jquery;
    var layer = layui.layer;
    var setter = layui.cache;
    var bodyDOM = '.layui-layout-admin>.layui-body';
    var tabDOM = bodyDOM + '>.layui-tab';
    var sideDOM = '.layui-layout-admin>.layui-side>.layui-side-scroll';
    var headerDOM = '.layui-layout-admin>.layui-header';
    var navFilter = 'admin-side-nav';
    var admin = {version: '3.1.8', layerData: {}};
    /** 设置侧栏折叠 */
    admin.flexible = function (expand) {
        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.flexible(expand);
        var $layout = $('.layui-layout-admin');
        var isExapnd = $layout.hasClass('admin-nav-mini');
        if (expand === undefined) expand = isExapnd;
        if (isExapnd === expand) {
            if (window.sideFlexTimer) clearTimeout(window.sideFlexTimer);
            $layout.addClass('admin-side-flexible');
            window.sideFlexTimer = setTimeout(function () {
                $layout.removeClass('admin-side-flexible');
            }, 600);
            if (expand) {
                admin.hideTableScrollBar();
                $layout.removeClass('admin-nav-mini');
            } else {
                $layout.addClass('admin-nav-mini');
            }
            layui.event.call(this, 'admin', 'flexible({*})', {expand: expand});
        }
    };
    /** 设置导航栏选中 */
    admin.activeNav = function (url) {
        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.activeNav(url);
        if (!url) return console.warn('active url is null');
        $(sideDOM + '>.layui-nav .layui-nav-item .layui-nav-child dd.layui-this').removeClass('layui-this');
        $(sideDOM + '>.layui-nav .layui-nav-item.layui-this').removeClass('layui-this');
        var $a = $(sideDOM + '>.layui-nav a[lay-href="' + url + '"]');
        if ($a.length === 0) return console.warn(url + ' not found');
        var isMini = $('.layui-layout-admin').hasClass('admin-nav-mini');
        if ($(sideDOM + '>.layui-nav').attr('lay-shrink') === '_all') {  // 手风琴效果
            var $pChilds = $a.parent('dd').parents('.layui-nav-child');
            if (!isMini) {
                $(sideDOM + '>.layui-nav .layui-nav-itemed>.layui-nav-child').not($pChilds)
                    .css('display', 'block').slideUp('fast', function () {
                    $(this).css('display', '');
                });
            }
            $(sideDOM + '>.layui-nav .layui-nav-itemed').not($pChilds.parent()).removeClass('layui-nav-itemed');
        }
        $a.parent().addClass('layui-this');  // 选中当前
        // 展开所有父级
        var $asParents = $a.parent('dd').parents('.layui-nav-child').parent();
        if (!isMini) {
            var $childs = $asParents.not('.layui-nav-itemed').children('.layui-nav-child');
            $childs.slideDown('fast', function () {
                if ($(this).is($childs.last())) {
                    $childs.css('display', '');
                    // 菜单超出屏幕自动滚动
                    var topBeyond = $a.offset().top + $a.outerHeight() + 30 - admin.getPageHeight();
                    var topDisparity = 50 + 65 - $a.offset().top;
                    if (topBeyond > 0) {
                        $(sideDOM).animate({'scrollTop': $(sideDOM).scrollTop() + topBeyond}, 300);
                    } else if (topDisparity > 0) {
                        $(sideDOM).animate({'scrollTop': $(sideDOM).scrollTop() - topDisparity}, 300);
                    }
                }
            });
        }
        $asParents.addClass('layui-nav-itemed');
        // 适配多系统模式
        $('ul[lay-filter="' + navFilter + '"]').addClass('layui-hide');
        var $aUl = $a.parents('.layui-nav');
        $aUl.removeClass('layui-hide');
        $(headerDOM + '>.layui-nav>.layui-nav-item').removeClass('layui-this');
        $(headerDOM + '>.layui-nav>.layui-nav-item>a[nav-bind="' + $aUl.attr('nav-id') + '"]').parent().addClass('layui-this');
    };
    /** 右侧弹出 */
    admin.popupRight = function (param) {
        param.anim = -1;
        param.offset = 'r';
        param.move = false;
        param.fixed = true;
        if (param.area === undefined) param.area = '336px';
        if (param.title === undefined) param.title = false;
        if (param.closeBtn === undefined) param.closeBtn = false;
        if (param.shadeClose === undefined) param.shadeClose = true;
        if (param.skin === undefined) param.skin = 'layui-anim layui-anim-rl layui-layer-adminRight';
        return admin.open(param);
    };
    /** 封装layer.open */
    admin.open = function (param) {
        if (param.content && param.type === 2) param.url = undefined;  // 参数纠正
        if (param.url && (param.type === 2 || param.type === undefined)) param.type = 1;  // 参数纠正
        if (param.area === undefined) param.area = param.type === 2 ? ['360px', '300px'] : '360px';
        if (param.offset === undefined) param.offset = '70px';
        if (param.shade === undefined) param.shade = .1;
        if (param.fixed === undefined) param.fixed = false;
        if (param.resize === undefined) param.resize = false;
        if (param.skin === undefined) param.skin = 'layui-layer-admin';
        var eCallBack = param.end;
        param.end = function () {
            layer.closeAll('tips');  // 关闭表单验证的tips
            eCallBack && eCallBack();
        };
        if (param.url) {
            var sCallBack = param.success;
            param.success = function (layero, index) {
                $(layero).data('tpl', param.tpl || '');
                admin.reloadLayer(index, param.url, sCallBack);
            };
        } else if (param.tpl && param.content) {
            param.content = admin.util.tpl(param.content, param.data, setter.tplOpen, setter.tplClose);
        }
        var layIndex = layer.open(param);
        if (param.data) admin.layerData['d' + layIndex] = param.data;
        return layIndex;
    };
    /** 获取弹窗数据 */
    admin.getLayerData = function (index, key) {
        if (index === undefined) {
            index = parent.layer.getFrameIndex(window.name);
            if (index === undefined) return null;
            else return parent.layui.admin.getLayerData(parseInt(index), key);
        } else if (isNaN(index)) {
            index = admin.getLayerIndex(index);
        }
        if (index === undefined) return;
        var layerData = admin.layerData['d' + index];
        if (key && layerData) return layerData[key];
        return layerData;
    };
    /** 放入弹窗数据 */
    admin.putLayerData = function (key, value, index) {
        if (index === undefined) {
            index = parent.layer.getFrameIndex(window.name);
            if (index === undefined) return;
            else return parent.layui.admin.putLayerData(key, value, parseInt(index));
        } else if (isNaN(index)) {
            index = admin.getLayerIndex(index);
        }
        if (index === undefined) return;
        var layerData = admin.getLayerData(index);
        if (!layerData) layerData = {};
        layerData[key] = value;
        admin.layerData['d' + index] = layerData;
    };
    /** 刷新url方式的layer */
    admin.reloadLayer = function (index, url, success) {
        if (typeof url === 'function') {
            success = url;
            url = undefined;
        }
        if (isNaN(index)) index = admin.getLayerIndex(index);
        if (index === undefined) return;
        var $layero = $('#layui-layer' + index);
        if (url === undefined) url = $layero.data('url');
        if (!url) return;
        $layero.data('url', url);
        admin.showLoading($layero);
        admin.ajax({
            url: url,
            dataType: 'html',
            success: function (res) {
                admin.removeLoading($layero, false);
                if (typeof res !== 'string') res = JSON.stringify(res);
                var tpl = $layero.data('tpl');
                // 模板解析
                if (tpl === true || tpl === 'true') {
                    var data = admin.getLayerData(index) || {};
                    data.layerIndex = index;
                    // 模板里面有动态模板处理
                    var $html = $('<div>' + res + '</div>'), tplAll = {};
                    $html.find('script,[tpl-ignore]').each(function (i) {
                        var $this = $(this);
                        tplAll['temp_' + i] = $this[0].outerHTML;
                        $this.after('${temp_' + i + '}').remove();
                    });
                    res = admin.util.tpl($html.html(), data, setter.tplOpen, setter.tplClose);
                    for (var f in tplAll) res = res.replace('${' + f + '}', tplAll[f]);
                }
                $layero.children('.layui-layer-content').html(res);
                admin.renderTpl('#layui-layer' + index + ' [ew-tpl]');
                success && success($layero[0], index);
            }
        });
    };
    /** 封装layer.alert */
    admin.alert = function (content, options, yes) {
        if (typeof options === 'function') {
            yes = options;
            options = {};
        }
        if (options.skin === undefined) options.skin = 'layui-layer-admin';
        if (options.shade === undefined) options.shade = .1;
        return layer.alert(content, options, yes);
    };
    /** 封装layer.confirm */
    admin.confirm = function (content, options, yes, cancel) {
        if (typeof options === 'function') {
            cancel = yes;
            yes = options;
            options = {};
        }
        if (options.skin === undefined) options.skin = 'layui-layer-admin';
        if (options.shade === undefined) options.shade = .1;
        return layer.confirm(content, options, yes, cancel);
    };
    /** 封装layer.prompt */
    admin.prompt = function (options, yes) {
        if (typeof options === 'function') {
            yes = options;
            options = {};
        }
        if (options.skin === undefined) options.skin = 'layui-layer-admin layui-layer-prompt';
        if (options.shade === undefined) options.shade = .1;
        return layer.prompt(options, yes);
    };
    /** 封装ajax请求,返回数据类型为json */
    admin.req = function (url, data, success, method, option) {
        if (typeof data === 'function') {
            option = method;
            method = success;
            success = data;
            data = {};
        }
        if (method !== undefined && typeof method !== 'string') {
            option = method;
            method = undefined;
        }
        if (!method) method = 'GET';
        if (typeof data === 'string') {
            if (!option) option = {};
            if (!option.contentType) option.contentType = 'application/json;charset=UTF-8';
        } else if (setter.reqPutToPost) {
            if ('put' === method.toLowerCase()) {
                method = 'POST';
                data._method = 'PUT';
            } else if ('delete' === method.toLowerCase()) {
                method = 'GET';
                data._method = 'DELETE';
            }
        }
        return admin.ajax($.extend({
            url: (setter.baseServer || '') + url, data: data, type: method, dataType: 'json', success: success
        }, option));
    };
    /** 封装ajax请求 */
    admin.ajax = function (param) {
        var oldParam = admin.util.deepClone(param);
        if (!param.dataType) param.dataType = 'json';
        if (!param.headers) param.headers = {};
        // 统一设置header
        var headers = setter.getAjaxHeaders(param.url);
        if (headers) {
            for (var i = 0; i < headers.length; i++) {
                if (param.headers[headers[i].name] === undefined) param.headers[headers[i].name] = headers[i].value;
            }
        }
        // success预处理
        var success = param.success;
        param.success = function (result, status, xhr) {
            var before = setter.ajaxSuccessBefore(admin.parseJSON(result), param.url, {
                param: oldParam, reload: function (p) {
                    admin.ajax($.extend(true, oldParam, p));
                }, update: function (r) {
                    result = r;
                }, xhr: xhr
            });
            if (before !== false) success && success(result, status, xhr);
            else param.cancel && param.cancel();
        };
        param.error = function (xhr, status) {
            param.success({code: xhr.status, msg: xhr.statusText}, status, xhr);
        };
        // 解决缓存问题
        if (layui.cache.version && (!setter.apiNoCache || param.dataType.toLowerCase() !== 'json')) {
            if (param.url.indexOf('?') === -1) param.url += '?v=';
            else param.url += '&v=';
            if (layui.cache.version === true) param.url += new Date().getTime();
            else param.url += layui.cache.version;
        }
        return $.ajax(param);
    };
    /** 解析json */
    admin.parseJSON = function (str) {
        if (typeof str === 'string') {
            try {
                return JSON.parse(str);
            } catch (e) {
            }
        }
        return str;
    };
    /** 显示加载动画 */
    admin.showLoading = function (elem, type, opacity, size) {
        if (elem !== undefined && (typeof elem !== 'string') && !(elem instanceof $)) {
            type = elem.type;
            opacity = elem.opacity;
            size = elem.size;
            elem = elem.elem;
        }
        if (type === undefined) type = setter.defaultLoading || 1;
        if (size === undefined) size = 'sm';
        if (elem === undefined) elem = 'body';
        var loader = [
            '<div class="ball-loader ' + size + '"><span></span><span></span><span></span><span></span></div>',
            '<div class="rubik-loader ' + size + '"></div>',
            '<div class="signal-loader ' + size + '"><span></span><span></span><span></span><span></span></div>',
            '<div class="layui-loader ' + size + '"><i class="layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop"></i></div>'
        ];
        $(elem).addClass('page-no-scroll');  // 禁用滚动条
        $(elem).scrollTop(0);
        var $loading = $(elem).children('.page-loading');
        if ($loading.length <= 0) {
            $(elem).append('<div class="page-loading">' + loader[type - 1] + '</div>');
            $loading = $(elem).children('.page-loading');
        }
        if (opacity !== undefined) $loading.css('background-color', 'rgba(255,255,255,' + opacity + ')');
        $loading.show();
    };
    /** 移除加载动画 */
    admin.removeLoading = function (elem, fade, del) {
        if (elem === undefined) elem = 'body';
        if (fade === undefined) fade = true;
        var $loading = $(elem).children('.page-loading');
        if (del) $loading.remove();
        else if (fade) $loading.fadeOut('fast');
        else $loading.hide();
        $(elem).removeClass('page-no-scroll');
    };
    /** 缓存临时数据 */
    admin.putTempData = function (key, value, local) {
        var tableName = local ? setter.tableName : setter.tableName + '_tempData';
        if (value === undefined || value === null) {
            if (local) layui.data(tableName, {key: key, remove: true});
            else layui.sessionData(tableName, {key: key, remove: true});
        } else {
            if (local) layui.data(tableName, {key: key, value: value});
            else layui.sessionData(tableName, {key: key, value: value});
        }
    };
    /** 获取缓存临时数据 */
    admin.getTempData = function (key, local) {
        if (typeof key === 'boolean') {
            local = key;
            key = undefined;
        }
        var tableName = local ? setter.tableName : setter.tableName + '_tempData';
        var tempData = local ? layui.data(tableName) : layui.sessionData(tableName);
        if (!key) return tempData;
        return tempData ? tempData[key] : undefined;
    };
    /** 滑动选项卡 */
    admin.rollPage = function (d) {
        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.rollPage(d);
        var $tabTitle = $(tabDOM + '>.layui-tab-title');
        var left = $tabTitle.scrollLeft();
        if ('left' === d) {
            $tabTitle.animate({'scrollLeft': left - 120}, 100);
        } else if ('auto' === d) {
            var autoLeft = 0;
            $tabTitle.children("li").each(function () {
                if ($(this).hasClass('layui-this')) return false;
                else autoLeft += $(this).outerWidth();
            });
            $tabTitle.animate({'scrollLeft': autoLeft - 120}, 100);
        } else {
            $tabTitle.animate({'scrollLeft': left + 120}, 100);
        }
    };
    /** 刷新当前选项卡 */
    admin.refresh = function (url, isIndex) {
        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.refresh(url);
        var $iframe;
        if (!url) {
            $iframe = $(tabDOM + '>.layui-tab-content>.layui-tab-item.layui-show>.admin-iframe');
            if (!$iframe || $iframe.length <= 0) $iframe = $(bodyDOM + '>div>.admin-iframe');
        } else {
            $iframe = $(tabDOM + '>.layui-tab-content>.layui-tab-item>.admin-iframe[lay-id="' + url + '"]');
            if (!$iframe || $iframe.length <= 0) $iframe = $(bodyDOM + '>.admin-iframe');
        }
        if (!$iframe || !$iframe[0]) return console.warn(url + ' is not found');
        try {
            if (isIndex && $iframe[0].contentWindow.refreshTab) {
                $iframe[0].contentWindow.refreshTab();
            } else {
                admin.showLoading({elem: $iframe.parent(), size: ''});
                $iframe[0].contentWindow.location.reload();
            }
        } catch (e) {
            console.warn(e);
            $iframe.attr('src', $iframe.attr('src'));
        }
    };
    /** 关闭当前选项卡 */
    admin.closeThisTabs = function (url) {
        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.closeThisTabs(url);
        admin.closeTabOperNav();
        var $title = $(tabDOM + '>.layui-tab-title');
        if (!url) {
            if ($title.find('li').first().hasClass('layui-this')) return layer.msg('主页不能关闭', {icon: 2});
            $title.find('li.layui-this').find('.layui-tab-close').trigger('click');
        } else {
            if (url === $title.find('li').first().attr('lay-id')) return layer.msg('主页不能关闭', {icon: 2});
            $title.find('li[lay-id="' + url + '"]').find('.layui-tab-close').trigger('click');
        }
    };
    /** 关闭其他选项卡 */
    admin.closeOtherTabs = function (url) {
        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.closeOtherTabs(url);
        if (!url) {
            $(tabDOM + '>.layui-tab-title li:gt(0):not(.layui-this)').find('.layui-tab-close').trigger('click');
        } else {
            $(tabDOM + '>.layui-tab-title li:gt(0)').each(function () {
                if (url !== $(this).attr('lay-id')) $(this).find('.layui-tab-close').trigger('click');
            });
        }
        admin.closeTabOperNav();
    };
    /** 关闭所有选项卡 */
    admin.closeAllTabs = function () {
        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.closeAllTabs();
        $(tabDOM + '>.layui-tab-title li:gt(0)').find('.layui-tab-close').trigger('click');
        $(tabDOM + '>.layui-tab-title li:eq(0)').trigger('click');
        admin.closeTabOperNav();
    };
    /** 关闭选项卡操作菜单 */
    admin.closeTabOperNav = function () {
        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.closeTabOperNav();
        $('.layui-icon-down .layui-nav .layui-nav-child').removeClass('layui-show');
    };
    /** 设置主题 */
    admin.changeTheme = function (theme, win, noCache, noChild) {
        if (!noCache) admin.putSetting('defaultTheme', theme);
        if (!win) win = top;
        admin.removeTheme(win);
        if (theme) {
            try {
                var $body = win.layui.jquery('body');
                $body.addClass(theme);
                $body.data('theme', theme);
            } catch (e) {
            }
        }
        if (noChild) return;
        var ifs = win.frames;
        for (var i = 0; i < ifs.length; i++) admin.changeTheme(theme, ifs[i], true, false);
    };
    /** 移除主题 */
    admin.removeTheme = function (w) {
        if (!w) w = window;
        try {
            var $body = w.layui.jquery('body');
            var theme = $body.data('theme');
            if (theme) $body.removeClass(theme);
            $body.removeData('theme');
        } catch (e) {
        }
    };
    /** 关闭当前iframe层弹窗 */
    admin.closeThisDialog = function () {
        return admin.closeDialog();
    };
    /** 关闭elem所在的页面层弹窗 */
    admin.closeDialog = function (elem) {
        if (elem) layer.close(admin.getLayerIndex(elem));
        else parent.layer.close(parent.layer.getFrameIndex(window.name));
    };
    /** 获取页面层弹窗的index */
    admin.getLayerIndex = function (elem) {
        if (!elem) return parent.layer.getFrameIndex(window.name);
        var id = $(elem).parents('.layui-layer').first().attr('id');
        if (id && id.length >= 11) return id.substring(11);
    };
    /** 让当前的iframe弹层自适应高度 */
    admin.iframeAuto = function () {
        return parent.layer.iframeAuto(parent.layer.getFrameIndex(window.name));
    };
    /** 获取浏览器高度 */
    admin.getPageHeight = function () {
        return document.documentElement.clientHeight || document.body.clientHeight;
    };
    /** 获取浏览器宽度 */
    admin.getPageWidth = function () {
        return document.documentElement.clientWidth || document.body.clientWidth;
    };
    /** 绑定表单弹窗 */
    admin.modelForm = function (layero, btnFilter, formFilter) {
        var $layero = $(layero);
        $layero.addClass('layui-form');
        if (formFilter) $layero.attr('lay-filter', formFilter);
        // 确定按钮绑定submit
        var $btnSubmit = $layero.find('.layui-layer-btn .layui-layer-btn0');
        $btnSubmit.attr('lay-submit', '');
        $btnSubmit.attr('lay-filter', btnFilter);
    };
    /** loading按钮 */
    admin.btnLoading = function (elem, text, loading) {
        if (text !== undefined && (typeof text === 'boolean')) {
            loading = text;
            text = undefined;
        }
        if (text === undefined) text = '&nbsp;加载中';
        if (loading === undefined) loading = true;
        var $elem = $(elem);
        if (loading) {
            $elem.addClass('ew-btn-loading');
            $elem.prepend('<span class="ew-btn-loading-text"><i class="layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop"></i>' + text + '</span>');
            $elem.attr('disabled', 'disabled').prop('disabled', true);
        } else {
            $elem.removeClass('ew-btn-loading');
            $elem.children('.ew-btn-loading-text').remove();
            $elem.removeProp('disabled').removeAttr('disabled');
        }
    };
    /** 鼠标移入侧边栏自动展开 */
    admin.openSideAutoExpand = function () {
        var $side = $('.layui-layout-admin>.layui-side');
        $side.off('mouseenter.openSideAutoExpand').on("mouseenter.openSideAutoExpand", function () {
            if (!$(this).parent().hasClass('admin-nav-mini')) return;
            admin.flexible(true);
            $(this).addClass('side-mini-hover');
        });
        $side.off('mouseleave.openSideAutoExpand').on("mouseleave.openSideAutoExpand", function () {
            if (!$(this).hasClass('side-mini-hover')) return;
            admin.flexible(false);
            $(this).removeClass('side-mini-hover');
        });
    };
    /** 表格单元格超出内容自动展开 */
    admin.openCellAutoExpand = function () {
        var $body = $('body');
        $body.off('mouseenter.openCellAutoExpand').on('mouseenter.openCellAutoExpand', '.layui-table-view td', function () {
            $(this).find('.layui-table-grid-down').trigger('click');
        });
        $body.off('mouseleave.openCellAutoExpand').on('mouseleave.openCellAutoExpand', '.layui-table-tips>.layui-layer-content', function () {
            $('.layui-table-tips-c').trigger('click');
        });
    };
    /** open事件解析layer参数 */
    admin.parseLayerOption = function (option) {
        // 数组类型进行转换
        for (var f in option) {
            if (!option.hasOwnProperty(f)) continue;
            if (option[f] && option[f].toString().indexOf(',') !== -1) option[f] = option[f].toString().split(',');
        }
        // function类型参数转换
        var fs = {'success': 'layero,index', 'cancel': 'index,layero', 'end': '', 'full': '', 'min': '', 'restore': ''};
        for (var k in fs) {
            if (!fs.hasOwnProperty(k) || !option[k]) continue;
            try {
                if (/^[a-zA-Z_]+[a-zA-Z0-9_]+$/.test(option[k])) option[k] += '()';
                option[k] = new Function(fs[k], option[k]);
            } catch (e) {
                option[k] = undefined;
            }
        }
        // content取内容
        if (option.content && (typeof option.content === 'string') && option.content.indexOf('#') === 0) {
            if ($(option.content).is('script')) option.content = $(option.content).html();
            else option.content = $(option.content);
        }
        if (option.type === undefined && option.url === undefined) option.type = 2;  // 默认为iframe类型
        return option;
    };
    /** 字符串形式的parent.parent转window对象 */
    admin.strToWin = function (str) {
        var win = window;
        if (!str) return win;
        var ws = str.split('.');
        for (var i = 0; i < ws.length; i++) win = win[ws[i]];
        return win;
    };
    /** 解决折叠侧边栏表格滚动条闪现 */
    admin.hideTableScrollBar = function (win) {
        if (admin.getPageWidth() <= 768) return;
        if (!win) {
            var $iframe = $(tabDOM + '>.layui-tab-content>.layui-tab-item.layui-show>.admin-iframe');
            if ($iframe.length <= 0) $iframe = $(bodyDOM + '>div>.admin-iframe');
            if ($iframe.length > 0) win = $iframe[0].contentWindow;
        }
        try {  // 可能会跨域
            if (window.hsbTimer) clearTimeout(window.hsbTimer);
            win.layui.jquery('.layui-table-body.layui-table-main').addClass('no-scrollbar');
            window.hsbTimer = setTimeout(function () {
                win.layui.jquery('.layui-table-body.layui-table-main').removeClass('no-scrollbar');
            }, 800);
        } catch (e) {
        }
    };
    /** 判断是否是主框架 */
    admin.isTop = function () {
        return $(bodyDOM).length > 0;
    };
    /** admin提供的事件 */
    admin.events = {
        /* 折叠侧导航 */
        flexible: function () {
            admin.strToWin($(this).data('window')).layui.admin.flexible();
        },
        /* 刷新主体部分 */
        refresh: function () {
            admin.strToWin($(this).data('window')).layui.admin.refresh();
        },
        /* 后退 */
        back: function () {
            admin.strToWin($(this).data('window')).history.back();
        },
        /* 设置主题 */
        theme: function () {
            var option = admin.util.deepClone($(this).data());
            admin.strToWin(option.window).layui.admin.popupRight($.extend({
                id: 'layer-theme', url: option.url || 'tpl/tpl-theme.html'
            }, admin.parseLayerOption(option)));
        },
        /* 打开便签 */
        note: function () {
            var option = admin.util.deepClone($(this).data());
            admin.strToWin(option.window).layui.admin.popupRight($.extend({
                id: 'layer-note', url: option.url || 'tpl/tpl-note.html'
            }, admin.parseLayerOption(option)));
        },
        /* 打开消息 */
        message: function () {
            var option = admin.util.deepClone($(this).data());
            admin.strToWin(option.window).layui.admin.popupRight($.extend({
                id: 'layer-notice', url: option.url || 'tpl/tpl-message.html'
            }, admin.parseLayerOption(option)));
        },
        /* 打开修改密码弹窗 */
        psw: function () {
            var option = admin.util.deepClone($(this).data());
            admin.strToWin(option.window).layui.admin.open($.extend({
                id: 'layer-psw', title: '修改密码', shade: 0, url: option.url || 'tpl/tpl-password.html'
            }, admin.parseLayerOption(option)));
        },
        /* 退出登录 */
        logout: function () {
            var option = admin.util.deepClone($(this).data());
            admin.unlockScreen();
            function doLogout() {
                if (option.ajax) {
                    var loadIndex = layer.load(2);
                    admin.req(option.ajax, function (res) {
                        layer.close(loadIndex);
                        if (option.parseData) {
                            try {
                                var parseData = new Function('res', option.parseData);
                                res = parseData(res);
                            } catch (e) {
                                console.error(e);
                            }
                        }
                        if (res.code == (option.code || 0)) {
                            setter.removeToken && setter.removeToken();
                            location.replace(option.url || '/');
                        } else {
                            layer.msg(res.msg, {icon: 2});
                        }
                    }, option.method || 'delete');
                } else {
                    setter.removeToken && setter.removeToken();
                    location.replace(option.url || '/');
                }
            }
            if (false === option.confirm || 'false' === option.confirm) return doLogout();
            admin.strToWin(option.window).layui.layer.confirm(option.content || '确定要退出登录吗?', $.extend({
                title: '温馨提示', skin: 'layui-layer-admin', shade: .1
            }, admin.parseLayerOption(option)), function () {
                doLogout();
            });
        },
        /* 打开弹窗 */
        open: function () {
            var option = admin.util.deepClone($(this).data());
            admin.strToWin(option.window).layui.admin.open(admin.parseLayerOption(option));
        },
        /* 打开右侧弹窗 */
        popupRight: function () {
            var option = admin.util.deepClone($(this).data());
            admin.strToWin(option.window).layui.admin.popupRight(admin.parseLayerOption(option));
        },
        /* 全屏 */
        fullScreen: function () {
            var ac = 'layui-icon-screen-full', ic = 'layui-icon-screen-restore';
            var $ti = $(this).find('i');
            var isFullscreen = document.fullscreenElement || document.msFullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || false;
            if (isFullscreen) {
                var efs = document.exitFullscreen || document.webkitExitFullscreen || document.mozCancelFullScreen || document.msExitFullscreen;
                if (efs) {
                    efs.call(document);
                } else if (window.ActiveXObject) {
                    var ws = new ActiveXObject('WScript.Shell');
                    ws && ws.SendKeys('{F11}');
                }
                $ti.addClass(ac).removeClass(ic);
            } else {
                var el = document.documentElement;
                var rfs = el.requestFullscreen || el.webkitRequestFullscreen || el.mozRequestFullScreen || el.msRequestFullscreen;
                if (rfs) {
                    rfs.call(el);
                } else if (window.ActiveXObject) {
                    var wss = new ActiveXObject('WScript.Shell');
                    wss && wss.SendKeys('{F11}');
                }
                $ti.addClass(ic).removeClass(ac);
            }
        },
        /* 左滑动tab */
        leftPage: function () {
            admin.strToWin($(this).data('window')).layui.admin.rollPage('left');
        },
        /* 右滑动tab */
        rightPage: function () {
            admin.strToWin($(this).data('window')).layui.admin.rollPage();
        },
        /* 关闭当前选项卡 */
        closeThisTabs: function () {
            var url = $(this).data('url');
            admin.strToWin($(this).data('window')).layui.admin.closeThisTabs(url);
        },
        /* 关闭其他选项卡 */
        closeOtherTabs: function () {
            admin.strToWin($(this).data('window')).layui.admin.closeOtherTabs();
        },
        /* 关闭所有选项卡 */
        closeAllTabs: function () {
            admin.strToWin($(this).data('window')).layui.admin.closeAllTabs();
        },
        /* 关闭当前弹窗(智能) */
        closeDialog: function () {
            if ($(this).parents('.layui-layer').length > 0) admin.closeDialog(this);
            else admin.closeDialog();
        },
        /* 关闭当前iframe弹窗 */
        closeIframeDialog: function () {
            admin.closeDialog();
        },
        /* 关闭当前页面层弹窗 */
        closePageDialog: function () {
            admin.closeDialog(this);
        },
        /* 锁屏 */
        lockScreen: function () {
            admin.strToWin($(this).data('window')).layui.admin.lockScreen($(this).data('url'));
        }
    };
    /** 选择位置 */
    admin.chooseLocation = function (param) {
        var dialogTitle = param.title;  // 弹窗标题
        var onSelect = param.onSelect;  // 选择回调
        var needCity = param.needCity;  // 是否返回行政区
        var mapCenter = param.center;  // 地图中心
        var defaultZoom = param.defaultZoom;  // 地图默认缩放级别
        var pointZoom = param.pointZoom;  // 选中时地图缩放级别
        var searchKeywords = param.keywords;  // poi检索关键字
        var searchPageSize = param.pageSize;  // poi检索最大数量
        var mapJsUrl = param.mapJsUrl;  // 高德地图js的url
        if (dialogTitle === undefined) dialogTitle = '选择位置';
        if (defaultZoom === undefined) defaultZoom = 11;
        if (pointZoom === undefined) pointZoom = 17;
        if (searchKeywords === undefined) searchKeywords = '';
        if (searchPageSize === undefined) searchPageSize = 30;
        if (mapJsUrl === undefined) mapJsUrl = 'https://webapi.amap.com/maps?v=1.4.14&key=006d995d433058322319fa797f2876f5';
        var isSelMove = false, selLocation;
        // 搜索附近
        var searchNearBy = function (lat, lng) {
            AMap.service(['AMap.PlaceSearch'], function () {
                var placeSearch = new AMap.PlaceSearch({
                    type: '', pageSize: searchPageSize, pageIndex: 1
                });
                var cpoint = [lng, lat];
                placeSearch.searchNearBy(searchKeywords, cpoint, 1000, function (status, result) {
                    if (status === 'complete') {
                        var pois = result.poiList.pois;
                        var htmlList = '';
                        for (var i = 0; i < pois.length; i++) {
                            var poiItem = pois[i];
                            if (poiItem.location !== undefined) {
                                htmlList += '<div data-lng="' + poiItem.location.lng + '" data-lat="' + poiItem.location.lat + '" class="ew-map-select-search-list-item">';
                                htmlList += '     <div class="ew-map-select-search-list-item-title">' + poiItem.name + '</div>';
                                htmlList += '     <div class="ew-map-select-search-list-item-address">' + poiItem.address + '</div>';
                                htmlList += '     <div class="ew-map-select-search-list-item-icon-ok layui-hide"><i class="layui-icon layui-icon-ok-circle"></i></div>';
                                htmlList += '</div>';
                            }
                        }
                        $('#ew-map-select-pois').html(htmlList);
                    }
                });
            });
        };
        // 渲染地图
        var renderMap = function () {
            var mapOption = {
                resizeEnable: true, // 监控地图容器尺寸变化
                zoom: defaultZoom  // 初缩放级别
            };
            mapCenter && (mapOption.center = mapCenter);
            var map = new AMap.Map('ew-map-select-map', mapOption);
            // 地图加载完成
            map.on('complete', function () {
                var center = map.getCenter();
                searchNearBy(center.lat, center.lng);
            });
            // 地图移动结束事件
            map.on('moveend', function () {
                if (isSelMove) {
                    isSelMove = false;
                } else {
                    $('#ew-map-select-tips').addClass('layui-hide');
                    $('#ew-map-select-center-img').removeClass('bounceInDown');
                    setTimeout(function () {
                        $('#ew-map-select-center-img').addClass('bounceInDown');
                    });
                    var center = map.getCenter();
                    searchNearBy(center.lat, center.lng);
                }
            });
            // poi列表点击事件
            $('#ew-map-select-pois').off('click').on('click', '.ew-map-select-search-list-item', function () {
                $('#ew-map-select-tips').addClass('layui-hide');
                $('#ew-map-select-pois .ew-map-select-search-list-item-icon-ok').addClass('layui-hide');
                $(this).find('.ew-map-select-search-list-item-icon-ok').removeClass('layui-hide');
                $('#ew-map-select-center-img').removeClass('bounceInDown');
                setTimeout(function () {
                    $('#ew-map-select-center-img').addClass('bounceInDown');
                });
                var lng = $(this).data('lng');
                var lat = $(this).data('lat');
                var name = $(this).find('.ew-map-select-search-list-item-title').text();
                var address = $(this).find('.ew-map-select-search-list-item-address').text();
                selLocation = {name: name, address: address, lat: lat, lng: lng};
                isSelMove = true;
                map.setZoomAndCenter(pointZoom, [lng, lat]);
            });
            // 确定按钮点击事件
            $('#ew-map-select-btn-ok').click(function () {
                if (selLocation === undefined) {
                    layer.msg('请点击位置列表选择', {icon: 2, anim: 6});
                } else if (onSelect) {
                    if (needCity) {
                        var loadIndex = layer.load(2);
                        map.setCenter([selLocation.lng, selLocation.lat]);
                        map.getCity(function (result) {
                            layer.close(loadIndex);
                            selLocation.city = result;
                            admin.closeDialog('#ew-map-select-btn-ok');
                            onSelect(selLocation);
                        });
                    } else {
                        admin.closeDialog('#ew-map-select-btn-ok');
                        onSelect(selLocation);
                    }
                } else {
                    admin.closeDialog('#ew-map-select-btn-ok');
                }
            });
            // 搜索提示
            var $inputSearch = $('#ew-map-select-input-search');
            $inputSearch.off('input').on('input', function () {
                var keywords = $(this).val();
                var $selectTips = $('#ew-map-select-tips');
                if (!keywords) {
                    $selectTips.html('');
                    $selectTips.addClass('layui-hide');
                }
                AMap.plugin('AMap.Autocomplete', function () {
                    var autoComplete = new AMap.Autocomplete({city: '全国'});
                    autoComplete.search(keywords, function (status, result) {
                        if (result.tips) {
                            var tips = result.tips;
                            var htmlList = '';
                            for (var i = 0; i < tips.length; i++) {
                                var tipItem = tips[i];
                                if (tipItem.location !== undefined) {
                                    htmlList += '<div data-lng="' + tipItem.location.lng + '" data-lat="' + tipItem.location.lat + '" class="ew-map-select-search-list-item">';
                                    htmlList += '     <div class="ew-map-select-search-list-item-icon-search"><i class="layui-icon layui-icon-search"></i></div>';
                                    htmlList += '     <div class="ew-map-select-search-list-item-title">' + tipItem.name + '</div>';
                                    htmlList += '     <div class="ew-map-select-search-list-item-address">' + tipItem.address + '</div>';
                                    htmlList += '</div>';
                                }
                            }
                            $selectTips.html(htmlList);
                            if (tips.length === 0) $('#ew-map-select-tips').addClass('layui-hide');
                            else $('#ew-map-select-tips').removeClass('layui-hide');
                        } else {
                            $selectTips.html('');
                            $selectTips.addClass('layui-hide');
                        }
                    });
                });
            });
            $inputSearch.off('blur').on('blur', function () {
                var keywords = $(this).val();
                var $selectTips = $('#ew-map-select-tips');
                if (!keywords) {
                    $selectTips.html('');
                    $selectTips.addClass('layui-hide');
                }
            });
            $inputSearch.off('focus').on('focus', function () {
                var keywords = $(this).val();
                if (keywords) $('#ew-map-select-tips').removeClass('layui-hide');
            });
            // tips列表点击事件
            $('#ew-map-select-tips').off('click').on('click', '.ew-map-select-search-list-item', function () {
                $('#ew-map-select-tips').addClass('layui-hide');
                var lng = $(this).data('lng');
                var lat = $(this).data('lat');
                selLocation = undefined;
                map.setZoomAndCenter(pointZoom, [lng, lat]);
            });
        };
        // 显示弹窗
        var htmlStr = [
            '<div class="ew-map-select-tool" style="position: relative;">',
            '     搜索:<input id="ew-map-select-input-search" class="layui-input icon-search inline-block" style="width: 190px;" placeholder="输入关键字搜索" autocomplete="off" />',
            '     <button id="ew-map-select-btn-ok" class="layui-btn icon-btn pull-right" type="button"><i class="layui-icon">&#xe605;</i>确定</button>',
            '     <div id="ew-map-select-tips" class="ew-map-select-search-list layui-hide">',
            '     </div>',
            '</div>',
            '<div class="layui-row ew-map-select">',
            '     <div class="layui-col-sm7 ew-map-select-map-group" style="position: relative;">',
            '          <div id="ew-map-select-map"></div>',
            '          <i id="ew-map-select-center-img2" class="layui-icon layui-icon-add-1"></i>',
            '          <img id="ew-map-select-center-img" src="https://3gimg.qq.com/lightmap/components/locationPicker2/image/marker.png" alt=""/>',
            '     </div>',
            '     <div id="ew-map-select-pois" class="layui-col-sm5 ew-map-select-search-list">',
            '     </div>',
            '</div>'].join('');
        admin.open({
            id: 'ew-map-select', type: 1, title: dialogTitle, area: '750px', content: htmlStr,
            success: function (layero, dIndex) {
                var $content = $(layero).children('.layui-layer-content');
                $content.css('overflow', 'visible');
                admin.showLoading($content);
                if (undefined === window.AMap) {
                    $.getScript(mapJsUrl, function () {
                        renderMap();
                        admin.removeLoading($content);
                    });
                } else {
                    renderMap();
                    admin.removeLoading($content);
                }
            }
        });
    };
    /** 裁剪图片 */
    admin.cropImg = function (param) {
        var uploadedImageType = 'image/jpeg';  // 当前图片的类型
        var aspectRatio = param.aspectRatio;  // 裁剪比例
        var imgSrc = param.imgSrc;  // 裁剪图片
        var imgType = param.imgType;  // 图片类型
        var onCrop = param.onCrop;  // 裁剪完成回调
        var limitSize = param.limitSize;  // 限制选择的图片大小
        var acceptMime = param.acceptMime;  // 限制选择的图片类型
        var imgExts = param.exts;  // 限制选择的图片类型
        var dialogTitle = param.title;  // 弹窗的标题
        if (aspectRatio === undefined) aspectRatio = 1;
        if (dialogTitle === undefined) dialogTitle = '裁剪图片';
        if (imgType) uploadedImageType = imgType;
        layui.use(['Cropper', 'upload'], function () {
            var Cropper = layui.Cropper, upload = layui.upload;
            // 渲染组件
            function renderElem() {
                var imgCropper, $cropImg = $('#ew-crop-img');
                // 上传文件按钮绑定事件
                var uploadOptions = {
                    elem: '#ew-crop-img-upload', auto: false, drag: false,
                    choose: function (obj) {
                        obj.preview(function (index, file, result) {
                            uploadedImageType = file.type;
                            $cropImg.attr('src', result);
                            if (!imgSrc || !imgCropper) {
                                imgSrc = result;
                                renderElem();
                            } else {
                                imgCropper.destroy();
                                imgCropper = new Cropper($cropImg[0], options);
                            }
                        });
                    }
                };
                if (limitSize !== undefined) uploadOptions.size = limitSize;
                if (acceptMime !== undefined) uploadOptions.acceptMime = acceptMime;
                if (imgExts !== undefined) uploadOptions.exts = imgExts;
                upload.render(uploadOptions);
                // 没有传图片触发上传图片
                if (!imgSrc) return $('#ew-crop-img-upload').trigger('click');
                // 渲染裁剪组件
                var options = {aspectRatio: aspectRatio, preview: '#ew-crop-img-preview'};
                imgCropper = new Cropper($cropImg[0], options);
                // 操作按钮绑定事件
                $('.ew-crop-tool').on('click', '[data-method]', function () {
                    var data = $(this).data(), cropped, result;
                    if (!imgCropper || !data.method) return;
                    data = $.extend({}, data);
                    cropped = imgCropper.cropped;
                    switch (data.method) {
                        case 'rotate':
                            if (cropped && options.viewMode > 0) imgCropper.clear();
                            break;
                        case 'getCroppedCanvas':
                            if (uploadedImageType === 'image/jpeg') {
                                if (!data.option) data.option = {};
                                data.option.fillColor = '#fff';
                            }
                            break;
                    }
                    result = imgCropper[data.method](data.option, data.secondOption);
                    switch (data.method) {
                        case 'rotate':
                            if (cropped && options.viewMode > 0) imgCropper.crop();
                            break;
                        case 'scaleX':
                        case 'scaleY':
                            $(this).data('option', -data.option);
                            break;
                        case 'getCroppedCanvas':
                            if (result) {
                                onCrop && onCrop(result.toDataURL(uploadedImageType));
                                admin.closeDialog('#ew-crop-img');
                            } else {
                                layer.msg('裁剪失败', {icon: 2, anim: 6});
                            }
                            break;
                    }
                });
            }
            // 显示弹窗
            var htmlStr = [
                '<div class="layui-row">',
                '     <div class="layui-col-sm8" style="min-height: 9rem;">',
                '          <img id="ew-crop-img" src="', imgSrc || '', '" style="max-width:100%;" alt=""/>',
                '     </div>',
                '     <div class="layui-col-sm4 layui-hide-xs" style="padding: 15px;text-align: center;">',
                '          <div id="ew-crop-img-preview" style="width: 100%;height: 9rem;overflow: hidden;display: inline-block;border: 1px solid #dddddd;"></div>',
                '     </div>',
                '</div>',
                '<div class="text-center ew-crop-tool" style="padding: 15px 10px 5px 0;">',
                '     <div class="layui-btn-group" style="margin-bottom: 10px;margin-left: 10px;">',
                '          <button title="放大" data-method="zoom" data-option="0.1" class="layui-btn icon-btn" type="button"><i class="layui-icon layui-icon-add-1"></i></button>',
                '          <button title="缩小" data-method="zoom" data-option="-0.1" class="layui-btn icon-btn" type="button"><span style="display: inline-block;width: 12px;height: 2.5px;background: rgba(255, 255, 255, 0.9);vertical-align: middle;margin: 0 4px;"></span></button>',
                '     </div>',
                '     <div class="layui-btn-group layui-hide-xs" style="margin-bottom: 10px;">',
                '          <button title="向左旋转" data-method="rotate" data-option="-45" class="layui-btn icon-btn" type="button"><i class="layui-icon layui-icon-refresh-1" style="transform: rotateY(180deg) rotate(40deg);display: inline-block;"></i></button>',
                '          <button title="向右旋转" data-method="rotate" data-option="45" class="layui-btn icon-btn" type="button"><i class="layui-icon layui-icon-refresh-1" style="transform: rotate(30deg);display: inline-block;"></i></button>',
                '     </div>',
                '     <div class="layui-btn-group" style="margin-bottom: 10px;">',
                '          <button title="左移" data-method="move" data-option="-10" data-second-option="0" class="layui-btn icon-btn" type="button"><i class="layui-icon layui-icon-left"></i></button>',
                '          <button title="右移" data-method="move" data-option="10" data-second-option="0" class="layui-btn icon-btn" type="button"><i class="layui-icon layui-icon-right"></i></button>',
                '          <button title="上移" data-method="move" data-option="0" data-second-option="-10" class="layui-btn icon-btn" type="button"><i class="layui-icon layui-icon-up"></i></button>',
                '          <button title="下移" data-method="move" data-option="0" data-second-option="10" class="layui-btn icon-btn" type="button"><i class="layui-icon layui-icon-down"></i></button>',
                '     </div>',
                '     <div class="layui-btn-group" style="margin-bottom: 10px;">',
                '          <button title="左右翻转" data-method="scaleX" data-option="-1" class="layui-btn icon-btn" type="button" style="position: relative;width: 41px;"><i class="layui-icon layui-icon-triangle-r" style="position: absolute;left: 9px;top: 0;transform: rotateY(180deg);font-size: 16px;"></i><i class="layui-icon layui-icon-triangle-r" style="position: absolute; right: 3px; top: 0;font-size: 16px;"></i></button>',
                '          <button title="上下翻转" data-method="scaleY" data-option="-1" class="layui-btn icon-btn" type="button" style="position: relative;width: 41px;"><i class="layui-icon layui-icon-triangle-d" style="position: absolute;left: 11px;top: 6px;transform: rotateX(180deg);line-height: normal;font-size: 16px;"></i><i class="layui-icon layui-icon-triangle-d" style="position: absolute; left: 11px; top: 14px;line-height: normal;font-size: 16px;"></i></button>',
                '     </div>',
                '     <div class="layui-btn-group" style="margin-bottom: 10px;">',
                '          <button title="重新开始" data-method="reset" class="layui-btn icon-btn" type="button"><i class="layui-icon layui-icon-refresh"></i></button>',
                '          <button title="选择图片" id="ew-crop-img-upload" class="layui-btn icon-btn" type="button" style="border-radius: 0 2px 2px 0;"><i class="layui-icon layui-icon-upload-drag"></i></button>',
                '     </div>',
                '     <button data-method="getCroppedCanvas" data-option="{ &quot;maxWidth&quot;: 4096, &quot;maxHeight&quot;: 4096 }" class="layui-btn icon-btn" type="button" style="margin-left: 10px;margin-bottom: 10px;"><i class="layui-icon">&#xe605;</i>完成</button>',
                '</div>'].join('');
            admin.open({
                title: dialogTitle, area: '665px', type: 1, content: htmlStr,
                success: function (layero, dIndex) {
                    $(layero).children('.layui-layer-content').css('overflow', 'visible');
                    renderElem();
                }
            });
        });
    };
    /** 工具类 */
    admin.util = {
        /* 百度地图坐标转高德地图坐标 */
        Convert_BD09_To_GCJ02: function (point) {
            var x_pi = (3.14159265358979324 * 3000.0) / 180.0;
            var x = point.lng - 0.0065, y = point.lat - 0.006;
            var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
            var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
            return {lng: z * Math.cos(theta), lat: z * Math.sin(theta)};
        },
        /* 高德地图坐标转百度地图坐标 */
        Convert_GCJ02_To_BD09: function (point) {
            var x_pi = (3.14159265358979324 * 3000.0) / 180.0;
            var x = point.lng, y = point.lat;
            var z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);
            var theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);
            return {lng: z * Math.cos(theta) + 0.0065, lat: z * Math.sin(theta) + 0.006};
        },
        /* 动态数字 */
        animateNum: function (elem, isThd, delay, grain) {
            isThd = isThd === null || isThd === undefined || isThd === true || isThd === 'true';  // 是否是千分位
            delay = isNaN(delay) ? 500 : delay;   // 动画延迟
            grain = isNaN(grain) ? 100 : grain;   // 动画粒度
            var getPref = function (str) {
                var pref = '';
                for (var i = 0; i < str.length; i++) if (!isNaN(str.charAt(i))) return pref; else pref += str.charAt(i);
            }, getSuf = function (str) {
                var suf = '';
                for (var i = str.length - 1; i >= 0; i--) if (!isNaN(str.charAt(i))) return suf; else suf = str.charAt(i) + suf;
            }, toThd = function (num, isThd) {
                if (!isThd) return num;
                if (!/^[0-9]+.?[0-9]*$/.test(num)) return num;
                num = num.toString();
                return num.replace(num.indexOf('.') > 0 ? /(\d)(?=(\d{3})+(?:\.))/g : /(\d)(?=(\d{3})+(?:$))/g, '$1,');
            };
            $(elem).each(function () {
                var $this = $(this);
                var num = $this.data('num');
                if (!num) {
                    num = $this.text().replace(/,/g, '');  // 内容
                    $this.data('num', num);
                }
                var flag = 'INPUT,TEXTAREA'.indexOf($this.get(0).tagName) >= 0;  // 是否是输入框
                var pref = getPref(num.toString()), suf = getSuf(num.toString());
                var strNum = num.toString().replace(pref, '').replace(suf, '');
                if (isNaN(strNum * 1) || strNum === '0') {
                    flag ? $this.val(num) : $this.html(num);
                    return console.error('not a number');
                }
                var int_dec = strNum.split('.');
                var deciLen = int_dec[1] ? int_dec[1].length : 0;
                var startNum = 0.0, endNum = strNum;
                if (Math.abs(endNum * 1) > 10) startNum = parseFloat(int_dec[0].substring(0, int_dec[0].length - 1) + (int_dec[1] ? '.0' + int_dec[1] : ''));
                var oft = (endNum - startNum) / grain, temp = 0;
                var mTime = setInterval(function () {
                    var str = pref + toThd(startNum.toFixed(deciLen), isThd) + suf;
                    flag ? $this.val(str) : $this.html(str);
                    startNum += oft;
                    temp++;
                    if (Math.abs(startNum) >= Math.abs(endNum * 1) || temp > 5000) {
                        str = pref + toThd(endNum, isThd) + suf;
                        flag ? $this.val(str) : $this.html(str);
                        clearInterval(mTime);
                    }
                }, delay / grain);
            });
        },
        /* 深度克隆对象 */
        deepClone: function (obj) {
            var result;
            var oClass = admin.util.isClass(obj);
            if (oClass === 'Object') result = {};
            else if (oClass === 'Array') result = [];
            else return obj;
            for (var key in obj) {
                if (!obj.hasOwnProperty(key)) continue;
                var copy = obj[key], cClass = admin.util.isClass(copy);
                if (cClass === 'Object') result[key] = arguments.callee(copy); // 递归调用
                else if (cClass === 'Array') result[key] = arguments.callee(copy);
                else result[key] = obj[key];
            }
            return result;
        },
        /* 获取变量类型 */
        isClass: function (o) {
            if (o === null) return 'Null';
            if (o === undefined) return 'Undefined';
            return Object.prototype.toString.call(o).slice(8, -1);
        },
        /* 判断富文本是否为空 */
        fullTextIsEmpty: function (text) {
            if (!text) return true;
            var noTexts = ['img', 'audio', 'video', 'iframe', 'object'];
            for (var i = 0; i < noTexts.length; i++) {
                if (text.indexOf('<' + noTexts[i]) > -1) return false;
            }
            var str = text.replace(/\s*/g, '');  // 去掉所有空格
            if (!str) return true;
            str = str.replace(/&nbsp;/ig, '');  // 去掉所有&nbsp;
            if (!str) return true;
            str = str.replace(/<[^>]+>/g, '');   // 去掉所有html标签
            return !str;
        },
        /* 移除元素的style */
        removeStyle: function (elem, names) {
            if (typeof names === 'string') names = [names];
            for (var i = 0; i < names.length; i++) $(elem).css(names[i], '');
        },
        /* 滚动到顶部 */
        scrollTop: function (elem) {
            $(elem || 'html,body').animate({scrollTop: 0}, 300);
        },
        /* 模板解析 */
        tpl: function (html, data, openCode, closeCode) {
            if (html === undefined || html === null || typeof html !== 'string') return html;
            if (!data) data = {};
            if (!openCode) openCode = '{{';
            if (!closeCode) closeCode = '}}';
            var tool = {
                exp: function (str) {
                    return new RegExp(str, 'g');
                },
                // 匹配满足规则内容
                query: function (type, _, __) {
                    var types = ['#([\\s\\S])+?', '([^{#}])*?'][type || 0];
                    return tool.exp((_ || '') + openCode + types + closeCode + (__ || ''));
                },
                escape: function (str) {
                    return String(str || '').replace(/&(?!#?[a-zA-Z0-9]+;)/g, '&amp;')
                        .replace(/</g, '&lt;').replace(/>/g, '&gt;')
                        .replace(/'/g, '&#39;').replace(/"/g, '&quot;');
                },
                error: function (e, tplog) {
                    console.error('Laytpl Error:' + e + '\n' + (tplog || ''));
                },
                parse: function (tpl, data) {
                    var tplog = tpl;
                    try {
                        var jss = tool.exp('^' + openCode + '#'), jsse = tool.exp(closeCode + '$');
                        tpl = tpl.replace(tool.exp(openCode + '#'), openCode + '# ')
                            .replace(tool.exp(closeCode + '}'), '} ' + closeCode).replace(/\\/g, '\\\\')
                            // 不匹配指定区域的内容
                            .replace(tool.exp(openCode + '!(.+?)!' + closeCode), function (str) {
                                str = str.replace(tool.exp('^' + openCode + '!'), '')
                                    .replace(tool.exp('!' + closeCode), '')
                                    .replace(tool.exp(openCode + '|' + closeCode), function (tag) {
                                        return tag.replace(/(.)/g, '\\$1')
                                    });
                                return str
                            })
                            // 匹配JS规则内容
                            .replace(/(?="|')/g, '\\').replace(tool.query(), function (str) {
                                str = str.replace(jss, '').replace(jsse, '');
                                return '";' + str.replace(/\\/g, '') + ';view+="';
                            })
                            // 匹配普通字段
                            .replace(tool.query(1), function (str) {
                                var start = '"+(';
                                if (str.replace(/\s/g, '') === openCode + closeCode) return '';
                                str = str.replace(tool.exp(openCode + '|' + closeCode), '');
                                if (/^=/.test(str)) {
                                    str = str.replace(/^=/, '');
                                    start = '"+_escape_(';
                                }
                                return start + str.replace(/\\/g, '') + ')+"';
                            })
                            // 换行符处理
                            .replace(/\r\n/g, '\\r\\n" + "').replace(/\n/g, '\\n" + "').replace(/\r/g, '\\r" + "');
                        tpl = '"use strict";var view = "' + tpl + '";return view;';
                        tpl = new Function('d, _escape_', tpl);
                        return tpl(data, tool.escape);
                    } catch (e) {
                        tool.error(e, tplog);
                        return tplog;
                    }
                }
            };
            return tool.parse(html, data);
        },
        /* 渲染动态模板 */
        render: function (option) {
            if (typeof option.url === 'string') {
                option.success = function (res) {
                    admin.util.render($.extend({}, option, {url: res}));
                };
                if (option.ajax === 'ajax') admin.ajax(option);
                else admin.req(option.url, option.where, option.success, option.method, option);
                return;
            }
            var html = admin.util.tpl(option.tpl, option.url,
                option.open || setter.tplOpen, option.close || setter.tplClose);
            $(option.elem).next('[ew-tpl-rs]').remove();
            $(option.elem).after(html);
            $(option.elem).next().attr('ew-tpl-rs', '');
            option.done && option.done(option.url);
        }
    };
    /** 锁屏功能 */
    admin.lockScreen = function (url) {
        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.lockScreen(url);
        if (!url) url = 'tpl/tpl-lock-screen.html';
        var $lock = $('#ew-lock-screen-group');
        if ($lock.length > 0) {
            $lock.fadeIn('fast');
            admin.isLockScreen = true;
            admin.putTempData('isLockScreen', admin.isLockScreen, true);
        } else {
            var loadIndex = layer.load(2);
            admin.ajax({
                url: url, dataType: 'html',
                success: function (res) {
                    layer.close(loadIndex);
                    if (typeof res === 'string') {
                        $('body').append('<div id="ew-lock-screen-group">' + res + '</div>');
                        admin.isLockScreen = true;
                        admin.putTempData('isLockScreen', admin.isLockScreen, true);
                        admin.putTempData('lockScreenUrl', url, true);
                    } else {
                        console.error(res);
                        layer.msg(JSON.stringify(res), {icon: 2, anim: 6});
                    }
                }
            });
        }
    };
    /** 解除锁屏 */
    admin.unlockScreen = function (isRemove) {
        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.unlockScreen(isRemove);
        var $lock = $('#ew-lock-screen-group');
        isRemove ? $lock.remove() : $lock.fadeOut('fast');
        admin.isLockScreen = false;
        admin.putTempData('isLockScreen', null, true);
    };
    /** tips方法封装 */
    admin.tips = function (option) {
        return layer.tips(option.text, option.elem, {
            tips: [option.direction || 1, option.bg || '#191a23'],
            tipsMore: option.tipsMore, time: option.time || -1,
            success: function (layero) {
                var $content = $(layero).children('.layui-layer-content');
                if (option.padding || option.padding === 0) $content.css('padding', option.padding);
                if (option.color) $content.css('color', option.color);
                if (option.bgImg) $content.css('background-image', option.bgImg).children('.layui-layer-TipsG').css('z-index', '-1');
                if (option.fontSize) $content.css('font-size', option.fontSize);
                if (!option.offset) return;
                var offset = option.offset.split(',');
                var top = offset[0], left = offset.length > 1 ? offset[1] : undefined;
                if (top) $(layero).css('margin-top', top);
                if (left) $(layero).css('margin-left', left);
            }
        });
    };
    /** 渲染动态模板 */
    admin.renderTpl = function (elem) {
        if (!layui.admin) layui.admin = admin;
        // 解析数据
        function parseData(data) {
            if (!data) return;
            try {
                return new Function('return ' + data + ';')();
            } catch (e) {
                console.error(e + '\nlay-data: ' + data);
            }
        }
        $(elem || '[ew-tpl]').each(function () {
            var $this = $(this);
            var option = admin.util.deepClone($(this).data());
            option.elem = $this;
            option.tpl = $this.html();
            option.url = parseData($this.attr('ew-tpl'));
            option.headers = parseData(option.headers);
            option.where = parseData(option.where);
            if (option.done) {
                try {
                    option.done = new Function('res', option.done);
                } catch (e) {
                    console.error(e + '\nlay-data:' + option.done);
                    option.done = undefined;
                }
            }
            admin.util.render(option);
        });
    };
    /** 事件监听 */
    admin.on = function (events, callback) {
        return layui.onevent.call(this, 'admin', events, callback);
    };
    /** 修改配置信息 */
    admin.putSetting = function (key, value) {
        setter[key] = value;
        admin.putTempData(key, value, true);
    };
    /** 恢复配置信息 */
    admin.recoverState = function () {
        // 恢复锁屏状态
        if (admin.getTempData('isLockScreen', true)) admin.lockScreen(admin.getTempData('lockScreenUrl', true));
        // 恢复配置的主题
        if (setter.defaultTheme) admin.changeTheme(setter.defaultTheme, window, true, true);
        // 恢复页脚状态、导航箭头
        if (setter.closeFooter) $('body').addClass('close-footer');
        if (setter.navArrow !== undefined) {
            var $nav = $(sideDOM + '>.layui-nav-tree');
            $nav.removeClass('arrow2 arrow3');
            if (setter.navArrow) $nav.addClass(setter.navArrow);
        }
        // 恢复tab自动刷新
        if (setter.pageTabs && setter.tabAutoRefresh == 'true') $(tabDOM).attr('lay-autoRefresh', 'true');
    };
    /* 事件监听 */
    admin.on = function (events, callback) {
        return layui.onevent.call(this, 'admin', events, callback);
    };
    /** 侧导航折叠状态下鼠标经过无限悬浮效果 */
    var navItemDOM = '.layui-layout-admin.admin-nav-mini>.layui-side .layui-nav .layui-nav-item';
    $(document).on('mouseenter', navItemDOM + ',' + navItemDOM + ' .layui-nav-child>dd', function () {
        if (admin.getPageWidth() > 768) {
            var $that = $(this), $navChild = $that.find('>.layui-nav-child');
            if ($navChild.length > 0) {
                $that.addClass('admin-nav-hover');
                $navChild.css('left', $that.offset().left + $that.outerWidth());
                var top = $that.offset().top;
                if (top + $navChild.outerHeight() > admin.getPageHeight()) {
                    top = top - $navChild.outerHeight() + $that.outerHeight();
                    if (top < 60) top = 60;
                    $navChild.addClass('show-top');
                }
                $navChild.css('top', top);
                $navChild.addClass('ew-anim-drop-in');
            } else if ($that.hasClass('layui-nav-item')) {
                admin.tips({elem: $that, text: $that.find('cite').text(), direction: 2, offset: '12px'});
            }
        }
    }).on('mouseleave', navItemDOM + ',' + navItemDOM + ' .layui-nav-child>dd', function () {
        layer.closeAll('tips');
        var $this = $(this);
        $this.removeClass('admin-nav-hover');
        var $child = $this.find('>.layui-nav-child');
        $child.removeClass('show-top ew-anim-drop-in');
        $child.css({'left': 'auto', 'top': 'auto'});
    });
    /** 所有ew-event */
    $(document).on('click', '*[ew-event]', function () {
        var te = admin.events[$(this).attr('ew-event')];
        te && te.call(this, $(this));
    });
    /** 所有lay-tips处理 */
    $(document).on('mouseenter', '*[lay-tips]', function () {
        var $this = $(this);
        admin.tips({
            elem: $this, text: $this.attr('lay-tips'), direction: $this.attr('lay-direction'),
            bg: $this.attr('lay-bg'), offset: $this.attr('lay-offset'),
            padding: $this.attr('lay-padding'), color: $this.attr('lay-color'),
            bgImg: $this.attr('lay-bgImg'), fontSize: $this.attr('lay-fontSize')
        });
    }).on('mouseleave', '*[lay-tips]', function () {
        layer.closeAll('tips');
    });
    /** 表单搜索展开更多 */
    $(document).on('click', '.form-search-expand,[search-expand]', function () {
        var $this = $(this);
        var $form = $this.parents('.layui-form').first();
        var expand = $this.data('expand');
        var change = $this.attr('search-expand');
        if (expand === undefined || expand === true) {
            expand = true;
            $this.data('expand', false);
            $this.html('收起 <i class="layui-icon layui-icon-up"></i>');
            var $elem = $form.find('.form-search-show-expand');
            $elem.attr('expand-show', '');
            $elem.removeClass('form-search-show-expand');
        } else {
            expand = false;
            $this.data('expand', true);
            $this.html('展开 <i class="layui-icon layui-icon-down"></i>');
            $form.find('[expand-show]').addClass('form-search-show-expand');
        }
        if (!change) return;
        new Function('d', change)({expand: expand, elem: $this});
    });
    /** select使用fixed定位显示 */
    $(document).on('click.ew-sel-fixed', '.ew-select-fixed .layui-form-select .layui-select-title', function () {
        var $this = $(this), $dl = $this.parent().children('dl'), tTop = $this.offset().top;
        var tWidth = $this.outerWidth(), tHeight = $this.outerHeight(), scrollT = $(document).scrollTop();
        var dWidth = $dl.outerWidth(), dHeight = $dl.outerHeight();
        var top = tTop + tHeight + 5 - scrollT, left = $this.offset().left;
        if (top + dHeight > admin.getPageHeight()) top = top - dHeight - tHeight - 10;
        if (left + dWidth > admin.getPageWidth()) left = left - dWidth + tWidth;
        $dl.css({'left': left, 'top': top, 'min-width': tWidth});
    });
    /** 用于滚动时关闭一些fixed的组件 */
    admin.hideFixedEl = function () {
        $('.ew-select-fixed .layui-form-select').removeClass('layui-form-selected layui-form-selectup');  // select
        $('body>.layui-laydate').remove();  // laydate
    };
    /** 垂直导航栏展开折叠增加过渡效果 */
    $(document).on('click', '.layui-nav-tree>.layui-nav-item a', function () {
        var $this = $(this), $child = $this.siblings('.layui-nav-child'), $parent = $this.parent();
        if ($child.length === 0) return;
        if ($parent.hasClass('admin-nav-hover')) return;
        if ($parent.hasClass('layui-nav-itemed')) {  // 因为layui会处理一遍所以这里状态是相反的
            $child.css('display', 'none').slideDown('fast', function () {
                $(this).css('display', '');
            });
        } else {
            $child.css('display', 'block').slideUp('fast', function () {
                $(this).css('display', '');
            });
        }
        if ($this.parents('.layui-nav').attr('lay-shrink') === '_all') {  // 手风琴效果
            var $siblings = $this.parent().siblings('.layui-nav-itemed');
            $siblings.children('.layui-nav-child').css('display', 'block').slideUp('fast', function () {
                $(this).css('display', '');
            });
            $siblings.removeClass('layui-nav-itemed');
        }
    });
    $('.layui-nav-tree[lay-shrink="all"]').attr('lay-shrink', '_all');  // 让layui不处理手风琴效果
    /** 折叠面板展开折叠增加过渡效果 */
    $(document).on('click', '.layui-collapse>.layui-colla-item>.layui-colla-title', function () {
        var $this = $(this), $content = $this.siblings('.layui-colla-content')
            , $collapse = $this.parent().parent(), isNone = $content.hasClass('layui-show');
        if (isNone) {  // 因为layui会处理一遍所以这里状态是相反的
            $content.removeClass('layui-show').slideDown('fast').addClass('layui-show');
        } else {
            $content.css('display', 'block').slideUp('fast', function () {
                $(this).css('display', '');
            });
        }
        $this.children('.layui-colla-icon').html('&#xe602;')
            .css({'transition': 'all .3s', 'transform': 'rotate(' + (isNone ? '90deg' : '0deg') + ')'});
        if ($collapse.attr('lay-shrink') === '_all') {  // 手风琴效果
            var $show = $collapse.children('.layui-colla-item').children('.layui-colla-content.layui-show').not($content);
            $show.css('display', 'block').slideUp('fast', function () {
                $(this).css('display', '');
            });
            $show.removeClass('layui-show');
            $show.siblings('.layui-colla-title').children('.layui-colla-icon').html('&#xe602;')
                .css({'transition': 'all .3s', 'transform': 'rotate(0deg)'});
        }
    });
    $('.layui-collapse[lay-accordion]').attr('lay-shrink', '_all').removeAttr('lay-accordion');  // 让layui不处理手风琴效果
    /** 表单验证tips提示样式修改 */
    layer.oldTips = layer.tips;
    layer.tips = function (content, follow, options) {
        var $fFip;  // 判断是否是表单验证调用的tips
        if ($(follow).length > 0 && $(follow).parents('.layui-form').length > 0) {
            if ($(follow).is('input') || $(follow).is('textarea')) {
                $fFip = $(follow);
            } else if ($(follow).hasClass('layui-form-select') || $(follow).hasClass('layui-form-radio')
                || $(follow).hasClass('layui-form-checkbox') || $(follow).hasClass('layui-form-switch')) {
                $fFip = $(follow).prev();
            }
        }
        if (!$fFip) return layer.oldTips(content, follow, options);
        options.tips = [$fFip.attr('lay-direction') || 3, $fFip.attr('lay-bg') || '#ff4c4c'];
        setTimeout(function () {
            options.success = function (layero) {
                $(layero).children('.layui-layer-content').css('padding', '6px 12px');
            };
            layer.oldTips(content, follow, options);
        }, 100);
    };
    /** 所有ew-href处理 */
    $(document).on('click', '*[ew-href]', function () {
        var $this = $(this);
        var href = $this.attr('ew-href');
        if (!href || href === '#') return;
        if (href.indexOf('javascript:') === 0) return new Function(href.substring(11))();
        var title = $this.attr('ew-title') || $this.text();
        var win = $this.data('window');
        win ? (win = admin.strToWin(win)) : (win = top);
        var end = $this.attr('ew-end');
        try {
            if (end) end = new Function(end);
            else end = undefined;
        } catch (e) {
            console.error(e);
        }
        if (win.layui && win.layui.index) win.layui.index.openTab({title: title || '', url: href, end: end});
        else location.href = href;
    });
    /** 帮助鼠标右键菜单完成点击空白关闭的功能 */
    if (!layui.contextMenu) {
        $(document).off('click.ctxMenu').on('click.ctxMenu', function () {
            try {
                var ifs = top.window.frames;
                for (var i = 0; i < ifs.length; i++) {
                    var tif = ifs[i];
                    try {  // 可能会跨域
                        if (tif.layui && tif.layui.jquery) tif.layui.jquery('body>.ctxMenu').remove();
                    } catch (e) {
                    }
                }
                try {  // 可能会跨域
                    if (top.layui && top.layui.jquery) top.layui.jquery('body>.ctxMenu').remove();
                } catch (e) {
                }
            } catch (e) {
            }
        });
    }
    /** 读取缓存的配置信息 */
    setter = $.extend({
        pageTabs: true, cacheTab: true, openTabCtxMenu: true, maxTabNum: 20, tableName: 'easyweb-iframe',
        apiNoCache: true, ajaxSuccessBefore: function (res, url, obj) {
            return admin.ajaxSuccessBefore ? admin.ajaxSuccessBefore(res, url, obj) : true;
        }, getAjaxHeaders: function (res, url, obj) {
            return admin.getAjaxHeaders ? admin.getAjaxHeaders(res, url, obj) : [];
        }
    }, setter);
    var cache = admin.getTempData(true);
    if (cache) {
        var keys = ['pageTabs', 'cacheTab', 'defaultTheme', 'navArrow', 'closeFooter', 'tabAutoRefresh'];
        for (var i = 0; i < keys.length; i++) if (cache[keys[i]] !== undefined) setter[keys[i]] = cache[keys[i]];
    }
    admin.recoverState();  // 恢复本地配置
    admin.renderTpl();  // 渲染动态模板
    admin.setter = setter;
    if (layui.device().ios) $('body').addClass('ios-iframe-body');  // ios浏览器iframe兼容
    exports('admin', admin);
});
src/main/webapp/views/matCode/matCode.html
@@ -54,11 +54,11 @@
<div id="search-box" class="layui-form layui-card-header">
    <div class="layui-inline">
        <div class="layui-input-inline">
            <input class="layui-input" type="text" name="mat_no" placeholder="产品代号" autocomplete="off">
            <input class="layui-input" type="text" name="mat_no" placeholder="产品编码" autocomplete="off">
        </div>
    </div>
    <!-- 日期范围 -->
    <div class="layui-inline" style="width: 300px">
    </div>
        <div class="layui-input-inline">
            <input class="layui-input layui-laydate-range" name="modi_time" type="text" placeholder="起始时间 - 终止时间" autocomplete="off" style="width: 300px">
        </div>
@@ -84,11 +84,14 @@
        <button class="layui-btn layui-btn-normal layui-btn-sm" id="btn-export" lay-event="exportData" style="float: inherit">导出</button>
        <button class="layui-btn layui-btn-sm" id="btn-into" lay-event="intoData">导入</button>
        <button class="layui-btn layui-btn-danger layui-btn-sm" id="btn-print-batch" lay-event="btnPrintBatch">批量打印</button>
        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">新增</button>
        <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">删除</button>
    </div>
</script>
<script type="text/html" id="operate">
<!--    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">详情</a>-->
    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="edit">编辑</a>
    <button class="layui-btn layui-btn-danger layui-btn-xs btn-print" lay-event="btnPrint">打印</button>
</script>
src/main/webapp/views/matCode/matCode_detail.html
@@ -24,12 +24,12 @@
            </div>
        -->
        <div class="layui-inline"  style="width:31%;">
            <label class="layui-form-label"><span class="not-null">*</span>产品代号:</label>
            <label class="layui-form-label"><span class="not-null">*</span>产品编码:</label>
            <div class="layui-input-inline">
                <input id="matNo" class="layui-input" type="text" onkeyup="check(this.id, 'matCode')" lay-verify="required" >
            </div>
        </div>
        <div class="layui-inline"  style="width:31%;">
        <div class="layui-inline"  style="width:31%;display: none">
            <label class="layui-form-label">条  码:</label>
            <div class="layui-input-inline">
                <input id="barcode" class="layui-input" type="text">
@@ -66,7 +66,7 @@
            </div>
        </div>
        <div class="layui-inline"  style="width:31%">
            <label class="layui-form-label">:</label>
            <label class="layui-form-label">单重:</label>
            <div class="layui-input-inline">
                <input id="weight" class="layui-input" type="text" lay-verify="number" >
            </div>