|  |  | 
 |  |  |         generator.url="127.0.0.1:1433;databasename=htasrs"; | 
 |  |  |         generator.username="sa"; | 
 |  |  |         generator.password="sa@123"; | 
 |  |  |         generator.table="man_tag"; | 
 |  |  |         generator.table="man_mat"; | 
 |  |  |         generator.packagePath="zy.cloud.wms.manager"; | 
 |  |  | //        generator.js = false; | 
 |  |  | //        generator.html = false; | 
 
| New file | 
 |  |  | 
 |  |  | package zy.cloud.wms.common.utils; | 
 |  |  |  | 
 |  |  | import java.io.*; | 
 |  |  | import java.util.List; | 
 |  |  | import java.util.Map; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  |  * Created by vincent on 2020/10/17 | 
 |  |  |  */ | 
 |  |  | public class ListUtils { | 
 |  |  |  | 
 |  |  |     public static List<Map> deepCopy(List<Map> src) throws IOException, ClassNotFoundException { | 
 |  |  |         ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); | 
 |  |  |         ObjectOutputStream out = new ObjectOutputStream(byteOut); | 
 |  |  |         out.writeObject(src); | 
 |  |  |  | 
 |  |  |         ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray()); | 
 |  |  |         ObjectInputStream in = new ObjectInputStream(byteIn); | 
 |  |  |         @SuppressWarnings("unchecked") | 
 |  |  |         List<Map> dest = (List<Map>) in.readObject(); | 
 |  |  |         return dest; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | } | 
 
