Browse Source

模态框项目介绍html标签未解析问题处理,后台录入项目报告。

dongbw 8 years ago
parent
commit
8d323f5c09
30 changed files with 425 additions and 207 deletions
  1. 14 2
      donate-console/src/main/java/com/uas/console/donate/controller/ProjectController.java
  2. 26 15
      donate-console/src/main/java/com/uas/console/donate/controller/ProjectReportController.java
  3. 1 5
      donate-console/src/main/java/com/uas/console/donate/dao/ProjectEvolveDao.java
  4. 14 0
      donate-console/src/main/java/com/uas/console/donate/model/Project.java
  5. 15 0
      donate-console/src/main/java/com/uas/console/donate/model/ProjectConclude.java
  6. 2 2
      donate-console/src/main/java/com/uas/console/donate/model/ProjectEvolve.java
  7. 2 3
      donate-console/src/main/java/com/uas/console/donate/service/ProjectEvolveService.java
  8. 15 0
      donate-console/src/main/java/com/uas/console/donate/service/ProjectReportService.java
  9. 8 0
      donate-console/src/main/java/com/uas/console/donate/service/ProjectService.java
  10. 5 5
      donate-console/src/main/java/com/uas/console/donate/service/impl/ProjectEvolveServiceImpl.java
  11. 34 0
      donate-console/src/main/java/com/uas/console/donate/service/impl/ProjectReportServiceImpl.java
  12. 44 16
      donate-console/src/main/java/com/uas/console/donate/service/impl/ProjectServiceImpl.java
  13. 6 2
      donate-console/src/main/webapp/WEB-INF/views/index.html
  14. 46 11
      donate-console/src/main/webapp/resources/js/index/app.js
  15. 9 3
      donate-console/src/main/webapp/resources/js/index/services/Project.js
  16. 11 0
      donate-console/src/main/webapp/resources/lib/rangy/.npmignore
  17. 21 0
      donate-console/src/main/webapp/resources/lib/rangy/LICENSE
  18. 24 0
      donate-console/src/main/webapp/resources/lib/rangy/README.md
  19. 31 0
      donate-console/src/main/webapp/resources/lib/rangy/package.json
  20. 23 83
      donate-console/src/main/webapp/resources/view/project/project_detail.html
  21. 4 6
      donate-console/src/main/webapp/resources/view/project/project_launch_1.html
  22. 1 1
      donate-console/src/main/webapp/resources/view/project/project_launch_2.html
  23. 6 6
      donate-console/src/main/webapp/resources/view/project/project_report.html
  24. 14 0
      donate-service/src/main/java/com/uas/service/donate/model/Project.java
  25. 1 1
      donate-service/src/main/webapp/resources/js/mobile/app.js
  26. 1 1
      donate-service/src/main/webapp/resources/js/project/app.js
  27. 8 3
      donate-service/src/main/webapp/resources/js/project/controllers/ProjectDetailCtrl.js
  28. 21 22
      donate-service/src/main/webapp/resources/view/mobile/mobile_project_detail.html
  29. 15 17
      donate-service/src/main/webapp/resources/view/project/project_detail.html
  30. 3 3
      donate-service/src/main/webapp/resources/view/project/project_detail_side.html

+ 14 - 2
donate-console/src/main/java/com/uas/console/donate/controller/ProjectController.java

@@ -253,6 +253,18 @@ public class ProjectController {
         return projectService.getDisagreedProjects(pageInfo, filter);
     }
 
+    /**
+     * 获取项目列表 (未结项)
+     * @return
+     */
+    @RequestMapping(params = RequestState.WAITING, method = RequestMethod.GET)
+    @ResponseBody
+    public Page<Project> getNotEndProjects(PageParams params, String searchFilter){
+        PageInfo pageInfo = new PageInfo(params);
+        SearchFilter filter = JSONObject.parseObject(searchFilter, SearchFilter.class);
+        return projectService.getNotEndProjects(pageInfo, filter);
+    }
+
     /**
      * 获取项目详情
      * @param id
@@ -304,7 +316,7 @@ public class ProjectController {
 
     @RequestMapping(value = "/save/report/{id}", method = RequestMethod.POST)
     @ResponseBody
-    public ModelMap saveReport(@RequestBody String json, @PathVariable("id") Long id ,MultipartFile img) throws IOException {
+    public ModelMap saveReport(String json, @PathVariable("id") Long id ,MultipartFile img) throws IOException {
         ProjectReport report = JSONObject.parseObject(json, ProjectReport.class);
         if (img != null) {
             String path = fileClient.upload(img.getBytes(), img.getSize(), "jpg", null);
@@ -336,7 +348,7 @@ public class ProjectController {
      */
     @RequestMapping(value = "/save/conclude/{id}", method = RequestMethod.POST)
     @ResponseBody
