From cff0c053baeb229a6c7a7794c061c179111e0b7f Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 31 八月 2023 10:46:12 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/zycrm' into zycrm

---
 src/main/webapp/views/reimburseOnline/reimburseOnline.html                 |  347 +++---
 src/main/webapp/views/businessTrip/businessTrip_more.html                  |  187 ++++
 src/main/java/com/zy/crm/manager/service/impl/BusinessTripServiceImpl.java |   12 
 src/main/java/com/zy/crm/manager/controller/BusinessTripController.java    |  286 ++++++
 src/main/java/com/zy/crm/manager/utils/TimeCalculatorUtils.java            |  141 +++
 src/main/webapp/views/plan/plan_more.html                                  |   24 
 src/main/webapp/views/plan/plan.html                                       |   10 
 src/main/java/com/zy/crm/manager/service/impl/CstmrServiceImpl.java        |    4 
 src/main/java/com/zy/crm/manager/utils/CarNumberUtils.java                 |   11 
 src/main/webapp/static/js/businessTrip/businessTrip.js                     |  430 +++++++++
 src/main/java/com/zy/crm/manager/mapper/BusinessTripMapper.java            |   12 
 src/main/webapp/views/businessTrip/businessTrip.html                       |  283 ++++++
 src/main/java/com/zy/crm/manager/entity/BusinessTrip.java                  |  673 ++++++++++++++
 src/main/webapp/views/cstmr/cstmr.html                                     |   34 
 src/main/resources/mapper/BusinessTripMapper.xml                           |   46 +
 src/main/java/com/zy/crm/common/model/SettleDto.java                       |   27 
 src/main/java/com/zy/crm/manager/service/BusinessTripService.java          |    8 
 src/main/webapp/static/js/reimburseOnline/reimburseOnline.js               |  120 +-
 src/main/java/com/zy/crm/manager/controller/ReimburseOnlineController.java |   55 +
 src/main/webapp/static/js/common.js                                        |    1 
 20 files changed, 2,470 insertions(+), 241 deletions(-)

diff --git a/src/main/java/com/zy/crm/common/model/SettleDto.java b/src/main/java/com/zy/crm/common/model/SettleDto.java
index 240f573..eef0c43 100644
--- a/src/main/java/com/zy/crm/common/model/SettleDto.java
+++ b/src/main/java/com/zy/crm/common/model/SettleDto.java
@@ -178,4 +178,31 @@
         return list;
     }
 
+    public static List<SettleDto> initBusiness(User manager ,User user) {
+        List<SettleDto> list = new ArrayList<>();
+        for (int i = 0; i < 7; i++) {
+            SettleDto dto = new SettleDto();
+            dto.setStep(i);
+            switch (i) {
+                case 1:
+                    dto.setTitle("鎻愪氦鍑哄樊");
+                    dto.setUserId(user.getId());
+                    dto.setUsername(user.getNickname());
+                    dto.setMsg(user.getNickname()+"鎻愪氦鍑哄樊鐢宠");
+                    dto.setTime(DateUtils.convert(new Date()));
+                    list.add(dto);
+                    break;
+                case 2:
+                    dto.setTitle("閮ㄩ棬缁忕悊瀹℃牳");
+                    dto.setUserId(manager.getId());
+                    dto.setUsername(manager.getNickname());
+                    list.add(dto);
+                    break;
+                default:
+                    break;
+            }
+        }
+        return list;
+    }
+
 }
