Quellcode durchsuchen

培训班管理

lizeyu vor 8 Monaten
Ursprung
Commit
1145d1c490
23 geänderte Dateien mit 762 neuen und 276 gelöschten Zeilen
  1. 1 1
      lib/数据更新脚本.txt
  2. 134 0
      src/main/java/com/ghsc/partybuild/controller/train/PxTrainingClassController.java
  3. 3 0
      src/main/java/com/ghsc/partybuild/mapper/PartyUserCQuery.java
  4. 3 0
      src/main/java/com/ghsc/partybuild/mapper/PxTrainingClassCQuery.java
  5. 15 0
      src/main/java/com/ghsc/partybuild/service/PxTrainingClassService.java
  6. 140 5
      src/main/java/com/ghsc/partybuild/service/impl/train/PxTrainingClassServiceImpl.java
  7. 12 0
      src/main/java/com/ghsc/partybuild/vo/trian/PxTrainingClassCourseVo.java
  8. 1 0
      src/main/java/com/ghsc/partybuild/vo/trian/PxTrainingClassUserVo.java
  9. 30 0
      src/main/resources/mapping/PartyUserCQuery.xml
  10. 49 6
      src/main/resources/mapping/PxTrainingClassCQuery.xml
  11. 51 1
      src/main/resources/static/app/main/app.js
  12. 12 12
      src/main/resources/static/app/main/controllers.js
  13. 6 5
      src/main/resources/static/app/main/train/trainingClass/course.html
  14. 31 59
      src/main/resources/static/app/main/train/trainingClass/course.js
  15. 16 52
      src/main/resources/static/app/main/train/trainingClass/courseEdit.html
  16. 14 87
      src/main/resources/static/app/main/train/trainingClass/courseEdit.js
  17. 121 0
      src/main/resources/static/app/main/train/trainingClass/detail.html
  18. 59 0
      src/main/resources/static/app/main/train/trainingClass/detail.js
  19. 16 16
      src/main/resources/static/app/main/train/trainingClass/edit.html
  20. 31 24
      src/main/resources/static/app/main/train/trainingClass/edit.js
  21. 7 0
      src/main/resources/static/app/main/train/trainingClass/list.html
  22. 10 8
      src/main/resources/static/app/main/train/trainingClass/list.js
  23. BIN
      src/main/resources/static/doc/template/参培人员导入模版.xlsx

+ 1 - 1
lib/数据更新脚本.txt

@@ -348,6 +348,6 @@ SET FOREIGN_KEY_CHECKS = 1;
 INSERT INTO `cf_menu` (`MENUID`, `APPLICATIONID`, `PARENTMENUID`, `MNUSYSTEM`, `MENUORDER`, `MENUNO`, `MENUNAME`, `MENUPROGRAM`, `MENUPIC`, `MENUDESC`, `ISVISIBLE`, `ISLEAF`, `ISBLANK`) VALUES ('1b7e571e-0001-4475-9e24-98636ba0bd76', 'f0c4fa7f9f3c4fb6bd56aac608b7ad3f', '70958848-d81c-4679-9d89-11b5a5998060', NULL, 1, 'home.pxTrainingClassList', '培训班管理', '', '', '', 1, 1, NULL);
 INSERT INTO `cf_menu` (`MENUID`, `APPLICATIONID`, `PARENTMENUID`, `MNUSYSTEM`, `MENUORDER`, `MENUNO`, `MENUNAME`, `MENUPROGRAM`, `MENUPIC`, `MENUDESC`, `ISVISIBLE`, `ISLEAF`, `ISBLANK`) VALUES ('8638ba30-0002-4487-8c78-2e953857e6d4', 'f0c4fa7f9f3c4fb6bd56aac608b7ad3f', '1b7e571e-0001-4475-9e24-98636ba0bd76', NULL, 1, 'home.pxTrainingClassEdit', '修改培训班信息', NULL, NULL, NULL, 0, 0, NULL);
 INSERT INTO `cf_menu` (`MENUID`, `APPLICATIONID`, `PARENTMENUID`, `MNUSYSTEM`, `MENUORDER`, `MENUNO`, `MENUNAME`, `MENUPROGRAM`, `MENUPIC`, `MENUDESC`, `ISVISIBLE`, `ISLEAF`, `ISBLANK`) VALUES ('cd7e7a09-0003-4bbc-8246-36f7b0f62bcd', 'f0c4fa7f9f3c4fb6bd56aac608b7ad3f', '1b7e571e-0001-4475-9e24-98636ba0bd76', NULL, 2, 'home.pxTrainingClassAdd', '新增培训班信息', NULL, NULL, NULL, 0, 0, NULL);
-INSERT INTO `cf_menu` (`MENUID`, `APPLICATIONID`, `PARENTMENUID`, `MNUSYSTEM`, `MENUORDER`, `MENUNO`, `MENUNAME`, `MENUPROGRAM`, `MENUPIC`, `MENUDESC`, `ISVISIBLE`, `ISLEAF`, `ISBLANK`) VALUES ('f6ec1d5a-0004-47c0-bb7e-ce03f7eaf575', 'f0c4fa7f9f3c4fb6bd56aac608b7ad3f', '1b7e571e-0001-4475-9e24-98636ba0bd76', NULL, 3, 'home.pxTrainingClassShow', '查看培训班信息', NULL, NULL, NULL, 0, 0, NULL);
+INSERT INTO `cf_menu` (`MENUID`, `APPLICATIONID`, `PARENTMENUID`, `MNUSYSTEM`, `MENUORDER`, `MENUNO`, `MENUNAME`, `MENUPROGRAM`, `MENUPIC`, `MENUDESC`, `ISVISIBLE`, `ISLEAF`, `ISBLANK`) VALUES ('f6ec1d5a-0004-47c0-bb7e-ce03f7eaf575', 'f0c4fa7f9f3c4fb6bd56aac608b7ad3f', '1b7e571e-0001-4475-9e24-98636ba0bd76', NULL, 3, 'home.pxTrainingClassDetail', '查看培训班信息', NULL, NULL, NULL, 0, 0, NULL);
 INSERT INTO `cf_menu` (`MENUID`, `APPLICATIONID`, `PARENTMENUID`, `MNUSYSTEM`, `MENUORDER`, `MENUNO`, `MENUNAME`, `MENUPROGRAM`, `MENUPIC`, `MENUDESC`, `ISVISIBLE`, `ISLEAF`, `ISBLANK`) VALUES ('f6ec1d5a-0004-47c0-bb7e-ce03f7eaf575', 'f0c4fa7f9f3c4fb6bd56aac608b7ad3f', '1b7e571e-0001-4475-9e24-98636ba0bd76', NULL, 3, 'home.pxTrainingClassCourseList', '授课课程', NULL, NULL, NULL, 0, 0, NULL);
 

+ 134 - 0
src/main/java/com/ghsc/partybuild/controller/train/PxTrainingClassController.java

@@ -2,12 +2,15 @@ package com.ghsc.partybuild.controller.train;
 
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.ghsc.partybuild.controller.jsonmodel.RequsetData;
+import com.ghsc.partybuild.model.PxTrainingClassCourse;
 import com.ghsc.partybuild.service.PxTrainingClassService;
 import com.ghsc.partybuild.service.UserService;
 import com.ghsc.partybuild.util.DateUtils;
 import com.ghsc.partybuild.util.ExcelHelper;
 import com.ghsc.partybuild.util.JsonMapper;
 import com.ghsc.partybuild.util.StringUtils;
+import com.ghsc.partybuild.vo.trian.PxTrainingClassCourseVo;
+import com.ghsc.partybuild.vo.trian.PxTrainingClassUserVo;
 import com.ghsc.partybuild.vo.trian.PxTrainingClassVo;
 import com.github.pagehelper.PageInfo;
 import lombok.extern.slf4j.Slf4j;
@@ -17,6 +20,7 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
 import java.util.*;
+import java.util.stream.Collectors;
 
 @Slf4j
 @RestController
@@ -116,6 +120,99 @@ public class PxTrainingClassController {
         return result;
     }
 
