From bbb54c1ab65d141219dfbf7efb2af086522667a0 Mon Sep 17 00:00:00 2001
From: mrzhssss <pro6@qq.com>
Date: 星期一, 10 一月 2022 16:59:09 +0800
Subject: [PATCH] 项目计划管理有些功能没实现

---
 src/main/java/zy/cloud/wms/manager/entity/ProjectPlan.java                    |  406 ++++++++
 src/main/webapp/views/item/item.html                                          |   81 
 src/main/webapp/views/projectStatus/projectStatus.html                        |  148 +++
 src/main/resources/mapper/ProjectTypeMapper.xml                               |   18 
 src/main/webapp/static/js/flowStatus/flowStatus.js                            |   10 
 src/main/webapp/static/js/projectType/projectType.js                          |  246 +++++
 src/main/java/zy/cloud/wms/manager/controller/ItemController.java             |   47 
 src/main/java/zy/cloud/wms/common/CodeBuilder.java                            |    2 
 src/main/resources/mapper/ProjectStatusMapper.xml                             |   23 
 src/main/java/zy/cloud/wms/manager/service/ProjectStatusService.java          |    8 
 src/main/java/zy/cloud/wms/manager/service/ProjectPlanService.java            |    8 
 src/main/java/zy/cloud/wms/manager/entity/ProjectType.java                    |  144 ++
 src/main/webapp/views/cstmr/cstmr.html                                        |    2 
 src/main/java/zy/cloud/wms/manager/controller/ProjectPlanController.java      |  149 +++
 src/main/webapp/views/projectPlan/projectPlan.html                            |  188 +++
 src/main/java/zy/cloud/wms/manager/controller/ProjectStatusController.java    |  125 ++
 src/main/webapp/static/js/projectStatus/projectStatus.js                      |  259 +++++
 src/main/webapp/static/js/projectPlan/projectPlan.js                          |  299 ++++++
 src/main/java/zy/cloud/wms/manager/controller/FlowStatusController.java       |   41 
 src/main/webapp/static/js/cstmr/cstmr.js                                      |    2 
 src/main/webapp/views/projectType/projectType.html                            |  118 ++
 src/main/java/projectPlan.sql                                                 |   18 
 src/main/webapp/views/flowStatus/flowStatus.html                              |   52 
 src/main/java/zy/cloud/wms/manager/mapper/ProjectTypeMapper.java              |   12 
 src/main/java/zy/cloud/wms/manager/service/impl/ProjectTypeServiceImpl.java   |   12 
 src/main/java/zy/cloud/wms/manager/entity/Item.java                           |    6 
 src/main/java/zy/cloud/wms/manager/entity/ProjectStatus.java                  |  238 ++++
 src/main/java/zy/cloud/wms/manager/controller/ProjectTypeController.java      |  126 ++
 /dev/null                                                                     |   18 
 src/main/java/zy/cloud/wms/manager/mapper/ProjectStatusMapper.java            |   12 
 src/main/java/zy/cloud/wms/manager/service/impl/ProjectStatusServiceImpl.java |   12 
 src/main/resources/mapper/ProjectPlanMapper.xml                               |   28 
 src/main/java/zy/cloud/wms/manager/mapper/ProjectPlanMapper.java              |   12 
 src/main/java/zy/cloud/wms/manager/service/ProjectTypeService.java            |    8 
 src/main/java/zy/cloud/wms/manager/service/impl/ProjectPlanServiceImpl.java   |   12 
 src/main/webapp/static/js/item/item.js                                        |   12 
 36 files changed, 2,785 insertions(+), 117 deletions(-)

diff --git a/src/main/java/flowStatus.sql b/src/main/java/flowStatus.sql
deleted file mode 100644
index ad5964f..0000000
--- a/src/main/java/flowStatus.sql
+++ /dev/null
@@ -1,18 +0,0 @@
--- save flowStatus record
--- mysql
-insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'flowStatus/flowStatus.html', 'flowStatus绠$悊', null , '2', null , '1');
-
-insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'flowStatus#view', '鏌ヨ', '', '3', '0', '1');
-insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'flowStatus#btn-add', '鏂板', '', '3', '1', '1');
-insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'flowStatus#btn-edit', '缂栬緫', '', '3', '2', '1');
-insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'flowStatus#btn-delete', '鍒犻櫎', '', '3', '3', '1');
-insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'flowStatus#btn-export', '瀵煎嚭', '', '3', '4', '1');
-
--- sqlserver
-insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'flowStatus/flowStatus.html', N'flowStatus绠$悊', null, '2', null, '1');
-
-insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'flowStatus#view', N'鏌ヨ', '', '3', '0', '1');
-insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'flowStatus#btn-add', N'鏂板', '', '3', '1', '1');
-insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'flowStatus#btn-edit', N'缂栬緫', '', '3', '2', '1');
-insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'flowStatus#btn-delete', N'鍒犻櫎', '', '3', '3', '1');
-insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'flowStatus#btn-export', N'瀵煎嚭', '', '3', '4', '1');
diff --git a/src/main/java/projectPlan.sql b/src/main/java/projectPlan.sql
new file mode 100644
index 0000000..a7972fa
--- /dev/null
+++ b/src/main/java/projectPlan.sql
@@ -0,0 +1,18 @@
+-- save projectPlan record
+-- mysql
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'projectPlan/projectPlan.html', 'projectPlan绠$悊', null , '2', null , '1');
+
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'projectPlan#view', '鏌ヨ', '', '3', '0', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'projectPlan#btn-add', '鏂板', '', '3', '1', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'projectPlan#btn-edit', '缂栬緫', '', '3', '2', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'projectPlan#btn-delete', '鍒犻櫎', '', '3', '3', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'projectPlan#btn-export', '瀵煎嚭', '', '3', '4', '1');
+
+-- sqlserver
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'projectPlan/projectPlan.html', N'projectPlan绠$悊', null, '2', null, '1');
+
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'projectPlan#view', N'鏌ヨ', '', '3', '0', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'projectPlan#btn-add', N'鏂板', '', '3', '1', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'projectPlan#btn-edit', N'缂栬緫', '', '3', '2', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'projectPlan#btn-delete', N'鍒犻櫎', '', '3', '3', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'projectPlan#btn-export', N'瀵煎嚭', '', '3', '4', '1');
diff --git a/src/main/java/zy/cloud/wms/common/CodeBuilder.java b/src/main/java/zy/cloud/wms/common/CodeBuilder.java
index e14e0c2..dddae57 100644
--- a/src/main/java/zy/cloud/wms/common/CodeBuilder.java
+++ b/src/main/java/zy/cloud/wms/common/CodeBuilder.java
@@ -23,7 +23,7 @@
         generator.url="localhost:1433;databasename=zypms";
         generator.username="sa";
         generator.password="sa@123";
-        generator.table="sys_flow_status";
+        generator.table="sys_project_plan";
         generator.packagePath="zy.cloud.wms.manager";
         generator.sqlOsType = SqlOsType.SQL_SERVER;
 //        generator.js = false;
diff --git a/src/main/java/zy/cloud/wms/manager/controller/FlowStatusController.java b/src/main/java/zy/cloud/wms/manager/controller/FlowStatusController.java
index bf75dc8..696796d 100644
--- a/src/main/java/zy/cloud/wms/manager/controller/FlowStatusController.java
+++ b/src/main/java/zy/cloud/wms/manager/controller/FlowStatusController.java
@@ -32,22 +32,24 @@
 
     @RequestMapping(value = "/flowStatus/list/auth")
     @ManagerAuth
-    public R list(@RequestParam(defaultValue = "1")Integer curr,
-                  @RequestParam(defaultValue = "10")Integer limit,
-                  @RequestParam(required = false)String orderByField,
-                  @RequestParam(required = false)String orderByType,
-                  @RequestParam Map<String, Object> param){
+    public R list(@RequestParam(defaultValue = "1") Integer curr,
+                  @RequestParam(defaultValue = "10") Integer limit,
+                  @RequestParam(required = false) String orderByField,
+                  @RequestParam(required = false) String orderByType,
+                  @RequestParam Map<String, Object> param) {
         EntityWrapper<FlowStatus> wrapper = new EntityWrapper<>();
         excludeTrash(param);
         convert(param, wrapper);
-        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        if (!Cools.isEmpty(orderByField)) {
+            wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));
+        }
         return R.ok(flowStatusService.selectPage(new Page<>(curr, limit), wrapper));
     }
 
