diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/0/c/0c6792b66c9573faf6f7f102bb584f282187174b b/wms_pro/hd/.idea/sonarlint/issuestore/0/c/0c6792b66c9573faf6f7f102bb584f282187174b
deleted file mode 100644
index 0f45d7f8..00000000
--- a/wms_pro/hd/.idea/sonarlint/issuestore/0/c/0c6792b66c9573faf6f7f102bb584f282187174b
+++ /dev/null
@@ -1,11 +0,0 @@
-
-u	java:S116%"[Rename this field "local_table_name" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(�ֵ������
-p	java:S116*"VRename this field "api_address" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(�ԛ������
-n	java:S116/"TRename this field "sync_type" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(���������
-t	java:S1164"ZRename this field "external_system" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(�Ĥ������
-q	java:S1169"WRename this field "mapping_json" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(�Ύ������
-s	java:S116>"YRename this field "last_update_id" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(���������
-p	java:S116C"[Rename this field "last_update_name" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(�Ȯ�
-u	java:S116H"[Rename this field "last_update_time" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(��Λ�����
-B
-java:S1948N"&Make "dtos" transient or serializable.(���d8�����1
\ No newline at end of file
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/3/8/3828de74f3f9d1252984dd2c3524e61bc6632160 b/wms_pro/hd/.idea/sonarlint/issuestore/3/8/3828de74f3f9d1252984dd2c3524e61bc6632160
deleted file mode 100644
index e69de29b..00000000
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/4/9/491288c6a971edd368823e6e6d6a676827d0d7b8 b/wms_pro/hd/.idea/sonarlint/issuestore/4/9/491288c6a971edd368823e6e6d6a676827d0d7b8
deleted file mode 100644
index 719377ba..00000000
--- a/wms_pro/hd/.idea/sonarlint/issuestore/4/9/491288c6a971edd368823e6e6d6a676827d0d7b8
+++ /dev/null
@@ -1,3 +0,0 @@
-
-k	java:S117I"QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(���������
-k	java:S117N"QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(��Ђ�����
\ No newline at end of file
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/6/3/6380d92563f750329b625bda0586fc4ba3b71943 b/wms_pro/hd/.idea/sonarlint/issuestore/6/3/6380d92563f750329b625bda0586fc4ba3b71943
deleted file mode 100644
index 3f8b72a5..00000000
--- a/wms_pro/hd/.idea/sonarlint/issuestore/6/3/6380d92563f750329b625bda0586fc4ba3b71943
+++ /dev/null
@@ -1,2 +0,0 @@
-
-r	java:S117A"QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(�̘������8����1
\ No newline at end of file
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/8/5/8579f2942008652ebd59f8eed6fafca608a42516 b/wms_pro/hd/.idea/sonarlint/issuestore/8/5/8579f2942008652ebd59f8eed6fafca608a42516
deleted file mode 100644
index e69de29b..00000000
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/8/6/866203b5eb8727cc6dfd1175f534632b5b301cf2 b/wms_pro/hd/.idea/sonarlint/issuestore/8/6/866203b5eb8727cc6dfd1175f534632b5b301cf2
deleted file mode 100644
index 7fc4e2dc..00000000
--- a/wms_pro/hd/.idea/sonarlint/issuestore/8/6/866203b5eb8727cc6dfd1175f534632b5b301cf2
+++ /dev/null
@@ -1,2 +0,0 @@
-
-u	java:S116"[Rename this field "local_table_name" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(�ֵ������
\ No newline at end of file
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/9/0/9019fde59766868f22fd17bff1ddac61f4908ef3 b/wms_pro/hd/.idea/sonarlint/issuestore/9/0/9019fde59766868f22fd17bff1ddac61f4908ef3
deleted file mode 100644
index ef8a8000..00000000
--- a/wms_pro/hd/.idea/sonarlint/issuestore/9/0/9019fde59766868f22fd17bff1ddac61f4908ef3
+++ /dev/null
@@ -1,5 +0,0 @@
-
-k	java:S117]"QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(�������
-f	java:S117a"QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(�쁵
-d
-java:S3252b"OUse static access with "cn.hutool.core.text.CharSequenceUtil" for "isNotBlank".(���q
\ No newline at end of file
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/b/9/b9d6f798f97296813c3841cfa2a60c772c87530a b/wms_pro/hd/.idea/sonarlint/issuestore/b/9/b9d6f798f97296813c3841cfa2a60c772c87530a
deleted file mode 100644
index 218c67cd..00000000
--- a/wms_pro/hd/.idea/sonarlint/issuestore/b/9/b9d6f798f97296813c3841cfa2a60c772c87530a
+++ /dev/null
@@ -1,3 +0,0 @@
-
-N
-java:S1135	"2Complete the task associated to this TODO comment.(���\8䇦��1
\ No newline at end of file
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/e/4/e4d40d63f40ac834a65cd47f2b9ab2436efb39d1 b/wms_pro/hd/.idea/sonarlint/issuestore/e/4/e4d40d63f40ac834a65cd47f2b9ab2436efb39d1
deleted file mode 100644
index 39a72431..00000000
--- a/wms_pro/hd/.idea/sonarlint/issuestore/e/4/e4d40d63f40ac834a65cd47f2b9ab2436efb39d1
+++ /dev/null
@@ -1,5 +0,0 @@
-
-u	java:S116"[Rename this field "local_field_name" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(�߲������
-y	java:S116
"^Rename this field "external_field_name" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(�͏L8�����1
-G
-java:S1135"2Complete the task associated to this TODO comment.(���\
\ No newline at end of file
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/index.pb b/wms_pro/hd/.idea/sonarlint/issuestore/index.pb
index cb30c995..8c0acc15 100644
--- a/wms_pro/hd/.idea/sonarlint/issuestore/index.pb
+++ b/wms_pro/hd/.idea/sonarlint/issuestore/index.pb
@@ -33,12 +33,6 @@ m
 =nladmin-system/src/main/java/org/nl/common/TableDataInfo.java,a/8/a85494925056ae5a2edbd2ec7eee55976b36080f
 w
 Gnladmin-system/src/main/java/org/nl/common/domain/entity/PageQuery.java,4/c/4c2e7c33185348f635f5a9dbcc6943e1266cd690
-�
-fnladmin-system/src/main/java/org/nl/wms/base_manage/field_mapping/service/dto/RequestMappingParam.java,b/9/b9d6f798f97296813c3841cfa2a60c772c87530a
-�
-]nladmin-system/src/main/java/org/nl/wms/base_manage/field_mapping/service/dto/MappingDto.java,e/4/e4d40d63f40ac834a65cd47f2b9ab2436efb39d1
-�
-ynladmin-system/src/main/java/org/nl/wms/base_manage/field_mapping/service/dao/mapper/xml/BmExternalFieldMappingMapper.xml,8/5/8579f2942008652ebd59f8eed6fafca608a42516
 _
 /nladmin-system/src/main/java/org/nl/AppRun.java,1/0/10e40d67bd7d0818c5483704f020703d1bef8378
 �
@@ -53,10 +47,6 @@ Xnladmin-system/src/main/java/org/nl/wms/base_manage/material/service/dao/BmMate
 hnladmin-system/src/main/java/org/nl/wms/base_manage/material/service/dao/mapper/xml/BmMaterialMapper.xml,0/b/0b7d19b44eabe0d51a7ebb8a0badcbec8bf1236c
 �
 enladmin-system/src/main/java/org/nl/wms/base_manage/material/service/dao/mapper/BmMaterialMapper.java,a/4/a47ce58066d26fa89d378900d3c7057e934eea66
-�
-vnladmin-system/src/main/java/org/nl/wms/base_manage/field_mapping/service/dao/mapper/BmExternalFieldMappingMapper.java,3/8/3828de74f3f9d1252984dd2c3524e61bc6632160
-�
-inladmin-system/src/main/java/org/nl/wms/base_manage/field_mapping/service/dao/BmExternalFieldMapping.java,0/c/0c6792b66c9573faf6f7f102bb584f282187174b
 �
 anladmin-system/src/main/java/org/nl/wms/base_manage/material/controller/BmMaterialController.java,8/9/89eeb13258719f34694cb541337f127c3bcaeda1
 �
@@ -127,12 +117,6 @@ gnladmin-system/src/main/java/org/nl/wms/base_manage/class_standard/service/dto/
 gnladmin-system/src/main/java/org/nl/wms/base_manage/class_standard/service/IBmClassStandardService.java,c/5/c5993a1d750d7041a840a41a573358502883c091
 �
 onladmin-system/src/main/java/org/nl/wms/base_manage/class_standard/service/impl/BmClassStandardServiceImpl.java,b/1/b140d08f0cb476ebc6fa39caddd1c7f4819af4c3
-�
-_nladmin-system/src/main/java/org/nl/wms/base_manage/field_mapping/service/dto/MappingQuery.java,8/6/866203b5eb8727cc6dfd1175f534632b5b301cf2
-�
-unladmin-system/src/main/java/org/nl/wms/base_manage/field_mapping/service/impl/BmExternalFieldMappingServiceImpl.java,9/0/9019fde59766868f22fd17bff1ddac61f4908ef3
-�
-mnladmin-system/src/main/java/org/nl/wms/base_manage/field_mapping/service/IBmExternalFieldMappingService.java,6/3/6380d92563f750329b625bda0586fc4ba3b71943
 x
 Hnladmin-system/src/main/java/org/nl/config/satoken/SaTokenConfigure.java,9/e/9ebc8f924932814262c2d3968e862babba46e751
 �
@@ -143,13 +127,17 @@ cnladmin-system/src/main/java/org/nl/wms/system_manage/controller/login/Authoriz
 Znladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/model/dto/ModelQuery.java,9/1/91fd50fd8729292d9e298d85ba01a6b5af8593fa
 �
 lnladmin-system/src/main/java/org/nl/wms/base_manage/class_standard/controller/BmClassStandardController.java,1/6/1682613e5ad252f692c7fe9869e05ba6e993ec0b
-�
-rnladmin-system/src/main/java/org/nl/wms/base_manage/field_mapping/controller/BmExternalFieldMappingController.java,4/9/491288c6a971edd368823e6e6d6a676827d0d7b8
-�
-Znladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/model/dao/ActDeModel.java,3/e/3eca87912d8f4d89cb48ed4d3a065400c26eb414
 �
 fnladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/model/impl/ActDeModelServiceImpl.java,5/c/5c10ac01b36058f8bd7ded010f6280af0a23920f
 �
 ^nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/model/IActDeModelService.java,8/e/8e8e6084896058ef5d6e32aeaa325a4d807bd299
+�
+fnladmin-system/src/main/java/org/nl/wms/config_manage/form_struc/controller/BmFormStrucController.java,0/4/04a9b66d50a0df59977636c2584c0b33c3c80690
+�
+Xnladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/enums/TaskTypeEnum.java,9/a/9a80ba3c6d691004cb168b6bef614f1678af32d6
+�
+Znladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/model/dao/ActDeModel.java,3/e/3eca87912d8f4d89cb48ed4d3a065400c26eb414
+�
+fnladmin-system/src/main/java/org/nl/wms/flow_manage/flow/controller/execution/ExecutionController.java,0/e/0e30069a5751c50d7cf828ec3c27e091f8565818
 �
 cnladmin-system/src/main/java/org/nl/wms/flow_manage/flow/controller/model/ActDeModelController.java,f/6/f6b31b91b229f78f8ac36ece953db50bf6d81854
\ No newline at end of file
diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/controller/model/ActDeModelController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/controller/model/ActDeModelController.java
index becc749b..92b35dd9 100644
--- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/controller/model/ActDeModelController.java
+++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/controller/model/ActDeModelController.java
@@ -7,12 +7,14 @@ import org.nl.common.TableDataInfo;
 import org.nl.common.domain.entity.PageQuery;
 import org.nl.common.utils.FileUtil;
 import org.nl.common.utils.IdUtil;
+import org.nl.common.utils.MapOf;
 import org.nl.common.utils.SecurityUtils;
 import org.nl.wms.flow_manage.flow.framework.engine.cmd.CommandExecutor;
 import org.nl.wms.flow_manage.flow.framework.engine.cmd.unify.impl.StartInstanceCmd;
 import org.nl.wms.flow_manage.flow.framework.entity.ExecutionEntity;
 import org.nl.wms.flow_manage.flow.service.deployment.IActReProcdefService;
 import org.nl.wms.flow_manage.flow.service.deployment.dao.ActReProcdef;
+import org.nl.wms.flow_manage.flow.service.enums.TaskTypeEnum;
 import org.nl.wms.flow_manage.flow.service.model.IActDeModelService;
 import org.nl.wms.flow_manage.flow.service.model.dao.ActDeModel;
 import org.nl.wms.flow_manage.flow.service.model.dto.ModelInfoVo;
@@ -25,6 +27,11 @@ import org.springframework.web.bind.annotation.*;
 
 import java.io.File;
 import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * <p>
@@ -56,6 +63,7 @@ public class ActDeModelController {
         dto.setCreate_id(SecurityUtils.getCurrentUserId());
         dto.setCreate_time(DateUtil.now());
         dto.setId(IdUtil.getStringId());
+        dto.setModel_key(IdUtil.getStringId());
         modelService.save(dto);
         return new ResponseEntity<>(HttpStatus.OK);
     }
@@ -101,5 +109,26 @@ public class ActDeModelController {
         return new ResponseEntity<>(HttpStatus.OK);
     }
 
+
+    @GetMapping(value = "/getTaskTypes", produces = "application/json")
+    public ResponseEntity<Object> startByModelId() {
+        List<Map<String, String>> list = Stream.of(TaskTypeEnum.values())
+                .map(enumItem -> {
+                    Map<String, String> map = new HashMap<>();
+                    map.put("value", enumItem.getValue());
+                    map.put("label", enumItem.getLabel());
+                    return map;
+                })
+                .collect(Collectors.toList());
+        return new ResponseEntity<>(list, HttpStatus.OK);
+    }
+
+    @GetMapping(value = "/getStrategyList", produces = "application/json")
+    public ResponseEntity<Object> getStrategyList() {
+        //TODO 需要从出入库策略表查询返回value和label
+        return new ResponseEntity<>(null, HttpStatus.OK);
+    }
+
+
 }
 
diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/enums/TaskTypeEnum.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/enums/TaskTypeEnum.java
new file mode 100644
index 00000000..00a7cd36
--- /dev/null
+++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/enums/TaskTypeEnum.java
@@ -0,0 +1,21 @@
+package org.nl.wms.flow_manage.flow.service.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @Description TODO
+ * @Author Gengby
+ * @Date 2024/4/19
+ */
+@Getter
+@AllArgsConstructor
+public enum TaskTypeEnum {
+    EXPRESSION("1", "表达式"),
+    CLASS("2", "类"),
+    MAPPING("3", "映射"),
+    STRATEGY("4", "策略");
+
+    private final String value;
+    private final String label;
+}
\ No newline at end of file
diff --git a/wms_pro/hd/nladmin-system/src/main/resources/config/application-dev3.yml b/wms_pro/hd/nladmin-system/src/main/resources/config/application-dev3.yml
index 11ee79f3..6fe761a9 100644
--- a/wms_pro/hd/nladmin-system/src/main/resources/config/application-dev3.yml
+++ b/wms_pro/hd/nladmin-system/src/main/resources/config/application-dev3.yml
@@ -9,7 +9,7 @@ spring:
       driverClassName: com.mysql.cj.jdbc.Driver
       url: jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:wms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
       username: ${DB_USER:root}
-      password: ${DB_PWD:123456}
+      password: ${DB_PWD:password}
 
       # 初始连接数
       initial-size: 5