+    @ResponseBody
+    @GetMapping("/getTrainingClassCourseList")
+    public RequsetData<List<PxTrainingClassCourseVo>> getTrainingClassCourseList(@RequestParam String trainingClassId) {
+        RequsetData<List<PxTrainingClassCourseVo>> result = new RequsetData<>();
+        result.setItem(pxTrainingClassService.getTrainingClassCourseList(trainingClassId));
+        return result;
+    }
+
+
+    @ResponseBody
+    @GetMapping("/getCourse")
+    public RequsetData<PxTrainingClassCourse> getCourse(@RequestParam(required = false) String id) {
+        RequsetData<PxTrainingClassCourse> res = new RequsetData<>();
+
+        PxTrainingClassCourse model = pxTrainingClassService.getCourseById(id);
+        if (model == null) {
+            UUID uuid = UUID.randomUUID();
+            model = new PxTrainingClassCourse();
+            model.setId(uuid.toString());
+        }
+
+        res.setItem(model);
+        return res;
+    }
+
+    @ResponseBody
+    @PostMapping("/saveCourse")
+    public RequsetData<String> saveCourse(@RequestBody PxTrainingClassCourse data) {
+        RequsetData<String> result = new RequsetData<String>();
+        int count = 0;
+        String message = "";
+
+        try {
+            count = pxTrainingClassService.saveCourse(data, userService.getLoginUser().getUserid());
+        } catch (Exception e) {
+            e.printStackTrace();
+            message = e.toString();
+        }
+
+        if (count > 0) {
+            result.setSuccess(true);
+            result.setMsg("保存成功!");
+        } else {
+            result.setSuccess(false);
+            result.setMsg("保存失败!" + message);
+        }
+        return result;
+    }
+
+    @ResponseBody
+    @PostMapping("/deleteCourse")
+    public RequsetData<Integer> deleteCourse(@RequestBody String id) {
+        RequsetData<Integer> result = new RequsetData<>();
+        int count = pxTrainingClassService.deleteCourse(id);
+
+        result.setItem(count);
+        result.setSuccess(count>0);
+        return result;
+    }
+
+    @ResponseBody
+    @RequestMapping("/importUser")
+    public RequsetData<List<PxTrainingClassUserVo>> importUser(@RequestBody Map<String, Object> reqMap) {
+        RequsetData<List<PxTrainingClassUserVo>> res = new RequsetData<>();
+        List<PxTrainingClassUserVo> dataList = new ArrayList<>();
+        String message = "";
+        try {
+
+            List<PxTrainingClassUserVo> userList = JsonMapper.jsonToObject(reqMap.get("userList").toString(), new TypeReference<List<PxTrainingClassUserVo>>() {
+            });
+
+            userList = userList.stream().filter(it -> !stringUtils.IsNullOrEmpty(it.getUserName())).collect(Collectors.toList());
+
+            dataList = pxTrainingClassService.importUser(userList);
+
+            if (dataList.stream().filter(it -> !stringUtils.IsNullOrEmpty(it.getErrorInfo())).count() > 0)
+                throw new Exception("存在错误数据");
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            message = e.getMessage() + "," + e.toString();
+        }
+        res.setItem(dataList);
+        if (stringUtils.IsNullOrEmpty(message)) {
+            res.setSuccess(true);
+            res.setMsg("操作成功!");
+        } else {
+            res.setSuccess(false);
+            res.setMsg("操作失败!" + message);
+        }
+        return res;
+    }
+
     @RequestMapping(value = "/export", method = RequestMethod.GET)
     public void exportLeaderTeam(HttpServletResponse response, @RequestParam(required = false) String dzzdm, @RequestParam(required = false) String trainingClassName, @RequestParam(required = false) @DateTimeFormat(pattern = dateTimeFormat) Date startDate, @RequestParam(required = false) @DateTimeFormat(pattern = dateTimeFormat) Date endDate) throws Exception {
         /**查询数据**/
@@ -129,6 +226,7 @@ public class PxTrainingClassController {
         List<String> titles = new ArrayList();
         titles.add("序号");
         titles.add("主办组织");
+        titles.add("培训班名称");
         titles.add("培训开始时间");
         titles.add("培训结束时间");
         titles.add("培训天数");
@@ -163,4 +261,40 @@ public class PxTrainingClassController {
         excelHelper.exportExcel(response, "培训班.xlsx", data);
     }
 
+    @RequestMapping(value = "/exportUser", method = RequestMethod.GET)
+    public void exportUser(HttpServletResponse response, @RequestParam(required = false) String id) throws Exception {
+        /**查询数据**/
+        List<PxTrainingClassUserVo> dataList = pxTrainingClassService.getTrainingClassUserList(id);
+
+        ExcelHelper excelHelper = new ExcelHelper();
+        ExcelHelper.ExcelData data = excelHelper.new ExcelData();
+
+        //列名
+        data.setName("培训班参培人员");
+        List<String> titles = new ArrayList();
+        titles.add("序号");
+        titles.add("所在支部");
+        titles.add("姓名");
+        titles.add("性别");
+        titles.add("手机号码");
+
+        data.setTitles(titles);
+
+        int i = 1;
+        List<List<Object>> rows = new ArrayList();
+        for (PxTrainingClassUserVo item : dataList) {
+            List<Object> row = new ArrayList();
+            row.add(i++);
+            row.add(item.getDzzmc());
+            row.add(item.getUserName());
+            row.add(item.getGender());
+            row.add(item.getPhone());
+            rows.add(row);
+        }
+        data.setRows(rows);
+
+        excelHelper.exportExcel(response, "培训班参培人员导出.xlsx", data);
+    }
+
+
 }

+ 3 - 0
src/main/java/com/ghsc/partybuild/mapper/PartyUserCQuery.java

@@ -70,6 +70,9 @@ public interface PartyUserCQuery {
     List<HashMap<String, Object>> selectAllUserList(@Param("dzzdm") String dzzdm, @Param("szdzbdm") String szdzbdm, @Param("zzlb") String zzlb, @Param("rybm") String rybm, @Param("xm") String xm, @Param("xb") String xb, @Param("mz") String mz, @Param("xl") String xl, @Param("mobile") String mobile, @Param("ryztList") List<String> ryztList,@Param("userNo")String userNo);
 
 
+    List<HashMap<String,Object>> selectAllUserByNameAndMobileList(@Param("userNameAndMobileList") List<String> userNameAndMobileList);
+
+
     /**
      * 党小组成员
      *

+ 3 - 0
src/main/java/com/ghsc/partybuild/mapper/PxTrainingClassCQuery.java

@@ -1,5 +1,6 @@
 package com.ghsc.partybuild.mapper;
 
+import com.ghsc.partybuild.vo.trian.PxTrainingClassCourseVo;
 import com.ghsc.partybuild.vo.trian.PxTrainingClassUserVo;
 import com.ghsc.partybuild.vo.trian.PxTrainingClassVo;
 import org.apache.ibatis.annotations.Param;
@@ -13,4 +14,6 @@ public interface PxTrainingClassCQuery {
     List<String> selectAddressList(@Param("userId") String userId);
 
     List<PxTrainingClassUserVo> selectTrainingClassUserList(@Param("trainingClassId") String trainingClassId);
+
+    List<PxTrainingClassCourseVo> selectTrainingClassCourseList(@Param("trainingClassId") String trainingClassId);
 }

+ 15 - 0
src/main/java/com/ghsc/partybuild/service/PxTrainingClassService.java

@@ -1,5 +1,8 @@
 package com.ghsc.partybuild.service;
 
+import com.ghsc.partybuild.model.PxTrainingClassCourse;
+import com.ghsc.partybuild.vo.trian.PxTrainingClassCourseVo;
+import com.ghsc.partybuild.vo.trian.PxTrainingClassUserVo;
 import com.ghsc.partybuild.vo.trian.PxTrainingClassVo;
 import com.github.pagehelper.PageInfo;
 
@@ -16,4 +19,16 @@ public interface PxTrainingClassService {
     int save(PxTrainingClassVo data, String userId);
 
     int delete(List<String> idList);
+
+    List<PxTrainingClassUserVo> getTrainingClassUserList(String trainingClassId);
+
+    List<PxTrainingClassCourseVo> getTrainingClassCourseList(String trainingClassId);
+
+    PxTrainingClassCourse getCourseById(String id);
+
+    int saveCourse(PxTrainingClassCourse data, String userId);
+
+    int deleteCourse(String id);
+
+    List<PxTrainingClassUserVo> importUser(List<PxTrainingClassUserVo> dataList) throws Exception;
 }

+ 140 - 5
src/main/java/com/ghsc/partybuild/service/impl/train/PxTrainingClassServiceImpl.java

@@ -3,16 +3,18 @@ package com.ghsc.partybuild.service.impl.train;
 import com.ghsc.partybuild.mapper.*;
 import com.ghsc.partybuild.model.*;
 import com.ghsc.partybuild.service.PxTrainingClassService;
+import com.ghsc.partybuild.util.DateUtils;
 import com.ghsc.partybuild.util.StringUtils;
+import com.ghsc.partybuild.vo.trian.PxTrainingClassCourseVo;
+import com.ghsc.partybuild.vo.trian.PxTrainingClassUserVo;
 import com.ghsc.partybuild.vo.trian.PxTrainingClassVo;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.Date;
-import java.util.List;
-import java.util.UUID;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Service("PxTrainingClassService")
 public class PxTrainingClassServiceImpl implements PxTrainingClassService {
@@ -25,7 +27,13 @@ public class PxTrainingClassServiceImpl implements PxTrainingClassService {
     @Autowired
     private PxTrainingClassCourseMapper pxTrainingClassCourseMapper;
     @Autowired
+    private PartyUserCQuery partyUserCQuery;
+    @Autowired
+    private ZzZzqkxxMapper zzZzqkxxMapper;
+    @Autowired
     private StringUtils stringUtils;
+    @Autowired
+    private DateUtils dateUtils;
 
     @Override
     public PageInfo<PxTrainingClassVo> getList(int pageIndex, int pageSize, String id, String dzzdm, String trainingClassName, Date startDate, Date endDate){
@@ -59,9 +67,10 @@ public class PxTrainingClassServiceImpl implements PxTrainingClassService {
         int result = 0;
         PxTrainingClass dbModel = pxTrainingClassMapper.selectByPrimaryKey(data.getId());
         if (dbModel == null) {
-            dbModel = new PxTrainingClassVo();
+            dbModel = new PxTrainingClass();
             dbModel.setId(data.getId());
             dbModel.setDzzdm(data.getDzzdm());
+            dbModel.setTrainingClassName(data.getTrainingClassName());
             dbModel.setBeginDate(data.getBeginDate());
             dbModel.setEndDate(data.getEndDate());
             dbModel.setAddress(data.getAddress());
@@ -77,6 +86,7 @@ public class PxTrainingClassServiceImpl implements PxTrainingClassService {
             result = pxTrainingClassMapper.insert(dbModel);
         } else {
             dbModel.setDzzdm(data.getDzzdm());
+            dbModel.setTrainingClassName(data.getTrainingClassName());
             dbModel.setBeginDate(data.getBeginDate());
             dbModel.setEndDate(data.getEndDate());
             dbModel.setAddress(data.getAddress());
@@ -96,8 +106,9 @@ public class PxTrainingClassServiceImpl implements PxTrainingClassService {
         if(data.getUserList().size() > 0){
             data.getUserList().forEach(item -> {
                 PxTrainingClassUser userModel = new PxTrainingClassUser();
-                userModel.setTrainingClassId(data.getId());
                 userModel.setId(UUID.randomUUID().toString());
+                userModel.setTrainingClassId(data.getId());
+                userModel.setDzzdm(item.getDzzdm());
                 userModel.setUserNo(item.getUserNo());
                 userModel.setUserName(item.getUserName());
                 userModel.setGenderId(item.getGenderId());
@@ -127,4 +138,128 @@ public class PxTrainingClassServiceImpl implements PxTrainingClassService {
 
         return pxTrainingClassMapper.deleteByExample(exp);
     }
+
+    @Override
+    public List<PxTrainingClassUserVo> getTrainingClassUserList(String trainingClassId){
+
+        return pxTrainingClassCQuery.selectTrainingClassUserList(trainingClassId);
+    }
+
+    @Override
+    public List<PxTrainingClassCourseVo> getTrainingClassCourseList(String trainingClassId){
+
+        return pxTrainingClassCQuery.selectTrainingClassCourseList(trainingClassId);
+    }
+
+    @Override
+    public PxTrainingClassCourse getCourseById(String id) {
+
+        return pxTrainingClassCourseMapper.selectByPrimaryKey(id);
+    }
+
+    @Override
+    public int saveCourse(PxTrainingClassCourse data, String userId) {
+        int result = 0;
+        PxTrainingClassCourse dbModel = pxTrainingClassCourseMapper.selectByPrimaryKey(data.getId());
+        if (dbModel == null) {
+            dbModel = new PxTrainingClassCourse();
+            dbModel.setId(data.getId());
+            dbModel.setTrainingClassId(data.getTrainingClassId());
+            dbModel.setTrainingTime(data.getTrainingTime());
+            dbModel.setCourseName(data.getCourseName());
+            dbModel.setTeacher(data.getTeacher());
+            dbModel.setCreateTime(new Date());
+            dbModel.setCreateUserid(userId);
+            dbModel.setUpdateTime(new Date());
+            dbModel.setUpdateUserid(userId);
+
+            result = pxTrainingClassCourseMapper.insert(dbModel);
+        } else {
+            dbModel.setTrainingClassId(data.getTrainingClassId());
+            dbModel.setTrainingTime(data.getTrainingTime());
+            dbModel.setCourseName(data.getCourseName());
+            dbModel.setTeacher(data.getTeacher());
+            dbModel.setUpdateTime(new Date());
+            dbModel.setUpdateUserid(userId);
+
+            result = pxTrainingClassCourseMapper.updateByPrimaryKey(dbModel);
+        }
+
+        return result;
+    }
+
+    @Override
+    public int deleteCourse(String id) {
+
+        return pxTrainingClassCourseMapper.deleteByPrimaryKey(id);
+    }
+
+    @Override
+    public List<PxTrainingClassUserVo> importUser(List<PxTrainingClassUserVo> dataList) throws Exception {
+        if (dataList.size() == 0)
+            throw new Exception("请添加导入数据");
+        List<PxTrainingClassUserVo> resultList = new ArrayList<>();
+        List<PxTrainingClassUserVo> errorList = new ArrayList<>();
+
+        List<String> nameAndMobileList = dataList.stream().filter(it -> !stringUtils.IsNullOrEmpty(it.getUserName()) && !stringUtils.IsNullOrEmpty(it.getPhone()))
+                .map(it -> it.getUserName().trim().concat(it.getPhone().trim())).collect(Collectors.toList());
+        List<HashMap<String, Object>> users = partyUserCQuery.selectAllUserByNameAndMobileList(nameAndMobileList);
+
+        List<String> partyNameList = dataList.stream().filter(e -> !stringUtils.IsNullOrEmpty(e.getDzzmc())).map(e -> e.getDzzmc().trim()).distinct().collect(Collectors.toList());
+        ZzZzqkxxExample zzZzqkxxExample = new ZzZzqkxxExample();
+        ZzZzqkxxExample.Criteria partyCri = zzZzqkxxExample.or();
+        partyCri.andDzzmcIn(partyNameList);
+        List<ZzZzqkxx> zzZzqkxxList = zzZzqkxxMapper.selectByExample(zzZzqkxxExample);
+
+        for (int i = 0; i < dataList.size(); i++) {
+
+            PxTrainingClassUserVo item = dataList.get(i);
+
+            String errorInfo = "";
+
+            if (stringUtils.IsNullOrEmpty(item.getDzzmc())) {
+                errorInfo += "请填写所属支部!";
+            }
+            if (stringUtils.IsNullOrEmpty(item.getUserName())) {
+                errorInfo += "请填写姓名!";
+            }
+            if (stringUtils.IsNullOrEmpty(item.getPhone())) {
+                errorInfo += "请填写手机号码!";
+            }
+            if (stringUtils.IsNullOrEmpty(errorInfo)) {
+
+                if (!stringUtils.IsNullOrEmpty(item.getDzzmc())) {
+                    ZzZzqkxx party = zzZzqkxxList.stream().filter(it -> it.getDzzmc().equals(item.getDzzmc())).findFirst().orElse(null);
+                    if (party == null) {
+                        errorInfo += "所属支部匹配失败!";
+                    } else {
+                        item.setDzzdm(party.getDzzdm());
+                    }
+                }
+
+                List<HashMap<String, Object>> userList = users.stream().filter(it -> it.get("XM").toString().equals(item.getUserName().trim())
+                        && it.get("MOBILE").toString().equals(item.getPhone().trim())).collect(Collectors.toList());
+                if (userList.size() > 0) {
+                    try {
+                        HashMap<String, Object> user = userList.get(0);
+                        item.setUserNo(stringUtils.valueOf(user.get("RYBM")));
+                        item.setGender(stringUtils.valueOf(user.get("XBMC")));
+                        if (user.get("XB") != null)
+                            item.setGenderId(Integer.parseInt(user.get("XB").toString()));
+                    } catch (Exception ex) {
+
+                    }
+                }
+            }
+            if (!stringUtils.IsNullOrEmpty(errorInfo)) {
+                item.setErrorInfo("第" + (i + 2) + "行," + errorInfo);
+                errorList.add(item);
+            } else {
+                resultList.add(item);
+            }
+        }
+
+        return errorList.size() > 0 ? errorList : resultList;
+    }
+
 }

+ 12 - 0
src/main/java/com/ghsc/partybuild/vo/trian/PxTrainingClassCourseVo.java

@@ -0,0 +1,12 @@
+package com.ghsc.partybuild.vo.trian;
+
+import com.ghsc.partybuild.model.PxTrainingClassCourse;
+import lombok.Data;
+
+
+@Data
+public class PxTrainingClassCourseVo extends PxTrainingClassCourse {
+    public String dzzdm;
+    public String dzzmc;
+    public String trainingClassName;
+}

+ 1 - 0
src/main/java/com/ghsc/partybuild/vo/trian/PxTrainingClassUserVo.java

@@ -9,4 +9,5 @@ public class PxTrainingClassUserVo extends PxTrainingClassUser {
     public String dzzmc;
     public String gender;
     public String trainingClassName;
+    public String errorInfo;
 }

+ 30 - 0
src/main/resources/mapping/PartyUserCQuery.xml

@@ -231,6 +231,36 @@
         </if>
         order by CONVERT(us.XM USING gbk),us.RYJBXXBS
     </select>
+    <!--所有党员基本信息-->
+    <select id="selectAllUserByNameAndMobileList" resultType="java.util.HashMap">
+        select us.USERTYPE,us.RYJBXXBS,us.RYBM,us.XM,us.SZDZBDM,us.RYZT,us.SQRDRQ,
+        us.ZWMC,us.DNZWMC,us.XJSZWMC,us.XB,us.JG,us.MZ,us.CSRQ,us.XL,us.SFZH,
+        p.DZZMC,
+        xb.hzmc as XBMC,
+        userinfo.USERNAME as MOBILE,
+        usfb.NL AS age,
+        uszw.dnzw as dnzw
+        , case when fb.ZZLB='400' then p.dzzmc else branch.dzzmc end as partyBranchName
+        , case when fb.ZZLB='400' then p.dzzdm else branch.dzzdm end as partyBranchCode
+        ,dw.dzzmc as DWMC,dw.dzzdm as DWBM
+        from VM_RYJBXX_ALL us -- 视图
+        inner join CF_USERS userinfo on us.rybm=userinfo.USERID
+        left join RS_RYJBXXFB usfb on us.RYBM=usfb.RYBM
+        inner join ZZ_ZZQKXX p on us.szdzbdm=p.dzzdm -- 党组织信息
+        left join ZZ_ZZQKXXFB fb on p.DZZDM=fb.DZZDM
+        left join zd_xbm xb on us.xb=xb.bm -- 性别
+        left join vw_partyduty uszw on us.rybm=uszw.rybm -- 党内职务名称
+        left join ZZ_ZZQKXX branch on substr(p.DZZDM,0,length(p.DZZDM)-3) = branch.DZZDM
+        left join ZZ_ZZQKXX dw on SUBSTR(p.DZZDM,0,12)=dw.DZZDM
+        where 1=1
+        <if test="userNameAndMobileList != null and userNameAndMobileList.size()>0">
+            and CONCAT(us.XM ,userinfo.USERNAME)  in
+            <foreach collection="userNameAndMobileList" item="name" index="index" open="(" close=")" separator=",">
+                #{name}
+            </foreach>
+        </if>
+        order by us.XM
+    </select>
 
     <!--党员基本信息-->
     <select id="selectPartyUserSingleExt" resultType="java.util.HashMap">

+ 49 - 6
src/main/resources/mapping/PxTrainingClassCQuery.xml

@@ -26,9 +26,11 @@
         select ptc.id, ptc.dzzdm, ptc.training_class_name, ptc.begin_date, ptc.end_date,
         ptc.address, ptc.department, ptc.contact_name, ptc.phone, ptc.content,
         ptc.create_time, ptc.create_userid, ptc.update_time, ptc.update_userid,
-        ptcu.user_count, ptcc.course_count, DATEDIFF(ptc.begin_date,ptc.end_date) as date_diff_day,
-        cu.USERNAME as create_user_name
+        IFNULL(ptcu.user_count, 0) as user_count, IFNULL(ptcc.course_count, 0) as course_count,
+        DATEDIFF(ptc.end_date,ptc.begin_date) as date_diff_day,
+        cu.USERNAME as create_user_name, zz.dzzmc
         from px_training_class ptc
+        left join zz_zzqkxx zz on ptc.dzzdm = zz.dzzdm
         left join (select training_class_id,count(0) as user_count from px_training_class_user group by training_class_id) ptcu on ptc.id=ptcu.training_class_id
         left join (select training_class_id,count(0) as course_count from px_training_class_course group by training_class_id) ptcc on ptc.id=ptcc.training_class_id
         left join cf_users cu on ptc.create_userid = cu.USERID
@@ -53,7 +55,7 @@
                 and ptc.end_date <![CDATA[ <= ]]> #{endDate}
             </when>
         </choose>
-        order by ptc.createTime desc
+        order by ptc.create_time desc
     </select>
     <select id="selectAddressList" resultType="java.lang.String">
         select c.address
@@ -63,14 +65,55 @@
         group by c.address
         order by max(c.create_time) desc
     </select>
-    <select id="selectTrainingClassUserList" resultType="com.ghsc.partybuild.vo.trian.PxTrainingClassUserVo">
+
+    <resultMap id="UserBaseResultMap" type="com.ghsc.partybuild.vo.trian.PxTrainingClassUserVo">
+        <id column="id" jdbcType="VARCHAR" property="id" />
+        <result column="training_class_id" jdbcType="VARCHAR" property="trainingClassId" />
+        <result column="dzzdm" jdbcType="VARCHAR" property="dzzdm" />
+        <result column="user_no" jdbcType="VARCHAR" property="userNo" />
+        <result column="user_name" jdbcType="VARCHAR" property="userName" />
+        <result column="gender_id" jdbcType="INTEGER" property="genderId" />
+        <result column="phone" jdbcType="VARCHAR" property="phone" />
+        <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+        <result column="create_userid" jdbcType="VARCHAR" property="createUserid" />
+        <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
+        <result column="update_userid" jdbcType="VARCHAR" property="updateUserid" />
+        <result column="dzzmc" jdbcType="VARCHAR" property="dzzmc" />
+        <result column="gender" jdbcType="VARCHAR" property="gender" />
+        <result column="training_class_name" jdbcType="VARCHAR" property="trainingClassName" />
+    </resultMap>
+    <select id="selectTrainingClassUserList" resultMap="UserBaseResultMap">
         select ptcu.id, ptcu.training_class_id, ptcu.dzzdm, ptcu.user_no,
                ptcu.user_name, ptcu.gender_id, ptcu.phone, ptcu.create_time,
                ptcu.create_userid, ptcu.update_time, ptcu.update_userid ,
-               zz.dzzmc
+               zz.dzzmc, cd.dicvalue as gender
         from px_training_class_user ptcu
-                 left join zz_zzqkxx zz on ptcu.dzzdm = zz.dzzdm
+        left join zz_zzqkxx zz on ptcu.dzzdm = zz.dzzdm
+        left join (select DICKEY, DICVALUE from cf_dictionary where DICTYPEKEY='dic_sex') cd on ptcu.gender_id=cd.DICKEY
         where ptcu.training_class_id = #{trainingClassId}
         order by ptcu.create_time
     </select>
+
+    <resultMap id="CourseBaseResultMap" type="com.ghsc.partybuild.vo.trian.PxTrainingClassCourseVo">
+        <id column="id" jdbcType="VARCHAR" property="id" />
+        <result column="training_class_id" jdbcType="VARCHAR" property="trainingClassId" />
+        <result column="course_name" jdbcType="VARCHAR" property="courseName" />
+        <result column="teacher" jdbcType="VARCHAR" property="teacher" />
+        <result column="training_time" jdbcType="TIMESTAMP" property="trainingTime" />
+        <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+        <result column="create_userid" jdbcType="VARCHAR" property="createUserid" />
+        <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
+        <result column="update_userid" jdbcType="VARCHAR" property="updateUserid" />
+    </resultMap>
+    <select id="selectTrainingClassCourseList" resultMap="CourseBaseResultMap">
+        select ptcc.id, ptcc.training_class_id, ptcc.course_name, ptcc.teacher, ptcc.training_time,
+               ptcc.create_time, ptcc.create_userid, ptcc.update_time, ptcc.update_userid,
+               ptc.training_class_name, ptc.dzzdm, zz.dzzmc
+        from px_training_class ptc
+                 left join px_training_class_course ptcc on ptc.id = ptcc.training_class_id
+                 left join zz_zzqkxx zz on ptc.dzzdm = zz.dzzdm
+        where ptcc.training_class_id = #{trainingClassId}
+        order by ptcc.training_time ,ptcc.create_time desc
+    </select>
+
 </mapper>

+ 51 - 1
src/main/resources/static/app/main/app.js

@@ -1522,7 +1522,7 @@
                     return $ocLazyLoad.load(['../main/publicity/position/edit.js?' + window.sysVersion]);
                 }]
             }
-		        }).state("home.pub_dzzfcList", {
+		}).state("home.pub_dzzfcList", {
             url: "pub_dzzfcList",
             templateUrl: "../main/publicity/pubdzzfc/list.html?" + window.sysVersion,
             controller: "pub_dzzfcListCtrl",
@@ -1559,6 +1559,56 @@
                     return $ocLazyLoad.load(['../main/publicity/pubdzzfc/edit.js?' + window.sysVersion]);
                 }]
             }
+        }).state("home.pxTrainingClassList", {
+            url: "pxTrainingClassList",
+            templateUrl: "../main/train/trainingClass/list.html?" + window.sysVersion,
+            controller: "pxTrainingClassListCtrl",
+            resolve: {
+                load: ['$ocLazyLoad', function ($ocLazyLoad) {
+
+                    return $ocLazyLoad.load(['../main/train/trainingClass/list.js?' + window.sysVersion]);
+                }]
+            }
+        }).state("home.pxTrainingClassAdd", {
+            url: "pxTrainingClassAdd?id&op",
+            templateUrl: "../main/train/trainingClass/edit.html?" + window.sysVersion,
+            controller: "pxTrainingClassEditCtrl",
+            resolve: {
+                load: ['$ocLazyLoad', function ($ocLazyLoad) {
+                    $ocLazyLoad.load(['../main/train/trainingClass/courseEdit.js?' + window.sysVersion]);
+                    $ocLazyLoad.load(['../main/train/trainingClass/course.js?' + window.sysVersion]);
+                    return $ocLazyLoad.load(['../main/train/trainingClass/edit.js?' + window.sysVersion]);
+                }]
+            }
+        }).state("home.pxTrainingClassEdit", {
+            url: "pxTrainingClassEdit?id&op",
+            templateUrl: "../main/train/trainingClass/edit.html?" + window.sysVersion,
+            controller: "pxTrainingClassEditCtrl",
+            resolve: {
+                load: ['$ocLazyLoad', function ($ocLazyLoad) {
+                    $ocLazyLoad.load(['../main/train/trainingClass/courseEdit.js?' + window.sysVersion]);
+                    $ocLazyLoad.load(['../main/train/trainingClass/course.js?' + window.sysVersion]);
+                    return $ocLazyLoad.load(['../main/train/trainingClass/edit.js?' + window.sysVersion]);
+                }]
+            }
+        }).state("home.pxTrainingClassDetail", {
+            url: "pxTrainingClassDetail?id&op",
+            templateUrl: "../main/train/trainingClass/detail.html?" + window.sysVersion,
+            controller: "pxTrainingClassDetailCtrl",
+            resolve: {
+                load: ['$ocLazyLoad', function ($ocLazyLoad) {
+                    return $ocLazyLoad.load(['../main/train/trainingClass/detail.js?' + window.sysVersion]);
+                }]
+            }
+        }).state("home.pxTrainingClassCourseList", {
+            url: "pxTrainingClassCourseList?id&op",
+            templateUrl: "../main/train/trainingClass/course.html?" + window.sysVersion,
+            controller: "pxTrainingClassCourseListCtrl",
+            resolve: {
+                load: ['$ocLazyLoad', function ($ocLazyLoad) {
+                    return $ocLazyLoad.load(['../main/train/trainingClass/course.js?' + window.sysVersion]);
+                }]
+            }
         }).state("home.dnpxxx", {
             url: "dnpxxx",
             templateUrl: "../main/partyTwoExt/dnpxxx/list.html?" + window.sysVersion,

+ 12 - 12
src/main/resources/static/app/main/controllers.js

@@ -514,18 +514,18 @@
         var directiveObject = {
             restrict: 'AC',
             link: function (scope, element, attr, controller) {
-                activateFun(scope, element);
-                //activateFun(scope,element);
-                //activateFun(scope,element);
-                element.find('.btn-reset').on('click',function () {
-                    $timeout(function () {
-                        activateFun(scope,element);
-                    },200);
-
-                });
-                $timeout(function () {
-                    activateFun(scope, element);
-                }, 200);
+                // activateFun(scope, element);
+                // //activateFun(scope,element);
+                // //activateFun(scope,element);
+                // element.find('.btn-reset').on('click',function () {
+                //     $timeout(function () {
+                //         activateFun(scope,element);
+                //     },200);
+                //
+                // });
+                // $timeout(function () {
+                //     activateFun(scope, element);
+                // }, 200);
             }
 
         };

+ 6 - 5
src/main/resources/static/app/main/train/trainingClass/course.html

@@ -13,6 +13,7 @@
                     </div>
                     <i ng-if="isShowNextWeek" ng-click="nextWeek()" class="material-icons">keyboard_arrow_right</i>
                 </div>
+                <div class="table-tool" style="flex: 0 0 33%;text-align: right;"></div>
             </div>
             <table class="gt-table gt-table-bordered">
                 <thead>
@@ -38,13 +39,13 @@
             </table>
         </div>
         <div class="baseMark" ng-repeat="it in markDataList" ng-style="it.positionStyle">
-            <div class="mask" ng-class="{'askleave':isAskleave(it)}">
-                <i class="material-icons remove-mark" title="点击删除" ng-click="deleteCourse(it.pxClassCourseId)">highlight_off</i>
-                <div class="mask-content" ng-click="editCourse(it)" title="点击编辑">
+            <div class="mask">
+                <i class="material-icons remove-mark" title="点击删除" ng-click="deleteCourse(it.id)">highlight_off</i>
+                <div class="mask-content" ng-click="editCourse(it.id)" title="点击编辑">
                     <div style="padding: 1.5px;height: 100%;background-color: #2553ff"></div>
                     <div style="overflow: hidden;padding: 5px;">
-                        课程:{{it.teachcontent}}【{{it.teachername}}】<span
-                            ng-style="{'color':it.attendStatus==1?'red':''}" ng-if="it.traintype==1">【{{it.attendStatusName?it.attendStatusName:"未邀请"}}】</span>
+                        课程:{{it.courseName}}。
+                        【{{it.teacher}}】
                     </div>
                 </div>
             </div>

+ 31 - 59
src/main/resources/static/app/main/train/trainingClass/course.js

@@ -15,7 +15,7 @@
 
         if ($stateParams.classCourseControllerParams != null) {
             $scope.op = $stateParams.classCourseControllerParams.op;
-            $scope.dataModel.id = $stateParams.classCourseControllerParams.pxClassId;
+            $scope.dataModel.id = $stateParams.classCourseControllerParams.id;
         }
 
         if ($scope.op == 2) {
@@ -23,14 +23,6 @@
         }
 
         $scope.courseList = [];
-        $scope.teacherList = [];
-        $scope.teacherAskleaveList = [];
-        $scope.courseTypeList = [];//课程类型
-        $scope.teacherLevelList = [];//师资级别
-        $scope.teacherTypeList = [];//师资类型
-        $scope.zjzqkTypeList = [];//专兼职师资
-
-        $scope.isInviteTeacher = false;
 
         $scope.trainTimes = [];
         $scope.weekDays = [];
@@ -48,26 +40,20 @@
             }
 
             $loading.show();
-            $http.get("../../api/train/class/getClassById", {
+            $http.get("../../api/train/trainingclass/get", {
                 params: {
-                    'pxClassId': $scope.dataModel.id
+                    'id': $scope.dataModel.id
                 }
             }).then(function (result) {
                 $loading.hide();
                 if (result.data.success) {
                     $scope.dataModel = result.data.item;
 
-                    $scope.weekStartDate = moment($scope.dataModel.startdate).startOf('week').add(1, 'day');
+                    $scope.weekStartDate = moment($scope.dataModel.beginDate).startOf('week').add(1, 'day');
                     $scope.weekEndDate = moment($scope.weekStartDate).add(6, 'day');
 
                     $scope.getTrainTimes();
                     $scope.getCourseList();
-                    $scope.getTeacherAskleaveList();
-                    $scope.loadCourseTypes();
-                    $scope.loadTeacherLevels();
-                    $scope.loadZjzqkTypes();
-                    $scope.getTeacherTypeList();
-                    $scope.loadTeacherAreas();
                 }
             }, function () {
                 $loading.hide();
@@ -75,8 +61,19 @@
             });
         };
 
+        $scope.getCourseList = function () {
+            $http({
+                method: 'get',
+                url: '../../api/train/trainingclass/getTrainingClassCourseList',
+                params: {trainingClassId: $scope.dataModel.id}
+            }).then(function (result) {
+                $scope.courseList = result.data.item;
+            }, function (resp) {
+            });
+        };
+
         $scope.setMarks = function () {
-            $scope.markDataList = $scope.courseList.filter(it => $scope.weekStartDate <= moment(it.traintime) && moment(moment(it.traintime).format("YYYY-MM-DD")) <= $scope.weekEndDate);
+            $scope.markDataList = $scope.courseList.filter(it => $scope.weekStartDate <= moment(it.trainingTime) && moment(moment(it.trainingTime).format("YYYY-MM-DD")) <= $scope.weekEndDate);
 
             if ($scope.markDataList.length <= 0)
                 return false;
@@ -91,15 +88,15 @@
             $scope.markDataList.forEach((it, index) => {
                 it.positionStyle = {left: "0", top: "0", width: "0", height: "0"};
 
-                var startTime = moment(it.traintime);
+                var startTime = moment(it.trainingTime);
                 var hourStr = moment(startTime).format("HH");
                 var minute = moment(startTime).minute();
                 var hourIndex = $scope.trainTimes.indexOf(hourStr);
                 var dayIndex = $scope.weekDays.map(it => {
                     return moment(it).format("YYYY-MM-DD")
-                }).indexOf(moment(it.traintime).format("YYYY-MM-DD"));
+                }).indexOf(moment(it.trainingTime).format("YYYY-MM-DD"));
 
-                it.positionStyle.height = it.trainhours * $scope.defaultHeight + "px";
+                it.positionStyle.height = $scope.defaultHeight + "px";
                 it.positionStyle.width = $scope.weekDayWidths[dayIndex] + "px";
                 it.positionStyle.top = -$scope.defaultHeight * (16 + hours - hourIndex - Math.round((minute / 60) * 100) / 100) + "px";
                 var left = 60;
@@ -108,8 +105,9 @@
                 }
                 it.positionStyle.left = left + "px";
 
-                hours += it.trainhours;
+                hours += 1;
             });
+            console.log($scope.markDataList)
         };
 
         $scope.getTrainTimes = function () {
@@ -169,26 +167,21 @@
                 },
                 scope: $scope,
                 controller: classCourseEditCtrl,
-                templateUrl: '../main/train/classManage/class/courseEdit.html',
+                templateUrl: '../main/train/trainingClass/courseEdit.html',
                 show: false,
                 animation: 'am-fade-and-slide-top'
             });
 
             classCourseEditModal.params = {
-                defaultDate: moment($scope.weekDays[index]).add(h, 'hour'),
-                pxClassCourseId: '',
-                pxClassId: $scope.dataModel.pxClassId,
-                courseTypeList: $scope.courseTypeList,
-                teacherLevelList: $scope.teacherLevelList,
-                teacherTypeList: $scope.teacherTypeList,
-                zjzqkTypeList: $scope.zjzqkTypeList,
-                teacherAreaList: $scope.teacherAreaList
+                id: null,
+                trainingClassId: $scope.dataModel.id,
+                defaultDate: moment($scope.weekDays[index]).add(h, 'hour')
             };
             classCourseEditModal.parentLoad = $scope.getCourseList;
             classCourseEditModal.$promise.then(classCourseEditModal.show);
         };
 
-        $scope.editCourse = function (item) {
+        $scope.editCourse = function (id) {
             classCourseEditCtrl.$inject = ['$scope', '$http', '$alert', '$loading', 'AuthUser'];
             classCourseEditModal = $modal({
                 resolve: {
@@ -197,16 +190,15 @@
                 },
                 scope: $scope,
                 controller: classCourseEditCtrl,
-                templateUrl: '../main/train/classManage/class/courseEdit.html',
+                templateUrl: '../main/train/trainingClass/courseEdit.html',
                 show: false,
                 animation: 'am-fade-and-slide-top'
             });
 
             classCourseEditModal.params = {
-                pxClassId: $scope.dataModel.pxClassId,
-                pxClassCourseId: item.pxClassCourseId,
-                courseTypeList: $scope.courseTypeList,
-                teacherAreaList: $scope.teacherAreaList
+                id: id,
+                trainingClassId: $scope.dataModel.id,
+                defaultDate: null
             };
             classCourseEditModal.parentLoad = $scope.getCourseList;
             classCourseEditModal.$promise.then(classCourseEditModal.show);
@@ -216,7 +208,7 @@
             if (confirm("确定删除?")) {
                 $loading.show();
                 $http({
-                    url: "../../api/train/class/deleteClassCourse",
+                    url: "../../api/train/trainingclass/deleteCourse",
                     method: 'post',
                     data: id
                 }).then(function (result) {
@@ -234,21 +226,6 @@
             }
         };
 
-        $scope.isAskleave = function (item) {
-            var startHour = moment(item.traintime).hour();
-            var endHour = moment(item.traintime).add(item.trainhours, 'hour').hour();
-            var askLeaveList = $scope.teacherAskleaveList.filter(it => moment(it.askleavedate).format("YYYY-MM-DD") === moment(item.traintime).format("YYYY-MM-DD") && item.teacherCode === it.userno)
-
-            if (startHour >= 0 && startHour <= 12 && endHour >= 13 && endHour <= 23) {
-                return askLeaveList.length > 0;
-            } else if (endHour >= 1 && endHour <= 12) {
-                return askLeaveList.filter(it => it.askleavetimetype == 1).length > 0;
-            } else {
-                return askLeaveList.filter(it => it.askleavetimetype == 2).length > 0;
-            }
-
-        };
-
         //定时器
         var timer = $interval(function () {
             if ($("#" + $scope.pageId + "_td_trainTime1").width()) {
@@ -259,10 +236,5 @@
         //加载数据
         $scope.getData();
 
-        $scope.pagechange = function () {
-            $bsRouterState.$closeTab($scope);
-            $bsRouterState.go('home.px_classlist');
-        };
-
     });
 })(angular);

+ 16 - 52
src/main/resources/static/app/main/train/trainingClass/courseEdit.html

@@ -1,84 +1,48 @@
 <div class="modal" tabindex="-1" role="dialog">
-    <div class="modal-dialog" style="width: 800px;height: 400px;">
+    <div class="modal-dialog" style="width: 650px;height: 300px;">
         <div class="card">
             <div class="header">
                 <button type="button" class="close" ng-click="$hide()">&times;</button>
                 <h4 class="modal-title">课程安排</h4>
             </div>
             <div class="body">
-                <form role="form" name="editForm" novalidate>
+                <form role="form" name="courseform" novalidate>
                     <div class="dj-formtable">
                         <table class="dj-table dj-table2">
                             <tr>
-                                <th>授课时间</th>
-                                <td ng-class="{ 'has-error' : this.editForm.traintime.$invalid &&  this.editForm.$submitted}">
-                                    <input name="traintime" class="form-control"
+                                <th>培训时间<span style="color: red">*</span></th>
+                                <td ng-class="{ 'has-error' : this.courseform.trainingTime.$invalid &&  this.courseform.$submitted}">
+                                    <input name="trainingTime" class="form-control"
                                            autocomplete="off"
                                            autoclose="true"
                                            format="yyyy-mm-dd hh:ii" data-date-type="date"
                                            data-min-view="0"
-                                           ng-model="classCourseModel.traintime"
+                                           ng-model="classCourseModel.trainingTime"
                                            placeholder="" bs-datetimepicker style="width: 150px;"/>
                                 </td>
                             </tr>
                             <tr>
-                                <th>课程类别</th>
-                                <td ng-class="{ 'has-error' : this.editForm.traintype.$invalid &&  this.editForm.$submitted}">
-                                    <select class="form-control show-tick"
-                                            ng-model="classCourseModel.traintype"
-                                            ng-options="type.dickey as type.dicvalue for type in trainCourseTypeList"
-                                            class="form-control"
-                                            name="traintype"
-                                            ng-required="true" ng-change="trainTypeChange(it)" style="width: 250px;">
-                                        <option value="" selected>--请选择--</option>
-                                    </select>
-                                </td>
-                            </tr>
-                            <tr>
-                                <th>课程名称</th>
-                                <td ng-class="{ 'has-error' : this.editForm.teachcontent.$invalid &&  this.editForm.$submitted}">
+                                <th>课程名称<span style="color: red">*</span></th>
+                                <td ng-class="{ 'has-error' : this.courseform.courseName.$invalid &&  this.courseform.$submitted}">
                                     <div style="display: flex;justify-content: space-between;padding: 3px 0;">
-                                        <input type="text" autocomplete="off" class="form-control" name="teachcontent"
-                                               ng-model="classCourseModel.teachcontent" ng-required="true"
-                                               ng-disabled="classCourseModel.traintype==1"/>
-                                        <button ng-if="classCourseModel.traintype==1" data-dataoptions="selectCourse"
-                                                bsselectdata-pro
-                                                style="width: 100px;padding-left: 10px;height: 28px;line-height: 24px !important;">
-                                            选择课程
-                                        </button>
+                                        <input type="text" autocomplete="off" class="form-control" name="courseName"
+                                               ng-model="classCourseModel.courseName" ng-required="true"/>
                                     </div>
                                 </td>
                             </tr>
                             <tr>
-                                <th>培训课时</th>
-                                <td ng-class="{ 'has-error' : this.editForm.trainhours.$invalid &&  this.editForm.$submitted}">
-                                    <input type="number" min="0" step="0.5" autocomplete="off" class="form-control"
-                                           name="trainhours"
-                                           ng-model="classCourseModel.trainhours" ng-required="true"
-                                           style="width: 150px;"/>
-                                </td>
-                            </tr>
-                            <tr>
-                                <th>主持人/负责人</th>
-                                <td ng-class="{ 'has-error' : this.editForm.teachername.$invalid &&  this.editForm.$submitted}">
-                                    <input ng-if="classCourseModel.traintype==2 || classCourseModel.traintype==3" type="text" autocomplete="off"
-                                           class="form-control" name="teachername"
-                                           ng-model="classCourseModel.teachername" ng-required="true"/>
-                                    <div ng-if="classCourseModel.traintype==1">
-                                        <span>{{classCourseModel.teacherPartyName}}</span>
-                                        <br>
-                                        <div>
-                                            <span>{{classCourseModel.teachername}}&nbsp;&nbsp;&nbsp;</span>
-                                            <span ng-if="classCourseModel.teacherPosition">职务&nbsp;&nbsp;{{classCourseModel.teacherPosition}}</span>
-                                        </div>
-                                    </div>
+                                <th>授课老师<span style="color: red">*</span></th>
+                                <td ng-class="{ 'has-error' : this.courseform.teacher.$invalid &&  this.courseform.$submitted}">
+                                    <input type="text" autocomplete="off"
+                                           class="form-control" name="teacher"
+                                           ng-model="classCourseModel.teacher" ng-required="true"/>
                                 </td>
                             </tr>
                         </table>
                     </div>
                     <div class="form_foot">
                         <button type="button" class="btn btn-default" ng-click="$hide()">取消</button>
-                        <button type="submit" class="btn btn-default1" ng-click="save(this.editForm.$valid)">提交</button>
+                        <button type="submit" class="btn btn-default1" ng-click="save(this.courseform.$valid)">提交</button>
                     </div>
                 </form>
             </div>

+ 14 - 87
src/main/resources/static/app/main/train/trainingClass/courseEdit.js

@@ -1,31 +1,25 @@
 var classCourseEditCtrl = function ($scope, $http, $alert, $loading, AuthUser) {
     $scope.parentLoad = classCourseEditModal.parentLoad;
-    $scope.classCourseModel = {pxClassCourseId: classCourseEditModal.params.pxClassCourseId};
-    $scope.defaultDate = classCourseEditModal.params.defaultDate;
-    $scope.pxClassId = classCourseEditModal.params.pxClassId;
-    $scope.trainCourseTypeList = [];
-    $scope.courseTypeList = classCourseEditModal.params.courseTypeList;
-    $scope.teacherLevelList = classCourseEditModal.params.teacherLevelList;
-    $scope.teacherTypeList = classCourseEditModal.params.teacherTypeList;
-    $scope.zjzqkTypeList = classCourseEditModal.params.zjzqkTypeList;
-    $scope.teacherAreaList = classCourseEditModal.params.teacherAreaList;
-    $scope.isAdd = !classCourseEditModal.params.pxClassCourseId;
+    $scope.classCourseModel = {id: classCourseEditModal.params.id};
+    $scope.trainingClassId = classCourseEditModal.params.trainingClassId
+    $scope.defaultDate = classCourseEditModal.params.defaultDate
 
     $scope.getClassCourse = function () {
         $loading.show();
         $http
         ({
-            method: 'get', url: "../../api/train/class/getPxClassCourseById",
+            method: 'get',
+            url: "../../api/train/trainingclass/getCourse",
             params: {
-                pxClassId: $scope.pxClassId,
-                pxClassCourseId: $scope.classCourseModel.pxClassCourseId,
+                'id': $scope.classCourseModel.id
             }
         }).then(function (result) {
             $loading.hide();
             if (result.data.success) {
                 $scope.classCourseModel = result.data.item;
-                if ($scope.isAdd)
-                    $scope.classCourseModel.traintime = moment($scope.defaultDate).format("YYYY-MM-DD HH:mm");
+                if($scope.defaultDate){
+                    $scope.classCourseModel.trainingTime = moment($scope.defaultDate).format("YYYY-MM-DD HH:mm");
+                }
             } else {
                 $scope.showMsg('失败', result.data.msg);
             }
@@ -36,16 +30,18 @@ var classCourseEditCtrl = function ($scope, $http, $alert, $loading, AuthUser) {
     };
 
     $scope.save = function (isflag) {
-        $scope.classCourseModel.pxClassId = $scope.pxClassId;
         if (!isflag) {
             $scope.showMsg('提示', '请填写相关信息');
             return false;
         }
-        if (isflag) {
+        $scope.classCourseModel.trainingClassId = $scope.trainingClassId;
+        // $scope.classCourseModel.trainingTime = $scope.classCourseModel.trainingTime + ":00";
+        $scope.classCourseModel.trainingTime = moment($scope.classCourseModel.trainingTime + ":00")//.format("YYYY-MM-DD HH:mm:ss");
+
             $loading.show();
             $http({
                 method: "post",
-                url: "../../api/train/class/saveClassCourseSingle",
+                url: "../../api/train/trainingclass/saveCourse",
                 data: $scope.classCourseModel
             }).then(function (result) {
                 $loading.hide();
@@ -60,78 +56,9 @@ var classCourseEditCtrl = function ($scope, $http, $alert, $loading, AuthUser) {
                 $loading.hide();
                 $scope.showMsg('错误', '服务器错误:' + resp);
             });
-        }
-    };
-
-    $scope.trainTypeChange = function () {
-        $scope.classCourseModel.courseId = "";
-        $scope.classCourseModel.teachcontent = "";
-        $scope.classCourseModel.teachername = "";
-    };
-
-    //选择课程
-    $scope.selectCourse = {
-        url: '../../api/train/class/getCourseLibList',
-        title: '选择课程',
-        isMulti: false,
-        selectData: {coursename: '课程名称', teachername: '师资姓名'},
-        columns: {
-            COURSENAME: '课程名称',
-            COURSETYPENAME: '课程分类',
-            CLASSHOUR: '课时',
-            DZZMC: '所属单位',
-            TEACHERNAME: "师资姓名",
-            ZW: "职务",
-            TEACHERLEVEL: "师资级别",
-            TEACHERAREANAMES: '授课区域'
-        },
-        selectLabelKey: 'COURSENAME',
-        selectValuekey: 'COURSEID',
-        selectedValueData: '',
-        selectedLabeData: '',
-        selectedJData: [],
-        comboxData: {
-            coursetype: {text: '课程分类', data: $scope.courseTypeList},
-            teacherLevel: {text: '师资级别', data: $scope.teacherLevelList},
-            teacherType: {text: '师资类型', data: $scope.teacherTypeList},
-            zjzqk: {text: '专兼职情况', data: $scope.zjzqkTypeList}
-        },
-        checkboxData: {key: 'teacherArea', value: $scope.teacherAreaList},
-        selectParams: {
-            /*selectdzzdm: AuthUser.getUser().DataDzzdm.length < AuthUser.getUser().dwId ? AuthUser.getUser().DataDzzdm : AuthUser.getUser().dwId*/
-        },
-        onSelect: function (value, items) {
-            if (items) {
-                $scope.classCourseModel.courseId = items.COURSEID;
-                $scope.classCourseModel.teachcontent = items.COURSENAME;
-                $scope.classCourseModel.teachername = items.TEACHERNAME;
-                $scope.classCourseModel.teacherPartyName = items.DZZMC;
-                $scope.classCourseModel.teacherPosition = items.ZW;
-                $scope.classCourseModel.trainhours = items.CLASSHOUR;
-            }
-        }
-    };
-
-
-    //获取字典数据
-    $scope.getTrainCourseTypeList = function () {
-        $http({
-            method: 'get',
-            url: '../../api/dictionary/getDictionaryListByDicTypeKey',
-            params: {
-                dicTypeKey: 'TrainCourseType'
-            }
-        }).then(function (result) {
-            $scope.trainCourseTypeList = result.data;
-        }, function (resp) {
-
-        });
     };
 