-    private void convert(Map<String, Object> map, EntityWrapper wrapper){
-        for (Map.Entry<String, Object> entry : map.entrySet()){
+    private void convert(Map<String, Object> map, EntityWrapper wrapper) {
+        for (Map.Entry<String, Object> entry : map.entrySet()) {
             String val = String.valueOf(entry.getValue());
-            if (val.contains(RANGE_TIME_LINK)){
+            if (val.contains(RANGE_TIME_LINK)) {
                 String[] dates = val.split(RANGE_TIME_LINK);
                 wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
                 wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
@@ -64,10 +66,10 @@
         return R.ok();
     }
 
-	@RequestMapping(value = "/flowStatus/update/auth")
-	@ManagerAuth
-    public R update(FlowStatus flowStatus){
-        if (Cools.isEmpty(flowStatus) || null==flowStatus.getId()){
+    @RequestMapping(value = "/flowStatus/update/auth")
+    @ManagerAuth
+    public R update(FlowStatus flowStatus) {
+        if (Cools.isEmpty(flowStatus) || null == flowStatus.getId()) {
             return R.error();
         }
         flowStatusService.updateById(flowStatus);
@@ -76,16 +78,17 @@
 
     @RequestMapping(value = "/flowStatus/delete/auth")
     @ManagerAuth
-    public R delete(@RequestParam(value="ids[]") Long[] ids){
-         for (Long id : ids){
-            flowStatusService.deleteById(id);
+    public R delete(@RequestParam(value = "ids[]") Long[] ids) {
+        for (Long id : ids) {
+            flowStatusService.delete(new EntityWrapper<FlowStatus>()
+                    .eq("id",id));
         }
         return R.ok();
     }
 
     @RequestMapping(value = "/flowStatus/export/auth")
     @ManagerAuth
-    public R export(@RequestBody JSONObject param){
+    public R export(@RequestBody JSONObject param) {
         EntityWrapper<FlowStatus> wrapper = new EntityWrapper<>();
         List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
         Map<String, Object> map = excludeTrash(param.getJSONObject("flowStatus"));
@@ -101,7 +104,7 @@
         wrapper.like("id", condition);
         Page<FlowStatus> page = flowStatusService.selectPage(new Page<>(0, 10), wrapper);
         List<Map<String, Object>> result = new ArrayList<>();
-        for (FlowStatus flowStatus : page.getRecords()){
+        for (FlowStatus flowStatus : page.getRecords()) {
             Map<String, Object> map = new HashMap<>();
             map.put("id", flowStatus.getId());
             map.put("value", flowStatus.getId());
@@ -114,7 +117,7 @@
     @ManagerAuth
     public R query(@RequestBody JSONObject param) {
         Wrapper<FlowStatus> wrapper = new EntityWrapper<FlowStatus>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
-        if (null != flowStatusService.selectOne(wrapper)){
+        if (null != flowStatusService.selectOne(wrapper)) {
             return R.parse(BaseRes.REPEAT).add(getComment(FlowStatus.class, String.valueOf(param.get("key"))));
         }
         return R.ok();
diff --git a/src/main/java/zy/cloud/wms/manager/controller/ItemController.java b/src/main/java/zy/cloud/wms/manager/controller/ItemController.java
index 5444d54..5644309 100644
--- a/src/main/java/zy/cloud/wms/manager/controller/ItemController.java
+++ b/src/main/java/zy/cloud/wms/manager/controller/ItemController.java
@@ -13,8 +13,12 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import zy.cloud.wms.common.web.BaseController;
+import zy.cloud.wms.manager.entity.Cstmr;
 import zy.cloud.wms.manager.entity.Item;
+import zy.cloud.wms.manager.entity.ProjectType;
+import zy.cloud.wms.manager.service.CstmrService;
 import zy.cloud.wms.manager.service.ItemService;
+import zy.cloud.wms.manager.service.ProjectTypeService;
 
 import java.util.*;
 
@@ -23,6 +27,10 @@
 
     @Autowired
     private ItemService itemService;
+    @Autowired
+    private CstmrService cstmrService;
+    @Autowired
+    private ProjectTypeService projectTypeService;
 
     @RequestMapping(value = "/item/{id}/auth")
     @ManagerAuth
@@ -62,6 +70,24 @@
     @ManagerAuth
     public R add(Item item) {
 
+        if (Cools.isEmpty(item)) {
+            return R.error("鍙傛暟涓虹┖,璇疯仈绯荤鐞嗗憳");
+        }
+        Cstmr user_code = cstmrService.selectOne(new EntityWrapper<Cstmr>()
+                .eq("user_code", item.getCstmrUuid()));
+        if (!Cools.isEmpty(user_code)) {
+            item.setCstmr(user_code.getName());
+        }else {
+            return R.error("鍙傛暟閿欒,璇疯緭鍏ユ纭殑瀹㈡埛缂栧彿");
+        }
+        ProjectType id = projectTypeService.selectOne(new EntityWrapper<ProjectType>()
+                .eq("id", item.getType()));
+        if (!Cools.isEmpty(id)) {
+            item.setType(id.getTypeName());
+        }else {
+            return R.error("鍙傛暟閿欒,鎵句笉鍒拌椤圭洰绫诲瀷");
+        }
+
         item.setHostId(getHostId());
         item.setCreateBy(getUserId());
         item.setCreateTime(new Date());
@@ -75,9 +101,26 @@
 	@RequestMapping(value = "/item/update/auth")
 	@ManagerAuth
     public R update(Item item){
-        if (Cools.isEmpty(item) || null==item.getUuid()){
-            return R.error();
+        if (Cools.isEmpty(item)) {
+            return R.error("鍙傛暟涓虹┖,璇疯仈绯荤鐞嗗憳");
         }
+        Cstmr user_code = cstmrService.selectOne(new EntityWrapper<Cstmr>()
+                .eq("user_code", item.getCstmrUuid()));
+        if (!Cools.isEmpty(user_code)) {
+            item.setCstmr(user_code.getName());
+        }else {
+            return R.error("鍙傛暟閿欒,璇疯緭鍏ユ纭殑瀹㈡埛缂栧彿");
+        }
+        ProjectType id = projectTypeService.selectOne(new EntityWrapper<ProjectType>()
+                .eq("id", item.getType()));
+        if (!Cools.isEmpty(id)) {
+            item.setType(id.getTypeName());
+        }else {
+            return R.error("鍙傛暟閿欒,鎵句笉鍒拌椤圭洰绫诲瀷");
+        }
+//        if (Cools.isEmpty(item) || null==item.getUuid()){
+//            return R.error();
+//        }
         item.setUpdateBy(getUserId());
         item.setUpdateTime(new Date());
         itemService.updateById(item);
diff --git a/src/main/java/zy/cloud/wms/manager/controller/ProjectPlanController.java b/src/main/java/zy/cloud/wms/manager/controller/ProjectPlanController.java
new file mode 100644
index 0000000..8641548
--- /dev/null
+++ b/src/main/java/zy/cloud/wms/manager/controller/ProjectPlanController.java
@@ -0,0 +1,149 @@
+package zy.cloud.wms.manager.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.common.DateUtils;
+import zy.cloud.wms.manager.entity.Item;
+import zy.cloud.wms.manager.entity.Node;
+import zy.cloud.wms.manager.entity.ProjectPlan;
+import zy.cloud.wms.manager.service.ItemService;
+import zy.cloud.wms.manager.service.ProjectPlanService;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.R;
+import zy.cloud.wms.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+@RestController
+public class ProjectPlanController extends BaseController {
+
+    @Autowired
+    private ProjectPlanService projectPlanService;
+    @Autowired
+    private ItemService itemService;
+
+    @RequestMapping(value = "/projectPlan/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(projectPlanService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/projectPlan/list/auth")
+    @ManagerAuth
+    public R list(@RequestParam(defaultValue = "1") Integer curr,
+                  @RequestParam(defaultValue = "10") Integer limit,
+                  @RequestParam(required = false) String orderByField,
+                  @RequestParam(required = false) String orderByType,
+                  @RequestParam Map<String, Object> param,
+                  @RequestParam String target) {
+        param.remove("target");
+        EntityWrapper<ProjectPlan> wrapper = new EntityWrapper<>();
+        wrapper.eq("item_id",target);
+        excludeTrash(param);
+        convert(param, wrapper);
+        if (!Cools.isEmpty(orderByField)) {
+            wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));
+        }
+        return R.ok(projectPlanService.selectPage(new Page<>(curr, limit), wrapper));
+    }
+
+    private void convert(Map<String, Object> map, EntityWrapper wrapper) {
+        for (Map.Entry<String, Object> entry : map.entrySet()) {
+            String val = String.valueOf(entry.getValue());
+            if (val.contains(RANGE_TIME_LINK)) {
+                String[] dates = val.split(RANGE_TIME_LINK);
+                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
+                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
+            } else {
+                wrapper.like(entry.getKey(), val);
+            }
+        }
+    }
+
+    @RequestMapping(value = "/projectPlan/add/auth")
+    @ManagerAuth
+    public R add(ProjectPlan projectPlan) {
+        projectPlanService.insert(projectPlan);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/projectPlan/update/auth")
+    @ManagerAuth
+    public R update(ProjectPlan projectPlan) {
+        if (Cools.isEmpty(projectPlan) || null == projectPlan.getId()) {
+            return R.error();
+        }
+        projectPlanService.updateById(projectPlan);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/projectPlan/delete/auth")
+    @ManagerAuth
+    public R delete(@RequestParam(value = "ids[]") Long[] ids) {
+        for (Long id : ids) {
+            projectPlanService.deleteById(id);
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/projectPlan/export/auth")
+    @ManagerAuth
+    public R export(@RequestBody JSONObject param) {
+        EntityWrapper<ProjectPlan> wrapper = new EntityWrapper<>();
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        Map<String, Object> map = excludeTrash(param.getJSONObject("projectPlan"));
+        convert(map, wrapper);
+        List<ProjectPlan> list = projectPlanService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/projectPlanQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<ProjectPlan> wrapper = new EntityWrapper<>();
+        wrapper.like("id", condition);
+        Page<ProjectPlan> page = projectPlanService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (ProjectPlan projectPlan : page.getRecords()) {
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", projectPlan.getId());
+            map.put("value", projectPlan.getId());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/projectPlan/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<ProjectPlan> wrapper = new EntityWrapper<ProjectPlan>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != projectPlanService.selectOne(wrapper)) {
+            return R.parse(BaseRes.REPEAT).add(getComment(ProjectPlan.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+    @RequestMapping("/projectPlan/allProjects")
+    public R allProjects() {
+
+        List<Item> items = itemService.selectList(null);
+
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (Item item : items) {
+            Map<String, Object> map = new HashMap<>();
+            map.put("key", item.getId());
+            map.put("val", item.getName());
+            result.add(map);
+        }
+        return R.ok().add(result);
+
+    }
+
+}
diff --git a/src/main/java/zy/cloud/wms/manager/controller/ProjectStatusController.java b/src/main/java/zy/cloud/wms/manager/controller/ProjectStatusController.java
new file mode 100644
index 0000000..c0648f2
--- /dev/null
+++ b/src/main/java/zy/cloud/wms/manager/controller/ProjectStatusController.java
@@ -0,0 +1,125 @@
+package zy.cloud.wms.manager.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.common.DateUtils;
+import zy.cloud.wms.manager.entity.ProjectStatus;
+import zy.cloud.wms.manager.service.ProjectStatusService;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.R;
+import zy.cloud.wms.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+@RestController
+public class ProjectStatusController extends BaseController {
+
+    @Autowired
+    private ProjectStatusService projectStatusService;
+
+    @RequestMapping(value = "/projectStatus/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(projectStatusService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/projectStatus/list/auth")
+    @ManagerAuth
+    public R list(@RequestParam(defaultValue = "1")Integer curr,
+                  @RequestParam(defaultValue = "10")Integer limit,
+                  @RequestParam(required = false)String orderByField,
+                  @RequestParam(required = false)String orderByType,
+                  @RequestParam Map<String, Object> param){
+        EntityWrapper<ProjectStatus> wrapper = new EntityWrapper<>();
+        excludeTrash(param);
+        convert(param, wrapper);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        return R.ok(projectStatusService.selectPage(new Page<>(curr, limit), wrapper));
+    }
+
+    private void convert(Map<String, Object> map, EntityWrapper wrapper){
+        for (Map.Entry<String, Object> entry : map.entrySet()){
+            String val = String.valueOf(entry.getValue());
+            if (val.contains(RANGE_TIME_LINK)){
+                String[] dates = val.split(RANGE_TIME_LINK);
+                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
+                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
+            } else {
+                wrapper.like(entry.getKey(), val);
+            }
+        }
+    }
+
+    @RequestMapping(value = "/projectStatus/add/auth")
+    @ManagerAuth
+    public R add(ProjectStatus projectStatus) {
+        projectStatusService.insert(projectStatus);
+        return R.ok();
+    }
+
+	@RequestMapping(value = "/projectStatus/update/auth")
+	@ManagerAuth
+    public R update(ProjectStatus projectStatus){
+        if (Cools.isEmpty(projectStatus) || null==projectStatus.getId()){
+            return R.error();
+        }
+        projectStatusService.updateById(projectStatus);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/projectStatus/delete/auth")
+    @ManagerAuth
+    public R delete(@RequestParam(value="ids[]") Long[] ids){
+
+         for (Long id : ids){
+            projectStatusService.delete(new EntityWrapper<ProjectStatus>()
+                    .eq("id",id));
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/projectStatus/export/auth")
+    @ManagerAuth
+    public R export(@RequestBody JSONObject param){
+        EntityWrapper<ProjectStatus> wrapper = new EntityWrapper<>();
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        Map<String, Object> map = excludeTrash(param.getJSONObject("projectStatus"));
+        convert(map, wrapper);
+        List<ProjectStatus> list = projectStatusService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/projectStatusQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<ProjectStatus> wrapper = new EntityWrapper<>();
+        wrapper.like("id", condition);
+        Page<ProjectStatus> page = projectStatusService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (ProjectStatus projectStatus : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", projectStatus.getId());
+            map.put("value", projectStatus.getId());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/projectStatus/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<ProjectStatus> wrapper = new EntityWrapper<ProjectStatus>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != projectStatusService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(ProjectStatus.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+}
diff --git a/src/main/java/zy/cloud/wms/manager/controller/ProjectTypeController.java b/src/main/java/zy/cloud/wms/manager/controller/ProjectTypeController.java
new file mode 100644
index 0000000..320fd9b
--- /dev/null
+++ b/src/main/java/zy/cloud/wms/manager/controller/ProjectTypeController.java
@@ -0,0 +1,126 @@
+package zy.cloud.wms.manager.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.common.DateUtils;
+import zy.cloud.wms.manager.entity.ProjectType;
+import zy.cloud.wms.manager.service.ProjectTypeService;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.R;
+import zy.cloud.wms.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+@RestController
+public class ProjectTypeController extends BaseController {
+
+    @Autowired
+    private ProjectTypeService projectTypeService;
+
+    @RequestMapping(value = "/projectType/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(projectTypeService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/projectType/list/auth")
+    @ManagerAuth
+    public R list(@RequestParam(defaultValue = "1") Integer curr,
+                  @RequestParam(defaultValue = "10") Integer limit,
+                  @RequestParam(required = false) String orderByField,
+                  @RequestParam(required = false) String orderByType,
+                  @RequestParam Map<String, Object> param) {
+        EntityWrapper<ProjectType> wrapper = new EntityWrapper<>();
+        excludeTrash(param);
+        convert(param, wrapper);
+        if (!Cools.isEmpty(orderByField)) {
+            wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));
+        }
+        return R.ok(projectTypeService.selectPage(new Page<>(curr, limit), wrapper));
+    }
+
+    private void convert(Map<String, Object> map, EntityWrapper wrapper) {
+        for (Map.Entry<String, Object> entry : map.entrySet()) {
+            String val = String.valueOf(entry.getValue());
+            if (val.contains(RANGE_TIME_LINK)) {
+                String[] dates = val.split(RANGE_TIME_LINK);
+                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
+                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
+            } else {
+                wrapper.like(entry.getKey(), val);
+            }
+        }
+    }
+
+    @RequestMapping(value = "/projectType/add/auth")
+    @ManagerAuth
+    public R add(ProjectType projectType) {
+        projectTypeService.insert(projectType);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/projectType/update/auth")
+    @ManagerAuth
+    public R update(ProjectType projectType) {
+        if (Cools.isEmpty(projectType) || null == projectType.getId()) {
+            return R.error();
+        }
+        projectTypeService.updateById(projectType);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/projectType/delete/auth")
+    @ManagerAuth
+    public R delete(@RequestParam(value = "ids[]") Long[] ids) {
+        for (Long id : ids) {
+            projectTypeService.delete(new EntityWrapper<ProjectType>()
+                    .eq("id",id));
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/projectType/export/auth")
+    @ManagerAuth
+    public R export(@RequestBody JSONObject param) {
+        EntityWrapper<ProjectType> wrapper = new EntityWrapper<>();
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        Map<String, Object> map = excludeTrash(param.getJSONObject("projectType"));
+        convert(map, wrapper);
+        List<ProjectType> list = projectTypeService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/projectTypeQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<ProjectType> wrapper = new EntityWrapper<>();
+        wrapper.like("id", condition);
+        Page<ProjectType> page = projectTypeService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (ProjectType projectType : page.getRecords()) {
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", projectType.getId());
+            map.put("value", projectType.getId());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/projectType/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<ProjectType> wrapper = new EntityWrapper<ProjectType>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != projectTypeService.selectOne(wrapper)) {
+            return R.parse(BaseRes.REPEAT).add(getComment(ProjectType.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+}
diff --git a/src/main/java/zy/cloud/wms/manager/entity/Item.java b/src/main/java/zy/cloud/wms/manager/entity/Item.java
index 84ade5b..de67d78 100644
--- a/src/main/java/zy/cloud/wms/manager/entity/Item.java
+++ b/src/main/java/zy/cloud/wms/manager/entity/Item.java
@@ -144,12 +144,14 @@
     @TableField("type")
     private String type;
 
-    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+
     @TableField("real_start_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
     private Date realStartTime;
 
-    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+
     @TableField("real_end_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
     private Date realEndTime;
 
     @TableField("real_month")
diff --git a/src/main/java/zy/cloud/wms/manager/entity/ProjectPlan.java b/src/main/java/zy/cloud/wms/manager/entity/ProjectPlan.java
new file mode 100644
index 0000000..402305c
--- /dev/null
+++ b/src/main/java/zy/cloud/wms/manager/entity/ProjectPlan.java
@@ -0,0 +1,406 @@
+package zy.cloud.wms.manager.entity;
+
+import com.core.common.Cools;import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.enums.IdType;
+import com.baomidou.mybatisplus.annotations.TableField;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import io.swagger.annotations.ApiModelProperty;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import io.swagger.annotations.ApiModelProperty;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import io.swagger.annotations.ApiModelProperty;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiModelProperty;
+
+import com.baomidou.mybatisplus.annotations.TableName;
+import java.io.Serializable;
+
+@TableName("sys_project_plan")
+public class ProjectPlan implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 鍞竴ID
+     */
+    @ApiModelProperty(value= "鍞竴ID")
+    private Long id;
+
+    /**
+     * 椤圭洰ID
+     */
+    @ApiModelProperty(value= "椤圭洰ID")
+    @TableId(value = "item_id", type = IdType.INPUT)
+    @TableField("item_id")
+    private Long itemId;
+
+    /**
+     * 鏉冮噸ID
+     */
+    @ApiModelProperty(value= "鏉冮噸ID")
+    @TableId(value = "weight_num", type = IdType.INPUT)
+    @TableField("weight_num")
+    private Integer weightNum;
+
+    /**
+     * 鑺傜偣ID
+     */
+    @ApiModelProperty(value= "鑺傜偣ID")
+    @TableField("flow_id")
+    private Integer flowId;
+
+    /**
+     * 鍚姩鏃ユ湡
+     */
+    @ApiModelProperty(value= "鍚姩鏃ユ湡")
+    @TableField("start_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date startTime;
+
+    /**
+     * 瀹為檯鍚姩鏃ユ湡
+     */
+    @ApiModelProperty(value= "瀹為檯鍚姩鏃ユ湡")
+    @TableField("real_start_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date realStartTime;
+
+    /**
+     * 缁撴潫鏃ユ湡
+     */
+    @ApiModelProperty(value= "缁撴潫鏃ユ湡")
+    @TableField("end_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date endTime;
+
+    /**
+     * 瀹為檯缁撴潫鏃ユ湡
+     */
+    @ApiModelProperty(value= "瀹為檯缁撴潫鏃ユ湡")
+    @TableField("real_end_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date realEndTime;
+
+    /**
+     * 寤舵湡澶╂暟
+     */
+    @ApiModelProperty(value= "寤舵湡澶╂暟")
+    private Integer delay;
+
+    /**
+     * 寤舵湡鍘熷洜
+     */
+    @ApiModelProperty(value= "寤舵湡鍘熷洜")
+    @TableField("delay_reason")
+    private String delayReason;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value= "澶囨敞")
+    private String memo;
+
+    /**
+     * 璐d换閮ㄩ棬
+     */
+    @ApiModelProperty(value= "璐d换閮ㄩ棬")
+    @TableField("duty_department")
+    private String dutyDepartment;
+
+    /**
+     * 璐d换浜�
+     */
+    @ApiModelProperty(value= "璐d换浜�")
+    @TableField("duty_man")
+    private String dutyMan;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @ApiModelProperty(value= "鍒涘缓鏃堕棿")
+    @TableField("create_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 鍒涘缓浜篿d
+     */
+    @ApiModelProperty(value= "鍒涘缓浜篿d")
+    @TableField("create_id")
+    private Integer createId;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty(value= "淇敼鏃堕棿")
+    @TableField("modify_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date modifyTime;
+
+    /**
+     * 淇敼浜篿d
+     */
+    @ApiModelProperty(value= "淇敼浜篿d")
+    @TableField("modify_id")
+    private Integer modifyId;
+
+    /**
+     * 鑺傜偣鍚嶇О
+     */
+    @ApiModelProperty(value= "鑺傜偣鍚嶇О")
+    @TableField("flow_name")
+    private String flowName;
+
+    public ProjectPlan() {}
+
+    public ProjectPlan(Long itemId,Integer weightNum,Integer flowId,Date startTime,Date realStartTime,Date endTime,Date realEndTime,Integer delay,String delayReason,String memo,String dutyDepartment,String dutyMan,Date createTime,Integer createId,Date modifyTime,Integer modifyId,String flowName) {
+        this.itemId = itemId;
+        this.weightNum = weightNum;
+        this.flowId = flowId;
+        this.startTime = startTime;
+        this.realStartTime = realStartTime;
+        this.endTime = endTime;
+        this.realEndTime = realEndTime;
+        this.delay = delay;
+        this.delayReason = delayReason;
+        this.memo = memo;
+        this.dutyDepartment = dutyDepartment;
+        this.dutyMan = dutyMan;
+        this.createTime = createTime;
+        this.createId = createId;
+        this.modifyTime = modifyTime;
+        this.modifyId = modifyId;
+        this.flowName = flowName;
+    }
+
+//    ProjectPlan projectPlan = new ProjectPlan(
+//            null,    // 椤圭洰ID[闈炵┖]
+//            null,    // 鏉冮噸ID[闈炵┖]
+//            null,    // 鑺傜偣ID[闈炵┖]
+//            null,    // 鍚姩鏃ユ湡[闈炵┖]
+//            null,    // 瀹為檯鍚姩鏃ユ湡
+//            null,    // 缁撴潫鏃ユ湡[闈炵┖]
+//            null,    // 瀹為檯缁撴潫鏃ユ湡
+//            null,    // 寤舵湡澶╂暟
+//            null,    // 寤舵湡鍘熷洜
+//            null,    // 澶囨敞
+//            null,    // 璐d换閮ㄩ棬
+//            null,    // 璐d换浜�
+//            null,    // 鍒涘缓鏃堕棿
+//            null,    // 鍒涘缓浜篿d
+//            null,    // 淇敼鏃堕棿
+//            null,    // 淇敼浜篿d
+//            null    // 鑺傜偣鍚嶇О
+//    );
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getItemId() {
+        return itemId;
+    }
+
+    public void setItemId(Long itemId) {
+        this.itemId = itemId;
+    }
+
+    public Integer getWeightNum() {
+        return weightNum;
+    }
+
+    public void setWeightNum(Integer weightNum) {
+        this.weightNum = weightNum;
+    }
+
+    public Integer getFlowId() {
+        return flowId;
+    }
+
+    public void setFlowId(Integer flowId) {
+        this.flowId = flowId;
+    }
+
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public String getStartTime$(){
+        if (Cools.isEmpty(this.startTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.startTime);
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public Date getRealStartTime() {
+        return realStartTime;
+    }
+
+    public String getRealStartTime$(){
+        if (Cools.isEmpty(this.realStartTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.realStartTime);
+    }
+
+    public void setRealStartTime(Date realStartTime) {
+        this.realStartTime = realStartTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public String getEndTime$(){
+        if (Cools.isEmpty(this.endTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.endTime);
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
+    public Date getRealEndTime() {
+        return realEndTime;
+    }
+
+    public String getRealEndTime$(){
+        if (Cools.isEmpty(this.realEndTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.realEndTime);
+    }
+
+    public void setRealEndTime(Date realEndTime) {
+        this.realEndTime = realEndTime;
+    }
+
+    public Integer getDelay() {
+        return delay;
+    }
+
+    public void setDelay(Integer delay) {
+        this.delay = delay;
+    }
+
+    public String getDelayReason() {
+        return delayReason;
+    }
+
+    public void setDelayReason(String delayReason) {
+        this.delayReason = delayReason;
+    }
+
+    public String getMemo() {
+        return memo;
+    }
+
+    public void setMemo(String memo) {
+        this.memo = memo;
+    }
+
+    public String getDutyDepartment() {
+        return dutyDepartment;
+    }
+
+    public void setDutyDepartment(String dutyDepartment) {
+        this.dutyDepartment = dutyDepartment;
+    }
+
+    public String getDutyMan() {
+        return dutyMan;
+    }
+
+    public void setDutyMan(String dutyMan) {
+        this.dutyMan = dutyMan;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public String getCreateTime$(){
+        if (Cools.isEmpty(this.createTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Integer getCreateId() {
+        return createId;
+    }
+
+    public void setCreateId(Integer createId) {
+        this.createId = createId;
+    }
+
+    public Date getModifyTime() {
+        return modifyTime;
+    }
+
+    public String getModifyTime$(){
+        if (Cools.isEmpty(this.modifyTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.modifyTime);
+    }
+
+    public void setModifyTime(Date modifyTime) {
+        this.modifyTime = modifyTime;
+    }
+
+    public Integer getModifyId() {
+        return modifyId;
+    }
+
+    public void setModifyId(Integer modifyId) {
+        this.modifyId = modifyId;
+    }
+
+    public String getFlowName() {
+        return flowName;
+    }
+
+    public void setFlowName(String flowName) {
+        this.flowName = flowName;
+    }
+
+
+}
diff --git a/src/main/java/zy/cloud/wms/manager/entity/ProjectStatus.java b/src/main/java/zy/cloud/wms/manager/entity/ProjectStatus.java
new file mode 100644
index 0000000..14ec556
--- /dev/null
+++ b/src/main/java/zy/cloud/wms/manager/entity/ProjectStatus.java
@@ -0,0 +1,238 @@
+package zy.cloud.wms.manager.entity;
+
+import com.core.common.Cools;import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.enums.IdType;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotations.TableField;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import io.swagger.annotations.ApiModelProperty;
+import org.springframework.format.annotation.DateTimeFormat;
+import io.swagger.annotations.ApiModelProperty;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiModelProperty;
+
+import com.baomidou.mybatisplus.annotations.TableName;
+import java.io.Serializable;
+
+@TableName("sys_project_status")
+public class ProjectStatus implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value= "")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value= "")
+    @TableField("status_id")
+    private Integer statusId;
+
+    @ApiModelProperty(value= "")
+    @TableField("status_name")
+    private String statusName;
+
+    @ApiModelProperty(value= "")
+    private Integer type;
+
+    @ApiModelProperty(value= "")
+    @TableField("status_class")
+    private Integer statusClass;
+
+    @ApiModelProperty(value= "")
+    private String memo;
+
+    @ApiModelProperty(value= "")
+    @TableField("create_id")
+    private String createId;
+
+    @ApiModelProperty(value= "")
+    @TableField("create_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    @ApiModelProperty(value= "")
+    @TableField("modify_id")
+    private String modifyId;
+
+    @ApiModelProperty(value= "")
+    @TableField("modify_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date modifyTime;
+
+    @ApiModelProperty(value= "")
+    @TableField("str_1")
+    private String str1;
+
+    @ApiModelProperty(value= "")
+    @TableField("str_2")
+    private String str2;
+
+    @ApiModelProperty(value= "")
+    @TableField("str_3")
+    private String str3;
+
+    public ProjectStatus() {}
+
+    public ProjectStatus(Integer id,Integer statusId,String statusName,Integer type,Integer statusClass,String memo,String createId,Date createTime,String modifyId,Date modifyTime,String str1,String str2,String str3) {
+        this.id = id;
+        this.statusId = statusId;
+        this.statusName = statusName;
+        this.type = type;
+        this.statusClass = statusClass;
+        this.memo = memo;
+        this.createId = createId;
+        this.createTime = createTime;
+        this.modifyId = modifyId;
+        this.modifyTime = modifyTime;
+        this.str1 = str1;
+        this.str2 = str2;
+        this.str3 = str3;
+    }
+
+//    ProjectStatus projectStatus = new ProjectStatus(
+//            null,    // [闈炵┖]
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null    // 
+//    );
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getStatusId() {
+        return statusId;
+    }
+
+    public void setStatusId(Integer statusId) {
+        this.statusId = statusId;
+    }
+
+    public String getStatusName() {
+        return statusName;
+    }
+
+    public void setStatusName(String statusName) {
+        this.statusName = statusName;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public Integer getStatusClass() {
+        return statusClass;
+    }
+
+    public void setStatusClass(Integer statusClass) {
+        this.statusClass = statusClass;
+    }
+
+    public String getMemo() {
+        return memo;
+    }
+
+    public void setMemo(String memo) {
+        this.memo = memo;
+    }
+
+    public String getCreateId() {
+        return createId;
+    }
+
+    public void setCreateId(String createId) {
+        this.createId = createId;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public String getCreateTime$(){
+        if (Cools.isEmpty(this.createTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getModifyId() {
+        return modifyId;
+    }
+
+    public void setModifyId(String modifyId) {
+        this.modifyId = modifyId;
+    }
+
+    public Date getModifyTime() {
+        return modifyTime;
+    }
+
+    public String getModifyTime$(){
+        if (Cools.isEmpty(this.modifyTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.modifyTime);
+    }
+
+    public void setModifyTime(Date modifyTime) {
+        this.modifyTime = modifyTime;
+    }
+
+    public String getStr1() {
+        return str1;
+    }
+
+    public void setStr1(String str1) {
+        this.str1 = str1;
+    }
+
+    public String getStr2() {
+        return str2;
+    }
+
+    public void setStr2(String str2) {
+        this.str2 = str2;
+    }
+
+    public String getStr3() {
+        return str3;
+    }
+
+    public void setStr3(String str3) {
+        this.str3 = str3;
+    }
+
+
+}
diff --git a/src/main/java/zy/cloud/wms/manager/entity/ProjectType.java b/src/main/java/zy/cloud/wms/manager/entity/ProjectType.java
new file mode 100644
index 0000000..f56df81
--- /dev/null
+++ b/src/main/java/zy/cloud/wms/manager/entity/ProjectType.java
@@ -0,0 +1,144 @@
+package zy.cloud.wms.manager.entity;
+
+import com.core.common.Cools;import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.enums.IdType;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotations.TableField;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiModelProperty;
+
+import com.baomidou.mybatisplus.annotations.TableName;
+import java.io.Serializable;
+
+@TableName("sys_project_type")
+public class ProjectType implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value= "")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value= "")
+    @TableField("type_id")
+    private Integer typeId;
+
+    @ApiModelProperty(value= "")
+    @TableField("type_name")
+    private String typeName;
+
+    @ApiModelProperty(value= "")
+    @TableField("type_status")
+    private Integer typeStatus;
+
+    @ApiModelProperty(value= "")
+    @TableField("type_class")
+    private Integer typeClass;
+
+    @ApiModelProperty(value= "")
+    @TableField("str_1")
+    private String str1;
+
+    @ApiModelProperty(value= "")
+    @TableField("str_2")
+    private String str2;
+
+    @ApiModelProperty(value= "")
+    @TableField("str_3")
+    private String str3;
+
+    public ProjectType() {}
+
+    public ProjectType(Integer id,Integer typeId,String typeName,Integer typeStatus,Integer typeClass,String str1,String str2,String str3) {
+        this.id = id;
+        this.typeId = typeId;
+        this.typeName = typeName;
+        this.typeStatus = typeStatus;
+        this.typeClass = typeClass;
+        this.str1 = str1;
+        this.str2 = str2;
+        this.str3 = str3;
+    }
+
+//    ProjectType projectType = new ProjectType(
+//            null,    // [闈炵┖]
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null    // 
+//    );
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getTypeId() {
+        return typeId;
+    }
+
+    public void setTypeId(Integer typeId) {
+        this.typeId = typeId;
+    }
+
+    public String getTypeName() {
+        return typeName;
+    }
+
+    public void setTypeName(String typeName) {
+        this.typeName = typeName;
+    }
+
+    public Integer getTypeStatus() {
+        return typeStatus;
+    }
+
+    public void setTypeStatus(Integer typeStatus) {
+        this.typeStatus = typeStatus;
+    }
+
+    public Integer getTypeClass() {
+        return typeClass;
+    }
+
+    public void setTypeClass(Integer typeClass) {
+        this.typeClass = typeClass;
+    }
+
+    public String getStr1() {
+        return str1;
+    }
+
+    public void setStr1(String str1) {
+        this.str1 = str1;
+    }
+
+    public String getStr2() {
+        return str2;
+    }
+
+    public void setStr2(String str2) {
+        this.str2 = str2;
+    }
+
+    public String getStr3() {
+        return str3;
+    }
+
+    public void setStr3(String str3) {
+        this.str3 = str3;
+    }
+
+
+}
diff --git a/src/main/java/zy/cloud/wms/manager/mapper/ProjectPlanMapper.java b/src/main/java/zy/cloud/wms/manager/mapper/ProjectPlanMapper.java
new file mode 100644
index 0000000..777338d
--- /dev/null
+++ b/src/main/java/zy/cloud/wms/manager/mapper/ProjectPlanMapper.java
@@ -0,0 +1,12 @@
+package zy.cloud.wms.manager.mapper;
+
+import zy.cloud.wms.manager.entity.ProjectPlan;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface ProjectPlanMapper extends BaseMapper<ProjectPlan> {
+
+}
diff --git a/src/main/java/zy/cloud/wms/manager/mapper/ProjectStatusMapper.java b/src/main/java/zy/cloud/wms/manager/mapper/ProjectStatusMapper.java
new file mode 100644
index 0000000..ebdbd94
--- /dev/null
+++ b/src/main/java/zy/cloud/wms/manager/mapper/ProjectStatusMapper.java
@@ -0,0 +1,12 @@
+package zy.cloud.wms.manager.mapper;
+
+import zy.cloud.wms.manager.entity.ProjectStatus;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface ProjectStatusMapper extends BaseMapper<ProjectStatus> {
+
+}
diff --git a/src/main/java/zy/cloud/wms/manager/mapper/ProjectTypeMapper.java b/src/main/java/zy/cloud/wms/manager/mapper/ProjectTypeMapper.java
new file mode 100644
index 0000000..43220b3
--- /dev/null
+++ b/src/main/java/zy/cloud/wms/manager/mapper/ProjectTypeMapper.java
@@ -0,0 +1,12 @@
+package zy.cloud.wms.manager.mapper;
+
+import zy.cloud.wms.manager.entity.ProjectType;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface ProjectTypeMapper extends BaseMapper<ProjectType> {
+
+}
diff --git a/src/main/java/zy/cloud/wms/manager/service/ProjectPlanService.java b/src/main/java/zy/cloud/wms/manager/service/ProjectPlanService.java
new file mode 100644
index 0000000..e66b71b
--- /dev/null
+++ b/src/main/java/zy/cloud/wms/manager/service/ProjectPlanService.java
@@ -0,0 +1,8 @@
+package zy.cloud.wms.manager.service;
+
+import zy.cloud.wms.manager.entity.ProjectPlan;
+import com.baomidou.mybatisplus.service.IService;
+
+public interface ProjectPlanService extends IService<ProjectPlan> {
+
+}
diff --git a/src/main/java/zy/cloud/wms/manager/service/ProjectStatusService.java b/src/main/java/zy/cloud/wms/manager/service/ProjectStatusService.java
new file mode 100644
index 0000000..9fd57ff
--- /dev/null
+++ b/src/main/java/zy/cloud/wms/manager/service/ProjectStatusService.java
@@ -0,0 +1,8 @@
+package zy.cloud.wms.manager.service;
+
+import zy.cloud.wms.manager.entity.ProjectStatus;
+import com.baomidou.mybatisplus.service.IService;
+
+public interface ProjectStatusService extends IService<ProjectStatus> {
+
+}
diff --git a/src/main/java/zy/cloud/wms/manager/service/ProjectTypeService.java b/src/main/java/zy/cloud/wms/manager/service/ProjectTypeService.java
new file mode 100644
index 0000000..ae4be99
--- /dev/null
+++ b/src/main/java/zy/cloud/wms/manager/service/ProjectTypeService.java
@@ -0,0 +1,8 @@
+package zy.cloud.wms.manager.service;
+
+import zy.cloud.wms.manager.entity.ProjectType;
+import com.baomidou.mybatisplus.service.IService;
+
+public interface ProjectTypeService extends IService<ProjectType> {
+
+}
diff --git a/src/main/java/zy/cloud/wms/manager/service/impl/ProjectPlanServiceImpl.java b/src/main/java/zy/cloud/wms/manager/service/impl/ProjectPlanServiceImpl.java
new file mode 100644
index 0000000..2c651fd
--- /dev/null
+++ b/src/main/java/zy/cloud/wms/manager/service/impl/ProjectPlanServiceImpl.java
@@ -0,0 +1,12 @@
+package zy.cloud.wms.manager.service.impl;
+
+import zy.cloud.wms.manager.mapper.ProjectPlanMapper;
+import zy.cloud.wms.manager.entity.ProjectPlan;
+import zy.cloud.wms.manager.service.ProjectPlanService;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("projectPlanService")
+public class ProjectPlanServiceImpl extends ServiceImpl<ProjectPlanMapper, ProjectPlan> implements ProjectPlanService {
+
+}
diff --git a/src/main/java/zy/cloud/wms/manager/service/impl/ProjectStatusServiceImpl.java b/src/main/java/zy/cloud/wms/manager/service/impl/ProjectStatusServiceImpl.java
new file mode 100644
index 0000000..0d5ddcc
--- /dev/null
+++ b/src/main/java/zy/cloud/wms/manager/service/impl/ProjectStatusServiceImpl.java
@@ -0,0 +1,12 @@
+package zy.cloud.wms.manager.service.impl;
+
+import zy.cloud.wms.manager.mapper.ProjectStatusMapper;
+import zy.cloud.wms.manager.entity.ProjectStatus;
+import zy.cloud.wms.manager.service.ProjectStatusService;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("projectStatusService")
+public class ProjectStatusServiceImpl extends ServiceImpl<ProjectStatusMapper, ProjectStatus> implements ProjectStatusService {
+
+}
diff --git a/src/main/java/zy/cloud/wms/manager/service/impl/ProjectTypeServiceImpl.java b/src/main/java/zy/cloud/wms/manager/service/impl/ProjectTypeServiceImpl.java
new file mode 100644
index 0000000..0aa1fa8
--- /dev/null
+++ b/src/main/java/zy/cloud/wms/manager/service/impl/ProjectTypeServiceImpl.java
@@ -0,0 +1,12 @@
+package zy.cloud.wms.manager.service.impl;
+
+import zy.cloud.wms.manager.mapper.ProjectTypeMapper;
+import zy.cloud.wms.manager.entity.ProjectType;
+import zy.cloud.wms.manager.service.ProjectTypeService;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("projectTypeService")
+public class ProjectTypeServiceImpl extends ServiceImpl<ProjectTypeMapper, ProjectType> implements ProjectTypeService {
+
+}
diff --git a/src/main/resources/mapper/ProjectPlanMapper.xml b/src/main/resources/mapper/ProjectPlanMapper.xml
new file mode 100644
index 0000000..d80a17f
--- /dev/null
+++ b/src/main/resources/mapper/ProjectPlanMapper.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="zy.cloud.wms.manager.mapper.ProjectPlanMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="zy.cloud.wms.manager.entity.ProjectPlan">
+        <id column="id" property="id" />
+        <result column="item_id" property="itemId" />
+        <result column="weight_num" property="weightNum" />
+        <result column="flow_id" property="flowId" />
+        <result column="start_time" property="startTime" />
+        <result column="real_start_time" property="realStartTime" />
+        <result column="end_time" property="endTime" />
+        <result column="real_end_time" property="realEndTime" />
+        <result column="delay" property="delay" />
+        <result column="delay_reason" property="delayReason" />
+        <result column="memo" property="memo" />
+        <result column="duty_department" property="dutyDepartment" />
+        <result column="duty_man" property="dutyMan" />
+        <result column="create_time" property="createTime" />
+        <result column="create_id" property="createId" />
+        <result column="modify_time" property="modifyTime" />
+        <result column="modify_id" property="modifyId" />
+        <result column="flow_name" property="flowName" />
+
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/ProjectStatusMapper.xml b/src/main/resources/mapper/ProjectStatusMapper.xml
new file mode 100644
index 0000000..4771056
--- /dev/null
+++ b/src/main/resources/mapper/ProjectStatusMapper.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="zy.cloud.wms.manager.mapper.ProjectStatusMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="zy.cloud.wms.manager.entity.ProjectStatus">
+        <result column="id" property="id" />
+        <result column="status_id" property="statusId" />
+        <result column="status_name" property="statusName" />
+        <result column="type" property="type" />
+        <result column="status_class" property="statusClass" />
+        <result column="memo" property="memo" />
+        <result column="create_id" property="createId" />
+        <result column="create_time" property="createTime" />
+        <result column="modify_id" property="modifyId" />
+        <result column="modify_time" property="modifyTime" />
+        <result column="str_1" property="str1" />
+        <result column="str_2" property="str2" />
+        <result column="str_3" property="str3" />
+
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/ProjectTypeMapper.xml b/src/main/resources/mapper/ProjectTypeMapper.xml
new file mode 100644
index 0000000..3e71407
--- /dev/null
+++ b/src/main/resources/mapper/ProjectTypeMapper.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="zy.cloud.wms.manager.mapper.ProjectTypeMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="zy.cloud.wms.manager.entity.ProjectType">
+        <result column="id" property="id" />
+        <result column="type_id" property="typeId" />
+        <result column="type_name" property="typeName" />
+        <result column="type_status" property="typeStatus" />
+        <result column="type_class" property="typeClass" />
+        <result column="str_1" property="str1" />
+        <result column="str_2" property="str2" />
+        <result column="str_3" property="str3" />
+
+    </resultMap>
+
+</mapper>
diff --git a/src/main/webapp/static/js/cstmr/cstmr.js b/src/main/webapp/static/js/cstmr/cstmr.js
index 75ecfbb..97b7e06 100644
--- a/src/main/webapp/static/js/cstmr/cstmr.js
+++ b/src/main/webapp/static/js/cstmr/cstmr.js
@@ -23,7 +23,7 @@
             {type: 'checkbox'}
             // ,{field: 'id', align: 'center',title: 'ID'}
             // ,{field: 'uuid', align: 'center',title: '瀹㈡埛缂栧彿'}
-            ,{field: 'userCode', align: "center", title: '瀹㈡埛浠g爜'}
+            ,{field: 'userCode', align: "center", title: '瀹㈡埛缂栧彿'}
             ,{field: 'name', align: 'center',title: '瀹㈡埛鍚嶇О'}
             ,{field: 'contacts', align: 'center',title: '鑱旂郴浜�'}
             ,{field: 'tel', align: 'center',title: '鑱旂郴鐢佃瘽'}
diff --git a/src/main/webapp/static/js/flowStatus/flowStatus.js b/src/main/webapp/static/js/flowStatus/flowStatus.js
index 7853818..2198ddd 100644
--- a/src/main/webapp/static/js/flowStatus/flowStatus.js
+++ b/src/main/webapp/static/js/flowStatus/flowStatus.js
@@ -22,12 +22,12 @@
         cols: [[
             {type: 'checkbox'}
             ,{field: 'id', align: 'center',title: '鍞竴id'}
-            ,{field: 'type', align: 'center',title: '鑺傜偣绫诲瀷'}
+            ,{field: 'type', align: 'center',title: '鑺傜偣绫诲瀷', hide:true}
             ,{field: 'name', align: 'center',title: '鑺傜偣鍚嶇О'}
-            ,{field: 'memo', align: 'center',title: '澶囨敞'}
-            ,{field: 'str1', align: 'center',title: ''}
-            ,{field: 'str2', align: 'center',title: ''}
-            ,{field: 'str3', align: 'center',title: ''}
+            ,{field: 'memo', align: 'center',title: '澶囨敞', width: 100}
+            // ,{field: 'str1', align: 'center',title: ''}
+            // ,{field: 'str2', align: 'center',title: ''}
+            // ,{field: 'str3', align: 'center',title: ''}
 
             ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:150}
         ]],
diff --git a/src/main/webapp/static/js/item/item.js b/src/main/webapp/static/js/item/item.js
index ee2c360..47cd5ad 100644
--- a/src/main/webapp/static/js/item/item.js
+++ b/src/main/webapp/static/js/item/item.js
@@ -25,15 +25,15 @@
             // ,{field: 'hostId', align: 'center',title: ''}
             ,{field: 'uuid', align: 'center',title: '椤圭洰缂栧彿'}
             ,{field: 'name', align: 'center',title: '椤圭洰鍚嶇О'}
-            // ,{field: 'inUuid', align: 'center',title: '鍐呴儴缂栧彿'}
+            ,{field: 'inUuid', align: 'center',title: '鍐呴儴缂栧彿', hide: true}
             // ,{field: 'cstmrUuid', align: 'center',title: '瀹㈡埛缂栧彿'}
-            ,{field: 'cstmr', align: 'center',title: '瀹㈡埛'}
+            ,{field: 'cstmr', align: 'center',title: '瀹㈡埛鍚嶇О'}
             // ,{field: 'member', align: 'center',title: '椤圭洰鎴愬憳'}
             // ,{field: 'leader', align: 'center',title: '椤圭洰缁忕悊'}
-            ,{field: 'startTime$', align: 'center',title: '寮�濮嬫椂闂�'}
-            ,{field: 'realStartTime', align: 'center', title: '鐪熷疄寮�濮嬫椂闂�'}
-            ,{field: 'endTime$', align: 'center',title: '缁撴潫鏃堕棿'}
-            ,{field: 'realEndTime', align: 'center', title: '鐪熷疄缁撴潫鏃堕棿'}
+            ,{field: 'startTime$', align: 'center',title: '璁″垝寮�濮嬫椂闂�'}
+            ,{field: 'endTime$', align: 'center',title: '璁″垝缁撴潫鏃堕棿'}
+            ,{field: 'realStartTime', align: 'center', title: '瀹為檯寮�濮嬫椂闂�'}
+            ,{field: 'realEndTime', align: 'center', title: '瀹為檯缁撴潫鏃堕棿'}
             ,{field: 'type', align: 'center', title: '椤圭洰绫诲瀷'}
             ,{field: 'realMonth', align: 'center', title: '鏃堕棿璺ㄥ害(鏈�)'}
             ,{field: 'dutyMan', align: 'center', title: '璐d换浜�'}
diff --git a/src/main/webapp/static/js/projectPlan/projectPlan.js b/src/main/webapp/static/js/projectPlan/projectPlan.js
new file mode 100644
index 0000000..38f7715
--- /dev/null
+++ b/src/main/webapp/static/js/projectPlan/projectPlan.js
@@ -0,0 +1,299 @@
+var pageCurr;
+var firstId;
+getItems();
+
+layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"
+}).use(['table','laydate', 'form', 'admin'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+    var admin = layui.admin;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#projectPlan',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/projectPlan/list/auth',
+        page: true,
+        limit: 16,
+        limits: [16, 30, 50, 100, 200, 500],
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        where: {
+            target: firstId
+        },
+
+        cols: [[
+            {type: 'checkbox'}
+            // ,{field: 'id', align: 'center',title: '鍞竴ID'}
+            // ,{field: 'itemId', align: 'center',title: '椤圭洰ID'}
+            ,{field: 'flowName', align: 'center',title: '鑺傜偣鍚嶇О'}
+            ,{field: 'weightNum', align: 'center',title: '鏉冮噸鍊�'}
+            // ,{field: 'flowId', align: 'center',title: '鑺傜偣ID'}
+
+            ,{field: 'startTime$', align: 'center',title: '璁″垝寮�濮嬫椂闂�'}
+            ,{field: 'endTime$', align: 'center',title: '璁″垝缁撴潫鏃堕棿'}
+            ,{field: 'realStartTime$', align: 'center',title: '瀹為檯寮�濮嬫椂闂�'}
+            ,{field: 'realEndTime$', align: 'center',title: '瀹為檯缁撴潫鏃堕棿'}
+            ,{field: 'delay', align: 'center',title: '寤舵湡澶╂暟'}
+            ,{field: 'delayReason', align: 'center',title: '寤舵湡鍘熷洜'}
+            ,{field: 'memo', align: 'center',title: '澶囨敞'}
+            ,{field: 'dutyDepartment', align: 'center',title: '璐d换閮ㄩ棬'}
+            ,{field: 'dutyMan', align: 'center',title: '璐d换浜�'}
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:150}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(projectPlan)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {curr: 1}
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(projectPlan)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id).data;
+        switch(obj.event) {
+            case 'addData':
+                showEditModel();
+                break;
+            case 'deleteData':
+               if (checkStatus.length === 0) {
+                   layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
+                   return;
+               }
+               var ids = checkStatus.map(function (d) {
+                   return d.id;
+               });
+               del(ids);
+               break;
+            case 'exportData':
+                layer.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'projectPlan': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/projectPlan/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg, {icon: 2})
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(projectPlan)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            case 'edit':
+                showEditModel(data);
+                break;
+            case "del":
+                var ids = [data.id];
+                del(ids);
+                break;
+        }
+    });
+
+    /* 寮圭獥 - 鏂板銆佷慨鏀� */
+    function showEditModel(mData) {
+        admin.open({
+            type: 1,
+            area: '600px',
+            title: (mData ? '淇敼' : '娣诲姞') + '璁㈠崟鐘舵��',
+            content: $('#editDialog').html(),
+            success: function (layero, dIndex) {
+                layDateRender();
+                form.val('detail', mData);
+                form.on('submit(editSubmit)', function (data) {
+
+                    var loadIndex = layer.load(2);
+                    $.ajax({
+                        url: baseUrl+"/projectPlan/"+(mData?'update':'add')+"/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: data.field,
+                        method: 'POST',
+                        success: function (res) {
+                            layer.close(loadIndex);
+                            if (res.code === 200){
+                                layer.close(dIndex);
+                                layer.msg(res.msg, {icon: 1});
+                                tableReload();
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            }else {
+                                layer.msg(res.msg, {icon: 2});
+                            }
+                        }
+                    })
+                    return false;
+                });
+                $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                layui.form.render('select');
+            }
+        });
+    }
+
+    /* 鍒犻櫎 */
+    function del(ids) {
+        layer.confirm('纭畾瑕佸垹闄ら�変腑鏁版嵁鍚楋紵', {
+            skin: 'layui-layer-admin',
+            shade: .1
+        }, function (i) {
+            layer.close(i);
+            var loadIndex = layer.load(2);
+            $.ajax({
+                url: baseUrl+"/projectPlan/delete/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {ids: ids},
+                method: 'POST',
+                success: function (res) {
+                    layer.close(loadIndex);
+                    if (res.code === 200){
+                        layer.msg(res.msg, {icon: 1});
+                        tableReload();
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    } else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+        });
+    }
+
+    // 鎼滅储
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 閲嶇疆
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    function layDateRender() {
+            layDate.render({
+        elem: '#startTime\\$',
+        type: 'datetime'
+    });
+        layDate.render({
+        elem: '#realStartTime\\$',
+        type: 'datetime'
+    });
+        layDate.render({
+        elem: '#endTime\\$',
+        type: 'datetime'
+    });
+        layDate.render({
+        elem: '#realEndTime\\$',
+        type: 'datetime'
+    });
+        layDate.render({
+        elem: '#createTime\\$',
+        type: 'datetime'
+    });
+        layDate.render({
+        elem: '#modifyTime\\$',
+        type: 'datetime'
+    });
+
+    }
+    layDateRender();
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    tableIns.reload({
+        where: searchData,
+        page: {curr: pageCurr}
+     });
+}
+
+function getItems(el) {
+    http.post(baseUrl + "/projectPlan/allProjects", null,function (res) {
+
+        if (res.data != null) {
+            // console.log(res.data[0].key)
+            firstId = res.data[0].key;
+            var tpl = $("#parentNodeGroup").html();
+            var template = Handlebars.compile(tpl);
+            var html = template(res);
+            $('#items').append(html);
+
+        }
+    });
+}
\ No newline at end of file
diff --git a/src/main/webapp/static/js/projectStatus/projectStatus.js b/src/main/webapp/static/js/projectStatus/projectStatus.js
new file mode 100644
index 0000000..e200852
--- /dev/null
+++ b/src/main/webapp/static/js/projectStatus/projectStatus.js
@@ -0,0 +1,259 @@
+var pageCurr;
+layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"
+}).use(['table','laydate', 'form', 'admin'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+    var admin = layui.admin;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#projectStatus',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/projectStatus/list/auth',
+        page: true,
+        limit: 16,
+        limits: [16, 30, 50, 100, 200, 500],
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        cols: [[
+            {type: 'checkbox'}
+            ,{field: 'id', align: 'center',title: '鍞竴ID'}
+            // ,{field: 'statusId', align: 'center',title: ''}
+            ,{field: 'statusName', align: 'center',title: '鐘舵�佸悕绉�'}
+            // ,{field: 'type', align: 'center',title: ''}
+            // ,{field: 'statusClass', align: 'center',title: ''}
+            ,{field: 'memo', align: 'center',title: '澶囨敞',width: 100}
+            // ,{field: 'createId', align: 'center',title: ''}
+            // ,{field: 'createTime$', align: 'center',title: ''}
+            // ,{field: 'modifyId', align: 'center',title: ''}
+            // ,{field: 'modifyTime$', align: 'center',title: ''}
+            // ,{field: 'str1', align: 'center',title: ''}
+            // ,{field: 'str2', align: 'center',title: ''}
+            // ,{field: 'str3', align: 'center',title: ''}
+
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:150}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(projectStatus)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {curr: 1}
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(projectStatus)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id).data;
+        switch(obj.event) {
+            case 'addData':
+                showEditModel();
+                break;
+            case 'deleteData':
+               if (checkStatus.length === 0) {
+                   layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
+                   return;
+               }
+               var ids = checkStatus.map(function (d) {
+                   return d.id;
+               });
+               del(ids);
+               break;
+            case 'exportData':
+                layer.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'projectStatus': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/projectStatus/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg, {icon: 2})
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(projectStatus)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            case 'edit':
+                showEditModel(data);
+                break;
+            case "del":
+                var ids = [data.id];
+                del(ids);
+                break;
+        }
+    });
+
+    /* 寮圭獥 - 鏂板銆佷慨鏀� */
+    function showEditModel(mData) {
+        admin.open({
+            type: 1,
+            area: '600px',
+            title: (mData ? '淇敼' : '娣诲姞') + '璁㈠崟鐘舵��',
+            content: $('#editDialog').html(),
+            success: function (layero, dIndex) {
+                layDateRender();
+                form.val('detail', mData);
+                form.on('submit(editSubmit)', function (data) {
+                    var loadIndex = layer.load(2);
+                    $.ajax({
+                        url: baseUrl+"/projectStatus/"+(mData?'update':'add')+"/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: data.field,
+                        method: 'POST',
+                        success: function (res) {
+                            layer.close(loadIndex);
+                            if (res.code === 200){
+                                layer.close(dIndex);
+                                layer.msg(res.msg, {icon: 1});
+                                tableReload();
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            }else {
+                                layer.msg(res.msg, {icon: 2});
+                            }
+                        }
+                    })
+                    return false;
+                });
+                $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                layui.form.render('select');
+            }
+        });
+    }
+
+    /* 鍒犻櫎 */
+    function del(ids) {
+        layer.confirm('纭畾瑕佸垹闄ら�変腑鏁版嵁鍚楋紵', {
+            skin: 'layui-layer-admin',
+            shade: .1
+        }, function (i) {
+            layer.close(i);
+            var loadIndex = layer.load(2);
+            $.ajax({
+                url: baseUrl+"/projectStatus/delete/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {ids: ids},
+                method: 'POST',
+                success: function (res) {
+                    layer.close(loadIndex);
+                    if (res.code === 200){
+                        layer.msg(res.msg, {icon: 1});
+                        tableReload();
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    } else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+        });
+    }
+
+    // 鎼滅储
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 閲嶇疆
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    function layDateRender() {
+            layDate.render({
+        elem: '#createTime\\$',
+        type: 'datetime'
+    });
+        layDate.render({
+        elem: '#modifyTime\\$',
+        type: 'datetime'
+    });
+
+    }
+    layDateRender();
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    tableIns.reload({
+        where: searchData,
+        page: {curr: pageCurr}
+     });
+}
diff --git a/src/main/webapp/static/js/projectType/projectType.js b/src/main/webapp/static/js/projectType/projectType.js
new file mode 100644
index 0000000..d270aae
--- /dev/null
+++ b/src/main/webapp/static/js/projectType/projectType.js
@@ -0,0 +1,246 @@
+var pageCurr;
+layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"
+}).use(['table','laydate', 'form', 'admin'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+    var admin = layui.admin;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#projectType',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/projectType/list/auth',
+        page: true,
+        limit: 16,
+        limits: [16, 30, 50, 100, 200, 500],
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        cols: [[
+            {type: 'checkbox'}
+            ,{field: 'id', align: 'center',title: '鍞竴ID'}
+            // ,{field: 'typeId', align: 'center',title: ''}
+            ,{field: 'typeName', align: 'center',title: '绫诲瀷鍚嶇О'}
+            // ,{field: 'typeStatus', align: 'center',title: ''}
+            // ,{field: 'typeClass', align: 'center',title: ''}
+            ,{field: 'str1', align: 'center',title: '澶囨敞', width: 100}
+            // ,{field: 'str2', align: 'center',title: ''}
+            // ,{field: 'str3', align: 'center',title: ''}
+
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:150}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(projectType)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {curr: 1}
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(projectType)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id).data;
+        switch(obj.event) {
+            case 'addData':
+                showEditModel();
+                break;
+            case 'deleteData':
+               if (checkStatus.length === 0) {
+                   layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
+                   return;
+               }
+               var ids = checkStatus.map(function (d) {
+                   return d.id;
+               });
+               del(ids);
+               break;
+            case 'exportData':
+                layer.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'projectType': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/projectType/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg, {icon: 2})
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(projectType)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            case 'edit':
+                showEditModel(data);
+                break;
+            case "del":
+                var ids = [data.id];
+                del(ids);
+                break;
+        }
+    });
+
+    /* 寮圭獥 - 鏂板銆佷慨鏀� */
+    function showEditModel(mData) {
+        admin.open({
+            type: 1,
+            area: '600px',
+            title: (mData ? '淇敼' : '娣诲姞') + '璁㈠崟鐘舵��',
+            content: $('#editDialog').html(),
+            success: function (layero, dIndex) {
+                layDateRender();
+                form.val('detail', mData);
+                form.on('submit(editSubmit)', function (data) {
+                    var loadIndex = layer.load(2);
+                    $.ajax({
+                        url: baseUrl+"/projectType/"+(mData?'update':'add')+"/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: data.field,
+                        method: 'POST',
+                        success: function (res) {
+                            layer.close(loadIndex);
+                            if (res.code === 200){
+                                layer.close(dIndex);
+                                layer.msg(res.msg, {icon: 1});
+                                tableReload();
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            }else {
+                                layer.msg(res.msg, {icon: 2});
+                            }
+                        }
+                    })
+                    return false;
+                });
+                $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                layui.form.render('select');
+            }
+        });
+    }
+
+    /* 鍒犻櫎 */
+    function del(ids) {
+        layer.confirm('纭畾瑕佸垹闄ら�変腑鏁版嵁鍚楋紵', {
+            skin: 'layui-layer-admin',
+            shade: .1
+        }, function (i) {
+            layer.close(i);
+            var loadIndex = layer.load(2);
+            $.ajax({
+                url: baseUrl+"/projectType/delete/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {ids: ids},
+                method: 'POST',
+                success: function (res) {
+                    layer.close(loadIndex);
+                    if (res.code === 200){
+                        layer.msg(res.msg, {icon: 1});
+                        tableReload();
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    } else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+        });
+    }
+
+    // 鎼滅储
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 閲嶇疆
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    function layDateRender() {
+    
+    }
+    layDateRender();
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    tableIns.reload({
+        where: searchData,
+        page: {curr: pageCurr}
+     });
+}
diff --git a/src/main/webapp/views/cstmr/cstmr.html b/src/main/webapp/views/cstmr/cstmr.html
index cd5cc6e..44c0a9a 100644
--- a/src/main/webapp/views/cstmr/cstmr.html
+++ b/src/main/webapp/views/cstmr/cstmr.html
@@ -64,7 +64,7 @@
             <div class="layui-col-md6">
                 <div class="layui-form-item">
                     <label class="layui-form-label">
-                        瀹㈡埛浠e彿:
+                        瀹㈡埛缂栧彿:
                     </label>
                     <div class="layui-input-block">
                         <input class="layui-input" name="userCode" placeholder="璇疯緭鍏ュ鎴蜂唬鍙�(鑻辨枃)">
diff --git a/src/main/webapp/views/flowStatus/flowStatus.html b/src/main/webapp/views/flowStatus/flowStatus.html
index 7c5a711..2e37146 100644
--- a/src/main/webapp/views/flowStatus/flowStatus.html
+++ b/src/main/webapp/views/flowStatus/flowStatus.html
@@ -56,16 +56,16 @@
         <input name="id" type="hidden">
         <div class="layui-row">
             <div class="layui-col-md12">
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">鑺傜偣绫诲瀷: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="type" placeholder="璇疯緭鍏ヨ妭鐐圭被鍨�">-->
+<!--                    </div>-->
+<!--                </div>-->
                 <div class="layui-form-item">
-                    <label class="layui-form-label">鑺傜偣绫诲瀷: </label>
+                    <label class="layui-form-label layui-form-required">鑺傜偣鍚嶇О: </label>
                     <div class="layui-input-block">
-                        <input class="layui-input" name="type" placeholder="璇疯緭鍏ヨ妭鐐圭被鍨�">
-                    </div>
-                </div>
-                <div class="layui-form-item">
-                    <label class="layui-form-label">鑺傜偣鍚嶇О: </label>
-                    <div class="layui-input-block">
-                        <input class="layui-input" name="name" placeholder="璇疯緭鍏ヨ妭鐐瑰悕绉�">
+                        <input class="layui-input" name="name" placeholder="璇疯緭鍏ヨ妭鐐瑰悕绉�" lay-verify="required" lay-vertype="tips">
                     </div>
                 </div>
                 <div class="layui-form-item">
@@ -74,24 +74,24 @@
                         <input class="layui-input" name="memo" placeholder="璇疯緭鍏ュ娉�">
                     </div>
                 </div>
-                <div class="layui-form-item">
-                    <label class="layui-form-label">: </label>
-                    <div class="layui-input-block">
-                        <input class="layui-input" name="str1" placeholder="璇疯緭鍏�">
-                    </div>
-                </div>
-                <div class="layui-form-item">
-                    <label class="layui-form-label">: </label>
-                    <div class="layui-input-block">
-                        <input class="layui-input" name="str2" placeholder="璇疯緭鍏�">
-                    </div>
-                </div>
-                <div class="layui-form-item">
-                    <label class="layui-form-label">: </label>
-                    <div class="layui-input-block">
-                        <input class="layui-input" name="str3" placeholder="璇疯緭鍏�">
-                    </div>
-                </div>
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="str1" placeholder="璇疯緭鍏�">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="str2" placeholder="璇疯緭鍏�">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="str3" placeholder="璇疯緭鍏�">-->
+<!--                    </div>-->
+<!--                </div>-->
 
              </div>
         </div>
diff --git a/src/main/webapp/views/item/item.html b/src/main/webapp/views/item/item.html
index 18ff943..7299baf 100644
--- a/src/main/webapp/views/item/item.html
+++ b/src/main/webapp/views/item/item.html
@@ -63,9 +63,9 @@
                     </div>
                 </div>
                 <div class="layui-form-item">
-                    <label class="layui-form-label">椤圭洰鍚嶇О: </label>
+                    <label class="layui-form-label layui-form-required">椤圭洰鍚嶇О: </label>
                     <div class="layui-input-block">
-                        <input class="layui-input" name="name" placeholder="璇疯緭鍏ラ」鐩悕绉�">
+                        <input class="layui-input" name="name" placeholder="璇疯緭鍏ラ」鐩悕绉�" lay-vertype="tips" lay-verify="required">
                     </div>
                 </div>
                 <div class="layui-form-item">
@@ -74,40 +74,48 @@
                         <input class="layui-input" name="inUuid" placeholder="璇疯緭鍏ュ唴閮ㄧ紪鍙�">
                     </div>
                 </div>
+
+
                 <div class="layui-form-item">
-                    <label class="layui-form-label">瀹㈡埛缂栧彿: </label>
+                    <label class="layui-form-label layui-form-required">瀹㈡埛缂栧彿: </label>
                     <div class="layui-input-block">
-                        <input class="layui-input" name="cstmrUuid" placeholder="璇疯緭鍏ュ鎴风紪鍙�">
+                        <input class="layui-input" name="cstmrUuid" placeholder="璇疯緭鍏ュ鎴峰悕绉�" lay-vertype="tips" lay-verify="required">
+                    </div>
+                </div>
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">瀹㈡埛: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="cstmr" placeholder="璇疯緭鍏ュ鎴�">-->
+<!--                    </div>-->
+<!--                </div>-->
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">璁″垝寮�濮嬫椂闂�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="startTime" id="startTime$" placeholder="璇疯緭鍏ュ紑濮嬫椂闂�" lay-vertype="tips" lay-verify="required">
                     </div>
                 </div>
                 <div class="layui-form-item">
-                    <label class="layui-form-label">瀹㈡埛: </label>
+                    <label class="layui-form-label layui-form-required">璁″垝缁撴潫鏃堕棿: </label>
                     <div class="layui-input-block">
-                        <input class="layui-input" name="cstmr" placeholder="璇疯緭鍏ュ鎴�">
+                        <input class="layui-input" name="endTime" id="endTime$" placeholder="璇疯緭鍏ョ粨鏉熸椂闂�" lay-vertype="tips" lay-verify="required">
                     </div>
                 </div>
                 <div class="layui-form-item">
-                    <label class="layui-form-label">寮�濮嬫椂闂�: </label>
+                    <label class="layui-form-label">瀹為檯寮�濮嬫椂闂�: </label>
                     <div class="layui-input-block">
-                        <input class="layui-input" name="startTime" id="startTime$" placeholder="璇疯緭鍏ュ紑濮嬫椂闂�">
+                        <input class="layui-input" name="realStartTime" id="realStartTime$" placeholder="鍙┖濉�,绛夊緟鐪熷疄椤圭洰鍚姩鍐嶅~">
                     </div>
                 </div>
                 <div class="layui-form-item">
-                    <label class="layui-form-label">鐪熷疄寮�濮嬫椂闂�: </label>
+                    <label class="layui-form-label">瀹為檯缁撴潫鏃堕棿: </label>
                     <div class="layui-input-block">
-                        <input class="layui-input" name="realStartTime" id="realStartTime$" placeholder="璇疯緭鍏ュ紑濮嬫椂闂�">
+                        <input class="layui-input" name="realEndTime" id="realEndTime$" placeholder="鍙┖濉�,绛夊緟鐪熷疄椤圭洰缁撴潫鍐嶅~">
                     </div>
                 </div>
                 <div class="layui-form-item">
-                    <label class="layui-form-label">缁撴潫鏃堕棿: </label>
+                    <label class="layui-form-label layui-form-required">椤圭洰绫诲瀷: </label>
                     <div class="layui-input-block">
-                        <input class="layui-input" name="endTime" id="endTime$" placeholder="璇疯緭鍏ョ粨鏉熸椂闂�">
-                    </div>
-                </div>
-                <div class="layui-form-item">
-                    <label class="layui-form-label">鐪熷疄缁撴潫鏃堕棿: </label>
-                    <div class="layui-input-block">
-                        <input class="layui-input" name="realEndTime" id="realEndTime$" placeholder="璇疯緭鍏ョ粨鏉熸椂闂�">
+                        <input class="layui-input" name="type" placeholder="璇疯緭鍏ラ」鐩被鍨�" lay-vertype="tips" lay-verify="required">
                     </div>
                 </div>
                 <div class="layui-form-item">
@@ -138,25 +146,26 @@
                         <input class="layui-input" name="dutyDepartment" id="dutyDepartment$" placeholder="璇疯緭鍏ヨ矗浠婚儴闂�">
                     </div>
                 </div>
-                <div class="layui-form-item">
-                    <label class="layui-form-label">娣诲姞浜哄憳: </label>
-                    <div class="layui-input-block cool-auto-complete">
-                        <input class="layui-input" name="createBy" placeholder="璇疯緭鍏ユ坊鍔犱汉鍛�" style="display: none">
-                        <input id="createBy$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏ユ坊鍔犱汉鍛�" onfocus=this.blur()>
-                        <div class="cool-auto-complete-window">
-                            <input class="cool-auto-complete-window-input" data-key="userQueryBycreateBy" onkeyup="autoLoad(this.getAttribute('data-key'))">
-                            <select class="cool-auto-complete-window-select" data-key="userQueryBycreateBySelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
-                            </select>
-                        </div>
-                    </div>
-                </div>
 
-                <div class="layui-form-item">
-                    <label class="layui-form-label">娣诲姞鏃堕棿: </label>
-                    <div class="layui-input-block">
-                        <input class="layui-input" name="createTime" id="createTime$" placeholder="璇疯緭鍏ユ坊鍔犳椂闂�">
-                    </div>
-                </div>
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">娣诲姞浜哄憳: </label>-->
+<!--                    <div class="layui-input-block cool-auto-complete">-->
+<!--                        <input class="layui-input" name="createBy" placeholder="璇疯緭鍏ユ坊鍔犱汉鍛�" style="display: none">-->
+<!--                        <input id="createBy$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏ユ坊鍔犱汉鍛�" onfocus=this.blur()>-->
+<!--                        <div class="cool-auto-complete-window">-->
+<!--                            <input class="cool-auto-complete-window-input" data-key="userQueryBycreateBy" onkeyup="autoLoad(this.getAttribute('data-key'))">-->
+<!--                            <select class="cool-auto-complete-window-select" data-key="userQueryBycreateBySelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">-->
+<!--                            </select>-->
+<!--                        </div>-->
+<!--                    </div>-->
+<!--                </div>-->
+
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">娣诲姞鏃堕棿: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="createTime" id="createTime$" placeholder="璇疯緭鍏ユ坊鍔犳椂闂�">-->
+<!--                    </div>-->
+<!--                </div>-->
                 <div class="layui-form-item">
                     <label class="layui-form-label">澶囨敞: </label>
                     <div class="layui-input-block">
diff --git a/src/main/webapp/views/projectPlan/projectPlan.html b/src/main/webapp/views/projectPlan/projectPlan.html
new file mode 100644
index 0000000..4c30103
--- /dev/null
+++ b/src/main/webapp/views/projectPlan/projectPlan.html
@@ -0,0 +1,188 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all">
+    <link rel="stylesheet" href="../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../static/css/common.css" media="all">
+
+</head>
+<body>
+
+<!-- 鎼滅储鏍� -->
+<div id="search-box" class="layui-form layui-card-header">
+    <div class="layui-inline">
+        <label class="layui-form-label">褰撳墠椤圭洰: </label>
+        <div class="layui-input-inline">
+            <select id="items" name="items" lay-search="">
+            </select>
+        </div>
+    </div>
+<!--    <div class="layui-inline">-->
+<!--        <div class="layui-input-inline">-->
+<!--            <input class="layui-input" type="text" name="id" placeholder="缂栧彿" autocomplete="off">-->
+<!--        </div>-->
+<!--    </div>-->
+<!--    &lt;!&ndash; 寰呮坊鍔� &ndash;&gt;-->
+<!--    <div id="data-search-btn" class="layui-btn-container layui-form-item">-->
+<!--        <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">鎼滅储</button>-->
+<!--        <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">閲嶇疆</button>-->
+<!--    </div>-->
+</div>
+
+<!-- 琛ㄦ牸 -->
+<div class="layui-form">
+    <table class="layui-hide" id="projectPlan" lay-filter="projectPlan"></table>
+</div>
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
+        <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">淇敼</a>
+    <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">鍒犻櫎</a>
+</script>
+
+<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/projectPlan/projectPlan.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js" charset="utf-8"></script>
+</body>
+<!-- 琛ㄥ崟寮圭獥 -->
+<script type="text/html" id="editDialog">
+    <form id="detail" lay-filter="detail" class="layui-form admin-form">
+        <input name="id" type="hidden">
+        <div class="layui-row">
+            <div class="layui-col-md12">
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label layui-form-required">椤圭洰ID: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="itemId" placeholder="璇疯緭鍏ラ」鐩甀D" lay-vertype="tips" lay-verify="required">-->
+<!--                    </div>-->
+<!--                </div>-->
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">鏉冮噸鍊�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="weightNum" placeholder="璇疯緭鍏ユ潈閲岻D" lay-vertype="tips" lay-verify="required">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">鑺傜偣ID: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="flowId" placeholder="璇疯緭鍏ヨ妭鐐笽D" lay-vertype="tips" lay-verify="required">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">璁″垝寮�濮嬫椂闂�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="startTime" id="startTime$" placeholder="璇疯緭鍏ヨ鍒掑紑濮嬫椂闂�" lay-vertype="tips" lay-verify="required">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">璁″垝缁撴潫鏃堕棿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="endTime" id="endTime$" placeholder="璇疯緭鍏ヨ鍒掔粨鏉熸椂闂�" lay-vertype="tips" lay-verify="required">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">瀹為檯寮�濮嬫椂闂�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="realStartTime" id="realStartTime$" placeholder="璇疯緭鍏ュ疄闄呭紑濮嬫椂闂�">
+                    </div>
+                </div>
+
+                <div class="layui-form-item">
+                    <label class="layui-form-label">瀹為檯缁撴潫鏃堕棿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="realEndTime" id="realEndTime$" placeholder="璇疯緭鍏ュ疄闄呯粨鏉熸椂闂�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">寤舵湡澶╂暟: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="delay" placeholder="璇疯緭鍏ュ欢鏈熷ぉ鏁�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">寤舵湡鍘熷洜: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="delayReason" placeholder="璇疯緭鍏ュ欢鏈熷師鍥�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">澶囨敞: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="memo" placeholder="璇疯緭鍏ュ娉�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">璐d换閮ㄩ棬: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="dutyDepartment" placeholder="璇疯緭鍏ヨ矗浠婚儴闂�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">璐d换浜�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="dutyMan" placeholder="璇疯緭鍏ヨ矗浠讳汉">
+                    </div>
+                </div>
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">鍒涘缓鏃堕棿: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="createTime" id="createTime$" placeholder="璇疯緭鍏ュ垱寤烘椂闂�">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">鍒涘缓浜篿d: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="createId" placeholder="璇疯緭鍏ュ垱寤轰汉id">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">淇敼鏃堕棿: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="modifyTime" id="modifyTime$" placeholder="璇疯緭鍏ヤ慨鏀规椂闂�">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">淇敼浜篿d: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="modifyId" placeholder="璇疯緭鍏ヤ慨鏀逛汉id">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">鑺傜偣鍚嶇О: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="flowName" placeholder="璇疯緭鍏ヨ妭鐐瑰悕绉�">-->
+<!--                    </div>-->
+<!--                </div>-->
+
+<!--             </div>-->
+        </div>
+        <hr class="layui-bg-gray">
+        <div class="layui-form-item text-right">
+            <button class="layui-btn" lay-filter="editSubmit" lay-submit="">淇濆瓨</button>
+            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+        </div>
+    </form>
+</script>
+<script type="text/template" id="parentNodeGroup">
+    {{#each data}}
+    <option value="{{this.key}}">{{this.val}}</option>
+    {{/each}}
+</script>
+
+</html>
+
diff --git a/src/main/webapp/views/projectStatus/projectStatus.html b/src/main/webapp/views/projectStatus/projectStatus.html
new file mode 100644
index 0000000..3d5f7b4
--- /dev/null
+++ b/src/main/webapp/views/projectStatus/projectStatus.html
@@ -0,0 +1,148 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all">
+    <link rel="stylesheet" href="../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../static/css/common.css" media="all">
+</head>
+<body>
+
+<!-- 鎼滅储鏍� -->
+<div id="search-box" class="layui-form layui-card-header">
+    <div class="layui-inline">
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="id" placeholder="缂栧彿" autocomplete="off">
+        </div>
+    </div>
+    <!-- 寰呮坊鍔� -->
+    <div id="data-search-btn" class="layui-btn-container layui-form-item">
+        <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">鎼滅储</button>
+        <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">閲嶇疆</button>
+    </div>
+</div>
+
+<!-- 琛ㄦ牸 -->
+<div class="layui-form">
+    <table class="layui-hide" id="projectStatus" lay-filter="projectStatus"></table>
+</div>
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
+        <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">淇敼</a>
+    <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">鍒犻櫎</a>
+</script>
+
+<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/projectStatus/projectStatus.js" charset="utf-8"></script>
+</body>
+<!-- 琛ㄥ崟寮圭獥 -->
+<script type="text/html" id="editDialog">
+    <form id="detail" lay-filter="detail" class="layui-form admin-form">
+        <input name="id" type="hidden">
+        <div class="layui-row">
+            <div class="layui-col-md12">
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label layui-form-required">ID: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="id" placeholder="璇疯緭鍏ュ敮涓�ID" lay-vertype="tips" lay-verify="required" type="number">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="statusId" placeholder="璇疯緭鍏�">-->
+<!--                    </div>-->
+<!--                </div>-->
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">鐘舵�佸悕绉�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="statusName" placeholder="璇疯緭鍏�" lay-vertype="tips" lay-verify="required">
+                    </div>
+                </div>
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="type" placeholder="璇疯緭鍏�">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="statusClass" placeholder="璇疯緭鍏�">-->
+<!--                    </div>-->
+<!--                </div>-->
+                <div class="layui-form-item">
+                    <label class="layui-form-label">澶囨敞: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="memo" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="createId" placeholder="璇疯緭鍏�">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="createTime" id="createTime$" placeholder="璇疯緭鍏�">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="modifyId" placeholder="璇疯緭鍏�">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="modifyTime" id="modifyTime$" placeholder="璇疯緭鍏�">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="str1" placeholder="璇疯緭鍏�">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="str2" placeholder="璇疯緭鍏�">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="str3" placeholder="璇疯緭鍏�">-->
+<!--                    </div>-->
+<!--                </div>-->
+
+<!--             </div>-->
+        </div>
+        <hr class="layui-bg-gray">
+        <div class="layui-form-item text-right">
+            <button class="layui-btn" lay-filter="editSubmit" lay-submit="">淇濆瓨</button>
+            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+        </div>
+    </form>
+</script>
+</html>
+
diff --git a/src/main/webapp/views/projectType/projectType.html b/src/main/webapp/views/projectType/projectType.html
new file mode 100644
index 0000000..2a47dc6
--- /dev/null
+++ b/src/main/webapp/views/projectType/projectType.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all">
+    <link rel="stylesheet" href="../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../static/css/common.css" media="all">
+</head>
+<body>
+
+<!-- 鎼滅储鏍� -->
+<div id="search-box" class="layui-form layui-card-header">
+    <div class="layui-inline">
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="id" placeholder="缂栧彿" autocomplete="off">
+        </div>
+    </div>
+    <!-- 寰呮坊鍔� -->
+    <div id="data-search-btn" class="layui-btn-container layui-form-item">
+        <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">鎼滅储</button>
+        <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">閲嶇疆</button>
+    </div>
+</div>
+
+<!-- 琛ㄦ牸 -->
+<div class="layui-form">
+    <table class="layui-hide" id="projectType" lay-filter="projectType"></table>
+</div>
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
+        <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">淇敼</a>
+    <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">鍒犻櫎</a>
+</script>
+
+<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/projectType/projectType.js" charset="utf-8"></script>
+</body>
+<!-- 琛ㄥ崟寮圭獥 -->
+<script type="text/html" id="editDialog">
+    <form id="detail" lay-filter="detail" class="layui-form admin-form">
+        <input name="id" type="hidden">
+        <div class="layui-row">
+            <div class="layui-col-md12">
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label layui-form-required">ID: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="id" placeholder="璇疯緭鍏ュ敮涓�鐨勬暟瀛�" lay-vertype="tips" lay-verify="required" type="number">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="typeId" placeholder="璇疯緭鍏�">-->
+<!--                    </div>-->
+<!--                </div>-->
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">鍚嶇О: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="typeName" placeholder="璇疯緭鍏�" lay-vertype="tips" lay-verify="required">
+                    </div>
+                </div>
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="typeStatus" placeholder="璇疯緭鍏�">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="typeClass" placeholder="璇疯緭鍏�">-->
+<!--                    </div>-->
+<!--                </div>-->
+                <div class="layui-form-item">
+                    <label class="layui-form-label">澶囨敞: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="str1" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="str2" placeholder="璇疯緭鍏�">-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="str3" placeholder="璇疯緭鍏�">-->
+<!--                    </div>-->
+<!--                </div>-->
+
+             </div>
+        </div>
+        <hr class="layui-bg-gray">
+        <div class="layui-form-item text-right">
+            <button class="layui-btn" lay-filter="editSubmit" lay-submit="">淇濆瓨</button>
+            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+        </div>
+    </form>
+</script>
+</html>
+

--
Gitblit v1.9.1