From 42206b6e31138d5be6d22bb4bba22e03ffe107aa Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期五, 26 九月 2025 17:09:14 +0800
Subject: [PATCH] 容器添加初始化功能 商品档案添加批量修改功能

---
 src/main/java/com/zy/asrs/utils/MatExcelListener.java                   |    1 
 src/main/webapp/static/js/mat/mat.js                                    |  192 ++++++++----
 src/main/webapp/views/mat/mat.html                                      |   52 ++
 pom.xml                                                                 |    5 
 src/main/java/com/zy/asrs/service/impl/MatServiceImpl.java              |   26 +
 src/main/webapp/static/js/basContainer/basContainer.js                  |  154 +++++++---
 src/main/java/com/zy/asrs/enums/CommonEnum.java                         |    4 
 src/main/java/com/zy/asrs/service/impl/BasContainerServiceImpl.java     |   59 +++
 src/main/java/com/zy/asrs/entity/Mat.java                               |    1 
 src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java           |    5 
 src/main/java/com/zy/asrs/service/BasContainerService.java              |    9 
 src/main/java/com/zy/asrs/controller/MatController.java                 |   68 ++-
 src/main/webapp/static/js/common.js                                     |    1 
 src/main/java/com/zy/asrs/service/MatService.java                       |    3 
 src/main/webapp/views/basContainer/initContainer.html                   |  164 ++++++++++
 src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java             |    8 
 src/main/java/com/zy/asrs/entity/param/ContainerParams.java             |   30 ++
 src/main/java/com/zy/asrs/entity/BasContainer.java                      |    4 
 src/main/java/com/zy/asrs/controller/PackController.java                |    1 
 src/main/webapp/views/basContainer/basContainer.html                    |   68 ++++
 src/main/java/com/zy/asrs/entity/param/BatchMatsUpdateParam.java        |   24 +
 src/main/java/com/zy/asrs/controller/BasContainerController.java        |   11 
 src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java             |    2 
 src/main/resources/application.yml                                      |    2 
 src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java |    1 
 25 files changed, 720 insertions(+), 175 deletions(-)

diff --git a/pom.xml b/pom.xml
index 80e972e..4e61b50 100644
--- a/pom.xml
+++ b/pom.xml
@@ -46,6 +46,11 @@
             <version>${cool.version}</version>
         </dependency>
         <dependency>
+            <groupId>org.apache.tika</groupId>
+            <artifactId>tika-core</artifactId>
+            <version>2.1.0</version>
+        </dependency>
+        <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
             <version>${mysql-driver.version}</version>
diff --git a/src/main/java/com/zy/asrs/controller/BasContainerController.java b/src/main/java/com/zy/asrs/controller/BasContainerController.java
index c9efadb..74d91ec 100644
--- a/src/main/java/com/zy/asrs/controller/BasContainerController.java
+++ b/src/main/java/com/zy/asrs/controller/BasContainerController.java
@@ -7,6 +7,7 @@
 import com.baomidou.mybatisplus.plugins.Page;
 import com.core.common.DateUtils;
 import com.zy.asrs.entity.BasContainer;
+import com.zy.asrs.entity.param.ContainerParams;
 import com.zy.asrs.service.BasContainerService;
 import com.core.annotations.ManagerAuth;
 import com.core.common.BaseRes;
@@ -66,6 +67,16 @@
         return R.ok();
     }
 