-    $scope.getTrainCourseTypeList();
     $scope.getClassCourse();
-
-
 };
 
 //定义模态框

+ 121 - 0
src/main/resources/static/app/main/train/trainingClass/detail.html

@@ -0,0 +1,121 @@
+<titlemenu></titlemenu>
+<div class="dj-card">
+    <div class="dj-body" activate-input>
+        <ul class="nav nav-tabs tab-col-deep-orange" role="tablist">
+            <li ng-class="{active:step==1}">
+                <a ng-click="selectTab(1)" data-toggle="tab">
+                    基础信息
+                </a>
+            </li>
+            <li ng-class="{active:step==2}">
+                <a ng-click="selectTab(2)" data-toggle="tab">
+                    培训课程表
+                </a>
+            </li>
+        </ul>
+        <div ng-if="step==1">
+            <div panel-title data-title="'基础信息'"></div>
+            <div class="dj-formtable">
+                <table class="dj-table dj-table3">
+                    <tr>
+                        <th>培训班名称</th>
+                        <td>{{dataModel.trainingClassName}}</td>
+                        <th>培训时间</th>
+                        <td>
+                            {{dataModel.beginDate|date:'yyyy-MM-dd'}}~{{dataModel.endDate|date:'yyyy-MM-dd'}}
+                        </td>
+                        <th>录入组织</th>
+                        <td>{{dataModel.dzzmc}}</td>
+                    </tr>
+                    <tr>
+                        <th>培训详情地址</th>
+                        <td colspan="5">{{dataModel.address}}</td>
+                    </tr>
+                    <tr>
+                        <th>主办部门</th>
+                        <td>{{dataModel.department}}</td>
+                        <th>联系人</th>
+                        <td>{{dataModel.contactName}}</td>
+                        <th>联系方式</th>
+                        <td>{{dataModel.phone}}</td>
+                    </tr>
+                </table>
+            </div>
+            <div panel-title data-title="'报名信息'"></div>
+            <div class="dj-formtable">
+                <div class="table-responsive list-table-panel">
+                    <div class="list-table-title" style="background-color: white;">
+                        <div class="table-title">
+                            已报名人数:{{dataModel.userList.length}}人
+                        </div>
+                        <div class="table-tool">
+                            <button type="button" style="margin-left: 10px;" class="btn btn-default1"
+                                    ng-click="exportUser()">导出
+                            </button>
+                        </div>
+                    </div>
+                    <table class="gt-table gt-table-bordered">
+                        <thead>
+                        <tr>
+                            <th class="th-rownum"><div>序号</div></th>
+                            <th>所在支部</th>
+                            <th>姓名</th>
+                            <th>性别</th>
+                            <th>手机号码</th>
+                        </tr>
+                        </thead>
+                        <tbody>
+                        <tr ng-repeat="it in dataModel.userList">
+                            <td class="text-center">{{$index + 1}}</td>
+                            <td class="text-center">{{it.dzzmc}}</td>
+                            <td class="text-center">{{it.userName}}</td>
+                            <td class="text-center">{{it.gender}}</td>
+                            <td class="text-center">{{it.phone}}</td>
+                        </tr>
+                        <tr ng-if="dataModel.userList.length<=0">
+                            <td colspan="8" style="text-align:center">暂无数据</td>
+                        </tr>
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+        </div>
+        <div ng-if="step==2">
+            <div panel-title data-title="'培训课程表'"></div>
+            <div class="dj-formtable">
+                <div class="table-responsive list-table-panel" style="overflow-x: inherit;">
+                    <table class="gt-table gt-table-bordered">
+                        <thead>
+                        <tr>
+                            <th class="th-rownum">序号</th>
+                            <th>培训时间</th>
+                            <th>课程名称</th>
+                            <th>授课老师</th>
+                        </tr>
+                        </thead>
+                        <tbody>
+                        <tr ng-repeat="it in courseList">
+                            <td class="text-center" scope="row">{{$index+1}}</td>
+                            <td>
+                                {{it.trainingTime | date:'yyyy-MM-dd HH:mm'}}
+                            </td>
+                            <td>
+                                {{it.courseName}}
+                            </td>
+                            <td>
+                                {{it.teacher}}
+                            </td>
+                        </tr>
+                        <tr ng-if="courseList.length<=0">
+                            <td colspan="8" style="text-align:center">暂无数据</td>
+                        </tr>
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+        </div>
+        <div class="form_foot">
+            <button type="button" class="btn btn-default" ng-click="pagechange();">返回</button>
+        </div>
+    </div>
+</div>

