diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/index.pb b/wms_pro/hd/.idea/sonarlint/issuestore/index.pb
index b2f499c5..052fe284 100644
--- a/wms_pro/hd/.idea/sonarlint/issuestore/index.pb
+++ b/wms_pro/hd/.idea/sonarlint/issuestore/index.pb
@@ -147,14 +147,10 @@ fnladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/dao/mapper
 ]nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/IMdGruopDickService.java,2/1/21151f545e109906fa59e7b7b0154d60b7c5a908
 �
 \nladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/dto/GroupDickQuery.java,4/9/496d3ff8da16d905d8db54d3a8b7f523ee06f40f
-�
-bnladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/controller/MdGruopDickController.java,2/b/2bf79ab59317d0d6b177fe4f01b5d69517e7c0bd
 �
 enladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/service/impl/MdGruopDickServiceImpl.java,d/5/d5175090d4638102781aaeb7ed369c4622e8f70e
 �
 [nladmin-system/src/main/java/org/nl/wms/pm_manage/form_data/service/IPmFormDataService.java,0/e/0e3d3e1c71243632b0cf4d4ce5d42bab41cbcbe2
-�
-cnladmin-system/src/main/java/org/nl/wms/pm_manage/form_data/service/impl/PmFormDataServiceImpl.java,d/2/d20e36ad1812a5acaa116fa022508a7ca0cc28fa
 �
 `nladmin-system/src/main/java/org/nl/wms/pm_manage/form_data/controller/PmFormDataController.java,c/4/c4b778bf4651d57a395e7eb2a9bcc835c076436d
 �
@@ -219,8 +215,6 @@ hnladmin-system/src/main/java/org/nl/wms/stor_manage/struct/service/dao/mapper/S
 _nladmin-system/src/main/java/org/nl/wms/stor_manage/struct/service/IStIvtStructattrService.java,b/1/b10dff3efd70a39f23a25125ca4669d404c03bbb
 �
 knladmin-system/src/main/java/org/nl/wms/stor_manage/struct/service/dao/mapper/xml/StIvtStructattrMapper.xml,d/3/d3143bfeb3b1a633f41056e1c3d660d3ac2e1b14
-u
-Enladmin-system/src/main/java/org/nl/config/mybatis/CodeGenerator.java,d/a/da94e2f9402ad75ef272f2e95148c573aee9a1ff
 �
 Ynladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dao/SchBaseTask.java,4/a/4a2188ff934d5838c3361cc66d54b717f4ae8b43
 p
@@ -246,4 +240,84 @@ bnladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/controller/SchBase
 �
 bnladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/StackingTaskHandler.java,c/a/caa59130099a147acf733a484dae55badb122e24
 �
-`nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/TaskStatusHandler.java,f/4/f4d6da57d25a0f0b8fd7caeadffca82408ea455b
\ No newline at end of file
+`nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/TaskStatusHandler.java,f/4/f4d6da57d25a0f0b8fd7caeadffca82408ea455b
+�
+anladmin-system/src/main/java/org/nl/wms/base_manage/material/controller/BmMaterialController.java,8/9/89eeb13258719f34694cb541337f127c3bcaeda1
+�
+[nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_dtl/dto/AlmDtlQuery.java,f/5/f577be680457cd515c39a9bdb42962876f3a797e
+�
+_nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_dtl/IAlmEarlyDtlService.java,c/f/cfb3f3d43fb51cabdf88475ac21467464663d4d2
+�
+[nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_dtl/dao/AlmEarlyDtl.java,a/e/ae7de5382f386b31850c7bebbaafd2ee7d982bdb
+�
+[nladmin-system/src/main/java/org/nl/wms/base_manage/material/service/dto/MaterialQuery.java,4/0/400fbf00a1743bc1972994d7dffce150f50044f7
+�
+pnladmin-system/src/main/java/org/nl/wms/base_manage/bsrealstorattr/controller/StIvtBsrealstorattrController.java,d/0/d0db99e1b09f3f2138d67b32b09a790fab389d52
+�
+knladmin-system/src/main/java/org/nl/wms/base_manage/bsrealstorattr/service/IStIvtBsrealstorattrService.java,b/6/b6652cb9485ab5c616512c5b1596c8938231ce4d
+�
+snladmin-system/src/main/java/org/nl/wms/base_manage/bsrealstorattr/service/impl/StIvtBsrealstorattrServiceImpl.java,4/6/46f585b55f9b2b80abd40f64aae4d929de754b07
+�
+tnladmin-system/src/main/java/org/nl/wms/base_manage/bsrealstorattr/service/dao/mapper/StIvtBsrealstorattrMapper.java,8/d/8dab5749445e6bd915d23a28eb8e4a050c0ee04b
+�
+wnladmin-system/src/main/java/org/nl/wms/base_manage/bsrealstorattr/service/dao/mapper/xml/StIvtBsrealstorattrMapper.xml,4/d/4d3e1f8ec363f936f590908e997cec63d4e3bd17
+�
+nnladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/execution/impl/ActRuExecutionServiceImpl.java,9/6/96baf0e9c082471a9e3e86559513272d2680fb09
+�
+[nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_msg/dto/AlmMsgQuery.java,8/c/8c7ec5d7459e7ed0dc10a7f4f76f2a2d40f8240d
+�
+cnladmin-system/src/main/java/org/nl/wms/flow_manage/flow/controller/model/ActDeModelController.java,f/6/f6b31b91b229f78f8ac36ece953db50bf6d81854
+�
+[nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_inv/dto/AlmInvQuery.java,a/c/ac795ed3f5d9af374a251274b3fb217c757ed16f
+�
+Wnladmin-system/src/main/java/org/nl/wms/stor_manage/io/service/dto/StorInvOutQuery.java,9/f/9fe2b6a548ba1008141ed40460ec4d82395db0a4
+�
+dnladmin-system/src/main/java/org/nl/wms/stor_manage/io/service/out/iostor/dao/StIvtIostorinvOut.java,e/d/ed4f61ccea3d38d63cf8de22ea788a557b8715b9
+�
+fnladmin-system/src/main/java/org/nl/wms/stor_manage/io/controller/out/StIvtIostorinvOutController.java,8/9/893a4d2aa05eceb25d834bf47e23e48568d02466
+�
+bnladmin-system/src/main/java/org/nl/wms/decision_manage/handler/impl/base/AlleyAveRuleHandler.java,1/7/17f3df7bf2246754fbd6d226ec564d29c55c7f66
+
+Onladmin-system/src/main/java/org/nl/wms/decision_manage/handler/Decisioner.java,a/3/a361deae2fc9bf3e2f6edd94a357948051baf7c6
+�
+bnladmin-system/src/main/java/org/nl/wms/md_manage/group_dick/controller/MdGruopDickController.java,2/b/2bf79ab59317d0d6b177fe4f01b5d69517e7c0bd
+�
+_nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_inv/IAlmEarlyInvService.java,f/3/f3f3536e2922d86604423471c2a52e7dded2361d
+�
+gnladmin-system/src/main/java/org/nl/wms/early_manage/service/early_inv/impl/AlmEarlyInvServiceImpl.java,d/3/d3dd85054b9911b6e121d28c55285b1ce5fa5f42
+�
+[nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/entity/ExecutionDto.java,2/4/242d9c8eb28dd21d1402453ba355f6ec40fdc788
+z
+Jnladmin-system/src/main/java/org/nl/common/publish/event/PublishEvent.java,8/a/8abfe091a902bf08c896a3faf689f781e7f33073
+�
+[nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_inv/dao/AlmEarlyInv.java,a/2/a2dc43bb714a304539d1b763f248ab450efbc0c4
+�
+Unladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/StructEvent.java,e/1/e1d33ffe0ba3ba46083458031b7c33e86c52d311
+x
+Hnladmin-system/src/main/java/org/nl/common/publish/AbstraceListener.java,b/3/b3bfec6326ccb8d8ae531fa8ec18b603c601229a
+�
+pnladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/engine/behavior/FlowNodeActivityBehavior.java,0/6/066ec6b83ae42a40454c31c59c5d269ee1dc3d65
+�
+vnladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/vehicleMater/service/impl/MdPbVehicleMaterServiceImpl.java,c/0/c0b659d2615c5215dbc794369f9caa35a62a208f
+�
+nnladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/vehicleMater/service/IMdPbVehicleMaterService.java,7/c/7cc3508f6ed0218b667780c6253629cad56fae40
+�
+wnladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/vehicleMater/service/dao/mapper/MdPbVehicleMaterMapper.java,f/1/f1f9af132b1fbfcbaa203f0c2ef78f302672c13e
+�
+unladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/engine/behavior/impl/EndEventActivityBehavior.java,4/6/468b8890e22da422beef66f1ceb2f42ad599595a
+�
+^nladmin-system/src/main/java/org/nl/wms/stor_manage/monitor/listener/FlowEndEventListener.java,7/a/7adab1dfdd514fffb1b5bd7e8185ce2199e90baf
+�
+Snladmin-system/src/main/java/org/nl/wms/flow_manage/monitor/event/FlowEndEvent.java,3/f/3fcd5ea3f30a701761063bc6a74a6e4184ce8aaf
+�
+dnladmin-system/src/main/java/org/nl/wms/early_manage/controller/early_msg/AlmEarlyMsgController.java,b/b/bbc6aea0ca4c5586df592d4f6881443398ec92d2
+�
+knladmin-system/src/main/java/org/nl/wms/early_manage/service/early_msg/dao/mapper/xml/AlmEarlyMsgMapper.xml,a/0/a085d8991a3b8d868dc65e6b249925c758570ca8
+�
+Rnladmin-system/src/main/java/org/nl/wms/early_manage/service/event/EarlyEvent.java,a/8/a8743481ee60617190189fadcfc1485c8a485e83
+y
+Inladmin-system/src/main/java/org/nl/config/mybatis/MybatisPlusConfig.java,9/0/907e26f855afcf912a10f1d2879ec6b2523a6ef2
+�
+gnladmin-system/src/main/java/org/nl/wms/early_manage/service/early_msg/impl/AlmEarlyMsgServiceImpl.java,4/c/4c0760c22498b67051d98696e64a0debbe4c97da
+�
+snladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/vehicleMater/controller/MdPbVehicleMaterController.java,f/e/fe3bd455dd5beee3dffeaf38da059cdedffdfc25
\ No newline at end of file
diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/controller/early_deferral/AlmEarlyDeferralController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/controller/early_deferral/AlmEarlyDeferralController.java
new file mode 100644
index 00000000..802ab500
--- /dev/null
+++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/controller/early_deferral/AlmEarlyDeferralController.java
@@ -0,0 +1,116 @@
+package org.nl.wms.early_manage.controller.early_deferral;
+
+
+import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import org.nl.common.TableDataInfo;
+import org.nl.common.domain.entity.PageQuery;
+import org.nl.common.utils.IdUtil;
+import org.nl.common.utils.SecurityUtils;
+import org.nl.wms.base_manage.material.service.IMdMeMaterialbaseService;
+import org.nl.wms.base_manage.material.service.dao.MdMeMaterialbase;
+import org.nl.wms.early_manage.service.early_deferral.IAlmEarlyDeferralDetailService;
+import org.nl.wms.early_manage.service.early_deferral.IAlmEarlyDeferralService;
+import org.nl.wms.early_manage.service.early_deferral.dao.AlmEarlyDeferral;
+import org.nl.wms.early_manage.service.early_deferral.dao.AlmEarlyDeferralDetail;
+import org.nl.wms.early_manage.service.early_deferral.dto.AlmDeferralQuery;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * <p>
+ * 前端控制器
+ * </p>
+ *
+ * @author generator
+ * @since 2024-05-31
+ */
+@RestController
+@RequestMapping("/api/almEarlyDeferral")
+public class AlmEarlyDeferralController {
+
+    @Autowired
+    private IAlmEarlyDeferralService almEarlyDeferralService;
+    @Autowired
+    private IAlmEarlyDeferralDetailService almEarlyDeferralDetailService;
+    @Autowired
+    private IMdMeMaterialbaseService materialbaseService;
+
+    @GetMapping
+    public ResponseEntity<Object> getAll(AlmDeferralQuery query, PageQuery page) {
+        return new ResponseEntity<>(TableDataInfo.build(almEarlyDeferralService.page(page.build(), query.build())), HttpStatus.OK);
+    }
+
+    @GetMapping("/dtl/{id}")
+    public ResponseEntity<Object> getDtl(@PathVariable String id) {
+        List<AlmEarlyDeferralDetail> list = almEarlyDeferralDetailService.list(new LambdaQueryWrapper<AlmEarlyDeferralDetail>().eq(AlmEarlyDeferralDetail::getDeferral_id, id));
+        JSONArray array = new JSONArray();
+        for (AlmEarlyDeferralDetail detail : list) {
+            JSONObject jsonObject = new JSONObject();
+            jsonObject.put("deferral_id", detail.getDeferral_id());
+            jsonObject.put("material_id", detail.getMaterial_id());
+            MdMeMaterialbase materialbase = materialbaseService.getById(detail.getMaterial_id());
+            jsonObject.put("material_code", materialbase.getMaterial_code());
+            jsonObject.put("material_name", materialbase.getMaterial_name());
+            jsonObject.put("material_spec", materialbase.getMaterial_spec());
+            jsonObject.put("material_model", materialbase.getMaterial_model());
+            array.add(jsonObject);
+        }
+        return new ResponseEntity<>(array, HttpStatus.OK);
+    }
+
+    @PostMapping("/saveDtl")
+    public ResponseEntity<Object> saveDtl(@Validated @RequestBody JSONObject dto) {
+        String id = dto.getString("id");
+        LambdaUpdateWrapper<AlmEarlyDeferralDetail> luw = new LambdaUpdateWrapper<>();
+        luw.eq(AlmEarlyDeferralDetail::getDetail_id, id);
+        almEarlyDeferralDetailService.remove(luw);
+        JSONArray jsonArray = dto.getJSONArray("tableData");
+        for (int i = 0; i < jsonArray.size(); i++) {
+            JSONObject jsonObject = jsonArray.getJSONObject(i);
+            String material_id = jsonObject.getString("material_id");
+            AlmEarlyDeferralDetail almEarlyDeferralDetail = new AlmEarlyDeferralDetail();
+            almEarlyDeferralDetail.setDetail_id(IdUtil.getStringId());
+            almEarlyDeferralDetail.setDeferral_id(id);
+            almEarlyDeferralDetail.setMaterial_id(material_id);
+            almEarlyDeferralDetailService.save(almEarlyDeferralDetail);
+        }
+        return new ResponseEntity<>(HttpStatus.CREATED);
+    }
+
+    @DeleteMapping("/delete")
+    public ResponseEntity<Object> delete(@RequestBody String[] ids) {
+        if (ids.length > 0) {
+            almEarlyDeferralService.removeByIds(Arrays.asList(ids));
+        }
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
+
+    @PostMapping
+    public ResponseEntity<Object> create(@Validated @RequestBody JSONObject dto) {
+        AlmEarlyDeferral almEarlyDeferral = dto.toJavaObject(AlmEarlyDeferral.class);
+        almEarlyDeferral.setCreate_name(SecurityUtils.getCurrentNickName());
+        almEarlyDeferral.setId(IdUtil.getStringId());
+        almEarlyDeferral.setCreate_time(DateUtil.now());
+        almEarlyDeferralService.save(almEarlyDeferral);
+        return new ResponseEntity<>(HttpStatus.CREATED);
+    }
+
+    @PostMapping("/update")
+    public ResponseEntity<Object> update(@Validated @RequestBody JSONObject dto) {
+        AlmEarlyDeferral almEarlyDeferral = dto.toJavaObject(AlmEarlyDeferral.class);
+        almEarlyDeferral.setCreate_time(DateUtil.now());
+        almEarlyDeferralService.updateById(almEarlyDeferral);
+        return new ResponseEntity<>(HttpStatus.CREATED);
+    }
+}
+
diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/controller/early_deferral/AlmEarlyDeferralDetailController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/controller/early_deferral/AlmEarlyDeferralDetailController.java
new file mode 100644
index 00000000..84cf554c
--- /dev/null
+++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/controller/early_deferral/AlmEarlyDeferralDetailController.java
@@ -0,0 +1,22 @@
+package org.nl.wms.early_manage.controller.early_deferral;
+
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author generator
+ * @since 2024-05-31
+ */
+@RestController
+@RequestMapping("/api/almEarlyDeferralDetail")
+public class AlmEarlyDeferralDetailController {
+
+}
+
diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/notification/EmailNotification.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/notification/EmailNotification.java
new file mode 100644
index 00000000..d2809656
--- /dev/null
+++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/notification/EmailNotification.java
@@ -0,0 +1,17 @@
+package org.nl.wms.early_manage.notification;
+
+/**
+ * @Description TODO
+ * @Author Gengby
+ * @Date 2024/5/31
+ */
+public class EmailNotification extends Notification {
+
+    public EmailNotification() {
+    }
+
+    @Override
+    public void send(String message) {
+        System.out.println("发送邮件内容：" + message);
+    }
+}
\ No newline at end of file
diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/notification/Notification.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/notification/Notification.java
new file mode 100644
index 00000000..713c6792
--- /dev/null
+++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/notification/Notification.java
@@ -0,0 +1,11 @@
+package org.nl.wms.early_manage.notification;
+
+/**
+ * @Description TODO
+ * @Author Gengby
+ * @Date 2024/5/31
+ */
+public abstract class Notification {
+
+    public abstract void send(String message);
+}
\ No newline at end of file
diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/notification/NotificationFactory.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/notification/NotificationFactory.java
new file mode 100644
index 00000000..7797ae85
--- /dev/null
+++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/notification/NotificationFactory.java
@@ -0,0 +1,19 @@
+package org.nl.wms.early_manage.notification;
+
+/**
+ * @Description TODO
+ * @Author Gengby
+ * @Date 2024/5/31
+ */
+public class NotificationFactory {
+    public static Notification getNotification(String noticeType) {
+        switch (noticeType) {
+            case "1":
+                return new EmailNotification();
+            case "2":
+                return new WeChatNotification();
+            default:
+                throw new IllegalArgumentException("未知的通知类型: " + noticeType);
+        }
+    }
+}
\ No newline at end of file
diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/notification/WeChatNotification.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/notification/WeChatNotification.java
new file mode 100644
index 00000000..2c144d87
--- /dev/null
+++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/notification/WeChatNotification.java
@@ -0,0 +1,18 @@
+package org.nl.wms.early_manage.notification;
+
+/**
+ * @Description TODO
+ * @Author Gengby
+ * @Date 2024/5/31
+ */
+public class WeChatNotification extends Notification {
+
+
+    public WeChatNotification() {
+    }
+
+    @Override
+    public void send(String message) {
+        System.out.println("发送微信内容：" + message);
+    }
+}
\ No newline at end of file
diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_deferral/IAlmEarlyDeferralDetailService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_deferral/IAlmEarlyDeferralDetailService.java
new file mode 100644
index 00000000..e3d88092
--- /dev/null
+++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_deferral/IAlmEarlyDeferralDetailService.java
@@ -0,0 +1,16 @@
+package org.nl.wms.early_manage.service.early_deferral;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.nl.wms.early_manage.service.early_deferral.dao.AlmEarlyDeferralDetail;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author generator
+ * @since 2024-05-31
+ */
+public interface IAlmEarlyDeferralDetailService extends IService<AlmEarlyDeferralDetail> {
+
+}
diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_deferral/IAlmEarlyDeferralService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_deferral/IAlmEarlyDeferralService.java
new file mode 100644
index 00000000..67b24070
--- /dev/null
+++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_deferral/IAlmEarlyDeferralService.java
@@ -0,0 +1,17 @@
+package org.nl.wms.early_manage.service.early_deferral;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.nl.wms.early_manage.service.early_deferral.dao.AlmEarlyDeferral;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author generator
+ * @since 2024-05-31
+ */
+public interface IAlmEarlyDeferralService extends IService<AlmEarlyDeferral> {
+
+}
diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_deferral/dao/AlmEarlyDeferral.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_deferral/dao/AlmEarlyDeferral.java
new file mode 100644
index 00000000..39821b1d
--- /dev/null
+++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_deferral/dao/AlmEarlyDeferral.java
@@ -0,0 +1,44 @@
+package org.nl.wms.early_manage.service.early_deferral.dao;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author generator
+ * @since 2024-05-31
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("alm_early_deferral")
+public class AlmEarlyDeferral implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private String id;
+
+    private String alm_name;
+
+    private String stor_code;
+
+    private Integer stay_days;
+
+    private String notice_type;
+
+    private String ext_json;
+
+    private Boolean is_used;
+
+    private String remark;
+
+    private String create_name;
+
+    private String create_time;
+}
diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_deferral/dao/AlmEarlyDeferralDetail.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_deferral/dao/AlmEarlyDeferralDetail.java
new file mode 100644
index 00000000..0ca2d594
--- /dev/null
+++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_deferral/dao/AlmEarlyDeferralDetail.java
@@ -0,0 +1,29 @@
+package org.nl.wms.early_manage.service.early_deferral.dao;
+
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author generator
+ * @since 2024-05-31
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("alm_early_deferral_detail")
+public class AlmEarlyDeferralDetail implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private String detail_id;
+
+    private String deferral_id;
+
+    private String material_id;
+}
diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_deferral/dao/mapper/AlmEarlyDeferralDetailMapper.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_deferral/dao/mapper/AlmEarlyDeferralDetailMapper.java
new file mode 100644
index 00000000..2e85b254
--- /dev/null
+++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_deferral/dao/mapper/AlmEarlyDeferralDetailMapper.java
@@ -0,0 +1,16 @@
+package org.nl.wms.early_manage.service.early_deferral.dao.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.nl.wms.early_manage.service.early_deferral.dao.AlmEarlyDeferralDetail;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author generator
+ * @since 2024-05-31
+ */
+public interface AlmEarlyDeferralDetailMapper extends BaseMapper<AlmEarlyDeferralDetail> {
+
+}
diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_deferral/dao/mapper/AlmEarlyDeferralMapper.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_deferral/dao/mapper/AlmEarlyDeferralMapper.java
new file mode 100644
index 00000000..6421f8e0
--- /dev/null
+++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_deferral/dao/mapper/AlmEarlyDeferralMapper.java
@@ -0,0 +1,16 @@
+package org.nl.wms.early_manage.service.early_deferral.dao.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.nl.wms.early_manage.service.early_deferral.dao.AlmEarlyDeferral;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author generator
+ * @since 2024-05-31
+ */
+public interface AlmEarlyDeferralMapper extends BaseMapper<AlmEarlyDeferral> {
+
+}
diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_deferral/dao/mapper/xml/AlmEarlyDeferralDetailMapper.xml b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_deferral/dao/mapper/xml/AlmEarlyDeferralDetailMapper.xml
new file mode 100644
index 00000000..460d4603
--- /dev/null
+++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_deferral/dao/mapper/xml/AlmEarlyDeferralDetailMapper.xml
@@ -0,0 +1,5 @@
+<?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="org.nl.wms.early_manage.service.early_deferral.dao.mapper.AlmEarlyDeferralDetailMapper">
+
+</mapper>
diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_deferral/dao/mapper/xml/AlmEarlyDeferralMapper.xml b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_deferral/dao/mapper/xml/AlmEarlyDeferralMapper.xml
new file mode 100644
index 00000000..cfa49e34
--- /dev/null
+++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_deferral/dao/mapper/xml/AlmEarlyDeferralMapper.xml
@@ -0,0 +1,5 @@
+<?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="org.nl.wms.early_manage.service.early_deferral.dao.mapper.AlmEarlyDeferralMapper">
+
+</mapper>
diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_deferral/dto/AlmDeferralQuery.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_deferral/dto/AlmDeferralQuery.java
new file mode 100644
index 00000000..3f58f078
--- /dev/null
+++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_deferral/dto/AlmDeferralQuery.java
@@ -0,0 +1,26 @@
+package org.nl.wms.early_manage.service.early_deferral.dto;
+
+import lombok.Data;
+import org.nl.common.domain.entity.BaseQuery;
+import org.nl.common.domain.entity.QParam;
+import org.nl.common.enums.QueryTEnum;
+import org.nl.wms.early_manage.service.early_deferral.dao.AlmEarlyDeferral;
+
+/*
+ * @author ZZQ
+ * @Date 2023/5/4 19:49
+ */
+@Data
+public class AlmDeferralQuery extends BaseQuery<AlmEarlyDeferral> {
+
+    private String search;
+    private String stor_code;
+
+    @Override
+    public void paramMapping() {
+        super.doP.put("search", QParam.builder().k(new String[]{"alm_name"}).type(QueryTEnum.LK).build());
+        super.doP.put("stor_code", QParam.builder().k(new String[]{"stor_code"}).type(QueryTEnum.EQ).build());
+    }
+
+
+}
diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_deferral/impl/AlmEarlyDeferralDetailServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_deferral/impl/AlmEarlyDeferralDetailServiceImpl.java
new file mode 100644
index 00000000..63cca67f
--- /dev/null
+++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_deferral/impl/AlmEarlyDeferralDetailServiceImpl.java
@@ -0,0 +1,20 @@
+package org.nl.wms.early_manage.service.early_deferral.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.nl.wms.early_manage.service.early_deferral.IAlmEarlyDeferralDetailService;
+import org.nl.wms.early_manage.service.early_deferral.dao.AlmEarlyDeferralDetail;
+import org.nl.wms.early_manage.service.early_deferral.dao.mapper.AlmEarlyDeferralDetailMapper;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author generator
+ * @since 2024-05-31
+ */
+@Service
+public class AlmEarlyDeferralDetailServiceImpl extends ServiceImpl<AlmEarlyDeferralDetailMapper, AlmEarlyDeferralDetail> implements IAlmEarlyDeferralDetailService {
+
+}
diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_deferral/impl/AlmEarlyDeferralServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_deferral/impl/AlmEarlyDeferralServiceImpl.java
new file mode 100644
index 00000000..29dafedf
--- /dev/null
+++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_deferral/impl/AlmEarlyDeferralServiceImpl.java
@@ -0,0 +1,21 @@
+package org.nl.wms.early_manage.service.early_deferral.impl;
+
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.nl.wms.early_manage.service.early_deferral.IAlmEarlyDeferralService;
+import org.nl.wms.early_manage.service.early_deferral.dao.AlmEarlyDeferral;
+import org.nl.wms.early_manage.service.early_deferral.dao.mapper.AlmEarlyDeferralMapper;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author generator
+ * @since 2024-05-31
+ */
+@Service
+public class AlmEarlyDeferralServiceImpl extends ServiceImpl<AlmEarlyDeferralMapper, AlmEarlyDeferral> implements IAlmEarlyDeferralService {
+
+}
diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/listen/EarlyEventListener.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/listen/EarlyEventListener.java
index 40a23d18..d92fc733 100644
--- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/listen/EarlyEventListener.java
+++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/listen/EarlyEventListener.java
@@ -6,6 +6,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.nl.common.publish.AbstraceListener;
 import org.nl.common.utils.IdUtil;
 import org.nl.wms.base_manage.vehicle.vehicleMater.service.IMdPbVehicleMaterService;
+import org.nl.wms.early_manage.notification.NotificationFactory;
 import org.nl.wms.early_manage.service.early_dtl.IAlmEarlyDtlService;
 import org.nl.wms.early_manage.service.early_dtl.dao.AlmEarlyDtl;
 import org.nl.wms.early_manage.service.early_inv.IAlmEarlyInvService;
@@ -62,7 +63,7 @@ public class EarlyEventListener extends AbstraceListener<EarlyEvent> {
                     almEarlyMsg.setStor_code(earlyInv.getStor_code());
                     almEarlyMsgService.save(almEarlyMsg);
                     //根据notice_type下发通知
-                    System.out.println("下发通知");
+                    NotificationFactory.getNotification(notice_type).send("");
                 }
             }
         }
diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/tasks/AutoDeferralNotice.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/tasks/AutoDeferralNotice.java
new file mode 100644
index 00000000..14ecd90e
--- /dev/null
+++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/tasks/AutoDeferralNotice.java
@@ -0,0 +1,74 @@
+package org.nl.wms.early_manage.tasks;
+
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.nl.common.utils.IdUtil;
+import org.nl.wms.base_manage.vehicle.vehicleMater.service.IMdPbVehicleMaterService;
+import org.nl.wms.base_manage.vehicle.vehicleMater.service.dao.MdPbVehicleMater;
+import org.nl.wms.early_manage.notification.NotificationFactory;
+import org.nl.wms.early_manage.service.early_deferral.IAlmEarlyDeferralDetailService;
+import org.nl.wms.early_manage.service.early_deferral.IAlmEarlyDeferralService;
+import org.nl.wms.early_manage.service.early_deferral.dao.AlmEarlyDeferral;
+import org.nl.wms.early_manage.service.early_deferral.dao.AlmEarlyDeferralDetail;
+import org.nl.wms.early_manage.service.early_msg.IAlmEarlyMsgService;
+import org.nl.wms.early_manage.service.early_msg.dao.AlmEarlyMsg;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @Description TODO
+ * @Author Gengby
+ * @Date 2024/5/31
+ */
+@Component
+public class AutoDeferralNotice {
+
+    @Autowired
+    private IAlmEarlyDeferralService almEarlyDeferralService;
+    @Autowired
+    private IAlmEarlyDeferralDetailService almEarlyDeferralDetailService;
+    @Autowired
+    private IMdPbVehicleMaterService mdPbVehicleMaterService;
+    @Autowired
+    private IAlmEarlyMsgService almEarlyMsgService;
+
+    public void run() {
+        LambdaQueryWrapper<AlmEarlyDeferral> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.eq(AlmEarlyDeferral::getIs_used, "1");
+        List<AlmEarlyDeferral> list = almEarlyDeferralService.list(lambdaQueryWrapper);
+        for (AlmEarlyDeferral almEarlyDeferral : list) {
+            LambdaQueryWrapper<AlmEarlyDeferralDetail> lqw = new LambdaQueryWrapper<>();
+            lqw.eq(AlmEarlyDeferralDetail::getDeferral_id, almEarlyDeferral.getId());
+            List<AlmEarlyDeferralDetail> deferralDetails = almEarlyDeferralDetailService.list(lqw);
+            List<String> materialIds = deferralDetails.stream()
+                    .map(detail -> detail.getMaterial_id())
+                    .collect(Collectors.toList());
+            LambdaQueryWrapper<MdPbVehicleMater> mdPbVehicleMaterLambdaQueryWrapper = new LambdaQueryWrapper<>();
+            mdPbVehicleMaterLambdaQueryWrapper.in(MdPbVehicleMater::getMaterial_id, materialIds);
+            List<MdPbVehicleMater> mdPbVehicleMaters = mdPbVehicleMaterService.list(mdPbVehicleMaterLambdaQueryWrapper);
+            List<MdPbVehicleMater> filteredMdPbVehicleMaters = mdPbVehicleMaters.stream()
+                    .filter(mater -> {
+                        long daysBetween = DateUtil.betweenDay(DateUtil.parse(mater.getUpdate_time()), DateUtil.parse(DateUtil.now()), true);
+                        return daysBetween > almEarlyDeferral.getStay_days();
+                    })
+                    .collect(Collectors.toList());
+            for (MdPbVehicleMater filteredMdPbVehicleMater : filteredMdPbVehicleMaters) {
+                AlmEarlyMsg almEarlyMsg = new AlmEarlyMsg();
+                almEarlyMsg.setId(IdUtil.getStringId());
+                almEarlyMsg.setEarly_type("2");
+                almEarlyMsg.setStor_code(almEarlyDeferral.getStor_code());
+                almEarlyMsg.setMaterial_id(filteredMdPbVehicleMater.getMaterial_id());
+                almEarlyMsg.setCreate_time(DateUtil.now());
+                almEarlyMsg.setQty(filteredMdPbVehicleMater.getQty().intValue());
+                almEarlyMsg.setCreate_time(DateUtil.now());
+                almEarlyMsg.setVehicle_code(filteredMdPbVehicleMater.getVehicle_code());
+                almEarlyMsg.setPcsn(filteredMdPbVehicleMater.getPcsn());
+                almEarlyMsgService.save(almEarlyMsg);
+                NotificationFactory.getNotification(almEarlyDeferral.getNotice_type()).send("");
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/wms_pro/qd/src/views/wms/early_manage/deferral_early/EditDialog.vue b/wms_pro/qd/src/views/wms/early_manage/deferral_early/EditDialog.vue
new file mode 100644
index 00000000..b3318560
--- /dev/null
+++ b/wms_pro/qd/src/views/wms/early_manage/deferral_early/EditDialog.vue
@@ -0,0 +1,199 @@
+<template>
+  <el-dialog
+    :visible.sync="dialogVisible"
+    append-to-body
+    fullscreen
+    title="安全库存方案"
+    @close="close"
+    @open="open"
+  >
+    <el-card class="box-card" shadow="never">
+      <el-form ref="form" :inline="true" :model="form" :rules="rules" disabled label-width="180px" size="mini">
+        <el-form-item label="方案名称">
+          <el-input v-model="form.alm_name" style="width: 200px;"/>
+        </el-form-item>
+        <el-form-item label="仓库编码">
+          <el-input v-model="form.stor_code" style="width: 200px;"/>
+        </el-form-item>
+        <el-form-item label="呆料天数">
+          <el-input v-model="form.stay_days" style="width: 200px;"/>
+        </el-form-item>
+        <el-form-item label="报警通知类型">
+          <el-input v-model="form.notice_type" style="width: 200px;"/>
+        </el-form-item>
+        <el-form-item label="描述">
+          <el-input type="textarea" v-model="form.remark" style="width: 200px;"/>
+        </el-form-item>
+      </el-form>
+    </el-card>
+    <div class="crud-opts2" style="margin-top: 30px;margin-bottom: 15px">
+      <span class="role-span">物料列表</span>
+      <span class="crud-opts-right2">
+        <!--左侧插槽-->
+        <slot name="left"/>
+        <el-button
+          slot="left"
+          class="filter-item"
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="queryDtl()"
+        >
+          添加物料
+        </el-button>
+      </span>
+
+    </div>
+    <!--表格渲染-->
+    <el-table
+      ref="table"
+      :data="form.tableData"
+      :header-cell-style="{background:'#f5f7fa',color:'#606266'}"
+      :highlight-current-row="true"
+      border
+      max-height="300"
+      style="width: 100%;"
+    >
+      <el-table-column v-if="false" label="物料ID" prop="material_id"/>
+      <el-table-column label="物料编码" prop="material_code"/>
+      <el-table-column label="物料名称" prop="material_name"/>
+      <el-table-column label="物料规格" prop="material_spec"/>
+      <el-table-column label="物料型号" prop="material_model"/>
+      <el-table-column align="center" label="操作" width="160" fixed="right">
+        <template scope="scope">
+          <el-button
+            type="danger"
+            class="filter-item"
+            size="mini"
+            icon="el-icon-delete"
+            @click.native.prevent="deleteRow(scope.$index, form.tableData)"
+          />
+        </template>
+      </el-table-column>
+    </el-table>
+    <span slot="footer" class="dialog-footer">
+      <el-button type="primary" @click="dialogVisible = false">关  闭</el-button>
+      <el-button type="primary" @click="submit">保  存</el-button>
+    </span>
+    <MaterialDtl :dialog-show.sync="dtlShow" ref="dtlRef" @tableChanged="tableChanged"/>
+  </el-dialog>
+</template>
+
+<script>
+import {crud} from '@crud/crud'
+import MaterialDtl from './MaterialDtl'
+import deferral_early from './deferral_early'
+
+export default {
+  name: 'EditDialog',
+  components: {MaterialDtl},
+  dicts: ['PDM_BI_SHIFTTYPE', 'MPS_BD_ORDERSTATUS', 'PDM_BI_ORDERTYPE', 'IS_OR_NOT'],
+  mixins: [crud()],
+  props: {
+    dialogShow: {
+      type: Boolean,
+      default: false
+    },
+    bussConfig: {
+      type: Object
+    },
+    openParam: {
+      type: Object
+    }
+  },
+  data() {
+    return {
+      dialogVisible: false,
+      form: {
+        id: null,
+        alm_name: null,
+        stor_code: null,
+        stay_days: null,
+        notice_type: null,
+        ext_json: null,
+        is_used: null,
+        remark: null,
+        create_name: null,
+        create_time: null,
+        tableData: [],
+      },
+      dtlShow: false,
+      rules: {}
+    }
+  },
+  watch: {
+    dialogShow: {
+      handler(newValue) {
+        this.dialogVisible = newValue
+      }
+    }
+  },
+  methods: {
+    setForm(row) {
+      deferral_early.getDtl(row.id).then(res => {
+        this.form.tableData = res
+      })
+      this.dialogVisible = true
+      this.form.id = row.id
+      this.form.alm_name = row.alm_name
+      this.form.stor_code = row.stor_code
+      this.form.safety_qty = row.safety_qty
+      this.form.safety_day = row.safety_day
+      this.form.expression = row.expression
+      this.form.notice_type = row.notice_type
+      this.form.ext_json = row.ext_json
+    },
+    open() {
+    },
+    close() {
+      this.$emit('editChanged')
+    },
+    submit() {
+      deferral_early.saveDtl(this.form).then(res => {
+        this.$emit('editChanged')
+        this.dialogVisible = false
+        this.crud.notify('保存成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
+      })
+    },
+    async queryDtl() {
+      this.$refs.dtlRef.setForm(this.form.tableData)
+      this.dtlShow = true
+    },
+    deleteRow(index, rows) {
+      rows.splice(index, 1)
+    },
+    tableChanged(rows) {
+      const uniqueKey = 'material_id';
+      const newDataMap = new Map(rows.map(row => [row[uniqueKey], row]));
+      if (this.form.tableData.length > 0) {
+        rows.forEach(row => {
+          if (!this.form.tableData.some(dataRow => dataRow[uniqueKey] === row[uniqueKey])) {
+            this.form.tableData.push(row);
+          }
+        });
+      } else {
+        this.form.tableData = rows.slice(); // 将 rows 中的数据复制到 tableData 中
+      }
+    }
+
+  }
+}
+</script>
+
+<style>
+.crud-opts2 {
+  padding: 0 0;
+  display: -webkit-flex;
+  display: flex;
+  align-items: center;
+}
+
+.crud-opts2 .crud-opts-right2 {
+  margin-left: auto;
+  padding: 4px 4px;
+}
+
+.input-with-select {
+  background-color: #fff;
+}
+</style>
diff --git a/wms_pro/qd/src/views/wms/early_manage/deferral_early/MaterialDtl.vue b/wms_pro/qd/src/views/wms/early_manage/deferral_early/MaterialDtl.vue
new file mode 100644
index 00000000..3a600d5c
--- /dev/null
+++ b/wms_pro/qd/src/views/wms/early_manage/deferral_early/MaterialDtl.vue
@@ -0,0 +1,165 @@
+<!--suppress ALL -->
+<template>
+  <el-dialog
+    title="物料信息"
+    append-to-body
+    :visible.sync="dialogVisible"
+    destroy-on-close
+    :show-close="false"
+    width="1000px"
+    @close="close"
+    @open="open"
+  >
+    <el-row>
+      <el-form
+        :inline="true"
+        class="demo-form-inline"
+        label-position="right"
+        label-width="80px"
+        label-suffix=":"
+      >
+        <el-form-item label="模糊查询">
+          <el-input
+            v-model="query.search"
+            clearable
+            style="width: 200px"
+            size="mini"
+            placeholder="输入物料编码或名称"
+            prefix-icon="el-icon-search"
+            class="filter-item"
+            @keyup.enter.native="crud.toQuery"
+          />
+        </el-form-item>
+        <rrOperation/>
+
+      </el-form>
+    </el-row>
+    <!--表格渲染-->
+    <el-table
+      ref="table"
+      v-loading="crud.loading"
+      :data="crud.data"
+      style="width: 100%;"
+      border
+      :header-cell-style="{background:'#f5f7fa',color:'#606266'}"
+      @select="select"
+      @selection-change="handleSelectionChange"
+    >
+      <el-table-column type="selection" width="55"/>
+      <el-table-column prop="material_code" label="物料编码" width="160"/>
+      <el-table-column prop="material_name" label="物料名称" width="180" show-overflow-tooltip/>
+      <el-table-column prop="material_spec" label="物料规格" width="140"/>
+      <el-table-column prop="material_model" label="物料型号"/>
+      <el-table-column prop="class_name" label="物料分类" width="140"/>
+      <el-table-column prop="unit_name" label="计量单位"/>
+      <el-table-column prop="net_weight" label="单重(g)"/>
+      <el-table-column prop="product_series_name" label="系列"/>
+    </el-table>
+    <!--分页组件-->
+    <pagination/>
+    <span slot="footer" class="dialog-footer">
+      <el-button slot="left" type="info" @click="dialogVisible = false">关闭</el-button>
+      <el-button slot="left" type="primary" @click="submit">保存</el-button>
+    </span>
+  </el-dialog>
+</template>
+
+<script>
+
+import CRUD, {header, presenter} from '@crud/crud'
+import rrOperation from '@crud/RR.operation'
+import pagination from '@crud/Pagination'
+
+export default {
+  name: 'AddDtl',
+  components: {rrOperation, pagination},
+  cruds() {
+    return CRUD({
+      title: '物料信息', idField: 'material_id', url: 'api/bmMaterial',
+      optShow: {
+        add: false,
+        edit: false,
+        del: false,
+        reset: true,
+        download: false
+      }
+    })
+  },
+  mixins: [presenter(), header()],
+  props: {
+    dialogShow: {
+      type: Boolean,
+      default: false
+    },
+    openParam: {
+      type: String
+    }
+  },
+  data() {
+    return {
+      dialogVisible: false,
+      opendtlParam: '',
+      rows: [],
+      cacheRows: []
+    }
+  },
+  watch: {
+    dialogShow: {
+      handler(newValue, oldValue) {
+        this.dialogVisible = newValue
+      }
+    },
+    openParam: {
+      handler(newValue, oldValue) {
+        this.opendtlParam = newValue
+      }
+    }
+  },
+  methods: {
+    [CRUD.HOOK.afterRefresh]() {
+      this.selectRows(this.cacheRows)
+    },
+    open() {
+      this.crud.toQuery()
+    },
+    close() {
+      this.crud.resetQuery(false)
+      this.$emit('update:dialogShow', false)
+    },
+    selectRows(rows) {
+      const materialIds = rows.map(item => item.material_id);
+      this.$nextTick(() => {
+        this.crud.data.forEach(row => {
+          if (materialIds.includes(row.material_id)) {
+            this.$refs.table.toggleRowSelection(row, true);
+          }
+        });
+      });
+      this.crud.resetQuery(false)
+    },
+    setForm(rows) {
+      this.cacheRows = rows
+      this.selectRows(rows)
+    },
+    submit() {
+      this.rows = this.$refs.table.selection
+      if (this.rows.length <= 0) {
+        this.$message('请先勾选物料信息')
+        return
+      }
+      console.log(this.cacheRows)
+      this.crud.resetQuery(false)
+      this.$emit('update:dialogShow', false)
+      this.$emit('tableChanged', this.rows)
+    },
+    select(selections) {
+      console.log("+++")
+      console.log(selections)
+
+    },
+    handleSelectionChange(selections) {
+      const unselectedRowsIds = this.cacheRows.flat().map(row => row.material_code).filter(material_code => !selections.map(row => row.material_code).includes(material_code));
+    }
+  }
+}
+</script>
diff --git a/wms_pro/qd/src/views/wms/early_manage/deferral_early/UploadDialog.vue b/wms_pro/qd/src/views/wms/early_manage/deferral_early/UploadDialog.vue
index eb9cfcde..dd858a6b 100644
--- a/wms_pro/qd/src/views/wms/early_manage/deferral_early/UploadDialog.vue
+++ b/wms_pro/qd/src/views/wms/early_manage/deferral_early/UploadDialog.vue
@@ -38,7 +38,7 @@
 </template>
 
 <script>
-import crudClassstandard from './formstruc'
+import crudClassstandard from './deferral_early'
 import CRUD, { crud } from '@crud/crud'
 import { download2 } from '@/api/data'
 import { downloadFile } from '@/utils'
diff --git a/wms_pro/qd/src/views/wms/early_manage/deferral_early/ViewDialog.vue b/wms_pro/qd/src/views/wms/early_manage/deferral_early/ViewDialog.vue
new file mode 100644
index 00000000..22984071
--- /dev/null
+++ b/wms_pro/qd/src/views/wms/early_manage/deferral_early/ViewDialog.vue
@@ -0,0 +1,147 @@
+<template>
+  <el-dialog
+    :visible.sync="dialogVisible"
+    append-to-body
+    fullscreen
+    title="安全库存方案"
+    @close="close"
+    @open="open"
+  >
+    <el-card class="box-card" shadow="never">
+      <el-form ref="form" :inline="true" :model="form" :rules="rules" disabled label-width="180px" size="mini">
+        <el-form-item label="方案名称">
+          <el-input v-model="form.alm_name" style="width: 200px;"/>
+        </el-form-item>
+        <el-form-item label="仓库编码">
+          <el-input v-model="form.stor_code" style="width: 200px;"/>
+        </el-form-item>
+        <el-form-item label="呆料天数">
+          <el-input v-model="form.stay_days" style="width: 200px;"/>
+        </el-form-item>
+        <el-form-item label="报警通知类型">
+          <el-input v-model="form.notice_type" style="width: 200px;"/>
+        </el-form-item>
+        <el-form-item label="描述">
+          <el-input type="textarea" v-model="form.remark" style="width: 200px;"/>
+        </el-form-item>
+      </el-form>
+    </el-card>
+    <div class="crud-opts2" style="margin-top: 30px;margin-bottom: 15px">
+      <span class="role-span">物料列表</span>
+      <span class="crud-opts-right2">
+        <!--左侧插槽-->
+        <slot name="left" />
+      </span>
+
+    </div>
+    <!--表格渲染-->
+    <el-table
+      ref="table"
+      :data="form.tableData"
+      :header-cell-style="{background:'#f5f7fa',color:'#606266'}"
+      :highlight-current-row="true"
+      border
+      max-height="300"
+      style="width: 100%;"
+    >
+      <el-table-column v-if="false" label="物料ID" prop="material_id"/>
+      <el-table-column label="物料编码" prop="material_code"/>
+      <el-table-column label="物料名称" prop="material_name"/>
+      <el-table-column label="物料规格" prop="material_spec"/>
+      <el-table-column label="物料型号" prop="material_model"/>
+    </el-table>
+    <span slot="footer" class="dialog-footer">
+      <el-button type="primary" @click="dialogVisible = false">关  闭</el-button>
+    </span>
+  </el-dialog>
+</template>
+
+<script>
+import { crud } from '@crud/crud'
+import deferral_early from './deferral_early'
+
+
+export default {
+  name: 'ViewDialog',
+  components: {},
+  dicts: ['PDM_BI_SHIFTTYPE', 'MPS_BD_ORDERSTATUS', 'PDM_BI_ORDERTYPE', 'IS_OR_NOT'],
+  mixins: [crud()],
+  props: {
+    dialogShow: {
+      type: Boolean,
+      default: false
+    },
+    bussConfig: {
+      type: Object
+    },
+    openParam: {
+      type: Object
+    }
+  },
+  data() {
+    return {
+      dialogVisible: false,
+      form: {
+        id: null,
+        alm_name: null,
+        stor_code: null,
+        stay_days: null,
+        notice_type: null,
+        ext_json: null,
+        is_used: null,
+        remark: null,
+        create_name: null,
+        create_time: null,
+        tableData: [],
+      },
+      rules: {}
+    }
+  },
+  watch: {
+    dialogShow: {
+      handler(newValue) {
+        this.dialogVisible = newValue
+      }
+    }
+  },
+  methods: {
+    setForm(row) {
+      deferral_early.getDtl(row.id).then(res => {
+        this.form.tableData = res
+      })
+      this.dialogVisible = true
+      this.form.id = row.id
+      this.form.alm_name = row.alm_name
+      this.form.stor_code = row.stor_code
+      this.form.safety_qty = row.safety_qty
+      this.form.safety_day = row.safety_day
+      this.form.expression = row.expression
+      this.form.notice_type = row.notice_type
+      this.form.ext_json = row.ext_json
+    },
+    open() {
+    },
+    close() {
+      this.$emit('AddChanged')
+    }
+  }
+}
+</script>
+
+<style>
+.crud-opts2 {
+  padding: 0 0;
+  display: -webkit-flex;
+  display: flex;
+  align-items: center;
+}
+
+.crud-opts2 .crud-opts-right2 {
+  margin-left: auto;
+  padding: 4px 4px;
+}
+
+.input-with-select {
+  background-color: #fff;
+}
+</style>
diff --git a/wms_pro/qd/src/views/wms/early_manage/deferral_early/deferral_early.js b/wms_pro/qd/src/views/wms/early_manage/deferral_early/deferral_early.js
new file mode 100644
index 00000000..f205943d
--- /dev/null
+++ b/wms_pro/qd/src/views/wms/early_manage/deferral_early/deferral_early.js
@@ -0,0 +1,42 @@
+import request from '@/utils/request'
+
+export function add(data) {
+  return request({
+    url: 'api/almEarlyDeferral',
+    method: 'post',
+    data
+  })
+}
+
+export function del(ids) {
+  return request({
+    url: 'api/almEarlyDeferral/delete',
+    method: 'get',
+    data: ids
+  })
+}
+
+export function edit(data) {
+  return request({
+    url: 'api/almEarlyDeferral/update',
+    method: 'post',
+    data
+  })
+}
+
+export function getDtl(id) {
+  return request({
+    url: 'api/almEarlyDeferral/dtl/' + id,
+    method: 'get',
+  })
+}
+
+export function saveDtl(data) {
+  return request({
+    url: 'api/almEarlyDeferral/saveDtl',
+    method: 'post',
+    data
+  })
+}
+
+export default { add, edit, del, getDtl, saveDtl}
diff --git a/wms_pro/qd/src/views/wms/early_manage/deferral_early/formstruc.js b/wms_pro/qd/src/views/wms/early_manage/deferral_early/formstruc.js
deleted file mode 100644
index 3f6d1330..00000000
--- a/wms_pro/qd/src/views/wms/early_manage/deferral_early/formstruc.js
+++ /dev/null
@@ -1,35 +0,0 @@
-import request from '@/utils/request'
-
-export function add(data) {
-  return request({
-    url: 'api/bmFormStruc',
-    method: 'post',
-    data
-  })
-}
-
-export function del(ids) {
-  return request({
-    url: 'api/bmFormStruc/delete',
-    method: 'get',
-    data: ids
-  })
-}
-
-export function edit(data) {
-  return request({
-    url: 'api/bmFormStruc/update',
-    method: 'post',
-    data
-  })
-}
-
-export function getTypes(params) {
-  return request({
-    url: 'api/bmFormStruc/getTypes',
-    method: 'get',
-    params
-  })
-}
-
-export default { add, edit, del, getTypes}
diff --git a/wms_pro/qd/src/views/wms/early_manage/deferral_early/index.vue b/wms_pro/qd/src/views/wms/early_manage/deferral_early/index.vue
index 9f2d1212..8412d8b0 100644
--- a/wms_pro/qd/src/views/wms/early_manage/deferral_early/index.vue
+++ b/wms_pro/qd/src/views/wms/early_manage/deferral_early/index.vue
@@ -11,9 +11,12 @@
           label-width="90px"
           label-suffix=":"
         >
-          <el-form-item label="表单类型">
+          <el-form-item label="方案名称">
+            <el-input v-model="query.search" style="width: 150px;"/>
+          </el-form-item>
+          <el-form-item label="仓库编码">
             <el-select
-              v-model="query.form_type"
+              v-model="query.stor_code"
               placeholder="请选择类型"
               clearable
               filterable
@@ -21,18 +24,29 @@
               class="filter-item"
               style="width: 185px;">
               <el-option
-                v-for="item in form_types"
-                :key="item.value"
-                :label="item.label"
-                :value="item.value">
+                v-for="item in storList"
+                :key="item.stor_id"
+                :label="item.stor_code"
+                :value="item.stor_code">
               </el-option>
             </el-select>
           </el-form-item>
-          <rrOperation :crud="crud" />
+          <rrOperation :crud="crud"/>
         </el-form>
       </div>
       <!--如果想在工具栏加入更多按钮，可以使用插槽方式， slot = 'left' or 'right'-->
       <crudOperation :permission="permission">
+        <el-button
+          slot="right"
+          class="filter-item"
+          :disabled="crud.selections.length !== 1"
+          icon="el-icon-s-data"
+          size="mini"
+          type="info"
+          @click="edit(crud.selections[0])"
+        >
+          修改明细
+        </el-button>
       </crudOperation>
       <!--表单组件-->
       <el-dialog
@@ -42,92 +56,65 @@
         :title="crud.status.title"
         width="600px"
       >
-        <el-form ref="form" :model="form"  size="mini" label-width="80px">
+        <el-form ref="form" :rules="rules" :model="form" size="mini" label-width="110px">
           <el-row>
-            <el-col :span="8">
-              <el-form-item label="表单类型" prop="class_code">
-                <el-input v-model="form.form_type" style="width: 120px;" />
+            <el-col :span="12">
+              <el-form-item label="方案名称" prop="alm_name">
+                <el-input v-model="form.alm_name" style="width: 150px;"/>
               </el-form-item>
             </el-col>
-            <el-col :span="8">
-              <el-form-item label="表单名称" prop="class_name">
-                <el-input v-model="form.form_name" style="width: 120px;" />
+            <el-col :span="12">
+              <el-form-item label="仓库编码" prop="stor_code">
+                <el-select v-model="form.stor_code" placeholder="请选择" style="width: 150px;">
+                  <el-option
+                    v-for="item in storList"
+                    :key="item.stor_id"
+                    :label="item.stor_code"
+                    :value="item.stor_code">
+                  </el-option>
+                </el-select>
               </el-form-item>
             </el-col>
           </el-row>
           <el-row>
-            <el-col >
-              <el-form-item label="表单描述" prop="class_name">
-                <el-input v-model="form.form_desc" style="width: 370px;" />
+            <el-col :span="12">
+              <el-form-item label="通知类型" prop="notice_type">
+                <el-radio-group v-model="form.notice_type" style="width: 150px">
+                  <el-radio label=1>站内信</el-radio>
+                  <el-radio label=2>微信</el-radio>
+                </el-radio-group>
               </el-form-item>
             </el-col>
-          </el-row>
-          <el-row>
-            <el-col >
-              <el-form-item label="是否含有子表" prop="class_name">
-                <el-radio-group v-model="form.has_child" style="width: 140px">
+            <el-col :span="12">
+              <el-form-item label="是否启用" prop="is_used">
+                <el-radio-group v-model="form.is_used" style="width: 150px">
                   <el-radio label=true>是</el-radio>
                   <el-radio label=false>否</el-radio>
                 </el-radio-group>
               </el-form-item>
             </el-col>
-            <el-col v-if="form.has_child">
-              <el-select
-                v-model="form.parent_id"
-                placeholder="子表id"
-                clearable
-              >
-                <el-option
-                  v-for="item in form_types"
-                  :key="item.id"
-                  :label="item.label"
-                  :value="item.value"
-                />
-              </el-select>
-            </el-col>
           </el-row>
           <el-row>
-            <el-col :span="8">
-              <el-form-item label="业务表id映射" prop="class_desc">
-                <el-input v-model="form.biz_id" style="width: 120px;" />
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="业务表编码映射" prop="class_desc">
-                <el-input v-model="form.biz_code" style="width: 120px;" />
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="业务表时间映射" prop="class_desc">
-                <el-input v-model="form.bus_data" style="width: 120px;" />
+            <el-col :span="12">
+              <el-form-item label="呆料天数" prop="stay_days">
+                <el-input v-model="form.stay_days" style="width: 150px;"/>
               </el-form-item>
             </el-col>
           </el-row>
           <el-row>
-            <el-col :span="8">
-              <el-form-item label="业务表状态映射" prop="class_desc">
-                <el-input v-model="form.biz_status" style="width: 120px;" />
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="物料id映射" prop="class_desc">
-                <el-input v-model="form.material_id" style="width: 120px;" />
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="物料数量映射" prop="class_desc">
-                <el-input v-model="form.qty" style="width: 120px;" />
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="物料批次映射" prop="class_desc">
-                <el-input v-model="form.pcsn" style="width: 120px;" />
+            <el-col :span="24">
+              <el-form-item label="自定义映射" prop="ext_json">
+                <el-input type="textarea" v-model="form.ext_json" style="width: 430px;"/>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="24">
+              <el-form-item label="备注" prop="remark">
+                <el-input type="textarea" v-model="form.remark" style="width: 430px;"/>
               </el-form-item>
             </el-col>
           </el-row>
-          <el-form-item label="自定义映射" prop="class_desc">
-            <el-input type="textarea" v-model="form.form_param" style="width: 370px;" />
-          </el-form-item>
         </el-form>
         <div slot="footer" class="dialog-footer">
           <el-button type="text" @click="crud.cancelCU">取消</el-button>
@@ -139,33 +126,31 @@
         ref="table"
         v-loading="crud.loading"
         lazy
-        :load="getClassDatas"
-        :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
         :data="crud.data"
         row-key="id"
         @select="crud.selectChange"
         @select-all="crud.selectAllChange"
         @selection-change="crud.selectionChangeHandler"
       >
-        <el-table-column prop="form_type" label="表单类型" min-width="150"/>
-        <el-table-column prop="form_name" label="表单名称" min-width="150"/>
-        <el-table-column prop="form_desc" label="描述" min-width="150"/>
-        <el-table-column prop="create_time" label="创建时间" min-width="150"/>
-        <el-table-column prop="has_child" :formatter="booleanFormat" label="是否关联子表" />
-        <el-table-column prop="parent_id" label="父表id" min-width="150"/>
-        <el-table-column prop="biz_id" label="业务单据id映射" min-width="150"/>
-        <el-table-column prop="biz_code" label="业务单据code映射" min-width="150"/>
-        <el-table-column prop="biz_form_type" label="业务单据type映射" min-width="150"/>
-        <el-table-column prop="biz_date" label="业务单据时间映射" min-width="150"/>
-        <el-table-column prop="status" label="业务单据状态映射" min-width="150"/>
-        <el-table-column prop="material_id" label="物料id映射" min-width="150"/>
-        <el-table-column prop="qty" label="物料数量映射" min-width="150"/>
-        <el-table-column prop="pcsn" label="物料批次映射" min-width="150" />
-        <el-table-column show-overflow-tooltip prop="form_param" :formatter="jsonFormat" label="自定义字段映射" />
+        <el-table-column type="selection" width="55"/>
+        <el-table-column prop="alm_name" label="安全库存方案" min-width="120" show-tooltip-when-overflow>
+          <template slot-scope="scope">
+            <el-link type="warning" @click="toView(scope.row)">{{ scope.row.alm_name }}</el-link>
+          </template>
+        </el-table-column>
+        <el-table-column prop="stor_code" label="仓库编码" show-tooltip-when-overflow/>
+        <el-table-column prop="stay_days" label="呆料天数" min-width="120" show-tooltip-when-overflow/>
+        <el-table-column prop="notice_type" label="通知类型" show-tooltip-when-overflow/>
+        <el-table-column prop="ext_json" label="扩展信息" show-tooltip-when-overflow/>
+        <el-table-column prop="remark" label="描述" show-tooltip-when-overflow/>
+        <el-table-column prop="create_id" label="创建人" show-tooltip-when-overflow/>
+        <el-table-column prop="create_time" label="创建时间" show-tooltip-when-overflow/>
+        <el-table-column prop="is_used" :formatter="jsonFormat" label="是否启用"/>
         <el-table-column
           label="操作"
           width="250px"
           align="center"
+          fixed="right"
         >
           <template slot-scope="scope">
             <udOperation
@@ -176,58 +161,54 @@
               :disabled-dle="scope.row.is_modify === '0'"
               msg="确定删除吗,如果存在下级节点则一并删除，此操作不能撤销！"
             />
-            <el-button slot="right" size="mini" type="text" icon="el-icon-circle-plus-outline" @click="crud.toAddAndData(addSibling(scope.row))">新增同级</el-button>
-            <el-button slot="right" size="mini" type="text" icon="el-icon-circle-plus" @click="crud.toAddAndData(addChildren(scope.row))">新增子级</el-button>
           </template>
         </el-table-column>
       </el-table>
       <!--分页组件-->
-      <pagination />
+      <pagination/>
     </div>
+    <ViewDialog ref="itemview"/>
+    <EditDialog ref="editDialog" @editChanged="crud.toQuery()" :dialog-show.sync="editShow"/>
     <UploadDialog :dialog-show.sync="uploadShow" @tableChanged3="crud.toQuery()"/>
   </div>
 </template>
 
 <script>
-import formstruc from './formstruc'
-import CRUD, { crud, form, header, presenter } from '@crud/crud'
-import Treeselect, { LOAD_CHILDREN_OPTIONS } from '@riophae/vue-treeselect'
-import '@riophae/vue-treeselect/dist/vue-treeselect.css'
+import deferral_early from './deferral_early'
+import CRUD, {crud, form, header, presenter} from '@crud/crud'
+import ViewDialog from './ViewDialog'
 import crudOperation from '@crud/CRUD.operation'
 import udOperation from '@crud/UD.operation'
 import rrOperation from '@crud/RR.operation'
 import pagination from '@crud/Pagination'
 import UploadDialog from './UploadDialog'
+import EditDialog from './EditDialog'
+import crudStorattr from '@/views/wms/base_manage/stor/storattr'
 
 const defaultForm = {
-  form_type: null,
-  form_name: null,
-  form_desc: null,
-  create_time: null,
-  create_id: null,
-  biz_id: null,
-  biz_code: null,
-  biz_date: null,
-  biz_status: null,
-  material_id: null,
-  qty: null,
-  pcsn: null,
-  form_param: null,
-  has_child: false,
-  parent_id: null
+  id: null,
+  alm_name: null,
+  stor_code: null,
+  stay_days: null,
+  notice_type: null,
+  ext_json: null,
+  is_used: null,
+  remark: null,
+  create_name: null,
+  create_time: null
 }
 export default {
-  name: 'FormStruc',
+  name: 'Deferral_Early',
   dicts: ['base_data'],
-  components: {UploadDialog, pagination, crudOperation, rrOperation, udOperation, Treeselect },
+  components: {UploadDialog, pagination, crudOperation, rrOperation, udOperation, ViewDialog, EditDialog},
   mixins: [presenter(), header(), form(defaultForm), crud()],
   cruds() {
     return CRUD({
-      title: '基础类别',
-      url: 'api/bmFormStruc',
+      title: '呆料预警',
+      url: '/api/almEarlyDeferral',
       idField: 'id',
       sort: 'id,desc',
-      crudMethod: { ...formstruc },
+      crudMethod: {...deferral_early},
       optShow: {
         add: true,
         reset: true
@@ -238,18 +219,30 @@ export default {
     return {
       classes: [],
       uploadShow: false,
-      form_types: [],
-      permission: {}
+      editShow: false,
+      storList: [],
+      permission: {},
+      rules: {
+        stor_code: [
+          {required: true, message: '仓库编码不能为空', trigger: 'blur'}
+        ],
+        stay_days: [
+          {required: true, message: '呆料天数不能为空', trigger: 'blur'}
+        ],
+      }
     }
   },
   created() {
-    this.getFormSelect() // 获取分类
+    crudStorattr.getStor({}).then(res => {
+      this.storList = res
+    })
   },
   methods: {
-    getFormSelect() {
-      formstruc.getTypes().then((res) => { // 获取分类名称，查询根据分类编码查找对应分支树
-        this.form_types = res
-      })
+
+    toView(row) {
+      if (row !== null) {
+        this.$refs.itemview.setForm(row)
+      }
     },
     booleanFormat(row, index) {
       if (row.has_child) {
@@ -263,7 +256,11 @@ export default {
         return JSON.stringify(row.form_param)
       }
       return ''
-    }
+    },
+    edit(row) {
+      this.$refs.editDialog.setForm(row)
+      this.editShow = true
+    },
   }
 }
 </script>
diff --git a/wms_pro/qd/src/views/wms/pm_manage/form_data/index.vue b/wms_pro/qd/src/views/wms/pm_manage/form_data/index.vue
index 1b9bacb7..ff6adc85 100644
--- a/wms_pro/qd/src/views/wms/pm_manage/form_data/index.vue
+++ b/wms_pro/qd/src/views/wms/pm_manage/form_data/index.vue
@@ -108,11 +108,11 @@
         </el-table-column>
         <el-table-column prop="proc_inst_id" label="对应流程实例id" show-overflow-tooltip width="120"/>
         <el-table-column prop="parent_id" label="父单据数据id" show-overflow-tooltip width="120"/>
+        <el-table-column prop="create_time" label="创建时间"/>
         <el-table-column width="130" show-overflow-tooltip v-for="(item, index) in cols" :key="item.value"
                          :label="item.lable">
           <template slot-scope="scope">{{ scope.row.form_data[item.value] }}</template>
         </el-table-column>
-        <el-table-column prop="create_time" label="创建时间"/>
         <el-table-column
           v-permission="['admin','Classstandard:edit','Classstandard:del']"
           label="操作"