+    @RequestMapping(value = "/basContainer/init/auth")
+    @ManagerAuth
+    public R init(@RequestBody ContainerParams container) {
+        if (Objects.isNull(container)) {
+            throw new RuntimeException("鑳芥暟涓嶈兘涓虹┖锛侊紒");
+        }
+        return basContainerService.init(container);
+    }
+
+
 	@RequestMapping(value = "/basContainer/update/auth")
 	@ManagerAuth
     public R update(BasContainer basContainer){
diff --git a/src/main/java/com/zy/asrs/controller/MatController.java b/src/main/java/com/zy/asrs/controller/MatController.java
index 53e9135..04785d0 100644
--- a/src/main/java/com/zy/asrs/controller/MatController.java
+++ b/src/main/java/com/zy/asrs/controller/MatController.java
@@ -13,6 +13,7 @@
 import com.zy.asrs.entity.Mat;
 import com.zy.asrs.entity.MatPrint;
 import com.zy.asrs.entity.OrderDetl;
+import com.zy.asrs.entity.param.BatchMatsUpdateParam;
 import com.zy.asrs.entity.param.EmptyPlateOutParam;
 import com.zy.asrs.entity.result.KeyValueVo;
 import com.zy.asrs.service.MatService;
@@ -44,13 +45,13 @@
     private SnowflakeIdWorker snowflakeIdWorker;
 
     @RequestMapping(value = "/mat/auto/matnr/auth")
-    public R autoMatnr(){
+    public R autoMatnr() {
         return R.ok().add("YJ" + DateUtils.convert(new Date(), DateUtils.yyyyMMddHHmmsssss).substring(0, 16));
     }
 
     @RequestMapping(value = "/mat/list/pda/auth")
     @ManagerAuth
-    public R pdaList(@RequestParam(required = true)Long tagId){
+    public R pdaList(@RequestParam(required = true) Long tagId) {
         EntityWrapper<Mat> wrapper = new EntityWrapper<>();
         wrapper.eq("tag_id", tagId);
         wrapper.orderBy("create_time", false);
@@ -60,7 +61,7 @@
 
     @RequestMapping(value = "/mat/search/pda/auth")
     @ManagerAuth
-    public R pdaSearch(@RequestParam(required = false)String condition){
+    public R pdaSearch(@RequestParam(required = false) String condition) {
         EntityWrapper<Mat> wrapper = new EntityWrapper<>();
         if (!Cools.isEmpty(condition)) {
 //            wrapper.like("matnr", condition).or().like("maktx", condition);
@@ -85,11 +86,11 @@
 
     @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){
+    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) {
         Object tagId = param.get("tag_id");
         if (Cools.isEmpty(tagId)) {
             tagId = getOriginTag().getId();
@@ -103,10 +104,10 @@
 
     }
 
-    private void convert(Map<String, Object> map, EntityWrapper wrapper){
-        for (Map.Entry<String, Object> entry : map.entrySet()){
+    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)){
+            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]));
@@ -127,6 +128,7 @@
         mat.setCreateTime(now);
         mat.setUpdateBy(getUserId());
         mat.setUpdateTime(now);
+        mat.setLocType(mat.getTagId());
         mat.setStatus(1);
         if (!matService.insert(mat)) {
             throw new CoolException("娣诲姞澶辫触锛岃鑱旂郴绠$悊鍛�");
@@ -134,26 +136,34 @@
         return R.ok();
     }
 
-	@RequestMapping(value = "/mat/update/auth")
-	@ManagerAuth
-    public R update(Mat mat){
-        if (Cools.isEmpty(mat) || null==mat.getId()){
+    @RequestMapping(value = "/mat/update/auth")
+    @ManagerAuth
+    public R update(Mat mat) {
+        if (Cools.isEmpty(mat) || null == mat.getId()) {
             return R.error();
         }
         mat.setUpdateBy(getUserId());
+        mat.setLocType(mat.getTagId());
         mat.setUpdateTime(new Date());
         matService.updateById(mat);
         return R.ok();
     }
 
+    @PostMapping("mat/batch/auth")
+    @ManagerAuth
+    public R batchUpdate(@RequestBody BatchMatsUpdateParam params) {
+
+        return  matService.batchInfo(params);
+    }
+
     @RequestMapping(value = "/mat/delete/auth")
     @ManagerAuth
-    public R delete(@RequestParam String param){
+    public R delete(@RequestParam String param) {
         List<Mat> list = JSONArray.parseArray(param, Mat.class);
-        if (Cools.isEmpty(list)){
+        if (Cools.isEmpty(list)) {
             return R.error();
         }
-        for (Mat entity : list){
+        for (Mat entity : list) {
             if (!matService.delete(new EntityWrapper<>(entity))) {
                 throw new CoolException("鍒犻櫎澶辫触锛岃鑱旂郴绠$悊鍛�");
             }
@@ -163,15 +173,15 @@
 
     @RequestMapping(value = "/mat/turn/over/list/auth")
     @ManagerAuth
-    public R turnOverList(@RequestParam(defaultValue = "1")Integer curr,
-                          @RequestParam(defaultValue = "10")Integer limit,
-                          @RequestParam Map<String, Object> param){
+    public R turnOverList(@RequestParam(defaultValue = "1") Integer curr,
+                          @RequestParam(defaultValue = "10") Integer limit,
+                          @RequestParam Map<String, Object> param) {
         return R.ok(matService.getMatTurnPage(toPage(curr, limit, param, Mat.class)));
     }
 
     @RequestMapping("/mat/turn/over/take/site")
     @ManagerAuth()
-    public R availableTakeSite(@RequestParam(required = false) String matnr){
+    public R availableTakeSite(@RequestParam(required = false) String matnr) {
         List<Map<String, Object>> result = new ArrayList<>();
         List<Mat> mats = matService.selectByMatnrLink(matnr);
         for (Mat mat : mats) {
@@ -185,7 +195,7 @@
 
     @RequestMapping(value = "/mat/export/auth")
     @ManagerAuth
-    public R export(@RequestBody JSONObject param){
+    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"));
@@ -201,7 +211,7 @@
         wrapper.like("matnr", condition).or().like("maktx", condition);
         Page<Mat> page = matService.selectPage(new Page<>(0, 10), wrapper);
         List<Map<String, Object>> result = new ArrayList<>();
-        for (Mat mat : page.getRecords()){
+        for (Mat mat : page.getRecords()) {
             Map<String, Object> map = new HashMap<>();
             map.put("id", mat.getId());
             map.put("value", mat.getMatnr() + "(" + mat.getMaktx() + ")");
@@ -214,7 +224,7 @@
     @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)){
+        if (null != matService.selectOne(wrapper)) {
             return R.parse(BaseRes.REPEAT).add(getComment(Mat.class, String.valueOf(param.get("key"))));
         }
         return R.ok();
@@ -241,7 +251,7 @@
             , @RequestParam String param
             , HttpServletResponse response) throws Exception {
         AdminInterceptor.cors(response);
-        if (Cools.isEmpty(param)){
+        if (Cools.isEmpty(param)) {
             return R.parse(BaseRes.EMPTY);
         }
         BufferedImage img;
@@ -262,11 +272,11 @@
     @RequestMapping(value = "/mat/print/auth")
     @ManagerAuth(memo = "鍟嗗搧缂栫爜鎵撳嵃")
     public R matCodePrint(@RequestParam(value = "param[]") String[] param) {
-        if(Cools.isEmpty(param)) {
+        if (Cools.isEmpty(param)) {
             return R.parse(CodeRes.EMPTY);
         }
         List<MatPrint> res = new ArrayList<>();
-        for (String matnr : param){
+        for (String matnr : param) {
             Mat mat = matService.selectByMatnr(matnr);
             // 鎵撳嵃鏁版嵁娉ㄥ叆
             MatPrint print = new MatPrint();
@@ -307,7 +317,7 @@
     public R matExcelImport(MultipartFile file) throws IOException {
         MatExcelListener listener = new MatExcelListener(getUserId());
         EasyExcel.read(file.getInputStream(), MatExcel.class, listener).sheet().doRead();
-        return R.ok("鎴愬姛鍚屾"+listener.getTotal()+"鏉″晢鍝佹暟鎹�");
+        return R.ok("鎴愬姛鍚屾" + listener.getTotal() + "鏉″晢鍝佹暟鎹�");
     }
 
     /*************************************** xm-select ***********************************************/
diff --git a/src/main/java/com/zy/asrs/controller/PackController.java b/src/main/java/com/zy/asrs/controller/PackController.java
index 542d0a8..20b7b5a 100644
--- a/src/main/java/com/zy/asrs/controller/PackController.java
+++ b/src/main/java/com/zy/asrs/controller/PackController.java
@@ -83,6 +83,7 @@
         }
         Mat mat = new Mat();
         mat.setTagId(tagService.getTop().getId());
+        mat.setLocType(tagService.getTop().getId());
         mat.setMatnr(barcode);
         mat.setMaktx(barcode);
         mat.setStatus(1);
diff --git a/src/main/java/com/zy/asrs/entity/BasContainer.java b/src/main/java/com/zy/asrs/entity/BasContainer.java
index 5dc10ee..71aa45d 100644
--- a/src/main/java/com/zy/asrs/entity/BasContainer.java
+++ b/src/main/java/com/zy/asrs/entity/BasContainer.java
@@ -1,5 +1,6 @@
 package com.zy.asrs.entity;
 
+import com.baomidou.mybatisplus.annotations.TableField;
 import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId;
 import com.baomidou.mybatisplus.enums.IdType;
 
@@ -34,9 +35,10 @@
     private String barcode;
 
     @ApiModelProperty("瀹瑰櫒绫诲瀷")
-    private String type;
+    private Long type;
 
     @ApiModelProperty("鏄惁娣锋斁")
+    @TableField("flag_mix")
     private Integer flagMix;
 
     @ApiModelProperty("鏈�澶ф贩鏀剧绫�")
diff --git a/src/main/java/com/zy/asrs/entity/Mat.java b/src/main/java/com/zy/asrs/entity/Mat.java
index bdd9654..1ccd199 100644
--- a/src/main/java/com/zy/asrs/entity/Mat.java
+++ b/src/main/java/com/zy/asrs/entity/Mat.java
@@ -309,6 +309,7 @@
 
     @ApiModelProperty("搴撲綅绫诲瀷")
     @TableField("loc_type")
+    @ExcelProperty(value = "搴撲綅绫诲瀷")
     private Long locType;
 
     /**
diff --git a/src/main/java/com/zy/asrs/entity/param/BatchMatsUpdateParam.java b/src/main/java/com/zy/asrs/entity/param/BatchMatsUpdateParam.java
new file mode 100644
index 0000000..1b24b8e
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/param/BatchMatsUpdateParam.java
@@ -0,0 +1,24 @@
+package com.zy.asrs.entity.param;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "BatchMatsUpdateParam", description = "鎵归噺淇敼鍙傛暟")
+public class BatchMatsUpdateParam {
+
+    @ApiModelProperty("ids")
+    private List<Long> ids;
+
+    @ApiModelProperty("搴撲綅绫诲瀷")
+    private Long type;
+
+    @ApiModelProperty("缁勬墭涓婇檺")
+    private Double upQty;
+}
diff --git a/src/main/java/com/zy/asrs/entity/param/ContainerParams.java b/src/main/java/com/zy/asrs/entity/param/ContainerParams.java
new file mode 100644
index 0000000..e1ca331
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/param/ContainerParams.java
@@ -0,0 +1,30 @@
+package com.zy.asrs.entity.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "ContainerParams",description = "瀹瑰櫒鍒濆鍖栧弬鏁�")
+public class ContainerParams implements Serializable {
+
+    @ApiModelProperty("璧风偣")
+    private Integer start;
+
+    @ApiModelProperty("缁堢偣")
+    private Integer end;
+
+    @ApiModelProperty("绫诲瀷")
+    private Long type;
+
+    @ApiModelProperty("鏄惁鍒濆鍖�")
+    private Integer flagInit;
+
+    @ApiModelProperty("闀垮害")
+    private Integer length;
+
+}
diff --git a/src/main/java/com/zy/asrs/enums/CommonEnum.java b/src/main/java/com/zy/asrs/enums/CommonEnum.java
index f6faefa..e2fcbf9 100644
--- a/src/main/java/com/zy/asrs/enums/CommonEnum.java
+++ b/src/main/java/com/zy/asrs/enums/CommonEnum.java
@@ -9,9 +9,9 @@
 public enum CommonEnum {
 
     //閫氱敤绫诲瀷
-    COMMON_ENUM_Y(0, "鍚�"),
+    COMMON_ENUM_Y(1, "鏄�"),
     //閫氱敤
-    COMMON_ENUM_N(1, "鏄�");
+    COMMON_ENUM_N(0, "鍚�");
 
     public Integer type;
 
diff --git a/src/main/java/com/zy/asrs/service/BasContainerService.java b/src/main/java/com/zy/asrs/service/BasContainerService.java
index 925a7af..ad2f9af 100644
--- a/src/main/java/com/zy/asrs/service/BasContainerService.java
+++ b/src/main/java/com/zy/asrs/service/BasContainerService.java
@@ -1,8 +1,17 @@
 package com.zy.asrs.service;
 
+import com.core.common.R;
 import com.zy.asrs.entity.BasContainer;
 import com.baomidou.mybatisplus.service.IService;
+import com.zy.asrs.entity.param.ContainerParams;
 
 public interface BasContainerService extends IService<BasContainer> {
 
+    /**
+     * @author Ryan
+     * @date 2025/9/26
+     * @description: TODO
+     * @version 1.0
+     */
+    R init(ContainerParams container);
 }
diff --git a/src/main/java/com/zy/asrs/service/MatService.java b/src/main/java/com/zy/asrs/service/MatService.java
index dd30afd..dbfd443 100644
--- a/src/main/java/com/zy/asrs/service/MatService.java
+++ b/src/main/java/com/zy/asrs/service/MatService.java
@@ -2,7 +2,9 @@
 
 import com.baomidou.mybatisplus.plugins.Page;
 import com.baomidou.mybatisplus.service.IService;
+import com.core.common.R;
 import com.zy.asrs.entity.Mat;
+import com.zy.asrs.entity.param.BatchMatsUpdateParam;
 
 import java.util.List;
 
@@ -18,4 +20,5 @@
 
     Mat selectNewUpdateTime();
 
+    R batchInfo(BatchMatsUpdateParam params);
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/BasContainerServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasContainerServiceImpl.java
index c4fbcbf..3919e27 100644
--- a/src/main/java/com/zy/asrs/service/impl/BasContainerServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/BasContainerServiceImpl.java
@@ -1,12 +1,71 @@
 package com.zy.asrs.service.impl;
 
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.R;
+import com.core.exception.CoolException;
+import com.zy.asrs.entity.param.ContainerParams;
+import com.zy.asrs.enums.CommonEnum;
+import com.zy.asrs.enums.ContainerType;
 import com.zy.asrs.mapper.BasContainerMapper;
 import com.zy.asrs.entity.BasContainer;
 import com.zy.asrs.service.BasContainerService;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.apache.tika.utils.StringUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
 
 @Service("basContainerService")
 public class BasContainerServiceImpl extends ServiceImpl<BasContainerMapper, BasContainer> implements BasContainerService {
 
+    /**
+     * @author Ryan
+     * @date 2025/9/26
+     * @description: 瀹瑰櫒鍒濆鍖�
+     * @version 1.0
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R init(ContainerParams container) {
+        Integer length = 7;
+        if (Objects.isNull(container.getType())) {
+            throw new CoolException("瀹瑰櫒绫诲瀷涓嶈兘涓虹┖锛�");
+        }
+        if (!Objects.isNull(container.getLength())) {
+            length = container.getLength();
+        }
+        if (!Objects.isNull(container.getFlagInit()) && container.getFlagInit().equals(CommonEnum.COMMON_ENUM_Y.type)) {
+            this.delete(new EntityWrapper<>());
+        }
+        for (int i = container.getStart(); i <= container.getEnd(); i++) {
+            BasContainer basContainer = new BasContainer();
+            String prefix = "", ruleCode = "";
+            if (container.getType().equals(ContainerType.CONTAINER_TYPE_BOX.type)) {
+                prefix = "LX2";
+                basContainer.setMixMax(3);
+            } else if (container.getType().equals(ContainerType.CONTAINER_TYPE_CAGE.type)) {
+                prefix = "LK3";
+                basContainer.setMixMax(2);
+            } else if (container.getType().equals(ContainerType.CONTAINER_TYPE_SALVER.type)) {
+                prefix = "TP4";
+                basContainer.setMixMax(2);
+            }
+            ruleCode = prefix + StringUtils.leftPad(i + "", length, "0");
+            basContainer.setType(container.getType())
+                    .setCreateTime(new Date())
+                    .setUpdateTime(new Date())
+                    .setId(null)
+                    .setFlagMix(1)
+                    .setBarcode(ruleCode);
+            if (!this.insert(basContainer)) {
+                throw new CoolException("瀹瑰櫒淇濆瓨澶辫触锛侊紒");
+            }
+        }
+        return R.ok();
+    }
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/MatServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MatServiceImpl.java
index 8ab8e75..f2fddbd 100644
--- a/src/main/java/com/zy/asrs/service/impl/MatServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MatServiceImpl.java
@@ -1,11 +1,16 @@
 package com.zy.asrs.service.impl;
 
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.plugins.Page;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.core.common.R;
+import com.core.exception.CoolException;
+import com.zy.asrs.entity.param.BatchMatsUpdateParam;
 import org.springframework.stereotype.Service;
 import com.zy.asrs.entity.Mat;
 import com.zy.asrs.mapper.MatMapper;
 import com.zy.asrs.service.MatService;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
@@ -37,6 +42,27 @@
         return this.baseMapper.selectNewUpdateTime();
     }
 
+    /**
+     * @author Ryan
+     * @date 2025/9/26
+     * @description: 鎵归噺淇敼鐗╂枡淇℃伅
+     * @version 1.0
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R batchInfo(BatchMatsUpdateParam params) {
+        List<Long> ids = params.getIds();
+        List<Mat> mats = this.baseMapper.selectList(new EntityWrapper<Mat>().in("id", ids));
+        mats.forEach(mat -> {
+            mat.setLocType(params.getType());
+            mat.setUpQty(params.getUpQty());
+            if (this.updateById(mat)) {
+                throw new CoolException("鐗╂枡淇℃伅淇敼澶辫触锛侊紒");
+            }
+        });
+        return R.ok();
+    }
+
     @Override
     public Page<Mat> getMatTurnPage(Page<Mat> page){
         page.setRecords(baseMapper.getMatTurnPage(page.getCondition()));
diff --git a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
index 716a7ed..59c0c8f 100644
--- a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -683,17 +683,16 @@
                 if (Cools.isEmpty(mat)) {
                     throw new CoolException(detlDto.getMatnr() + "鍟嗗搧妗f涓嶅瓨鍦�");
                 }
-
                 //鏈�澶氬彲鏀炬暟閲�
                 Double singleMax = mat.getUpQty() * suplus;
                 if (singleMax.compareTo(detlDto.getAnfme()) < 0) {
-                    throw new CoolException("鍗曟鏈�澶х粍鎵樹笂闄愪负锛�" + singleMax);
+                    throw new CoolException("鐗╂枡锛�" + detlDto.getMatnr() + "鍗曟缁勬墭涓婇檺涓猴細" + mat.getUpQty() + ",褰撳墠鎬婚噺瓒呭嚭鎵樼洏瑁呰浇涓婇檺!!");
                 }
                 BigDecimal decimal = new BigDecimal(detlDto.getAnfme() / mat.getUpQty());
                 //褰撳墠鐗╂枡闇�瑕佸崰鐢ㄦ枡绠辨牸鏁�
                 Integer curr = decimal.setScale(0, RoundingMode.CEILING).intValue();
                 suplus = suplus - curr;
-                if (suplus == 0 || suplus < 0) {
+                if (suplus < 0) {
                     throw new CoolException("鐗╂枡锛�" + detlDto.getMatnr() + ", 瓒呭嚭褰撳墠鎵樼洏瑁呰浇涓婇檺锛侊紒");
                 }
 
diff --git a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
index 29dfc78..5277f6f 100644
--- a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -465,6 +465,7 @@
                 tagId = tagService.getTop().getId();
             }
             mat.setTagId(tagId);
+            mat.setLocType(tagId);
             mat.setMatnr(analyse.getMatnr());
             mat.setMaktx(param.getMaterialName());
             mat.setSpecs(param.getConfigureDesc());
@@ -571,6 +572,7 @@
 //            mat.setModel(param.getModel());
 
                 mat.setTagId(tagId);
+                mat.setLocType(tagId);
                 mat.setStatus(1);
                 mat.setCreateTime(now);
                 mat.setUpdateTime(now);
diff --git a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
index 9bab122..80f7eb4 100644
--- a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -656,10 +656,10 @@
             if (!basStationService.updateById(devNo)) {
                 throw new CoolException("绔欑偣淇℃伅淇敼澶辫触锛侊紒");
             }
-//            task.setWrkSts(15L);
-//            if (!taskService.updateById(task)) {
-//                throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
-//            }
+            task.setWrkSts(15L);
+            if (!taskService.updateById(task)) {
+                throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+            }
         } else {
 
         }
diff --git a/src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java b/src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java
index 6443a4b..7165153 100644
--- a/src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java
+++ b/src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java
@@ -146,6 +146,7 @@
                             mat.setMaktx(jsonArray.get(0).toString());
                             mat.setSpecs(jsonArray.get(3).toString());//瑙勬牸
                             mat.setTagId(tag.getId());
+                            mat.setLocType(tag.getId());
                             mat.setCreateTime(jsonDate);//鍟嗗搧鍒涘缓鏃堕棿
                             mat.setUpdateTime(new Date());
                             mat.setStatus(1);
diff --git a/src/main/java/com/zy/asrs/utils/MatExcelListener.java b/src/main/java/com/zy/asrs/utils/MatExcelListener.java
index 0c7ff89..7e53bac 100644
--- a/src/main/java/com/zy/asrs/utils/MatExcelListener.java
+++ b/src/main/java/com/zy/asrs/utils/MatExcelListener.java
@@ -131,6 +131,7 @@
         if (mat == null) {
             mat = excel;
             mat.setTagId(tagId);
+            mat.setLocType(tagId);
             if (!matService.insert(mat)) {
                 throw new CoolException("淇濆瓨鍟嗗搧淇℃伅澶辫触锛屽晢鍝佺紪鐮侊細" + excel.getMatnr());
             }
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 890bdc6..4069581 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -43,7 +43,7 @@
   #  global-config:
   #    field-strategy: 0
   configuration:
-#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
     map-underscore-to-camel-case: true
     cache-enabled: true
     call-setters-on-nulls: true
diff --git a/src/main/webapp/static/js/basContainer/basContainer.js b/src/main/webapp/static/js/basContainer/basContainer.js
index e63b6af..9781c7c 100644
--- a/src/main/webapp/static/js/basContainer/basContainer.js
+++ b/src/main/webapp/static/js/basContainer/basContainer.js
@@ -1,7 +1,7 @@
 var pageCurr;
 layui.config({
     base: baseUrl + "/static/layui/lay/modules/"
-}).use(['table','laydate', 'form', 'admin'], function(){
+}).use(['table', 'laydate', 'form', 'admin'], function () {
     var table = layui.table;
     var $ = layui.jquery;
     var layer = layui.layer;
@@ -13,7 +13,7 @@
     tableIns = table.render({
         elem: '#basContainer',
         headers: {token: localStorage.getItem('token')},
-        url: baseUrl+'/basContainer/list/auth',
+        url: baseUrl + '/basContainer/list/auth',
         page: true,
         limit: 15,
         limits: [15, 30, 50, 100, 200, 500],
@@ -22,13 +22,13 @@
         height: 'full-120',
         cols: [[
             {type: 'checkbox'}
-            ,{field: 'barcode', align: 'center',title: '瀹瑰櫒缂栫爜'}
-            ,{field: 'type$', align: 'center',title: '瀹瑰櫒绫诲瀷'}
-            ,{field: 'flagMix$', align: 'center',title: '鏄惁娣锋斁'}
-            ,{field: 'mixMax', align: 'center',title: '娣锋斁绉嶇被'}
-            ,{field: 'createTime', align: 'center',title: '鍒涘缓鏃堕棿'}
-            ,{field: 'updateTime', align: 'center',title: '淇敼鏃堕棿'}
-            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:120}
+            , {field: 'barcode', align: 'center', title: '瀹瑰櫒缂栫爜'}
+            , {field: 'type$', align: 'center', title: '瀹瑰櫒绫诲瀷'}
+            , {field: 'flagMix$', align: 'center', title: '鏄惁娣锋斁'}
+            , {field: 'mixMax', align: 'center', title: '娣锋斁绉嶇被'}
+            , {field: 'createTime', align: 'center', title: '鍒涘缓鏃堕棿'}
+            , {field: 'updateTime', align: 'center', title: '淇敼鏃堕棿'}
+            , {fixed: 'right', title: '鎿嶄綔', align: 'center', toolbar: '#operate', width: 120}
         ]],
         request: {
             pageName: 'curr',
@@ -45,11 +45,11 @@
         response: {
             statusCode: 200
         },
-        done: function(res, curr, count) {
+        done: function (res, curr, count) {
             if (res.code === 403) {
-                top.location.href = baseUrl+"/";
+                top.location.href = baseUrl + "/";
             }
-            pageCurr=curr;
+            pageCurr = curr;
             limit();
         }
     });
@@ -57,7 +57,7 @@
     // 鐩戝惉鎺掑簭浜嬩欢
     table.on('sort(basContainer)', function (obj) {
         var searchData = {};
-        $.each($('#search-box [name]').serializeArray(), function() {
+        $.each($('#search-box [name]').serializeArray(), function () {
             searchData[this.name] = this.value;
         });
         searchData['orderByField'] = obj.field;
@@ -71,23 +71,26 @@
     // 鐩戝惉澶村伐鍏锋爮浜嬩欢
     table.on('toolbar(basContainer)', function (obj) {
         var checkStatus = table.checkStatus(obj.config.id).data;
-        switch(obj.event) {
+        switch (obj.event) {
             case 'addData':
                 showEditModel();
                 break;
             case 'deleteData':
-               if (checkStatus.length === 0) {
-                   layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
-                   return;
-               }
-               del(checkStatus.map(function (d) {
-                   return d.id;
-               }));
-               break;
+                if (checkStatus.length === 0) {
+                    layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
+                    return;
+                }
+                del(checkStatus.map(function (d) {
+                    return d.id;
+                }));
+                break;
+            case 'init':
+                initContainer();
+                break;
             case 'exportData':
-                admin.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
-                    var titles=[];
-                    var fields=[];
+                admin.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);
@@ -95,7 +98,7 @@
                         }
                     });
                     var exportData = {};
-                    $.each($('#search-box [name]').serializeArray(), function() {
+                    $.each($('#search-box [name]').serializeArray(), function () {
                         exportData[this.name] = this.value;
                     });
                     var param = {
@@ -103,18 +106,18 @@
                         'fields': fields
                     };
                     $.ajax({
-                        url: baseUrl+"/basContainer/export/auth",
+                        url: baseUrl + "/basContainer/export/auth",
                         headers: {'token': localStorage.getItem('token')},
                         data: JSON.stringify(param),
-                        dataType:'json',
-                        contentType:'application/json;charset=UTF-8',
+                        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');
+                                table.exportFile(titles, res.data, 'xls');
                             } else if (res.code === 403) {
-                                top.location.href = baseUrl+"/";
+                                top.location.href = baseUrl + "/";
                             } else {
                                 layer.msg(res.msg, {icon: 2})
                             }
@@ -126,7 +129,7 @@
     });
 
     // 鐩戝惉琛屽伐鍏蜂簨浠�
-    table.on('tool(basContainer)', function(obj){
+    table.on('tool(basContainer)', function (obj) {
         var data = obj.data;
         switch (obj.event) {
             case 'edit':
@@ -137,6 +140,43 @@
                 break;
         }
     });
+
+    function initContainer() {
+        admin.open({
+            type: 1,
+            area: '600px',
+            title: '鍒濆鍖�',
+            content: $('#initContainer').html(),
+            success: function (layero, dIndex) {
+                // layDateRender(mData);
+                // form.val('detail', mData);
+                form.on('submit(initDo)', function (data) {
+                    var loadIndex = layer.load(2);
+                    $.ajax({
+                        url: baseUrl + "/basContainer/init/auth",
+                        headers: {'token': localStorage.getItem('token'), 'Content-Type': 'application/json'},
+                        data: JSON.stringify(data.field),
+                        method: 'POST',
+                        success: function (res) {
+                            layer.close(loadIndex);
+                            if (res.code === 200) {
+                                layer.close(dIndex);
+                                layer.msg(res.msg, {icon: 1});
+                                tableReload();
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl + "/";
+                            } else {
+                                layer.msg(res.msg, {icon: 2});
+                            }
+                        }
+                    })
+                    return false;
+                });
+                $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                layui.form.render('select');
+            }
+        });
+    }
 
     /* 寮圭獥 - 鏂板銆佷慨鏀� */
     function showEditModel(mData) {
@@ -151,19 +191,19 @@
                 form.on('submit(editSubmit)', function (data) {
                     var loadIndex = layer.load(2);
                     $.ajax({
-                        url: baseUrl+"/basContainer/"+(mData?'update':'add')+"/auth",
+                        url: baseUrl + "/basContainer/" + (mData ? 'update' : 'add') + "/auth",
                         headers: {'token': localStorage.getItem('token')},
                         data: data.field,
                         method: 'POST',
                         success: function (res) {
                             layer.close(loadIndex);
-                            if (res.code === 200){
+                            if (res.code === 200) {
                                 layer.close(dIndex);
                                 layer.msg(res.msg, {icon: 1});
                                 tableReload();
-                            } else if (res.code === 403){
-                                top.location.href = baseUrl+"/";
-                            }else {
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl + "/";
+                            } else {
                                 layer.msg(res.msg, {icon: 2});
                             }
                         }
@@ -185,17 +225,17 @@
             layer.close(i);
             var loadIndex = layer.load(2);
             $.ajax({
-                url: baseUrl+"/basContainer/delete/auth",
+                url: baseUrl + "/basContainer/delete/auth",
                 headers: {'token': localStorage.getItem('token')},
                 data: {ids: ids},
                 method: 'POST',
                 success: function (res) {
                     layer.close(loadIndex);
-                    if (res.code === 200){
+                    if (res.code === 200) {
                         layer.msg(res.msg, {icon: 1});
                         tableReload();
-                    } else if (res.code === 403){
-                        top.location.href = baseUrl+"/";
+                    } else if (res.code === 403) {
+                        top.location.href = baseUrl + "/";
                     } else {
                         layer.msg(res.msg, {icon: 2});
                     }
@@ -217,33 +257,55 @@
         tableReload(false);
     });
 
+    form.on('submit(init)', function (data) {
+        $.ajax({
+            url: baseUrl + "/basContainer/init/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: data.field,
+            method: 'POST',
+            async: false,
+            success: function (res) {
+                if (res.code === 200) {
+                    layer.msg(res.msg);
+                    layer.closeAll();
+                    tableReload(false);
+                } else if (res.code === 403) {
+                    parent.location.href = "/";
+                } else {
+                    layer.msg(res.msg)
+                }
+            }
+        })
+    });
+
     // 鏃堕棿閫夋嫨鍣�
     function layDateRender(data) {
         setTimeout(function () {
             layDate.render({
                 elem: '.layui-laydate-range'
-                ,type: 'datetime'
-                ,range: true
+                , type: 'datetime'
+                , range: true
             });
 
         }, 300);
     }
+
     layDateRender();
 
 });
 
 // 鍏抽棴鍔ㄤ綔
-$(document).on('click','#data-detail-close', function () {
+$(document).on('click', '#data-detail-close', function () {
     parent.layer.closeAll();
 });
 
 function tableReload(child) {
     var searchData = {};
-    $.each($('#search-box [name]').serializeArray(), function() {
+    $.each($('#search-box [name]').serializeArray(), function () {
         searchData[this.name] = this.value;
     });
     tableIns.reload({
         where: searchData,
         page: {curr: pageCurr}
-     });
+    });
 }
diff --git a/src/main/webapp/static/js/common.js b/src/main/webapp/static/js/common.js
index e003331..42a5a42 100644
--- a/src/main/webapp/static/js/common.js
+++ b/src/main/webapp/static/js/common.js
@@ -188,6 +188,7 @@
     ,{field: 'model', align: 'center',title: '浠g爜', hide: true}
     ,{field: 'color', align: 'center',title: '棰滆壊', hide: true}
     ,{field: 'brand', align: 'center',title: '鍝佺墝', hide: true}
+    ,{field: 'upQty', align: 'center',title: '缁勬墭涓婇檺'}
     ,{field: 'unit', align: 'center',title: '鍗曚綅', hide: false}
     ,{field: 'price', align: 'center',title: '鍗曚环', hide: true}
     ,{field: 'sku', align: 'center',title: 'sku', hide: true}
diff --git a/src/main/webapp/static/js/mat/mat.js b/src/main/webapp/static/js/mat/mat.js
index 3e02ded..777cab7 100644
--- a/src/main/webapp/static/js/mat/mat.js
+++ b/src/main/webapp/static/js/mat/mat.js
@@ -1,18 +1,19 @@
 var pageCurr;
 var printMatCodeNos = [];
 var admin;
+
 function getCol() {
     var cols = [
         {type: 'checkbox'}
-        ,{field: 'tagId$', align: 'center',title: '褰掔被', templet: '#tagTpl'}
-        ,{field: 'locType$', align: 'center',title: '搴撲綅绫诲瀷'}
+        , {field: 'tagId$', align: 'center', title: '褰掔被', templet: '#tagTpl'}
+        , {field: 'locType$', align: 'center', title: '搴撲綅绫诲瀷'}
         // ,{field: 'store_max', align: 'center',title: '搴撳瓨涓婇檺'}
         // ,{field: 'store_min', align: 'center',title: '搴撳瓨涓嬮檺'}
         // ,{field: 'store_max_date', align: 'center',title: '搴撻緞涓婇檺(澶�)'}
     ];
     cols.push.apply(cols, matCols);
     cols.push(
-        {fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:150}
+        {fixed: 'right', title: '鎿嶄綔', align: 'center', toolbar: '#operate', width: 150}
     )
     return cols;
 }
@@ -21,7 +22,7 @@
     base: baseUrl + "/static/layui/lay/modules/"
 }).extend({
     dropdown: 'dropdown/dropdown',
-}).use(['table','laydate', 'form', 'treeTable', 'admin', 'xmSelect', 'dropdown', 'element'], function(){
+}).use(['table', 'laydate', 'form', 'treeTable', 'admin', 'xmSelect', 'dropdown', 'element'], function () {
     var table = layui.table;
     var $ = layui.jquery;
     var layer = layui.layer;
@@ -34,7 +35,7 @@
     // 鍟嗗搧鍒嗙被鏁版嵁
     var insTb = treeTable.render({
         elem: '#tag',
-        url: baseUrl+'/tag/list/auth',
+        url: baseUrl + '/tag/list/auth',
         headers: {token: localStorage.getItem('token')},
         tree: {
             iconIndex: 2,           // 鎶樺彔鍥炬爣鏄剧ず鍦ㄧ鍑犲垪
@@ -53,7 +54,7 @@
     tableIns = table.render({
         elem: '#mat',
         headers: {token: localStorage.getItem('token')},
-        url: baseUrl+'/mat/list/auth',
+        url: baseUrl + '/mat/list/auth',
         page: true,
         limit: 16,
         limits: [16, 30, 50, 100, 200, 500],
@@ -76,17 +77,17 @@
         response: {
             statusCode: 200
         },
-        done: function(res, curr, count) {
+        done: function (res, curr, count) {
             if (res.code === 403) {
-                top.location.href = baseUrl+"/";
+                top.location.href = baseUrl + "/";
             }
-            pageCurr=curr;
+            pageCurr = curr;
             limit();
             form.on('checkbox(tableCheckbox)', function (data) {
-                var _index = $(data.elem).attr('table-index')||0;
-                if(data.elem.checked){
+                var _index = $(data.elem).attr('table-index') || 0;
+                if (data.elem.checked) {
                     res.data[_index][data.value] = 'Y';
-                }else{
+                } else {
                     res.data[_index][data.value] = 'N';
                 }
             });
@@ -96,7 +97,7 @@
     // 鐩戝惉鎺掑簭浜嬩欢
     table.on('sort(locMast)', function (obj) {
         var searchData = {};
-        $.each($('#search-box [name]').serializeArray(), function() {
+        $.each($('#search-box [name]').serializeArray(), function () {
             searchData[this.name] = this.value;
         });
         searchData['orderByField'] = obj.field;
@@ -108,9 +109,9 @@
             },
             done: function (res, curr, count) {
                 if (res.code === 403) {
-                    top.location.href = baseUrl+"/";
+                    top.location.href = baseUrl + "/";
                 }
-                pageCurr=curr;
+                pageCurr = curr;
                 limit();
             }
         });
@@ -119,28 +120,28 @@
     // 鐩戝惉澶村伐鍏锋爮浜嬩欢
     table.on('toolbar(mat)', function (obj) {
         var checkStatus = table.checkStatus(obj.config.id);
-        switch(obj.event) {
+        switch (obj.event) {
             case 'addData':
                 showEditModel()
                 break;
             case 'deleteData':
                 var data = checkStatus.data;
-                if (data.length === 0){
+                if (data.length === 0) {
                     layer.msg('璇烽�夋嫨鏁版嵁');
                 } else {
-                    layer.confirm('纭畾鍒犻櫎'+(data.length===1?'姝�':data.length)+'鏉℃暟鎹悧', function(){
+                    layer.confirm('纭畾鍒犻櫎' + (data.length === 1 ? '姝�' : data.length) + '鏉℃暟鎹悧', function () {
                         $.ajax({
-                            url: baseUrl+"/mat/delete/auth",
+                            url: baseUrl + "/mat/delete/auth",
                             headers: {'token': localStorage.getItem('token')},
                             data: {param: JSON.stringify(data)},
                             method: 'POST',
-                            traditional:true,
+                            traditional: true,
                             success: function (res) {
-                                if (res.code === 200){
+                                if (res.code === 200) {
                                     layer.closeAll();
                                     tableReload(false);
-                                } else if (res.code === 403){
-                                    top.location.href = baseUrl+"/";
+                                } else if (res.code === 403) {
+                                    top.location.href = baseUrl + "/";
                                 } else {
                                     layer.msg(res.msg)
                                 }
@@ -150,9 +151,9 @@
                 }
                 break;
             case 'exportData':
-                layer.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
-                    var titles=[];
-                    var fields=[];
+                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);
@@ -160,7 +161,7 @@
                         }
                     });
                     var exportData = {};
-                    $.each($('#search-box [name]').serializeArray(), function() {
+                    $.each($('#search-box [name]').serializeArray(), function () {
                         exportData[this.name] = this.value;
                     });
                     var param = {
@@ -168,18 +169,18 @@
                         'fields': fields
                     };
                     $.ajax({
-                        url: baseUrl+"/mat/export/auth",
+                        url: baseUrl + "/mat/export/auth",
                         headers: {'token': localStorage.getItem('token')},
                         data: JSON.stringify(param),
-                        dataType:'json',
-                        contentType:'application/json;charset=UTF-8',
+                        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');
+                                table.exportFile(titles, res.data, 'xls');
                             } else if (res.code === 403) {
-                                top.location.href = baseUrl+"/";
+                                top.location.href = baseUrl + "/";
                             } else {
                                 layer.msg(res.msg)
                             }
@@ -191,17 +192,17 @@
             case "btnPrintBatch":
                 printMatCodeNos = [];
                 var data = checkStatus.data;
-                if (data.length === 0){
+                if (data.length === 0) {
                     layer.msg('璇烽�夋嫨鎵撳嵃鏁版嵁');
                 } else {
                     layer.open({
                         type: 1,
-                        title: '鎵归噺鎵撳嵃 [鏁伴噺'+ data.length +']',
+                        title: '鎵归噺鎵撳嵃 [鏁伴噺' + data.length + ']',
                         area: ['500px'],
                         shadeClose: true,
                         content: $('#printDataDiv'),
-                        success: function(layero, index){
-                            for (var i = 0; i<data.length;i++) {
+                        success: function (layero, index) {
+                            for (var i = 0; i < data.length; i++) {
                                 printMatCodeNos.push(data[i].matnr);
                             }
                         },
@@ -210,11 +211,59 @@
                     });
                 }
                 break;
+            case "batchModifties":
+                var selected = checkStatus.data;
+                if (selected.length === 0) {
+                    layer.msg('璇烽�夋嫨淇敼鏁版嵁');
+                } else {
+                    let selIds = selected.map(item => {
+                       return  item.id
+                    });
+                    layer.open({
+                        type: 1,
+                        title: '鎵归噺淇敼',
+                        area: ['500px'],
+                        shadeClose: true,
+                        content: $('#batchModifties'),
+                        success: function (layero, index) {
+                            layer.iframeAuto(index);
+                            form.on('submit(batchModify)', function (data) {
+                                let params = {...data?.field}
+                                params.id = selIds
+                                $.ajax({
+                                    url: baseUrl + "/mat/batch/auth",
+                                    headers: {'token': localStorage.getItem('token')},
+                                    data: JSON.stringify(params),
+                                    dataType: 'json',
+                                    contentType: 'application/json;charset=UTF-8',
+                                    method: 'POST',
+                                    success: function (res) {
+                                        layer.closeAll();
+                                        if (res.code === 200) {
+
+                                        } else if (res.code === 403) {
+                                            top.location.href = baseUrl + "/";
+                                        } else {
+                                            layer.msg(res.msg)
+                                        }
+                                    }
+                                });
+                                layer.closeAll();
+                            });
+                        },
+                        end: function () {
+
+                        }
+                    });
+                }
+                break;
+            default:
+                break;
         }
     });
 
     // 鐩戝惉琛屽伐鍏蜂簨浠�
-    table.on('tool(mat)', function(obj){
+    table.on('tool(mat)', function (obj) {
         var data = obj.data;
         switch (obj.event) {
             // 鎵撳嵃
@@ -226,7 +275,7 @@
                     area: ['500px'],
                     shadeClose: true,
                     content: $('#printDataDiv'),
-                    success: function(layero, index){
+                    success: function (layero, index) {
                         layer.iframeAuto(index);
                         printMatCodeNos.push(data.matnr);
                     },
@@ -259,7 +308,6 @@
                 }
                 // 琛ㄥ崟鎻愪氦浜嬩欢
                 form.on('submit(editSubmit)', function (data) {
-                    console.log(data)
                     data.field.tagId = insXmSel.getValue('valueStr');
                     if (isEmpty(data.field.tagId)) {
                         layer.msg('鍒嗙被涓嶈兘涓虹┖', {icon: 2});
@@ -267,19 +315,19 @@
                     }
                     var loadIndex = layer.load(2);
                     $.ajax({
-                        url: baseUrl+"/mat/"+(mData?'update':'add')+"/auth",
+                        url: baseUrl + "/mat/" + (mData ? 'update' : 'add') + "/auth",
                         headers: {'token': localStorage.getItem('token')},
                         data: data.field,
                         method: 'POST',
                         success: function (res) {
                             layer.close(loadIndex);
-                            if (res.code === 200){
+                            if (res.code === 200) {
                                 layer.close(dIndex);
                                 layer.msg(res.msg, {icon: 1});
                                 $(".layui-laypage-btn")[0].click();
-                            } else if (res.code === 403){
-                                top.location.href = baseUrl+"/";
-                            }else {
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl + "/";
+                            } else {
                                 layer.msg(res.msg, {icon: 2});
                             }
                         }
@@ -316,40 +364,41 @@
     // 妯℃澘閫夋嫨
     form.on('radio(selectTemplateRadio)', function (data) {
         $('.template-preview').hide();
-        $('#template-preview-'+data.value).show();
+        $('#template-preview-' + data.value).show();
     });
 
     // 寮�濮嬫墦鍗�
     form.on('submit(doPrint)', function (data) {
         var templateNo = data.field.selectTemplate;
         $.ajax({
-            url: baseUrl+"/mat/print/auth",
+            url: baseUrl + "/mat/print/auth",
             headers: {'token': localStorage.getItem('token')},
             data: {param: printMatCodeNos},
             method: 'POST',
             async: false,
             success: function (res) {
-                if (res.code === 200){
+                if (res.code === 200) {
                     layer.closeAll();
-                    for (let i=0;i<res.data.length;i++){
-                        var templateDom = $("#templatePreview"+templateNo);
+                    for (let i = 0; i < res.data.length; i++) {
+                        var templateDom = $("#templatePreview" + templateNo);
                         var className = templateDom.attr("class");
                         if (className === 'template-barcode') {
-                            res.data[i]["barcodeUrl"]=baseUrl+"/mac/code/auth?type=1&param="+res.data[i].matnr;
+                            res.data[i]["barcodeUrl"] = baseUrl + "/mac/code/auth?type=1&param=" + res.data[i].matnr;
                         } else {
-                            res.data[i]["barcodeUrl"]=baseUrl+"/mac/code/auth?type=2&param="+res.data[i].matnr;
+                            res.data[i]["barcodeUrl"] = baseUrl + "/mac/code/auth?type=2&param=" + res.data[i].matnr;
                         }
                     }
                     var tpl = templateDom.html();
                     var template = Handlebars.compile(tpl);
                     var html = template(res);
                     var box = $("#box");
-                    box.html(html);box.show();
-                    box.print({mediaPrint:true});
+                    box.html(html);
+                    box.show();
+                    box.print({mediaPrint: true});
                     box.hide();
-                } else if (res.code === 403){
-                    top.location.href = baseUrl+"/";
-                }else {
+                } else if (res.code === 403) {
+                    top.location.href = baseUrl + "/";
+                } else {
                     layer.msg(res.msg)
                 }
             }
@@ -383,8 +432,8 @@
 });
 
 // excel瀵煎叆妯℃澘涓嬭浇
-function excelMouldDownload(){
-    layer.load(1, {shade: [0.1,'#fff']});
+function excelMouldDownload() {
+    layer.load(1, {shade: [0.1, '#fff']});
     location.href = baseUrl + "/mat/excel/import/mould";
     layer.closeAll('loading');
 }
@@ -393,13 +442,14 @@
 function importExcel() {
     $("#importExcel").trigger("click");
 }
-function upload(obj){
-    if(!obj.files) {
+
+function upload(obj) {
+    if (!obj.files) {
         return;
     }
     var file = obj.files[0];
-    admin.confirm('纭鍚屾 [' + file.name +'] 鏂囦欢鍚楋紵', function (index) {
-        layer.load(1, {shade: [0.1,'#fff']});
+    admin.confirm('纭鍚屾 [' + file.name + '] 鏂囦欢鍚楋紵', function (index) {
+        layer.load(1, {shade: [0.1, '#fff']});
         var url = baseUrl + "/mat/excel/import/auth";
         var form = new FormData();
         form.append("file", file);
@@ -407,30 +457,32 @@
         xhr.open("post", url, true); //post鏂瑰紡锛寀rl涓烘湇鍔″櫒璇锋眰鍦板潃锛宼rue 璇ュ弬鏁拌瀹氳姹傛槸鍚﹀紓姝ュ鐞嗐��
         xhr.setRequestHeader('token', localStorage.getItem('token'));
         xhr.onload = uploadComplete; //璇锋眰瀹屾垚
-        xhr.onerror =  uploadFailed; //璇锋眰澶辫触
+        xhr.onerror = uploadFailed; //璇锋眰澶辫触
         xhr.onloadend = function () { // // 涓婁紶瀹屾垚閲嶇疆鏂囦欢娴�
             layer.closeAll('loading');
             $("#importExcel").val("");
         };
         // xhr.upload.onprogress = progressFunction;//銆愪笂浼犺繘搴﹁皟鐢ㄦ柟娉曞疄鐜般��
-        xhr.upload.onloadstart = function(){//涓婁紶寮�濮嬫墽琛屾柟娉�
+        xhr.upload.onloadstart = function () {//涓婁紶寮�濮嬫墽琛屾柟娉�
             ot = new Date().getTime();   //璁剧疆涓婁紶寮�濮嬫椂闂�
             oloaded = 0;//璁剧疆涓婁紶寮�濮嬫椂锛屼互涓婁紶鐨勬枃浠跺ぇ灏忎负0
         };
         xhr.send(form);
-    }, function(index){
+    }, function (index) {
         $("#importExcel").val("");
     });
 }
+
 function uploadComplete(evt) {
     var res = JSON.parse(evt.target.responseText);
-    if(res.code === 200) {
+    if (res.code === 200) {
         layer.msg(res.msg, {icon: 1});
         loadTree("");
     } else {
         layer.msg(res.msg, {icon: 2});
     }
 }
+
 function uploadFailed(evt) {
     var res = JSON.parse(evt.target.responseText);
     layer.msg(res.msg, {icon: 2});
@@ -444,7 +496,7 @@
 
 function tableReload(child) {
     var searchData = {};
-    $.each($('#search-box [name]').serializeArray(), function() {
+    $.each($('#search-box [name]').serializeArray(), function () {
         searchData[this.name] = this.value;
     });
     (child ? parent.tableIns : tableIns).reload({
@@ -454,14 +506,14 @@
         },
         done: function (res, curr, count) {
             if (res.code === 403) {
-                top.location.href = baseUrl+"/";
+                top.location.href = baseUrl + "/";
             }
-            pageCurr=curr;
+            pageCurr = curr;
             if (res.data.length === 0 && count !== 0) {
                 tableIns.reload({
                     where: searchData,
                     page: {
-                        curr: pageCurr-1
+                        curr: pageCurr - 1
                     }
                 });
                 pageCurr -= 1;
diff --git a/src/main/webapp/views/basContainer/basContainer.html b/src/main/webapp/views/basContainer/basContainer.html
index f4ee0cf..8756c3a 100644
--- a/src/main/webapp/views/basContainer/basContainer.html
+++ b/src/main/webapp/views/basContainer/basContainer.html
@@ -22,14 +22,16 @@
                             <input class="layui-input" type="text" name="id" placeholder="缂栧彿" autocomplete="off">
                         </div>
                     </div>
-                     <div class="layui-inline" style="width: 300px">
+                    <div class="layui-inline" style="width: 300px">
                         <div class="layui-input-inline">
-                            <input class="layui-input layui-laydate-range" name="create_time" type="text" placeholder="璧峰鏃堕棿 - 缁堟鏃堕棿" autocomplete="off" style="width: 300px">
+                            <input class="layui-input layui-laydate-range" name="create_time" type="text"
+                                   placeholder="璧峰鏃堕棿 - 缁堟鏃堕棿" autocomplete="off" style="width: 300px">
                         </div>
                     </div>
                     <div class="layui-inline">
                         <div class="layui-input-inline">
-                            <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�" autocomplete="off">
+                            <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�"
+                                   autocomplete="off">
                         </div>
                     </div>
                     <div class="layui-inline">&emsp;
@@ -51,7 +53,7 @@
     <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 layui-btn-danger" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
-        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right">瀵煎嚭</button>
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-init" lay-event="init">鍒濆鍖�</button>
     </div>
 </script>
 
@@ -78,8 +80,18 @@
                         <input class="layui-input" name="barcode" placeholder="璇疯緭鍏ュ鍣ㄧ紪鐮�">
                     </div>
                 </div>
-
-             </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">瀹瑰櫒绫诲瀷</label>
+                    <div class="layui-input-inline">
+                        <select name="type">
+                            <option style="display: none"></option>
+                            <option value="12">鏂欑</option>
+                            <option value="13">绗兼</option>
+                            <option value="14">鎵樼洏</option>
+                        </select>
+                    </div>
+                </div>
+            </div>
         </div>
         <hr class="layui-bg-gray">
         <div class="layui-form-item text-right">
@@ -88,5 +100,49 @@
         </div>
     </form>
 </script>
+
+<div id="initContainer" style="margin: auto; display: none">
+    <div class="layui-form layui-form-pane" style="padding: 25px;">
+        <div class="layui-form-item">
+            <div class="layui-inline">
+                <label class="layui-form-label">鍒犻櫎瀹瑰櫒</label>
+                <div class="layui-input-inline" style="width: 100px;">
+                    <input type="checkbox" name="flagInit" lay-skin="switch" value="0" lay-text="鍒犻櫎|淇濈暀">
+                </div>
+            </div>
+        </div>
+        <!-- 鎺� -->
+        <div class="layui-form-item">
+            <div class="layui-inline">
+                <label class="layui-form-label">璧锋</label>
+                <div class="layui-input-inline" style="width: 100px;">
+                    <input type="text" name="start" autocomplete="off" class="layui-input"
+                           lay-verify="required|number">
+                </div>
+                <div class="layui-form-mid">-</div>
+                <div class="layui-input-inline" style="width: 100px;">
+                    <input type="text" name="end" autocomplete="off" class="layui-input"
+                           lay-verify="required|number">
+                </div>
+            </div>
+        </div>
+        <!-- 瀹瑰櫒绫诲瀷 -->
+        <div class="layui-form-item">
+            <label class="layui-form-label">瀹瑰櫒绫诲瀷</label>
+            <div class="layui-input-inline">
+                <select name="type">
+                    <option style="display: none"></option>
+                    <option value="12">鏂欑</option>
+                    <option value="13">绗兼</option>
+                    <option value="14">鎵樼洏</option>
+                </select>
+            </div>
+        </div>
+        <div style="text-align: center; margin-top: 20px">
+            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+            <button class="layui-btn layui-btn-normal" id="initDo" lay-submit lay-filter="initDo">纭畾</button>
+        </div>
+    </div>
+</div>
 </html>
 
diff --git a/src/main/webapp/views/basContainer/initContainer.html b/src/main/webapp/views/basContainer/initContainer.html
new file mode 100644
index 0000000..ac92aaf
--- /dev/null
+++ b/src/main/webapp/views/basContainer/initContainer.html
@@ -0,0 +1,164 @@
+<!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">
+    <style>
+    </style>
+</head>
+<body>
+<div class="layui-inline" style="width:31%;margin-top: 20px">
+    <label class="layui-form-label">搴� 浣� 鍙凤細</label>
+    <div class="layui-input-inline">
+        <input id="locNo" class="layui-input" type="text" disabled="disabled">
+    </div>
+</div>
+
+<!-- 瀹瑰櫒鍒濆鍖� -->
+<div id="initContainer" style="margin: 20px 0 10px 30px; display: none">
+    <div class="layui-form layui-form-pane">
+        <div class="layui-form-item">
+            <div class="layui-inline">
+                <label class="layui-form-label">鍒犻櫎搴撲綅</label>
+                <div class="layui-input-inline" style="width: 100px;">
+                    <input type="checkbox" name="enable" lay-skin="switch" value="1" lay-text="鍒犻櫎|淇濈暀">
+                </div>
+            </div>
+        </div>
+        <div class="layui-form-item">
+            <div class="layui-inline">
+                <label class="layui-form-label"><span class="not-null">*</span>搴撳尯鍚嶇О锛�</label>
+                <div class="layui-input-inline cool-auto-complete">
+                    <input id="identifying" name="identifying" class="layui-input" type="text" style="display: none">
+                    <input id="identifying$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)"
+                           type="text" onfocus=this.blur()>
+                    <div class="cool-auto-complete-window">
+                        <input class="cool-auto-complete-window-input" data-key="basAreasQueryBywhsType"
+                               onkeyup="autoLoad(this.getAttribute('data-key'))">
+                        <select class="cool-auto-complete-window-select" data-key="basAreasQueryBywhsTypeSelect"
+                                onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                        </select>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <!-- 鎺� -->
+        <div class="layui-form-item">
+            <div class="layui-inline">
+                <label class="layui-form-label">璧锋鎺�</label>
+                <div class="layui-input-inline" style="width: 100px;">
+                    <input type="text" name="startRow" autocomplete="off" class="layui-input"
+                           lay-verify="required|number">
+                </div>
+                <div class="layui-form-mid">-</div>
+                <div class="layui-input-inline" style="width: 100px;">
+                    <input type="text" name="endRow" autocomplete="off" class="layui-input"
+                           lay-verify="required|number">
+                </div>
+            </div>
+        </div>
+        <!-- 鍒� -->
+        <div class="layui-form-item">
+            <div class="layui-inline">
+                <label class="layui-form-label">璧锋鍒�</label>
+                <div class="layui-input-inline" style="width: 100px;">
+                    <input type="text" name="startBay" autocomplete="off" class="layui-input"
+                           lay-verify="required|number">
+                </div>
+                <div class="layui-form-mid">-</div>
+                <div class="layui-input-inline" style="width: 100px;">
+                    <input type="text" name="endBay" autocomplete="off" class="layui-input"
+                           lay-verify="required|number">
+                </div>
+            </div>
+        </div>
+        <!-- 灞� -->
+        <div class="layui-form-item">
+            <div class="layui-inline">
+                <label class="layui-form-label">璧锋灞�</label>
+                <div class="layui-input-inline" style="width: 100px;">
+                    <input type="text" name="startLev" autocomplete="off" class="layui-input"
+                           lay-verify="required|number">
+                </div>
+                <div class="layui-form-mid">-</div>
+                <div class="layui-input-inline" style="width: 100px;">
+                    <input type="text" name="endLev" autocomplete="off" class="layui-input"
+                           lay-verify="required|number">
+                </div>
+            </div>
+        </div>
+        <div class="layui-form-item">
+            <label class="layui-form-label">鍫嗗灈鏈烘暟閲�</label>
+            <div class="layui-input-inline">
+                <input type="text" name="crnAmount" lay-verify="required|number" autocomplete="off" class="layui-input">
+            </div>
+        </div>
+        <div class="layui-form-item">
+            <div class="layui-inline">
+                <label class="layui-form-label">璧峰鍫嗗灈鏈�</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="staCrn" autocomplete="off" class="layui-input" lay-verify="number">
+                </div>
+            </div>
+        </div>
+        <!-- 搴撲綅绫诲瀷 -->
+        <div class="layui-form-item">
+            <label class="layui-form-label">楂樹綆绫诲瀷</label>
+            <div class="layui-input-inline">
+                <select name="locType1">
+                    <option style="display: none"></option>
+                    <option value="0">鏈煡</option>
+                    <option value="1">浣庡簱浣�</option>
+                    <option value="2">楂樺簱浣�</option>
+                </select>
+            </div>
+        </div>
+        <div class="layui-form-item">
+            <label class="layui-form-label">瀹界獎绫诲瀷</label>
+            <div class="layui-input-inline">
+                <select name="locType2">
+                    <option style="display: none"></option>
+                    <option value="0">鏈煡</option>
+                    <option value="1">绐勫簱浣�</option>
+                    <option value="2">瀹藉簱浣�</option>
+                </select>
+            </div>
+        </div>
+        <div class="layui-form-item">
+            <label class="layui-form-label">杞婚噸绫诲瀷</label>
+            <div class="layui-input-inline">
+                <select name="locType3">
+                    <option style="display: none"></option>
+                    <option value="0">鏈煡</option>
+                    <option value="1">杞诲簱浣�</option>
+                    <option value="2">閲嶅簱浣�</option>
+                </select>
+            </div>
+        </div>
+        <div style="text-align: center; margin-top: 20px">
+            <button class="layui-btn layui-btn-radius layui-btn-normal" id="initDo" lay-submit lay-filter="initDo">
+                纭畾
+            </button>
+        </div>
+    </div>
+</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/locMast/locMast.js" charset="utf-8"></script>
+<script type="text/javascript">
+
+
+</script>
+
+</html>
\ No newline at end of file
diff --git a/src/main/webapp/views/mat/mat.html b/src/main/webapp/views/mat/mat.html
index 6cdad50..19ed4fb 100644
--- a/src/main/webapp/views/mat/mat.html
+++ b/src/main/webapp/views/mat/mat.html
@@ -127,6 +127,7 @@
     <div class="layui-btn-container">
         <button class="layui-btn layui-btn-sm" id="btn-print-batch" lay-event="btnPrintBatch">鎵归噺鎵撳嵃</button>
         <button class="layui-btn layui-btn-sm layui-btn-normal" id="btn-add" lay-event="addData">鏂板</button>
+        <button class="layui-btn layui-btn-sm" id="btn-print-batch" lay-event="batchModifties">鎵归噺淇敼</button>
         <button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
         <!-- 鍟嗗搧/鐗╂枡 鏁版嵁涓績 -->
         <div class="dropdown-menu" style="float: right">
@@ -181,46 +182,44 @@
         <input name="updateTime$" type="hidden">
         <input name="updateBy" type="hidden">
         <div class="layui-row">
-
             <div class="layui-col-md6">
-
                 <div class="layui-form-item">
                     <label class="layui-form-label">鍒嗙被</label>
                     <div class="layui-input-block">
                         <div id="tagSel" class="ew-xmselect-tree"></div>
                     </div>
                 </div>
-
                 <div class="layui-form-item">
                     <label class="layui-form-label layui-form-required">鍟嗗搧鍚嶇О</label>
                     <div class="layui-input-block">
                         <input name="maktx" placeholder="璇疯緭鍏ュ晢鍝佸悕绉�" class="layui-input" lay-vertype="tips" lay-verify="required" required="">
                     </div>
                 </div>
-
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">缁勬墭涓婇檺</label>
+                    <div class="layui-input-block">
+                        <input name="upQty" placeholder="璇疯緭鍏ユ渶澶х粍鎵樻暟閲�" class="layui-input" lay-vertype="tips" lay-verify="required" required="">
+                    </div>
+                </div>
                 <div class="layui-form-item">
                     <label class="layui-form-label">閰嶇疆</label>
                     <div class="layui-input-block">
                         <input name="specs" placeholder="璇疯緭鍏ラ厤缃�" class="layui-input">
                     </div>
                 </div>
-
                 <div class="layui-form-item">
                     <label class="layui-form-label">鍗曠鍑�閲�</label>
                     <div class="layui-input-block">
                         <input name="weight" placeholder="璇疯緭鍏ュ崟绠卞噣閲嶆牸" class="layui-input">
                     </div>
                 </div>
-
                 <div class="layui-form-item">
                     <label class="layui-form-label">鍗曠浣撶Н</label>
                     <div class="layui-input-block">
                         <input name="volume" placeholder="璇疯緭鍏ュ崟绠变綋绉�" class="layui-input">
                     </div>
                 </div>
-
             </div>
-
             <div class="layui-col-md6">
                 <div class="layui-form-item">
                     <label class="layui-form-label layui-form-required">鍟嗗搧缂栧彿</label>
@@ -228,35 +227,30 @@
                         <input id="matnr" name="matnr" placeholder="璇疯緭鍏ュ晢鍝佺紪鍙�" class="layui-input" lay-vertype="tips" lay-verify="required" required="">
                     </div>
                 </div>
-
                 <div class="layui-form-item">
                     <label class="layui-form-label">瑙勬牸</label>
                     <div class="layui-input-block">
                         <input name="specs" placeholder="璇疯緭鍏ヤ唬鐮�" class="layui-input">
                     </div>
                 </div>
-
                 <div class="layui-form-item">
                     <label class="layui-form-label">澶囨敞</label>
                     <div class="layui-input-block">
                         <input name="memo" placeholder="璇疯緭鍏ュ娉�" class="layui-input">
                     </div>
                 </div>
-
                 <div class="layui-form-item">
                     <label class="layui-form-label">鍗曠姣涢噸</label>
                     <div class="layui-input-block">
                         <input name="manLength" placeholder="璇疯緭鍏ュ崟绠辨瘺閲�" class="layui-input">
                     </div>
                 </div>
-
                 <div class="layui-form-item">
                     <label class="layui-form-label">鍗曠浣撶Н</label>
                     <div class="layui-input-block">
                         <input name="threeCode" placeholder="璇疯緭鍏ョ瀛愬昂瀵�" class="layui-input">
                     </div>
                 </div>
-
             </div>
         </div>
         <hr class="layui-bg-gray">
@@ -350,6 +344,38 @@
     </div>
 </div>
 
+<div id="batchModifties"  style="display: none;padding: 40px">
+    <form class="layui-form">
+        <input name="id" type="hidden">
+        <div class="layui-row">
+            <div class="layui-col-md8">
+                <div class="layui-form-item">
+                    <label class="layui-form-label">搴撲綅绫诲瀷</label>
+                    <div class="layui-input-block">
+                        <select name="type">
+                            <option style="display: none"></option>
+                            <option value="12">鏂欑</option>
+                            <option value="13">绗兼</option>
+                            <option value="14">鎵樼洏</option>
+                        </select>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">缁勬墭涓婇檺</label>
+                    <div class="layui-input-block">
+                        <input name="upQty" placeholder="璇疯緭鍏ユ渶澶х粍鎵樻暟閲�" class="layui-input" lay-vertype="tips" lay-verify="required" required="">
+                    </div>
+                </div>
+            </div>
+        </div>
+        <hr class="layui-bg-gray">
+        <div class="layui-form-item text-right">
+            <button class="layui-btn" lay-filter="batchModify" lay-submit="batchModify">淇濆瓨</button>
+            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+        </div>
+    </form>
+</div>
+
 <div id="box" style="display: block"></div>
 
 <!-- 鍒濆鍖栨墦鍗版ā鏉跨殑鏉″舰鐮� -->

--
Gitblit v1.9.1