+ 59 - 0
src/main/resources/static/app/main/train/trainingClass/detail.js

@@ -0,0 +1,59 @@
+(function ($app) {
+    $app.module('gtPartyApp').controller('pxTrainingClassDetailCtrl', function ($scope, $http, $modal, $ocLazyLoad, $alert, $loading, $state, $bsRouterState, AuthUser, $timeout, $partySelect) {
+        $stateParams = $bsRouterState.$params($scope);
+
+        $scope.step = 1;
+
+        //定义数据集合
+        $scope.dataModel = {
+            id: $stateParams.id == undefined ? "" : $stateParams.id
+        };
+        $scope.courseList = [];
+
+        $scope.selectTab = function (index) {
+            $scope.step = index;
+        };
+
+        $scope.getData = function () {
+            $http.get("../../api/train/trainingclass/get", {
+                params: {
+                    'id': $scope.dataModel.id
+                }
+            }).then(function (result) {
+                if (result.data.success) {
+                    $scope.dataModel = result.data.item;
+
+                    $scope.getCourseList();
+                }
+            }, function () {
+                $scope.showMsg('错误', '服务器错误');
+            });
+        };
+
+        $scope.getCourseList = function () {
+            $http({
+                method: 'get',
+                url: '../../api/train/trainingclass/getTrainingClassCourseList',
+                params: {trainingClassId: $scope.dataModel.id}
+            }).then(function (result) {
+                $scope.courseList = result.data.item;
+            }, function (resp) {
+            });
+        };
+
+        $scope.exportUser = function () {
+            window.open('../../api/train/trainingclass/exportUser?id=' + $scope.dataModel.id);
+        };
+
+        $scope.stepNext = function (s) {
+            $scope.step += s;
+        };
+
+        //加载数据
+        $scope.getData();
+
+        $scope.pagechange = function () {
+            $bsRouterState.$closeTab($scope);
+        };
+    });
+})(angular);

