Przeglądaj źródła

console相关内容提交

dongbw 8 lat temu
rodzic
commit
ba164d1129
47 zmienionych plików z 3522 dodań i 26 usunięć
  1. 7 0
      donate-console/src/main/java/com/uas/console/donate/Impl/ProjectEvolveServiceImpl.java
  2. 15 1
      donate-console/src/main/java/com/uas/console/donate/Impl/ProjectFinanceServiceImpl.java
  3. 32 10
      donate-console/src/main/java/com/uas/console/donate/Impl/ProjectServiceImpl.java
  4. 12 4
      donate-console/src/main/java/com/uas/console/donate/controller/ProjectController.java
  5. 9 0
      donate-console/src/main/java/com/uas/console/donate/controller/ProjectEvolveController.java
  6. 25 0
      donate-console/src/main/java/com/uas/console/donate/controller/ProjectFinanceController.java
  7. 17 0
      donate-console/src/main/java/com/uas/console/donate/controller/ProjectRecodeController.java
  8. 6 0
      donate-console/src/main/java/com/uas/console/donate/dao/ProjectEvolveDao.java
  9. 30 0
      donate-console/src/main/java/com/uas/console/donate/dao/ProjectFinanceDao.java
  10. 0 1
      donate-console/src/main/java/com/uas/console/donate/model/Award.java
  11. 4 0
      donate-console/src/main/java/com/uas/console/donate/model/Org.java
  12. 29 0
      donate-console/src/main/java/com/uas/console/donate/model/Project.java
  13. 5 1
      donate-console/src/main/java/com/uas/console/donate/model/ProjectEvolve.java
  14. 15 0
      donate-console/src/main/java/com/uas/console/donate/model/ProjectFinance.java
  15. 30 0
      donate-console/src/main/java/com/uas/console/donate/model/ProjectRecode.java
  16. 5 0
      donate-console/src/main/java/com/uas/console/donate/service/ProjectEvolveService.java
  17. 6 0
      donate-console/src/main/java/com/uas/console/donate/service/ProjectFinanceService.java
  18. 5 2
      donate-console/src/main/java/com/uas/console/donate/service/ProjectService.java
  19. 2 2
      donate-console/src/main/resources/config/application-dev.properties
  20. 15 1
      donate-console/src/main/resources/config/application-test.properties
  21. 142 4
      donate-console/src/main/webapp/WEB-INF/views/index.html
  22. BIN
      donate-console/src/main/webapp/resources/images/icon/u.png
  23. 36 0
      donate-console/src/main/webapp/resources/js/common/directives.js
  24. 611 0
      donate-console/src/main/webapp/resources/js/common/services.js
  25. 137 0
      donate-console/src/main/webapp/resources/js/common/utils.js
  26. 331 0
      donate-console/src/main/webapp/resources/js/index/app.js
  27. 74 0
      donate-console/src/main/webapp/resources/js/index/main.js
  28. 69 0
      donate-console/src/main/webapp/resources/js/index/services/Project.js
  29. 1 0
      donate-console/src/main/webapp/resources/view/activity/activity_list.html
  30. 10 0
      donate-console/src/main/webapp/resources/view/activity/activity_start.html
  31. 10 0
      donate-console/src/main/webapp/resources/view/front/banner.html
  32. 10 0
      donate-console/src/main/webapp/resources/view/front/bg-content.html
  33. 10 0
      donate-console/src/main/webapp/resources/view/message/message_edit.html
  34. 10 0
      donate-console/src/main/webapp/resources/view/message/message_list.html
  35. 79 0
      donate-console/src/main/webapp/resources/view/project/audit_confirm.html
  36. 418 0
      donate-console/src/main/webapp/resources/view/project/project_detail.html
  37. 230 0
      donate-console/src/main/webapp/resources/view/project/project_detail_disagreed.html
  38. 219 0
      donate-console/src/main/webapp/resources/view/project/project_detail_unaudited.html
  39. 1 0
      donate-console/src/main/webapp/resources/view/project/project_finance.html
  40. 848 0
      donate-console/src/main/webapp/resources/view/project/project_list.html
  41. 1 0
      donate-console/src/main/webapp/resources/view/project/project_management.html
  42. 1 0
      donate-console/src/main/webapp/resources/view/project/project_report.html
  43. 1 0
      donate-console/src/main/webapp/resources/view/project/project_start.html
  44. 1 0
      donate-console/src/main/webapp/resources/view/user/authority.html
  45. 1 0
      donate-console/src/main/webapp/resources/view/user/organization_list.html
  46. 1 0
      donate-console/src/main/webapp/resources/view/user/organization_register.html
  47. 1 0
      donate-console/src/main/webapp/resources/view/user/user_list.html

+ 7 - 0
donate-console/src/main/java/com/uas/console/donate/Impl/ProjectEvolveServiceImpl.java