diff --git a/wms_pro/qd/package.json b/wms_pro/qd/package.json
index e2082856..1a22ba3f 100644
--- a/wms_pro/qd/package.json
+++ b/wms_pro/qd/package.json
@@ -5,7 +5,7 @@
   "author": "Zheng Jie",
   "license": "Apache-2.0",
   "scripts": {
-    "dev": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve",
+    "dev": "vue-cli-service serve",
     "build": "vue-cli-service build",
     "build:stage": "vue-cli-service build --mode staging",
     "preview": "node build/index.js --preview",
@@ -102,6 +102,7 @@
     "chalk": "2.4.2",
     "chokidar": "2.1.5",
     "connect": "3.6.6",
+    "cross-env": "^7.0.3",
     "eslint": "5.15.3",
     "eslint-plugin-vue": "5.2.2",
     "html-webpack-plugin": "3.2.0",
diff --git a/wms_pro/qd/src/views/wms/flow_manage/act/model/curdActDeModel.js b/wms_pro/qd/src/views/wms/flow_manage/act/model/curdActDeModel.js
index 81067f32..057e4e8e 100644
--- a/wms_pro/qd/src/views/wms/flow_manage/act/model/curdActDeModel.js
+++ b/wms_pro/qd/src/views/wms/flow_manage/act/model/curdActDeModel.js
@@ -24,4 +24,26 @@ export function edit(data) {
   })
 }
 
-export default {add, edit, del}
+export function getTypes(data) {
+  return request({
+    url: '/api/bmFormStruc/getTypes',
+    method: 'get',
+    data
+  })
+}
+
+export function getTaskTypes() {
+  return request({
+    url: '/api/flow/getTaskTypes',
+    method: 'get'
+  })
+}
+
+export function getStrategyList() {
+  return request({
+    url: '/api/flow/getStrategyList',
+    method: 'get'
+  })
+}
+
+export default {add, edit, del, getTypes, getTaskTypes, getStrategyList}
diff --git a/wms_pro/qd/src/views/wms/flow_manage/act/model/index.vue b/wms_pro/qd/src/views/wms/flow_manage/act/model/index.vue
index 62769802..8158daef 100644
--- a/wms_pro/qd/src/views/wms/flow_manage/act/model/index.vue
+++ b/wms_pro/qd/src/views/wms/flow_manage/act/model/index.vue
@@ -26,16 +26,13 @@
           <el-form-item label="模型名称" prop="name">
             <el-input v-model="form.name" style="width: 370px;"/>
           </el-form-item>
-          <el-form-item label="模型KEY">
-            <el-input v-model="form.model_key" style="width: 370px;"/>
-          </el-form-item>
           <el-form-item label="模型描述">
             <el-input v-model="form.description" style="width: 370px;"/>
           </el-form-item>
           <el-form-item label="模型注释">
             <el-input v-model="form.model_comment" style="width: 370px;"/>
           </el-form-item>
-          <el-form-item label="版本号">
+          <el-form-item v-if="crud.status.edit" label="版本号">
             <el-input v-model="form.version" style="width: 370px;"/>
           </el-form-item>
           <el-form-item label="模型数据">
@@ -48,7 +45,14 @@
             <el-input v-model="form.model_type" style="width: 370px;"/>
           </el-form-item>
           <el-form-item label="单据类型">
-            <el-input v-model="form.form_type" style="width: 370px;"/>
+            <el-select v-model="form.form_type" placeholder="请选择" style="width: 370px;">
+              <el-option
+                v-for="item in formTypes"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value">
+              </el-option>
+            </el-select>
           </el-form-item>
           <el-form-item label="归属租户">
             <el-input v-model="form.tenant_id" style="width: 370px;"/>
@@ -90,6 +94,7 @@
           align="center"
         >
           <template slot-scope="scope">
+            <el-button @click="viewClick(scope.row)" type="text" icon="el-icon-thumb" size="small">预览</el-button>
             <el-button @click="handleClick(scope.row)" type="text" icon="el-icon-thumb" size="small">设计</el-button>
             <udOperation
               :data="scope.row"
@@ -102,6 +107,7 @@
       <pagination/>
     </div>
     <FlowDesigner ref="flowDesigner"/>
+    <ViewFlowDesigner ref="viewFlowDesigner"/>
   </div>
 </template>
 
@@ -113,6 +119,7 @@ import crudOperation from '@crud/CRUD.operation'
 import udOperation from '@crud/UD.operation'
 import pagination from '@crud/Pagination'
 import FlowDesigner from '../../../flow_manage/logicflow/FlowDesigner';