+ 16 - 16
src/main/resources/static/app/main/train/trainingClass/edit.html

@@ -40,24 +40,22 @@
                             <th>培训班名称<span style="color: red;">*</span></th>
                             <td ng-class="{ 'has-error' : this.trainingClassForm.trainingClassName.$invalid &&  this.trainingClassForm.$submitted}">
                                 <input type="text" name="trainingClassName" ng-model="dataModel.trainingClassName"
-                                       maxlength="250"
+                                       maxlength="250" autocomplete="off" autoclose="true"
                                        class="form-control" ng-required="true"/>
                                 <span ng-show="this.trainingClassForm.trainingClassName.$invalid &&  this.trainingClassForm.$submitted"
                                       class="error">必填.</span>
                             </td>
                             <th>培训时间<span style="color: red;">*</span></th>
                             <td ng-class="{ 'has-error' : (this.trainingClassForm.beginDate.$invalid || this.trainingClassForm.endDate.$invalid) &&  this.trainingClassForm.$submitted}">
-                                <input style="width: 100px;display: inline;" name="beginDate" class="form-control"
-                                       autocomplete="off"
-                                       autoclose="true"
+                                <input style="width: 90px;display: inline;" name="beginDate" class="form-control"
+                                       autocomplete="off" autoclose="true"
                                        data-date-format="yyyy-MM-dd" data-date-type="date"
                                        ng-model="dataModel.beginDate"
                                        ng-required="true"
                                        placeholder="" bs-datepicker/>