-    public ModelMap saveConclude(@RequestBody String json, @PathVariable("id") Long id ,MultipartFile img) throws IOException {
+    public ModelMap saveConclude(String json, @PathVariable("id") Long id ,MultipartFile img) throws IOException {
         ProjectConclude conclude = JSONObject.parseObject(json, ProjectConclude.class);
         if (img != null) {
             String path = fileClient.upload(img.getBytes(), img.getSize(), "jpg", null);

+ 26 - 15
donate-console/src/main/java/com/uas/console/donate/controller/ProjectEvolveController.java → donate-console/src/main/java/com/uas/console/donate/controller/ProjectReportController.java

@@ -3,24 +3,24 @@ package com.uas.console.donate.controller;
 
 import com.alibaba.fastjson.JSONObject;
 import com.uas.console.donate.model.ProjectEvolve;
-import com.uas.console.donate.service.ProjectEvolveService;
+import com.uas.console.donate.model.ProjectReport;
+import com.uas.console.donate.service.ProjectReportService;
 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.*;
 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")
-public class ProjectEvolveController {
+@RequestMapping("/projectReport")
+public class ProjectReportController {
 
     @Autowired
-    private ProjectEvolveService projectEvolveService;
+    private ProjectReportService projectReportService;
 
     @Autowired
     private FileClient fileClient;
@@ -32,11 +32,11 @@ public class ProjectEvolveController {
      */
     @ResponseBody
     @RequestMapping(value = "/save",method = RequestMethod.POST)
-    public ProjectEvolve save(String jsonStr){
+    public ProjectReport save(String jsonStr){
 
-        ProjectEvolve projectEvolve= JSONObject.parseObject(jsonStr,ProjectEvolve.class);
+        ProjectReport projectReport= JSONObject.parseObject(jsonStr,ProjectReport.class);
 
-        return projectEvolveService.save(projectEvolve);
+        return projectReportService.save(projectReport);
     }
 
     /**
@@ -53,20 +53,31 @@ public class ProjectEvolveController {
     }
 
     /**
-     * 删除某一条项目进展
+     * 根据进展报告id删除某一条项目进展
      * @param id
      * @return
      */
     @ResponseBody
     @RequestMapping(value = "/delete/{id}",method = RequestMethod.POST)
-    public ProjectEvolve deleteById(@PathVariable("id") Long id){
-        return projectEvolveService.deleteById(id);
+    public ModelMap deleteById(@PathVariable("id") Long id){
+        try {
+            projectReportService.deleteById(id);
+        } catch (Exception e) {
+            return new ModelMap("error", true);
+        }
+        return new ModelMap("success", true);
     }
-    //查找某项目所有的项目进度
+
+    /**
+     * 根据项目id查找项目所有进度
+     * @param proId
+     * @return
+     */
     @ResponseBody
     @RequestMapping(value = "/getSchedules/{proId}", method = RequestMethod.GET)
-    public List<ProjectEvolve> findAll(@PathVariable("proId")Long proId){
-        return projectEvolveService.findAll(proId);
+    public List<ProjectReport> findAll(@PathVariable("proId")Long proId){
+        List<ProjectReport> list = projectReportService.findByProId(proId);
+        return projectReportService.findByProId(proId);
     }
 
 }

+ 1 - 5
donate-console/src/main/java/com/uas/console/donate/dao/ProjectEvolveDao.java

@@ -4,8 +4,6 @@ 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;
 
@@ -17,7 +15,5 @@ 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);
+    List<ProjectEvolve> findByProId(Long proId);
 }

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

@@ -256,6 +256,12 @@ public class Project implements Serializable{
     @Column(name = "pro_join_amount")
     private Long joinAmount;
 
+    /**
+     * 是否已结项(0未结项, 1已结项)
+     */
+    @Column(name = "pro_end")
+    private Short end;
+
     /**
      * 是否已结束
      * @return
@@ -589,4 +595,12 @@ public class Project implements Serializable{
     public void setUserUU(Long userUU) {
         this.userUU = userUU;
     }
+
+    public Short getEnd() {
+        return end;
+    }
+
+    public void setEnd(Short end) {
+        this.end = end;
+    }
 }

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

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

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

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

+ 2 - 3
donate-console/src/main/java/com/uas/console/donate/service/ProjectEvolveService.java

@@ -8,9 +8,8 @@ public interface ProjectEvolveService {
 
     ProjectEvolve save(ProjectEvolve projectEvolve);
 
-    //查找某项目所有的项目进度
-    List<ProjectEvolve> findAll(Long proId);
-
     //删除某一条进度
     ProjectEvolve deleteById(Long id);
+
+    List<ProjectEvolve> findByProId(Long proId);
 }

+ 15 - 0
donate-console/src/main/java/com/uas/console/donate/service/ProjectReportService.java

@@ -0,0 +1,15 @@
+package com.uas.console.donate.service;
+
+
+import com.uas.console.donate.model.ProjectReport;
+
+import java.util.List;
+
+
+public interface ProjectReportService {
+    ProjectReport save(ProjectReport projectReport);
+
+    void deleteById(Long id);
+
+    List<ProjectReport> findByProId(Long proId);
+}

+ 8 - 0
donate-console/src/main/java/com/uas/console/donate/service/ProjectService.java

@@ -93,4 +93,12 @@ public interface ProjectService {
      * @return
      */
     ModelMap getProjectsNum();
+
+    /**
+     * 获取结项状态end 为0 的项目
+     * @param pageInfo
+     * @param filter
+     * @return
+     */
+    Page<Project> getNotEndProjects(PageInfo pageInfo, SearchFilter filter);
 }

+ 5 - 5
donate-console/src/main/java/com/uas/console/donate/service/impl/ProjectEvolveServiceImpl.java

@@ -18,13 +18,13 @@ 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);
     }
+
+    @Override
+    public List<ProjectEvolve> findByProId(Long proId) {
+        return projectEvolveDao.findByProId(proId);
+    }
 }

+ 34 - 0
donate-console/src/main/java/com/uas/console/donate/service/impl/ProjectReportServiceImpl.java

@@ -0,0 +1,34 @@
+package com.uas.console.donate.service.impl;
+
+import com.uas.console.donate.dao.ProjectReportDao;
+import com.uas.console.donate.model.ProjectReport;
+import com.uas.console.donate.service.ProjectReportService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+@Service
+public class ProjectReportServiceImpl implements ProjectReportService {
+
+    @Autowired
+    private ProjectReportDao projectReportDao;
+
+    public ProjectReport save(ProjectReport projectReport){
+        projectReport.setStatus(1);
+        projectReport.setSubmitTime(new Date());
+        return projectReportDao.save(projectReport);
+    }
+
+    @Override
+    public void deleteById(Long id) {
+        projectReportDao.delete(id);
+    }
+
+    @Override
+    public List<ProjectReport> findByProId(Long proId) {
+        return projectReportDao.findByProId(proId);
+    }
+
+}

+ 44 - 16
donate-console/src/main/java/com/uas/console/donate/service/impl/ProjectServiceImpl.java

@@ -2,10 +2,7 @@ package com.uas.console.donate.service.impl;
 
 
 import com.uas.console.donate.core.support.SystemSession;
-import com.uas.console.donate.dao.OrgDao;
-import com.uas.console.donate.dao.ProjectDao;
-import com.uas.console.donate.dao.ProjectFinanceDao;
-import com.uas.console.donate.dao.ProjectReportDao;
+import com.uas.console.donate.dao.*;
 import com.uas.console.donate.model.*;
 import com.uas.console.donate.service.ProjectService;
 import com.uas.platform.core.model.PageInfo;
@@ -41,6 +38,9 @@ public class ProjectServiceImpl implements ProjectService {
     @Autowired
     private ProjectReportDao projectReportDao;
 
+    @Autowired
+    private ProjectConcludeDao projectConcludeDao;
+
     //项目发起,有草稿则取出草稿
     public Project show(){
         if(projectDao.getDraft()==null){
@@ -63,6 +63,7 @@ public class ProjectServiceImpl implements ProjectService {
         if(project.getPublish()==null||project.getPublish()==1){
             project.setPublish(1);
         }
+        project.setEnd((short) 0);
         project = projectDao.save(project);
         return project;
     }
@@ -83,6 +84,8 @@ public class ProjectServiceImpl implements ProjectService {
         //设置未审核状态
         project.setStatus(0);
 
+        project.setEnd((short) 0);
+
         return projectDao.save(project);
     }
 
@@ -203,6 +206,16 @@ public class ProjectServiceImpl implements ProjectService {
         return getAllProjects(pageInfo, filter);
     }
 
+
+    @Override
+    public Page<Project> getNotEndProjects(PageInfo pageInfo, SearchFilter filter) {
+        // 已批准
+        pageInfo.expression(PredicateUtils.eq("status", 1, false));
+        // 未结项
+        pageInfo.expression(PredicateUtils.or(PredicateUtils.ne("end", 1, false),PredicateUtils.isNull("end")));
+        return getAllProjects(pageInfo, filter);
+    }
+
     @Override
     public ModelMap saveFinance(ProjectFinance finance, Long proId) {
         ModelMap map = new ModelMap();
@@ -242,6 +255,33 @@ public class ProjectServiceImpl implements ProjectService {
         return map;
     }
 
+    /**
+     * 保存结项报告
+     *
+     * @param conclude
+     * @param proId
+     * @return
+     */
+    @Override
+    public ModelMap saveConclude(ProjectConclude conclude, Long proId) {
+        ModelMap map = new ModelMap();
+        try {
+            Date date = new Date();
+            conclude.setProId(proId);
+            conclude.setSubmitTime(date);
+            conclude.setStatus(1);
+            Project project = projectDao.findOne(proId);
+            project.setModifyTime(date);
+            projectDao.save(project);
+            projectConcludeDao.save(conclude);
+            map.put("success", true);
+        } catch (Exception e) {
+            e.printStackTrace();
+            map.put("error", true);
+        }
+        return map;
+    }
+
     /**
      * 获取项目执行天数
      *
@@ -270,18 +310,6 @@ public class ProjectServiceImpl implements ProjectService {
         return projectReportDao.findByProId(id).size();
     }
 
-    /**
-     * 保存结项报告
-     *
-     * @param conclude
-     * @param id
-     * @return
-     */
-    @Override
-    public ModelMap saveConclude(ProjectConclude conclude, Long id) {
-        return null;
-    }
-
     /**
      * 获取已保存的项目草稿
      *

+ 6 - 2
donate-console/src/main/webapp/WEB-INF/views/index.html

@@ -143,8 +143,9 @@
                         <i class="fa fa-angle-left pull-right"></i>
                     </a>
                     <ul class="treeview-menu">
-                        <li id=""><a href="http://10.10.101.23:20010/carousels/donate">Banner设置</a></li>
-                        <li id=""><a >内容框背景设置</a></li>
+                        <li><a href="http://10.10.101.23:20010/carousels/donate" target="_blank">Banner设置(PC)</a></li>
+                        <li><a href="http://10.10.101.23:20010/carousels/donate" target="_blank">Banner设置(IM)</a></li>
+                        <li><a >内容框背景设置</a></li>
                     </ul>
                 </li>
                 <li class="jpress_block"></li>
@@ -162,8 +163,11 @@
 <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 src='static/lib/angular/angular.min.js'></script>
 <script type="text/javascript" src="static/lib/require.js"
         data-main="static/js/index/main.js"></script>
+<!--<script src="static/lib/text-angular/textAngular-rangy.min.js"></script>-->
+<!--<script src="static/lib/text-angular/textAngular.min.js"></script>-->
 <script type="text/javascript">
     $('#login').on('click', function () {
         $.get('sso/login', function(data) {

+ 46 - 11
donate-console/src/main/webapp/resources/js/index/app.js

@@ -149,6 +149,18 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-
         return sHtml.replace(/[<>&"]/g,function(c){return {'<':'&lt;','>':'&gt;','&':'&amp;','"':'&quot;'}[c];});
     };
 
+    var getObjectURL = function (file) {
+        var url = null;
+        if (window.createObjectURL != undefined) { // basic
+            url = window.createObjectURL(file);
+        } else if (window.URL != undefined) { // mozilla(firefox)
+            url = window.URL.createObjectURL(file);
+        } else if (window.webkitURL != undefined) { // webkit or chrome
+            url = window.webkitURL.createObjectURL(file);
+        }
+        return url;
+    };
+
     /**
      * 项目列表
      */
@@ -295,6 +307,8 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-
 
         }]);
 
+
+
     /**
      * 项目详情框
      */
@@ -305,7 +319,7 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-
             // 获取项目详情
             Project.getDetailById({id :id}, {}, function(data) {
                 $scope.project = data;
-                $scope.code = $sce.trustAsHtml( $scope.project.introduction);
+                $scope.code = $sce.trustAsHtml($scope.project.introduction);
             }, function() {
                 toaster.pop('error', '详情加载失败');
             });
@@ -347,7 +361,7 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-
         };
 
         $scope.deleteSchedule = function(scheduleId) {
-            Project.deleteSchedule({scheduleId: scheduleId}, {}, function() {
+            Project.deleteSchedule({id: scheduleId}, {}, function() {
                 toaster.pop('success', '操作成功');
                 // 重新加载
                 $scope.getSchedules();
@@ -1431,7 +1445,7 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-
                     pageParams.searchFilter = { // 筛选条件
                         keyword: $scope.keyword
                     };
-                    Project.getAudited.call(null, BaseService.parseParams(pageParams), function (page) {
+                    Project.getNotEnd.call(null, BaseService.parseParams(pageParams), function (page) {
                         $scope.loading = false;
                         if (page) {
                             params.total(page.totalElements);
@@ -1582,6 +1596,7 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-
                     data: data
                 }).success(function(data){
                     toaster.pop('success', '发布财务信息成功');
+                    $modalInstance.close();
                 }).error(function(data){
                     toaster.pop('error', '出现错误,发布失败');
                 });
@@ -1593,8 +1608,8 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-
     /**
      * 报告填写项目列表
      */
-    app.controller('ProjectReportListCtrl', ['$scope', 'toaster', 'ngTableParams', 'BaseService', 'Project', '$modal',
-        function ($scope, toaster, ngTableParams, BaseService, Project, $modal) {
+    app.controller('ProjectReportListCtrl', ['$scope', 'toaster', 'ngTableParams', 'BaseService', 'Project', '$modal', '$http',
+        function ($scope, toaster, ngTableParams, BaseService, Project, $modal, $http) {
 
             $scope.keyword = '';
             $scope.selectedArea = '全部';
@@ -1623,7 +1638,7 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-
                         keyword: $scope.keyword,
                         area: $scope.selectedArea
                     };
-                    Project.getAudited.call(null, BaseService.parseParams(pageParams), function (page) {
+                    Project.getNotEnd.call(null, BaseService.parseParams(pageParams), function (page) {
                         $scope.loading = false;
                         if (page) {
                             params.total(page.totalElements);
@@ -1674,8 +1689,8 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-
     /**
      * 报告填写详情框
      */
-    app.controller('ProjectReportDetailCtrl', ['$scope', 'Project', 'toaster', '$modalInstance', 'BaseService', 'id', '$upload',
-        function($scope, Project, toaster, $modalInstance, BaseService, id, $upload) {
+    app.controller('ProjectReportDetailCtrl', ['$scope', 'Project', 'toaster', '$modalInstance', 'BaseService', 'id', '$http',
+        function($scope, Project, toaster, $modalInstance, BaseService, id, $http) {
 
             $scope.report = {
                 path: null,
@@ -1699,10 +1714,28 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-
             };
             loadData();
 
+            // 图片上传
+            $scope.fileChanged = function(ele){
+                $scope.report.file = ele.files[0];
+                $scope.imgUrl = getObjectURL(ele.files[0]);
+                $scope.$apply();
+            };
+
             $scope.cancel= function() {
                 $modalInstance.dismiss();
             };
 
+            // delete
+            $scope.deleteSchedule = function(scheduleId) {
+                Project.deleteSchedule({id: scheduleId}, {}, function() {
+                    toaster.pop('success', '操作成功');
+                    // 重新加载
+                    loadData();
+                }, function() {
+                    toaster.pop('error', '出现错误,操作失败');
+                });
+            };
+
             // 发布
             $scope.saveReport = function(report) {
                 var data = new FormData();
@@ -1719,6 +1752,7 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-
                     data: data
                 }).success(function(data){
                     toaster.pop('success', '发布进度信息成功');
+                    $modalInstance.close();
                 }).error(function(data){
                     toaster.pop('error', '出现错误,发布失败');
                 });
@@ -1760,7 +1794,7 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-
                         keyword: $scope.keyword,
                         area: $scope.selectedArea
                     };
-                    Project.getAudited.call(null, BaseService.parseParams(pageParams), function (page) {
+                    Project.getNotEnd.call(null, BaseService.parseParams(pageParams), function (page) {
                         $scope.loading = false;
                         if (page) {
                             params.total(page.totalElements);
@@ -1811,8 +1845,8 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-
     /**
      * 结项管理详情框
      */
-    app.controller('ProjectManagementDetailCtrl', ['$scope', 'Project', 'toaster', '$modalInstance', 'BaseService', 'id', '$upload',
-        function($scope, Project, toaster, $modalInstance, BaseService, id, $upload) {
+    app.controller('ProjectManagementDetailCtrl', ['$scope', 'Project', 'toaster', '$modalInstance', 'BaseService', 'id', '$http',
+        function($scope, Project, toaster, $modalInstance, BaseService, id, $http) {
 
             $scope.conclude = {
                 description: null
@@ -1858,6 +1892,7 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-
                     data: data
                 }).success(function(data){
                     toaster.pop('success', '发布结项信息成功');
+                    $modalInstance.close();
                 }).error(function(data){
                     toaster.pop('error', '出现错误,发布失败');
                 });

+ 9 - 3
donate-console/src/main/webapp/resources/js/index/services/Project.js

@@ -19,6 +19,11 @@ define ([ 'ngResource' ], function() {
                     _state: 'refused'
                 }
             },
+            getNotEnd: {
+                params : {
+                    _state: 'waiting'
+                }
+            },
             // 获取项目详情
             getDetailById: {
                 url: 'project/detail/:id',
@@ -33,15 +38,16 @@ define ([ 'ngResource' ], function() {
             },
             // 获取所有项目进度
             getSchedules: {
-                url:'projectEvolve/getSchedules/:id',
+                url:'projectReport/getSchedules/:id',
                 method: 'GET',
                 params: {
                     id: 'id'
-                }
+                },
+                isArray: true
             },
             // 删除项目进度
             deleteSchedule: {
-                url:'projectEvolve/delete/:id',
+                url:'projectReport/delete/:id',
                 method: 'POST',
                 params: {
                     id: 'scheduleId'

+ 11 - 0
donate-console/src/main/webapp/resources/lib/rangy/.npmignore

@@ -0,0 +1,11 @@
+roadmap.txt
+release_process.txt
+/.idea
+/builder
+/dist
+/demos
+/external
+/fiddlings
+/spec
+/src
+/test

+ 21 - 0
donate-console/src/main/webapp/resources/lib/rangy/LICENSE

@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Tim Down
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 24 - 0
donate-console/src/main/webapp/resources/lib/rangy/README.md

@@ -0,0 +1,24 @@
+Rangy
+=====
+
+A cross-browser JavaScript range and selection library.
+
+The current version is version 1.3.0.
+
+The latest source code and releases are on [GitHub](../../releases).
+
+## Bower
+
+There is now an official Rangy package for Bower with Rangy 1.2 and 1.3 versions, called `rangy`.
+
+## AMD
+
+Rangy 1.3 has AMD support.
+
+## NPM
+
+There is an official Rangy module on NPM called [`rangy`](https://www.npmjs.org/package/rangy).
+
+## Documentation
+
+Documentation is in [the GitHub wiki](https://github.com/timdown/rangy/wiki). 

+ 31 - 0
donate-console/src/main/webapp/resources/lib/rangy/package.json

@@ -0,0 +1,31 @@
+{
+    "name": "rangy",
+    "description": "A cross-browser DOM range and selection library",
+    "version": "1.3.0",
+    "author": {
+        "name": "Tim Down",
+        "email": "tim@timdown.co.uk",
+        "url": "http://timdown.co.uk/"
+    },
+    "keywords": ["range", "selection", "caret", "DOM"],
+    "homepage": "https://github.com/timdown/rangy",
+    "bugs": {
+        "url": "https://github.com/timdown/rangy/issues"
+    },
+    "licenses": [
+        {
+            "type": "MIT",
+            "url": "http://www.opensource.org/licenses/mit-license.php"
+        }
+    ],
+    "repository": {
+        "type": "git",
+        "url": "https://github.com/timdown/rangy.git"
+    },
+    "main": "lib/rangy-core.js",
+    "directories": {
+        "lib": "./lib"
+    },
+    "dependencies": {},
+    "devDependencies": {}
+}

+ 23 - 83
donate-console/src/main/webapp/resources/view/project/project_detail.html

@@ -93,13 +93,13 @@
                                 <!--<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>-->
+                                <!--&lt;!&ndash;<p>1、基层团组织通过学校在学校内公布申请条件,学生以及其监护人提出求助申请学校对申请学生进行家访,核实家庭经济状况后报县级团委审核,县级团委上报市级团委汇总;</p>&ndash;&gt;-->
+                                <!--&lt;!&ndash;<p>2、确认市级团委汇总地区申请资料后报市青基会;</p>&ndash;&gt;-->
+                                <!--&lt;!&ndash;<p>3、市青基会终审申请,制作项目档案,并报理事会审议;审议通过后向申请人进行资助,并做审计和公示。</p>&ndash;&gt;-->
+                                <!--<p>{{project.executionPlan}}</p>-->
+                            <!--</div>-->
                             <div class="projectIntro">
                                 <h3>执行机构</h3>
                                 <p>{{project.orgName}}</p>
@@ -237,21 +237,12 @@
     </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'">
+        <div ng-if="schedules.length == 0" class="list-message">
+            <p class="first-txt" style="text-align: center; color: #a0a0a0; font-size: 22px;">
+                该项目暂无进度!
+            </p>
+        </div>
+        <div class="list-message" ng-repeat="schedule in schedules | orderBy : '-date'">
             <p class="first-txt">
                 {{schedule.discription}}
             </p>
@@ -289,32 +280,11 @@
                 <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-if="projectRecords.length == 0" class="list-message">
+                <td colspan="6" class="first-txt" style="text-align: center; color: #a0a0a0; font-size: 22px;">
+                    该项目暂无进度!
+                </td>
+            </tbody>
             <tbody ng-repeat="record in projectRecords">
             <tr>
                 <td></td>
@@ -361,41 +331,11 @@
                 <span>支出明细</span>
             </div>
             <div class="list-body clearfix">
-                <!--<div class="msg-list">-->
-                    <!--<span class="fl">2017-09-13</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 ng-if="projectFinance.length == 0" class="list-message">
+                <p colspan="6" class="first-txt" style="text-align: center; color: #a0a0a0; font-size: 22px;">
+                    该项目暂无进度!
+                </p>
+                </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">

+ 4 - 6
donate-console/src/main/webapp/resources/view/project/project_launch_1.html

@@ -589,23 +589,21 @@
                                         <select class="area-select" ng-model="project.province"
                                                 ng-options="key as key for (key,value) in provinces"
                                                 ng-change="project.city='';" required>
-                                            <option value="">请选择</option>
+                                            <option value=""></option>
                                         </select>
-                                        <span>省</span>
                                     </div>
-                                    <div class="fl">
+                                    <div class="fl" style="margin: 0 20px;">
                                         <select class="area-select fl" ng-model="project.city"
                                                 ng-options="key as key for (key,value) in provinces[project.province]"
                                                 required>
-                                            <option value="">请选择</option>
+                                            <option value=""></option>
                                         </select>
-                                        <span>市</span>
                                     </div>
                                     <div class="fl">
                                         <select class="area-select" ng-model="project.district"
                                                 ng-options="value as value for value in provinces[project.province][project.city]"
                                                 required>
-                                            <option value="">请选择</option>
+                                            <option value=""></option>
                                         </select>
                                     </div>
                                 </div>

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

@@ -602,7 +602,7 @@
                                     </div>
                                     <div class="item clearfix">
                                         <span class="fl">联系电话</span>
-                                        <input type="text" class="form-control fl" ng-model="project.workunit" ng-maxlength="20" placeholder="不超过二十个字" required/>
+                                        <input type="text" class="form-control fl" ng-model="project.personTel" ng-maxlength="20" placeholder="填写联系电话" required/>
                                     </div>
                                     <div class="item clearfix">
                                         <span class="fl">个人简介</span>

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

@@ -9,14 +9,14 @@
     <div class="right-nav"><span class="active" style="margin-left: -70px;">项目进度</span><span>进度录入</span></div>
     <!--项目进度-->
     <div class="right-list show">
-        <div ng-if="schedules == null" class="list-message">
+        <div ng-if="schedules.length == 0" class="list-message">
             <p class="first-txt" style="text-align: center; color: #a0a0a0; font-size: 22px;">
                 该项目暂无进度!
             </p>
         </div>
         <div class="list-message" ng-repeat="schedule in schedules | orderBy : 'date'">
             <p class="first-txt">
-                {{schedule.discription}}
+                {{schedule.description}}
             </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>
@@ -24,14 +24,14 @@
     <!--进度录入-->
     <div class="right-list">
         <form name="reportForm">
-            <!-- TODO 加富文本编辑器 -->">
+            <!-- TODO 加富文本编辑器 -->
             <div class="message-detail">
                 <div class="header">
-                    <div class="img"><img src="static/images/pic.png" alt="">图片</div>
-                    <input type="file" ng-model="report.file" accept="image/*" ng-multiple="false" onchange='angular.element(this).scope().fileChanged(this)'>
+                    <!--<div class="img"><img src="static/images/pic.png" alt="">图片</div>-->
+                   图片:<input type="file" accept="image/*" id="img" ng-multiple="false" onchange='angular.element(this).scope().fileChanged(this)' required>
                 </div>
                 <div class="body">
-                    <textarea name="" ng-model="report.description" class="form-control" id="" cols="30" rows="10" placeholder="请输入近期执行进度记录,并上传相关图片..."></textarea>
+                    <textarea name="" ng-model="report.description" required class="form-control" id="" cols="30" rows="10" placeholder="请输入近期执行进度记录,并上传相关图片..."></textarea>
                 </div>
                 <div class="release"><button ng-disabled="reportForm.$invalid" ng-click="saveReport(report)">发布</button></div>
             </div>

+ 14 - 0
donate-service/src/main/java/com/uas/service/donate/model/Project.java

@@ -240,6 +240,12 @@ public class Project implements Serializable{
     @Column(name = "pro_join_amount")
     private Long joinAmount;
 
+    /**
+     * 是否已结项(0未结项, 1已结项)
+     */
+    @Column(name = "pro_end")
+    private Short end;
+
     /**
      * 是否已结束 (1已过期,0未过期)
      */
@@ -564,4 +570,12 @@ public class Project implements Serializable{
     public void setTotalCost(Double totalCost) {
         this.totalCost = totalCost;
     }
+
+    public Short getEnd() {
+        return end;
+    }
+
+    public void setEnd(Short end) {
+        this.end = end;
+    }
 }

+ 1 - 1
donate-service/src/main/webapp/resources/js/mobile/app.js

@@ -1,6 +1,6 @@
 define([ 'angularAMD', 'ngRoute', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', '../common/services', 'angular-toaster', 'ngSanitize', 'common/query/Activity', 'common/query/Project', 'common/query/User'], function(angularAMD) {
     'use strict';
-    var app = angular.module('myApp', [ 'ngRoute', 'ui.router', 'ui.bootstrap', 'ng.local', 'ngTable', 'common.services', 'toaster', 'ActivityService', 'ProjectService', 'UserService']);
+    var app = angular.module('myApp', [ 'ngRoute', 'ui.router', 'ui.bootstrap', 'ng.local', 'ngTable', 'common.services', 'toaster', 'ngSanitize', 'ActivityService', 'ProjectService', 'UserService']);
     app.init = function() {
         angularAMD.bootstrap(app);
     };

+ 1 - 1
donate-service/src/main/webapp/resources/js/project/app.js

@@ -4,7 +4,7 @@
  */
 define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'common/services', 'common/directives', 'angular-toaster', 'ngSanitize', 'common/query/Project'], function(angularAMD) {
 	'use strict';
-	var app = angular.module('myApp', [ 'ui.router', 'ui.bootstrap', 'ng.local', 'ngTable', 'common.services', 'common.directives', 'toaster', 'ProjectService']);
+	var app = angular.module('myApp', [ 'ui.router', 'ui.bootstrap', 'ng.local', 'ngTable', 'common.services', 'common.directives', 'toaster', 'ngSanitize', 'ProjectService']);
 	app.init = function() {
 		angularAMD.bootstrap(app);
 	};

+ 8 - 3
donate-service/src/main/webapp/resources/js/project/controllers/ProjectDetailCtrl.js

@@ -1,7 +1,7 @@
 define([ 'app/app' ], function(app) {
     'use strict';
-    app.register.controller('ProjectDetailCtrl', ['$scope', '$rootScope', 'Project', '$stateParams', 'BaseService',
-        function ($scope, $rootScope, Project, $stateParams, BaseService) {
+    app.register.controller('ProjectDetailCtrl', ['$scope', '$rootScope', 'Project', '$stateParams', 'BaseService', '$sce',
+        function ($scope, $rootScope, Project, $stateParams, BaseService, $sce) {
         $rootScope.page = 'project';
         BaseService.scrollBackToTop();
         $scope.donation = null;
@@ -48,7 +48,12 @@ define([ 'app/app' ], function(app) {
 
             // 同类项目
             Project.getSameKinds({id:id}, {}, function(data) {
-                $scope.sameKinds = data;
+                $scope.sameKinds = [];
+                if (data.length > 1) {
+                    $scope.sameKinds = data.slice(0, 2);
+                } else {
+                    $scope.sameKinds = data;
+                }
             }, function (error) {
                 console.log(error);
             });

+ 21 - 22
donate-service/src/main/webapp/resources/view/mobile/mobile_project_detail.html

@@ -624,8 +624,7 @@
                 </div>
                 <div class="bottom">
                     <div class="list-show">
-                        <div>
-                            <p>{{project.introduction}}</p>
+                        <div ng-bind-html="project.introduction">
                         </div>
                         <div class="btnClick">
                             展开全文<i class="fa fa-angle-down"></i>
@@ -642,16 +641,16 @@
                     </p>
                 </div>
             </div>
-            <div class="project-intro">
-                <div class="top">
-                    <span>执行计划</span>
-                </div>
-                <div class="bottom">
-                    <p>
-                        {{project.executionPlan}}
-                    </p>
-                </div>
-            </div>
+            <!--<div class="project-intro">-->
+                <!--<div class="top">-->
+                    <!--<span>执行计划</span>-->
+                <!--</div>-->
+                <!--<div class="bottom">-->
+                    <!--<p>-->
+                        <!--{{project.executionPlan}}-->
+                    <!--</p>-->
+                <!--</div>-->
+            <!--</div>-->
             <div class="project-intro">
                 <div class="top">
                     <span>执行机构</span>
@@ -844,16 +843,16 @@
                     </p>
                 </div>
             </div>
-            <div class="project-intro">
-                <div class="top">
-                    <span>执行计划</span>
-                </div>
-                <div class="bottom">
-                    <p>
-                        {{project.executionPlan}}
-                    </p>
-                </div>
-            </div>
+            <!--<div class="project-intro">-->
+                <!--<div class="top">-->
+                    <!--<span>执行计划</span>-->
+                <!--</div>-->
+                <!--<div class="bottom">-->
+                    <!--<p>-->
+                        <!--{{project.executionPlan}}-->
+                    <!--</p>-->
+                <!--</div>-->
+            <!--</div>-->
             <div class="project-intro">
                 <div class="top">
                     <span>执行机构</span>

+ 15 - 17
donate-service/src/main/webapp/resources/view/project/project_detail.html

@@ -309,7 +309,6 @@
         width: 260px;
         height: 44px;
         line-height: 44px;
-        margin-top: 70px;
         text-align: center;
     }
     .section2 .project-txt .button a{
@@ -691,7 +690,7 @@
                             <div class="status-evolve">
                                 <span class="start">发起/审核</span>
                                 <span class="execution">执行中</span>
-                                <span class="end">结束</span>
+                                <span class="end">结束</span>
                             </div>
                             <div class="status-line">
                                 <div class="line">
@@ -712,7 +711,7 @@
                             <div class="status-evolve">
                                 <span class="start">发起/审核</span>
                                 <span class="execution">执行中</span>
-                                <span class="end">结束</span>
+                                <span class="end">结束</span>
                             </div>
                             <div class="status-line">
                                 <div class="line">
@@ -745,8 +744,8 @@
                     <div class="all-line"></div>
                     <!--已参与已筹款-->
                     <div class="already">
-                        <span>已参与:<em ng-bind="project.joinAmount | number"></em>人</span>
-                        <span>已筹款:<em ng-bind="project.totalAmount | number: 2"></em>元<span>({{percentage * 100 | number: 2}}%)</span></span>
+                        <span>已参与:<em ng-bind="project.joinAmount || 0 | number"></em>人</span>
+                        <span>已筹款:<em ng-bind="project.totalAmount || 0 | number: 2"></em>元<span>({{percentage * 100 || 0 | number: 2}}%)</span></span>
                     </div>
                     <!--我要捐款-->
                     <button class="button" data-toggle="modal" data-target="#layer" ng-disabled="project.overdue == '已结束'">我要捐款</button>
@@ -762,24 +761,23 @@
             <!--项目详情-->
             <div class="bottom clearfix show" >
                 <div class="project-txt fl">
-                    <div class="project-intro">
+                    <div class="project-intro" ng-bind-html="project.introduction">
                         <!--<p>晚上上自修课,语文老师坐镇。同学们安静得做作业。忽然,老师咳嗽了一声,同学们惊异地抬起头,随即又低下了头。紧接着不知从哪又来了一声咳嗽声——是郭宵。老师瞅了他一眼,随即又若无其事的低下头,道:“有人是傻子。”“郭宵是也。”蔡元杰随即答道。“有人是疯子。”“蔡元杰是也。”全班同学超有默契的答道。顿时,欢乐一片。</p>-->
                         <!--<img src="static/images/activeCenter/active05.png" alt="">-->
-                        <span ng-bind="project.introduction"></span>
                     </div>
                     <div class="projectIntro">
                         <h3>资助人群</h3>
                         <p><span ng-bind="project.population"></span></p>
                     </div>
-                    <div class="projectIntro">
-                        <h3>执行计划</h3>
-                        <!--<p>1、基层团组织通过学校在学校内公布申请条件,学生以及其监护人提出求助申请学校对申请学生进行家访,核实家庭经济状况后报县级团委审核,县级团委上报市级团委汇总;</p>-->
-                        <!--<p>2、确认市级团委汇总地区申请资料后报市青基会;</p>-->
-                        <!--<p>3、市青基会终审申请,制作项目档案,并报理事会审议;审议通过后向申请人进行资助,并做审计和公示。</p>-->
-                        <p>
-                            <span ng-bind="project.executionPlan"></span>
-                        </p>
-                    </div>
+                    <!--<div class="projectIntro">-->
+                        <!--<h3>执行计划</h3>-->
+                        <!--&lt;!&ndash;<p>1、基层团组织通过学校在学校内公布申请条件,学生以及其监护人提出求助申请学校对申请学生进行家访,核实家庭经济状况后报县级团委审核,县级团委上报市级团委汇总;</p>&ndash;&gt;-->
+                        <!--&lt;!&ndash;<p>2、确认市级团委汇总地区申请资料后报市青基会;</p>&ndash;&gt;-->
+                        <!--&lt;!&ndash;<p>3、市青基会终审申请,制作项目档案,并报理事会审议;审议通过后向申请人进行资助,并做审计和公示。</p>&ndash;&gt;-->
+                        <!--<p>-->
+                            <!--<span ng-bind="project.executionPlan"></span>-->
+                        <!--</p>-->
+                    <!--</div>-->
                     <div class="projectIntro">
                         <h3>执行机构</h3>
                         <p><span ng-bind="project.orgName"></span></p>
@@ -787,7 +785,7 @@
                         <p>联系电话:<span ng-bind="project.personTel"></span></p>
                     </div>
                     <div class="button">
-                        <a data-toggle="modal" data-target="#layer"  ng-disabled="project.overdue == '已结束'">我要捐款</a>
+                        <button class="button" data-toggle="modal" data-target="#layer"  ng-disabled="project.overdue == '已结束'">我要捐款</button>
                     </div>
                 </div>
                 <div ng-include src="'static/view/project/project_detail_side.html'"></div>

+ 3 - 3
donate-service/src/main/webapp/resources/view/project/project_detail_side.html

@@ -35,14 +35,14 @@
         </div>
     </div>
     <!--同类项目-->
-    <div class="box3"  ng-if="sameKinds.length() != 0">
+    <div class="box3"  ng-if="sameKinds.length != 0">
         <h4>同类项目</h4>
         <div class="item-list clearfix" ng-repeat="sameKind in sameKinds | limitTo: 2">
             <div class="img fl">
-                <a ui-sref="detail(sameKind.id)"><img src="{{sameKind.listImg}}" alt="项目缩略图"></a>
+                <a href="#/detail/{{sameKind.id}}"><img src="{{sameKind.listImg}}" alt="项目缩略图"></a>
             </div>
             <div class="txt fl">
-                <p><a ui-sref="detail(sameKind.id)">{{sameKind.name}}</a></p>
+                <p><a href="#/detail/{{sameKind.id}}">{{sameKind.name}}</a></p>
                 <span ng-bind="sameKind.proSummary"></span>
             </div>
         </div>