+import ViewFlowDesigner from '../../../flow_manage/logicflow/ViewFlowDesigner';
 
 const defaultForm = {
   id: null,
@@ -134,7 +141,7 @@ const defaultForm = {
 export default {
   dicts: [],
   name: 'ActDeModel',
-  components: {pagination, crudOperation, rrOperation, udOperation, FlowDesigner},
+  components: {pagination, crudOperation, rrOperation, udOperation, FlowDesigner, ViewFlowDesigner},
   mixins: [presenter(), header(), form(defaultForm), crud()],
   cruds() {
     return CRUD({
@@ -151,6 +158,7 @@ export default {
   },
   data() {
     return {
+      formTypes: [],
       permission: {},
       rules: {
         name: [
@@ -159,6 +167,9 @@ export default {
       }
     }
   },
+  created() {
+    this.getTypes();
+  },
   methods: {
     // 钩子：在获取表格数据之前执行，false 则代表不获取数据
     [CRUD.HOOK.beforeRefresh]() {
@@ -167,6 +178,14 @@ export default {
     handleClick(row) {
       //console.log(row);
       this.$refs.flowDesigner.showLogicFlowDesigner(row);
+    },
+    viewClick(row) {
+      this.$refs.viewFlowDesigner.showLogicFlowDesigner(row);
+    },
+    getTypes() {
+      curdActDeModel.getTypes().then(res => {
+        this.formTypes = res
+      })
     }
   }
 }
diff --git a/wms_pro/qd/src/views/wms/flow_manage/logicflow/FlowDesigner.vue b/wms_pro/qd/src/views/wms/flow_manage/logicflow/FlowDesigner.vue
index 80e334f9..ceaf3d1d 100644
--- a/wms_pro/qd/src/views/wms/flow_manage/logicflow/FlowDesigner.vue
+++ b/wms_pro/qd/src/views/wms/flow_manage/logicflow/FlowDesigner.vue
@@ -77,7 +77,10 @@ import {
   registerScriptTask,
   registerSendTask,
   registerFormTask,
-  registerGatewayTask
+  registerGatewayTask,
+  registerstorInvTask,
+  registerExecuteFlow,
+  sequence,
 } from './registerNode'
 
 //const demoData = require('./data.json')
@@ -216,6 +219,10 @@ export default {
       registerSendTask(this.lf)
       registerFormTask(this.lf)
       registerGatewayTask(this.lf)
+      registerstorInvTask(this.lf)
+      registerExecuteFlow(this.lf)
+      this.lf.register(sequence)
+      this.lf.setDefaultEdgeType("sequenceFlow");
       this.$_render(row)
     },
     /**
diff --git a/wms_pro/qd/src/views/wms/flow_manage/logicflow/LFComponents/NodePanel.vue b/wms_pro/qd/src/views/wms/flow_manage/logicflow/LFComponents/NodePanel.vue
index 923f4838..d9375e27 100644
--- a/wms_pro/qd/src/views/wms/flow_manage/logicflow/LFComponents/NodePanel.vue
+++ b/wms_pro/qd/src/views/wms/flow_manage/logicflow/LFComponents/NodePanel.vue
@@ -107,6 +107,20 @@ export default {
   background-size: cover;
 }
 
+.node-storInv-task {
+  background: url('../background/storInvTask.png') no-repeat;
+  width: 45px;
+  height: 40px;
+  background-size: cover;
+}
+
+.node-execute-flow {
+  background: url('../background/executeFlow.png') no-repeat;
+  width: 45px;
+  height: 45px;
+  background-size: cover;
+}
+
 /*.node-user {*/
 /*  background: url('../background/user.png') no-repeat;*/
 /*  background-size: cover;*/
diff --git a/wms_pro/qd/src/views/wms/flow_manage/logicflow/PropertySetting/ExecuteFlowProperties.vue b/wms_pro/qd/src/views/wms/flow_manage/logicflow/PropertySetting/ExecuteFlowProperties.vue
new file mode 100644
index 00000000..77a44161
--- /dev/null
+++ b/wms_pro/qd/src/views/wms/flow_manage/logicflow/PropertySetting/ExecuteFlowProperties.vue
@@ -0,0 +1,123 @@
+<template>
+  <div>
+    <el-form label-width="80px" :rules="rules" ref="formRef" :model="formData">
+      <el-form-item label="id" prop="id">
+        <el-input v-model="formData.id" disabled></el-input>
+      </el-form-item>
+      <el-form-item label="名称" prop="name">
+        <el-input v-model="formData.name"></el-input>
+      </el-form-item>
+      <el-form-item label="任务类型" prop="task_type">
+        <el-select clearable v-model="formData.task_type" placeholder="请选择" style="width: 370px;">
+          <el-option
+            v-for="item in taskTypes"
+            v-if="item.value === '2'"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value">
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item v-if="formData.task_type === '1' || formData.task_type === '2'" label="表达式" prop="skipExpression">
+        <el-input v-model="formData.skipExpression"></el-input>
+      </el-form-item>
+      <el-form-item v-else-if="formData.task_type === '3'" label="表达式" prop="skipExpression">
+        <el-input type="textarea" v-model="formData.skipExpression"></el-input>
+      </el-form-item>
+      <el-form-item v-else-if="formData.task_type === '4'" label="表达式" prop="skipExpression">
+        <el-select clearable v-model="formData.skipExpression" multiple placeholder="请选择" style="width: 370px;">
+          <el-option
+            v-for="item in strategyList"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value">
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" @click="onSubmit">保存</el-button>
+      </el-form-item>
+    </el-form>
+  </div>
+</template>
+<script>
+import curdActDeModel from "../../act/model/curdActDeModel";
+
+export default {
+  name: '',
+  props: {
+    nodeData: Object,
+    lf: Object || String,
+  },
+  mounted() {
+    const {properties, text} = this.$props.nodeData
+    if (properties) {
+      this.$data.formData = Object.assign({}, this.$data.formData, properties)
+    }
+    if (text && text.value) {
+      this.$data.formData.text = text.value
+    }
+    if (text && text.value) {
+      this.$data.text = text.value
+    }
+    if (!this.formData.id) {
+      this.formData.id = this.generateUniqueId();
+    }
+    this.getTaskTypes()
+    this.getStrategyList()
+  },
+  data() {
+    return {
+      text: '',
+      taskTypes: [],
+      strategyList: [],
+      formData: {
+        id: '',
+        name: '',
+        task_type: ''
+      },
+      rules: {
+        id: [
+          {required: true, message: 'ID不能为空', trigger: 'blur'}
+        ],
+        name: [
+          {required: true, message: '名称不能为空', trigger: 'blur'}
+        ],
+      }
+    }
+  },
+  methods: {
+    onSubmit() {
+      this.$refs.formRef.validate((valid) => {
+        if (valid) {
+          const {id} = this.$props.nodeData;
+          this.$props.lf.setProperties(id, {...this.formData});
+          this.$props.lf.updateText(id, this.formData.text);
+          this.$notify({
+            title: '保存成功',
+            message: '请点击上方保存数据按钮,进行持久化!',
+            type: 'success',
+            offset: 100
+          });
+          this.$emit('onClose'); // 关闭对话框或完成后续操作
+        }
+      });
+    },
+    generateUniqueId() {
+      return `id_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
+    },
+    getTaskTypes() {
+      curdActDeModel.getTaskTypes().then(res => {
+        this.taskTypes = res
+      })
+    },
+    getStrategyList() {
+      curdActDeModel.getStrategyList().then(res => {
+        this.strategyList = res
+      })
+    }
+  }
+}
+</script>
+<style scoped>
+</style>
diff --git a/wms_pro/qd/src/views/wms/flow_manage/logicflow/PropertySetting/FormTaskProperties.vue b/wms_pro/qd/src/views/wms/flow_manage/logicflow/PropertySetting/FormTaskProperties.vue
index 81ed6425..aa941bf2 100644
--- a/wms_pro/qd/src/views/wms/flow_manage/logicflow/PropertySetting/FormTaskProperties.vue
+++ b/wms_pro/qd/src/views/wms/flow_manage/logicflow/PropertySetting/FormTaskProperties.vue
@@ -7,14 +7,42 @@
       <el-form-item label="名称" prop="name">
         <el-input v-model="formData.name"></el-input>
       </el-form-item>
-      <el-form-item label="节点描述" prop="documentation">
-        <el-input v-model="formData.documentation"></el-input>
+      <el-form-item label="任务类型" prop="task_type">
+        <el-select clearable v-model="formData.task_type" placeholder="请选择" style="width: 370px;">
+          <el-option
+            v-for="item in taskTypes"
+            v-if="item.value !== '4'"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value">
+          </el-option>
+        </el-select>
       </el-form-item>
-      <el-form-item label="表单Id" prop="formId">
-        <el-input v-model="formData.formId"></el-input>
+      <el-form-item v-if="formData.task_type === '1' || formData.task_type === '2'" label="表达式" prop="skipExpression">
+        <el-input v-model="formData.skipExpression"></el-input>
       </el-form-item>
-      <el-form-item label="任务类型" prop="taskType">
-        <el-input v-model="formData.taskType"></el-input>
+      <el-form-item v-else-if="formData.task_type === '3'" label="表达式" prop="skipExpression">
+        <el-input type="textarea" v-model="formData.skipExpression"></el-input>
+      </el-form-item>
+      <el-form-item v-else-if="formData.task_type === '4'" label="表达式" prop="skipExpression">
+        <el-select clearable v-model="formData.skipExpression" multiple placeholder="请选择" style="width: 370px;">
+          <el-option
+            v-for="item in strategyList"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value">
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="单据类型" prop="form_type">
+        <el-select clearable v-model="formData.form_type" placeholder="请选择" style="width: 370px;">
+          <el-option
+            v-for="item in formTypes"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value">
+          </el-option>
+        </el-select>
       </el-form-item>
       <el-form-item>
         <el-button type="primary" @click="onSubmit">保存</el-button>
@@ -23,6 +51,8 @@
   </div>
 </template>
 <script>
+import curdActDeModel from "../../act/model/curdActDeModel";
+
 export default {
   name: '',
   props: {
@@ -43,17 +73,22 @@ export default {
     if (!this.formData.id) {
       this.formData.id = this.generateUniqueId();
     }
+    this.getTypes()
+    this.getTaskTypes()
+    this.getStrategyList()
   },
   data() {
     return {
       text: '',
+      formTypes: [],
+      taskTypes: [],
+      strategyList: [],
       formData: {
         id: '',
         name: '',
-        documentation: '',
-        listener: '',
-        formId: '',
-        taskType: ''
+        task_type: '',
+        skipExpression: '',
+        form_type: ''
       },
       rules: {
         id: [
@@ -71,7 +106,7 @@ export default {
         if (valid) {
           const {id} = this.$props.nodeData;
           this.$props.lf.setProperties(id, {...this.formData});
-          this.$props.lf.updateText(id, this.formData.text);
+          this.$props.lf.updateText(id, this.formData.name);
           this.$notify({
             title: '保存成功',
             message: '请点击上方保存数据按钮,进行持久化!',
@@ -84,6 +119,21 @@ export default {
     },
     generateUniqueId() {
       return `id_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
+    },
+    getTypes() {
+      curdActDeModel.getTypes().then(res => {
+        this.formTypes = res
+      })
+    },
+    getTaskTypes() {
+      curdActDeModel.getTaskTypes().then(res => {
+        this.taskTypes = res
+      })
+    },
+    getStrategyList() {
+      curdActDeModel.getStrategyList().then(res => {
+        this.strategyList = res
+      })
     }
   }
 }
diff --git a/wms_pro/qd/src/views/wms/flow_manage/logicflow/PropertySetting/PolylineProperties.vue b/wms_pro/qd/src/views/wms/flow_manage/logicflow/PropertySetting/PolylineProperties.vue
index c54894e1..75b11fd1 100644
--- a/wms_pro/qd/src/views/wms/flow_manage/logicflow/PropertySetting/PolylineProperties.vue
+++ b/wms_pro/qd/src/views/wms/flow_manage/logicflow/PropertySetting/PolylineProperties.vue
@@ -19,7 +19,6 @@
       </el-form-item>
        <el-form-item>
         <el-button type="primary" @click="onSubmit">保存</el-button>
-         <el-button @click="testMethod">点击我测试</el-button>
       </el-form-item>
     </el-form>
   </div>
diff --git a/wms_pro/qd/src/views/wms/flow_manage/logicflow/PropertySetting/PropertyDialog.vue b/wms_pro/qd/src/views/wms/flow_manage/logicflow/PropertySetting/PropertyDialog.vue
index 4a299c85..6670675d 100644
--- a/wms_pro/qd/src/views/wms/flow_manage/logicflow/PropertySetting/PropertyDialog.vue
+++ b/wms_pro/qd/src/views/wms/flow_manage/logicflow/PropertySetting/PropertyDialog.vue
@@ -10,6 +10,21 @@
       :nodeData="nodeData"
       :lf="lf"
       @onClose="handleClose"/>
+    <SequenceFlowProperties
+      v-if="nodeData.type === 'sequenceFlow'"
+      :nodeData="nodeData"
+      :lf="lf"
+      @onClose="handleClose"/>
+    <StorInvTaskProperties
+      v-if="nodeData.type === 'storInvTask'"
+      :nodeData="nodeData"
+      :lf="lf"
+      @onClose="handleClose"/>
+    <ExecuteFlowProperties
+      v-if="nodeData.type === 'executeFlow'"
+      :nodeData="nodeData"
+      :lf="lf"
+      @onClose="handleClose"/>
     <ServerTaskProperties
       v-if="nodeData.type === 'serverTask'"
       :nodeData="nodeData"
@@ -56,6 +71,9 @@ import SendTaskProperties from './SendTaskProperties'
 import GatewayTaskProperties from './GatewayTaskProperties'
 import FormTaskProperties from './FormTaskProperties'
 import PolylineProperties from './PolylineProperties'
+import SequenceFlowProperties from './SequenceFlowProperties'
+import StorInvTaskProperties from './StorInvTaskProperties'
+import ExecuteFlowProperties from './ExecuteFlowProperties'
 import CommonProperty from './CommonProperty'
 import User from './User.vue'
 
@@ -71,6 +89,9 @@ export default {
     FormTaskProperties,
     PolylineProperties,
     CommonProperty,
+    SequenceFlowProperties,
+    StorInvTaskProperties,
+    ExecuteFlowProperties,
     User
   },
   props: {
diff --git a/wms_pro/qd/src/views/wms/flow_manage/logicflow/PropertySetting/ScriptTaskProperties.vue b/wms_pro/qd/src/views/wms/flow_manage/logicflow/PropertySetting/ScriptTaskProperties.vue
index c54894e1..a1745b27 100644
--- a/wms_pro/qd/src/views/wms/flow_manage/logicflow/PropertySetting/ScriptTaskProperties.vue
+++ b/wms_pro/qd/src/views/wms/flow_manage/logicflow/PropertySetting/ScriptTaskProperties.vue
@@ -1,25 +1,17 @@
 <template>
   <div>
     <el-form label-width="80px" :model="formData">
-      <el-form-item label="文案">
-        <el-input v-model="formData.text"></el-input>
+      <el-form-item label="id" prop="id">
+        <el-input v-model="formData.id" disabled></el-input>
       </el-form-item>
-      <el-form-item label="名称">
+      <el-form-item label="名称" prop="name">
         <el-input v-model="formData.name"></el-input>
       </el-form-item>
-      <el-form-item label="活动区域">
-        <el-input v-model="formData.region"></el-input>
+      <el-form-item label="表达式" prop="skipExpression">
+        <el-input type="textarea" v-model="formData.skipExpression"></el-input>
       </el-form-item>
-      <el-form-item label="活动形式">
-        <el-input v-model="formData.type"></el-input>
-      </el-form-item>
-      <el-form-item label="A">
-        <el-input v-model="formData.a.a1"></el-input>
-        <el-input v-model="formData.a.a2"></el-input>
-      </el-form-item>
-       <el-form-item>
+      <el-form-item>
         <el-button type="primary" @click="onSubmit">保存</el-button>
-         <el-button @click="testMethod">点击我测试</el-button>
       </el-form-item>
     </el-form>
   </div>
@@ -32,7 +24,7 @@ export default {
     lf: Object || String,
   },
   mounted() {
-    const { properties, text } = this.$props.nodeData
+    const {properties, text} = this.$props.nodeData
     if (properties) {
       this.$data.formData = Object.assign({}, this.$data.formData, properties)
     }
@@ -42,25 +34,23 @@ export default {
     if (text && text.value) {
       this.$data.text = text.value
     }
+    if (!this.formData.id) {
+      this.formData.id = this.generateUniqueId();
+    }
   },
-  data () {
+  data() {
     return {
       text: '',
       formData: {
-          text: '',
-          name: '',
-          region: '',
-          type: '',
-          a: {
-            a1: '',
-            a2: ''
-          }
-        }
+        id: '',
+        name: '',
+        skipExpression: ''
+      }
     }
   },
   methods: {
     onSubmit() {
-      const { id } = this.$props.nodeData
+      const {id} = this.$props.nodeData
       this.$props.lf.setProperties(id, {
         ...this.$data.formData
       });
@@ -74,8 +64,8 @@ export default {
       });
       this.$emit('onClose')
     },
-    testMethod(){
-      console.log(222222)
+    generateUniqueId() {
+      return `id_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
     }
   }
 }
diff --git a/wms_pro/qd/src/views/wms/flow_manage/logicflow/PropertySetting/SequenceFlowProperties.vue b/wms_pro/qd/src/views/wms/flow_manage/logicflow/PropertySetting/SequenceFlowProperties.vue
new file mode 100644
index 00000000..20e1bc89
--- /dev/null
+++ b/wms_pro/qd/src/views/wms/flow_manage/logicflow/PropertySetting/SequenceFlowProperties.vue
@@ -0,0 +1,74 @@
+<template>
+  <div>
+    <el-form label-width="80px" :model="formData">
+      <el-form-item label="id">
+        <el-input v-model="formData.id" disabled></el-input>
+      </el-form-item>
+      <el-form-item label="名称">
+        <el-input v-model="formData.name"></el-input>
+      </el-form-item>
+      <el-form-item label="表达式">
+        <el-input v-model="formData.skipExpression"></el-input>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" @click="onSubmit">保存</el-button>
+      </el-form-item>
+    </el-form>
+  </div>
+</template>
+<script>
+export default {
+  name: '',
+  props: {
+    nodeData: Object,
+    lf: Object || String,
+  },
+  mounted() {
+    const {properties, text} = this.$props.nodeData
+    if (properties) {
+      this.$data.formData = Object.assign({}, this.$data.formData, properties)
+    }
+    if (text && text.value) {
+      this.$data.formData.text = text.value
+    }
+    if (text && text.value) {
+      this.$data.text = text.value
+    }
+    if (!this.formData.id) {
+      this.formData.id = this.generateUniqueId();
+    }
+  },
+  data() {
+    return {
+      text: '',
+      formData: {
+        id: '',
+        name: '',
+        skipExpression: ''
+      }
+    }
+  },
+  methods: {
+    onSubmit() {
+      const {id} = this.$props.nodeData
+      this.$props.lf.setProperties(id, {
+        ...this.$data.formData
+      });
+      console.log(6666, this.$data.formData);
+      this.$props.lf.updateText(id, this.$data.formData.name);
+      this.$notify({
+        title: '保存成功',
+        message: '请点击上方保存数据按钮,进行持久化!',
+        type: 'success',
+        offset: 100
+      });
+      this.$emit('onClose')
+    },
+    generateUniqueId() {
+      return `id_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
+    }
+  }
+}
+</script>
+<style scoped>
+</style>
diff --git a/wms_pro/qd/src/views/wms/flow_manage/logicflow/PropertySetting/ServerTaskProperties.vue b/wms_pro/qd/src/views/wms/flow_manage/logicflow/PropertySetting/ServerTaskProperties.vue
index 81ed6425..b6f746b6 100644
--- a/wms_pro/qd/src/views/wms/flow_manage/logicflow/PropertySetting/ServerTaskProperties.vue
+++ b/wms_pro/qd/src/views/wms/flow_manage/logicflow/PropertySetting/ServerTaskProperties.vue
@@ -7,14 +7,32 @@
       <el-form-item label="名称" prop="name">
         <el-input v-model="formData.name"></el-input>
       </el-form-item>
-      <el-form-item label="节点描述" prop="documentation">
-        <el-input v-model="formData.documentation"></el-input>
+      <el-form-item label="任务类型" prop="task_type">
+        <el-select clearable v-model="formData.task_type" placeholder="请选择" style="width: 370px;">
+          <el-option
+            v-for="item in taskTypes"
+            v-if="item.value !== '3'"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value">
+          </el-option>
+        </el-select>
       </el-form-item>
-      <el-form-item label="表单Id" prop="formId">
-        <el-input v-model="formData.formId"></el-input>
+      <el-form-item v-if="formData.task_type === '1' || formData.task_type === '2'" label="表达式" prop="skipExpression">
+        <el-input v-model="formData.skipExpression"></el-input>
       </el-form-item>
-      <el-form-item label="任务类型" prop="taskType">
-        <el-input v-model="formData.taskType"></el-input>
+      <el-form-item v-else-if="formData.task_type === '3'" label="表达式" prop="skipExpression">
+        <el-input type="textarea" v-model="formData.skipExpression"></el-input>
+      </el-form-item>
+      <el-form-item v-else-if="formData.task_type === '4'" label="表达式" prop="skipExpression">
+        <el-select clearable v-model="formData.skipExpression" multiple placeholder="请选择" style="width: 370px;">
+          <el-option
+            v-for="item in strategyList"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value">
+          </el-option>
+        </el-select>
       </el-form-item>
       <el-form-item>
         <el-button type="primary" @click="onSubmit">保存</el-button>
@@ -23,6 +41,8 @@
   </div>
 </template>
 <script>
+import curdActDeModel from "../../act/model/curdActDeModel";
+
 export default {
   name: '',
   props: {
@@ -43,17 +63,18 @@ export default {
     if (!this.formData.id) {
       this.formData.id = this.generateUniqueId();
     }
+    this.getTaskTypes()
+    this.getStrategyList()
   },
   data() {
     return {
       text: '',
+      taskTypes: [],
+      strategyList: [],
       formData: {
         id: '',
         name: '',
-        documentation: '',
-        listener: '',
-        formId: '',
-        taskType: ''
+        task_type: ''
       },
       rules: {
         id: [
@@ -84,6 +105,16 @@ export default {
     },
     generateUniqueId() {
       return `id_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
+    },
+    getTaskTypes() {
+      curdActDeModel.getTaskTypes().then(res => {
+        this.taskTypes = res
+      })
+    },
+    getStrategyList() {
+      curdActDeModel.getStrategyList().then(res => {
+        this.strategyList = res
+      })
     }
   }
 }
diff --git a/wms_pro/qd/src/views/wms/flow_manage/logicflow/PropertySetting/StorInvTaskProperties.vue b/wms_pro/qd/src/views/wms/flow_manage/logicflow/PropertySetting/StorInvTaskProperties.vue
new file mode 100644
index 00000000..8e01bbd2
--- /dev/null
+++ b/wms_pro/qd/src/views/wms/flow_manage/logicflow/PropertySetting/StorInvTaskProperties.vue
@@ -0,0 +1,96 @@
+<template>
+  <div>
+    <el-form ref="form" :model="form" label-width="80px">
+      <el-form-item label="活动名称">
+        <el-input v-model="form.name"></el-input>
+      </el-form-item>
+      <el-form-item label="活动区域">
+        <el-select v-model="form.region" placeholder="请选择活动区域">
+          <el-option label="区域一" value="shanghai"></el-option>
+          <el-option label="区域二" value="beijing"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="活动时间">
+        <el-col :span="11">
+          <el-date-picker type="date" placeholder="选择日期" v-model="form.date1" style="width: 100%;"></el-date-picker>
+        </el-col>
+        <el-col class="line" :span="2">-</el-col>
+        <el-col :span="11">
+          <el-time-picker placeholder="选择时间" v-model="form.date2" style="width: 100%;"></el-time-picker>
+        </el-col>
+      </el-form-item>
+      <el-form-item label="即时配送">
+        <el-switch v-model="form.delivery"></el-switch>
+      </el-form-item>
+      <el-form-item label="活动性质">
+        <el-checkbox-group v-model="form.type">
+          <el-checkbox label="美食/餐厅线上活动" name="type"></el-checkbox>
+          <el-checkbox label="地推活动" name="type"></el-checkbox>
+          <el-checkbox label="线下主题活动" name="type"></el-checkbox>
+          <el-checkbox label="单纯品牌曝光" name="type"></el-checkbox>
+        </el-checkbox-group>
+      </el-form-item>
+      <el-form-item label="特殊资源">
+        <el-radio-group v-model="form.resource">
+          <el-radio label="线上品牌商赞助"></el-radio>
+          <el-radio label="线下场地免费"></el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="活动形式">
+        <el-input type="textarea" v-model="form.desc"></el-input>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" @click="onSubmit">保存</el-button>
+      </el-form-item>
+    </el-form>
+  </div>
+</template>
+<script>
+export default {
+  name: '',
+  props: {
+    nodeData: Object,
+    lf: Object || String,
+  },
+  mounted() {
+    const { properties } = this.$props.nodeData
+    if (properties) {
+      this.$data.form = Object.assign({}, this.$data.form, properties)
+    }
+  },
+  data() {
+    return {
+      form: {
+        name: '',
+        region: '',
+        date1: '',
+        date2: '',
+        delivery: false,
+        type: [],
+        resource: '',
+        desc: ''
+      }
+    }
+  },
+  methods: {
+    onSubmit() {
+      console.log('submit!');
+      // const { id } = this.$props.nodeData
+      // this.$props.lf.setProperties(id, this.$data.form);
+      const nodeData = this.$props.nodeData
+      nodeData.properties = this.$data.form
+      console.log(nodeData);
+      this.$props.lf.setNodeData(nodeData);
+      this.$notify({
+        title: '保存成功',
+        message: '请点击上方保存数据按钮,进行持久化!',
+        type: 'success',
+        offset: 100
+      });
+      this.$emit('onClose')
+    }
+  }
+}
+</script>
+<style scoped>
+</style>
diff --git a/wms_pro/qd/src/views/wms/flow_manage/logicflow/ViewFlowDesigner.vue b/wms_pro/qd/src/views/wms/flow_manage/logicflow/ViewFlowDesigner.vue
new file mode 100644
index 00000000..2201c431
--- /dev/null
+++ b/wms_pro/qd/src/views/wms/flow_manage/logicflow/ViewFlowDesigner.vue
@@ -0,0 +1,192 @@
+<template>
+  <el-dialog
+    :visible.sync="logicFlowVisible"
+    append-to-body
+    destroy-on-close
+    :height="'100%'"
+    title="流程预览"
+    :width="'100%'"
+    :before-close="handleClose">
+    <div class="logic-flow-view">
+      <!-- 画布 -->
+      <div id="LF-view2" style="width: 100%; height: 100%;"></div>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import LogicFlow from '@logicflow/core'
+import '@logicflow/core/dist/style/index.css'
+import '@logicflow/extension/lib/style/index.css'
+import {
+  registerStart,
+  registerEnd,
+  registerConnect,
+  registerServerTask,
+  registerScriptTask,
+  registerSendTask,
+  registerFormTask,
+  registerGatewayTask,
+  registerstorInvTask,
+  registerExecuteFlow,
+  sequence,
+} from './registerNode'
+
+//const demoData = require('./data.json')
+
+export default {
+  components: {},
+  data() {
+    return {
+      logicFlowVisible: false, // 控制流程设计器对话框的可见性
+      lf: null, // LogicFlow实例
+      showAddPanel: false,
+      addPanelStyle: {
+        top: 0,
+        left: 0
+      },
+      id: null,
+      initNodes: {"nodes": [], "edges": []},
+      nodeData: null,
+      addClickNode: null,
+      clickNode: null,
+      dialogVisible: false,
+      graphData: null,
+      dataVisible: false,
+      config: {
+        background: {
+          color: '#f7f9ff'
+        },
+        grid: {
+          size: 10,
+          visible: false
+        },
+        keyboard: {
+          enabled: true
+        },
+        style: {
+          rect: {
+            radius: 6,
+          },
+          edgeText: { // 边文本样式
+            background: {
+              fill: '#fff'
+            }
+          },
+        },
+        edgeTextDraggable: true,
+        guards: {
+          beforeClone(data) {
+            console.log('beforeClone', data)
+            return true
+          },
+          beforeDelete(data) {
+            // 可以根据data数据判断是否允许删除，允许返回true,不允许返回false
+            // 文档： http://logic-flow.org/guide/basic/keyboard.html#%E5%A6%82%E4%BD%95%E9%98%BB%E6%AD%A2%E5%88%A0%E9%99%A4%E6%88%96%E8%80%85%E6%8B%B7%E8%B4%9D%E8%A1%8C%E4%B8%BA
+            console.log('beforeDelete', data)
+            // _this.$message('不允许删除', 'error')
+            return true
+          }
+        }
+      },
+      moveData: {},
+    };
+  },
+  methods: {
+    // 初始化并显示流程设计
+    showLogicFlowDesigner(row) {
+      this.logicFlowVisible = true;
+      this.$nextTick(() => {
+        this.$_initLf(row)
+      });
+    },
+    $_initLf(row) {
+      // LogicFlow.use(Menu)
+      // LogicFlow.use(Snapshot)
+      const lf = new LogicFlow({container: document.querySelector('#LF-view2'), editable: false,})
+      this.lf = lf
+      // 设置主题
+      lf.setTheme({
+        circle: {
+          r: 20,
+          stroke: '#000000',
+          outlineColor: '#88f',
+          strokeWidth: 1
+        },
+        rect: {
+          outlineColor: '#88f',
+          strokeWidth: 1
+        },
+        polygon: {
+          strokeWidth: 1
+        },
+        polyline: {
+          stroke: '#000000',
+          hoverStroke: '#000000',
+          selectedStroke: '#000000',
+          outlineColor: '#88f',
+          strokeWidth: 1
+        },
+        nodeText: {
+          color: '#000000'
+        },
+        edgeText: {
+          color: '#000000',
+          background: {
+            fill: '#f7f9ff'
+          }
+        }
+      })
+      this.$_registerNode(row)
+    },
+    // 自定义
+    $_registerNode(row) {
+      registerStart(this.lf)
+      registerEnd(this.lf)
+      registerConnect(this.lf)
+      registerServerTask(this.lf)
+      registerScriptTask(this.lf)
+      registerSendTask(this.lf)
+      registerFormTask(this.lf)
+      registerGatewayTask(this.lf)
+      registerstorInvTask(this.lf)
+      registerExecuteFlow(this.lf)
+      this.lf.register(sequence)
+      this.lf.setDefaultEdgeType("sequenceFlow");
+      this.$_render(row)
+    },
+    /**
+     *这个是加载中间面板数据
+     * 其中 demoData中的nodes是节点信息
+     * edges是连接线信息
+     */
+    $_render(row) {
+      this.id = row.id
+      if (!row.model_editor_json) {
+        this.lf.render(this.initNodes)
+      } else {
+        this.lf.render(JSON.parse(row.model_editor_json))
+      }
+    },
+    closeDialog() {
+      this.$data.dialogVisible = false
+    },
+    handleClose() {
+      this.logicFlowVisible = false;
+    },
+  },
+};
+</script>
+
+<style scoped>
+.logic-flow-view {
+  height: 100vh;
+  position: relative;
+}
+
+#LF-view2 {
+  outline: none;
+  margin-left: 1px;
+}
+
+</style>
diff --git a/wms_pro/qd/src/views/wms/flow_manage/logicflow/background/executeFlow.png b/wms_pro/qd/src/views/wms/flow_manage/logicflow/background/executeFlow.png
new file mode 100644
index 00000000..ba1f3506
Binary files /dev/null and b/wms_pro/qd/src/views/wms/flow_manage/logicflow/background/executeFlow.png differ
diff --git a/wms_pro/qd/src/views/wms/flow_manage/logicflow/background/storInvTask.png b/wms_pro/qd/src/views/wms/flow_manage/logicflow/background/storInvTask.png
new file mode 100644
index 00000000..06c3d215
Binary files /dev/null and b/wms_pro/qd/src/views/wms/flow_manage/logicflow/background/storInvTask.png differ
diff --git a/wms_pro/qd/src/views/wms/flow_manage/logicflow/config.js b/wms_pro/qd/src/views/wms/flow_manage/logicflow/config.js
index 15591127..80480912 100644
--- a/wms_pro/qd/src/views/wms/flow_manage/logicflow/config.js
+++ b/wms_pro/qd/src/views/wms/flow_manage/logicflow/config.js
@@ -34,6 +34,16 @@ export const nodeList = [
     type: 'gatewayTask',
     class: 'node-gateway-task'
   },
+  {
+    text: 'storInvTask',
+    type: 'storInvTask',
+    class: 'node-storInv-task'
+  },
+  {
+    text: 'executeFlow',
+    type: 'executeFlow',
+    class: 'node-execute-flow'
+  },
   // {
   //   type: 'user',
   //   text: '用户',
diff --git a/wms_pro/qd/src/views/wms/flow_manage/logicflow/registerNode/index.js b/wms_pro/qd/src/views/wms/flow_manage/logicflow/registerNode/index.js
index 9ed5051f..29eb16b8 100644
--- a/wms_pro/qd/src/views/wms/flow_manage/logicflow/registerNode/index.js
+++ b/wms_pro/qd/src/views/wms/flow_manage/logicflow/registerNode/index.js
@@ -14,6 +14,9 @@ import registerScriptTask from './registerScriptTask'
 import registerSendTask from './registerSendTask'
 import registerFormTask from './registerFormTask'
 import registerGatewayTask from './registerGatewayTask'
+import registerstorInvTask from './registerstorInvTask'
+import sequence from './sequence'
+import registerExecuteFlow from './registerExecuteFlow'
 
 export {
   registerStart,
@@ -21,12 +24,15 @@ export {
   registerEnd,
   //registerPush,
   //registerDownload,
-  //registerPolyline,
- // registerTask,
+  ///registerPolyline,
+  // registerTask,
   registerConnect,
   registerServerTask,
   registerScriptTask,
   registerSendTask,
   registerFormTask,
-  registerGatewayTask
+  registerGatewayTask,
+  registerstorInvTask,
+  registerExecuteFlow,
+  sequence
 }
diff --git a/wms_pro/qd/src/views/wms/flow_manage/logicflow/registerNode/registerExecuteFlow.js b/wms_pro/qd/src/views/wms/flow_manage/logicflow/registerNode/registerExecuteFlow.js
new file mode 100644
index 00000000..e50cecb6
--- /dev/null
+++ b/wms_pro/qd/src/views/wms/flow_manage/logicflow/registerNode/registerExecuteFlow.js
@@ -0,0 +1,106 @@
+export default function registerExecuteFlow(lf) {
+  lf.register('executeFlow', ({RectNode, RectNodeModel, h}) => {
+    class ExecuteFlowNode extends RectNode {
+      getIconShape() {
+        const attributes = this.getAttributes();
+        const {stroke} = attributes;
+        const iconWidth = 80; // 图标宽度
+        const iconHeight = 80; // 图标高度
+        const iconX = attributes.x - iconWidth / 2 + 5; // 调整图标位置的X坐标
+        const iconY = attributes.y - iconHeight / 2; // 调整图标位置的Y坐标
+        return h(
+          'svg',
+          {
+            x: iconX,
+            y: iconY,
+            width: iconWidth,
+            height: iconHeight,
+            viewBox: '0 0 1126 1024'
+          },
+          h(
+            'path',
+            {
+              fill: stroke,
+              d: 'M196.56 0c-212.096 0-212.096 1024 0 1024 160.896 0 789.952-343.744 789.952-512S350.16 0 196.56 0zM818.32 555.904c-109.696 109.696-373.056 256-533.952 321.856a54.144 54.144 0 0 1-73.152-43.904 1589.12 1589.12 0 0 1 0-643.648 58.752 58.752 0 0 1 73.152-43.904A2253.184 2253.184 0 0 1 818.32 468.16a54.848 54.848 0 0 1 0 87.744z',
+            }
+          )
+        );
+      }
+
+      getShape() {
+        const attributes = this.getAttributes();
+        const {width, height, x, y, radius} = attributes;
+        const points = [
+          [x - width / 2, y],
+          [x + width / 2, y],
+          [x, y - height / 2],
+          [x, y - height / 2]
+        ];
+        const  pointsPath = points.map(point => point.join(',')).join('');
+        return h(
+          'g',
+          {
+            // transform
+          },
+          [
+            h('rect', {
+              x: x - width / 2,
+              y: y - height / 2,
+              rx: 5 ,
+              ry: 5,
+              width,
+              height,
+              fill: 'none', // 填充颜色
+              stroke: 'black', // 边框颜色
+              strokeWidth: 1, // 边框宽度
+              strokeOpacity: 1, // 边框透明度
+              fillOpacity: 0.5, // 填充透明度
+              points: pointsPath,
+            }),
+            this.getIconShape(),
+          ]
+        );
+      }
+    }
+
+    class ExecuteFlowModel extends RectNodeModel {
+      constructor(data, graphModel) {
+        data.text = {
+          value: (data.text && data.text.value) || '',
+          x: data.x,
+          y: data.y + 50
+        };
+        super(data, graphModel);
+        this.menu = [
+          {
+            className: 'lf-menu-delete',
+            text: 'delete',
+            callback(node) {
+              lf.deleteNode(node.id);
+            },
+          },
+          {
+            text: 'edit',
+            className: 'lf-menu-item',
+            callback(node) {
+              lf.editNodeText(node.id);
+            },
+          },
+          {
+            text: 'copy',
+            className: 'lf-menu-item',
+            callback(node) {
+              lf.cloneNode(node.id);
+            },
+          },
+        ];
+      }
+    }
+
+    return {
+      type: 'executeFlow',
+      view: ExecuteFlowNode,
+      model: ExecuteFlowModel,
+    };
+  });
+}
diff --git a/wms_pro/qd/src/views/wms/flow_manage/logicflow/registerNode/registerstorInvTask.js b/wms_pro/qd/src/views/wms/flow_manage/logicflow/registerNode/registerstorInvTask.js
new file mode 100644
index 00000000..0a9b25a4
--- /dev/null
+++ b/wms_pro/qd/src/views/wms/flow_manage/logicflow/registerNode/registerstorInvTask.js
@@ -0,0 +1,106 @@
+export default function registerUser(lf) {
+  lf.register('storInvTask', ({RectNode, RectNodeModel, h}) => {
+    class Node extends RectNode {
+      getIconShape() {
+        const attributes = this.getAttributes();
+        const {stroke} = attributes;
+        const iconWidth = 80; // 图标宽度
+        const iconHeight = 80; // 图标高度
+        const iconX = attributes.x - iconWidth / 2 ; // 调整图标位置的X坐标
+        const iconY = attributes.y - iconHeight / 2; // 调整图标位置的Y坐标
+        return h(
+          'svg',
+          {
+            x: iconX,
+            y: iconY,
+            width: iconWidth,
+            height: iconHeight,
+            viewBox: '0 0 1126 1024'
+          },
+          h(
+            'path',
+            {
+              fill: stroke,
+              d: 'M913.660512 443.297039L474.753353 70.480459 35.846194 443.297039l-35.549944-40.397665L474.753353-0.026932l474.457104 403.007101zM190.515386 551.481984H136.193993v-258.545053h54.321393v258.545053z m633.13913 0h-54.321393v-258.545053h54.321393v258.545053zM507.313871 962.083846h-149.821472v-53.297985h149.821472v53.297985z m309.44611 0h-133.904792v-53.297985h79.583399V570.549682H84.835095v338.236179h91.945085v53.297985h-146.239546V517.224765h786.219347v444.859081z m-546.71506 61.943086a121.354584 121.354584 0 1 1 123.616854-121.192994 122.620378 122.620378 0 0 1-123.643785 121.112198z m0-189.330388A68.029667 68.029667 0 1 0 339.340382 902.537689a68.729893 68.729893 0 0 0-69.322392-67.92194z m324.096997 189.330388a121.354584 121.354584 0 1 1 123.616853-121.192994 122.620378 122.620378 0 0 1-123.643785 121.112198z m0-189.330388a68.029667 68.029667 0 1 0 69.29546 67.841145 68.729893 68.729893 0 0 0-69.322392-67.92194z m416.688443 189.330388a121.354584 121.354584 0 1 1 123.616854-121.192994 122.620378 122.620378 0 0 1-123.643785 121.112198z m0-189.330388a68.029667 68.029667 0 1 0 69.295461 67.841145 68.729893 68.729893 0 0 0-69.322392-67.92194z m254.828468 96.631214h-135.816948v-53.405713h81.468623v-106.622902h-108.615854V584.742728h-325.874493v-53.324917H1156.989112v186.583346h108.642785v213.218874z m-380.222818 0h-108.642786v-53.405713h108.642786v53.297986z m-172.040188-469.340067h-54.321392v-156.042712h54.321392v156.042712z m-88.309294 1.346589h-130.349798V304.652254h130.349798v158.73589z m-76.001473-53.297985h21.707012v-52.112987h-21.733944v52.112987z m-93.668718 51.978328h-54.348325v-156.069644h54.321393v156.042712z m-88.309295 1.346589H236.703382V304.652254h130.349798v158.73589z m-76.028404-53.297985h21.707011v-52.139919h-21.760875v52.112987z',
+            }
+          )
+        );
+      }
+
+      getShape() {
+        const attributes = this.getAttributes();
+        const {width, height, x, y, radius} = attributes;
+        const points = [
+          [x - width / 2, y],
+          [x + width / 2, y],
+          [x, y - height / 2],
+          [x, y - height / 2]
+        ];
+        const  pointsPath = points.map(point => point.join(',')).join('');
+        return h(
+          'g',
+          {
+            // transform
+          },
+          [
+            h('rect', {
+              x: x - width / 2,
+              y: y - height / 2,
+              rx: 5 ,
+              ry: 5,
+              width,
+              height,
+              fill: 'none', // 填充颜色
+              stroke: 'black', // 边框颜色
+              strokeWidth: 1, // 边框宽度
+              strokeOpacity: 1, // 边框透明度
+              fillOpacity: 0.5, // 填充透明度
+              points: pointsPath,
+            }),
+            this.getIconShape(),
+          ]
+        );
+      }
+    }
+
+    class Model extends RectNodeModel {
+      constructor(data, graphModel) {
+        data.text = {
+          value: (data.text && data.text.value) || '',
+          x: data.x,
+          y: data.y + 50
+        };
+        super(data, graphModel);
+        this.menu = [
+          {
+            className: 'lf-menu-delete',
+            text: 'delete',
+            callback(node) {
+              lf.deleteNode(node.id);
+            },
+          },
+          {
+            text: 'edit',
+            className: 'lf-menu-item',
+            callback(node) {
+              lf.editNodeText(node.id);
+            },
+          },
+          {
+            text: 'copy',
+            className: 'lf-menu-item',
+            callback(node) {
+              lf.cloneNode(node.id);
+            },
+          },
+        ];
+      }
+    }
+
+    return {
+      type: 'storInvTask',
+      view: Node,
+      model: Model,
+    };
+  });
+}
diff --git a/wms_pro/qd/src/views/wms/flow_manage/logicflow/registerNode/sequence.js b/wms_pro/qd/src/views/wms/flow_manage/logicflow/registerNode/sequence.js
new file mode 100644
index 00000000..ba31f75b
--- /dev/null
+++ b/wms_pro/qd/src/views/wms/flow_manage/logicflow/registerNode/sequence.js
@@ -0,0 +1,40 @@
+import { PolylineEdge, PolylineEdgeModel } from "@logicflow/core";
+
+class SequenceModel extends PolylineEdgeModel {
+  setAttributes() {
+    this.offset = 20;
+  }
+  getAnimation() {
+    const animation = super.getAnimation();
+    animation.stroke = "blue";
+    return animation;
+  }
+  getEdgeStyle() {
+    const style = super.getEdgeStyle();
+    const { properties } = this;
+    if (properties.isActived) {
+      style.strokeDasharray = "4 4";
+    }
+    style.stroke = "orange";
+    return style;
+  }
+  getTextStyle() {
+    const style = super.getTextStyle();
+    style.color = "#3451F1";
+    style.fontSize = 30;
+    style.background.fill = "#F2F131";
+    return style;
+  }
+  getOutlineStyle() {
+    const style = super.getOutlineStyle();
+    style.stroke = "red";
+    style.hover.stroke = "red";
+    return style;
+  }
+}
+
+export default {
+  type: "sequenceFlow",
+  view: PolylineEdge,
+  model: SequenceModel
+};