-                                至
-                                <input style="width: 100px;display: inline;" name="endDate" class="form-control"
-                                       autocomplete="off"
-                                       autoclose="true"
+                                ~
+                                <input style="width: 90px;display: inline;" name="endDate" class="form-control"
+                                       autocomplete="off" autoclose="true"
                                        data-date-format="yyyy-MM-dd" data-date-type="date"
                                        ng-model="dataModel.endDate"
                                        ng-required="true"
@@ -65,11 +63,12 @@
                                 <span ng-show="(this.trainingClassForm.beginDate.$invalid || this.trainingClassForm.endDate.$invalid) &&  this.trainingClassForm.$submitted"
                                       class="error">必填.</span>
                             </td>
-                            <th>录入党委<span style="color: red;">*</span></th>
+                            <th>录入组织<span style="color: red;">*</span></th>
                             <td ng-class="{ 'has-error' : this.trainingClassForm.dzzmc.$invalid &&  this.trainingClassForm.$submitted}">
                                 <div class="input-group input-group-search"
                                      title="录入组织" ng-click="selectParty()">
                                     <input name="dzzmc" type="text" ng-model="dataModel.dzzmc"
+                                           autocomplete="off" autoclose="true"
                                            class="form-control" ng-required="true"
                                            ng-disabled="true"/>
                                     <span class="input-group-addon"><i class="material-icons">search</i></span>