| New file | 
 |  |  | 
 |  |  | package zy.cloud.wms.common.utils; | 
 |  |  |  | 
 |  |  | import com.baomidou.mybatisplus.mapper.EntityWrapper; | 
 |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
 |  |  | import org.springframework.cache.annotation.Cacheable; | 
 |  |  | import org.springframework.stereotype.Component; | 
 |  |  | import zy.cloud.wms.manager.entity.Tag; | 
 |  |  | import zy.cloud.wms.manager.service.TagService; | 
 |  |  |  | 
 |  |  | import java.util.*; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  |  * 树形图工具 | 
 |  |  |  * Created by vincent on 2020/10/16 | 
 |  |  |  */ | 
 |  |  | @Component | 
 |  |  | public class TreeUtils { | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private TagService tagService; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 获取树图数据结构 | 
 |  |  |      */ | 
 |  |  |     @Cacheable(cacheNames="tagTree",key="#id") | 
 |  |  |     public ArrayList<Map> getTree(String id){ | 
 |  |  |         ArrayList<Map> result = new ArrayList<>(); | 
 |  |  |         Tag tag = tagService.selectById(id); | 
 |  |  |         // 主节点 | 
 |  |  |         Map<String, Object> map = new HashMap<>(); | 
 |  |  |         map.put("title", tag.getName()); | 
 |  |  |         map.put("id", tag.getId()); | 
 |  |  |         map.put("spread", true); | 
 |  |  |         List<Map> childrens = new ArrayList<>(); | 
 |  |  |         map.put("children", childrens); | 
 |  |  |         deal(tag, childrens); | 
 |  |  |         result.add(map); | 
 |  |  |         // 开始处理字节点 | 
 |  |  | //        deal(tag, childrens); | 
 |  |  |         return result; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 递归获取子节点数据 | 
 |  |  |      */ | 
 |  |  |     public void deal(Tag parent, List<Map> list) { | 
 |  |  |         List<Tag> tags = tagService.selectList( | 
 |  |  |                 new EntityWrapper<Tag>() | 
 |  |  |                         .eq("parent_id", parent.getId()) | 
 |  |  |                         .eq("status", "1")); | 
 |  |  |         for (Tag tag : tags) { | 
 |  |  |             Map<String, Object> map = new HashMap<>(); | 
 |  |  |             map.put("title", tag.getName()); | 
 |  |  |             map.put("id", tag.getId()); | 
 |  |  |             map.put("spread", true); | 
 |  |  |             List<Map> childrens = new ArrayList<>(); | 
 |  |  |             map.put("children", childrens); | 
 |  |  |             deal(tag, childrens); | 
 |  |  |             list.add(map); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     // ------------------------------------------------------------------------------------------------------- | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 条件筛选 | 
 |  |  |      */ | 
 |  |  |     @SuppressWarnings("unchecked") | 
 |  |  |     public void remove(String condition, List<Map> list) { | 
 |  |  |         Iterator<Map> iterator = list.iterator(); | 
 |  |  |         while (iterator.hasNext()) { | 
 |  |  |             Map map = iterator.next(); | 
 |  |  |             if (map.get("children") != null) { | 
 |  |  |                 List<Map> children = (List<Map>) map.get("children"); | 
 |  |  |                 if (children.size() > 0) { | 
 |  |  |                     remove(condition, children); | 
 |  |  |                 } else { | 
 |  |  |                     if (!String.valueOf(map.get("title")).contains(condition)) { | 
 |  |  |                         iterator.remove(); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | } | 
 
| New file | 
 |  |  | 
 |  |  | package zy.cloud.wms.manager.controller; | 
 |  |  |  | 
 |  |  | import com.alibaba.fastjson.JSONArray; | 
 |  |  | import com.alibaba.fastjson.JSONObject; | 
 |  |  | import com.baomidou.mybatisplus.mapper.EntityWrapper; | 
 |  |  | import com.baomidou.mybatisplus.mapper.Wrapper; | 
 |  |  | import com.baomidou.mybatisplus.plugins.Page; | 
 |  |  | import com.core.annotations.ManagerAuth; | 
 |  |  | import com.core.common.BaseRes; | 
 |  |  | import com.core.common.Cools; | 
 |  |  | import com.core.common.DateUtils; | 
 |  |  | import com.core.common.R; | 
 |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
 |  |  | import org.springframework.web.bind.annotation.*; | 
 |  |  | import zy.cloud.wms.common.web.BaseController; | 
 |  |  | import zy.cloud.wms.manager.entity.Mat; | 
 |  |  | import zy.cloud.wms.manager.service.MatService; | 
 |  |  |  | 
 |  |  | import java.util.ArrayList; | 
 |  |  | import java.util.HashMap; | 
 |  |  | import java.util.List; | 
 |  |  | import java.util.Map; | 
 |  |  |  | 
 |  |  | @RestController | 
 |  |  | public class MatController extends BaseController { | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private MatService matService; | 
 |  |  |  | 
 |  |  |     @RequestMapping(value = "/mat/{id}/auth") | 
 |  |  |     @ManagerAuth | 
 |  |  |     public R get(@PathVariable("id") String id) { | 
 |  |  |         return R.ok(matService.selectById(String.valueOf(id))); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @RequestMapping(value = "/mat/list/auth") | 
 |  |  |     @ManagerAuth | 
 |  |  |     public R list(@RequestParam(defaultValue = "1")Integer curr, | 
 |  |  |                   @RequestParam(defaultValue = "10")Integer limit, | 
 |  |  |                   @RequestParam(required = false)String orderByField, | 
 |  |  |                   @RequestParam(required = false)String orderByType, | 
 |  |  |                   @RequestParam Map<String, Object> param){ | 
 |  |  |         EntityWrapper<Mat> wrapper = new EntityWrapper<>(); | 
 |  |  |         excludeTrash(param); | 
 |  |  |         convert(param, wrapper); | 
 |  |  |         if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} | 
 |  |  |         return R.ok(matService.selectPage(new Page<>(curr, limit), wrapper)); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private void convert(Map<String, Object> map, EntityWrapper wrapper){ | 
 |  |  |         for (Map.Entry<String, Object> entry : map.entrySet()){ | 
 |  |  |             String val = String.valueOf(entry.getValue()); | 
 |  |  |             if (val.contains(RANGE_TIME_LINK)){ | 
 |  |  |                 String[] dates = val.split(RANGE_TIME_LINK); | 
 |  |  |                 wrapper.ge(entry.getKey(), DateUtils.convert(dates[0])); | 
 |  |  |                 wrapper.le(entry.getKey(), DateUtils.convert(dates[1])); | 
 |  |  |             } else { | 
 |  |  |                 wrapper.like(entry.getKey(), val); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @RequestMapping(value = "/mat/add/auth") | 
 |  |  |     @ManagerAuth | 
 |  |  |     public R add(Mat mat) { | 
 |  |  |         matService.insert(mat); | 
 |  |  |         return R.ok(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @RequestMapping(value = "/mat/update/auth") | 
 |  |  |     @ManagerAuth | 
 |  |  |     public R update(Mat mat){ | 
 |  |  |         if (Cools.isEmpty(mat) || null==mat.getId()){ | 
 |  |  |             return R.error(); | 
 |  |  |         } | 
 |  |  |         matService.updateById(mat); | 
 |  |  |         return R.ok(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @RequestMapping(value = "/mat/delete/auth") | 
 |  |  |     @ManagerAuth | 
 |  |  |     public R delete(@RequestParam String param){ | 
 |  |  |         List<Mat> list = JSONArray.parseArray(param, Mat.class); | 
 |  |  |         if (Cools.isEmpty(list)){ | 
 |  |  |             return R.error(); | 
 |  |  |         } | 
 |  |  |         for (Mat entity : list){ | 
 |  |  |             matService.delete(new EntityWrapper<>(entity)); | 
 |  |  |         } | 
 |  |  |         return R.ok(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @RequestMapping(value = "/mat/export/auth") | 
 |  |  |     @ManagerAuth | 
 |  |  |     public R export(@RequestBody JSONObject param){ | 
 |  |  |         EntityWrapper<Mat> wrapper = new EntityWrapper<>(); | 
 |  |  |         List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class); | 
 |  |  |         Map<String, Object> map = excludeTrash(param.getJSONObject("mat")); | 
 |  |  |         convert(map, wrapper); | 
 |  |  |         List<Mat> list = matService.selectList(wrapper); | 
 |  |  |         return R.ok(exportSupport(list, fields)); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @RequestMapping(value = "/matQuery/auth") | 
 |  |  |     @ManagerAuth | 
 |  |  |     public R query(String condition) { | 
 |  |  |         EntityWrapper<Mat> wrapper = new EntityWrapper<>(); | 
 |  |  |         wrapper.like("id", condition); | 
 |  |  |         Page<Mat> page = matService.selectPage(new Page<>(0, 10), wrapper); | 
 |  |  |         List<Map<String, Object>> result = new ArrayList<>(); | 
 |  |  |         for (Mat mat : page.getRecords()){ | 
 |  |  |             Map<String, Object> map = new HashMap<>(); | 
 |  |  |             map.put("id", mat.getId()); | 
 |  |  |             map.put("value", mat.getId()); | 
 |  |  |             result.add(map); | 
 |  |  |         } | 
 |  |  |         return R.ok(result); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @RequestMapping(value = "/mat/check/column/auth") | 
 |  |  |     @ManagerAuth | 
 |  |  |     public R query(@RequestBody JSONObject param) { | 
 |  |  |         Wrapper<Mat> wrapper = new EntityWrapper<Mat>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val")); | 
 |  |  |         if (null != matService.selectOne(wrapper)){ | 
 |  |  |             return R.parse(BaseRes.REPEAT).add(getComment(Mat.class, String.valueOf(param.get("key")))); | 
 |  |  |         } | 
 |  |  |         return R.ok(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | } | 
 
 |  |  | 
 |  |  | import com.core.common.R; | 
 |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
 |  |  | import org.springframework.web.bind.annotation.*; | 
 |  |  | import zy.cloud.wms.common.utils.ListUtils; | 
 |  |  | import zy.cloud.wms.common.utils.TreeUtils; | 
 |  |  | import zy.cloud.wms.common.web.BaseController; | 
 |  |  | import zy.cloud.wms.manager.entity.Tag; | 
 |  |  | import zy.cloud.wms.manager.service.TagService; | 
 |  |  | import zy.cloud.wms.manager.utils.NodeUtils; | 
 |  |  |  | 
 |  |  | import java.io.IOException; | 
 |  |  | import java.util.*; | 
 |  |  |  | 
 |  |  | @RestController | 
 |  |  | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private TagService tagService; | 
 |  |  |     @Autowired | 
 |  |  |     private TreeUtils treeUtils; | 
 |  |  |  | 
 |  |  |     @RequestMapping(value = "/tag/{id}/auth") | 
 |  |  |     @ManagerAuth | 
 |  |  | 
 |  |  |         return R.ok(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @PostMapping(value = "/tag/tree/auth") | 
 |  |  |     @ManagerAuth | 
 |  |  |     public R tree(@RequestParam(required = false, defaultValue = "") String condition) throws IOException, ClassNotFoundException { | 
 |  |  |         ArrayList<Map> tree = treeUtils.getTree("1"); | 
 |  |  |         // 深拷贝 | 
 |  |  |         List<Map> result = ListUtils.deepCopy(tree); | 
 |  |  |         if (!Cools.isEmpty(condition)) { | 
 |  |  |             treeUtils.remove(condition, result); | 
 |  |  |             treeUtils.remove(condition, result); | 
 |  |  |         } | 
 |  |  |         return R.ok(tree); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | } | 
 
| New file | 
 |  |  | 
 |  |  | package zy.cloud.wms.manager.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 io.swagger.annotations.ApiModelProperty; | 
 |  |  | import zy.cloud.wms.manager.service.NodeService; | 
 |  |  | import zy.cloud.wms.manager.service.TagService; | 
 |  |  | import zy.cloud.wms.system.entity.User; | 
 |  |  | import zy.cloud.wms.system.service.UserService; | 
 |  |  |  | 
 |  |  | import java.io.Serializable; | 
 |  |  | import java.text.SimpleDateFormat; | 
 |  |  | import java.util.Date; | 
 |  |  |  | 
 |  |  | @TableName("man_mat") | 
 |  |  | public class Mat implements Serializable { | 
 |  |  |  | 
 |  |  |     private static final long serialVersionUID = 1L; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * ID | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "ID") | 
 |  |  |     @TableId(value = "id", type = IdType.AUTO) | 
 |  |  |     private Long id; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 编号 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "编号") | 
 |  |  |     private String uuid; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 所属区域 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "所属区域") | 
 |  |  |     @TableField("node_id") | 
 |  |  |     private Long nodeId; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 所属归类 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "所属归类") | 
 |  |  |     @TableField("tag_id") | 
 |  |  |     private Long tagId; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 商品编号 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "商品编号") | 
 |  |  |     private String matnr; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 商品名称 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "商品名称") | 
 |  |  |     private String maktx; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 名称 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "名称") | 
 |  |  |     private String name; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 规格 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "规格") | 
 |  |  |     private String specs; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 型号 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "型号") | 
 |  |  |     private String model; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 批号 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "批号") | 
 |  |  |     private String batch; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 单位 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "单位") | 
 |  |  |     private String unit; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 条码 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "条码") | 
 |  |  |     private String barcode; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 单据类型 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "单据类型") | 
 |  |  |     @TableField("doc_id") | 
 |  |  |     private Long docId; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 单据编号 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "单据编号") | 
 |  |  |     @TableField("doc_num") | 
 |  |  |     private String docNum; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 客户名称 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "客户名称") | 
 |  |  |     @TableField("cust_name") | 
 |  |  |     private String custName; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 品项数 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "品项数") | 
 |  |  |     @TableField("item_num") | 
 |  |  |     private Integer itemNum; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 库存余量 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "库存余量") | 
 |  |  |     private Integer count; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 重量 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "重量") | 
 |  |  |     private Double weight; | 
 |  |  |  | 
 |  |  |     @ApiModelProperty(value= "") | 
 |  |  |     private Integer status; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 添加人员 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "添加人员") | 
 |  |  |     @TableField("create_by") | 
 |  |  |     private Long createBy; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 添加时间 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "添加时间") | 
 |  |  |     @TableField("create_time") | 
 |  |  |     private Date createTime; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 修改人员 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "修改人员") | 
 |  |  |     @TableField("update_by") | 
 |  |  |     private Long updateBy; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 修改时间 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "修改时间") | 
 |  |  |     @TableField("update_time") | 
 |  |  |     private Date updateTime; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 备注 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "备注") | 
 |  |  |     private String memo; | 
 |  |  |  | 
 |  |  |     public Mat() {} | 
 |  |  |  | 
 |  |  |     public Mat(String uuid,Long nodeId,Long tagId,String matnr,String maktx,String name,String specs,String model,String batch,String unit,String barcode,Long docId,String docNum,String custName,Integer itemNum,Integer count,Double weight,Integer status,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) { | 
 |  |  |         this.uuid = uuid; | 
 |  |  |         this.nodeId = nodeId; | 
 |  |  |         this.tagId = tagId; | 
 |  |  |         this.matnr = matnr; | 
 |  |  |         this.maktx = maktx; | 
 |  |  |         this.name = name; | 
 |  |  |         this.specs = specs; | 
 |  |  |         this.model = model; | 
 |  |  |         this.batch = batch; | 
 |  |  |         this.unit = unit; | 
 |  |  |         this.barcode = barcode; | 
 |  |  |         this.docId = docId; | 
 |  |  |         this.docNum = docNum; | 
 |  |  |         this.custName = custName; | 
 |  |  |         this.itemNum = itemNum; | 
 |  |  |         this.count = count; | 
 |  |  |         this.weight = weight; | 
 |  |  |         this.status = status; | 
 |  |  |         this.createBy = createBy; | 
 |  |  |         this.createTime = createTime; | 
 |  |  |         this.updateBy = updateBy; | 
 |  |  |         this.updateTime = updateTime; | 
 |  |  |         this.memo = memo; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | //    Mat mat = new Mat( | 
 |  |  | //            null,    // 编号 | 
 |  |  | //            null,    // 所属区域 | 
 |  |  | //            null,    // 所属归类 | 
 |  |  | //            null,    // 商品编号 | 
 |  |  | //            null,    // 商品名称 | 
 |  |  | //            null,    // 名称 | 
 |  |  | //            null,    // 规格 | 
 |  |  | //            null,    // 型号 | 
 |  |  | //            null,    // 批号 | 
 |  |  | //            null,    // 单位 | 
 |  |  | //            null,    // 条码 | 
 |  |  | //            null,    // 单据类型 | 
 |  |  | //            null,    // 单据编号 | 
 |  |  | //            null,    // 客户名称 | 
 |  |  | //            null,    // 品项数 | 
 |  |  | //            null,    // 库存余量 | 
 |  |  | //            null,    // 重量 | 
 |  |  | //            null,    //  | 
 |  |  | //            null,    // 添加人员 | 
 |  |  | //            null,    // 添加时间 | 
 |  |  | //            null,    // 修改人员 | 
 |  |  | //            null,    // 修改时间 | 
 |  |  | //            null    // 备注 | 
 |  |  | //    ); | 
 |  |  |  | 
 |  |  |     public Long getId() { | 
 |  |  |         return id; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void setId(Long id) { | 
 |  |  |         this.id = id; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String getUuid() { | 
 |  |  |         return uuid; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void setUuid(String uuid) { | 
 |  |  |         this.uuid = uuid; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public Long getNodeId() { | 
 |  |  |         return nodeId; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String getNodeId$(){ | 
 |  |  |         NodeService service = SpringUtils.getBean(NodeService.class); | 
 |  |  |         Node node = service.selectById(this.nodeId); | 
 |  |  |         if (!Cools.isEmpty(node)){ | 
 |  |  |             return String.valueOf(node.getName()); | 
 |  |  |         } | 
 |  |  |         return null; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void setNodeId(Long nodeId) { | 
 |  |  |         this.nodeId = nodeId; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public Long getTagId() { | 
 |  |  |         return tagId; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String getTagId$(){ | 
 |  |  |         TagService service = SpringUtils.getBean(TagService.class); | 
 |  |  |         Tag tag = service.selectById(this.tagId); | 
 |  |  |         if (!Cools.isEmpty(tag)){ | 
 |  |  |             return String.valueOf(tag.getId()); | 
 |  |  |         } | 
 |  |  |         return null; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void setTagId(Long tagId) { | 
 |  |  |         this.tagId = tagId; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String getMatnr() { | 
 |  |  |         return matnr; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void setMatnr(String matnr) { | 
 |  |  |         this.matnr = matnr; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String getMaktx() { | 
 |  |  |         return maktx; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void setMaktx(String maktx) { | 
 |  |  |         this.maktx = maktx; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String getName() { | 
 |  |  |         return name; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void setName(String name) { | 
 |  |  |         this.name = name; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String getSpecs() { | 
 |  |  |         return specs; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void setSpecs(String specs) { | 
 |  |  |         this.specs = specs; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String getModel() { | 
 |  |  |         return model; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void setModel(String model) { | 
 |  |  |         this.model = model; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String getBatch() { | 
 |  |  |         return batch; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void setBatch(String batch) { | 
 |  |  |         this.batch = batch; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String getUnit() { | 
 |  |  |         return unit; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void setUnit(String unit) { | 
 |  |  |         this.unit = unit; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String getBarcode() { | 
 |  |  |         return barcode; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void setBarcode(String barcode) { | 
 |  |  |         this.barcode = barcode; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public Long getDocId() { | 
 |  |  |         return docId; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void setDocId(Long docId) { | 
 |  |  |         this.docId = docId; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String getDocNum() { | 
 |  |  |         return docNum; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void setDocNum(String docNum) { | 
 |  |  |         this.docNum = docNum; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String getCustName() { | 
 |  |  |         return custName; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void setCustName(String custName) { | 
 |  |  |         this.custName = custName; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public Integer getItemNum() { | 
 |  |  |         return itemNum; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void setItemNum(Integer itemNum) { | 
 |  |  |         this.itemNum = itemNum; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public Integer getCount() { | 
 |  |  |         return count; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void setCount(Integer count) { | 
 |  |  |         this.count = count; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public Double getWeight() { | 
 |  |  |         return weight; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void setWeight(Double weight) { | 
 |  |  |         this.weight = weight; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public Integer getStatus() { | 
 |  |  |         return status; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void setStatus(Integer status) { | 
 |  |  |         this.status = status; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public Long getCreateBy() { | 
 |  |  |         return createBy; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String getCreateBy$(){ | 
 |  |  |         UserService service = SpringUtils.getBean(UserService.class); | 
 |  |  |         User user = service.selectById(this.createBy); | 
 |  |  |         if (!Cools.isEmpty(user)){ | 
 |  |  |             return String.valueOf(user.getNickname()); | 
 |  |  |         } | 
 |  |  |         return null; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void setCreateBy(Long createBy) { | 
 |  |  |         this.createBy = createBy; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public Date getCreateTime() { | 
 |  |  |         return createTime; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String getCreateTime$(){ | 
 |  |  |         if (Cools.isEmpty(this.createTime)){ | 
 |  |  |             return ""; | 
 |  |  |         } | 
 |  |  |         return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void setCreateTime(Date createTime) { | 
 |  |  |         this.createTime = createTime; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public Long getUpdateBy() { | 
 |  |  |         return updateBy; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String getUpdateBy$(){ | 
 |  |  |         UserService service = SpringUtils.getBean(UserService.class); | 
 |  |  |         User user = service.selectById(this.updateBy); | 
 |  |  |         if (!Cools.isEmpty(user)){ | 
 |  |  |             return String.valueOf(user.getNickname()); | 
 |  |  |         } | 
 |  |  |         return null; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void setUpdateBy(Long updateBy) { | 
 |  |  |         this.updateBy = updateBy; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public Date getUpdateTime() { | 
 |  |  |         return updateTime; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String getUpdateTime$(){ | 
 |  |  |         if (Cools.isEmpty(this.updateTime)){ | 
 |  |  |             return ""; | 
 |  |  |         } | 
 |  |  |         return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void setUpdateTime(Date updateTime) { | 
 |  |  |         this.updateTime = updateTime; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String getMemo() { | 
 |  |  |         return memo; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void setMemo(String memo) { | 
 |  |  |         this.memo = memo; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  | } | 
 
| New file | 
 |  |  | 
 |  |  | package zy.cloud.wms.manager.mapper; | 
 |  |  |  | 
 |  |  | import zy.cloud.wms.manager.entity.Mat; | 
 |  |  | import com.baomidou.mybatisplus.mapper.BaseMapper; | 
 |  |  | import org.apache.ibatis.annotations.Mapper; | 
 |  |  | import org.springframework.stereotype.Repository; | 
 |  |  |  | 
 |  |  | @Mapper | 
 |  |  | @Repository | 
 |  |  | public interface MatMapper extends BaseMapper<Mat> { | 
 |  |  |  | 
 |  |  | } | 
 
| New file | 
 |  |  | 
 |  |  | package zy.cloud.wms.manager.service; | 
 |  |  |  | 
 |  |  | import zy.cloud.wms.manager.entity.Mat; | 
 |  |  | import com.baomidou.mybatisplus.service.IService; | 
 |  |  |  | 
 |  |  | public interface MatService extends IService<Mat> { | 
 |  |  |  | 
 |  |  | } | 
 
| New file | 
 |  |  | 
 |  |  | package zy.cloud.wms.manager.service.impl; | 
 |  |  |  | 
 |  |  | import zy.cloud.wms.manager.mapper.MatMapper; | 
 |  |  | import zy.cloud.wms.manager.entity.Mat; | 
 |  |  | import zy.cloud.wms.manager.service.MatService; | 
 |  |  | import com.baomidou.mybatisplus.service.impl.ServiceImpl; | 
 |  |  | import org.springframework.stereotype.Service; | 
 |  |  |  | 
 |  |  | @Service("matService") | 
 |  |  | public class MatServiceImpl extends ServiceImpl<MatMapper, Mat> implements MatService { | 
 |  |  |  | 
 |  |  | } | 
 
| New file | 
 |  |  | 
 |  |  | <?xml version="1.0" encoding="UTF-8"?> | 
 |  |  | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | 
 |  |  | <mapper namespace="zy.cloud.wms.manager.mapper.MatMapper"> | 
 |  |  |  | 
 |  |  |     <!-- 通用查询映射结果 --> | 
 |  |  |     <resultMap id="BaseResultMap" type="zy.cloud.wms.manager.entity.Mat"> | 
 |  |  |         <id column="id" property="id" /> | 
 |  |  |         <result column="uuid" property="uuid" /> | 
 |  |  |         <result column="node_id" property="nodeId" /> | 
 |  |  |         <result column="tag_id" property="tagId" /> | 
 |  |  |         <result column="matnr" property="matnr" /> | 
 |  |  |         <result column="maktx" property="maktx" /> | 
 |  |  |         <result column="name" property="name" /> | 
 |  |  |         <result column="specs" property="specs" /> | 
 |  |  |         <result column="model" property="model" /> | 
 |  |  |         <result column="batch" property="batch" /> | 
 |  |  |         <result column="unit" property="unit" /> | 
 |  |  |         <result column="barcode" property="barcode" /> | 
 |  |  |         <result column="doc_id" property="docId" /> | 
 |  |  |         <result column="doc_num" property="docNum" /> | 
 |  |  |         <result column="cust_name" property="custName" /> | 
 |  |  |         <result column="item_num" property="itemNum" /> | 
 |  |  |         <result column="count" property="count" /> | 
 |  |  |         <result column="weight" property="weight" /> | 
 |  |  |         <result column="status" property="status" /> | 
 |  |  |         <result column="create_by" property="createBy" /> | 
 |  |  |         <result column="create_time" property="createTime" /> | 
 |  |  |         <result column="update_by" property="updateBy" /> | 
 |  |  |         <result column="update_time" property="updateTime" /> | 
 |  |  |         <result column="memo" property="memo" /> | 
 |  |  |  | 
 |  |  |     </resultMap> | 
 |  |  |  | 
 |  |  | </mapper> | 
 
| New file | 
 |  |  | 
 |  |  | #organizationTreeBar { | 
 |  |  |     padding: 10px 15px; | 
 |  |  |     border: 1px solid #e6e6e6; | 
 |  |  |     background-color: #f2f2f2; | 
 |  |  | } | 
 |  |  | #organizationTree { | 
 |  |  |     border: 1px solid #e6e6e6; | 
 |  |  |     border-top: none; | 
 |  |  |     padding: 10px 5px; | 
 |  |  |     overflow: auto; | 
 |  |  |     height: -webkit-calc(100vh - 125px); | 
 |  |  |     height: -moz-calc(100vh - 125px); | 
 |  |  |     height: calc(100vh - 145px); | 
 |  |  | } | 
 |  |  | .layui-tree-entry .layui-tree-txt { | 
 |  |  |     padding: 0 5px; | 
 |  |  |     border: 1px transparent solid; | 
 |  |  |     text-decoration: none !important; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | .layui-tree-entry.ew-tree-click .layui-tree-txt { | 
 |  |  |     background-color: #fff3e0; | 
 |  |  |     border: 1px #FFE6B0 solid; | 
 |  |  | } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  | #organizationEditForm.layui-form { | 
 |  |  |     padding: 25px 30px 0 0; | 
 |  |  | } | 
 |  |  | #organizationEditForm .layui-form-label { | 
 |  |  |     padding: 8px 15px; | 
 |  |  |     box-sizing: content-box; | 
 |  |  |     -webkit-box-sizing: content-box; | 
 |  |  | } | 
 |  |  | #organizationEditForm .layui-form-required:before { | 
 |  |  |     content: "*"; | 
 |  |  |     display: inline-block; | 
 |  |  |     font-family: SimSun,serif; | 
 |  |  |     margin-right: 4px; | 
 |  |  |     font-size: 14px; | 
 |  |  |     line-height: 1; | 
 |  |  |     color: #ed4014; | 
 |  |  | } | 
 |  |  | #organizationEditForm .layui-input { | 
 |  |  |     height: 36px; | 
 |  |  |     border-radius: 4px; | 
 |  |  | } | 
 |  |  | #organizationEditForm .cool-button-contain { | 
 |  |  |     text-align: right; | 
 |  |  |     margin: 20px 0; | 
 |  |  | } | 
 |  |  | #organizationEditForm .layui-form-radio>i:hover, .layui-form-radioed>i { | 
 |  |  |     color: #007bff; | 
 |  |  | } | 
 |  |  | #organizationEditForm .layui-btn { | 
 |  |  |     height: 36px; | 
 |  |  |     line-height: 36px; | 
 |  |  |     border-radius: 4px; | 
 |  |  |     box-shadow: 0 1px 0 rgba(0,0,0,.03); | 
 |  |  | } | 
 |  |  | #organizationEditForm .layui-btn-primary:hover { | 
 |  |  |     border-color: #777777; | 
 |  |  | } | 
 
| New file | 
 |  |  | 
 |  |  | var pageCurr; | 
 |  |  | layui.use(['table','laydate', 'form'], function(){ | 
 |  |  |     var table = layui.table; | 
 |  |  |     var $ = layui.jquery; | 
 |  |  |     var layer = layui.layer; | 
 |  |  |     var layDate = layui.laydate; | 
 |  |  |     var form = layui.form; | 
 |  |  |  | 
 |  |  |     // 数据渲染 | 
 |  |  |     tableIns = table.render({ | 
 |  |  |         elem: '#mat', | 
 |  |  |         headers: {token: localStorage.getItem('token')}, | 
 |  |  |         url: baseUrl+'/mat/list/auth', | 
 |  |  |         page: true, | 
 |  |  |         limit: 16, | 
 |  |  |         limits: [16, 30, 50, 100, 200, 500], | 
 |  |  |         even: true, | 
 |  |  |         toolbar: '#toolbar', | 
 |  |  |         cellMinWidth: 50, | 
 |  |  |         cols: [[ | 
 |  |  |             {type: 'checkbox'} | 
 |  |  | //            ,{field: 'id', title: 'ID', sort: true,align: 'center', fixed: 'left', width: 80} | 
 |  |  |             ,{field: 'id', align: 'center',title: 'ID'} | 
 |  |  |             ,{field: 'uuid', align: 'center',title: '编号'} | 
 |  |  |             ,{field: 'nodeId$', align: 'center',title: '所属区域',event: 'nodeId', style: 'cursor:pointer'} | 
 |  |  |             ,{field: 'tagId$', align: 'center',title: '所属归类',event: 'tagId', style: 'cursor:pointer'} | 
 |  |  |             ,{field: 'matnr', align: 'center',title: '商品编号'} | 
 |  |  |             ,{field: 'maktx', align: 'center',title: '商品名称'} | 
 |  |  |             ,{field: 'name', align: 'center',title: '名称'} | 
 |  |  |             ,{field: 'specs', align: 'center',title: '规格'} | 
 |  |  |             ,{field: 'model', align: 'center',title: '型号'} | 
 |  |  |             ,{field: 'batch', align: 'center',title: '批号'} | 
 |  |  |             ,{field: 'unit', align: 'center',title: '单位'} | 
 |  |  |             ,{field: 'barcode', align: 'center',title: '条码'} | 
 |  |  |             ,{field: 'docId', align: 'center',title: '单据类型'} | 
 |  |  |             ,{field: 'docNum', align: 'center',title: '单据编号'} | 
 |  |  |             ,{field: 'custName', align: 'center',title: '客户名称'} | 
 |  |  |             ,{field: 'itemNum', align: 'center',title: '品项数'} | 
 |  |  |             ,{field: 'count', align: 'center',title: '库存余量'} | 
 |  |  |             ,{field: 'weight', align: 'center',title: '重量'} | 
 |  |  |             ,{field: 'status', align: 'center',title: ''} | 
 |  |  |             ,{field: 'createBy$', align: 'center',title: '添加人员',event: 'createBy', style: 'cursor:pointer'} | 
 |  |  |             ,{field: 'createTime$', align: 'center',title: '添加时间'} | 
 |  |  |             ,{field: 'updateBy$', align: 'center',title: '修改人员',event: 'updateBy', style: 'cursor:pointer'} | 
 |  |  |             ,{field: 'updateTime$', align: 'center',title: '修改时间'} | 
 |  |  |             ,{field: 'memo', align: 'center',title: '备注'} | 
 |  |  |  | 
 |  |  |             ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:150} | 
 |  |  |         ]], | 
 |  |  |         request: { | 
 |  |  |             pageName: 'curr', | 
 |  |  |             pageSize: 'limit' | 
 |  |  |         }, | 
 |  |  |         parseData: function (res) { | 
 |  |  |             return { | 
 |  |  |                 'code': res.code, | 
 |  |  |                 'msg': res.msg, | 
 |  |  |                 'count': res.data.total, | 
 |  |  |                 'data': res.data.records | 
 |  |  |             } | 
 |  |  |         }, | 
 |  |  |         response: { | 
 |  |  |             statusCode: 200 | 
 |  |  |         }, | 
 |  |  |         done: function(res, curr, count) { | 
 |  |  |             if (res.code === 403) { | 
 |  |  |                 top.location.href = baseUrl+"/"; | 
 |  |  |             } | 
 |  |  |             pageCurr=curr; | 
 |  |  |             limit(); | 
 |  |  |             form.on('checkbox(tableCheckbox)', function (data) { | 
 |  |  |                 var _index = $(data.elem).attr('table-index')||0; | 
 |  |  |                 if(data.elem.checked){ | 
 |  |  |                     res.data[_index][data.value] = 'Y'; | 
 |  |  |                 }else{ | 
 |  |  |                     res.data[_index][data.value] = 'N'; | 
 |  |  |                 } | 
 |  |  |             }); | 
 |  |  |         } | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     // 监听排序事件 | 
 |  |  |     table.on('sort(locMast)', function (obj) { | 
 |  |  |         var searchData = {}; | 
 |  |  |         $.each($('#search-box [name]').serializeArray(), function() { | 
 |  |  |             searchData[this.name] = this.value; | 
 |  |  |         }); | 
 |  |  |         searchData['orderByField'] = obj.field; | 
 |  |  |         searchData['orderByType'] = obj.type; | 
 |  |  |         tableIns.reload({ | 
 |  |  |             where: searchData, | 
 |  |  |             page: { | 
 |  |  |                 curr: 1 | 
 |  |  |             }, | 
 |  |  |             done: function (res, curr, count) { | 
 |  |  |                 if (res.code === 403) { | 
 |  |  |                     top.location.href = baseUrl+"/"; | 
 |  |  |                 } | 
 |  |  |                 pageCurr=curr; | 
 |  |  |                 limit(); | 
 |  |  |             } | 
 |  |  |         }); | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     // 监听头工具栏事件 | 
 |  |  |     table.on('toolbar(mat)', function (obj) { | 
 |  |  |         var checkStatus = table.checkStatus(obj.config.id); | 
 |  |  |         switch(obj.event) { | 
 |  |  |             case 'addData': | 
 |  |  |                 layer.open({ | 
 |  |  |                     type: 2, | 
 |  |  |                     title: '新增', | 
 |  |  |                     maxmin: true, | 
 |  |  |                     area: [top.detailWidth, top.detailHeight], | 
 |  |  |                     content: 'mat_detail.html', | 
 |  |  |                     success: function(layero, index){ | 
 |  |  |                         layer.getChildFrame('#data-detail-submit-edit', index).hide(); | 
 |  |  |                         clearFormVal(layer.getChildFrame('#detail', index)); | 
 |  |  |                         layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"}); | 
 |  |  |                     } | 
 |  |  |                 }); | 
 |  |  |                 break; | 
 |  |  |             case 'deleteData': | 
 |  |  |                 var data = checkStatus.data; | 
 |  |  |                 if (data.length === 0){ | 
 |  |  |                     layer.msg('请选择数据'); | 
 |  |  |                 } else { | 
 |  |  |                     layer.confirm('确定删除'+(data.length===1?'此':data.length)+'条数据吗', function(){ | 
 |  |  |                         $.ajax({ | 
 |  |  |                             url: baseUrl+"/mat/delete/auth", | 
 |  |  |                             headers: {'token': localStorage.getItem('token')}, | 
 |  |  |                             data: {param: JSON.stringify(data)}, | 
 |  |  |                             method: 'POST', | 
 |  |  |                             traditional:true, | 
 |  |  |                             success: function (res) { | 
 |  |  |                                 if (res.code === 200){ | 
 |  |  |                                     layer.closeAll(); | 
 |  |  |                                     tableReload(false); | 
 |  |  |                                 } else if (res.code === 403){ | 
 |  |  |                                     top.location.href = baseUrl+"/"; | 
 |  |  |                                 } else { | 
 |  |  |                                     layer.msg(res.msg) | 
 |  |  |                                 } | 
 |  |  |                             } | 
 |  |  |                         }) | 
 |  |  |                     }); | 
 |  |  |                 } | 
 |  |  |                 break; | 
 |  |  |             case 'exportData': | 
 |  |  |                 layer.confirm('确定导出Excel吗', {shadeClose: true}, function(){ | 
 |  |  |                     var titles=[]; | 
 |  |  |                     var fields=[]; | 
 |  |  |                     obj.config.cols[0].map(function (col) { | 
 |  |  |                         if (col.type === 'normal' && col.hide === false && col.toolbar == null) { | 
 |  |  |                             titles.push(col.title); | 
 |  |  |                             fields.push(col.field); | 
 |  |  |                         } | 
 |  |  |                     }); | 
 |  |  |                     var exportData = {}; | 
 |  |  |                     $.each($('#search-box [name]').serializeArray(), function() { | 
 |  |  |                         exportData[this.name] = this.value; | 
 |  |  |                     }); | 
 |  |  |                     var param = { | 
 |  |  |                         'mat': exportData, | 
 |  |  |                         'fields': fields | 
 |  |  |                     }; | 
 |  |  |                     $.ajax({ | 
 |  |  |                         url: baseUrl+"/mat/export/auth", | 
 |  |  |                         headers: {'token': localStorage.getItem('token')}, | 
 |  |  |                         data: JSON.stringify(param), | 
 |  |  |                         dataType:'json', | 
 |  |  |                         contentType:'application/json;charset=UTF-8', | 
 |  |  |                         method: 'POST', | 
 |  |  |                         success: function (res) { | 
 |  |  |                             layer.closeAll(); | 
 |  |  |                             if (res.code === 200) { | 
 |  |  |                                 table.exportFile(titles,res.data,'xls'); | 
 |  |  |                             } else if (res.code === 403) { | 
 |  |  |                                 top.location.href = baseUrl+"/"; | 
 |  |  |                             } else { | 
 |  |  |                                 layer.msg(res.msg) | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                     }); | 
 |  |  |                 }); | 
 |  |  |                 break; | 
 |  |  |         } | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     // 监听行工具事件 | 
 |  |  |     table.on('tool(mat)', function(obj){ | 
 |  |  |         var data = obj.data; | 
 |  |  |         switch (obj.event) { | 
 |  |  |             // 详情 | 
 |  |  |             case 'detail': | 
 |  |  |                 layer.open({ | 
 |  |  |                     type: 2, | 
 |  |  |                     title: '详情', | 
 |  |  |                     maxmin: true, | 
 |  |  |                     area: [top.detailWidth, top.detailHeight], | 
 |  |  |                     shadeClose: true, | 
 |  |  |                     content: 'mat_detail.html', | 
 |  |  |                     success: function(layero, index){ | 
 |  |  |                         setFormVal(layer.getChildFrame('#detail', index), data, true); | 
 |  |  |                         top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true); | 
 |  |  |                         layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#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 'edit': | 
 |  |  |                 layer.open({ | 
 |  |  |                     type: 2, | 
 |  |  |                     title: '修改', | 
 |  |  |                     maxmin: true, | 
 |  |  |                     area: [top.detailWidth, top.detailHeight], | 
 |  |  |                     content: 'mat_detail.html', | 
 |  |  |                     success: function(layero, index){ | 
 |  |  |                         layer.getChildFrame('#data-detail-submit-save', index).hide(); | 
 |  |  |                         setFormVal(layer.getChildFrame('#detail', index), data, false); | 
 |  |  |                         top.convertDisabled(layer.getChildFrame('#data-detail :input', index), false); | 
 |  |  |                         top.convertDisabled(layer.getChildFrame('#id', index), true); | 
 |  |  |                         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 'nodeId': | 
 |  |  |                 var param = top.reObject(data).nodeId; | 
 |  |  |                 if (param === undefined) { | 
 |  |  |                     layer.msg("无数据"); | 
 |  |  |                 } else { | 
 |  |  |                    layer.open({ | 
 |  |  |                        type: 2, | 
 |  |  |                        title: '所属区域详情', | 
 |  |  |                        maxmin: true, | 
 |  |  |                        area: [top.detailWidth, top.detailHeight], | 
 |  |  |                        shadeClose: true, | 
 |  |  |                        content: '../node/node_detail.html', | 
 |  |  |                        success: function(layero, index){ | 
 |  |  |                            $.ajax({ | 
 |  |  |                                url: "baseUrl+/node/"+ param +"/auth", | 
 |  |  |                                headers: {'token': localStorage.getItem('token')}, | 
 |  |  |                                method: 'GET', | 
 |  |  |                                success: function (res) { | 
 |  |  |                                    if (res.code === 200){ | 
 |  |  |                                        setFormVal(layer.getChildFrame('#detail', index), res.data, true); | 
 |  |  |                                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true); | 
 |  |  |                                        layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#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'); | 
 |  |  |                                    } else if (res.code === 403){ | 
 |  |  |                                        top.location.href = baseUrl+"/"; | 
 |  |  |                                    }else { | 
 |  |  |                                        layer.msg(res.msg) | 
 |  |  |                                    } | 
 |  |  |                                } | 
 |  |  |                            }) | 
 |  |  |                        } | 
 |  |  |                    }); | 
 |  |  |                 } | 
 |  |  |                 break; | 
 |  |  |             case 'tagId': | 
 |  |  |                 var param = top.reObject(data).tagId; | 
 |  |  |                 if (param === undefined) { | 
 |  |  |                     layer.msg("无数据"); | 
 |  |  |                 } else { | 
 |  |  |                    layer.open({ | 
 |  |  |                        type: 2, | 
 |  |  |                        title: '所属归类详情', | 
 |  |  |                        maxmin: true, | 
 |  |  |                        area: [top.detailWidth, top.detailHeight], | 
 |  |  |                        shadeClose: true, | 
 |  |  |                        content: '../tag/tag_detail.html', | 
 |  |  |                        success: function(layero, index){ | 
 |  |  |                            $.ajax({ | 
 |  |  |                                url: "baseUrl+/tag/"+ param +"/auth", | 
 |  |  |                                headers: {'token': localStorage.getItem('token')}, | 
 |  |  |                                method: 'GET', | 
 |  |  |                                success: function (res) { | 
 |  |  |                                    if (res.code === 200){ | 
 |  |  |                                        setFormVal(layer.getChildFrame('#detail', index), res.data, true); | 
 |  |  |                                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true); | 
 |  |  |                                        layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#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'); | 
 |  |  |                                    } else if (res.code === 403){ | 
 |  |  |                                        top.location.href = baseUrl+"/"; | 
 |  |  |                                    }else { | 
 |  |  |                                        layer.msg(res.msg) | 
 |  |  |                                    } | 
 |  |  |                                } | 
 |  |  |                            }) | 
 |  |  |                        } | 
 |  |  |                    }); | 
 |  |  |                 } | 
 |  |  |                 break; | 
 |  |  |             case 'createBy': | 
 |  |  |                 var param = top.reObject(data).createBy; | 
 |  |  |                 if (param === undefined) { | 
 |  |  |                     layer.msg("无数据"); | 
 |  |  |                 } else { | 
 |  |  |                    layer.open({ | 
 |  |  |                        type: 2, | 
 |  |  |                        title: '添加人员详情', | 
 |  |  |                        maxmin: true, | 
 |  |  |                        area: [top.detailWidth, top.detailHeight], | 
 |  |  |                        shadeClose: true, | 
 |  |  |                        content: '../user/user_detail.html', | 
 |  |  |                        success: function(layero, index){ | 
 |  |  |                            $.ajax({ | 
 |  |  |                                url: "baseUrl+/user/"+ param +"/auth", | 
 |  |  |                                headers: {'token': localStorage.getItem('token')}, | 
 |  |  |                                method: 'GET', | 
 |  |  |                                success: function (res) { | 
 |  |  |                                    if (res.code === 200){ | 
 |  |  |                                        setFormVal(layer.getChildFrame('#detail', index), res.data, true); | 
 |  |  |                                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true); | 
 |  |  |                                        layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#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'); | 
 |  |  |                                    } else if (res.code === 403){ | 
 |  |  |                                        top.location.href = baseUrl+"/"; | 
 |  |  |                                    }else { | 
 |  |  |                                        layer.msg(res.msg) | 
 |  |  |                                    } | 
 |  |  |                                } | 
 |  |  |                            }) | 
 |  |  |                        } | 
 |  |  |                    }); | 
 |  |  |                 } | 
 |  |  |                 break; | 
 |  |  |             case 'updateBy': | 
 |  |  |                 var param = top.reObject(data).updateBy; | 
 |  |  |                 if (param === undefined) { | 
 |  |  |                     layer.msg("无数据"); | 
 |  |  |                 } else { | 
 |  |  |                    layer.open({ | 
 |  |  |                        type: 2, | 
 |  |  |                        title: '修改人员详情', | 
 |  |  |                        maxmin: true, | 
 |  |  |                        area: [top.detailWidth, top.detailHeight], | 
 |  |  |                        shadeClose: true, | 
 |  |  |                        content: '../user/user_detail.html', | 
 |  |  |                        success: function(layero, index){ | 
 |  |  |                            $.ajax({ | 
 |  |  |                                url: "baseUrl+/user/"+ param +"/auth", | 
 |  |  |                                headers: {'token': localStorage.getItem('token')}, | 
 |  |  |                                method: 'GET', | 
 |  |  |                                success: function (res) { | 
 |  |  |                                    if (res.code === 200){ | 
 |  |  |                                        setFormVal(layer.getChildFrame('#detail', index), res.data, true); | 
 |  |  |                                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true); | 
 |  |  |                                        layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#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'); | 
 |  |  |                                    } else if (res.code === 403){ | 
 |  |  |                                        top.location.href = baseUrl+"/"; | 
 |  |  |                                    }else { | 
 |  |  |                                        layer.msg(res.msg) | 
 |  |  |                                    } | 
 |  |  |                                } | 
 |  |  |                            }) | 
 |  |  |                        } | 
 |  |  |                    }); | 
 |  |  |                 } | 
 |  |  |                 break; | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     // 数据保存动作 | 
 |  |  |     form.on('submit(save)', function () { | 
 |  |  |         if (banMsg != null){ | 
 |  |  |             layer.msg(banMsg); | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |         method("add"); | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     // 数据修改动作 | 
 |  |  |     form.on('submit(edit)', function () { | 
 |  |  |         method("update") | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     function method(name){ | 
 |  |  |         var index = layer.load(1, { | 
 |  |  |             shade: [0.5,'#000'] //0.1透明度的背景 | 
 |  |  |         }); | 
 |  |  |         var data = { | 
 |  |  | //            id: $('#id').val(), | 
 |  |  |             id: $('#id').val(), | 
 |  |  |             uuid: $('#uuid').val(), | 
 |  |  |             nodeId: $('#nodeId').val(), | 
 |  |  |             tagId: $('#tagId').val(), | 
 |  |  |             matnr: $('#matnr').val(), | 
 |  |  |             maktx: $('#maktx').val(), | 
 |  |  |             name: $('#name').val(), | 
 |  |  |             specs: $('#specs').val(), | 
 |  |  |             model: $('#model').val(), | 
 |  |  |             batch: $('#batch').val(), | 
 |  |  |             unit: $('#unit').val(), | 
 |  |  |             barcode: $('#barcode').val(), | 
 |  |  |             docId: $('#docId').val(), | 
 |  |  |             docNum: $('#docNum').val(), | 
 |  |  |             custName: $('#custName').val(), | 
 |  |  |             itemNum: $('#itemNum').val(), | 
 |  |  |             count: $('#count').val(), | 
 |  |  |             weight: $('#weight').val(), | 
 |  |  |             status: $('#status').val(), | 
 |  |  |             createBy: $('#createBy').val(), | 
 |  |  |             createTime: top.strToDate($('#createTime\\$').val()), | 
 |  |  |             updateBy: $('#updateBy').val(), | 
 |  |  |             updateTime: top.strToDate($('#updateTime\\$').val()), | 
 |  |  |             memo: $('#memo').val(), | 
 |  |  |  | 
 |  |  |         }; | 
 |  |  |         $.ajax({ | 
 |  |  |             url: baseUrl+"/mat/"+name+"/auth", | 
 |  |  |             headers: {'token': localStorage.getItem('token')}, | 
 |  |  |             data: top.reObject(data), | 
 |  |  |             method: 'POST', | 
 |  |  |             success: function (res) { | 
 |  |  |                 if (res.code === 200){ | 
 |  |  |                     parent.layer.closeAll(); | 
 |  |  |                     parent.$(".layui-laypage-btn")[0].click(); | 
 |  |  |                     $("#data-detail :input").each(function () { | 
 |  |  |                         $(this).val(""); | 
 |  |  |                     }); | 
 |  |  |                 } else if (res.code === 403){ | 
 |  |  |                     top.location.href = baseUrl+"/"; | 
 |  |  |                 }else { | 
 |  |  |                     layer.msg(res.msg) | 
 |  |  |                 } | 
 |  |  |                 layer.close(index); | 
 |  |  |             } | 
 |  |  |         }) | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 复选框事件 | 
 |  |  |     form.on('checkbox(detailCheckbox)', function (data) { | 
 |  |  |         var el = data.elem; | 
 |  |  |         if (el.checked) { | 
 |  |  |             $(el).val('Y'); | 
 |  |  |         } else { | 
 |  |  |             $(el).val('N'); | 
 |  |  |         } | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     // 搜索栏搜索事件 | 
 |  |  |     form.on('submit(search)', function (data) { | 
 |  |  |         pageCurr = 1; | 
 |  |  |         tableReload(false); | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     // 搜索栏重置事件 | 
 |  |  |     form.on('submit(reset)', function (data) { | 
 |  |  |         pageCurr = 1; | 
 |  |  |         clearFormVal($('#search-box')); | 
 |  |  |         tableReload(false); | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     // 时间选择器 | 
 |  |  |     layDate.render({ | 
 |  |  |         elem: '#createTime\\$', | 
 |  |  |         type: 'datetime' | 
 |  |  |     }); | 
 |  |  |     layDate.render({ | 
 |  |  |         elem: '#updateTime\\$', | 
 |  |  |         type: 'datetime' | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |  | 
 |  |  | }); | 
 |  |  |  | 
 |  |  | // 关闭动作 | 
 |  |  | $(document).on('click','#data-detail-close', function () { | 
 |  |  |     parent.layer.closeAll(); | 
 |  |  | }); | 
 |  |  |  | 
 |  |  | function tableReload(child) { | 
 |  |  |     var searchData = {}; | 
 |  |  |     $.each($('#search-box [name]').serializeArray(), function() { | 
 |  |  |         searchData[this.name] = this.value; | 
 |  |  |     }); | 
 |  |  |     (child ? parent.tableIns : tableIns).reload({ | 
 |  |  |         where: searchData, | 
 |  |  |         page: { | 
 |  |  |             curr: pageCurr | 
 |  |  |         }, | 
 |  |  |         done: function (res, curr, count) { | 
 |  |  |             if (res.code === 403) { | 
 |  |  |                 top.location.href = baseUrl+"/"; | 
 |  |  |             } | 
 |  |  |             pageCurr=curr; | 
 |  |  |             if (res.data.length === 0 && count !== 0) { | 
 |  |  |                 tableIns.reload({ | 
 |  |  |                     where: searchData, | 
 |  |  |                     page: { | 
 |  |  |                         curr: pageCurr-1 | 
 |  |  |                     } | 
 |  |  |                 }); | 
 |  |  |                 pageCurr -= 1; | 
 |  |  |             } | 
 |  |  |             limit(child); | 
 |  |  |         } | 
 |  |  |     }); | 
 |  |  | } | 
 |  |  |  | 
 |  |  | function setFormVal(el, data, showImg) { | 
 |  |  |     for (var val in data) { | 
 |  |  |         var find = el.find(":input[id='" + val + "']"); | 
 |  |  |         if (find[0]!=null){ | 
 |  |  |             if (find[0].type === 'checkbox'){ | 
 |  |  |                 if (data[val]==='Y'){ | 
 |  |  |                     find.attr("checked","checked"); | 
 |  |  |                     find.val('Y'); | 
 |  |  |                 } else { | 
 |  |  |                     find.remove("checked"); | 
 |  |  |                     find.val('N'); | 
 |  |  |                 } | 
 |  |  |                 continue; | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         find.val(data[val]); | 
 |  |  |         if (showImg){ | 
 |  |  |             var next = find.next(); | 
 |  |  |             if (next.get(0)){ | 
 |  |  |                 if (next.get(0).localName === "img") { | 
 |  |  |                     find.hide(); | 
 |  |  |                     next.attr("src", data[val]); | 
 |  |  |                     next.show(); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  | } | 
 |  |  |  | 
 |  |  | function clearFormVal(el) { | 
 |  |  |     $(':input', el) | 
 |  |  |         .val('') | 
 |  |  |         .removeAttr('checked') | 
 |  |  |         .removeAttr('selected'); | 
 |  |  | } | 
 |  |  |  | 
 |  |  | function detailScreen(index) { | 
 |  |  |     var detail = layer.getChildFrame('#data-detail', index); | 
 |  |  |     var height = detail.height()+60; | 
 |  |  |     if (height > ($(window).height()*0.9)) { | 
 |  |  |         height = ($(window).height()*0.8); | 
 |  |  |     } | 
 |  |  |     layer.style(index, { | 
 |  |  | //        top: (($(window).height()-height)/3)+"px", | 
 |  |  |         height: height+'px' | 
 |  |  |     }); | 
 |  |  | } | 
 |  |  |  | 
 |  |  | $('body').keydown(function () { | 
 |  |  |     if (event.keyCode === 13) { | 
 |  |  |         $("#search").click(); | 
 |  |  |     } | 
 |  |  | }); | 
 
| New file | 
 |  |  | 
 |  |  | var currentTemId; | 
 |  |  | var currentTemName; | 
 |  |  | var currentTemSsbm; | 
 |  |  | var init = false; | 
 |  |  |  | 
 |  |  | layui.config({ | 
 |  |  |     base: baseUrl + "/static/layui/lay/modules/"  // 配置模块所在的目录 | 
 |  |  | }).use(['table','laydate', 'form', 'tree', 'xmSelect'], function() { | 
 |  |  |     var table = layui.table; | 
 |  |  |     var $ = layui.jquery; | 
 |  |  |     var layer = layui.layer; | 
 |  |  |     var layDate = layui.laydate; | 
 |  |  |     var form = layui.form; | 
 |  |  |     var tree = layui.tree; | 
 |  |  |     var xmSelect = layui.xmSelect; | 
 |  |  |     var selObj, treeData;  // 左树选中数据 | 
 |  |  |  | 
 |  |  |     var organizationTree; | 
 |  |  |     window.loadTree = function(condition){ | 
 |  |  |         var loadIndex = layer.load(2); | 
 |  |  |         $.ajax({ | 
 |  |  |             url: baseUrl+"/tag/tree/auth", | 
 |  |  |             headers: {'token': localStorage.getItem('token')}, | 
 |  |  |             data: { | 
 |  |  |                 'condition': condition | 
 |  |  |             }, | 
 |  |  |             method: 'POST', | 
 |  |  |             success: function (res) { | 
 |  |  |                 if (res.code === 200){ | 
 |  |  |                     layer.close(loadIndex); | 
 |  |  |                     // 树形图 | 
 |  |  |                     organizationTree = tree.render({ | 
 |  |  |                         elem: '#organizationTree', | 
 |  |  |                         id: 'organizationTree', | 
 |  |  |                         onlyIconControl: true, | 
 |  |  |                         data: res.data, | 
 |  |  |                         click: function (obj) { | 
 |  |  |                             currentTemId = obj.data.id; | 
 |  |  |                             currentTemName = obj.data.title.split(" - ")[0]; | 
 |  |  |                             currentTemSsbm = obj.data.title.split(" - ")[1]; | 
 |  |  |                             selObj = obj; | 
 |  |  |                             $('#organizationTree').find('.ew-tree-click').removeClass('ew-tree-click'); | 
 |  |  |                             $(obj.elem).children('.layui-tree-entry').addClass('ew-tree-click'); | 
 |  |  |                             tableIns.reload({ | 
 |  |  |                                 where: {temId: obj.data.id}, | 
 |  |  |                                 page: {curr: 1} | 
 |  |  |                             }); | 
 |  |  |                         } | 
 |  |  |                     }); | 
 |  |  |                     treeData = res.data; | 
 |  |  |                     if (isEmpty(condition) && init) { | 
 |  |  |                         tableIns.reload({ | 
 |  |  |                             where: {temId: ""}, | 
 |  |  |                             page: {curr: 1} | 
 |  |  |                         }); | 
 |  |  |                     } | 
 |  |  |                     if (!init) { | 
 |  |  |                         init = true; | 
 |  |  |                     } | 
 |  |  |                 } else if (res.code === 403){ | 
 |  |  |                     top.location.href = baseUrl+"/"; | 
 |  |  |                 } else { | 
 |  |  |                     layer.msg(res.msg) | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }) | 
 |  |  |     } | 
 |  |  |     loadTree(); | 
 |  |  |  | 
 |  |  |     /* 树形图重置 */ | 
 |  |  |     $('#treeReset').click(function () { | 
 |  |  |         $("#condition").val(""); | 
 |  |  |         loadTree(""); | 
 |  |  |     }) | 
 |  |  |  | 
 |  |  | }) | 
 |  |  |  | 
 |  |  | function closeDialog() { | 
 |  |  |     layer.closeAll(); | 
 |  |  | } | 
 |  |  |  | 
 |  |  | /* 树形图搜索 */ | 
 |  |  | function findData(el) { | 
 |  |  |     var condition = $(el).val(); | 
 |  |  |     loadTree(condition) | 
 |  |  | } | 
 
| New file | 
 |  |  | 
 |  |  | <!DOCTYPE html> | 
 |  |  | <html lang="en"> | 
 |  |  | <head> | 
 |  |  |     <meta charset="utf-8"> | 
 |  |  |     <title></title> | 
 |  |  |     <meta name="renderer" content="webkit"> | 
 |  |  |     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> | 
 |  |  |     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> | 
 |  |  |     <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all"> | 
 |  |  |     <link rel="stylesheet" href="../../static/css/cool.css" media="all"> | 
 |  |  |     <link rel="stylesheet" href="../../static/css/common.css" media="all"> | 
 |  |  |     <link rel="stylesheet" href="../../static/css/tree.css" media="all"> | 
 |  |  |     <style> | 
 |  |  |         body { | 
 |  |  |             color: #595959; | 
 |  |  |             background-color: #f5f7f9; | 
 |  |  |         } | 
 |  |  |         .layui-fluid { | 
 |  |  |             padding: 15px; | 
 |  |  |         } | 
 |  |  |         .layui-form.layui-border-box.layui-table-view { | 
 |  |  |             margin: 15px 0 35px 0; | 
 |  |  |             width: 100%; | 
 |  |  |             border-width: 1px; | 
 |  |  |         } | 
 |  |  |         .layui-form.layui-border-box.layui-table-view { | 
 |  |  |             height: calc(100vh - 125px); | 
 |  |  |         } | 
 |  |  |         /* */ | 
 |  |  |     </style> | 
 |  |  | </head> | 
 |  |  | <body> | 
 |  |  |  | 
 |  |  | <div class="layui-fluid" style="padding-bottom: 0;"> | 
 |  |  |     <!-- 左 --> | 
 |  |  |     <div class="layui-row layui-col-space15"> | 
 |  |  |         <div class="layui-col-md3"> | 
 |  |  |             <div class="layui-card"> | 
 |  |  |                 <div class="layui-card-body" style="padding: 10px;"> | 
 |  |  |                     <!-- 树工具栏 --> | 
 |  |  |                     <div class="layui-form toolbar" id="organizationTreeBar"> | 
 |  |  |                         <div class="layui-inline" style="max-width: 200px;"> | 
 |  |  |                             <input id="condition" onkeyup="findData(this)" type="text" class="layui-input" placeholder="请输入关键字" autocomplete="off"> | 
 |  |  |                         </div> | 
 |  |  |                         <div class="layui-inline"> | 
 |  |  |                             <button class="layui-btn icon-btn" id="treeReset"> | 
 |  |  |                                 <i class="layui-icon layui-icon-close"></i> | 
 |  |  |                             </button> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |                     <!-- 树 --> | 
 |  |  |                     <div class="layui-form toolbar" id="organizationTree"></div> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <!-- 右 --> | 
 |  |  |         <div class="layui-col-md9"> | 
 |  |  |             <div class="layui-card"> | 
 |  |  |                 <div class="layui-card-body" style="padding: 10px;"> | 
 |  |  |                     <table class="layui-hide" id="mat" lay-filter="mat"></table> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |     </div> | 
 |  |  | </div> | 
 |  |  |  | 
 |  |  | <script type="text/html" id="toolbar"> | 
 |  |  |     <div class="layui-btn-container"> | 
 |  |  |         <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> | 
 |  |  |         <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData">导出</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-xs btn-edit" lay-event="edit">编辑</a> | 
 |  |  | </script> | 
 |  |  |  | 
 |  |  | <script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script> | 
 |  |  | <script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script> | 
 |  |  | <script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script> | 
 |  |  | <script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script> | 
 |  |  | <script type="text/javascript" src="../../static/js/mat/mat.js" charset="utf-8"></script> | 
 |  |  | <script type="text/javascript" src="../../static/js/tagTree.js" charset="utf-8"></script> | 
 |  |  |  | 
 |  |  | <iframe id="detail-iframe" scrolling="auto" style="display:none;"></iframe> | 
 |  |  |  | 
 |  |  | </body> | 
 |  |  | </html> | 
 |  |  |  | 
 
| New file | 
 |  |  | 
 |  |  | <!DOCTYPE html> | 
 |  |  | <html lang="en"> | 
 |  |  | <head> | 
 |  |  |     <meta charset="utf-8"> | 
 |  |  |     <title></title> | 
 |  |  |     <meta name="renderer" content="webkit"> | 
 |  |  |     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> | 
 |  |  |     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> | 
 |  |  |     <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all"> | 
 |  |  |     <link rel="stylesheet" href="../../static/css/cool.css" media="all"> | 
 |  |  |     <link rel="stylesheet" href="../../static/css/common.css" media="all"> | 
 |  |  | </head> | 
 |  |  | <body> | 
 |  |  |  | 
 |  |  | <!-- 详情 --> | 
 |  |  | <div id="data-detail" class="layer_self_wrap"> | 
 |  |  |     <form id="detail" class="layui-form"> | 
 |  |  |     <!-- | 
 |  |  |         <div class="layui-inline"  style="display: none"> | 
 |  |  |             <label class="layui-form-label"><span class="not-null">*</span>编  号:</label> | 
 |  |  |             <div class="layui-input-inline"> | 
 |  |  |                 <input id="id" class="layui-input" type="text" placeholder="编号"> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |     --> | 
 |  |  |         <div class="layui-inline"  style="width:31%;"> | 
 |  |  |             <label class="layui-form-label"><span class="not-null">*</span>I  D:</label> | 
 |  |  |             <div class="layui-input-inline"> | 
 |  |  |                 <input id="id" class="layui-input" type="text" onkeyup="check(this.id, 'mat')" lay-verify="number" > | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="layui-inline"  style="width:31%;"> | 
 |  |  |             <label class="layui-form-label">编  号:</label> | 
 |  |  |             <div class="layui-input-inline"> | 
 |  |  |                 <input id="uuid" class="layui-input" type="text"> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="layui-inline"  style="width:31%;"> | 
 |  |  |             <label class="layui-form-label">所属区域:</label> | 
 |  |  |             <div class="layui-input-inline cool-auto-complete"> | 
 |  |  |                 <input id="nodeId" class="layui-input" type="text" lay-verify="number"  style="display: none"> | 
 |  |  |                 <input id="nodeId$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="请输入..." onfocus=this.blur()> | 
 |  |  |                 <div class="cool-auto-complete-window"> | 
 |  |  |                     <input class="cool-auto-complete-window-input" data-key="nodeQueryBynodeId" onkeyup="autoLoad(this.getAttribute('data-key'))"> | 
 |  |  |                     <select class="cool-auto-complete-window-select" data-key="nodeQueryBynodeIdSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple"> | 
 |  |  |                     </select> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="layui-inline"  style="width:31%;"> | 
 |  |  |             <label class="layui-form-label">所属归类:</label> | 
 |  |  |             <div class="layui-input-inline cool-auto-complete"> | 
 |  |  |                 <input id="tagId" class="layui-input" type="text" lay-verify="number"  style="display: none"> | 
 |  |  |                 <input id="tagId$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="请输入..." onfocus=this.blur()> | 
 |  |  |                 <div class="cool-auto-complete-window"> | 
 |  |  |                     <input class="cool-auto-complete-window-input" data-key="tagQueryBytagId" onkeyup="autoLoad(this.getAttribute('data-key'))"> | 
 |  |  |                     <select class="cool-auto-complete-window-select" data-key="tagQueryBytagIdSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple"> | 
 |  |  |                     </select> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="layui-inline"  style="width:31%;"> | 
 |  |  |             <label class="layui-form-label">商品编号:</label> | 
 |  |  |             <div class="layui-input-inline"> | 
 |  |  |                 <input id="matnr" class="layui-input" type="text"> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="layui-inline"  style="width:31%;"> | 
 |  |  |             <label class="layui-form-label">商品名称:</label> | 
 |  |  |             <div class="layui-input-inline"> | 
 |  |  |                 <input id="maktx" class="layui-input" type="text"> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="layui-inline"  style="width:31%;"> | 
 |  |  |             <label class="layui-form-label">名  称:</label> | 
 |  |  |             <div class="layui-input-inline"> | 
 |  |  |                 <input id="name" class="layui-input" type="text"> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="layui-inline"  style="width:31%;"> | 
 |  |  |             <label class="layui-form-label">规  格:</label> | 
 |  |  |             <div class="layui-input-inline"> | 
 |  |  |                 <input id="specs" class="layui-input" type="text"> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="layui-inline"  style="width:31%;"> | 
 |  |  |             <label class="layui-form-label">型  号:</label> | 
 |  |  |             <div class="layui-input-inline"> | 
 |  |  |                 <input id="model" class="layui-input" type="text"> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="layui-inline"  style="width:31%;"> | 
 |  |  |             <label class="layui-form-label">批  号:</label> | 
 |  |  |             <div class="layui-input-inline"> | 
 |  |  |                 <input id="batch" class="layui-input" type="text"> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="layui-inline"  style="width:31%;"> | 
 |  |  |             <label class="layui-form-label">单  位:</label> | 
 |  |  |             <div class="layui-input-inline"> | 
 |  |  |                 <input id="unit" class="layui-input" type="text"> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="layui-inline"  style="width:31%;"> | 
 |  |  |             <label class="layui-form-label">条  码:</label> | 
 |  |  |             <div class="layui-input-inline"> | 
 |  |  |                 <input id="barcode" class="layui-input" type="text"> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="layui-inline"  style="width:31%;"> | 
 |  |  |             <label class="layui-form-label">单据类型:</label> | 
 |  |  |             <div class="layui-input-inline"> | 
 |  |  |                 <input id="docId" class="layui-input" type="text" lay-verify="number" > | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="layui-inline"  style="width:31%;"> | 
 |  |  |             <label class="layui-form-label">单据编号:</label> | 
 |  |  |             <div class="layui-input-inline"> | 
 |  |  |                 <input id="docNum" class="layui-input" type="text"> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="layui-inline"  style="width:31%;"> | 
 |  |  |             <label class="layui-form-label">客户名称:</label> | 
 |  |  |             <div class="layui-input-inline"> | 
 |  |  |                 <input id="custName" class="layui-input" type="text"> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="layui-inline"  style="width:31%;"> | 
 |  |  |             <label class="layui-form-label">品 项 数:</label> | 
 |  |  |             <div class="layui-input-inline"> | 
 |  |  |                 <input id="itemNum" class="layui-input" type="text" lay-verify="number" > | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="layui-inline"  style="width:31%;"> | 
 |  |  |             <label class="layui-form-label">库存余量:</label> | 
 |  |  |             <div class="layui-input-inline"> | 
 |  |  |                 <input id="count" class="layui-input" type="text" lay-verify="number" > | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="layui-inline"  style="width:31%;"> | 
 |  |  |             <label class="layui-form-label">重  量:</label> | 
 |  |  |             <div class="layui-input-inline"> | 
 |  |  |                 <input id="weight" class="layui-input" type="text" lay-verify="number" > | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="layui-inline"  style="width:31%;"> | 
 |  |  |             <label class="layui-form-label">:</label> | 
 |  |  |             <div class="layui-input-inline"> | 
 |  |  |                 <input id="status" class="layui-input" type="text" lay-verify="number" > | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="layui-inline"  style="width:31%;"> | 
 |  |  |             <label class="layui-form-label">添加人员:</label> | 
 |  |  |             <div class="layui-input-inline cool-auto-complete"> | 
 |  |  |                 <input id="createBy" class="layui-input" type="text" lay-verify="number"  style="display: none"> | 
 |  |  |                 <input id="createBy$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="请输入..." onfocus=this.blur()> | 
 |  |  |                 <div class="cool-auto-complete-window"> | 
 |  |  |                     <input class="cool-auto-complete-window-input" data-key="userQueryBycreateBy" onkeyup="autoLoad(this.getAttribute('data-key'))"> | 
 |  |  |                     <select class="cool-auto-complete-window-select" data-key="userQueryBycreateBySelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple"> | 
 |  |  |                     </select> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="layui-inline"  style="width:31%;"> | 
 |  |  |             <label class="layui-form-label">添加时间:</label> | 
 |  |  |             <div class="layui-input-inline"> | 
 |  |  |                 <input id="createTime$" class="layui-input" type="text" autocomplete="off"> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="layui-inline"  style="width:31%;"> | 
 |  |  |             <label class="layui-form-label">修改人员:</label> | 
 |  |  |             <div class="layui-input-inline cool-auto-complete"> | 
 |  |  |                 <input id="updateBy" class="layui-input" type="text" lay-verify="number"  style="display: none"> | 
 |  |  |                 <input id="updateBy$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="请输入..." onfocus=this.blur()> | 
 |  |  |                 <div class="cool-auto-complete-window"> | 
 |  |  |                     <input class="cool-auto-complete-window-input" data-key="userQueryByupdateBy" onkeyup="autoLoad(this.getAttribute('data-key'))"> | 
 |  |  |                     <select class="cool-auto-complete-window-select" data-key="userQueryByupdateBySelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple"> | 
 |  |  |                     </select> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="layui-inline"  style="width:31%;"> | 
 |  |  |             <label class="layui-form-label">修改时间:</label> | 
 |  |  |             <div class="layui-input-inline"> | 
 |  |  |                 <input id="updateTime$" class="layui-input" type="text" autocomplete="off"> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="layui-inline"  style="width:31%;"> | 
 |  |  |             <label class="layui-form-label">备  注:</label> | 
 |  |  |             <div class="layui-input-inline"> | 
 |  |  |                 <input id="memo" class="layui-input" type="text"> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |  | 
 |  |  |  | 
 |  |  |         <hr class="layui-bg-gray"> | 
 |  |  |  | 
 |  |  |         <div id="data-detail-btn" class="layui-btn-container layui-form-item"> | 
 |  |  |             <div id="data-detail-submit-save" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="save">保存</div> | 
 |  |  |             <div id="data-detail-submit-edit" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="edit">修改</div> | 
 |  |  |             <div id="data-detail-close" type="button" class="layui-btn" lay-submit lay-filter="close">关闭</div> | 
 |  |  |         </div> | 
 |  |  |  | 
 |  |  |         <div id="prompt"> | 
 |  |  |             温馨提示:请仔细填写相关信息,<span class="extrude"><span class="not-null">*</span> 为必填选项。</span> | 
 |  |  |         </div> | 
 |  |  |     </form> | 
 |  |  | </div> | 
 |  |  | </body> | 
 |  |  | <script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script> | 
 |  |  | <script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script> | 
 |  |  | <script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script> | 
 |  |  | <script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script> | 
 |  |  | <script type="text/javascript" src="../../static/js/mat/mat.js" charset="utf-8"></script> | 
 |  |  | </html> | 
 |  |  |  |