@@ -6,6 +6,8 @@ import com.uas.console.donate.service.ProjectEvolveService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 @Service
 public class ProjectEvolveServiceImpl implements ProjectEvolveService{
     @Autowired
@@ -16,6 +18,11 @@ public class ProjectEvolveServiceImpl implements ProjectEvolveService{
         return projectEvolveDao.save(projectEvolve);
     }
 
+    //查找某项目所有的项目进度
+    public List<ProjectEvolve> findAll(Long proId){
+        return projectEvolveDao.findAll(proId);
+    }
+
     //删除某一条进度
     public ProjectEvolve deleteById(Long id){
         return projectEvolveDao.deleteById(id);

+ 15 - 1
donate-console/src/main/java/com/uas/console/donate/Impl/ProjectFinanceServiceImpl.java

@@ -1,7 +1,6 @@
 package com.uas.console.donate.Impl;
 
 import com.uas.console.donate.dao.ProjectFinanceDao;
-import com.uas.console.donate.model.FileUpload;
 import com.uas.console.donate.model.ProjectFinance;
 import com.uas.console.donate.service.ProjectFinanceService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -24,4 +23,19 @@ public class ProjectFinanceServiceImpl implements ProjectFinanceService{
     public List<ProjectFinance> findByProId(Long proId){
         return projectFinanceDao.findByProId(proId);
     }
+
+    @Override
+    public Double getTotalCostByProId(Long proId) {
+        return projectFinanceDao.getTotalCostByProId(proId);
+    }
+
+    @Override
+    public Double getExecuteCostByProId(Long proId) {
+        return projectFinanceDao.getExecuteCostByProId(proId);
+    }
+
+    @Override
+    public Double getProjectCostByProId(Long proId) {
+        return projectFinanceDao.getProjectCostByProId(proId);
+    }
 }

+ 32 - 10
donate-console/src/main/java/com/uas/console/donate/Impl/ProjectServiceImpl.java

@@ -10,8 +10,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
+import org.springframework.ui.ModelMap;
 
-import java.util.Date;
 import java.util.List;
 
 @Service
@@ -83,18 +83,28 @@ public class ProjectServiceImpl implements ProjectService {
 
 
     //批注项目
-    public Project approve(Long id){
-        Project project=projectDao.findOne(id);
-        project.setStatus(1);
-        return projectDao.save(project);
+    public ModelMap approve(Long id){
+        try{
+            Project project=projectDao.findOne(id);
+            project.setStatus(1);
+            projectDao.save(project);
+            return new ModelMap("success", true);
+        } catch (Exception e) {
+            return new ModelMap("error", true);
+        }
     }
 
     //驳回项目
-    public Project unapprove(Long id,String refuse){
-        Project project=projectDao.findOne(id);
-        project.setRefuse(refuse);
-        project.setStatus(2);
-        return projectDao.save(project);
+    public ModelMap unapprove(Long id,String refuse){
+        try{
+            Project project=projectDao.findOne(id);
+            project.setStatus(2);
+            project.setRefuse(refuse);
+            projectDao.save(project);
+            return new ModelMap("success", true);
+        } catch (Exception e) {
+            return new ModelMap("error", true);
+        }
     }
 
     public List<Project> getProjects(){
@@ -117,4 +127,16 @@ public class ProjectServiceImpl implements ProjectService {
         return projectDao.search(search);
     }
 
+    @Override
+    public ModelMap reapply(Long id) {
+       try {
+           Project project = projectDao.findOne(id);
+           project.setStatus(0);
+           projectDao.save(project);
+           return new ModelMap("success", true);
+       } catch (Exception e) {
+           return new ModelMap("error", true);
+       }
+    }
+
 }

+ 12 - 4
donate-console/src/main/java/com/uas/console/donate/controller/ProjectController.java

@@ -9,6 +9,7 @@ import com.uas.console.donate.service.ProjectService;
 import com.uas.dfs.service.FileClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -17,13 +18,11 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import javax.sql.DataSource;
 import java.io.IOException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
-import java.util.Map;
 
 @Controller
 @RequestMapping("/project")
@@ -46,7 +45,7 @@ public class ProjectController {
      */
     @RequestMapping("/approve")
     @ResponseBody
-    public Project approve(Long id){
+    public ModelMap approve(Long id){
         return projectService.approve(id);
     }
 
@@ -55,10 +54,19 @@ public class ProjectController {
      */
     @RequestMapping("/unapprove")
     @ResponseBody
-    public Project unapprove(Long id,String refuse){
+    public ModelMap unapprove(Long id,String refuse){
         return projectService.unapprove(id,refuse);
     }
 
+    /**
+     * 重新申请项目
+     */
+    @RequestMapping(value = "/reapply", method = RequestMethod.POST)
+    @ResponseBody
+    public ModelMap reapply(Long id){
+        return projectService.reapply(id);
+    }
+
     /**
      * 获取所有未被活动关联到的项目
      */

+ 9 - 0
donate-console/src/main/java/com/uas/console/donate/controller/ProjectEvolveController.java

@@ -16,6 +16,7 @@ import org.springframework.web.multipart.MultipartFile;
 import java.io.IOException;
 import java.lang.reflect.Method;
 import java.util.Date;
+import java.util.List;
 
 @Controller
 @RequestMapping("/projectEvolve")
@@ -51,6 +52,7 @@ public class ProjectEvolveController {
         String path=fileClient.upload(file.getBytes(),file.getSize(),"jpg",null);
 
         return path;
+
     }
 
     /**
@@ -63,4 +65,11 @@ public class ProjectEvolveController {
     public ProjectEvolve deleteById(@PathVariable("id") Long id){
         return projectEvolveService.deleteById(id);
     }
+    //查找某项目所有的项目进度
+    @ResponseBody
+    @RequestMapping("/getSchedules")
+    public List<ProjectEvolve> findAll(Long proId){
+        return projectEvolveService.findAll(proId);
+    }
+
 }

+ 25 - 0
donate-console/src/main/java/com/uas/console/donate/controller/ProjectFinanceController.java

@@ -8,6 +8,7 @@ import com.uas.console.donate.util.StringUtils;
 import com.uas.dfs.service.FileClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.multipart.MultipartFile;
@@ -63,5 +64,29 @@ public class ProjectFinanceController {
         return projectFinanceService.findByProId(proId);
     }
 
+    /**
+     * 获取某项目的所有财务信息
+     * @param proId
+     * @return
+     */
+    @ResponseBody
+    @RequestMapping("/getFinance")
+    public ModelMap getFinance(Long proId){
+        ModelMap map = new ModelMap();
+        // 项目所有支出明细
+        List<ProjectFinance> finances = projectFinanceService.findByProId(proId);
+        map.put("projectFinance", finances);
+        // 项目全部支出
+        Double totalCost = projectFinanceService.getTotalCostByProId(proId);
+        map.put("totalCost", totalCost);
+        // 项目执行成本
+        Double executeCost = projectFinanceService.getExecuteCostByProId(proId);
+        map.put("executeCost", executeCost);
+        // 项目支出
+        Double projectCost = projectFinanceService.getProjectCostByProId(proId);
+        map.put("projectCost", projectCost);
+        return map;
+    }
+
 
 }

+ 17 - 0
donate-console/src/main/java/com/uas/console/donate/controller/ProjectRecodeController.java

@@ -1,10 +1,27 @@
 package com.uas.console.donate.controller;
 
+import com.uas.console.donate.model.ProjectRecode;
+import com.uas.console.donate.service.ProjectRecodeService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+import java.util.List;
 
 @Controller
 @RequestMapping("/projectrecode")
 public class ProjectRecodeController {
 
+    @Autowired
+    private ProjectRecodeService projectRecodeService;
+
+    /**
+     * 查询所有捐款记录
+     */
+    @RequestMapping(value="/getRecords", method = RequestMethod.GET)
+    public List<ProjectRecode> getRecords(Long proId) {
+        return projectRecodeService.findProjectDetail(proId);
+    }
+
 }

+ 6 - 0
donate-console/src/main/java/com/uas/console/donate/dao/ProjectEvolveDao.java

@@ -4,6 +4,8 @@ import com.uas.console.donate.model.ProjectEvolve;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.data.jpa.repository.Query;
 
 import java.util.List;
 
@@ -14,4 +16,8 @@ public interface ProjectEvolveDao extends JpaRepository<ProjectEvolve,Long>,JpaS
     //删除某一条进度
     @Query("delete  from ProjectEvolve where id=:id")
     ProjectEvolve deleteById(Long id);
+
+    //查找某项目所有的项目进度
+    @Query("from ProjectEvolve where proId=:proId")
+    List<ProjectEvolve> findAll(@Param("proId")Long proId);
 }

+ 30 - 0
donate-console/src/main/java/com/uas/console/donate/dao/ProjectFinanceDao.java

@@ -12,6 +12,36 @@ import java.util.List;
 @Repository
 public interface ProjectFinanceDao extends JpaRepository<ProjectFinance,Long>,JpaSpecificationExecutor<ProjectFinance> {
 
+    /**
+     * 获取项目所有支出明细
+     * @param proId
+     * @return
+     */
     @Query("from ProjectFinance where proId=:proId")
     List<ProjectFinance> findByProId(@Param("proId")Long proId);
+
+
+    /**
+     * 获取项目所有支出
+     * @param proId
+     * @return
+     */
+    @Query("select sum(f.amount) from ProjectFinance f where f.proId =:proId")
+    Double getTotalCostByProId(@Param("proId")Long proId);
+
+    /**
+     * 获取项目执行成本
+     * @param proId
+     * @return
+     */
+    @Query("select sum(f.amount) from ProjectFinance f where f.proId =:proId and f.type = 2")
+    Double getExecuteCostByProId(@Param("proId")Long proId);
+
+    /**
+     * 获取项目项目相关支出
+     * @param proId
+     * @return
+     */
+    @Query("select sum(f.amount) from ProjectFinance f where f.proId =:proId and f.type = 1")
+    Double getProjectCostByProId(@Param("proId")Long proId);
 }

+ 0 - 1
donate-console/src/main/java/com/uas/console/donate/model/Award.java

@@ -2,7 +2,6 @@ package com.uas.console.donate.model;
 
 import javax.persistence.*;
 import java.io.Serializable;
-import java.util.Date;
 
 @Entity
 @Table(name="donate$award")

+ 4 - 0
donate-console/src/main/java/com/uas/console/donate/model/Org.java

@@ -6,6 +6,10 @@ import java.io.Serializable;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 
+/**
+ * 机构信息
+ *
+ */
 @Entity
 @Table(name="donate$organization")
 public class Org implements Serializable{

+ 29 - 0
donate-console/src/main/java/com/uas/console/donate/model/Project.java

@@ -49,6 +49,12 @@ public class Project implements Serializable{
     @Column(name = "pro_area")
     private String area;
 
+    /**
+     * 具体分类
+     */
+    @Column(name = "pro_classify")
+    private String classify;
+
     /**
      * 项目所在省
      */
@@ -155,6 +161,13 @@ public class Project implements Serializable{
     @Column(name = "pro_org_id")
     private Long orgId;
 
+    /**
+     * 机构信息
+     */
+    @OneToOne(cascade = CascadeType.REFRESH)
+    @JoinColumn(name = "pro_org_id", insertable = false, updatable = false)
+    private Org organization;
+
     /**
      * 所属机构名
      */
@@ -511,4 +524,20 @@ public class Project implements Serializable{
     public void setJoinAmount(Long joinAmount) {
         this.joinAmount = joinAmount;
     }
+
+    public Org getOrganization() {
+        return organization;
+    }
+
+    public void setOrganization(Org organization) {
+        this.organization = organization;
+    }
+
+    public String getClassify() {
+        return classify;
+    }
+
+    public void setClassify(String classify) {
+        this.classify = classify;
+    }
 }

+ 5 - 1
donate-console/src/main/java/com/uas/console/donate/model/ProjectEvolve.java

@@ -1,13 +1,17 @@
 package com.uas.console.donate.model;
 
 import javax.persistence.*;
+import java.util.Date;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 
+/**
+ * 项目进度
+ *
+ */
 @Entity
 @Table(name = "donate$projectevolve")
 public class ProjectEvolve {
-
     private static final long serialVersionUID = 1L;
     private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm");
 

+ 15 - 0
donate-console/src/main/java/com/uas/console/donate/model/ProjectFinance.java

@@ -1,6 +1,7 @@
 package com.uas.console.donate.model;
 
 import javax.persistence.*;
+import java.util.Date;
 
 @Entity
 @Table(name = "donate$projectfinance")
@@ -51,6 +52,12 @@ public class ProjectFinance {
     @Column(name="status")
     private Integer status;
 
+    /**
+     * 提交时间
+     */
+    @Column(name="submittime")
+    private Date submitTime;
+
 
     public Long getId() {
         return id;
@@ -107,4 +114,12 @@ public class ProjectFinance {
     public void setPath(String path) {
         this.path = path;
     }
+
+    public Date getSubmitTime() {
+        return submitTime;
+    }
+
+    public void setSubmitTime(Date submitTime) {
+        this.submitTime = submitTime;
+    }
 }

+ 30 - 0
donate-console/src/main/java/com/uas/console/donate/model/ProjectRecode.java

@@ -34,6 +34,13 @@ public class ProjectRecode {
     @Column(name="pr_uuid")
     private Long uuid;
 
+    /**
+     * 用户信息
+     */
+    @OneToOne(cascade = CascadeType.REFRESH)
+    @JoinColumn(name = "pr_uuid", insertable = false, updatable = false)
+    private User user;
+
 
     /**
      * 捐款额
@@ -62,6 +69,13 @@ public class ProjectRecode {
     @Column(name = "pr_org_name")
     private String orgName;
 
+    /**
+     * 捐款方式
+     * @return
+     */
+    @Column(name = "pr_way")
+    private String way;
+
     public Long getId() {
         return id;
     }
@@ -126,4 +140,20 @@ public class ProjectRecode {
     public void setOrgName(String orgName) {
         this.orgName = orgName;
     }
+
+    public String getWay() {
+        return way;
+    }
+
+    public void setWay(String way) {
+        this.way = way;
+    }
+
+    public User getUser() {
+        return user;
+    }
+
+    public void setUser(User user) {
+        this.user = user;
+    }
 }

+ 5 - 0
donate-console/src/main/java/com/uas/console/donate/service/ProjectEvolveService.java

@@ -2,9 +2,14 @@ package com.uas.console.donate.service;
 
 import com.uas.console.donate.model.ProjectEvolve;
 
+import java.util.List;
+
 public interface ProjectEvolveService {
     ProjectEvolve save(ProjectEvolve projectEvolve);
 
+    //查找某项目所有的项目进度
+    List<ProjectEvolve> findAll(Long proId);
+
     //删除某一条进度
     ProjectEvolve deleteById(Long id);
 }

+ 6 - 0
donate-console/src/main/java/com/uas/console/donate/service/ProjectFinanceService.java

@@ -9,4 +9,10 @@ public interface ProjectFinanceService {
     ProjectFinance save(ProjectFinance projectFinance);
 
     List<ProjectFinance> findByProId(Long proId);
+
+    Double getTotalCostByProId(Long proId);
+
+    Double getExecuteCostByProId(Long proId);
+
+    Double getProjectCostByProId(Long proId);
 }

+ 5 - 2
donate-console/src/main/java/com/uas/console/donate/service/ProjectService.java

@@ -6,6 +6,7 @@ import com.uas.console.donate.model.Org;
 import com.uas.console.donate.model.Project;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
+import org.springframework.ui.ModelMap;
 
 import java.util.List;
 
@@ -23,10 +24,10 @@ public interface ProjectService {
     Page<Project> findAll(Pageable pageable);
 
     //批准项目
-    Project approve(Long id);
+    ModelMap approve(Long id);
 
     //驳回项目
-    Project unapprove(Long id,String refuse);
+    ModelMap unapprove(Long id,String refuse);
 
     List<Project> getProjects();
 
@@ -44,4 +45,6 @@ public interface ProjectService {
 
     //项目列表搜索框查询
     List<Project> search(String search);
+
+    ModelMap reapply(Long id);
 }

+ 2 - 2
donate-console/src/main/resources/config/application-dev.properties

@@ -31,8 +31,8 @@ spring.jpa.hibernate.dialect=org.hibernate.dialect.5Dialect
 spring.jackson.serialization.indent_output=false  
 
 zk.url=zookeeper://10.10.100.11:2181
-dubbo.owner=test
-dubbo.group=test
+dubbo.owner=dev
+dubbo.group=dev
 
 spring.http.encoding.force=true
 spring.http.multipart.enabled=true

+ 15 - 1
donate-console/src/main/resources/config/application-test.properties

@@ -23,4 +23,18 @@ security.basic.path=/console
 security.user.name=admin
 security.user.password=select111***
 security.user.role=ADMIN
-security.ignored=false
+security.ignored=false
+
+spring.jpa.hibernate.show-sql= true  
+spring.jpa.hibernate.ddl-auto=update
+spring.jpa.hibernate.dialect=org.hibernate.dialect.5Dialect  
+spring.jackson.serialization.indent_output=false  
+
+zk.url=zookeeper://10.10.100.11:2181
+dubbo.owner=dev
+dubbo.group=dev
+
+spring.http.encoding.force=true
+spring.http.multipart.enabled=true
+spring.http.multipart.max-file-size=128MB
+spring.http.multipart.max-request-size=128MB

+ 142 - 4
donate-console/src/main/webapp/WEB-INF/views/index.html

@@ -1,10 +1,148 @@
 <!DOCTYPE html>
 <html lang="en">
 <head>
-    <meta charset="UTF-8">
-    <title>Title</title>
+    <title>后台管理</title>
+    <meta name="keywords" content="">
+    <meta name="description" content="">
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <meta name="renderer" content="webkit">
+    <!--css begin-->
+    <link href="static/images/icon/u.png" rel="icon" type="image/x-icon" />
+    <link rel="stylesheet" href="static/css/base.css">
+    <link rel="stylesheet" href="static/css/common.css">
+    <link rel="stylesheet" href="static/css/AdminLTE.css">
+    <link rel="stylesheet" href="static/css/skins/_all-skins.css">
+    <link rel="stylesheet" href="static/lib/bootstrap/css/bootstrap.min.css">
+    <link rel="stylesheet" href="static/lib/font-awesome/css/font-awesome.min.css">
+
 </head>
-<body>
-    <h1>Index Page!</h1>
+<body class="skin-blue sidebar-mini  pace-done">
+<!--<div class="pace  pace-inactive">-->
+    <!--<div class="pace-progress" data-progress-text="100%" data-progress="99" style="transform: translate3d(100%, 0px, 0px);">-->
+        <!--<div class="pace-progress-inner"></div>-->
+    <!--</div>-->
+    <!--<div class="pace-activity"></div>-->
+<!--</div>-->
+<div class="wrapper">
+    <!--顶部导航-->
+    <header class="main-header">
+        <!-- Logo -->
+        <a href="" class="logo" target="_blank">
+            <span class="logo-mini"><b>UAS</b></span>
+            <span class="logo-lg"><b>一元捐后台系统</b></span>
+        </a>
+        <nav class="navbar navbar-static-top" role="navigation">
+            <a href="#" class="sidebar-toggle" data-toggle="offcanvas" role="button">
+                <span class="sr-only">开关</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span>
+            </a>
+            <div class="navbar-custom-menu" style="padding-right: 2rem">
+                <ul class="nav navbar-nav">
+                    <li class="dropdown user user-menu">
+                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">
+                            <span class="hidden-xs">超级管理员, 您好</span>
+                            <img src="static/images/avatar.jpg" class="user-image">
+                        </a>
+                        <ul class="dropdown-menu">
+                            <!-- User image -->
+                            <li class="user-header">
+                                <img src="static/images/avatar.jpg" style="border-radius: 50%;">
+                                <p>超级管理员 - 超级管理员</p>
+                            </li>
+                            <li class="user-footer">
+                                <div class="pull-left">
+                                    <a href="" class="btn btn-default btn-flat">资料</a>
+                                </div>
+                                <div class="pull-right">
+                                    <a href="" class="btn btn-default btn-flat">退出</a>
+                                </div>
+                            </li>
+                        </ul>
+                    </li>
+                </ul>
+            </div>
+        </nav>
+    </header>
+    <!--左侧边栏-->
+    <aside class="main-sidebar">
+        <section class="sidebar">
+            <ul class="sidebar-menu">
+                <li class="jpress_block"></li>
+                <li class="treeview active" id="dashboard">
+                    <!-- 加一元捐首页链接 -->
+                    <a href="">
+                        <i class="fa fa-home"></i>
+                        <span>一元捐首页</span>
+                    </a>
+                </li>
+                <li class="jpress_block"></li>
+                <li class="treeview" id="systems">
+                    <a href="#">
+                        <i class="fa fa-file-text-o"></i><span>项目中心</span>
+                        <i class="fa fa-angle-left pull-right"></i>
+                    </a>
+                    <ul class="treeview-menu">
+                        <li id=""><a ui-sref="project">项目列表</a></li>
+                        <li id=""><a href="launchProject">发起项目</a></li>
+                        <!--<li id=""><a href="">捐款明细</a></li>-->
+                        <li id=""><a href="projectFinancialDisclosure">项目财务披露</a></li>
+                        <li id=""><a href="projectReportToFillIn">项目报告填写</a></li>
+                        <li id=""><a href="projectKnotManagement">项目结项管理</a></li>
+                    </ul>
+                </li>
+                <li class="treeview" id="schemes">
+                    <a href="#">
+                        <i class="fa fa-file-text-o"></i><span>用户中心</span>
+                        <i class="fa fa-angle-left pull-right"></i>
+                    </a>
+                    <ul class="treeview-menu">
+                        <li id=""><a href="listOfInstitutions">机构列表</a></li>
+                        <li id=""><a href="userList">用户列表</a></li>
+                        <li id=""><a href="permissionsSettings">权限设置</a></li>
+                        <li id=""><a href="selectInstitutionsNature">机构入驻</a></li>
+                    </ul>
+                </li>
+                <li class="treeview" id="customers">
+                    <a href="#"><i class="fa fa-file-text-o"></i><span>活动中心</span>
+                        <i class="fa fa-angle-left pull-right"></i>
+                    </a>
+                    <ul class="treeview-menu">
+                        <li id=""><a href="activityInitiated">活动发起</a></li>
+                        <li id=""><a href="activeList">活动列表</a></li>
+                    </ul>
+                </li>
+                <li class="treeview" id="customers">
+                    <a href="#"><i class="fa fa-file-text-o"></i><span>消息中心</span>
+                        <i class="fa fa-angle-left pull-right"></i>
+                    </a>
+                    <ul class="treeview-menu">
+                        <li id=""><a href="editMessage">编辑消息</a></li>
+                        <li id=""><a href="messageList">消息列表</a></li>
+                    </ul>
+                </li>
+                <li class="treeview" id="customers">
+                    <a href="#"><i class="fa fa-file-text-o"></i><span>前台管理</span>
+                        <i class="fa fa-angle-left pull-right"></i>
+                    </a>
+                    <ul class="treeview-menu">
+                        <li id=""><a href="bannerSetting">Banner设置</a></li>
+                        <li id=""><a href="contentBoxSetting">内容框背景设置</a></li>
+                    </ul>
+                </li>
+                <li class="jpress_block"></li>
+            </ul>
+        </section>
+        <!-- /.sidebar -->
+    </aside>
+    <div ui-view class="view-slide-in"></div>
+</div>
+
+<!--js begin-->
+<script src="static/lib/jquery/jquery.min.js"></script>
+<script src="static/lib/bootstrap/js/bootstrap.min.js"></script>
+<script src="static/lib/js/app.min.js"></script>
+<script type="text/javascript" src="static/lib/require.js"
+        data-main="static/js/index/main.js"></script>
 </body>
 </html>

BIN
donate-console/src/main/webapp/resources/images/icon/u.png


+ 36 - 0
donate-console/src/main/webapp/resources/js/common/directives.js

@@ -0,0 +1,36 @@
+define(['angular'], function(angular) {
+    'use strict';
+    angular.module('common.directives', []).directive('scrollTable', [function(){
+        // table 固定表头
+        return {
+            restrict : 'A',
+            link : function(scope, element, attrs, ngModel) {
+                var header = element.find('.table-header-wrap'), body = element.find('.table-body-wrap');
+                if(header && body) {
+                    body.bind('scroll', function() {
+                        header.scrollLeft(body.scrollLeft());
+                    });
+                }
+            }
+        };
+    }])
+    /**
+     * 搜索框,回车触发
+     */
+        .directive('ngSearch', ['$parse', function ($parse) {
+            return {
+                require: '?ngModel',
+                restrict: 'A',
+                link: function (scope, element, attrs, ngModel) {
+                    var searchFn = $parse(attrs.ngSearch);
+                    element.bind('keypress', function (event) {
+                        if (event.keyCode == '13') {
+                            event.preventDefault();
+                            event.stopPropagation();
+                            searchFn(scope, {$data: ngModel.$modelValue, $event: event});
+                        }
+                    });
+                }
+            };
+        }]);
+});

+ 611 - 0
donate-console/src/main/webapp/resources/js/common/services.js

@@ -0,0 +1,611 @@
+define([ 'angular', 'common/utils', 'ngResource'], function(angular, utils, Big) {
+	'use strict';
+	angular.module('common.services', [ 'common.utils', 'ngResource' ]).factory('FlashService', ['$rootScope', function($rootScope) {
+		return {
+			show : function(message) {
+				$rootScope.flashMessage = message;
+			},
+			clear : function() {
+				$rootScope.flashMessage = "";
+			}
+		};
+	}]).factory('SessionService', function() {
+		return {
+			get : function(key) {
+				var storage = window.sessionStorage;
+				if(storage)
+					return sessionStorage.getItem(key);
+				return null;
+			},
+			set : function(key, val) {
+				var storage = window.sessionStorage;
+				if(storage)
+					return sessionStorage.setItem(key, val);
+				return null;
+			},
+			unset : function(key) {
+				var storage = window.sessionStorage;
+				if(storage)
+					return sessionStorage.removeItem(key);
+				return null;
+			},
+			getCookie: function(key) {
+				var storage = window.localStorage;
+				if(storage)
+					return storage.getItem(key);
+				else {
+					var val = document.cookie.match(new RegExp("(^| )" + key + "=([^;]*)(;|$)"));
+					if (val != null) {
+						return unescape(val[2]);
+					}
+					return null
+				}
+			},
+			setCookie: function(key, val) {
+				var storage = window.localStorage;
+				if(storage)
+					storage.setItem(key, val);
+				else {
+					var date = new Date(new Date().getTime() + 30 * 24 * 60 * 60 * 1000);
+					document.cookie = key + "=" + escape(val) + ";expires=" + date.toGMTString();
+				}
+			},
+			removeCookie: function(key) {
+				var storage = window.localStorage;
+				if(storage)
+					storage.removeItem(key);
+				else {
+					var val = this.getCookie(key);
+					if (val != null) {
+						var date = new Date(new Date().getTime() - 1);
+						document.cookie = key + "=" + val + ";expires=" + date.toGMTString()
+					}
+				}
+			}
+		};
+	}).factory('BaseService', ['$rootScope', function($rootScope) {
+		return {
+            getRootPath: function() {
+            	var pathName = window.location.pathname.substring(1);
+            	var webName = pathName == '' ? '': pathName.substring(0, pathName.indexOf('/'));
+            	if (webName == "" || webName == "store") {
+            	    return window.location.protocol + '//' + window.location.host;
+            	} else {
+            	    return window.location.protocol + '//' + window.location.host + '/' + webName;
+            	}
+            },
+			isNumber: function(n) {
+		        return !isNaN(parseFloat(n)) && isFinite(n);
+		    },
+		    // parse url params
+		    parseParams: function(requestParams) {
+		    	var me = this;
+		        for (var key in requestParams) {
+		            if (key.indexOf('[') >= 0) {
+		                var params = key.split(/\[(.*)\]/), value = requestParams[key], lastKey = '';
+		                angular.forEach(params.reverse(), function(name) {
+		                    if (name != '') {
+		                        var v = value;
+		                        value = {};
+		                        value[lastKey = name] = me.isNumber(v) ? parseFloat(v) : v;
+		                    }
+		                });
+		                requestParams[lastKey] = angular.extend(requestParams[lastKey] || {}, value[lastKey]);
+		                delete requestParams[key];
+		            } else {
+		                requestParams[key] = me.isNumber(requestParams[key]) ? parseFloat(requestParams[key]) : requestParams[key];
+		            }
+		        }
+		        return requestParams;
+			},
+			// 获取之后的路径
+			getCurrentUrl: function() {
+				var fullPath = window.document.location.href;
+				return fullPath.substring(this.getRootPath().length, fullPath.length);
+			},
+			// 返回路径中带的搜索关键字
+			getKeyWord: function() {
+				var urlParam = window.document.location.href;
+				var keyword = "";
+				if(urlParam) {
+					keyword = urlParam.substring(urlParam.indexOf("?wd=")+4, urlParam.length);
+				}
+				return keyword;
+			},
+			decodeSpecialCode: function(str) {
+				return str.replace('%2F', '/').replace('%3F', '?').replace('%25', '%')
+				.replace('%20', ' ').replace('%3D', '=').replace('%23', '#');
+			},
+			scrollBackToTop: function() {
+				var scrollToTop = function() {
+					if(angular.element(document).scrollTop() > 0) {
+						window.scrollBy(0, -50);
+						setTimeout(function() {
+							$rootScope.$apply(function() {
+								scrollToTop();
+							});
+						}, 10);
+					}	
+				}
+				scrollToTop();
+			},
+			// 获取指定模块pathname,主要用于兼容类似于产品模块同时使用两个product和products这类情况
+			getModulePathname: function (currentPathname, currentModule, nextModule) {
+				if(currentPathname.indexOf(currentModule+'s') !== -1) {
+					return currentPathname.replace(currentModule+'s', nextModule);
+				}else {
+					return currentPathname.replace(currentModule, nextModule);
+				}
+			}
+		};
+	}]).factory('AuthenticationService', ['$http', 'SessionService', 'BaseService', 'SerializerUtil', function($http, SessionService, BaseService, SerializerUtil) {
+		var cacheSession = function() {
+			SessionService.set('authenticated', true);
+		};
+		var uncacheSession = function() {
+			SessionService.unset('authenticated');
+		};
+		var rootPath = BaseService.getRootPath();
+		return {
+			root : function() {
+				return rootPath;	
+			},
+			/*login : function(user) {
+				var payload = SerializerUtil.param(user);
+				var config = {
+					headers : {
+						'Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8'
+					}
+				};
+				var login = $http.post(rootPath + "/j_spring_security_check", payload, config);
+				login.success(cacheSession);
+				return login;
+			},*/
+			logout : function() {
+				var config = {
+					cache: false,
+					headers: {
+        				'Cache-Control': 'no-cache',
+        				'Pragma': 'no-cache'
+					},
+					params: {
+            			returnUrl: window.location.href
+            		}
+				};
+				var logout = $http.get(rootPath + "/logout", config);
+				logout.success(uncacheSession);
+				logout.success(function(data){
+					var pathName = document.location.pathname;
+					/*var str = pathName.replace('platform-b2c/','');
+					console.log(str);
+					console.log(document.location);*/
+					var index = pathName.substr(1).indexOf("/");// platform-b2c/logout/proxy
+					var result = pathName.substr(0,index);
+					var uri = pathName.substr(13,index+1000) + document.location.hash;
+					if (result == '/platform-b2c') {
+						var contextPath = ''
+						/*var contextPath = (function getContextPath() {
+							var pathName = document.location.pathname;
+							var index = pathName.substr(1).indexOf("/");
+							var result = pathName.substr(0,index+1);
+							return result;
+						})();*/
+						data.content = contextPath + uri;
+					}
+					if (data.content) {
+						if (data.content == window.location.href) {
+							window.location.reload();
+						} else {
+							window.location.href = data.content;
+						}
+					}
+				});
+				return logout;
+			},
+            redirectSignin: function() {
+            	// 获取跳转登录的url
+            	$http.get(rootPath + '/login/page', {
+            		params: {
+            			returnUrl: window.location.href
+            		}
+            	}).success(function(data) {
+                    if (data.content) {
+                    	window.location.href = data.content;
+                    } else {
+                        alert('系统错误');
+                    }
+                }).error(function() {
+                	alert('系统错误');
+                });
+            },
+            redirectRegister: function() {
+                // 获取跳转注册的url
+                $http.get(rootPath + '/register/page', {
+                    params: {
+                        returnUrl: window.location.href
+                    }
+                }).success(function(data) {
+                    if (data.content) {
+                        window.location.href = data.content;
+                    } else {
+                        alert('系统错误');
+                    }
+                }).error(function() {
+                    alert('系统错误');
+                });
+            },
+			isAuthed : function() {
+				return SessionService.get('authenticated');
+			},
+			getAuthentication : function() {
+				var config = {
+					cache: false,
+					headers: {
+        				'Cache-Control': 'no-cache',
+        				'Pragma': 'no-cache'
+					}
+				};
+				var request = $http.get(rootPath + '/user/authentication', config);
+				request.success(function(data){
+					if(data)
+						cacheSession();
+					else
+						uncacheSession();
+				});
+				request.error(uncacheSession);
+				return request;
+			},
+			reSignin : function(enUU) {
+				return $http.get(rootPath + '/user/authentication/' + enUU);
+			}
+		};
+	}]).factory('TableService', ['$parse', 'ngTableParams', function($parse, ngTableParams){
+		var scope;
+		return {
+			init: function(initConfig, dataConfig) {
+				var service = this, data = service.getData();
+				scope = initConfig.scope;
+				// no paging tableParams
+				scope.tableParams = new ngTableParams({
+					page : 1,
+					total : 1,
+					count : 1000
+				}, {
+					counts : [],
+					getData: function($defer, params) {
+		                $defer.resolve(data.slice((params.page() - 1) * params.count(), params.page() * params.count()));
+		            }
+				});
+				// watch $data, set to scope model
+				if(dataConfig) {
+					service.setGenerator(dataConfig.rownumGenerator);
+					var setModelValue = $parse(dataConfig.model).assign;
+					scope.$watch(data, function(){
+						setModelValue && setModelValue(scope, data);
+					});
+				}
+				//add item
+				scope.addItem = function(){
+					service.addItem(data);
+				};
+				scope.removeItem = function(item){
+					service.removeItem(data, item);
+				};
+				if(initConfig) {
+					// add default items
+					service.addItem(data, initConfig.defaultItemsSize);
+				}
+			},
+			setGenerator: function(gen) {
+				this.generator = gen;
+				this.rownum = 0;
+			},
+			getGenerator: function() {
+				return this.generator;
+			},
+			getRownum: function() {
+				if(this.generator) {
+					this.rownum++;
+				}
+				return this.rownum;
+			},
+			getData: function(){
+				return this.data || [];
+			},
+			refresh: function(){
+				if(scope.tableParams.data.length > 0)
+					scope.tableParams.reload();
+			},
+			addItem: function(data, size) {
+				size = size || 1;
+				var s = this, gen = s.getGenerator(), i = 0;
+				for (;i < size; i++ ) {
+					var d = {};
+					d[gen] = s.getRownum();
+					(size == 1) && ( d.$edit = true);
+					data.push(d);
+				}
+				this.refresh();
+			},
+			removeItem: function(data, item){
+				var key = item.$$hashKey;
+				for (var i = 0; i < data.length; i++) {
+					if (key === data[i].$$hashKey)
+						data.splice(i, 1);
+				}
+				this.refresh();
+			},
+			removeAll: function(data){
+				data = [];
+				this.refresh();
+			}
+		};
+	}]).filter('summary', function(){
+		var isNumber = function (n) {
+	        return !isNaN(parseFloat(n)) && isFinite(n);
+	    };
+		var getSum = function(data, attr) {
+			var sum = 0;
+			angular.forEach(data, function(d){
+				if(isNumber(d[attr]))
+					sum += Number(d[attr]);
+			});
+			return sum;
+		};
+		return function(data, summaryField) {
+			if(data && summaryField)
+				return getSum(data, summaryField);
+			return 0;
+		};
+	}).factory('Loading', function(){
+		var loading = angular.element('#loading');
+		return {
+			show: function(){
+				loading.addClass('in');
+			},
+			hide: function() {
+				loading.removeClass('in');
+			}
+		}
+	}).factory('ImgUrl', function(){
+		//获得不同尺寸的图片url
+		return {
+			handelByWidthHeigth: function( url, width_px, heigth_px ){
+				return url.substring(0, url.lastIndexOf('.')) + "_" + width_px + "x" + heigth_px + url.substr(url.lastIndexOf('.'));
+			}
+		}
+	}).factory('dynamicInput', function(){
+		/**
+		 * 将dynamicInput动态生成的东西处理为接口对应的数据格式
+		 * @return Arr[Property, Property, Property, ...]
+		 */
+		return {
+			resolveDynamicInput: function(properties){
+				var arrProperties = [];
+				function getClass(x){
+				    var str = Object.prototype.toString.call(x);
+				    return /^\[object (.*)\]$/.exec(str)[1];
+				}
+				var length = properties.length;
+				for( var i = 0; i < length; i++ ){
+					var objProperty = {};
+					objProperty.propertyId = properties[i].id;
+					objProperty.num = properties[i].num;
+					//根据值类型不一样选择不同处理方式
+					if( getClass(properties[i].value) === "Object" ){
+						//这里针对区间值要单独拼接
+						var arr = [];
+						if(properties[i].type == "text-text"){
+							arr = ["", ""];
+							for( var key in properties[i].value ){
+								if(key == "0"){
+									arr[0] = properties[i].value[0];
+								}
+								else if(key == "1"){
+									arr[1] = properties[i].value[1];
+								}
+							}
+							objProperty.stringValue = arr.join("-");
+						}
+						else{
+							for(var key in properties[i].value){
+								//过滤掉值为false的
+								if(properties[i].value[key] != false){
+									arr.push(properties[i].value[key]);
+								}
+							}
+							objProperty.stringValue = arr.join("\n");
+						}
+					}
+					else{
+						objProperty.stringValue = properties[i].value;
+					}
+					arrProperties.push(objProperty);
+				}
+				return arrProperties;
+			}
+		}
+	}).factory('ArrayUtil', function(){
+		//拼接数组
+		return {
+			buildArr: function(num){
+				var arr = [];
+				for(var i = 1; i <= num; i++){
+					arr.push(i);
+				}
+				return arr;
+			}
+		}
+	}).filter('strongStr', function() {
+		return function(input, keyword) {
+			if(angular.isUndefined(keyword) || keyword == "") {
+				return "<span>" + input + "</span>";
+			}
+			var index = angular.lowercase(input).indexOf(angular.lowercase(keyword));
+			if(index < 0) {
+				return "<span>" + input + "</span>";
+			}
+			var bold = input.slice(index + keyword.length, input.length);
+			var prefix = input.slice(0, keyword.length);
+			return "<span>" + prefix + "<strong>" + bold + "</strong></span>";
+		}
+	}).factory('SmoothScroll', function(){
+		var currentYPosition = function (pID) {
+			var parent = pID ? document.getElementById(pID) : 
+				(self || document.documentElement || document.body);
+			return parent.pageYOffset || parent.scrollTop || 0;
+		}
+
+		var elmYPosition = function(pID, eID) {
+			var elm = document.getElementById(eID), parent = pID ? document.getElementById(pID) : document.body;
+			var y = elm.offsetTop;
+			var node = elm;
+			while (node.offsetParent && node.offsetParent != parent) {
+				node = node.offsetParent;
+				y += node.offsetTop;
+			}
+			return y;
+		}
+		return {
+			scrollTo: function(pID, eID, offset) {
+				var startY = currentYPosition(pID);
+				var stopY = elmYPosition(pID, eID) - (offset || 0);
+				var distance = stopY > startY ? stopY - startY : startY - stopY;
+				if (distance < 100) {
+					scrollTo(0, stopY);
+					return;
+				}
+				var speed = Math.round(distance / 100);
+				if (speed >= 20)
+					speed = 20;
+				var step = Math.round(distance / 25);
+				var leapY = stopY > startY ? startY + step : startY - step;
+				var timer = 0;
+				var parent = pID ? "#" + pID + "" : "document";
+				if (stopY > startY) {
+					for (var i = startY; i < stopY; i += step) {
+						setTimeout("$(" + parent + ").scrollTop(" + leapY + ")", timer * speed);
+						leapY += step;
+						if (leapY > stopY)
+							leapY = stopY;
+						timer++;
+					}
+					return;
+				}
+				for (var i = startY; i > stopY; i -= step) {
+					setTimeout("$(" + parent + ").scrollTop(" + leapY + ")", timer * speed);
+					leapY -= step;
+					if (leapY < stopY)
+						leapY = stopY;
+					timer++;
+				}
+			} 
+		};
+	}).factory('NumberService', [function() {
+		return {
+				/*
+					js的除法运算
+					 */
+				div : function (arg1, arg2) {
+
+				var t1 = 0, t2 = 0, t3 = 0, r1, r2;
+
+				try { t1 = arg1.toString().split(".")[1].length } catch (e) { }
+
+				try { t2 = arg2.toString().split(".")[1].length } catch (e) { }
+
+				r1 = Number(arg1.toString().replace(".", ""))
+
+				r2 = Number(arg2.toString().replace(".", ""))
+
+				if (r2 == 0)
+					return 0;
+
+				var result = String(r1 / r2);
+
+				try { t3 = result.toString().split(".")[1].length } catch (e) { }
+
+				var index = t2 - t1 - t3;
+
+				if (index < 0) {
+					result = result.replace(".", "");
+
+					while (result.length <= Math.abs(index)) {
+						result = '0' + result;
+					}
+
+					var start = result.substring(0, result.length + index);
+					var end = result.substring(result.length + index, result.length);
+
+					result = start + '.' + end;
+
+					return Number(result);
+				}
+				else if (index > 0) {
+					result = result.replace(".", "");
+
+					while (result.length <= Math.abs(index)) {
+						result += '0';
+					}
+					return Number(result);
+				}
+				else return Number(result.replace(".", ""));
+
+			},
+			mul: function(arg1, arg2) {
+
+				var m = 0, s1 = arg1.toString(), s2 = arg2.toString();
+
+				try { m += s1.split(".")[1].length } catch (e) { }
+
+				try { m += s2.split(".")[1].length } catch (e) { }
+
+				return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m)
+			},
+			add : function(arg1, arg2) {
+
+				var r1, r2, m, c;
+
+				try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 }
+
+				try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 }
+
+				c = Math.abs(r1 - r2);
+				m = Math.pow(10, Math.max(r1, r2))
+				if (c > 0) {
+					var cm = Math.pow(10, c);
+					if (r1 > r2) {
+						arg1 = Number(arg1.toString().replace(".", ""));
+						arg2 = Number(arg2.toString().replace(".", "")) * cm;
+					}
+					else {
+						arg1 = Number(arg1.toString().replace(".", "")) * cm;
+						arg2 = Number(arg2.toString().replace(".", ""));
+					}
+				}
+				else {
+					arg1 = Number(arg1.toString().replace(".", ""));
+					arg2 = Number(arg2.toString().replace(".", ""));
+				}
+				return (arg1 + arg2) / m
+			},
+			sub : function (arg1, arg2) {
+				var r1,r2,m,n;
+				try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}
+				try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}
+				m=Math.pow(10,Math.max(r1,r2));
+				//last modify by deeka
+				//动态控制精度长度
+				n=(r1>=r2)?r1:r2;
+				return ((arg1*m-arg2*m)/m).toFixed(n);
+			},
+			//进一发 例如 0.00002 保留两位,使用进一发 0.01
+			//num  是传入的数字,scacle保留几位,
+			toCeil : function (num, scacle) {
+                //Math.ceil(num * Math.pow(10, scacle)) / Math.pow(10, scacle)
+                console.log(new Big(num));
+				return new Big(num).rnd(scacle, 3);
+			}
+		}
+	}]);
+});

+ 137 - 0
donate-console/src/main/webapp/resources/js/common/utils.js

@@ -0,0 +1,137 @@
+define(['angular'],
+function(angular) {
+	'use strict';
+    angular.module('common.utils', []).factory('SerializerUtil', function() {
+        return {
+        	/**
+        	 * 将元素值转换为序列化的字符串表示
+        	 */
+            param: function(obj) {
+                var query = '',
+                name, value, fullSubName, subName, subValue, innerObj, i, me = this;
+                for (name in obj) {
+                    value = obj[name];
+                    if (value instanceof Array) {
+                        for (i = 0; i < value.length; ++i) {
+                            subValue = value[i];
+                            fullSubName = name + '[' + i + ']';
+                            innerObj = {};
+                            innerObj[fullSubName] = subValue;
+                            query += me.param(innerObj) + '&';
+                        }
+                    } else if (value instanceof Object) {
+                        for (subName in value) {
+                            subValue = value[subName];
+                            fullSubName = name + '[' + subName + ']';
+                            innerObj = {};
+                            innerObj[fullSubName] = subValue;
+                            query += me.param(innerObj) + '&';
+                        }
+                    } else if (value !== undefined && value !== null) query += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&';
+                }
+                return query.length ? query.substr(0, query.length - 1) : query;
+            }
+        };
+    }).factory('TimerUtil', ['$timeout', function($timeout) {
+    	var on = true, task = null, scope = null, timeParam = null;
+        return {
+        	/**
+        	 * 简单计时器
+        	 */
+        	init: function(s, t) {
+        		scope = s;
+        		timeParam = t;
+        		scope[timeParam] = 60;
+				this.go();
+				return this;
+			},
+			go: function() {
+				var me = this;
+				task = $timeout(function(){
+					scope[timeParam]--;
+				}, 1000).then(function(){
+					if(on && scope[timeParam] > 0)
+						me.go();
+				});
+			},
+			cancel: function() {
+				on = false;
+				task && $timeout.cancel(task);
+			},
+			info: function() {
+				return scope[timeParam];
+			}
+        };
+	}])
+	/**
+	 * @author yangck
+	 */
+		.factory('DateUtil', function () {
+
+		Date.prototype.yyyyMmDd = function() {
+			var mm = this.getMonth() + 1; // getMonth() is zero-based
+			var dd = this.getDate();
+
+			return [this.getFullYear(), '-',
+				(mm>9 ? '' : '0') + mm, '-',
+				(dd>9 ? '' : '0') + dd
+			].join('');
+		};
+
+		// var date = new Date();
+		// date.yyyyMmDd();
+
+		var yyyyMmDd = function(date) {
+			var mm = date.getMonth() + 1; // getMonth() is zero-based
+			var dd = date.getDate();
+
+			return [date.getFullYear(), '-',
+				(mm>9 ? '' : '0') + mm, '-',
+				(dd>9 ? '' : '0') + dd
+			].join('');
+		};
+
+		return {
+			yyyyMmDd: yyyyMmDd
+		}
+	})
+		.filter('commonDate', ['$filter', function($filter) {// 实用日期过滤器
+		return function(input) {
+			console.log($filter('date')(new Date(), 'yyyy-MM-dd HH:m:ss'));
+			var date = new Date(), dateFilter = $filter('date');
+			var r = '';
+			if(dateFilter(date, 'yyyy') == dateFilter(input, 'yyyy')) {
+				if(dateFilter(date, 'MM') == dateFilter(input, 'MM')) {
+					if(dateFilter(date, 'dd') == dateFilter(input, 'dd')) {
+						r = dateFilter(input, '今天 HH:mm:ss');
+					} else {
+						r = dateFilter(input, 'MM月dd日');
+					}
+				} else {
+					r = dateFilter(input, 'MM月dd日');
+				}
+			} else {
+				r = dateFilter(input, 'yy年MM月dd日');
+			}
+			return r;
+		};
+	}]).filter('numberToFixed', ['$filter', function ($filter) { // 将数字转换为固定长度字符串
+            return function (input, decimals ) {
+                var num = parseFloat($filter('number')(input, decimals));
+                return num.toFixed(decimals);
+            }
+        }])
+		// 根据指定状态码获取状态历史记录里面的项
+		.filter('toState', function () {
+			return function (input, status) {
+				if(input) {
+					if(Object.prototype.toString.call(input) != '[object Array]')
+						console.error('被过滤数据不是数组');
+					for(var i = 0; i < input.length; i++) {
+						if(input[i].status == status)
+							return input[i];
+					}
+				}
+			}
+		});
+});

+ 331 - 0
donate-console/src/main/webapp/resources/js/index/app.js

@@ -0,0 +1,331 @@
+/**
+ * index
+ *
+ */
+define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'common/directives', 'common/services', 'angular-toaster', 'ngSanitize', 'services/Project'], function(angularAMD) {
+	'use strict';
+	var app = angular.module('myApp', [ 'ui.router', 'ui.bootstrap', 'ng.local', 'ngTable', 'common.directives', 'common.services', 'toaster', 'ProjectService']);
+	app.init = function() {
+		angularAMD.bootstrap(app);
+	};
+    app.config(['$httpProvider', function ($httpProvider) {
+        // http拦截
+        $httpProvider.interceptors.push('httpInterceptor');
+    }]);
+    app.factory('httpInterceptor', ['$window', '$q', '$injector', 'BaseService', function ($window, $q, $injector, BaseService) {
+        var httpInterceptor = {
+            'responseError': function (response) {
+                if (response.status == 401) {// UNAUTHORIZED
+                    window.location.href = response.data.loginUrl || 'index';
+                    return $q.reject(response);
+                }
+                return $q.reject(response);
+            }
+        }
+        return httpInterceptor;
+    }]);
+	app.config(['$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider) {
+		$urlRouterProvider.otherwise("/");
+		$stateProvider.state("project", {
+			url : '/',
+			title : '项目列表',
+			templateUrl : 'static/view/project/project_list.html',
+			controller : 'ProjectListCtrl'
+		});
+	}]);
+
+	app.controller('LeftCtrl', ['$scope', function($scope) {
+
+    }]);
+
+
+    app.controller('ProjectListCtrl', ['$scope', '$rootScope', 'toaster', 'ngTableParams', 'BaseService', 'Project', '$modal',
+        function ($scope, $rootScope, toaster, ngTableParams, BaseService, Project, $modal) {
+
+            var getProjectState = function (active) {
+                var fn = 'getAudited';
+                switch (active) {
+                    // 已审核
+                    case 'audited':
+                        fn = 'getEnd';
+                        break;
+                    // 未审核
+                    case 'unaudited':
+                        fn = 'getWaiting';
+                        break;
+                    // 未通过
+                    case 'disagreed':
+                        fn = 'getDisagreed';
+                        break;
+                }
+                return fn;
+            };
+
+            $scope.active = 'audited';
+            $scope.keyword = '';
+
+            /**
+             * 修改分类
+             * @param value
+             */
+            $scope.setState = function (value) {
+                if ($scope.active != value) {
+                    $scope.active = value;
+                    if ($scope.projectParams.page() == 1)
+                        $scope.projectParams.reload();
+                    else
+                        $scope.projectParams.page(1);
+                }
+            };
+
+            /**
+             * 修改领域
+             * @param value
+             */
+            $scope.setArea = function (value) {
+                if ($scope.selectedArea != value) {
+                    $scope.selectedArea = value;
+                    if ($scope.projectParams.page() == 1)
+                        $scope.projectParams.reload();
+                    else
+                        $scope.projectParams.page(1);
+                }
+            };
+
+            $scope.projectParams = new ngTableParams({
+                page: 1,
+                count: 5,
+                sorting: {
+                    'id': 'desc'
+                }
+            }, {
+                total: 0,
+                counts: [5, 10, 25, 50],
+                getData: function ($defer, params) {
+                    $scope.loading = true;
+                    var pageParams = params.url();
+                    var realActive = {};
+                    pageParams.searchFilter = { // 筛选条件
+                        keyword: $scope.keyword,
+                        area: $scope.selectedArea
+                    };
+                    Project[getProjectState($scope.active)].call(null, BaseService.parseParams(pageParams), function (page) {
+                        $scope.loading = false;
+                        if (page) {
+                            params.total(page.totalElement);
+                            $defer.resolve(page.content);
+                            // $scope.keywordXls = angular.copy($scope.keyword); // 保存当前取值的关键词  做导出时需要的字段
+                        }
+                    }, function (response) {
+                        $scope.loading = false;
+                        toaster.pop('error', '数据加载失败', response.data);
+                    });
+                }
+            });
+
+            $scope.onSearch = function () {
+                if ($scope.projectParams.page() == 1)
+                    $scope.projectParams.reload();
+                else
+                    $scope.projectParams.page(1);
+            };
+            // $scope.onSearch = function (keyword) {
+            //     if (!angular.isUndefined(keyword)) {
+            //         $scope.keyword = keyword;
+            //         if ($scope.projectParams.page() == 1)
+            //             $scope.projectParams.reload();
+            //         else
+            //             $scope.projectParams.page(1);
+            //     }
+            // };
+
+            // 弹出详情页模态框
+            $scope.showDetail = function (id) {
+                var modalInstance = $modal.open({
+                    templateUrl: 'static/view/project/project_detail.html',
+                    controller: 'ProjectDetailCtrl',
+                    size: 'lg',
+                    resolve: {
+                        id: function () {
+                            return id;
+                        }
+                    }
+                });
+
+                modalInstance.result.then(function(data){
+                    if (data.success) {
+                        toaster.pop('success', '操作成功');
+                    }
+                }, function(){
+
+                });
+
+                //  else if ($scope.active === 'unaudited') {
+                //     var modalInstance = $modal.open({
+                //         templateUrl: 'static/view/project/project_detail_unaudited.html',
+                //         controller: 'ProjectDetailCtrl',
+                //         size: 'lg',
+                //         resolve: {
+                //             id: function() {
+                //                 return id;
+                //             }
+                //         }
+                //     });
+                //
+                //     modalInstance.result.then(function(data){
+                //
+                //     }, function(){
+                //
+                //     });
+                // } else if ($scope.active === 'disagreed') {
+                //     var modalInstance = $modal.open({
+                //         templateUrl: 'static/view/project/project_detail_disagreed.html',
+                //         controller: 'ProjectDetailCtrl',
+                //         size: 'lg',
+                //         resolve: {
+                //             id: function() {
+                //                 return id;
+                //             }
+                //         }
+                //     });
+                //
+                //     modalInstance.result.then(function(data){
+                //         toaster.pop('success', '重新申请提交成功');
+                //     }, function(){
+                //
+                //     });
+                // }
+            };
+
+
+        }]);
+
+    /**
+     * 项目详情框
+     */
+    app.controller('ProjectDetailCtrl', ['$scope', 'Project', 'toaster', '$modalInstance', 'BaseService', 'id', '$modal',
+        function($scope, Project, toaster, $modalInstance, BaseService, id, $modal) {
+
+
+        var loadData = function() {
+            // 获取项目详情
+            Project.getDetailById({id :id}, {}, function(data) {
+                $scope.project = data;
+            }, function() {
+                toaster.pop('error', '详情加载失败');
+            });
+        };
+
+            // 获取当前项目所有进度
+            $scope.getSchedules = function() {
+                Project.getSchedules({id : id}, {}, function(data) {
+                    $scope.schedules = data;
+                }, function() {
+                    toaster.pop('error', '项目进度加载失败');
+                });
+            };
+
+            // 获取当前项目捐款明细
+            $scope.getRecords = function() {
+                Project.getRecords({id:id}, {}, function(data) {
+                    $scope.projectRecords = data;
+                }, function() {
+                    toaster.pop('error', '捐款明细加载失败');
+                });
+            };
+
+            // 获取当前项目财务信息
+            $scope.getFinance = function() {
+                Project.getFinance({id:id}, {}, function(data) {
+                    $scope.projectFinance = data.projectFinance;
+                    $scope.totalCost = data.totalCost;
+                    $scope.executeCost = data.executeCost;
+                    $scope.projectCost = data.projectCost;
+                }, function() {
+                    toaster.pop('error','财务明细加载失败');
+                });
+            };
+        loadData();
+
+        $scope.cancel= function() {
+            $modalInstance.dismiss();
+        };
+
+        // true通过 false驳回
+        $scope.decide = function(type) {
+            var modalInstance = $modal.open({
+                animation: true,
+                templateUrl: 'static/view/project/audit_confirm.html',
+                controller: 'auditConfirmCtrl',
+                resolve: {
+                    project : function() {
+                        return $scope.project;
+                    },
+                    type : function() {
+                        return type;
+                    }
+                }
+            });
+
+            modalInstance.result.then(function(data){
+                if (data.success) {
+                    toaster.pop('success','操作成功');
+                }
+                if (data.error) {
+                    toaster.pop('error','操作失败');
+                }
+                loadData();
+            }, function(){
+
+            });
+        };
+
+        // 重新申请
+        $scope.reapply = function() {
+            Project.reapply({id:id}, {}, function(data) {
+                if (data.success) {
+                    toaster.pop('success', '重新申请成功');
+                }
+                if (data.error) {
+                    toaster.pop('error', '申请失败,请联系管理员');
+                }
+                loadData();
+            }, function(response) {
+                toaster("error", "出现错误");
+            });
+        }
+
+
+    }]);
+
+    /**
+     * 审核确认框
+     */
+    app.controller('AuditConfirmCtrl', ['$scope', 'project', 'type', '$modalInstance', 'toaster', 'Project',
+        function($scope, project, type, $modalInstance, toaster, Project) {
+
+        $scope.ok = function (type) {
+            if (type) {
+                Project.agree({id: project.id}, {}, function(data) {
+                    $modalInstance.close(data);
+                }, function() {
+
+                });
+            } else {
+                Project.disagree({id: project.id, refuse: project.reason}, {}, function(data) {
+                    $modalInstance.close(data);
+                }, function() {
+
+                });
+            }
+        };
+
+        $scope.cancel = function() {
+            $modalInstance.dismiss();
+        };
+
+    }]);
+
+
+	return app;
+});

+ 74 - 0
donate-console/src/main/webapp/resources/js/index/main.js

@@ -0,0 +1,74 @@
+require.config({
+	baseUrl : 'static',
+	paths : {
+		'app' : 'js/index',
+		'angular' : 'lib/angular/angular.min',
+		'angularAMD' : 'lib/angular/angularAMD',
+		'angular-toaster': 'lib/angular/angular-toaster.min',
+		'angular-sanitize' : 'lib/angular/angular-sanitize.min',
+		'bootstrap' : 'lib/bootstrap/js/bootstrap.min',
+		'common' : 'js/common',
+        'services' : 'js/index/services',
+		'jquery' : 'lib/jquery/jquery.min',
+		'jquery-uploadify' : 'lib/jquery/jquery.uploadify.min',
+		'ngSanitize' : 'lib/angular/angular-sanitize.min',
+		'jquery-summernote' : 'lib/jquery/summernote.min',
+		'jquery-summernote-lang' : 'lib/jquery/summernote-zh-CN',
+		'ngResource' : 'lib/angular/angular-resource.min',
+		'ngLocal' : 'lib/angular/angular-i18n',
+		'ngAnimate': 'lib/angular/angular-animate.min',
+		'ngTable' : 'lib/angular/ng-table.min',
+		'ngDraggable' : 'lib/angular/angular-draggable-min',
+		'file-upload' : 'lib/angular/angular-file-upload.min',
+		'file-upload-shim' : 'lib/angular/angular-file-upload-shim.min',
+		'ui.router' : 'lib/angular/angular-ui-router.min',
+		'ui-bootstrap' : 'lib/angular/ui-bootstrap-tpls.min',
+		'jquery-summernote' : 'lib/jquery/summernote.min',
+		'jquery-summernote-lang' : 'lib/jquery/summernote-zh-CN',
+		'ui-jquery': 'js/common/ui-jquery',
+		'angular-sanitize' : 'lib/angular/angular-sanitize.min'
+	},
+	shim : {
+		'angular' : {
+			'exports' : 'angular',
+			'deps' : [ 'jquery' ]
+		},
+		'ngLocal' : {
+			'exports' : 'ngLocal',
+			'deps' : [ 'angular' ]
+		},
+		'angularAMD' : {
+			'exports' : 'angularAMD',
+			'deps' : [ 'angular' ]
+		},
+		'ngSanitize' : {
+			'exports' : 'ngSanitize',
+			'deps' : [ 'angular' ]
+		},
+		'ui.router' : ['angular'],
+		'ui-bootstrap' : [ 'angular' ],
+		'bootstrap' : ['jquery'],
+		'jquery-summernote' : ['jquery', 'bootstrap'],
+		'jquery-summernote-lang' : ['jquery-summernote'],
+		'ui-form' : ['angular', 'jquery-summernote', 'jquery-summernote-lang'],
+		'jquery-uploadify' : [ 'jquery' ],
+		'ui-jquery': ['jquery'],
+		'ngAnimate': ['angular'],
+		'angular-sanitize' : ['angular'],
+		'angular-toaster': ['angular', 'ngAnimate'],
+		'ngDraggable': [ 'jquery', 'angular' ],
+		'angular-sanitize': ['angular'],
+		'ngResource': ['angular'],
+		'jquery-summernote-lang' : ['jquery-summernote'],
+		'ui-form' : ['angular', 'jquery-summernote', 'jquery-summernote-lang'],
+		'file-upload': ['angular', 'file-upload-shim'],
+		'dynamicInput': ['angular'],
+		'ngTable' : {
+			'exports' : 'ngTable',
+			'deps' : [ 'angular' ]
+		}
+	}
+});
+require([ 'app/app'], function(app) {
+	app.init();
+});

+ 69 - 0
donate-console/src/main/webapp/resources/js/index/services/Project.js

@@ -0,0 +1,69 @@
+define ([ 'ngResource' ], function() {
+    angular.module('ProjectService', ['ngResource']).factory('Project', ['$resource', function ($resource) {
+        return $resource ('project', {}, {
+            getAudited: {
+                url: '',
+                method: 'GET',
+                params : {
+                    _state: 'done'
+                }
+            },
+            getUnaudited: {
+                url: '',
+                method: 'GET',
+                params : {
+                    _state: 'todo'
+                }
+            },
+            getDisagreed: {
+                url: '',
+                method: 'GET',
+                params : {
+                    _state: 'end'
+                }
+            },
+            // 获取项目详情
+            getDetailById: {
+                url: 'project/detail/:id',
+                method: 'GET',
+                params: {
+                    id: 'id'
+                }
+            },
+            save: {
+                url: 'project/save',
+                method: 'POST'
+            },
+            // 获取所有项目进度
+            getSchedules: {
+                url:'projectEvolve/getSchedules',
+                method: 'GET'
+            },
+            // 获取项目所有捐款明细
+            getRecords: {
+                url:'projectrecode/getRecords',
+                method:'GET'
+            },
+            // 获取财务支出
+            getFinance: {
+                url:'projectFinance/getFinance',
+                method: 'GET'
+            },
+            // 重新申请
+            reapply: {
+                url: 'project/reapply',
+                method: 'POST'
+            },
+            // 审核同意
+            agree: {
+                url: 'project/approve',
+                method: 'POST'
+            },
+            // 审核不同意
+            disagree: {
+                url: 'project/unapprove',
+                method: 'POST'
+            }
+        });
+    }]);
+});

+ 1 - 0
donate-console/src/main/webapp/resources/view/activity/activity_list.html

@@ -0,0 +1 @@
+<!-- 活动列表 -->

+ 10 - 0
donate-console/src/main/webapp/resources/view/activity/activity_start.html

@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+</head>
+<body>
+
+</body>
+</html>

+ 10 - 0
donate-console/src/main/webapp/resources/view/front/banner.html

@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+</head>
+<body>
+
+</body>
+</html>

+ 10 - 0
donate-console/src/main/webapp/resources/view/front/bg-content.html

@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+</head>
+<body>
+
+</body>
+</html>

+ 10 - 0
donate-console/src/main/webapp/resources/view/message/message_edit.html

@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+</head>
+<body>
+
+</body>
+</html>

+ 10 - 0
donate-console/src/main/webapp/resources/view/message/message_list.html

@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+</head>
+<body>
+
+</body>
+</html>

+ 79 - 0
donate-console/src/main/webapp/resources/view/project/audit_confirm.html

@@ -0,0 +1,79 @@
+
+<!--项目信息通过确认弹出框-->
+<div class="through modal" role='dialog' id='through'>
+    <div class="modal-dialog">
+        <div class="modal-content">
+            <div class="header modal-header clearfix">
+                <p class="fl">项目通过确认</p>
+                <div class="close fr" data-dismiss="modal">&times;</div>
+            </div>
+            <div class="body modal-body clearfix">
+                <div class="through-item fl">
+                    <span class="fl">项目名称</span>
+                    <span class="fl name">关注DMD罕见病</span>
+                </div>
+                <div class="through-item fl">
+                    <span class="fl">筹款目标</span>
+                    <span class="fl">68000元</span>
+                </div>
+                <div class="through-item fl">
+                    <span class="fl">领域分类</span>
+                    <span class="fl">疾病救助</span>
+                </div>
+                <div class="through-item fl">
+                    <span class="fl">发起机构</span>
+                    <span class="fl long">深圳市壹基金公益基金会</span>
+                </div>
+                <div class="through-item fl">
+                    <span class="fl">筹备时间</span>
+                    <span class="fl long">2017-09-12至2017-12-12</span>
+                </div>
+            </div>
+            <div class="footer modal-footer text-right">
+                <a href="">确认</a><a href="">取消</a>
+            </div>
+        </div>
+    </div>
+</div>
+<!--项目申请驳回弹出框-->
+<div class="through reject modal" role='dialog' id='reject'>
+    <div class="modal-dialog">
+        <div class="modal-content">
+            <div class="header modal-header clearfix">
+                <p class="fl">项目申请驳回</p>
+                <div class="close fr" data-dismiss="modal">&times;</div>
+            </div>
+            <div class="body modal-body clearfix">
+                <div class="through-item fl">
+                    <span class="fl">项目名称</span>
+                    <span class="fl name">关注DMD罕见病</span>
+                </div>
+                <div class="through-item fl">
+                    <span class="fl">筹款目标</span>
+                    <span class="fl">68000元</span>
+                </div>
+                <div class="through-item fl">
+                    <span class="fl">领域分类</span>
+                    <span class="fl">疾病救助</span>
+                </div>
+                <div class="through-item fl">
+                    <span class="fl">发起机构</span>
+                    <span class="fl long">深圳市壹基金公益基金会</span>
+                </div>
+                <div class="through-item fl">
+                    <span class="fl">筹备时间</span>
+                    <span class="fl long">2017-09-12 至 2017-12-12</span>
+                </div>
+                <div class="reason clearfix">
+                    <div class="reason-header">
+                        <p>项目申请驳回</p>
+                    </div>
+                    <textarea name="" id="" cols="30" rows="10" placeholder="请输入驳回理由...(列举项目未通过原因)"></textarea>
+                </div>
+            </div>
+            <div class="footer modal-footer text-right">
+                <a href="">确认</a><a href="">取消</a>
+            </div>
+        </div>
+    </div>
+</div>

+ 418 - 0
donate-console/src/main/webapp/resources/view/project/project_detail.html

@@ -0,0 +1,418 @@
+<!--详细内容部分-->
+<aside class="content-right">
+    <!--<div class="container">-->
+    <div class="right-header clearfix">
+        <div class="fl"><span ng-bind="project.name"></span>
+            <a href="" ng-if="project.status== 1">查看网页</a>
+        </div>
+        <div class="fr close" ng-click="cancel()">&times;</div>
+    </div>
+    <!--驳回理由-->
+    <div class="reject-reason" ng-if="project.status== 2">
+        <h5>驳回理由</h5>
+        <!--<p>1、PC端项目主图不够清晰,请按要求重新上传高清图片</p>
+        <p>2、项目介绍不够详细,缺少"项目预算"等内容</p>
+        <p>3、项目申请分类与项目实际内容不符</p>-->
+        <p>
+            {{project.refuse}}
+        </p>
+    </div>
+    <div class="right-nav">
+        <span class="active">详细信息</span>
+        <span>图片信息</span>
+        <span>机构信息</span>
+        <!-- 修改时先不隐藏 -->
+        <span>项目进度</span>
+        <span>捐款明细</span>
+        <span>财务披露</span></div>
+        <!--<span ng-if="project.status== 1">项目进度</span>-->
+        <!--<span ng-if="project.status== 1">捐款明细</span>-->
+        <!--<span ng-if="project.status== 1">财务披露</span></div>-->
+    <!--详细信息-->
+    <div class="right-list show">
+        <div class="list-message">
+            <div class="list-header">
+                <span>基本信息</span>
+            </div>
+            <div class="list-body clearfix">
+                <div class="msg-list fl">
+                    <span class="fl">捐助领域</span>
+                    <span class="fl" ng-bind="project.area"></span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">具体分类</span>
+                    <span class="fl" ng-bind="project.classify"></span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">项目地点</span>
+                    <span class="fl">{{project.province}}省 {{project.city}}市</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">受助群体</span>
+                    <span class="fl" ng-bind="project.population"></span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">筹款目标</span>
+                    <span class="fl">{{project.target | number}}元</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">已筹善款</span>
+                    <span class="fl count">{{project.totalAmount | number}}元</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">参与人数</span>
+                    <span class="fl count">{{project.joinAmount}}人</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">筹备时间</span>
+                    <span class="fl">{{project.startTime | date:'yyyy-MM-dd'}}至{{project.endTime | date:'yyyy-MM-dd'}}</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">发起缘由</span>
+                    <span class="fl" ng-bind="project.reason"></span>
+                </div>
+            </div>
+        </div>
+        <div class="list-message">
+            <div class="list-header">
+                <span>项目介绍</span>
+            </div>
+            <div class="list-body clearfix">
+                <div class="msg-list fl">
+                    <span class="fl">项目介绍</span>
+                    <div class="project-intro fl">
+                        <div class="project-txt fl">
+                            <div class="project-intro">
+                                <p>{{project.introduction}}</p>
+                                <!--<img src="static/images/active05.png" alt=""/>-->
+                            </div>
+                            <!--<div class="projectIntro">-->
+                                <!--<h3>资助人群</h3>-->
+                                <!--<p>西北、西南贫困山区的小学初中、高中(包括职业教育)大学生</p>-->
+                            <!--</div>-->
+                            <div class="projectIntro">
+                                <h3>执行计划</h3>
+                                <!--<p>1、基层团组织通过学校在学校内公布申请条件,学生以及其监护人提出求助申请学校对申请学生进行家访,核实家庭经济状况后报县级团委审核,县级团委上报市级团委汇总;</p>-->
+                                <!--<p>2、确认市级团委汇总地区申请资料后报市青基会;</p>-->
+                                <!--<p>3、市青基会终审申请,制作项目档案,并报理事会审议;审议通过后向申请人进行资助,并做审计和公示。</p>-->
+                                <p>{{project.executionPlan}}</p>
+                            </div>
+                            <div class="projectIntro">
+                                <h3>执行机构</h3>
+                                <p>{{project.orgName}}</p>
+                                <p>项目联系人:{{project.personName}}</p>
+                                <p>联系电话:{{project.personTel}}</p>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+    <div class="list-footer" ng-if="project.status == 0"><a href="" data-target="#through" data-toggle="modal">通过</a><a href="" data-target="#reject" data-toggle="modal">驳回</a></div>
+    <div class="list-footer" ng-if="project.status == 2"><a href="" class="again">重新申请</a></div>
+    <!--图片信息-->
+    <div class="right-list">
+        <div class="list-message">
+            <div class="list-body clearfix">
+                <div class="msg-list fl">
+                    <span class="fl">PC端主图</span>
+                    <div class="fl pcMainImg">
+                        <img src="{{project.pcImg}}" alt="PC端主图">
+                    </div>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">手机端主图</span>
+                    <div class="fl mbMainImg">
+                        <img src="{{project.mobileImg}}" alt="手机端主图">
+                    </div>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">手机列表图</span>
+                    <div class="fl mbListImg">
+                        <img src="{{project.listImg}}" alt="手机列表图">
+                    </div>
+                </div>
+            </div>
+        </div>
+        <!--<div class="list-message">
+            <div class="list-header">
+                <span>主要联系人</span>
+            </div>
+            <div class="list-body clearfix">
+                <div class="msg-list fl">
+                    <span class="fl">负责人姓名</span>
+                    <span class="fl" ng-bind=""></span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">身份证号</span>
+                    <span class="fl"></span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">办公号码</span>
+                    <span class="fl">0755 1841564</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">个人手机</span>
+                    <span class="fl">15512340000</span>
+                </div>
+            </div>
+        </div>-->
+    </div>
+    <!--机构信息-->
+    <div class="right-list">
+        <div class="list-message">
+            <div class="list-header">
+                <span>基本信息</span>
+            </div>
+            <div class="list-body clearfix">
+                <div class="msg-list">
+                    <span class="fl imgUp">机构LOGO</span>
+                    <div class="imgUpload fl">
+                        <img src="{{project.organization.logo}}" alt="机构LOGO">
+                    </div>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">机构名称</span>
+                    <span class="fl" ng-bind="project.organization.name"></span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">所在地</span>
+                    <span class="fl">{{project.organization.province}}省 {{project.organization.city}}市</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">成立日期</span>
+                    <span class="fl" ng-bind="project.organization.createTime | date :'yyyy-MM-dd'"></span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">联系地址</span>
+                    <span class="fl" ng-bind="project.organization.address"></span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">联系电话</span>
+                    <span class="fl" ng-bind="project.organization.telphone"></span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">官方网站</span>
+                    <span class="fl" ng-bind="project.organization.website"></span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">机构性质</span>
+                    <span class="fl" ng-bind="project.organization.regType"></span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">机构简介</span>
+                    <span class="fl info" ng-bind="project.organization.summary"></span>
+                </div>
+            </div>
+        </div>
+        <div class="list-message">
+            <div class="list-header">
+                <span>发起人信息</span>
+            </div>
+            <div class="list-body clearfix">
+                <div class="msg-list fl">
+                    <span class="fl">姓名</span>
+                    <span class="fl" ng-bind="project.personName"></span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">工作单位</span>
+                    <span class="fl" ng-bind="project.workunit"></span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">个人简介</span>
+                    <span class="fl info" ng-bind="project.summary"></span>
+                </div>
+                <div class="msg-list clearfix">
+                    <span class="fl imgUp">个人图像</span>
+                    <div class="imgUpload fl">
+                        <img src="{{project.logo}}" alt="个人图像">
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+    <!--项目进度-->
+    <div class="right-list">
+        <div class="list-message">
+            <p class="first-txt">
+            7月29日,上午辗转几处洽谈,寻找购置商家,由于当初预算课桌椅和餐桌椅报价太低,经反复思索与寻求朋友帮忙,终于找到本地
+            一个爱心老板愿意援手,无偿支持。
+            </p>
+            <p>
+            河南省信阳市平桥区五里镇柿元小学“换个课桌黑板好读书”项目,实际筹款总额:4455.7 元,“一校一梦想”基金配捐:10381
+            元,实际拨付善款:14830元。剩余6.7元用于“一校一梦想”其他项目。
+            </p>
+            <div class="img">
+                <img src="static/images/active04.png" alt=""/>
+            </div>
+            <div class="time"><span>2017-11-8 15:42:54</span><a>删除</a></div>
+        </div>
+        <div class="list-message" ng-repeat="schedule in schedules | orderBy : 'date'">
+            <p class="first-txt">
+                {{schedule.discription}}
+            </p>
+            <div class="time"><span ng-bind="schedule.submitTime | date :'yyyy-MM-dd HH:mm:ss'"></span><a ng-click="deleteSchedule(schedule.id)">删除</a></div>
+        </div>
+    </div>
+    <!--捐款明细-->
+    <div class="right-list">
+        <div class="list-message">
+            <div class="clearfix">
+                <div class="fl choose">
+                    <select name="" id="">
+                        <option value="">全部时段</option>
+                    </select>
+                    <select name="" id="">
+                        <option value="">全部方式</option>
+                    </select>
+                </div>
+                <div class="fr search">
+                    <input type="text" ng-model="keyword" ng-search="onSearch(keyword)" ng-init="keyword = ''" placeholder="请输入关键词"/>
+                    <button ng-click="onSearch(keyword)">搜索</button>
+                </div>
+            </div>
+        </div>
+        <table>
+            <thead>
+            <tr>
+                <th width="50"></th>
+                <th width="90">捐款人</th>
+                <th width="110">捐款金额(元)</th>
+                <th width="90">捐款时间</th>
+                <th width="90">捐款方式</th>
+                <th width="210"></th>
+            </tr>
+            </thead>
+            <tbody>
+            <tr>
+                <td></td>
+                <td>张学友</td>
+                <td class="money">1.00</td>
+                <td>2017-08-20 14:23:11</td>
+                <td>微信支付</td>
+                <td></td>
+            </tr>
+            <tr>
+                <td></td>
+                <td>张学友</td>
+                <td class="money">1.00</td>
+                <td>2017-08-20 14:23:11</td>
+                <td>微信支付</td>
+                <td></td>
+            </tr>
+            <tr>
+                <td></td>
+                <td>周杰伦</td>
+                <td class="money">10.00</td>
+                <td>2017-08-20 14:23:11</td>
+                <td>网银转账</td>
+                <td></td>
+            </tr>
+            </tbody>
+            <tbody ng-repeat="record in projectRecords">
+            <tr>
+                <td></td>
+                <td>{{record.user.userName}}</td>
+                <td class="money">{{record.amount | number}}</td>
+                <td>{{record.time | date: 'yyyy-MM-dd'}}</td>
+                <td>{{record.way}}</td>
+                <td></td>
+            </tr>
+            </tbody>
+        </table>
+    </div>
+    <!--财务披露-->
+    <div class="right-list">
+        <div class="list-message">
+            <div class="list-header">
+                <span>财务信息</span>
+            </div>
+            <div class="list-body clearfix">
+                <div class="msg-list fl">
+                    <span class="fl">项目总募款</span>
+                    <span class="fl info mCount" ng-bind="project.totalAmount"></span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">善款总支出</span>
+                    <span class="fl">{{totalCost | number:2}}元</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">执行进度</span>
+                    <span class="fl">{{ * 100 | number:2}}%</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">执行成本</span>
+                    <span class="fl">{{executeCost | number:2}}({{ * 100 | number:2}}%)</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">项目支出</span>
+                    <span class="fl">{{projectCost | number:2}}({{ * 100 | number:2}}%)</span>
+                </div>
+            </div>
+        </div>
+        <div class="list-message">
+            <div class="list-header">
+                <span>支出明细</span>
+            </div>
+            <div class="list-body clearfix">
+                <div class="msg-list">
+                    <span class="fl"></span>
+                    <div class="spending-detail fl">
+                        <span class="detail">项目支出</span>
+                        <div><b>3758.00元</b><span>购买XXX*35,购买学生节日补贴小礼品(包括粽子50个,水果10kg,大米5kg)</span></div>
+                        <div><b>4200.00元</b><span>购买学生来回车票70张</span></div>
+                        <div class="thumbnail-img clearfix">
+                            <div class="thumb fl">
+                                发票略缩图
+                                <input type="file">
+                            </div>
+                            <div class="thumb fl">
+                                发票略缩图
+                                <input type="file">
+                            </div>
+                        </div>
+                    </div>
+                </div>
+                <div class="msg-list">
+                    <span class="fl">2017-09-16</span>
+                    <div class="spending-detail fl">
+                        <span class="detail">执行成本</span>
+                        <div><b>1058.00元</b><span>执行人员车票20人*50元,中午用餐费428元,机构管理费48元</span></div>
+                        <div class="thumbnail-img clearfix">
+                            <div class="thumb fl">
+                                发票略缩图
+                                <input type="file">
+                            </div>
+                            <div class="thumb fl">
+                                发票略缩图
+                                <input type="file">
+                            </div>
+                        </div>
+                    </div>
+                </div>
+                <div class="msg-list" ng-repeat="finance in projectFinance">
+                    <span class="fl" ng-bind="finace.submitTime | date :'yyyy-MM-dd'"></span>
+                    <div class="spending-detail fl">
+                        <span class="detail">项目支出</span>
+                        <div><b>{{finance.amount}}元</b><span ng-bind="finance.description"></span></div>
+                        <div class="thumbnail-img clearfix">
+                            <div class="thumb fl">
+                                发票略缩图
+                                <img src="{{finance.path}}" alt="发票缩略图">
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+    <!--</div>-->
+</aside>
+<script>
+    $('.right-nav').on('click', 'span', function () {
+        var index = $(this).index();
+        $(this).addClass('active').siblings().removeClass('active');
+        $('.right-list').eq(index).addClass('show').siblings().removeClass('show');
+    });
+</script>

+ 230 - 0
donate-console/src/main/webapp/resources/view/project/project_detail_disagreed.html

@@ -0,0 +1,230 @@
+<!--未通过右侧内容部分-->
+<aside class="content-right">
+    <!--<div class="container">-->
+    <div class="right-header clearfix">
+        <div class="fl"><span>让寒门学子多回趟家</span></div>
+        <div class="fr close">&times;</div>
+    </div>
+    <!--驳回理由-->
+    <div class="reject-reason">
+        <h5>驳回理由</h5>
+        <p>1、PC端项目主图不够清晰,请按要求重新上传高清图片</p>
+        <p>2、项目介绍不够详细,缺少"项目预算"等内容</p>
+        <p>3、项目申请分类与项目实际内容不符</p>
+    </div>
+    <div class="right-nav" style="padding-left: 140px;">
+        <span class="active">详细信息</span><span>图片信息</span><span>机构信息</span>
+    </div>
+    <!--详细信息-->
+    <div class="right-list show">
+        <div class="detail-content">
+            <div class="list-message">
+                <div class="list-header">
+                    <span>基本信息</span>
+                </div>
+                <div class="list-body clearfix">
+                    <div class="msg-list fl">
+                        <span class="fl">捐助领域</span>
+                        <span class="fl">疾病救助</span>
+                    </div>
+                    <div class="msg-list fl">
+                        <span class="fl">具体分类</span>
+                        <span class="fl">贫困助学</span>
+                    </div>
+                    <div class="msg-list fl">
+                        <span class="fl">项目地点</span>
+                        <span class="fl">广东省 云浮市</span>
+                    </div>
+                    <div class="msg-list fl">
+                        <span class="fl">受助群体</span>
+                        <span class="fl">山区孩子</span>
+                    </div>
+                    <div class="msg-list fl">
+                        <span class="fl">筹款目标</span>
+                        <span class="fl">68000元</span>
+                    </div>
+                    <div class="msg-list fl">
+                        <span class="fl">已筹善款</span>
+                        <span class="fl count">68483元</span>
+                    </div>
+                    <div class="msg-list fl">
+                        <span class="fl">参与人数</span>
+                        <span class="fl count">1121人</span>
+                    </div>
+                    <div class="msg-list fl">
+                        <span class="fl">筹备时间</span>
+                        <span class="fl">2017-09-12至2017-12-12</span>
+                    </div>
+                    <div class="msg-list fl">
+                        <span class="fl">发起缘由</span>
+                        <span class="fl"></span>
+                    </div>
+                </div>
+            </div>
+            <div class="list-message">
+                <div class="list-header">
+                    <span>项目介绍</span>
+                </div>
+                <div class="list-body clearfix">
+                    <div class="msg-list fl">
+                        <span class="fl">项目介绍</span>
+                        <div class="project-intro fl">
+                            <div class="project-txt fl">
+                                <div class="project-intro">
+                                    <p>晚上上自修课,语文老师坐镇。同学们安静得做作业。忽然,老师咳嗽了一声,同学们惊异地抬起头,随即又低下了头。紧接着不知从哪又来了一声咳嗽声——是郭宵。老师瞅了他一眼,随即又若无其事的低下头,道:“有人是傻子。”“郭宵是也。”蔡元杰随即答道。“有人是疯子。”“蔡元杰是也。”全班同学超有默契的答道。顿时,欢乐一片。</p>
+                                    <img src="static/images/active05.png" alt=""/>
+                                </div>
+                                <div class="projectIntro">
+                                    <h3>资助人群</h3>
+                                    <p>西北、西南贫困山区的小学初中、高中(包括职业教育)大学生</p>
+                                </div>
+                                <div class="projectIntro">
+                                    <h3>执行计划</h3>
+                                    <p>1、基层团组织通过学校在学校内公布申请条件,学生以及其监护人提出求助申请学校对申请学生进行家访,核实家庭经济状况后报县级团委审核,县级团委上报市级团委汇总;</p>
+                                    <p>2、确认市级团委汇总地区申请资料后报市青基会;</p>
+                                    <p>3、市青基会终审申请,制作项目档案,并报理事会审议;审议通过后向申请人进行资助,并做审计和公示。</p>
+                                </div>
+                                <div class="projectIntro">
+                                    <h3>执行机构</h3>
+                                    <p>吉林省青少年发展基金会</p>
+                                    <p>项目联系人:李四</p>
+                                    <p>联系电话:138000000</p>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <div class="list-footer"><a href="" class="again">重新申请</a></div>
+    </div>
+    <!--图片信息-->
+    <div class="right-list">
+        <div class="list-message">
+            <div class="list-body clearfix">
+                <div class="msg-list fl">
+                    <span class="fl">PC端主图</span>
+                    <div class="fl pcMainImg">
+                        <input type="file">
+                    </div>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">手机端主图</span>
+                    <div class="fl mbMainImg">
+                        <input type="file">
+                    </div>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">手机列表图</span>
+                    <div class="fl mbListImg">
+                        <input type="file">
+                    </div>
+                </div>
+            </div>
+        </div>
+        <div class="list-message">
+            <div class="list-header">
+                <span>主要联系人</span>
+            </div>
+            <div class="list-body clearfix">
+                <div class="msg-list fl">
+                    <span class="fl">负责人姓名</span>
+                    <span class="fl">钟勇斌</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">身份证号</span>
+                    <span class="fl">456194689162198465</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">办公号码</span>
+                    <span class="fl">0755 1841564</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">个人手机</span>
+                    <span class="fl">15512340000</span>
+                </div>
+            </div>
+        </div>
+    </div>
+    <!--机构信息-->
+    <div class="right-list">
+        <div class="list-message">
+            <div class="list-header">
+                <span>基本信息</span>
+            </div>
+            <div class="list-body clearfix">
+                <div class="msg-list">
+                    <span class="fl imgUp">机构LOGO</span>
+                    <div class="imgUpload fl">
+                        <input type="file">
+                    </div>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">机构名称</span>
+                    <span class="fl">深圳壹基金公益基金会</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">所在地</span>
+                    <span class="fl">广东省 深圳市</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">成立日期</span>
+                    <span class="fl">2011年01月15日</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">联系地址</span>
+                    <span class="fl">罗湖区深南东路2001号鸿昌广场55层</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">联系电话</span>
+                    <span class="fl">0755-25339511</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">官方网站</span>
+                    <span class="fl">http://www.onefoundation.cn</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">机构性质</span>
+                    <span class="fl">公募机构</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">机构简介</span>
+                    <span class="fl info">壹基金是李连杰先生2007年4月创立的创新型公益组织,2011年1月作为中国第一间民间公募基金会落户深圳。壹基金以“尽我所能,人人公益”为愿景,搭建专业透明的公益平台,专注于灾害救助、儿童关怀与发展、公益支持与创新三大领域,致力于成为中国公益的开拓者、创新者和推动者。</span>
+                </div>
+            </div>
+        </div>
+        <div class="list-message">
+            <div class="list-header">
+                <span>发起人信息</span>
+            </div>
+            <div class="list-body clearfix">
+                <div class="msg-list fl">
+                    <span class="fl">姓名</span>
+                    <span class="fl">张学友</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">工作单位</span>
+                    <span class="fl">深圳壹基金公益基金会</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">个人简介</span>
+                    <span class="fl info">新型公益组织,2011年1月作为中国第一间民间公募基金会落户深圳。壹基金以"尽我所能,人人公益"为愿景,搭建专业透明的公益平台。</span>
+                </div>
+                <div class="msg-list clearfix">
+                    <span class="fl imgUp">个人图像</span>
+                    <div class="imgUpload fl">
+                        <input type="file">
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+    <!--</div>-->
+</aside>
+<script>
+    $('.right-nav').on('click', 'span', function () {
+        var index = $(this).index();
+        $(this).addClass('active').siblings().removeClass('active');
+        $('.right-list').eq(index).addClass('show').siblings().removeClass('show');
+    });
+</script>

+ 219 - 0
donate-console/src/main/webapp/resources/view/project/project_detail_unaudited.html

@@ -0,0 +1,219 @@
+<!--未审核右侧内容部分-->
+<aside class="content-right">
+    <!--<div class="container">-->
+    <div class="right-header clearfix">
+        <div class="fl"><span>让寒门学子多回趟家</span></div>
+        <div class="fr close">&times;</div>
+    </div>
+    <div class="right-nav"><span class="active" style="margin-left: -188px;">详细信息</span><span>图片信息</span><span>机构信息</span></div>
+    <!--详细信息-->
+    <div class="right-list show">
+        <div class="list-message">
+            <div class="list-header">
+                <span>基本信息</span>
+            </div>
+            <div class="list-body clearfix">
+                <div class="msg-list fl">
+                    <span class="fl">捐助领域</span>
+                    <span class="fl">疾病救助</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">具体分类</span>
+                    <span class="fl">贫困助学</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">项目地点</span>
+                    <span class="fl">广东省 云浮市</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">受助群体</span>
+                    <span class="fl">山区孩子</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">筹款目标</span>
+                    <span class="fl">68000元</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">已筹善款</span>
+                    <span class="fl count">68483元</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">参与人数</span>
+                    <span class="fl count">1121人</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">筹备时间</span>
+                    <span class="fl">2017-09-12至2017-12-12</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">发起缘由</span>
+                    <span class="fl"></span>
+                </div>
+            </div>
+        </div>
+        <div class="list-message">
+            <div class="list-header">
+                <span>项目介绍</span>
+            </div>
+            <div class="list-body clearfix">
+                <div class="msg-list fl">
+                    <span class="fl">项目介绍</span>
+                    <div class="project-intro fl">
+                        <div class="project-txt fl">
+                            <div class="project-intro">
+                                <p>晚上上自修课,语文老师坐镇。同学们安静得做作业。忽然,老师咳嗽了一声,同学们惊异地抬起头,随即又低下了头。紧接着不知从哪又来了一声咳嗽声——是郭宵。老师瞅了他一眼,随即又若无其事的低下头,道:“有人是傻子。”“郭宵是也。”蔡元杰随即答道。“有人是疯子。”“蔡元杰是也。”全班同学超有默契的答道。顿时,欢乐一片。</p>
+                                <img src="static/images/active05.png" alt=""/>
+                            </div>
+                            <div class="projectIntro">
+                                <h3>资助人群</h3>
+                                <p>西北、西南贫困山区的小学初中、高中(包括职业教育)大学生</p>
+                            </div>
+                            <div class="projectIntro">
+                                <h3>执行计划</h3>
+                                <p>1、基层团组织通过学校在学校内公布申请条件,学生以及其监护人提出求助申请学校对申请学生进行家访,核实家庭经济状况后报县级团委审核,县级团委上报市级团委汇总;</p>
+                                <p>2、确认市级团委汇总地区申请资料后报市青基会;</p>
+                                <p>3、市青基会终审申请,制作项目档案,并报理事会审议;审议通过后向申请人进行资助,并做审计和公示。</p>
+                            </div>
+                            <div class="projectIntro">
+                                <h3>执行机构</h3>
+                                <p>吉林省青少年发展基金会</p>
+                                <p>项目联系人:李四</p>
+                                <p>联系电话:138000000</p>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <div class="list-footer"><a href="" data-target="#through" data-toggle="modal">通过</a><a href="" data-target="#reject" data-toggle="modal">驳回</a></div>
+    </div>
+    <!--图片信息-->
+    <div class="right-list">
+        <div class="list-message">
+            <div class="list-body clearfix">
+                <div class="msg-list fl">
+                    <span class="fl">PC端主图</span>
+                    <div class="fl pcMainImg">
+                        <input type="file">
+                    </div>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">手机端主图</span>
+                    <div class="fl mbMainImg">
+                        <input type="file">
+                    </div>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">手机列表图</span>
+                    <div class="fl mbListImg">
+                        <input type="file">
+                    </div>
+                </div>
+            </div>
+        </div>
+        <div class="list-message">
+            <div class="list-header">
+                <span>主要联系人</span>
+            </div>
+            <div class="list-body clearfix">
+                <div class="msg-list fl">
+                    <span class="fl">负责人姓名</span>
+                    <span class="fl">钟勇斌</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">身份证号</span>
+                    <span class="fl">456194689162198465</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">办公号码</span>
+                    <span class="fl">0755 1841564</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">个人手机</span>
+                    <span class="fl">15512340000</span>
+                </div>
+            </div>
+        </div>
+    </div>
+    <!--机构信息-->
+    <div class="right-list">
+        <div class="list-message">
+            <div class="list-header">
+                <span>基本信息</span>
+            </div>
+            <div class="list-body clearfix">
+                <div class="msg-list">
+                    <span class="fl imgUp">机构LOGO</span>
+                    <div class="imgUpload fl">
+                        <input type="file">
+                    </div>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">机构名称</span>
+                    <span class="fl">深圳壹基金公益基金会</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">所在地</span>
+                    <span class="fl">广东省 深圳市</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">成立日期</span>
+                    <span class="fl">2011年01月15日</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">联系地址</span>
+                    <span class="fl">罗湖区深南东路2001号鸿昌广场55层</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">联系电话</span>
+                    <span class="fl">0755-25339511</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">官方网站</span>
+                    <span class="fl">http://www.onefoundation.cn</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">机构性质</span>
+                    <span class="fl">公募机构</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">机构简介</span>
+                    <span class="fl info">壹基金是李连杰先生2007年4月创立的创新型公益组织,2011年1月作为中国第一间民间公募基金会落户深圳。壹基金以“尽我所能,人人公益”为愿景,搭建专业透明的公益平台,专注于灾害救助、儿童关怀与发展、公益支持与创新三大领域,致力于成为中国公益的开拓者、创新者和推动者。</span>
+                </div>
+            </div>
+        </div>
+        <div class="list-message">
+            <div class="list-header">
+                <span>发起人信息</span>
+            </div>
+            <div class="list-body clearfix">
+                <div class="msg-list fl">
+                    <span class="fl">姓名</span>
+                    <span class="fl">张学友</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">工作单位</span>
+                    <span class="fl">深圳壹基金公益基金会</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">个人简介</span>
+                    <span class="fl info">新型公益组织,2011年1月作为中国第一间民间公募基金会落户深圳。壹基金以"尽我所能,人人公益"为愿景,搭建专业透明的公益平台。</span>
+                </div>
+                <div class="msg-list clearfix">
+                    <span class="fl imgUp">个人图像</span>
+                    <div class="imgUpload fl">
+                        <input type="file">
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+    <!--</div>-->
+</aside>
+<script>
+    $('.right-nav').on('click', 'span', function () {
+        var index = $(this).index();
+        $(this).addClass('active').siblings().removeClass('active');
+        $('.right-list').eq(index).addClass('show').siblings().removeClass('show');
+    });
+</script>

+ 1 - 0
donate-console/src/main/webapp/resources/view/project/project_finance.html

@@ -0,0 +1 @@
+<!-- 项目财务披露 -->

+ 848 - 0
donate-console/src/main/webapp/resources/view/project/project_list.html

@@ -0,0 +1,848 @@
+<!-- 项目列表 -->
+<!--主体内容-->
+<style>
+    body{
+        font-family: "Microsoft Yahei", "微软雅黑";
+        box-sizing: border-box;
+    }
+    .clearfix {
+        clear: both;
+    }
+    .skin-blue .content-wrapper .content-header{
+        margin: 0 0 -15px 3px;
+    }
+    .content-header div.all{
+        float: left;
+        margin: 23px 0 10px 0;
+        width: 700px;
+    }
+    .content-header div.all span{
+        position: relative;
+        margin-right: 28px;
+        font-size: 14px;
+        color: #787878;
+        cursor: pointer ;
+    }
+    .content-header div.all span em{
+        font-size: 14px;
+        font-style: normal;
+        color: #787878;
+    }
+    .content-header div.all span.active,.content-header div.all span:hover{
+        font-weight: bold;
+        color: #367fa9;
+    }
+    .content-header div.all span.active em,.content-header div.all span:hover em{
+        font-weight: bold;
+        color: #367fa9;
+    }
+    .content-header div.all span b.line:after{
+        content: '';
+        position: absolute;
+        top: 5px;
+        right: -14px;
+        width: 1px;
+        height: 12px;
+        background: #d2d2d2;
+    }
+    .content-header .form-horizontal{
+        float: right;
+    }
+    .content .jp-left{
+        height: 32px;
+        line-height: 32px;
+    }
+    .content .jp-left span{
+        font-size: 14px;
+        color: #333;
+    }
+    .content .jp-left a{
+        margin-right: 15px;
+        display: inline-block;
+        width: 48px;
+        height: 24px;
+        line-height: 24px;
+        text-align: center;
+        font-size: 14px;
+        color: #367fa9;
+        background: #fff;
+        border: 1px solid #dcdcdc;
+        border-radius: 3px;
+    }
+    .content .jp-left select{
+        margin-right: 28px;
+        width: 150px;
+        height: 32px;
+        border-radius: 0;
+    }
+    .content .boxes {
+        position: relative;
+        margin-top: 4px;
+        border-radius: 3px;
+        background: #ffffff;
+        margin-bottom: 20px;
+        width: 100%;
+        height: 700px;
+        border: 1px solid #dcdcdc;
+        box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
+    }
+    .content .boxes-body table{
+        width: 100%;
+        max-width: 100%;
+    }
+    .content .boxes-body table tr{
+        text-align: center;
+        vertical-align: middle ;
+    }
+    .content .boxes-body table tr td:nth-child(2),.content .boxes-body table tr td:nth-child(3){
+        text-align: left;
+    }
+    .content .boxes-body table thead{
+        height: 40px;
+        line-height: 40px;
+        text-align: center;
+    }
+    .content .boxes-body table thead tr{
+        border-bottom: 1px solid #dcdcdc;
+    }
+    .content .boxes-body table thead tr td{
+        font-size: 14px;
+        color: #8c8c8c;
+        font-weight: bold;
+    }
+    .content .boxes-body table tbody{
+        height: 655px;
+    }
+    .content .boxes-body table tbody tr{
+        height: 60px;
+        vertical-align: middle ;
+        cursor: pointer;
+    }
+    .content .boxes-body table tbody tr:nth-child(even){
+        background: #f7f7f7;
+    }
+    .content .boxes-body table tbody tr:hover{
+        background: #f1f5ff;
+    }
+    .content .boxes-body table tbody tr td{
+        padding-top: 6px;
+        font-size: 14px;
+        color: #323232;
+    }
+    .content .boxes-body table tbody tr td div.name{
+        width: 220px;
+    }
+    .content .boxes-body table tbody tr td div.name p {
+        font-size: 14px;
+        font-weight: bold;
+        color: #323232;
+    }
+    .content .boxes-body table tbody tr td div.name:hover p{
+        text-decoration: underline;
+    }
+    /*.content .boxes-body table tbody tr td div.name div{*/
+    /*display: none;*/
+    /*}*/
+    .content .boxes-body table tbody tr:hover td div.name div{
+        margin-top: 5px;
+        display: block;
+    }
+    .content .boxes-body table tbody tr td div.name span{
+        margin-right: 25px;
+        font-size: 14px;
+        color: #367bcf;
+        cursor: pointer;
+    }
+    .content .boxes-body table tbody tr td div.name span:last-child {
+        margin-right: 0;
+    }
+    /*右侧内容部分*/
+    .content-right{
+        margin-top: 50px;
+        position: absolute;
+        top: 0;
+        right: 0;
+        /*width: 50%;*/
+        width: 905px;
+        height: auto;
+        background: #fff;
+        z-index: 100;
+        /*box-shadow: -5px 2px 2px #f0f0f0;*/
+        /*-moz-box-shadow: -5px 2px 2px #f0f0f0;*/
+        /*-o-box-shadow: -5px 2px 2px #f0f0f0;*/
+        /*-webkit-box-shadow: -5px 2px 2px #f0f0f0 ;*/
+    }
+    .right-header{
+        padding: 0 25px;
+        width: 100%;
+        height: 64px;
+        line-height: 64px;
+    }
+    .right-header span{
+        margin-right: 17px;
+        font-size: 24px;
+        color: #333;
+    }
+    .right-header a{
+        font-size: 14px;
+        color: #1a6eb5;
+    }
+    .right-header .close{
+        font-size: 40px;
+    }
+    .right-nav{
+        margin-bottom: 14px;
+        width: 100%;
+        height: 34px;
+        line-height: 34px;
+        background: #e8f0f7;
+    }
+    .right-nav span{
+        margin-right: 50px;
+        padding-bottom: 5px;
+        font-size: 14px;
+        color: #333333;
+        cursor: pointer;
+    }
+
+    .right-nav span:hover,.right-nav span.active{
+        border-bottom: 2px solid #3c8dbc;
+    }
+    .content-right .right-list{
+        width: 100%;
+    }
+    .content-right .right-list table{
+        margin-top: 20px;
+        width: 100%;
+        table-layout: fixed ;
+    }
+
+    .content-right .right-list table thead{
+        width: 100%;
+        height: 40px;
+        line-height: 40px;
+        border: 1px solid #dcdcdc;
+    }
+    .content-right .right-list table thead tr{
+        border: 1px solid #dcdcdc;
+    }
+    .content-right .right-list table thead th{
+        font-size: 14px;
+        color: #8c8c8c;
+        text-align: center;
+    }
+    .content-right .right-list table thead th:nth-child(2){
+        text-align: left;
+    }
+    .content-right .right-list table tbody tr{
+        height: 60px;
+        cursor: pointer;
+    }
+    .content-right .right-list table tbody tr:nth-child(even){
+        background: #f7f7f7;
+    }
+    .content-right .right-list table tbody tr:hover{
+        background: #f1f5ff;
+    }
+    .content-right .right-list table tbody tr td{
+        font-size: 14px;
+        color: #333;
+        text-align: center;
+    }
+    .content-right .right-list table tbody tr td:nth-child(2) {
+        /*font-weight: bold;*/
+        text-align: left;
+    }
+    .content-right .right-list table tbody tr td:nth-child(3) {
+        padding-right: 20px;
+        text-align: right;
+    }
+    /*机构信息*/
+    .right-list .list-message{
+        padding: 0 20px 0 25px;
+    }
+    .right-list .list-header{
+        position: relative;
+        width: 100%;
+        height: 43px;
+        text-align: left;
+        border-bottom: 1px solid #dcdcdc;
+    }
+    .right-list .list-header:first-child {
+        margin-top: -10px;
+    }
+    .right-list .list-header span{
+        margin-left: 15px;
+        font-size: 15px;
+        color: #000;
+    }
+    .right-list .list-header span:before {
+        content: '';
+        position: absolute;
+        top: 13px;
+        left: 0;
+        width: 4px;
+        height: 16px;
+        background: #626262;
+    }
+    .right-list .list-body{
+        margin-top: 17px;
+    }
+    .right-list .list-body .msg-list{
+        margin-bottom: 20px;
+        overflow: hidden;
+    }
+    .right-list .list-body .msg-list span:first-child{
+        margin-right: 20px;
+        width: 70px;
+        font-family: 'SimHei'!important ;
+        font-size: 14px;
+        color: #8da8b8;
+    }
+    .right-list .list-body .msg-list span:last-child{
+        width: 340px;
+        font-size: 14px;
+        color: #323232;
+    }
+    /*详细信息*/
+    .right-list .list-body .msg-list span.count{
+        font-size: 14px;
+        font-weight: bold;
+        color: #3a88b5;
+    }
+    .right-list .list-body .msg-list span.mCount{
+        font-size: 14px;
+        font-weight: bold;
+        color: #323232;
+    }
+    .msg-list .project-intro{
+        width: 760px;
+    }
+    .msg-list .project-txt{
+        text-align: left;
+    }
+    .msg-list .project-txt .project-intro{
+        margin: 0 0 42px 0;
+    }
+    .msg-list .project-txt .project-intro p{
+        font-size: 14px;
+        color: #787878;
+        text-indent: 2em;
+        line-height: 21px;
+    }
+    .msg-list .project-txt .project-intro img{
+        margin: 30px 0;
+        width: 500px;
+        height: 235px;
+        border: 1px solid #e1e1e1;
+    }
+    .msg-list .project-txt .projectIntro{
+        margin-bottom: 45px;
+    }
+    .msg-list .project-txt .projectIntro h3{
+        padding-bottom: 13px;
+        margin-bottom: 15px;
+        font-size: 18px;
+        color: #1e1e1e;
+        border-bottom: 1px solid #e1e1e1;
+    }
+    .msg-list .project-txt .projectIntro p:nth-of-type(1){
+        margin-top: 15px;
+    }
+    .msg-list .project-txt .projectIntro p{
+        font-size: 14px;
+        color: #787878;
+        line-height: 21px;
+    }
+
+    /*图片信息*/
+    .right-list .list-body .msg-list div.pcMainImg {
+        margin-bottom: 34px;
+        width: 560px;
+        height: 310px;
+        border: 1px solid #dcdcdc;
+        background: #e5e5e5;
+    }
+    .right-list .list-body .msg-list div.pcMainImg input{
+        width: 100%;
+        height: 100%;
+        outline: none;
+        opacity: 1;
+    }
+    .right-list .list-body .msg-list div.mbMainImg {
+        margin-bottom: 34px;
+        width: 750px;
+        height: 550px;
+        border: 1px solid #dcdcdc;
+        background: #e5e5e5;
+    }
+    .right-list .list-body .msg-list div.mbMainImg input{
+        width: 100%;
+        height: 100%;
+        outline: none;
+        opacity: 1;
+    }
+    .right-list .list-body .msg-list div.mbListImg {
+        margin-bottom: 34px;
+        width: 500px;
+        height: 375px;
+        border: 1px solid #dcdcdc;
+        background: #e5e5e5;
+    }
+    .right-list .list-body .msg-list div.mbListImg input{
+        width: 100%;
+        height: 100%;
+        outline: none;
+        opacity: 1;
+    }
+    /*项目进度*/
+    .right-list .list-message p{
+        font-size: 14px;
+        line-height: 21px;
+        color: #323232;
+        text-indent: 2em;
+    }
+    .right-list .list-message p.first-txt {
+        margin-top: 20px;
+    }
+    .right-list .list-message .img{
+        margin: 20px 0;
+        width: 500px;
+        height: 280px;
+    }
+    .right-list .list-message .img img{
+        max-width: 500px;
+    }
+    .right-list .list-message .time{
+        padding-bottom: 20px;
+        border-bottom: 1px solid #dcdcdc;
+    }
+    .right-list .list-message .time span{
+        margin-right: 23px;
+        font-family: 'SimHei'!important;
+        font-size: 14px;
+        color: #969696;
+    }
+    .right-list .list-message .time a{
+        font-family: 'SimHei'!important;
+        font-size: 14px;
+        color: #1a6eb5;
+    }
+    /*捐款明细*/
+    .right-list .list-message .choose select{
+        padding-left: 10px;
+        margin-right: 27px;
+        width: 150px;
+        height: 32px;
+    }
+    .right-list .list-message .search {
+        position: relative;
+    }
+    .right-list .list-message .search input{
+        margin-right: 8px;
+        padding-left: 10px;
+        width: 150px;
+        height: 30px;
+        border: 1px solid #dcdcdc;
+        border-radius: 3px;
+    }
+    .right-list .list-message .search button{
+        width: 60px;
+        height: 30px;
+        font-size: 14px;
+        color: #333;
+        background: #eceff4;
+        border: 1px solid #dcdcdc;
+        border-radius: 3px;
+    }
+    /*财务披露*/
+    .right-list table tbody  td.money{
+        text-align: right;
+    }
+    .right-list .list-body .msg-list .spending-detail span.detail{
+        font-size: 14px;
+        color: #323232;
+    }
+    .right-list .list-body .msg-list .spending-detail div{
+        margin: 12px 0;
+    }
+    .right-list .list-body .msg-list .spending-detail div b{
+        margin-right: 24px;
+        font-size: 14px;
+        font-weight: bold;
+        color: #3c8dbc;
+    }
+    .right-list .list-body .msg-list .spending-detail div span{
+        font-size: 14px;
+        color: #323232;
+    }
+    .right-list .list-body .msg-list .spending-detail .thumbnail-img{
+
+    }
+    .right-list .list-body .msg-list .spending-detail .thumbnail-img .thumb{
+        position: relative;
+        margin-right: 22px;
+        width: 110px;
+        height: 110px;
+        line-height: 110px;
+        background: #eeeeee;
+        text-align: center;
+    }
+    .right-list .list-body .msg-list .spending-detail .thumbnail-img .thumb input{
+        position: absolute;
+        top: 0;
+        left: 0;
+        width: 100%;
+        height: 100%;
+        outline: none;
+        opacity : 1;
+    }
+    /*材料证明*/
+    .right-list .list-body .msg-list span.info {
+        width: 764px;
+    }
+    .right-list .list-body .msg-list div.imgUpload{
+        margin-left: 5px;
+        width: 100px;
+        height: 100px;
+        border: 1px solid #dcdcdc;
+        background: #dcdcdc;
+    }
+    .right-list .list-body .msg-list div.imgUpload input[type='file']{
+        width: 100%;
+        height: 100%;
+        opacity: 1;
+        outline: none;
+    }
+    .right-list .list-body .msg-list span.imgUp {
+        /*width: 150px;*/
+    }
+    .right-list{
+    display: none
+    }
+    .show{
+        display: block;
+    }
+    /*.box-show{*/
+    /*display: none;*/
+    /*}*/
+    /*.content-right{*/
+    /*display: none;*/
+    /*height: 1500px;*/
+    /*}*/
+    /*未审核-机构信息*/
+    .right-list .list-footer{
+        margin: 0 auto;
+        margin-top: 45px;
+        width: 100%;
+        text-align: center;
+    }
+    .right-list .list-footer a{
+        display: inline-block;
+        width: 140px;
+        height: 34px;
+        line-height: 34px;
+        color: #fff;
+        letter-spacing: 10px;
+        border-radius: 3px;
+    }
+    .right-list .list-footer a:first-child {
+        margin-right: 27px;
+        background: #3c8dbc;
+    }
+    .right-list .list-footer a:last-child {
+        background: #a0a0a0;
+    }
+    /*机构通过确认弹出框*/
+    .through .modal-content{
+        width: 590px;
+        height: 260px;
+    }
+    .through .header{
+        padding: 0 20px;
+        margin-bottom: 20px;
+        width: 100%;
+        height: 44px;
+        line-height: 44px;
+    }
+    .through .header p{
+        font-family: 'SimHei'!important ;
+        font-size: 16px;
+        color: #323232;
+    }
+    .through .header div.close{
+        font-size: 40px;
+    }
+    .through .body{
+        padding: 0 0 0 20px;
+    }
+    .through-item {
+        margin-right: 44px;
+        overflow: hidden;
+        margin-bottom: 20px;
+    }
+    .through-item:first-child {
+        margin-right: 0;
+    }
+    .through-item span:first-child{
+        margin-right: 20px;
+        width: 70px;
+        font-family: 'SimHei'!important;
+        font-size: 14px;
+        color: #8da8b8;
+    }
+    .through-item span:last-child{
+        width: 150px;
+        font-size: 14px;
+        color: #323232;
+    }
+    .through-item span.name{
+        width: 440px;
+        font-weight: bold;
+    }
+    .through-item span.long{
+        width: 430px;
+    }
+    .through .footer{
+        width: 100%;
+        height: 50px;
+        background:#f4f4f4;
+    }
+    .through .footer a {
+        font-family: 'SimHei'!important ;
+        display: inline-block;
+        height: 30px;
+        line-height: 30px;
+        font-size: 16px;
+        text-align: center;
+        letter-spacing: 4px;
+        border-radius: 3px;
+    }
+    .through .footer a:first-child{
+        margin-right: 10px;
+        width: 120px;
+        color: #fff;
+        background: #3c8dbc;
+    }
+    .through .footer a:last-child{
+        width: 80px;
+        border: 1px solid #dcdcdc;
+        color: #959595;
+        background: #fff;
+    }
+    .modal-footer {
+        padding: 10px;
+    }
+    /*机构申请驳回弹出框*/
+    .reject .modal-content{
+        width: 590px;
+        height: 500px;
+    }
+    .reject .header{
+        margin-bottom: 23px;
+    }
+    .reject .body{
+        width: 100%;
+        height: 390px;
+    }
+    .reject .reason{
+        width: 540px;
+    }
+    .reject .reason .reason-header {
+        margin-top: 10px;
+        width: 540px;
+        height: 34px;
+        line-height: 34px;
+        text-align: center;
+        background: #eee;
+    }
+    .reject .reason .reason-header p{
+        font-family: 'SimHei'!important ;
+        font-size: 16px;
+        color: #323232;
+        border: 1px solid #dcdcdc;
+        border-bottom: none;
+    }
+    .reject .reason textarea {
+        padding-left: 10px;
+        width: 100%;
+        height: 176px;
+        border: 1px solid #dcdcdc;
+        border-top: none;
+    }
+    /*未通过右侧内容部分*/
+    /*驳回理由*/
+    .content-right .reject-reason {
+        margin: 0 auto;
+        margin-bottom: 24px;
+        padding: 0 22px;
+        width: 820px;
+        border: 1px solid #dcdcdc;
+        background: #f5fbff;
+        box-shadow: -4px -4px 5px #e9eff3;
+        -webkit-box-shadow: -4px -4px 5px #e9eff3;
+        -o-box-shadow: -4px -4px 5px #e9eff3;
+        -moz-box-shadow: -4px -4px 5px #e9eff3;
+    }
+    .content-right .reject-reason h5{
+        padding: 14px 0;
+        font-family: 'SimHei'!important;
+        font-size: 16px;
+        text-align: center;
+        color: #323232;
+    }
+    .content-right .reject-reason p{
+        margin-bottom: 14px;
+        font-family: 'SimHei'!important;
+        font-size: 14px;
+        text-align: left;
+        color: #787878;
+    }
+    /*未通过右侧内容部分-详细信息*/
+    .content-right .right-list .detail-content{
+        height: 545px;
+        overflow-y: auto;
+    }
+    .right-list .detail-content .list-body .msg-list span:last-child{
+        width: 330px;
+    }
+    .detail-content .msg-list .project-intro {
+        width: 750px;
+    }
+    .right-list .list-footer a.again {
+        display: inline-block;
+        width: 140px;
+        height: 34px;
+        line-height: 34px;
+        color: #fff;
+        background: #3c8dbc;
+        border-radius: 3px;
+        letter-spacing: 0;
+    }
+</style>
+<div class="content-wrapper" style="min-height: 1500px;; z-index: 50;">
+    <section class="content-header clearfix">
+        <h1>项目列表</h1>
+        <div class="row content-row clearfix">
+            <div class="all">
+                <span class="active" ng-click="setState('audited')">已审核<em>({{numOfAudited}})</em><b class="line"></b></span>
+                <span ng-click="setState('unaudited')">未审核<em>({{numOfUnaudited}})</em><b class="line"></b></span>
+                <span ng-click="setState('disagreed')">未通过<em>({{numOfUnagreed}})</em></span>
+            </div>
+            <!--<form class="form-horizontal" method="POST" action="">-->
+            <div class="input-group input-group-sm">
+                <input id="post-search-input" class="form-control" type="search" ng-model="keyword" ng-search="onSearch()" value="" name="" placeholder="请输入关键词">&nbsp;&nbsp;
+                <input id="search-submit" class="btn btn-default btn-sm" type="submit" value="搜索" ng-click="onSearch()">
+            </div>
+            <!--</form>-->
+        </div>
+    </section>
+    <!-- Main content -->
+    <section class="content">
+        <div class="box-show show">
+            <div class="sort">
+                <div class="row content-row clearfix">
+                    <div class="jp-left">
+                        <select class="form-control input-sm jp-width120" ng-model="selectedArea" ng-change="setArea(selectedArea)" ng-init="selectedArea = '0'">
+                            <option ng-selected="selectedArea == '0'" value="0">全部分类</option>
+                            <option ng-selected="selectedArea == '环保/保护动物'" value="环保/保护动物">环保/保护动物</option>
+                            <option ng-selected="selectedArea == '疾病救助'" value="疾病救助">疾病救助</option>
+                            <option ng-selected="selectedArea == '扶贫/救灾'" value="扶贫/救灾">扶贫/救灾</option>
+                            <option ng-selected="selectedArea == '教育/助学'" value="教育/助学">教育/助学</option>
+                        </select>
+                    </div>
+                </div>
+            </div>
+            <div class="boxes">
+                <div class="boxes-body">
+                    <form action="" method="" id="form">
+                        <input type="hidden" name="" value="">
+                        <table class="" style="word-break:break-all">
+                            <thead>
+                            <tr>
+                                <!--<td width="45"></td>-->
+                                <td width="230">项目名称</td>
+                                <td width="70" ng-if="active == 'audited'">进度</td>
+                                <td width="120">领域分类</td>
+                                <td width="110">发布时间</td>
+                                <td width="200">发布机构</td>
+                                <td width="110">机构性质</td>
+                                <td width="100">募款目标</td>
+                                <td width="100">已筹善款</td>
+                                <td width="90">参与人数</td>
+                                <td width="180"></td>
+                            </tr>
+                            </thead>
+                            <tbody ng-if="tableParams.total() == 0">
+                                <tr>
+                                    <td>
+                                        <div class="row text-muted info-container" style="padding: 50px 10px;">
+                                            <div class="col-md-4 text-center">
+                                                <div class="f16">当前没有找到符合条件的项目!</div>
+                                            </div>
+                                        </div>
+                                    </td>
+                                </tr>
+                            </tbody>
+                            <tbody>
+                            <tr>
+                                <td>
+                                    <div class="name">
+                                        <p ng-click="showDetail(1)">让寒门学子多回趟家</p>
+                                        <!--<div><span>编辑</span></div>-->
+                                    </div>
+                                </td>
+                                <td>执行中</td>
+                                <td>教育/助学</td>
+                                <td>2017-08-20 <br/>14:38:11</td>
+                                <td>吉林省青少年发展基金会</td>
+                                <td>公募机构</td>
+                                <td>68000元</td>
+                                <td>68459元 <br/>(100.5%)</td>
+                                <td>341人</td>
+                                <td></td>
+                            </tr>
+                            </tbody>
+                            <tbody ng-repeat="project in $data">
+                            <tr>
+                                <!--<td><input type="checkbox"></td>-->
+                                <td>
+                                    <div class="name">
+                                        <p><a ng-click="showDetail(project.id)">{{project.name}}</a></p>
+                                        <!--<div><span>编辑</span></div>-->
+                                    </div>
+                                </td>
+                                <td ng-if="active == 'audited'">{{project.overdue}}</td>
+                                <td>{{project.area}}</td>
+                                <td>{{project.submitTime | date:'yyyy-MM-dd HH:mm:ss'}}</td>
+                                <td>{{project.orgName}}</td>
+                                <td>{{project.organization.name}}</td>
+                                <td>{{project.target}}元</td>
+                                <td>{{project.amount}}元 <br/>({{project.amount * 100 / project.target}}%)</td>
+                                <td>{{project.joinAmount}}人</td>
+                                <td></td>
+                            </tr>
+                            </tbody>
+                        </table>
+                    </form>
+                </div>
+            </div>
+        </div>
+    </section>
+</div>
+
+<script>
+
+    $('.all').on('click', 'span', function () {
+        var index = $(this).index();
+        $(this).addClass('active').siblings().removeClass('active');
+        $('.box-show').eq(index).addClass('show').siblings().removeClass('show');
+    });
+    $('.right-nav').on('click', 'span', function () {
+        var index = $(this).index();
+//        console.log(index)
+        $(this).addClass('active').siblings().removeClass('active');
+        $('.right-list').eq(index).addClass('show').siblings().removeClass('show');
+//        console.log($('.right-list').eq(index))
+    });
+</script>

+ 1 - 0
donate-console/src/main/webapp/resources/view/project/project_management.html

@@ -0,0 +1 @@
+<!-- 项目结项管理 -->

+ 1 - 0
donate-console/src/main/webapp/resources/view/project/project_report.html

@@ -0,0 +1 @@
+<!-- 项目报告填写 -->

+ 1 - 0
donate-console/src/main/webapp/resources/view/project/project_start.html

@@ -0,0 +1 @@
+<!-- 发起项目 -->

+ 1 - 0
donate-console/src/main/webapp/resources/view/user/authority.html

@@ -0,0 +1 @@
+<!-- 权限管理 -->

+ 1 - 0
donate-console/src/main/webapp/resources/view/user/organization_list.html

@@ -0,0 +1 @@
+<!-- 机构列表 -->

+ 1 - 0
donate-console/src/main/webapp/resources/view/user/organization_register.html

@@ -0,0 +1 @@
+<!-- 机构入驻 -->

+ 1 - 0
donate-console/src/main/webapp/resources/view/user/user_list.html

@@ -0,0 +1 @@
+<!-- 用户中心 -->