@@ -94,7 +93,8 @@
                                          ng-class="{ 'focused error' : this.trainingClassForm.address.$invalid &&  this.trainingClassForm.$submitted}">
                                         <input type="text" name="address"
                                                ng-model="dataModel.address"
-                                               maxlength="1000"
+                                               maxlength="500"
+                                               autocomplete="off" autoclose="true"
                                                class="form-control"/>
                                     </div>
                                     <span ng-show="this.trainingClassForm.address.$invalid &&  this.trainingClassForm.$submitted"
@@ -106,6 +106,7 @@
                             <th>主办部门<span style="color: red;">*</span></th>
                             <td ng-class="{ 'has-error' : this.trainingClassForm.department.$invalid &&  this.trainingClassForm.$submitted}">
                                 <input type="text" name="department" ng-model="dataModel.department"
+                                       autocomplete="off" autoclose="true"
                                        class="form-control" ng-required="true"/>
                                 <span ng-show="this.trainingClassForm.department.$invalid &&  this.trainingClassForm.$submitted"
                                       class="error">必填.</span>
@@ -113,11 +114,13 @@
                             <th>联系人</th>
                             <td>
                                 <input type="text" name="contactName" ng-model="dataModel.contactName"
+                                       autocomplete="off" autoclose="true"
                                        class="form-control"/>
                             </td>
                             <th>联系方式</th>
                             <td>
                                 <input type="text" name="phone"
+                                       autocomplete="off" autoclose="true"
                                        ng-model="dataModel.phone" class="form-control"
                                        placeholder="手机"/>
                             </td>
@@ -149,9 +152,7 @@
                         <table class="gt-table gt-table-bordered">
                             <thead>
                             <tr>
-                                <th class="th-rownum">
-                                    <div>序号</div>
-                                </th>
+                                <th class="th-rownum"><div>序号</div></th>
                                 <th>所在支部</th>
                                 <th>姓名</th>
                                 <th>性别</th>
@@ -166,7 +167,7 @@
                                 <td class="text-center">{{it.userName}}</td>
                                 <td class="text-center">{{it.gender}}</td>
                                 <td class="text-center">{{it.phone}}</td>
-                                <td>
+                                <td class="text-center">
                                     <button class="btn td-btn bg-pink waves-effect"
                                             ng-click="delUser($index)">
                                         删除
@@ -191,9 +192,8 @@
             <div ng-include="'../main/train/trainingClass/course.html'"
                  ng-controller="pxTrainingClassCourseListCtrl"></div>
             <div class="form_foot">
-                <button type="button" class="btn btn-default" ng-click="pagechange();">取消</button>
+                <button type="button" class="btn btn-default" ng-click="pagechange();">完成</button>
                 <button type="button" class="btn btn-primary" ng-click="stepNext(-1)">上一步</button>
-                <button type="button" class="btn btn-primary" ng-click="stepNext(1)">下一步</button>
             </div>
         </div>
     </div>