diff --git a/src/main/java/com/zy/crm/manager/controller/BusinessTripController.java b/src/main/java/com/zy/crm/manager/controller/BusinessTripController.java
new file mode 100644
index 0000000..5ec6e3d
--- /dev/null
+++ b/src/main/java/com/zy/crm/manager/controller/BusinessTripController.java
@@ -0,0 +1,286 @@
+package com.zy.crm.manager.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
+import com.core.common.R;
+import com.core.exception.CoolException;
+import com.zy.crm.common.model.SettleDto;
+import com.zy.crm.common.web.BaseController;
+import com.zy.crm.manager.entity.BusinessTrip;
+import com.zy.crm.manager.entity.PlanType;
+import com.zy.crm.manager.entity.ProcessPermissions;
+import com.zy.crm.manager.entity.ReimburseOnline;
+import com.zy.crm.manager.service.BusinessTripService;
+import com.zy.crm.manager.utils.CarNumberUtils;
+import com.zy.crm.manager.utils.TimeCalculatorUtils;
+import com.zy.crm.system.entity.User;
+import com.zy.crm.system.service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+@RestController
+public class BusinessTripController extends BaseController {
+
+    @Autowired
+    private BusinessTripService businessTripService;
+    @Autowired
+    private UserService userService;
+
+    @RequestMapping(value = "/businessTrip/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        BusinessTrip businessTrip = businessTripService.selectById(String.valueOf(id));
+        assert businessTrip != null;
+        JSONObject resultObj = JSON.parseObject(JSON.toJSONString(businessTrip));
+        // 姝ラ鏉$浉鍏�
+        resultObj.put("step", businessTrip.getSettle() == 3 ? 0 : businessTrip.getSettle() + 1);
+        return R.ok().add(resultObj);
+    }
+
+    @RequestMapping(value = "/businessTrip/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<BusinessTrip> wrapper = new EntityWrapper<>();
+        excludeTrash(param);
+        convert(param, wrapper);
+//        wrapper.or().eq("member_id",getUserId());
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        return R.ok(businessTripService.selectPage(new Page<>(curr, limit), wrapper));
+    }
+
+    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
+        Long deptId = getDeptId();
+        boolean signUserId = false;
+        boolean signDeptId = false;
+        boolean signHostId = false;
+        for (Map.Entry<String, Object> entry : map.entrySet()){
+            if (entry.getKey().equals("dept_id")){
+                signDeptId = true;
+                if (String.valueOf(entry.getValue()).equals("19")){
+                    signHostId = true;
+                }
+            }
+        }
+        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 if (entry.getKey().equals("dept_id")){
+                if (!val.equals("19")){
+                    wrapper.eq(entry.getKey(), val);
+                }
+            } else if (entry.getKey().equals("user_id") && !signDeptId){
+                signUserId = true;
+                wrapper.eq(entry.getKey(), val);
+            } else {
+                wrapper.like(entry.getKey(), val);
+            }
+        }
+        if (!signUserId && !signDeptId){
+            wrapper.eq("user_id", getUserId());
+        }
+        if (signHostId){
+            wrapper.or().eq("host_id",1);
+        }
+    }
+
+    @RequestMapping(value = "/businessTrip/add/auth")
+    @ManagerAuth
+    public R add(BusinessTrip businessTrip) {
+        if (Cools.isEmpty(businessTrip)){
+            return R.error();
+        }
+        Date now = new Date();
+        //鍒ゆ柇杞︾墝鍙�
+        if (businessTrip.getBusinessTransportation()==5 || businessTrip.getBusinessTransportation()==4){
+            boolean carNumberBoolean = CarNumberUtils.isValidLicensePlate(businessTrip.getCarNumber());
+            if (!carNumberBoolean){
+                return R.error("璇疯緭鍏ユ湁鏁堣溅鐗屽彿");
+            }
+        }else {
+            businessTrip.setCarNumber("鏃�");
+            businessTrip.setKilometers("鏃�");
+        }
+        businessTrip.setBusinessPeersId(System.currentTimeMillis());
+
+        if (!TimeCalculatorUtils.CompareData(businessTrip.getBusinessStartTime(),businessTrip.getBusinessEndTime())){
+            return R.error("缁撴潫鏃堕棿搴斿ぇ浜庣瓑浜庡紑濮嬫椂闂�");
+        }
+
+        if (TimeCalculatorUtils.DifferenceYest(businessTrip.getBusinessStartTime(),businessTrip.getBusinessEndTime())!=0){
+            int month = TimeCalculatorUtils.DifferenceMonth(businessTrip.getBusinessStartTime(), businessTrip.getBusinessEndTime());
+            int yest = TimeCalculatorUtils.DifferenceYest(businessTrip.getBusinessStartTime(), businessTrip.getBusinessEndTime());
+            int i = month + yest * 12;
+            if (i>12){
+                return R.error("鍑哄樊鏃堕暱涓嶅彲瓒呰繃涓�骞�");
+            }
+        }
+
+        businessTrip.setBusinessDuration(TimeCalculatorUtils.DifferenceDayMorningAfternoon(businessTrip.getBusinessStartTime(),businessTrip.getBusinessEndTime(),businessTrip.getBusinessStartTimeDay(),businessTrip.getBusinessEndTimeDay()));
+        businessTrip.setBusinessTripDays(TimeCalculatorUtils.DifferenceDayInt(businessTrip.getBusinessStartTime(),businessTrip.getBusinessEndTime()));
+        businessTrip.setUserId(getUserId());
+        businessTrip.setDeptId(getDeptId());
+        businessTrip.setCreateTime(now);
+        businessTrip.setUserId(getUserId());
+        businessTrip.setUpdateTime(now);
+        businessTrip.setUpdateId(getUserId());
+        businessTrip.setStatus(0);
+        businessTrip.setSettle(1);
+
+        User manager = userService.getDeptManager(getHostId(), getUser().getDeptId());        // 鑾峰彇閮ㄩ棬棰嗗
+
+        businessTrip.setSettleMsg(JSON.toJSONString(SettleDto.initBusiness(manager,getUser())));
+
+        businessTripService.insert(businessTrip);
+        return R.ok();
+    }
+
+	@RequestMapping(value = "/businessTrip/update/auth")
+	@ManagerAuth
+    public R update(BusinessTrip businessTrip){
+        if (Cools.isEmpty(businessTrip) || null==businessTrip.getId()){
+            return R.error();
+        }
+        Date now = new Date();
+        //鍒ゆ柇杞︾墝鍙�
+        if (businessTrip.getBusinessTransportation()==5 || businessTrip.getBusinessTransportation()==4){
+            boolean carNumberBoolean = CarNumberUtils.isValidLicensePlate(businessTrip.getCarNumber());
+            if (!carNumberBoolean){
+                return R.error("璇疯緭鍏ユ湁鏁堣溅鐗屽彿");
+            }
+        }else {
+            businessTrip.setCarNumber("鏃�");
+        }
+        businessTrip.setBusinessPeersId(System.currentTimeMillis());
+
+        if (!TimeCalculatorUtils.CompareData(businessTrip.getBusinessStartTime(),businessTrip.getBusinessEndTime())){
+            return R.error("缁撴潫鏃堕棿搴斿ぇ浜庣瓑浜庡紑濮嬫椂闂�");
+        }
+
+        if (TimeCalculatorUtils.DifferenceYest(businessTrip.getBusinessStartTime(),businessTrip.getBusinessEndTime())!=0){
+            int month = TimeCalculatorUtils.DifferenceMonth(businessTrip.getBusinessStartTime(), businessTrip.getBusinessEndTime());
+            int yest = TimeCalculatorUtils.DifferenceYest(businessTrip.getBusinessStartTime(), businessTrip.getBusinessEndTime());
+            int i = month + yest * 12;
+            if (i>12){
+                return R.error("鍑哄樊鏃堕暱涓嶅彲瓒呰繃涓�骞�");
+            }
+        }
+        businessTrip.setBusinessDuration(TimeCalculatorUtils.DifferenceDayMorningAfternoon(businessTrip.getBusinessStartTime(),businessTrip.getBusinessEndTime(),businessTrip.getBusinessStartTimeDay(),businessTrip.getBusinessEndTimeDay()));
+        businessTrip.setBusinessTripDays(TimeCalculatorUtils.DifferenceDayInt(businessTrip.getBusinessStartTime(),businessTrip.getBusinessEndTime()));
+        businessTrip.setUpdateTime(now);
+        businessTrip.setUpdateId(getUserId());
+        businessTripService.updateById(businessTrip);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/businessTrip/delete/auth")
+    @ManagerAuth
+    public R delete(@RequestParam(value="ids[]") Long[] ids){
+         for (Long id : ids){
+            businessTripService.deleteById(id);
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/businessTrip/export/auth")
+    @ManagerAuth
+    public R export(@RequestBody JSONObject param){
+        EntityWrapper<BusinessTrip> wrapper = new EntityWrapper<>();
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        Map<String, Object> map = excludeTrash(param.getJSONObject("businessTrip"));
+        convert(map, wrapper);
+        List<BusinessTrip> list = businessTripService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/businessTripQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<BusinessTrip> wrapper = new EntityWrapper<>();
+        wrapper.like("id", condition);
+        Page<BusinessTrip> page = businessTripService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (BusinessTrip businessTrip : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", businessTrip.getId());
+            map.put("value", businessTrip.getId());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/businessTrip/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<BusinessTrip> wrapper = new EntityWrapper<BusinessTrip>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != businessTripService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(BusinessTrip.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+    @PostMapping(value = "/businessTrip/approval/auth")
+    @ManagerAuth
+    public R approvalBusinessTrip(@RequestParam Long planId,
+                                     @RequestParam(required = false) Long plannerId){
+        BusinessTrip businessTrip = businessTripService.selectById(planId);
+        assert businessTrip != null;
+        Date now = new Date();
+        switch (businessTrip.getSettle()) {
+            case 1:
+                // 鏈儴闂ㄧ粡鐞嗗鏍�
+                User user = userService.selectById(businessTrip.getUserId());
+                User manager = userService.getDeptManager(getHostId(), user.getDeptId());
+                if (manager.getId().equals(getUserId())) {
+
+                    // 淇敼 settle 姝ラ鏁版嵁
+                    List<SettleDto> list = JSON.parseArray(businessTrip.getSettleMsg(), SettleDto.class);
+                    for (SettleDto dto : list) {
+                        switch (dto.getStep()) {
+                            case 1:
+                                dto.setCurr(Boolean.FALSE);
+                                break;
+                            case 2:
+                                dto.setCurr(Boolean.TRUE);
+                                dto.setMsg("閮ㄩ棬缁忕悊" + manager.getNickname() + "瀹℃壒閫氳繃");
+                                dto.setTime(DateUtils.convert(now));
+                                break;
+                            default:
+                                break;
+                        }
+                    }
+                    businessTrip.setSettleMsg(JSON.toJSONString(list));
+
+                    // 淇敼瑙勫垝鍗曠姸鎬�
+                    businessTrip.setSettle(2);  // 鐢宠閫氳繃
+                    businessTrip.setUpdateId(getUserId());
+                    businessTrip.setUpdateTime(now);
+                    if (!businessTripService.updateById(businessTrip)) {
+                        throw new CoolException("瀹℃牳澶辫触锛岃鑱旂郴绠$悊鍛�");
+                    }
+                } else {
+                    return R.error("鎶辨瓑锛屾偍娌℃湁鎵瑰噯鐨勬潈闄愶紒锛侊紒");
+                }
+                break;
+            default:
+                return R.error();
+        }
+        return R.ok("瀹℃壒鎴愬姛");
+    }
+
+}
diff --git a/src/main/java/com/zy/crm/manager/controller/ReimburseOnlineController.java b/src/main/java/com/zy/crm/manager/controller/ReimburseOnlineController.java
index 336ced3..c2cc912 100644
--- a/src/main/java/com/zy/crm/manager/controller/ReimburseOnlineController.java
+++ b/src/main/java/com/zy/crm/manager/controller/ReimburseOnlineController.java
@@ -98,8 +98,8 @@
         excludeTrash(param);
         convert(param, wrapper);
         allLike(ReimburseOnline.class, param.keySet(), wrapper, condition);
-        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
         wrapper.or().eq("member_id",getUserId());
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
         return R.ok(reimburseOnlineService.selectPage(new Page<>(curr, limit), wrapper));
     }
 
@@ -141,7 +141,7 @@
         }
     }
     @RequestMapping(value = "/reimburseOnline/from/add/auth")
-    @ManagerAuth(memo = "鎶ラ攢")
+    @ManagerAuth(memo = "娣诲姞鎶ラ攢鍗�")
     @Transactional
     public R formAdd(@RequestBody ReimburseOnlineDomainParam param){
         long planId = 0;
@@ -176,7 +176,7 @@
         reimburseOnline.setSettleMsg(JSON.toJSONString(SettleDto.initPriQuote(reimburseOnline, manager,president3,president4,president5,president6,getUser())));
         Map<String, Object> map = new HashMap<>();
         map.put("title","闈為」鐩瀷鎶ラ攢");
-        map.put("reimburseId",param.getReimburseId());
+        map.put("reimburseId",reimburseOnline.getPlanId$());
         map.put("docType",param.getDocType());
         map.put("orderNo",param.getOrderNo());
         map.put("templateName",param.getTemplateName());
@@ -196,16 +196,61 @@
     }
 
     @RequestMapping(value = "/reimburseOnline/from/modify/auth")
+    @ManagerAuth(memo = "淇敼鎶ラ攢鍗�")
     @Transactional
     public R formModify(@RequestBody ReimburseOnlineDomainParam param){
-        System.out.println(param);
+
+        long planId = 0;
+        if (!param.getTemplateName().equals("闈為」鐩瀷鎶ラ攢")){
+            if (Cools.isEmpty(param.getOrderNo())){
+                return R.error("淇敼澶辫触锛�"+param.getTemplateName()+"闇�瑕佸叧鑱旈」鐩彿");
+            }
+            String[] split = param.getOrderNo().split("---");
+            planId = Long.parseLong(split[1]);
+        }
+        Date now = new Date();
+        ReimburseOnline reimburseOnline = reimburseOnlineService.selectById(param.getReimburseId());
+
+        if (!reimburseOnline.getSettle().equals(0)){
+            return R.error("淇敼澶辫触锛佹彁浜や箣鍚庣姝慨鏀癸紒");
+        }
+        if (!reimburseOnline.getUserId().equals(getUserId())){
+            return R.error("闈炲垱寤轰汉鍛樼姝慨鏀癸紒");
+        }
+
+
+        reimburseOnline.setCheckData(param.getCheckData());
+        reimburseOnline.setTemplateName(param.getTemplateName());
+        reimburseOnline.setItemId(planId);
+        reimburseOnline.setUpdateTime(new Date());
+
+        Map<String, Object> map = new HashMap<>();
+        map.put("title",reimburseOnline.getPlanId$());
+        map.put("reimburseId",param.getReimburseId());
+        map.put("docType",param.getDocType());
+        map.put("orderNo",param.getOrderNo());
+        map.put("templateName",param.getTemplateName());
+        map.put("checkData",param.getCheckData());
+        reimburseOnline.setForm(JSON.toJSONString(map));
+
+        if (!reimburseOnlineService.updateById(reimburseOnline)){
+            return R.error("鏇存柊鎶ラ攢涓绘。澶辫触");
+        }
+
+        reimburseOnlineDetlService.delete(new EntityWrapper<ReimburseOnlineDetl>().eq("order_id",reimburseOnline.getId()));
+
+        for (ReimburseOnlineDetl reimburseOnlineDetl:param.getReimburseOnlineDetls()){
+            reimburseOnlineDetl.setOrderId(reimburseOnline.getId());
+            reimburseOnlineDetlService.insert(reimburseOnlineDetl);
+        }
+
         return R.ok();
     }
 
     @RequestMapping(value = "/reimburseOnline/detl/all/auth")
     @Transactional
     public R head(@RequestParam Integer reimburseId){
-        List<ReimburseOnlineDetl> reimburseOnlineDetls = reimburseOnlineDetlService.selectList(new EntityWrapper<ReimburseOnlineDetl>().eq("reimburse_id", reimburseId));
+        List<ReimburseOnlineDetl> reimburseOnlineDetls = reimburseOnlineDetlService.selectList(new EntityWrapper<ReimburseOnlineDetl>().eq("order_id", reimburseId));
         return R.ok().add(reimburseOnlineDetls);
     }
 
diff --git a/src/main/java/com/zy/crm/manager/entity/BusinessTrip.java b/src/main/java/com/zy/crm/manager/entity/BusinessTrip.java
new file mode 100644
index 0000000..5ff25c8
--- /dev/null
+++ b/src/main/java/com/zy/crm/manager/entity/BusinessTrip.java
@@ -0,0 +1,673 @@
+package com.zy.crm.manager.entity;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+import com.core.common.Cools;
+import com.core.common.SpringUtils;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zy.crm.manager.utils.TimeCalculatorUtils;
+import com.zy.crm.system.entity.Dept;
+import com.zy.crm.system.entity.Dic;
+import com.zy.crm.system.entity.User;
+import com.zy.crm.system.service.DeptService;
+import com.zy.crm.system.service.DicService;
+import com.zy.crm.system.service.UserService;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+@Data
+@TableName("man_business_trip")
+public class BusinessTrip implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @ApiModelProperty(value= "ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 鍑哄樊浜嬬敱
+     */
+    @ApiModelProperty(value= "鍑哄樊浜嬬敱")
+    @TableField("business_trip_reasons")
+    private String businessTripReasons;
+
+    /**
+     * 浜ら�氬伐鍏�
+     */
+    @ApiModelProperty(value= "浜ら�氬伐鍏�")
+    @TableField("business_transportation")
+    private Integer businessTransportation;
+
+    /**
+     * 鍗曠▼寰�杩�
+     */
+    @ApiModelProperty(value= "鍗曠▼寰�杩�")
+    @TableField("business_return")
+    private Integer businessReturn;
+
+    /**
+     * 鍑哄彂鐪�
+     */
+    @ApiModelProperty(value= "鍑哄彂鐪�")
+    @TableField("business_start_province")
+    private String businessStartProvince;
+
+    /**
+     * 鍑哄彂甯�
+     */
+    @ApiModelProperty(value= "鍑哄彂甯�")
+    @TableField("business_start_city")
+    private String businessStartCity;
+
+    /**
+     * 鍑哄彂鍘�
+     */
+    @ApiModelProperty(value= "鍑哄彂鍘�")
+    @TableField("business_start_district")
+    private String businessStartDistrict;
+
+    /**
+     * 鍑哄彂闀�
+     */
+    @ApiModelProperty(value= "鍑哄彂闀�")
+    @TableField("business_start_town")
+    private String businessStartTown;
+
+    /**
+     * 鍑哄彂鍦�
+     */
+    @ApiModelProperty(value= "鍑哄彂鍦�")
+    @TableField("business_start_addr")
+    private String businessStartAddr;
+
+    /**
+     * 鐩殑鐪�
+     */
+    @ApiModelProperty(value= "鐩殑鐪�")
+    @TableField("business_end_province")
+    private String businessEndProvince;
+
+    /**
+     * 鐩殑甯�
+     */
+    @ApiModelProperty(value= "鐩殑甯�")
+    @TableField("business_end_city")
+    private String businessEndCity;
+
+    /**
+     * 鐩殑鍘�
+     */
+    @ApiModelProperty(value= "鐩殑鍘�")
+    @TableField("business_end_district")
+    private String businessEndDistrict;
+
+    /**
+     * 鐩殑闀�
+     */
+    @ApiModelProperty(value= "鐩殑闀�")
+    @TableField("business_end_town")
+    private String businessEndTown;
+
+    /**
+     * 鐩殑鍦�
+     */
+    @ApiModelProperty(value= "鐩殑鍦�")
+    @TableField("business_end_addr")
+    private String businessEndAddr;
+
+    /**
+     * 鍑哄彂鏃ユ湡
+     */
+    @ApiModelProperty(value= "鍑哄彂鏃ユ湡")
+    @TableField("business_start_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date businessStartTime;
+
+    /**
+     * 缁撴潫鏃ユ湡
+     */
+    @ApiModelProperty(value= "缁撴潫鏃ユ湡")
+    @TableField("business_end_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date businessEndTime;
+
+    /**
+     * 鍑哄樊鏃堕暱
+     */
+    @ApiModelProperty(value= "鍑哄樊鏃堕暱")
+    @TableField("business_duration")
+    private Double businessDuration;
+
+    /**
+     * 鍑哄樊澶╂暟
+     */
+    @ApiModelProperty(value= "鍑哄樊澶╂暟")
+    @TableField("business_trip_days")
+    private Integer businessTripDays;
+
+    /**
+     * 鍑哄樊澶囨敞
+     */
+    @ApiModelProperty(value= "鍑哄樊澶囨敞")
+    @TableField("business_notes")
+    private String businessNotes;
+
+    /**
+     * 鍑鸿浜恒�佸悓琛屼汉
+     */
+    @ApiModelProperty(value= "鍑鸿浜恒�佸悓琛屼汉")
+    @TableField("business_peers")
+    private String businessPeers;
+
+    /**
+     * 鍚岃浜篒D
+     */
+    @ApiModelProperty(value= "鍚岃浜篒D")
+    @TableField("business_peers_id")
+    private Long businessPeersId;
+
+    /**
+     * 鑷┚绉佸杞﹁溅鐗屽彿
+     */
+    @ApiModelProperty(value= "鑷┚绉佸杞﹁溅鐗屽彿")
+    @TableField("car_number")
+    private String carNumber;
+
+    /**
+     * 鑷┚绉佸杞﹁绋嬫槑缁嗗強鍏噷鏁�
+     */
+    @ApiModelProperty(value= "鑷┚绉佸杞﹁绋嬫槑缁嗗強鍏噷鏁�")
+    private String kilometers;
+
+    /**
+     * 鍒涘缓浜�
+     */
+    @ApiModelProperty(value= "鍒涘缓浜�")
+    @TableField("user_id")
+    private Long userId;
+
+    /**
+     * 鎵�灞為儴闂�
+     */
+    @ApiModelProperty(value= "鎵�灞為儴闂�")
+    @TableField("dept_id")
+    private Long deptId;
+
+    /**
+     * hostId
+     */
+    @ApiModelProperty(value= "hostId")
+    @TableField("host_id")
+    private Long hostId;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @ApiModelProperty(value= "鍒涘缓鏃堕棿")
+    @TableField("create_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 鏇存柊鏃堕棿
+     */
+    @ApiModelProperty(value= "鏇存柊鏃堕棿")
+    @TableField("update_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /**
+     * 鏇存柊浜哄憳ID
+     */
+    @ApiModelProperty(value= "鏇存柊浜哄憳ID")
+    @TableField("update_id")
+    private Long updateId;
+
+    @ApiModelProperty(value= "")
+    private String form;
+
+    /**
+     * 杩涘害
+     */
+    @ApiModelProperty(value= "杩涘害")
+    private Integer settle;
+
+    /**
+     * 娴佺▼杩涘害
+     */
+    @ApiModelProperty(value= "娴佺▼杩涘害")
+    @TableField("settle_msg")
+    private String settleMsg;
+
+    /**
+     * 鐘舵�� 1: 姝e父  0: 绂佺敤  
+     */
+    @ApiModelProperty(value= "鐘舵�� 1: 宸插畬鎴�  0: 鏈畬鎴�  ")
+    private Integer status;
+
+    /**
+     * 绫诲瀷
+     */
+    @ApiModelProperty(value= "绫诲瀷")
+    @TableField("business_trip_type")
+    private Integer businessTripType;
+
+    /**
+     * 绫诲瀷
+     */
+    @ApiModelProperty(value= "寮�濮嬫椂杈�")
+    @TableField("business_start_time_day")
+    private Integer businessStartTimeDay;
+
+    /**
+     * 绫诲瀷
+     */
+    @ApiModelProperty(value= "缁撴潫鏃惰景")
+    @TableField("business_end_time_day")
+    private Integer businessEndTimeDay;
+
+    @TableField(exist = false)
+    private String pcdStart;
+
+    @TableField(exist = false)
+    private String pcdEnd;
+
+    public BusinessTrip() {}
+
+    public BusinessTrip(String businessTripReasons, Integer businessTransportation, Integer businessReturn, String businessStartProvince, String businessStartCity, String businessStartDistrict, String businessStartTown, String businessStartAddr, String businessEndProvince, String businessEndCity, String businessEndDistrict, String businessEndTown, String businessEndAddr, Date businessStartTime, Date businessEndTime, Double businessDuration, Integer businessTripDays, String businessNotes, String businessPeers, Long businessPeersId, String carNumber, String kilometers, Long userId, Long deptId, Long hostId, Date createTime, Date updateTime, Long updateId, String form, Integer settle, String settleMsg, Integer status, Integer businessTripType, Integer businessStartTimeDay, Integer businessEndTimeDay) {
+        this.businessTripReasons = businessTripReasons;
+        this.businessTransportation = businessTransportation;
+        this.businessReturn = businessReturn;
+        this.businessStartProvince = businessStartProvince;
+        this.businessStartCity = businessStartCity;
+        this.businessStartDistrict = businessStartDistrict;
+        this.businessStartTown = businessStartTown;
+        this.businessStartAddr = businessStartAddr;
+        this.businessEndProvince = businessEndProvince;
+        this.businessEndCity = businessEndCity;
+        this.businessEndDistrict = businessEndDistrict;
+        this.businessEndTown = businessEndTown;
+        this.businessEndAddr = businessEndAddr;
+        this.businessStartTime = businessStartTime;
+        this.businessEndTime = businessEndTime;
+        this.businessDuration = businessDuration;
+        this.businessTripDays = businessTripDays;
+        this.businessNotes = businessNotes;
+        this.businessPeers = businessPeers;
+        this.businessPeersId = businessPeersId;
+        this.carNumber = carNumber;
+        this.kilometers = kilometers;
+        this.userId = userId;
+        this.deptId = deptId;
+        this.hostId = hostId;
+        this.createTime = createTime;
+        this.updateTime = updateTime;
+        this.updateId = updateId;
+        this.form = form;
+        this.settle = settle;
+        this.settleMsg = settleMsg;
+        this.status = status;
+        this.businessTripType = businessTripType;
+        this.businessStartTimeDay = businessStartTimeDay;
+        this.businessEndTimeDay = businessEndTimeDay;
+    }
+
+//    BusinessTrip businessTrip = new BusinessTrip(
+//            null,    // 鍑哄樊浜嬬敱[闈炵┖]
+//            null,    // 浜ら�氬伐鍏穂闈炵┖]
+//            null,    // 鍗曠▼寰�杩擺闈炵┖]
+//            null,    // 鍑哄彂鐪�
+//            null,    // 鍑哄彂甯�
+//            null,    // 鍑哄彂鍘�
+//            null,    // 鍑哄彂闀�
+//            null,    // 鍑哄彂鍦癧闈炵┖]
+//            null,    // 鐩殑鐪�
+//            null,    // 鐩殑甯�
+//            null,    // 鐩殑鍘�
+//            null,    // 鐩殑闀�
+//            null,    // 鐩殑鍦癧闈炵┖]
+//            null,    // 鍑哄彂鏃ユ湡[闈炵┖]
+//            null,    // 缁撴潫鏃ユ湡[闈炵┖]
+//            null,    // 鍑哄樊鏃堕暱
+//            null,    // 鍑哄樊澶╂暟
+//            null,    // 鍑哄樊澶囨敞
+//            null,    // 鍑鸿浜恒�佸悓琛屼汉[闈炵┖]
+//            null,    // 鍚岃浜篒D
+//            null,    // 鑷┚绉佸杞﹁溅鐗屽彿[闈炵┖]
+//            null,    // 鑷┚绉佸杞﹁绋嬫槑缁嗗強鍏噷鏁癧闈炵┖]
+//            null,    // 鍒涘缓浜�
+//            null,    // 鎵�灞為儴闂�
+//            null,    // hostId
+//            null,    // 鍒涘缓鏃堕棿
+//            null,    // 鏇存柊鏃堕棿
+//            null,    // 鏇存柊浜哄憳ID
+//            null,    // 
+//            null,    // 杩涘害
+//            null,    // 娴佺▼杩涘害
+//            null,    // 鐘舵��
+//            null    // 绫诲瀷
+//    );
+
+    public String getBusinessStartTime$(){
+        if (Cools.isEmpty(this.businessStartTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.businessStartTime);
+    }
+
+    public String getBusinessEndTime$(){
+        if (Cools.isEmpty(this.businessEndTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.businessEndTime);
+    }
+
+    public String getCreateTime$(){
+        if (Cools.isEmpty(this.createTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
+    }
+
+    public String getUpdateTime$(){
+        if (Cools.isEmpty(this.updateTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
+    }
+
+    public String getUpdateId$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.updateId);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getNickname());
+        }
+        return null;
+    }
+
+    public String getUserId$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.userId);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getNickname());
+        }
+        return null;
+    }
+
+    public String getDeptId$(){
+        DeptService service = SpringUtils.getBean(DeptService.class);
+        Dept dept = service.selectById(this.deptId);
+        if (!Cools.isEmpty(dept)){
+            return String.valueOf(dept.getName());
+        }
+        return null;
+    }
+
+    public String getSettle$(){
+        if (null == this.settle){ return null; }
+        switch (this.settle){
+            case 1:
+                return "绛夊緟鎵瑰噯";
+            case 2:
+                return "鐢宠閫氳繃";
+            default:
+                return String.valueOf(this.settle);
+        }
+    }
+
+
+
+    public String getStatus$(){
+        if (null == this.status){ return null; }
+        switch (this.status){
+            case 1:
+                return "宸插畬鎴�";
+            case 0:
+                return "鏈畬鎴�";
+            default:
+                return String.valueOf(this.status);
+        }
+    }
+
+    public String getBusinessTransportation$(){
+        if (null == this.businessTransportation){ return null; }
+        switch (this.businessTransportation){
+            case 1:
+                return "椋炴満";
+            case 2:
+                return "楂橀搧";
+            case 3:
+                return "鐏溅";
+            case 4:
+                return "姹借溅";
+            case 5:
+                return "鎽╂墭";
+            case 6:
+                return "鐢佃溅";
+            default:
+//                return String.valueOf(this.status);
+                return "鍏跺畠";
+        }
+    }
+
+    public String getBusinessReturn$(){
+        if (null == this.businessTransportation){ return null; }
+        switch (this.businessTransportation){
+            case 1:
+                return "鍗曠▼";
+            case 2:
+                return "寰�杩�";
+            default:
+//                return String.valueOf(this.status);
+                return "鍏跺畠";
+        }
+    }
+
+    public String getBusinessStartTimeDay$(){
+        if (null == this.businessStartTimeDay){ return null; }
+        switch (this.businessStartTimeDay){
+            case 1:
+                return TimeCalculatorUtils.timeYestMonthDay(this.businessStartTime)+ "涓婂崍";
+            case 2:
+                return TimeCalculatorUtils.timeYestMonthDay(this.businessStartTime)+ "涓嬪崍";
+            default:
+//                return String.valueOf(this.status);
+                return "鏈煡";
+        }
+    }
+
+    public String getBusinessEndTimeDay$(){
+        if (null == this.businessEndTimeDay){ return null; }
+        switch (this.businessTransportation){
+            case 1:
+                return TimeCalculatorUtils.timeYestMonthDay(this.businessEndTime)+ "涓婂崍";
+            case 2:
+                return TimeCalculatorUtils.timeYestMonthDay(this.businessEndTime)+ "涓嬪崍";
+            default:
+//                return String.valueOf(this.status);
+                return "鏈煡";
+        }
+    }
+
+    public String getBusinessDuration$(){
+        if (null == this.businessDuration) return null;
+        return this.businessDuration+"\t澶�";
+    }
+
+    public String getBusinessTripDays$(){
+        if (null == this.businessTripDays) return null;
+        return this.businessTripDays+"\t澶�";
+    }
+
+    public String getPcdStart() {
+        StringBuilder sb = new StringBuilder();
+        if (!Cools.isEmpty(businessStartProvince)) {
+            sb.append(businessStartProvince).append(",");
+        }
+        if (!Cools.isEmpty(businessStartCity)) {
+            sb.append(businessStartCity).append(",");
+        }
+        if (!Cools.isEmpty(businessStartDistrict)) {
+            sb.append(businessStartDistrict).append(",");
+        }
+        String s = sb.toString();
+        if (s.endsWith(",")) {
+            s = s.substring(0, s.length() - 1);
+        }
+        return s;
+    }
+
+    public String getPcdStart$() {
+        StringBuilder sb = new StringBuilder();
+        DicService service = SpringUtils.getBean(DicService.class);
+        if (!Cools.isEmpty(businessStartProvince)) {
+            Dic provinceDic = service.selectById(businessStartProvince);
+            if (!Cools.isEmpty(provinceDic)) {
+                sb.append(provinceDic.getName()).append(",");
+            }
+        }
+        if (!Cools.isEmpty(businessStartCity)) {
+            Dic cityDic = service.selectById(businessStartCity);
+            if (!Cools.isEmpty(cityDic)) {
+                sb.append(cityDic.getName()).append(",");
+            }
+        }
+        if (!Cools.isEmpty(businessStartDistrict)) {
+            Dic districtDic = service.selectById(businessStartDistrict);
+            if (!Cools.isEmpty(districtDic)) {
+                sb.append(districtDic.getName()).append(",");
+            }
+        }
+        String s = sb.toString();
+        if (s.endsWith(",")) {
+            s = s.substring(0, s.length() - 1);
+        }
+        return s;
+    }
+
+    public void setPcdStart(String pcdStart) {
+        this.pcdStart = pcdStart;
+        if (!Cools.isEmpty(pcdStart)) {
+            String[] split = this.pcdStart.split(",");
+            for (int i = 0;i< split.length; i++) {
+                switch (i) {
+                    case 0:
+                        this.businessStartProvince = split[0];
+                        break;
+                    case 1:
+                        this.businessStartCity = split[1];
+                        break;
+                    case 2:
+                        this.businessStartDistrict = split[2];
+                        break;
+                    default:
+                        break;
+                }
+            }
+        } else {
+            this.businessStartProvince = "";
+            this.businessStartCity = "";
+            this.businessStartDistrict = "";
+        }
+    }
+
+    public String getPcdEnd() {
+        StringBuilder sb = new StringBuilder();
+        if (!Cools.isEmpty(businessEndProvince)) {
+            sb.append(businessEndProvince).append(",");
+        }
+        if (!Cools.isEmpty(businessEndCity)) {
+            sb.append(businessEndCity).append(",");
+        }
+        if (!Cools.isEmpty(businessEndDistrict)) {
+            sb.append(businessEndDistrict).append(",");
+        }
+        String s = sb.toString();
+        if (s.endsWith(",")) {
+            s = s.substring(0, s.length() - 1);
+        }
+        return s;
+    }
+
+    public String getPcdEnd$() {
+        StringBuilder sb = new StringBuilder();
+        DicService service = SpringUtils.getBean(DicService.class);
+        if (!Cools.isEmpty(businessEndProvince)) {
+            Dic provinceDic = service.selectById(businessEndProvince);
+            if (!Cools.isEmpty(provinceDic)) {
+                sb.append(provinceDic.getName()).append(",");
+            }
+        }
+        if (!Cools.isEmpty(businessEndCity)) {
+            Dic cityDic = service.selectById(businessEndCity);
+            if (!Cools.isEmpty(cityDic)) {
+                sb.append(cityDic.getName()).append(",");
+            }
+        }
+        if (!Cools.isEmpty(businessEndDistrict)) {
+            Dic districtDic = service.selectById(businessEndDistrict);
+            if (!Cools.isEmpty(districtDic)) {
+                sb.append(districtDic.getName()).append(",");
+            }
+        }
+        String s = sb.toString();
+        if (s.endsWith(",")) {
+            s = s.substring(0, s.length() - 1);
+        }
+        return s;
+    }
+
+    public void setPcdEnd(String pcdEnd) {
+        this.pcdEnd = pcdEnd;
+        if (!Cools.isEmpty(pcdEnd)) {
+            String[] split = this.pcdEnd.split(",");
+            for (int i = 0;i< split.length; i++) {
+                switch (i) {
+                    case 0:
+                        this.businessEndProvince = split[0];
+                        break;
+                    case 1:
+                        this.businessEndCity = split[1];
+                        break;
+                    case 2:
+                        this.businessEndDistrict = split[2];
+                        break;
+                    default:
+                        break;
+                }
+            }
+        } else {
+            this.businessEndProvince = "";
+            this.businessEndCity = "";
+            this.businessEndDistrict = "";
+        }
+    }
+
+    public String getBusinessStartAddr$(){
+        if (!Cools.isEmpty(businessStartAddr)){
+            return getPcdStart$()+"--"+businessStartAddr;
+        }
+        return getPcdStart$();
+    }
+
+    public String getBusinessEndAddr$(){
+        if (!Cools.isEmpty(businessEndAddr)){
+            return getPcdEnd$()+"--"+businessEndAddr;
+        }
+        return getPcdStart$();
+    }
+
+}
diff --git a/src/main/java/com/zy/crm/manager/mapper/BusinessTripMapper.java b/src/main/java/com/zy/crm/manager/mapper/BusinessTripMapper.java
new file mode 100644
index 0000000..a6883f8
--- /dev/null
+++ b/src/main/java/com/zy/crm/manager/mapper/BusinessTripMapper.java
@@ -0,0 +1,12 @@
+package com.zy.crm.manager.mapper;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.zy.crm.manager.entity.BusinessTrip;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface BusinessTripMapper extends BaseMapper<BusinessTrip> {
+
+}
diff --git a/src/main/java/com/zy/crm/manager/service/BusinessTripService.java b/src/main/java/com/zy/crm/manager/service/BusinessTripService.java
new file mode 100644
index 0000000..0590825
--- /dev/null
+++ b/src/main/java/com/zy/crm/manager/service/BusinessTripService.java
@@ -0,0 +1,8 @@
+package com.zy.crm.manager.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.zy.crm.manager.entity.BusinessTrip;
+
+public interface BusinessTripService extends IService<BusinessTrip> {
+
+}
diff --git a/src/main/java/com/zy/crm/manager/service/impl/BusinessTripServiceImpl.java b/src/main/java/com/zy/crm/manager/service/impl/BusinessTripServiceImpl.java
new file mode 100644
index 0000000..a3057e8
--- /dev/null
+++ b/src/main/java/com/zy/crm/manager/service/impl/BusinessTripServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.crm.manager.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.zy.crm.manager.entity.BusinessTrip;
+import com.zy.crm.manager.mapper.BusinessTripMapper;
+import com.zy.crm.manager.service.BusinessTripService;
+import org.springframework.stereotype.Service;
+
+@Service("businessTripService")
+public class BusinessTripServiceImpl extends ServiceImpl<BusinessTripMapper, BusinessTrip> implements BusinessTripService {
+
+}
diff --git a/src/main/java/com/zy/crm/manager/service/impl/CstmrServiceImpl.java b/src/main/java/com/zy/crm/manager/service/impl/CstmrServiceImpl.java
index 0d3e3ea..c4725b8 100644
--- a/src/main/java/com/zy/crm/manager/service/impl/CstmrServiceImpl.java
+++ b/src/main/java/com/zy/crm/manager/service/impl/CstmrServiceImpl.java
@@ -36,9 +36,9 @@
     private String getNextUuid(Long hostId) {
         Cstmr cstmr = this.baseMapper.selectCstmrByNewestUuid(hostId);
         if (cstmr == null) {
-            return "0001";
+            return "00001";
         }
-        return zerofill(String.valueOf(Integer.parseInt(cstmr.getUuid()) + 1), 4);
+        return zerofill(String.valueOf(Integer.parseInt(cstmr.getUuid()) + 1), 5);
     }
 
     @Override
diff --git a/src/main/java/com/zy/crm/manager/utils/CarNumberUtils.java b/src/main/java/com/zy/crm/manager/utils/CarNumberUtils.java
new file mode 100644
index 0000000..6f78f43
--- /dev/null
+++ b/src/main/java/com/zy/crm/manager/utils/CarNumberUtils.java
@@ -0,0 +1,11 @@
+package com.zy.crm.manager.utils;
+
+import java.util.regex.Pattern;
+
+public class CarNumberUtils {
+    private static final Pattern LICENSE_PLATE_PATTERN = Pattern.compile("^[\u4e00-\u9fa5]{1}[A-Z]{1}[A-Z_0-9]{5}$");
+
+    public static boolean isValidLicensePlate(String licensePlate) {
+        return LICENSE_PLATE_PATTERN.matcher(licensePlate).matches();
+    }
+}
diff --git a/src/main/java/com/zy/crm/manager/utils/TimeCalculatorUtils.java b/src/main/java/com/zy/crm/manager/utils/TimeCalculatorUtils.java
new file mode 100644
index 0000000..880a559
--- /dev/null
+++ b/src/main/java/com/zy/crm/manager/utils/TimeCalculatorUtils.java
@@ -0,0 +1,141 @@
+package com.zy.crm.manager.utils;
+
+import java.time.LocalDate;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.TimeZone;
+
+public class TimeCalculatorUtils {
+
+    //鑾峰彇褰撳墠鏃堕棿鐨勫皬鏃舵暟锛�24灏忔椂鍒讹級锛�
+    public static int nowTimeHour(){
+        // 鑾峰彇褰撳墠鏃堕棿鎴�
+        long timestamp = System.currentTimeMillis();
+
+        // 鍒涘缓Date瀵硅薄锛屽苟璁剧疆鏃堕棿鎴�
+        Date date = new Date(timestamp);
+
+        // 鍒涘缓TimeZone瀵硅薄锛岃缃负涓浗鍖椾含鏃堕棿
+        TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
+
+        // 鍒涘缓Calendar瀵硅薄锛屽苟璁剧疆鏃跺尯
+        // 娉ㄦ剰锛欳alendar绫讳腑鐨勬湀浠芥槸浠�0寮�濮嬬殑锛屾墍浠ラ渶瑕佸噺鍘�1
+        java.util.Calendar calendar = java.util.Calendar.getInstance(timeZone);
+        calendar.setTime(date);
+
+        // 鑾峰彇褰撳墠灏忔椂鏁帮紙24灏忔椂鍒讹級
+        return calendar.get(java.util.Calendar.HOUR_OF_DAY);
+    }
+
+    //鑾峰彇褰撳ぉ灏忔椂鏁帮紙24灏忔椂鍒讹級涓浗鍖椾含鏃堕棿锛�
+    public static int timeTimeHour(Date date){
+        // 鍒涘缓TimeZone瀵硅薄锛岃缃负涓浗鍖椾含鏃堕棿
+        TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
+
+        // 鍒涘缓Calendar瀵硅薄锛屽苟璁剧疆鏃跺尯
+        // 娉ㄦ剰锛欳alendar绫讳腑鐨勬湀浠芥槸浠�0寮�濮嬬殑锛屾墍浠ラ渶瑕佸噺鍘�1
+        java.util.Calendar calendar = java.util.Calendar.getInstance(timeZone);
+        calendar.setTime(date);
+
+        // 鑾峰彇褰撳墠灏忔椂鏁帮紙24灏忔椂鍒讹級
+        return calendar.get(java.util.Calendar.HOUR_OF_DAY);
+    }
+
+    //鑾峰彇鍓嶄竴澶╃殑鏃ユ湡锛堟棩鏈熷ぉ鏁板噺涓�锛�
+    public static Date timeYesterday(Date date){
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.add(Calendar.DAY_OF_MONTH, -1);
+        return calendar.getTime();
+    }
+
+    //鑾峰彇骞存湀鏃�
+    public static String timeYestMonthDay(Date date){
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+
+        int year = calendar.get(Calendar.YEAR);
+        int month = calendar.get(Calendar.MONTH) + 1;  // 鏈堜唤浠�0寮�濮嬶紝闇�瑕佸姞1
+        int day = calendar.get(Calendar.DAY_OF_MONTH);
+        return year+"骞�"+month+"鏈�"+day+"鏃�";
+    }
+
+    //鑾峰彇骞�
+    public static int timeYest(Date date){
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+
+        return calendar.get(Calendar.YEAR);
+    }
+
+    //鑾峰彇鏈�
+    public static int timeMonth(Date date){
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+
+        return calendar.get(Calendar.MONTH) + 1;
+    }
+
+    //鑾峰彇鏃�
+    public static int timeDay(Date date){
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+
+        return calendar.get(Calendar.DAY_OF_MONTH);
+    }
+    //鑾峰彇骞村樊寮�
+    public static int DifferenceYest(Date startDay,Date endDay){
+        int startYest = timeYest(startDay);
+        int endYest = timeYest(endDay);
+        return endYest-startYest;
+    }
+    //鑾峰彇鏈堝樊寮�
+    public static int DifferenceMonth(Date startDay,Date endDay){
+        int startMonth = timeMonth(startDay);
+        int endMonth = timeMonth(endDay);
+        return endMonth-startMonth;
+    }
+    //鑾峰彇澶╁樊寮�
+    public static int DifferenceDayInt(Date startDay,Date endDay){
+        return DifferenceDayLong(startDay,endDay).intValue();
+    }
+    //鑾峰彇澶╁樊寮�
+    public static Long DifferenceDayLong(Date startDay,Date endDay){
+
+        LocalDate a = LocalDate.of(timeYest(startDay), timeMonth(startDay), timeDay(startDay));
+        LocalDate b = LocalDate.of(timeYest(endDay), timeMonth(endDay), timeDay(endDay));
+
+        return ChronoUnit.DAYS.between(a, b)+1;
+    }
+    //鑾峰彇澶╁樊寮�
+    public static Double DifferenceDayMorningAfternoon(Date startDay,Date endDay,int startTime,int endTime){
+        double between = DifferenceDayLong(startDay, endDay).doubleValue();
+        if (startTime==2){
+            between = between-0.5;
+        }
+        if (endTime == 1){
+            between = between-0.5;
+        }
+        return between;
+    }
+
+    public static boolean CompareData(Date startDay,Date endDay){
+
+        // 灏嗘棩鏈熷瓧绗︿覆瑙f瀽涓篖ocalDate瀵硅薄
+        LocalDate a = LocalDate.of(timeYest(startDay), timeMonth(startDay), timeDay(startDay));
+        LocalDate b = LocalDate.of(timeYest(endDay), timeMonth(endDay), timeDay(endDay));
+
+        // 姣旇緝鏃ユ湡
+        if (a.isAfter(b)) {
+            return false;
+        } else if (a.isBefore(b)) {
+            return true;
+        } else {
+            return true;
+        }
+    }
+
+}
diff --git a/src/main/resources/mapper/BusinessTripMapper.xml b/src/main/resources/mapper/BusinessTripMapper.xml
new file mode 100644
index 0000000..ab2d560
--- /dev/null
+++ b/src/main/resources/mapper/BusinessTripMapper.xml
@@ -0,0 +1,46 @@
+<?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="com.zy.crm.manager.mapper.BusinessTripMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.zy.crm.manager.entity.BusinessTrip">
+        <id column="id" property="id" />
+        <result column="business_trip_reasons" property="businessTripReasons" />
+        <result column="business_transportation" property="businessTransportation" />
+        <result column="business_return" property="businessReturn" />
+        <result column="business_start_province" property="businessStartProvince" />
+        <result column="business_start_city" property="businessStartCity" />
+        <result column="business_start_district" property="businessStartDistrict" />
+        <result column="business_start_town" property="businessStartTown" />
+        <result column="business_start_addr" property="businessStartAddr" />
+        <result column="business_end_province" property="businessEndProvince" />
+        <result column="business_end_city" property="businessEndCity" />
+        <result column="business_end_district" property="businessEndDistrict" />
+        <result column="business_end_town" property="businessEndTown" />
+        <result column="business_end_addr" property="businessEndAddr" />
+        <result column="business_start_time" property="businessStartTime" />
+        <result column="business_end_time" property="businessEndTime" />
+        <result column="business_duration" property="businessDuration" />
+        <result column="business_trip_days" property="businessTripDays" />
+        <result column="business_notes" property="businessNotes" />
+        <result column="business_peers" property="businessPeers" />
+        <result column="business_peers_id" property="businessPeersId" />
+        <result column="car_number" property="carNumber" />
+        <result column="kilometers" property="kilometers" />
+        <result column="user_id" property="userId" />
+        <result column="dept_id" property="deptId" />
+        <result column="host_id" property="hostId" />
+        <result column="create_time" property="createTime" />
+        <result column="update_time" property="updateTime" />
+        <result column="update_id" property="updateId" />
+        <result column="form" property="form" />
+        <result column="settle" property="settle" />
+        <result column="settle_msg" property="settleMsg" />
+        <result column="status" property="status" />
+        <result column="business_trip_type" property="businessTripType" />
+        <result column="business_start_time_day" property="businessStartTimeDay" />
+        <result column="business_end_time_day" property="businessEndTimeDay" />
+
+    </resultMap>
+
+</mapper>
diff --git a/src/main/webapp/static/js/businessTrip/businessTrip.js b/src/main/webapp/static/js/businessTrip/businessTrip.js
new file mode 100644
index 0000000..e9096f7
--- /dev/null
+++ b/src/main/webapp/static/js/businessTrip/businessTrip.js
@@ -0,0 +1,430 @@
+var pageCurr;
+layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"
+}).extend({
+    cascader: 'cascader/cascader',
+}).use(['table','laydate', 'form', 'admin', 'cascader', 'tree', 'dropdown'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+    var admin = layui.admin;
+    var cascader = layui.cascader;
+    var tree = layui.tree;
+    var dropdown = layui.dropdown;
+
+    $('#organization').html(localStorage.getItem('nickname') + ' <i class="layui-icon">&#xe61a;</i>');
+
+    // 閮ㄩ棬浜哄憳 绛涢��
+    dropdown.render({
+        elem: '#organization'
+        ,content: ['<div id="organizationTree" style="height: calc(100vh - 525px);border: none"></div>'].join('')
+        ,style: 'width: 370px; height: 350px; padding: 0 15px; box-shadow: 1px 1px 30px rgb(0 0 0 / 12%);'
+        ,ready: function(){
+            loadTree();
+        }
+    });
+
+    // 鏍戝舰鍥�
+    var organizationTree;
+    window.loadTree = function(condition){
+        var loadIndex = layer.load(2);
+        $.ajax({
+            url: baseUrl+"/dept/user/tree/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: {
+                'condition': condition
+            },
+            method: 'POST',
+            success: function (res) {
+                layer.close(loadIndex);
+                if (res.code === 200){
+                    organizationTree = tree.render({
+                        elem: '#organizationTree',
+                        id: 'organizationTree',
+                        onlyIconControl: true,
+                        data: res.data,
+                        click: function (obj) {
+                            treeCond = {
+                                key: obj.data.key,
+                                val: obj.data.id
+                            }
+                            $('#organization').html(obj.data.title + ' <i class="layui-icon">&#xe61a;</i>');
+                            $('#organizationTree').find('.ew-tree-click').removeClass('ew-tree-click');
+                            $(obj.elem).children('.layui-tree-entry').addClass('ew-tree-click');
+                            clearFormVal($('#search-box'));
+                            tableIns.reload({
+                                where: {[obj.data.key]: obj.data.id},
+                                page: {curr: 1}
+                            });
+                        }
+                    });
+                    treeData = res.data;
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                } else {
+                    layer.msg(res.msg)
+                }
+            }
+        })
+    }
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#businessTrip',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/businessTrip/list/auth',
+        page: true,
+        limit: 15,
+        limits: [15, 30, 50, 100, 200, 500],
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        height: 'full-120',
+        cols: [[
+            // {type: 'checkbox'},
+            {field: 'id', align: 'center',title: 'ID',hide: true}
+            ,{field: 'businessTripReasons', align: 'center',title: '鍑哄樊浜嬬敱',hide: false}
+            ,{field: 'businessTransportation$', align: 'center',title: '浜ら�氬伐鍏�',hide: false}
+            ,{field: 'businessReturn$', align: 'center',title: '鍗曠▼寰�杩�',hide: false}
+            ,{field: 'businessStartAddr', align: 'center',title: '鍑哄彂鍦�', templet:function(d){return emptyShow(d.businessStartAddr)},hide: true}
+            ,{field: 'businessStartAddr$', align: 'center',title: '鍑哄彂鍦�',hide: false}
+            ,{field: 'businessEndAddr', align: 'center',title: '鐩殑鍦�', templet:function(d){return emptyShow(d.businessEndAddr)},hide: true}
+            ,{field: 'businessEndAddr$', align: 'center',title: '鐩殑鍦�',hide: false}
+            ,{field: 'businessStartTimeDay$', align: 'center',title: '鍑哄彂鏃ユ湡',hide: false,width: 165}
+            ,{field: 'businessEndTimeDay$', align: 'center',title: '缁撴潫鏃ユ湡',hide: false,width: 165}
+            ,{field: 'businessDuration$', align: 'center',title: '鍑哄樊鏃堕暱',hide: false}
+            ,{field: 'businessTripDays$', align: 'center',title: '鍑哄樊澶╂暟',hide: false}
+            ,{field: 'businessPeers', align: 'center',title: '鍚岃浜�',hide: false}
+            ,{field: 'businessPeersId', align: 'center',title: '鏃堕棿鎴�',hide: true}
+            ,{field: 'carNumber', align: 'center',title: '鑷┚绉佸杞﹁溅鐗屽彿',hide: false}
+            ,{field: 'kilometers', align: 'center',title: '鑷┚绉佸杞﹁绋嬫槑缁嗗強鍏噷鏁�',hide: false}
+            ,{field: 'userId$', align: 'center',title: '鐢宠浜�',hide: false}
+            ,{field: 'deptId$', align: 'center',title: '鎵�灞為儴闂�',hide: false}
+            ,{field: 'hostId', align: 'center',title: 'hostId',hide: true}
+            ,{field: 'createTime$', align: 'center',title: '鍒涘缓鏃堕棿',hide: false,width: 125}
+            ,{field: 'updateTime$', align: 'center',title: '鏇存柊鏃堕棿',hide: false,width: 125}
+            ,{field: 'updateId$', align: 'center',title: '鏇存柊浜哄憳',hide: false}
+            ,{field: 'settle$', align: 'center',title: '杩涘害', style: 'color: #1890ff;cursor:pointer', event: 'more',hide: false}
+            ,{field: 'status$', align: 'center',title: '鐘舵��',hide: false}
+            ,{field: 'businessTripType', align: 'center',title: '绫诲瀷',hide: true}
+            ,{field: 'businessNotes', align: 'center',title: '鍑哄樊澶囨敞',hide: false}
+
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:180}
+        ]],
+        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(businessTrip)', 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(businessTrip)', 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;
+               }
+               del(checkStatus.map(function (d) {
+                   return d.id;
+               }));
+               break;
+            case 'exportData':
+                admin.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'businessTrip': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/businessTrip/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(businessTrip)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            case 'approval':
+                layer.confirm('瀹℃壒閫氳繃锛�', {
+                    skin: 'layui-layer-admin',
+                    shade: .1,
+                    offset: '200px',
+                    title: data.name
+                }, function (i) {
+                    layer.close(i);
+                    approval(data.id);
+                });
+                break;
+            case 'more':
+                top.businessTripByMore = data.id;
+                admin.popupRight({
+                    type: 1,
+                    window: "top",
+                    area: "1250px",
+                    url: "businessTrip_more.html",
+                    end: function () {
+                        // $(".layui-laypage-btn")[0].click();
+                    }
+                })
+                break;
+            case 'edit':
+                showEditModel(data);
+                break;
+            case "del":
+                del([data.id]);
+                break;
+        }
+    });
+
+    /* 寮圭獥 - 鏂板銆佷慨鏀� */
+    function showEditModel(mData) {
+        admin.open({
+            type: 1,
+            area: ["95%", "75%"],
+            title: (mData ? '淇敼' : '娣诲姞') + '鍑哄樊鐢宠',
+            content: $('#editDialog').html(),
+            success: function (layero, dIndex) {
+                if (mData) {
+                    $('#cascaderValStart').val(mData.pcdStart);
+                }
+                if (mData) {
+                    $('#cascaderValEnd').val(mData.pcdEnd);
+                }
+                layDateRender(mData);
+                cascaderRenderStart();
+                cascaderRenderEnd();
+                form.val('detail', mData);
+                form.on('submit(editSubmit)', function (data) {
+                    var loadIndex = layer.load(2);
+                    $.ajax({
+                        url: baseUrl+"/businessTrip/"+(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+"/businessTrip/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(data) {
+        setTimeout(function () {
+            layDate.render({
+                elem: '#businessStartTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['businessStartTime\\$']:null
+            });
+            layDate.render({
+                elem: '#businessEndTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['businessEndTime\\$']:null
+            });
+            layDate.render({
+                elem: '#createTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['createTime\\$']:null
+            });
+            layDate.render({
+                elem: '#updateTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['updateTime\\$']:null
+            });
+
+        }, 300);
+    }
+    layDateRender();
+
+    // 鐪佸競鍖洪�夋嫨
+    function cascaderRenderStart() {
+        cascader.render({
+            elem: '#cascaderValStart',
+            data: citysData,
+            itemHeight: '250px',
+            filterable: true,
+            onChange: function (values, data) {
+                // console.log(values);console.log(data);
+            }
+        });
+    }
+
+    // 鐪佸競鍖洪�夋嫨
+    function cascaderRenderEnd() {
+        cascader.render({
+            elem: '#cascaderValEnd',
+            data: citysData,
+            itemHeight: '250px',
+            filterable: true,
+            onChange: function (values, data) {
+                // console.log(values);console.log(data);
+            }
+        });
+    }
+
+    function approval(planId, plannerId, dIdx) {
+        let loadIndex = layer.load(2);
+        $.ajax({
+            url: baseUrl+"/businessTrip/approval/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: {
+                planId: planId,
+                plannerId: plannerId
+            },
+            method: 'POST',
+            success: function (res) {
+                if (dIdx) {
+                    layer.close(dIdx);
+                }
+                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});
+                }
+            }
+        })
+    }
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(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/common.js b/src/main/webapp/static/js/common.js
index 459273b..b3802de 100644
--- a/src/main/webapp/static/js/common.js
+++ b/src/main/webapp/static/js/common.js
@@ -224,3 +224,4 @@
 var planByMore;
 var priQuoteByMore;
 var reimburseOnlineByMore;
+var businessTripByMore;
diff --git a/src/main/webapp/static/js/reimburseOnline/reimburseOnline.js b/src/main/webapp/static/js/reimburseOnline/reimburseOnline.js
index 88ea097..42e40a7 100644
--- a/src/main/webapp/static/js/reimburseOnline/reimburseOnline.js
+++ b/src/main/webapp/static/js/reimburseOnline/reimburseOnline.js
@@ -298,7 +298,7 @@
                 });
                 break;
             case "edit":
-                showEditForm(data);
+                showEditModel(data);
                 break;
             case "look":
                 var $a = $(obj.tr).find('a[lay-event="look"]');
@@ -452,7 +452,7 @@
                     cellMinWidth: 100,
                     cols: [[
                         {type: 'numbers', title: '#'},
-                        {field: 'occupation', title: '浜嬬敱', width: 100},
+                        {field: 'occupation', title: '浜嬬敱', width: 100, style: 'color: blue;font-weight: bold', templet: '#occupation'},
                         // {field: 'expenseType', title: '璐圭敤绫诲瀷', width: 100},
                         {field: 'expenseType$', title: '璐圭敤绫诲瀷', width: 100},
                         {field: 'taxRate', title: '绋庣巼', width: 60},
@@ -474,9 +474,31 @@
                         // {field: 'updateUserId', title: '鏇存柊浜哄憳ID', width: 160},
                         {field: 'updateUserName', title: '鏇存柊浜哄憳鍚嶅瓧'},
                         // {field: 'creationTime', title: '鍒涘缓鏃ユ湡', width: 160}
+                        {align: 'center', title: '鎿嶄綔', toolbar: '#formSSXMTableBar', minWidth: 80, width: 80, fixed: 'right'}
                     ]],
-                    done: function (res) {
+                    done: function (res, curr, count) {
                         $(layero).find('.layui-table-view').css('margin', '0');
+                        var options = this;
+
+                        // 鑾峰彇褰撳墠琛屾暟鎹�
+                        table.getRowData = function(elem){
+                            var index = $(elem).closest('tr').data('index');
+                            return table.cache[options.id][index] || {};
+                        };
+
+                        $('.input-occupation').on('text', function(){
+                            var value = this.value; // 鑾峰彇閫変腑椤� value
+                            var data = table.getRowData(this);
+                            console.log(value);
+                            console.log("value------===");
+                            xxDataList.forEach(res => {
+                                if (data.id === res.id){
+                                    console.log(res)
+                                    res.occupation = value;
+                                }
+                            })
+
+                        });
                     },
                     size: ''
                 };
@@ -559,6 +581,7 @@
                             // 琛ㄥ崟鎻愪氦浜嬩欢
                             form.on('submit(matEditSubmit)', function (data) {
                                 let selectList = matXmSelect.getValue();
+                                console.log(selectList)
                                 for (let i = 0; i<selectList.length; i++) {
                                     let item = selectList[i];
                                     // 鏌ヨ鐗╂枡璇︽儏
@@ -570,13 +593,16 @@
                                         success: function (res) {
                                             if (res.code === 200){
                                                 var bige=true;
-                                                for (var j = 0; j < xxDataList.length; j++) {
-                                                    if (xxDataList[j].matnr === res.data.matnr && xxDataList[j].batch === res.data.batch) {
-                                                        bige=false;
-                                                        break;
-                                                    }
-                                                }
+                                                // console.log("-------2.1-------")
+                                                // for (var j = 0; j < xxDataList.length; j++) {
+                                                //     if (xxDataList[j].expenseType === res.data.expenseType && xxDataList[j].batch === res.data.batch) {
+                                                //         bige=false;
+                                                //         console.log("-------2.2-------")
+                                                //         break;
+                                                //     }
+                                                // }
                                                 if (bige){
+                                                    // console.log("-------2.3-------")
                                                     xxDataList.push(res.data);
                                                     insTbSSXM.reload({data: xxDataList, page: {curr: 1}});
                                                 }
@@ -690,44 +716,44 @@
     //     });
     // }
 
-    // 鏇存柊form
-    function showEditForm(mData) {
-        admin.open({
-            type: 1,
-            area: '800px',
-            title: '鏍镐环淇℃伅缂栬緫',
-            content: $('#editStatus').html(),
-            success: function (layero, dIndex) {
-                form.val('editStatusDetail', mData);
-                form.render('select')
-                form.on('submit(editSubmit)', function (data) {
-                    var loadIndex = layer.load(2);
-                    $.ajax({
-                        url: baseUrl+"/reimburseOnline/updateForm/auth",
-                        headers: {'token': localStorage.getItem('token')},
-                        data: data.field,
-                        method: 'POST',
-                        traditional:true,
-                        success: function (res) {
-                            if (res.code === 200){
-                                layer.closeAll();
-                                tableReload(false);
-                            } else if (res.code === 403){
-                                top.location.href = baseUrl+"/";
-                            } else {
-                                layer.msg(res.msg)
-                            }
-                        }
-                    })
-                    layer.close(loadIndex);
-                    layer.close(dIndex);
-                    return false;
-                });
-                $(layero).children('.layui-layer-content').css('overflow', 'visible');
-                layui.form.render('select');
-            }
-        });
-    }
+    // // 鏇存柊form
+    // function showEditForm(mData) {
+    //     admin.open({
+    //         type: 1,
+    //         area: '800px',
+    //         title: '鏍镐环淇℃伅缂栬緫',
+    //         content: $('#editStatus').html(),
+    //         success: function (layero, dIndex) {
+    //             form.val('editStatusDetail', mData);
+    //             form.render('select')
+    //             form.on('submit(editSubmit)', function (data) {
+    //                 var loadIndex = layer.load(2);
+    //                 $.ajax({
+    //                     url: baseUrl+"/reimburseOnline/updateForm/auth",
+    //                     headers: {'token': localStorage.getItem('token')},
+    //                     data: data.field,
+    //                     method: 'POST',
+    //                     traditional:true,
+    //                     success: function (res) {
+    //                         if (res.code === 200){
+    //                             layer.closeAll();
+    //                             tableReload(false);
+    //                         } else if (res.code === 403){
+    //                             top.location.href = baseUrl+"/";
+    //                         } else {
+    //                             layer.msg(res.msg)
+    //                         }
+    //                     }
+    //                 })
+    //                 layer.close(loadIndex);
+    //                 layer.close(dIndex);
+    //                 return false;
+    //             });
+    //             $(layero).children('.layui-layer-content').css('overflow', 'visible');
+    //             layui.form.render('select');
+    //         }
+    //     });
+    // }
 
 });
 
diff --git a/src/main/webapp/views/businessTrip/businessTrip.html b/src/main/webapp/views/businessTrip/businessTrip.html
new file mode 100644
index 0000000..b7596f2
--- /dev/null
+++ b/src/main/webapp/views/businessTrip/businessTrip.html
@@ -0,0 +1,283 @@
+<!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/tree.css" media="all">
+    <link rel="stylesheet" href="../../static/layui/lay/modules/formDesigner/coolForm.css" />
+    <style>
+        .nav-box {
+            position: absolute;
+            top: 1px;
+            left: 5px;
+        }
+        .nav-box-item {
+            display: inline-block;
+            vertical-align: middle;
+            margin-right: 5px;
+        }
+
+        .layui-menu li {
+            width: inherit;
+        }
+
+        .layui-form-radio:hover *, .layui-form-radioed, .layui-form-radioed>i {
+            color: #2d8cf0;
+        }
+    </style>
+</head>
+<body>
+
+<div class="layui-fluid">
+    <div class="layui-card" style="margin-bottom: 5px">
+        <div class="layui-card-body" style="padding-top: 5px;padding-bottom: 5px ">
+            <div class="layui-form toolbar" id="search-box" style="display: flex;justify-content: flex-end;position: relative">
+                <div class="nav-box">
+                    <div class="nav-box-item">
+                        <i class="layui-icon" style="color: #1890ff;font-weight: bold">&#xe613;</i>
+                    </div>
+                    <div class="nav-box-item">
+                        <button id="organization" style="border: none;padding-right: 35px;" class="layui-btn layui-btn-primary icon-btn">
+                            鏈煡
+                        </button>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+<!--                    <div class="layui-inline">-->
+<!--                        <label class="layui-form-label">缂栧彿:</label>-->
+<!--                        <div class="layui-input-inline">-->
+<!--                            <input class="layui-input" type="text" name="id" placeholder="缂栧彿" autocomplete="off">-->
+<!--                        </div>-->
+<!--                    </div>-->
+                    <div class="layui-inline">&emsp;
+                        <button class="layui-btn icon-btn" lay-filter="search" lay-submit>
+                            <i class="layui-icon">&#xe615;</i>鎼滅储
+                        </button>
+                        <button class="layui-btn icon-btn" lay-filter="reset" lay-submit>
+                            <i class="layui-icon">&#xe666;</i>閲嶇疆
+                        </button>
+                    </div>
+                </div>
+            </div>
+            <table class="layui-hide" id="businessTrip" lay-filter="businessTrip"></table>
+        </div>
+    </div>
+</div>
+
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
+        <button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+    {{# if (d.settle == 1) { }}
+        <a class="layui-btn layui-btn-xs btn-edit" lay-event="approval">瀹℃壒</a>
+    <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/js/handlebars/handlebars-v4.5.3.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/layui/lay/modules/cascader/citys-data.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/businessTrip/businessTrip.js" charset="utf-8"></script>
+</body>
+<!-- 琛ㄥ崟寮圭獥 -->
+<script type="text/html" id="editDialog">
+    <form id="detail" lay-filter="detail" class="layui-form admin-form" style="height: 100%;overflow-y: hidden;">
+        <div class="model-form" style="height: 87%;overflow-x: hidden;overflow-y: scroll">
+            <input name="id" type="hidden">
+            <!--鍩烘湰淇℃伅-->
+            <blockquote class="layui-elem-quote" style="margin-left: 30px;padding: 8px 15px;">鍩烘湰淇℃伅</blockquote>
+            <div class="layui layui-row">
+                <div class="layui-col-md12">
+                    <div class="layui-form-item">
+                        <label class="layui-form-label layui-form-required">鍑哄樊浜嬬敱: </label>
+                        <div class="layui-input-block">
+                            <textarea class="layui-textarea" name="businessTripReasons" placeholder="璇疯緭鍏ュ娉�" maxlength="1024" autocomplete="off" lay-verify="required"></textarea>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <!--琛岀▼-->
+            <blockquote class="layui-elem-quote" style="margin-left: 30px;padding: 8px 15px;">琛岀▼淇℃伅</blockquote>
+            <div class="layui layui-row">
+                <div class="layui-col-md6">
+                    <div class="layui-form-item">
+                        <label class="layui-form-label layui-form-required">浜ら�氬伐鍏�: </label>
+                        <div class="layui-input-block">
+                            <select name="businessTransportation" lay-vertype="tips" lay-verify="required">
+                                <option value="">璇烽�夋嫨鍖哄垎</option>
+                                <option value="1">椋炴満</option>
+                                <option value="2">楂橀搧</option>
+                                <option value="3">鐏溅</option>
+                                <option value="4">姹借溅</option>
+                                <option value="5">鎽╂墭</option>
+                                <option value="6">鐢佃溅</option>
+                                <option value="7">鍏跺畠</option>
+                            </select>
+                        </div>
+                    </div>
+                    <div class="layui-form-item">
+                        <label class="layui-form-label layui-form-required">鍗曠▼寰�杩�: </label>
+                        <div class="layui-input-block">
+                            <select name="businessReturn" lay-vertype="tips" lay-verify="required">
+                                <option value="">璇烽�夋嫨鍖哄垎</option>
+                                <option value="1">鍗曠▼</option>
+                                <option value="2">寰�杩�</option>
+                            </select>
+                        </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="carNumber" 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="kilometers" placeholder="璇疯緭鍏ヨ嚜椹剧瀹惰溅琛岀▼鏄庣粏鍙婂叕閲屾暟(鑻ヤ笉鐢ㄥ垯濉啓鈥樻棤鈥�)" lay-vertype="tips" lay-verify="required">
+                        </div>
+                    </div>
+
+                </div>
+                <div class="layui-col-md6">
+                    <div class="layui-form-item">
+                        <label class="layui-form-label layui-form-required">鍑哄彂鍦�: </label>
+                        <div class="layui-input-block">
+                            <input id="cascaderValStart" class="layui-input" name="pcdStart" placeholder="璇烽�夋嫨鍑哄彂鍦�"  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="businessStartAddr" placeholder="璇疯緭鍏ュ嚭鍙戝湴璇︾粏鍦板潃"  autocomplete="off"  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 id="cascaderValEnd" class="layui-input" name="pcdEnd" placeholder="璇烽�夋嫨鍑哄彂鍦�"  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="businessEndAddr" placeholder="璇疯緭鍏ョ洰鐨勫湴璇︾粏鍦板潃"  autocomplete="off"  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="businessDuration" placeholder="璇疯緭鍏ュ嚭宸椂闀�">-->
+<!--                        </div>-->
+<!--                    </div>-->
+<!--                    <div class="layui-form-item">-->
+<!--                        <label class="layui-form-label">鍑哄樊澶╂暟: </label>-->
+<!--                        <div class="layui-input-block">-->
+<!--                            <input class="layui-input" name="businessTripDays" placeholder="璇疯緭鍏ュ嚭宸ぉ鏁�">-->
+<!--                        </div>-->
+<!--                    </div>-->
+                </div>
+            </div>
+            <!--鑷┚-->
+            <blockquote class="layui-elem-quote" style="margin-left: 30px;padding: 8px 15px;">鏃ユ湡淇℃伅</blockquote>
+            <div class="layui layui-row">
+                <div class="layui-col-md6">
+                    <div class="layui-form-item">
+                        <label class="layui-form-label layui-form-required">鍑哄彂鏃ユ湡: </label>
+                        <div class="layui-input-block">
+                            <input class="layui-input" name="businessStartTime" id="businessStartTime$" 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">
+                            <select name="businessStartTimeDay" lay-vertype="tips" lay-verify="required">
+                                <option value="">璇烽�夋嫨鍖哄垎</option>
+                                <option value="1">涓婂崍</option>
+                                <option value="2">涓嬪崍</option>
+                            </select>
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-col-md6">
+                    <div class="layui-form-item">
+                        <label class="layui-form-label layui-form-required">缁撴潫鏃ユ湡: </label>
+                        <div class="layui-input-block">
+                            <input class="layui-input" name="businessEndTime" id="businessEndTime$" 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">
+                            <select name="businessEndTimeDay" lay-vertype="tips" lay-verify="required">
+                                <option value="">璇烽�夋嫨鍖哄垎</option>
+                                <option value="1">涓婂崍</option>
+                                <option value="2">涓嬪崍</option>
+                            </select>
+                        </div>
+                    </div>
+                </div>
+            </div>
+
+            <!--鍏跺畠-->
+            <blockquote class="layui-elem-quote" style="margin-left: 30px;padding: 8px 15px;">鍏跺畠淇℃伅</blockquote>
+            <div class="layui layui-row">
+                <div class="layui-col-md6">
+                    <div class="layui-form-item">
+                        <label class="layui-form-label layui-form-required">鍚岃浜�: </label>
+                        <div class="layui-input-block">
+                            <input class="layui-input" name="businessPeers" placeholder="璇疯緭鍏ュ悓琛屼汉" lay-vertype="tips" lay-verify="required">
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-col-md6">
+                </div>
+                <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="businessNotes" placeholder="璇疯緭鍏ュ嚭宸娉�">-->
+<!--                        </div>-->
+<!--                    </div>-->
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">澶囨敞: </label>
+                        <div class="layui-input-block">
+                            <textarea class="layui-textarea" name="businessNotes" placeholder="璇疯緭鍏ュ娉�" maxlength="1024" autocomplete="off"></textarea>
+                        </div>
+                    </div>
+<!--                    <div class="layui-form-item">-->
+<!--                        <label class="layui-form-label">绫诲瀷: </label>-->
+<!--                        <div class="layui-input-block">-->
+<!--                            <input class="layui-input" name="businessTripType" placeholder="璇疯緭鍏ョ被鍨�">-->
+<!--                        </div>-->
+<!--                    </div>-->
+
+                 </div>
+            </div>
+        </div>
+        <div style="height: 10%">
+            <hr class="layui-bg-gray">
+            <div class="layui-form-item text-right" style="padding-right: 30px">
+                <button class="layui-btn" lay-filter="editSubmit" lay-submit="">淇濆瓨</button>
+                <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+            </div>
+        </div>
+    </form>
+</script>
+</html>
+
diff --git a/src/main/webapp/views/businessTrip/businessTrip_more.html b/src/main/webapp/views/businessTrip/businessTrip_more.html
new file mode 100644
index 0000000..d257a8b
--- /dev/null
+++ b/src/main/webapp/views/businessTrip/businessTrip_more.html
@@ -0,0 +1,187 @@
+<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
+<style>
+    #formAdvForm {
+        background-color: #f3f3f3;
+    }
+    #formAdvForm .layui-form-item {
+        margin-top: 20px;
+        margin-bottom: 0;
+    }
+
+    #formAdvForm .layui-form-item .layui-inline {
+        margin-bottom: 25px;
+        margin-right: 0;
+    }
+
+    .form-group-bottom {
+        position: fixed;
+        left: 0;
+        right: 0;
+        bottom: 0;
+        padding: 10px 20px;
+        background-color: #fff;
+        box-shadow: 0 -1px 2px 0 rgba(0, 0, 0, .05);
+    }
+</style>
+<!-- 姝f枃寮�濮� -->
+<form class="layui-form" id="formAdvForm" lay-filter="formAdvForm" style="height: 100%">
+    <div class="layui-fluid" style="padding-bottom: 75px;height: 100%; overflow: scroll;box-sizing: border-box">
+        <!-- 鏍囬 -->
+        <div class="layui-card">
+            <div class="layui-card-header" style="padding-top: 5px; padding-bottom: 5px">
+                <div>
+                    <i class="layui-icon" style="font-size: 20px;color: #1890ff;font-weight: bold">&#xe656;</i>
+                    <span id="form-name" style="margin: 0 6px;font-size: 18px;font-weight: bold;letter-spacing: 1px"></span>
+                    <span style="opacity: .5;font-size: small;margin-left: 5px">鍑哄樊鐢宠</span>
+                </div>
+            </div>
+            <div class="layui-card-body" style="padding: 30px 20px">
+
+                <div class="layui-tab layui-steps">
+                    <ul class="layui-tab-title" id="stepBox">
+                    </ul>
+                </div>
+
+            </div>
+        </div>
+        <div class="layui-row">
+            <!-- 鏁版嵁 -->
+            <!--            <div class="layui-col-md9">-->
+            <!--                <div class="layui-card">-->
+            <!--                    <div class="layui-card-header">-->
+            <!--                        鍩烘湰淇℃伅-->
+            <!--                    </div>-->
+            <!--                    <div class="layui-card-body">-->
+
+            <!--                    </div>-->
+            <!--                </div>-->
+            <!--            </div>-->
+            <!-- 鍔ㄦ�� -->
+            <!--            <div class="layui-col-md3" style="width: 24%;margin-left: 1%">-->
+            <div class="layui-col-md3" style="width: 100%;">
+                <!-- 鏃堕棿绾� -->
+                <div class="layui-card">
+                    <div class="layui-card-header">
+                        <span>娴佺▼鍔ㄦ��</span>
+                    </div>
+                    <div class="layui-card-body">
+                        <ul class="layui-timeline" id="timelineBox">
+                        </ul>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <div class="form-group-bottom text-right">
+        <button class="layui-btn" lay-filter="refresh" lay-submit><i class="layui-icon">&#xe666;</i>&emsp;鍒锋柊&emsp;</button>
+    </div>
+
+</form>
+
+<script type="text/html" id="followerTabOperate">
+    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="del">鍒犻櫎</a>
+</script>
+
+<script type="text/template" id="stepTpl">
+    {{#each list}}
+    <li id="step-{{step}}" style="pointer-events: none">
+        <i class="layui-icon layui-icon-ok">{{step}}</i>
+        <span class="layui-steps-title">{{title}}</span>
+        {{# if username}}
+        <span class="layui-steps-content">{{username}}</span>
+        {{ else }}
+        <span class="layui-steps-content">&nbsp;</span>
+        {{/if}}
+    </li>
+    {{/each}}
+</script>
+
+<script type="text/template" id="timelineTpl">
+    {{#each list}}
+    <li class="layui-timeline-item">
+        <i class="layui-icon layui-timeline-axis">&#xe63f;</i>
+        <div class="layui-timeline-content layui-text">
+            <h4 class="layui-timeline-title" style="display: inline;margin-right: 10px;">{{title}}</h4>
+            <span>{{time}}</span>
+            <p>
+                {{msg}}
+            </p>
+        </div>
+    </li>
+    {{/each}}
+</script>
+
+<script>
+    var businessTripId = top.businessTripByMore;
+    $('.layui-layer-close').hide();
+    layui.config({
+        base: baseUrl + "/static/layui/lay/modules/"
+    }).extend({
+        notice: 'notice/notice',
+        steps: 'steps/steps',
+    }).use(['form', 'table', 'laydate', 'notice', 'xmSelect', 'steps'], function () {
+        var $ = layui.jquery;
+        var form = layui.form;
+        var table = layui.table;
+        var laydate = layui.laydate;
+        var notice = layui.notice;
+        var xmSelect = layui.xmSelect;
+        var steps = layui.steps;
+
+        form.render('select');
+
+        init();
+        function init(){
+            notice.msg('姝e湪杞藉叆鏁版嵁......', {icon: 4, position: "topRight"});
+            $.ajax({
+                url: baseUrl + "/businessTrip/" + businessTripId + "/auth",
+                headers: {'token': localStorage.getItem('token')},
+                method: 'GET',
+                success: function (res) {
+                    notice.destroy();
+                    if (res.code === 200) {
+                        let businessTrip = res.data;
+                        top.businessTripByMore = null;
+                        $("#form-name").html(businessTrip.name);
+                        // 杩涘害姝ラ鍥�
+                        let template0 = Handlebars.compile($('#stepTpl').html());
+                        $('#stepBox').html(template0({list: JSON.parse(businessTrip.settleMsg)}));
+                        $('#step-' + Number(businessTrip.step)).addClass("layui-this");
+
+                        let template1 = Handlebars.compile($('#timelineTpl').html());
+                        $('#timelineBox').html(template1({list: JSON.parse(businessTrip.settleMsg)}));
+                        // 琛ュ厖html
+                        $('#customizeBox').html(businessTrip.formHtml);
+                        // 璁惧鏄庣粏
+                        // form.val('formAdvForm', businessTrip);
+                        // top.convertDisabled($('#formAdvForm :input'), true);
+                        // 璺熻繘浜�
+                        // initFollowers(businessTrip.id);
+                        layDateRender();
+                    } else if (res.code === 403) {
+                        top.location.href = baseUrl + "/";
+                    } else {
+                        layer.msg(res.msg, {icon: 2})
+                    }
+                }
+            })
+        }
+
+        /* 娓叉煋laydate */
+        function layDateRender() {
+            laydate.render({
+                elem: '#endTime',
+                type: 'datetime'
+            });
+        }
+        layDateRender();
+
+        /* 鐩戝惉琛ㄥ崟鎻愪氦 */
+        form.on('submit(refresh)', function (data) {
+            init();
+            return false;
+        });
+
+    })
+</script>
diff --git a/src/main/webapp/views/cstmr/cstmr.html b/src/main/webapp/views/cstmr/cstmr.html
index ea52dea..d038db4 100644
--- a/src/main/webapp/views/cstmr/cstmr.html
+++ b/src/main/webapp/views/cstmr/cstmr.html
@@ -141,12 +141,12 @@
                         <input class="layui-input" name="name" placeholder="璇疯緭鍏ュ鎴峰悕绉�" lay-vertype="tips" lay-verify="required|name" lay-min="8" autocomplete="off">
                     </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="simple" placeholder="璇疯緭鍏ュ鎴风畝绉�" lay-vertype="tips" lay-verify="required|simple" autocomplete="off">
-                    </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="simple" placeholder="璇疯緭鍏ュ鎴风畝绉�" lay-vertype="tips" lay-verify="required|simple" autocomplete="off">-->
+<!--                    </div>-->
+<!--                </div>-->
                 <div class="layui-form-item">
                     <label class="layui-form-label layui-form-required">瀹㈡埛绫诲埆: </label>
                     <div class="layui-input-block cool-auto-complete">
@@ -160,6 +160,28 @@
                     </div>
                 </div>
                 <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">瀹㈡埛琛屼笟: </label>
+                    <div class="layui-input-block">
+                        <select name="" lay-vertype="tips" lay-verify="required">
+                            <option value="">璇烽�夋嫨琛屼笟</option>
+                            <option value="1">鍖昏嵂涓�</option>
+                            <option value="2">鍒堕�犱笟</option>
+                            <option value="3">绾虹粐涓�</option>
+                        </select>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">浜у搧绫诲埆: </label>
+                    <div class="layui-input-block">
+                        <select name="" lay-vertype="tips" lay-verify="required">
+                            <option value="">璇烽�夋嫨绫诲埆</option>
+                            <option value="1">鐢垫皵</option>
+                            <option value="2">瀹跺叿</option>
+                            <option value="3">鐢靛瓙浜у搧</option>
+                        </select>
+                    </div>
+                </div>
+                <div class="layui-form-item">
                     <label class="layui-form-label layui-form-required">鐪佸競鍖� : </label>
                     <div class="layui-input-block">
                         <input id="cascaderVal" name="pcd" placeholder="璇烽�夋嫨" class="layui-hide" lay-verify="required"/>
diff --git a/src/main/webapp/views/plan/plan.html b/src/main/webapp/views/plan/plan.html
index 1cf99c6..44464a1 100644
--- a/src/main/webapp/views/plan/plan.html
+++ b/src/main/webapp/views/plan/plan.html
@@ -214,6 +214,12 @@
                         </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="userXmlSelPhone" autocomplete="off" 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">
                             <div id="planNeedXmlSel" name="planNeedXmlSel">
@@ -268,9 +274,9 @@
             <div class="layui layui-row">
                 <div class="layui-col-md6">
                     <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="planner$" placeholder="璇疯緭鍏ヨ鍒掑憳" disabled>
+                            <input class="layui-input" name="planner$" placeholder="璇疯緭鍏ヨ鍒掑憳"  lay-verify="required" disabled>
                         </div>
                     </div>
                     <div class="layui-form-item">
diff --git a/src/main/webapp/views/plan/plan_more.html b/src/main/webapp/views/plan/plan_more.html
index 68e1c92..0f4afe5 100644
--- a/src/main/webapp/views/plan/plan_more.html
+++ b/src/main/webapp/views/plan/plan_more.html
@@ -219,17 +219,17 @@
                     </div>
                 </div>
                 <!-- 璺熻繘浜� -->
-                <div class="layui-card">
-                    <div class="layui-card-header">
-                        <span>璺熻繘浜�</span>
-                        <span lay-filter="followerAdd" lay-submit style="float: right;cursor: pointer;">
-                            <i class="layui-icon" style="font-size: 20px;color: #1890ff;">&#xe61f;</i>
-                        </span>
-                    </div>
-                    <div class="layui-card-body">
-                        <table id="followersTable" lay-filter="followersTable"></table>
-                    </div>
-                </div>
+<!--                <div class="layui-card">-->
+<!--                    <div class="layui-card-header">-->
+<!--                        <span>璺熻繘浜�</span>-->
+<!--                        <span lay-filter="followerAdd" lay-submit style="float: right;cursor: pointer;">-->
+<!--                            <i class="layui-icon" style="font-size: 20px;color: #1890ff;">&#xe61f;</i>-->
+<!--                        </span>-->
+<!--                    </div>-->
+<!--                    <div class="layui-card-body">-->
+<!--                        <table id="followersTable" lay-filter="followersTable"></table>-->
+<!--                    </div>-->
+<!--                </div>-->
             </div>
         </div>
     </div>
@@ -336,7 +336,7 @@
                         form.val('formAdvForm', plan);
                         top.convertDisabled($('#formAdvForm :input'), true);
                         // 璺熻繘浜�
-                        initFollowers(plan.id);
+                        // initFollowers(plan.id);
                         layDateRender();
                     } else if (res.code === 403) {
                         top.location.href = baseUrl + "/";
diff --git a/src/main/webapp/views/reimburseOnline/reimburseOnline.html b/src/main/webapp/views/reimburseOnline/reimburseOnline.html
index fcf5559..ac87da2 100644
--- a/src/main/webapp/views/reimburseOnline/reimburseOnline.html
+++ b/src/main/webapp/views/reimburseOnline/reimburseOnline.html
@@ -1,67 +1,71 @@
 <!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/tree.css" media="all">
-  <link rel="stylesheet" href="../../static/layui/lay/modules/formDesigner/coolForm.css" />
-  <style>
-    .nav-box {
-      position: absolute;
-      top: 1px;
-      left: 5px;
-    }
-    .nav-box-item {
-      display: inline-block;
-      vertical-align: middle;
-      margin-right: 5px;
-    }
+    <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/tree.css" media="all">
+    <link rel="stylesheet" href="../../static/layui/lay/modules/formDesigner/coolForm.css"/>
+    <style>
+        .nav-box {
+            position: absolute;
+            top: 1px;
+            left: 5px;
+        }
 
-  </style>
+        .nav-box-item {
+            display: inline-block;
+            vertical-align: middle;
+            margin-right: 5px;
+        }
+
+    </style>
 </head>
 <body>
 
 <div class="layui-fluid">
-  <div class="layui-card">
-    <div class="layui-card-body">
-      <div id="search-box" class="layui-form toolbar" style="display: flex;justify-content: flex-end;position: relative">
-        <div class="nav-box">
-          <div class="nav-box-item">
-            <i class="layui-icon" style="color: #1890ff;font-weight: bold">&#xe613;</i>
-          </div>
-          <div class="nav-box-item">
-            <button id="organization" style="border: none;padding-right: 35px;" class="layui-btn layui-btn-primary icon-btn">
-              鏈煡
-            </button>
-          </div>
-        </div>
-        <div class="layui-form-item">
-          <div class="layui-inline">
-            <div class="layui-input-inline">
-              <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�" autocomplete="off" style="border-color: #e1e1e1">
+    <div class="layui-card">
+        <div class="layui-card-body">
+            <div id="search-box" class="layui-form toolbar"
+                 style="display: flex;justify-content: flex-end;position: relative">
+                <div class="nav-box">
+                    <div class="nav-box-item">
+                        <i class="layui-icon" style="color: #1890ff;font-weight: bold">&#xe613;</i>
+                    </div>
+                    <div class="nav-box-item">
+                        <button id="organization" style="border: none;padding-right: 35px;"
+                                class="layui-btn layui-btn-primary icon-btn">
+                            鏈煡
+                        </button>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�" autocomplete="off"
+                                   style="border-color: #e1e1e1">
+                        </div>
+                    </div>
+                    <div class="layui-inline">&emsp;
+                        <button class="layui-btn icon-btn layui-btn-sm" lay-filter="search" lay-submit>
+                            <i class="layui-icon">&#xe615;</i>鎼滅储
+                        </button>
+                    </div>
+                </div>
             </div>
-          </div>
-          <div class="layui-inline">&emsp;
-            <button class="layui-btn icon-btn layui-btn-sm" lay-filter="search" lay-submit>
-              <i class="layui-icon">&#xe615;</i>鎼滅储
-            </button>
-          </div>
+            <table class="layui-hide" id="reimburseOnline" lay-filter="reimburseOnline"></table>
         </div>
-      </div>
-      <table class="layui-hide" id="reimburseOnline" lay-filter="reimburseOnline"></table>
     </div>
-  </div>
 </div>
 
 <!-- 琛ㄦ牸鎿嶄綔鍒� -->
 <script type="text/html" id="tbLook">
-  <span class="layui-text">
+    <span class="layui-text">
         <a href="javascript:;" lay-event="look">
             <i class="layui-icon" style="font-size: 12px;">&#xe61a;</i> 鏌ョ湅鎶ラ攢鏄庣粏
         </a>
@@ -69,31 +73,31 @@
 </script>
 
 <script type="text/html" id="toolbar">
-  <div class="layui-btn-container">
-    <button class="layui-btn layui-btn-sm" lay-event="addBlank">鐢宠鎶ラ攢</button>
-<!--    <button class="layui-btn layui-btn-sm layui-btn-danger" lay-event="deleteData">鍒犻櫎</button>-->
-  </div>
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-sm" lay-event="addBlank">鐢宠鎶ラ攢</button>
+        <!--    <button class="layui-btn layui-btn-sm layui-btn-danger" lay-event="deleteData">鍒犻櫎</button>-->
+    </div>
 </script>
 
-<form id="uploadFile" enctype="multipart/form-data" style="display: none;" >
-  <input type="file" name="file" id="uploadQuote">
-  <input type="button" onclick="upload()" value="涓婁紶"/>
+<form id="uploadFile" enctype="multipart/form-data" style="display: none;">
+    <input type="file" name="file" id="uploadQuote">
+    <input type="button" onclick="upload()" value="涓婁紶"/>
 </form>
 
 
 <script type="text/html" id="operate">
-  {{# if (d.settle == 1 || d.settle == 2 || d.settle == 3 || d.settle == 4 || d.settle == 5) { }}
-  <a class="layui-btn layui-btn-xs btn-edit" lay-event="approval2">瀹℃壒</a>
-  {{# } }}
-  {{# if (d.settle == 0) { }}
-  <a class="layui-btn layui-btn-xs btn-edit" lay-event="approval2">鎻愪氦</a>
-  {{# } }}
-<!--  <a class="layui-btn layui-btn-xs btn-edit" lay-event="approval">鎻愪氦</a>-->
-<!--  <a class="layui-btn layui-btn-xs btn-edit" lay-event="check">妯℃澘</a>-->
-  <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">缂栬緫</a>
-<!--  <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="upload">涓婁紶璇环</a>-->
-<!--  <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="viewCheck">鏌ョ湅璇环</a>-->
-  <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">鍒犻櫎</a>
+    {{# if (d.settle == 1 || d.settle == 2 || d.settle == 3 || d.settle == 4 || d.settle == 5) { }}
+    <a class="layui-btn layui-btn-xs btn-edit" lay-event="approval2">瀹℃壒</a>
+    {{# } }}
+    {{# if (d.settle == 0) { }}
+    <a class="layui-btn layui-btn-xs btn-edit" lay-event="approval2">鎻愪氦</a>
+    {{# } }}
+    <!--  <a class="layui-btn layui-btn-xs btn-edit" lay-event="approval">鎻愪氦</a>-->
+    <!--  <a class="layui-btn layui-btn-xs btn-edit" lay-event="check">妯℃澘</a>-->
+    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">缂栬緫</a>
+    <!--  <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="upload">涓婁紶璇环</a>-->
+    <!--  <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="viewCheck">鏌ョ湅璇环</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>
@@ -137,125 +141,134 @@
 <!--</script>-->
 <!-- 琛ㄥ崟寮圭獥 -->
 <script type="text/html" id="editDialog">
-  <form id="editForm" lay-filter="editForm" class="layui-form model-form">
-    <input name="id" type="hidden"/>
-    <div class="layui-form-item">
-      <label class="layui-form-label">椤圭洰鍚�: </label>
-      <div class="layui-input-block cool-auto-complete">
-        <input class="layui-input" name="planId" placeholder="璇疯緭鍏ラ」鐩悕" style="display: none">
-        <input id="planId$" name="planId" 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="planQueryNameBydirector" onkeyup="autoLoad(this.getAttribute('data-key'))">
-          <select class="cool-auto-complete-window-select" data-key="planQueryNameBydirectorSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
-          </select>
+    <form id="editForm" lay-filter="editForm" class="layui-form model-form">
+        <input name="id" type="hidden"/>
+        <div class="layui-form-item">
+            <label class="layui-form-label">椤圭洰鍚�: </label>
+            <div class="layui-input-block cool-auto-complete">
+                <input class="layui-input" name="planId" placeholder="璇疯緭鍏ラ」鐩悕" style="display: none">
+                <input id="planId$" name="planId" 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="planQueryNameBydirector"
+                           onkeyup="autoLoad(this.getAttribute('data-key'))">
+                    <select class="cool-auto-complete-window-select" data-key="planQueryNameBydirectorSelect"
+                            onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                    </select>
+                </div>
+            </div>
         </div>
-      </div>
-    </div>
-    <div class="layui-form-item">
-      <label class="layui-form-label layui-form-required">鎶ラ攢绫诲瀷: </label>
-      <div class="layui-input-inline">
-        <select class="layui-input" name="templateName" lay-vertype="tips" lay-verify="required">
-          <option style="display: none"></option>
-          <option value="椤圭洰鏈畬鎴�">椤圭洰鏈畬鎴�</option>
-          <option value="椤圭洰宸插畬鎴愬湪璐ㄤ繚鏈熷唴">椤圭洰宸插畬鎴愬湪璐ㄤ繚鏈熷唴</option>
-          <option value="闈為」鐩瀷鎶ラ攢">闈為」鐩瀷鎶ラ攢</option>
-          <option value="鍏跺畠">鍏跺畠</option>
-        </select>
-      </div>
-    </div>
-    <div class="layui-form-item">
-      <label class="layui-form-label layui-form-required">鏄惁鍐茶处: </label>
-      <div class="layui-input-inline">
-        <select class="layui-input" name="checkData" lay-vertype="tips" lay-verify="required">
-          <option style="display: none"></option>
-          <option value="鍚�">鍚�</option>
-          <option value="鏄�">鏄�</option>
-        </select>
-      </div>
-    </div>
-    <div class="layui-form-item" style="position: relative;">
-      <label class="layui-form-label">鎶ラ攢鏄庣粏锛�</label>
-      <div class="layui-input-block">
-        <table id="formSSXMTable" lay-filter="formSSXMTable"></table>
-      </div>
-      <button class="layui-btn layui-btn-sm icon-btn" id="matAddBtnComment"
-              style="position: absolute; left: 20px;top: 60px;padding: 0 5px;" type="button">
-        <i class="layui-icon">&#xe654;</i>娣诲姞鏄庣粏
-      </button>
-    </div>
-    <div class="layui-form-item text-right">
-      <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
-      <button class="layui-btn" lay-filter="orderEditSubmit" lay-submit>淇濆瓨</button>
-    </div>
-  </form>
+        <div class="layui-form-item">
+            <label class="layui-form-label layui-form-required">鎶ラ攢绫诲瀷: </label>
+            <div class="layui-input-inline">
+                <select class="layui-input" name="templateName" lay-vertype="tips" lay-verify="required">
+                    <option style="display: none"></option>
+                    <option value="椤圭洰鏈畬鎴�">椤圭洰鏈畬鎴�</option>
+                    <option value="椤圭洰宸插畬鎴愬湪璐ㄤ繚鏈熷唴">椤圭洰宸插畬鎴愬湪璐ㄤ繚鏈熷唴</option>
+                    <option value="闈為」鐩瀷鎶ラ攢">闈為」鐩瀷鎶ラ攢</option>
+                    <option value="鍏跺畠">鍏跺畠</option>
+                </select>
+            </div>
+        </div>
+        <div class="layui-form-item">
+            <label class="layui-form-label layui-form-required">鏄惁鍐茶处: </label>
+            <div class="layui-input-inline">
+                <select class="layui-input" name="checkData" lay-vertype="tips" lay-verify="required">
+                    <option style="display: none"></option>
+                    <option value="鍚�">鍚�</option>
+                    <option value="鏄�">鏄�</option>
+                </select>
+            </div>
+        </div>
+        <div class="layui-form-item" style="position: relative;">
+            <label class="layui-form-label">鎶ラ攢鏄庣粏锛�</label>
+            <div class="layui-input-block">
+                <table id="formSSXMTable" lay-filter="formSSXMTable"></table>
+            </div>
+            <button class="layui-btn layui-btn-sm icon-btn" id="matAddBtnComment"
+                    style="position: absolute; left: 20px;top: 60px;padding: 0 5px;" type="button">
+                <i class="layui-icon">&#xe654;</i>娣诲姞鏄庣粏
+            </button>
+        </div>
+        <div class="layui-form-item text-right">
+            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+            <button class="layui-btn" lay-filter="orderEditSubmit" lay-submit>淇濆瓨</button>
+        </div>
+    </form>
 </script>
 
 <!-- 琛ㄦ牸鎿嶄綔鍒� -->
 <script type="text/html" id="formSSXMTableBar">
-  <!--    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="edit">淇敼</a>-->
-  <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">鍒犻櫎</a>
+    <!--    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="edit">淇敼</a>-->
+    <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">鍒犻櫎</a>
 </script>
 <!-- 琛ㄥ崟寮圭獥 -->
 <script type="text/html" id="matEditDialog">
-  <form id="matEditForm" lay-filter="matEditForm" class="layui-form model-form">
-    <input name="experimentId" type="hidden"/>
+    <form id="matEditForm" lay-filter="matEditForm" class="layui-form model-form">
+        <input name="experimentId" type="hidden"/>
 
-    <div class="layui-form-item" style="float: left">
-      <label class="layui-form-label">璐圭敤绫诲瀷 - 澶氶��</label>
-      <div class="layui-input-block">
-        <div id="reimburseCostTypes" name="reimburseCostTypes">
+        <div class="layui-form-item" style="float: left">
+            <label class="layui-form-label">璐圭敤绫诲瀷 - 澶氶��</label>
+            <div class="layui-input-block">
+                <div id="reimburseCostTypes" name="reimburseCostTypes">
+                </div>
+            </div>
         </div>
-      </div>
-    </div>
 
-    <div class="layui-form-item text-right" style="display: inline-block; margin-left: 35px">
-      <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
-      <button class="layui-btn" lay-filter="matEditSubmit" lay-submit>淇濆瓨</button>
-    </div>
+        <div class="layui-form-item text-right" style="display: inline-block; margin-left: 35px">
+            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+            <button class="layui-btn" lay-filter="matEditSubmit" lay-submit>淇濆瓨</button>
+        </div>
 
-  </form>
+    </form>
 </script>
 
 <!-- 琛ㄥ崟寮圭獥 -->
 <script type="text/html" id="editStatus">
-  <div id="editStatusDetail" lay-filter="editStatusDetail" class="layui-form admin-form model-form">
-    <input name="id" type="hidden">
-    <div class="layui-row">
-      <div class="layui-col-md12">
+    <div id="editStatusDetail" lay-filter="editStatusDetail" class="layui-form admin-form model-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">鐘舵��: </label>
-          <div class="layui-input-block">
-            <select name="status" lay-vertype="tips" lay-verify="required">
-              <option value="">璇烽�夋嫨鐘舵��</option>
-              <option value="1">宸插畬鎴�</option>
-              <option value="0">鏈畬鎴�</option>
-            </select>
-          </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">鐘舵��: </label>
+                    <div class="layui-input-block">
+                        <select name="status" lay-vertype="tips" lay-verify="required">
+                            <option value="">璇烽�夋嫨鐘舵��</option>
+                            <option value="1">宸插畬鎴�</option>
+                            <option value="0">鏈畬鎴�</option>
+                        </select>
+                    </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="templateName" placeholder="璇疯緭鍏ユā鏉垮悕" autocomplete="off"
+                               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="title" placeholder="璇疯緭鍏ヨ〃鏍兼爣棰�" autocomplete="off"
+                               lay-verify="required">
+                    </div>
+                </div>
+
+            </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="templateName" placeholder="璇疯緭鍏ユā鏉垮悕" autocomplete="off" lay-verify="required">
-          </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>
-
-        <div class="layui-form-item">
-          <label class="layui-form-label layui-form-required">琛ㄦ牸鏍囬: </label>
-          <div class="layui-input-block">
-            <input class="layui-input" name="title" placeholder="璇疯緭鍏ヨ〃鏍兼爣棰�" autocomplete="off" lay-verify="required">
-          </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>
-  </div>
+</script>
+
+<script type="text/html" id="occupation">
+    <input name="input-occupation" placeholder="璇疯緭鍏�" autocomplete="off">
 </script>
 </body>
 </html>

--
Gitblit v1.9.1