diff --git a/src/main/java/com/supwisdom/dlpay/atte/Test.java b/src/main/java/com/supwisdom/dlpay/atte/Test.java
index bb72c7b..6d49548 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/Test.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/Test.java
@@ -1,14 +1,26 @@
 package com.supwisdom.dlpay.atte;
 
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.LinkOption;
-import java.nio.file.Path;
-import java.nio.file.Paths;
+import java.io.*;
+import java.util.Properties;
 
 public class Test {
     public static void main(String[] args) {
-
+        String propath=System.getProperty("user.dir");
+        String name=propath+"/config/application-devel-pg.properties";
+        System.out.println(propath);
+        try {
+            String oname="f:/test/test.properties";
+            OutputStream os=new BufferedOutputStream(new FileOutputStream(oname));
+               byte[] bytes=oname.getBytes("utf-8");
+               os.write(bytes);
+               os.flush();
+            InputStream in=new BufferedInputStream(new FileInputStream(name));
+            Properties p=new Properties();
+            p.load(in);
+            System.out.println(p.getProperty("spring.datasource.url"));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
     }
     
 }
diff --git a/src/main/java/com/supwisdom/dlpay/atte/controller/AppAtteController.java b/src/main/java/com/supwisdom/dlpay/atte/controller/AppAtteController.java
index ab29369..1b7a009 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/controller/AppAtteController.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/controller/AppAtteController.java
@@ -1,31 +1,153 @@
 package com.supwisdom.dlpay.atte.controller;
 
+import com.supwisdom.dlpay.atte.bean.RestSearchBean;
+import com.supwisdom.dlpay.atte.domain.TAtteRest;
+import com.supwisdom.dlpay.atte.service.AtteRestService;
+import com.supwisdom.dlpay.framework.util.DateUtil;
+import com.supwisdom.dlpay.mainservice.domain.TCustomer;
+import com.supwisdom.dlpay.mainservice.service.WebInterfaceService;
+import com.supwisdom.dlpay.system.domain.TCustType;
+import com.supwisdom.dlpay.system.page.Pagination;
+import com.supwisdom.dlpay.system.service.SystemService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 @Controller
 @RequestMapping("/app")
 public class AppAtteController {
+
+    @Autowired
+    private AtteRestService atteRestService;
+    @Autowired
+    private SystemService systemService;
+    @Autowired
+    private WebInterfaceService webInterfaceService;
     /**
-     *    请销假页面
+     *    菜单
      * @param
      */
     @GetMapping("/atte/index")
-    public String appindex(@RequestParam(value = "custid")String custid, Model model){
-        model.addAttribute("custid",custid);
-        return "atte/app/index";
+    public ModelAndView appindex(@RequestParam(value = "custid")String custid){
+        ModelAndView model=new ModelAndView();
+       model.addObject("custid",custid);
+       model.setViewName("atte/app/index");
+        return model;
     }
 
     /**
      *    请假
      * @param
      */
-    @GetMapping("/atte/add")
-    public String addindex( Model model){
-        System.out.println("ceshi ----------------");
-        return "atte/app/index";
+    @RequestMapping(value = "/savetempcust", method = RequestMethod.POST)
+    @ResponseBody
+    public Map addRest(@RequestParam("custid") String custid,
+                       @RequestParam("enddate") String enddate,
+                       @RequestParam("startdate") String startdate,
+                       @RequestParam("rtype") String rtype,
+                       @RequestParam("remark") String remark,
+                       HttpServletRequest request){
+        Map map=new HashMap();
+        if(atteRestService.canask(custid,startdate,enddate)){
+            TAtteRest atteRest=new TAtteRest();
+            atteRest.setCustid(custid);
+            atteRest.setStartdate(startdate);
+            atteRest.setEnddate(enddate);
+            atteRest.setRemark(remark);
+            atteRest.setStatus("0");
+            atteRest.setUpdatetime(DateUtil.getNow());
+            if(!atteRestService.saveAtteRest(atteRest)){
+                map.put("errStr","添加数据失败!");
+            }else{
+                map.put("errStr","");
+            }
+        }else {
+            map.put("errStr","所选日期已申请!");
+        }
+
+        return map;
+    }
+
+    /**
+     *  查看历史假条
+     */
+    @RequestMapping(value = "/getrestlist", method = RequestMethod.POST)
+    @ResponseBody
+    public Map getRestList(@RequestParam("rtype") String rtype,
+                           @RequestParam("status") String status,
+                           @RequestParam("custid") String custid,
+                           @RequestParam(value = "pageNo", required = false, defaultValue = "1") int pageNo,
+                           @RequestParam(value = "pageSize", required = false, defaultValue = "10") int pageSize,
+                           HttpServletRequest request){
+        Map map=new HashMap();
+        RestSearchBean searchBean=new RestSearchBean();
+        searchBean.setRtype(rtype);
+        searchBean.setCustid(custid);
+        searchBean.setStatus(status);
+        Pagination page=atteRestService.getRestInfo(searchBean,pageNo,pageSize);
+        map.put("page",page);
+        return map;
+    }
+
+    /**
+     *  请假页面
+     */
+    @GetMapping("/atte/addindex")
+    public ModelAndView addindex(@RequestParam(value = "custid")String custid){
+        ModelAndView model=new ModelAndView();
+        model.addObject("custid",custid);
+        model.setViewName("apph5/askforleave");
+        return model;
+    }
+    /**
+     *  查看假条页面
+     */
+    @GetMapping("/atte/searchindex")
+    public ModelAndView searchindex(@RequestParam(value = "custid")String custid){
+        ModelAndView model=new ModelAndView();
+        model.addObject("custid",custid);
+        model.setViewName("apph5/app/index");
+        return model;
+    }
+    /**
+     *  审核页面
+     */
+    @GetMapping("/atte/reviewindex")
+    public ModelAndView reviewindex(@RequestParam(value = "custid")String custid){
+        ModelAndView model=new ModelAndView();
+        model.addObject("custid",custid);
+        model.setViewName("atte/app/index");
+        List<TCustType> custtypelist=systemService.findAllCusttype();
+
+        return model;
+    }
+    /**
+     *  审核列表
+     */
+    @RequestMapping(value = "/getreviewlist", method = RequestMethod.POST)
+    @ResponseBody
+    public Map getreviewlist(@RequestParam("rtype") String rtype,
+                             @RequestParam("custid") String custid,
+                             @RequestParam(value = "custtypeid", required = false, defaultValue = "") String custtypeid,
+                             @RequestParam(value = "pageNo", required = false, defaultValue = "1") int pageNo,
+                             @RequestParam(value = "pageSize", required = false, defaultValue = "10") int pageSize,
+                             HttpServletRequest request){
+
+      Map map=new HashMap();
+        RestSearchBean searchBean=new RestSearchBean();
+        searchBean.setStatus("0");
+        searchBean.setCusttypeid(custtypeid);
+        searchBean.setRtype(rtype);
+        TCustomer cust=webInterfaceService.findCustomerById(custid);
+        searchBean.setDeptcode(cust.getDeptcode());
+        Pagination page=atteRestService.getRestInfo(searchBean,pageNo,pageSize);
+      return map;
     }
 
 }
diff --git a/src/main/java/com/supwisdom/dlpay/atte/service/AtteRestService.java b/src/main/java/com/supwisdom/dlpay/atte/service/AtteRestService.java
index e972b29..8a38436 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/service/AtteRestService.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/service/AtteRestService.java
@@ -1,6 +1,9 @@
 package com.supwisdom.dlpay.atte.service;
 
+import com.supwisdom.dlpay.atte.bean.RestSearchBean;
 import com.supwisdom.dlpay.atte.domain.TAtteRest;
+import com.supwisdom.dlpay.system.page.Pagination;
+import org.springframework.data.domain.Page;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -17,4 +20,7 @@
     //是否可以申请
     @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean canask(String custid,String startdate,String enddate);
+
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
+    public Pagination getRestInfo(RestSearchBean searchBean, int pageNo, int pageSize);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/atte/service/impl/AtteRestServiceImpl.java b/src/main/java/com/supwisdom/dlpay/atte/service/impl/AtteRestServiceImpl.java
index 5de5149..669b7ad 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/service/impl/AtteRestServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/service/impl/AtteRestServiceImpl.java
@@ -1,8 +1,10 @@
 package com.supwisdom.dlpay.atte.service.impl;
 
+import com.supwisdom.dlpay.atte.bean.RestSearchBean;
 import com.supwisdom.dlpay.atte.dao.AtteRestDao;
 import com.supwisdom.dlpay.atte.domain.TAtteRest;
 import com.supwisdom.dlpay.atte.service.AtteRestService;
+import com.supwisdom.dlpay.system.page.Pagination;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -30,4 +32,9 @@
     public boolean canask(String custid, String startdate, String enddate) {
         return atteRestDao.canask(custid,startdate,enddate);
     }
+
+    @Override
+    public Pagination getRestInfo(RestSearchBean searchBean, int pageNo, int pageSize) {
+        return atteRestDao.getRestInfo(searchBean,pageNo,pageSize);
+    }
 }
diff --git a/src/main/kotlin/com/supwisdom/dlpay/security.kt b/src/main/kotlin/com/supwisdom/dlpay/security.kt
index dadfafe..789959e 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/security.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/security.kt
@@ -127,6 +127,7 @@
                         .antMatchers("/app/apply/**").permitAll()
                         .antMatchers("/api/conference/**").permitAll()
                         .antMatchers("/api/notify/**").permitAll()
+                        .antMatchers("/app/atte/index").permitAll()
                         .antMatchers("/api/common/**").hasAnyRole("THIRD_COMMON", "THIRD_ADMIN")
                         .antMatchers("/api/consume/**").hasRole("THIRD_CONSUME")
                         .antMatchers("/api/deposit/**").hasRole("THIRD_DEPOSIT")
diff --git a/src/main/resources/templates/atte/app/index.html b/src/main/resources/templates/atte/app/index.html
index ce0713d..c6f4b35 100644
--- a/src/main/resources/templates/atte/app/index.html
+++ b/src/main/resources/templates/atte/app/index.html
@@ -30,7 +30,7 @@
     <!--<p style="text-align: center;display: block;font-size:20px">请假</p>-->
 <!--</div>-->
 <div class="weui-cells">
-    <a class="weui-cell weui-cell_access" onclick="" >
+    <a class="weui-cell weui-cell_access" onclick="add()" >
     <div class="weui-cell__bd">
         <p>请假</p>
     </div>
@@ -40,12 +40,21 @@
 
 </div>
 <div class="weui-cells">
-    <a class="weui-cell weui-cell_access" onclick="test()" >
+    <a class="weui-cell weui-cell_access" onclick="search()" >
         <div class="weui-cell__bd">
             <p>查看假条</p>
         </div>
         <div id="test" class="weui-cell__ft">
-            [[${custid}]]
+        </div>
+    </a>
+
+</div>
+<div class="weui-cells">
+    <a class="weui-cell weui-cell_access" onclick="review()" >
+        <div class="weui-cell__bd">
+            <p>审核假条</p>
+        </div>
+        <div  class="weui-cell__ft">
         </div>
     </a>
 
@@ -55,11 +64,45 @@
 </body>
 
 <script>
+
     $(function () {
 
     });
-    function test(){
-        alert("1");
+    function add() {
+        var custid=[[${custid}]];
+        alert('ok');
+        $.ajax({
+            type: "get",
+            url: "[[@{/app/atte/addindex?custid=}]]"+custid,
+            dataType: "json",
+            success: function (data) {
+
+            }
+        });
+    }
+    function search(){
+        var custid=[[${custid}]];
+        $.ajax({
+            type: "get",
+            url: "[[@{app/atte/searchindex?custid=}]]"+custid,
+            dataType: "json",
+            success: function (data) {
+
+
+            }
+        });
+    }
+    function review() {
+        var custid=[[${custid}]];
+        $.ajax({
+            type: "get",
+            url: "[[@{app/atte/reviewindex?custid=}]]"+custid,
+            dataType: "json",
+            success: function (data) {
+
+
+            }
+        });
     }
 
 </script>