+ 31 - 24
src/main/resources/static/app/main/train/trainingClass/edit.js

@@ -1,12 +1,10 @@
 (function ($app) {
-    $app.module('gtPartyApp').controller('pxClassEditCtrl', function ($scope, $http, $modal, $ocLazyLoad, $alert, $loading, $state, $bsRouterState, AuthUser, $timeout, $partySelect, $excel) {
+    $app.module('gtPartyApp').controller('pxTrainingClassEditCtrl', function ($scope, $http, $modal, $ocLazyLoad, $alert, $loading, $state, $bsRouterState, AuthUser, $timeout, $partySelect, $excel) {
         $stateParams = $bsRouterState.$params($scope);
-
         $stateParams.classCourseControllerParams = {
             op: 2,
-            pxClassId: ''
+            id: $stateParams.id == undefined ? "" : $stateParams.id,
         };
-
         $scope.dataScope = parseInt(AuthUser.getUser().dataScope);//角色数据范围;
 
         const opEnum = {
@@ -17,10 +15,6 @@
         //定义数据集合
         $scope.step = 1;
         $scope.signupTab = 1;
-        /**
-         * 1新增,2修改
-         * @type {number}
-         */
         $scope.op = $stateParams.op || opEnum.新增;
         $scope.dataModel = {
             id: $stateParams.id == undefined ? "" : $stateParams.id,
@@ -28,6 +22,7 @@
             dzzdm: AuthUser.getUser().dwId
         };
         $scope.addressList = [];
+
         //选择党委
         $scope.partyConfig = {
             scope: $scope,
@@ -50,13 +45,13 @@
 
         //选择成员
         $scope.selectUserlist = {
-            url: '../../api/partyUser/getAllPartyUserList',
+            url: "../../api/partyUser/getPartyUserList",
             title: '人员选择',
             isMulti: true,
             selectData: {xm: '姓名', szdzb: '所在组织架构'},
-            columns: {XM: '姓名', XBMC: '性别', DNZW: '职务', PARTYBRANCHNAME: '所属支部'},
+            columns: {XM: '姓名', XBMC: '性别', JG: '籍贯', DZZMC: '所在组织架构'},
             selectLabelKey: 'XM',
-            selectValuekey: 'RYBM',
+            selectValuekey: 'RYJBXXBS',
             selectedValueData: '',
             selectedLabeData: '',
             selectedJData: [],
@@ -65,6 +60,7 @@
             },
             onSelect: function (value, items) {
                 if (items && items.length > 0) {
+                    console.log(items)
                     items.forEach(u => {
                         if ($scope.dataModel.userList.filter(it => it.userNo == u.RYBM).length == 0) {
                             $scope.dataModel.userList.push({
@@ -72,9 +68,10 @@
                                 userName: u.XM,
                                 gender: u.XBMC,
                                 genderId: u.XB,
-                                dzzdm: u.PARTYBRANCHCODE,
-                                dzzmc: u.PARTYBRANCHNAME,
-                                phone: u.MOBILE
+                                dzzdm: u.SZDZBDM,
+                                dzzmc: u.DZZMC,
+                                phone: u.MOBILE,
+                                ryjbxxbs: u.RYJBXXBS
                             });
                         }
                     });
@@ -85,6 +82,18 @@
                 }
             }
         };
+        $scope.$watch('dataModel.userList', function (newVal) {
+            if($scope.dataModel.userList){
+                $scope.setRemoveUser();
+            }
+        }, true);
+
+        $scope.setRemoveUser = function () {
+            $scope.selectUserlist.selectParams.removeUsers = "";
+            angular.forEach($scope.dataModel.userList, function (val, index) {
+                $scope.selectUserlist.selectParams.removeUsers += val.ryjbxxbs + ','
+            });
+        };
 
         $scope.tabChange = function (step) {
             if ($scope.op === opEnum.修改) {
@@ -104,6 +113,7 @@
             }).then(function (result) {
                 if (result.data.success) {
                     $scope.dataModel = result.data.item;
+                    $stateParams.classCourseControllerParams.id = $scope.dataModel.id
                 }
             }, function () {
                 $scope.showMsg('错误', '服务器错误');
@@ -113,7 +123,7 @@
         $scope.getAddressList = function () {
             $http({
                 method: 'get',
-                url: '../../api/train/class/getAddressList',
+                url: '../../api/train/trainingclass/getUserAddressList',
                 params: {}
             }).then(function (result) {
                 $scope.addressList = result.data.item;
@@ -140,14 +150,12 @@
                     $http({
                         method: "post",
                         url: "../../api/train/trainingclass/save",
-                        data: {
-                            data: $scope.dataModel
-                        }
+                        data: $scope.dataModel
                     }).then(function (result) {
                         $loading.hide();
                         if (result.data.success) {
                             $scope.showMsg('成功', "保存成功");
-                            $scope.$emit("tabReloadData", {name: 'PxTrainingClassListCtrl', data: 1});
+                            $scope.$emit("tabReloadData", {name: 'pxTrainingClassListCtrl', data: 1});
                             $scope.step = 2;
                         } else {
                             $scope.showMsg('失败', result.data.msg || result.data.message);
@@ -181,18 +189,16 @@
                 columns: {
                     '所在支部': 'dzzmc',
                     '姓名': 'userName',
-                    '手机号码': 'phone',
-                    '性别': 'gender'
+                    '手机号码': 'phone'
                 },
                 errorcolumns: {
                     'dzzmc': '所在支部',
                     'userName': '姓名',
                     'phone': '手机号码',
-                    'gender': '性别',
                     'errorInfo': '错误信息'
                 },
                 readonly: false,
-                templateUrl: '/doc/template/报名人员导入模版.xlsx',
+                templateUrl: '/doc/template/参培人员导入模版.xlsx',
                 typeparams: {
                     types: ['xls', 'xlsx'],
                     errormsg: '请选择excel格式文件'
@@ -220,6 +226,7 @@
                                     userName: it.userName,
                                     genderId: it.genderId,
                                     gender: it.gender,
+                                    phone: it.phone,
                                     dzzdm: it.dzzdm,
                                     dzzmc: it.dzzmc
                                 });
@@ -251,7 +258,7 @@
 
         $scope.pagechange = function () {
             $bsRouterState.$closeTab($scope);
-            $bsRouterState.go('home.pxTrainingClassList');
+            $scope.$emit("tabReloadData", {name: 'pxTrainingClassListCtrl', data: 1});
         };
     });
 })(angular);

+ 7 - 0
src/main/resources/static/app/main/train/trainingClass/list.html

@@ -97,6 +97,7 @@
                                 <tr>
                                     <th class="th-rownum"><div>序号</div></th>
                                     <th>主办组织</th>
+                                    <th>培训名称</th>
                                     <th>培训时间</th>
                                     <th>培训天数</th>
                                     <th>培训地址</th>
@@ -108,6 +109,7 @@
                                 <tr ng-repeat="it in dataList">
                                     <td class="text-center" td-rownum index="$index" pageindex="selectparams.pageindex" pagesize="selectparams.pagesize"></td>
                                     <td class="text-center">{{it.dzzmc}}</td>
+                                    <td class="text-center">{{it.trainingClassName}}</td>
                                     <td class="text-center">{{it.beginDate|date:'yyyy-MM-dd'}}~{{it.endDate|date:'yyyy-MM-dd'}}</td>
                                     <td class="text-center">{{it.dateDiffDay}}</td>
                                     <td style="min-width: 300px !important;word-wrap: break-word;word-break: break-all;white-space: normal;">{{it.address}}</td>
@@ -140,6 +142,11 @@
                                                 title="修改">
                                             修改
                                         </button>
+                                        <button class="btn td-btn bg-light-green waves-effect"
+                                                ng-click="delete(it.id)"
+                                                title="删除">
+                                            删除
+                                        </button>
                                     </td>
                                 </tr>
                                 <tr ng-if="pageInfo.ptotal==0">

+ 10 - 8
src/main/resources/static/app/main/train/trainingClass/list.js

@@ -1,10 +1,10 @@
 (function ($app) {
-    $app.module('gtPartyApp').controller('PxTrainingClassListCtrl', function ($scope, $http, $modal, $ocLazyLoad, $alert, $loading, $state, $bsRouterState, AuthUser, $timeout, $excel, $partySelect, $filter) {
+    $app.module('gtPartyApp').controller('pxTrainingClassListCtrl', function ($scope, $http, $modal, $ocLazyLoad, $alert, $loading, $state, $bsRouterState, AuthUser, $timeout, $excel, $partySelect, $filter) {
         $scope.isShow = false;
         $scope.moreTxt = "更多";
-        $scope.tabNameAdd = "home.PxTrainingClassAdd";
-        $scope.tabNameEdit = "home.PxTrainingClassEdit";
-        $scope.tabNameDetail = "home.PxTrainingClassDetail";
+        $scope.tabNameAdd = "home.pxTrainingClassAdd";
+        $scope.tabNameEdit = "home.pxTrainingClassEdit";
+        $scope.tabNameDetail = "home.pxTrainingClassDetail";
         $scope.dataList = [];
 
         //组织树参数
@@ -29,7 +29,7 @@
         $scope.pageInfo = {ptotal: 0};
 
         $scope.$on('tabChildReloadData', function (event, data) {
-            if (data.name == 'PxTrainingClassListCtrl') {
+            if (data.name == 'pxTrainingClassListCtrl') {
                 $scope.loadData();
             }
         });
@@ -99,7 +99,8 @@
             $bsRouterState.$closeTabName($scope.tabNameAdd);
             $timeout(function () {
                 $bsRouterState.go($scope.tabNameAdd, {
-                    id: ''
+                    id: '',
+                    op: 1
                 });
             }, 100);
         };
@@ -108,7 +109,8 @@
             $bsRouterState.$closeTabName($scope.tabNameEdit);
             $timeout(function () {
                 $bsRouterState.go($scope.tabNameEdit, {
-                    id: id
+                    id: id,
+                    op: 2
                 });
             }, 100);
         };
@@ -121,7 +123,7 @@
                 });
             }, 100);
         };
-        
+
         $scope.isShowClick = function () {
             $scope.isShow = !$scope.isShow;
             if ($scope.moreTxt == "更多") {

BIN
src/main/resources/static/doc/template/参培人员导入模版.xlsx