فهرست منبع

代码合并,冲突解决

chenw 6 سال پیش
والد
کامیت
c2caf32b71
50فایلهای تغییر یافته به همراه1167 افزوده شده و 404 حذف شده
  1. 19 15
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/ClassServiceImpl.java
  2. 2 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/GradeServiceImpl.java
  3. 1 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/StudentServiceImpl.java
  4. 6 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/controller/HomeWorkController.java
  5. 7 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/controller/NoticeController.java
  6. 2 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/service/HomeWorkService.java
  7. 2 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/service/NoticeService.java
  8. 9 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/service/impl/HomeWorkServiceImpl.java
  9. 9 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/service/impl/NoticeServiceImpl.java
  10. 2 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/exception/BizExceptionCode.java
  11. 2 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/HomeWorkMapper.java
  12. 2 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/NoticeMapper.java
  13. 6 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/SysClazzMapper.java
  14. 2 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/SysStudentMapper.java
  15. 3 3
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/ClassForm.java
  16. 20 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/SysClazz.java
  17. 60 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/SysStudent.java
  18. 41 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/SysTeacher.java
  19. 73 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/SysTeacherClazz.java
  20. 5 0
      applications/school/school-server/src/main/resources/mapper/HomeWorkMapper.xml
  21. 5 0
      applications/school/school-server/src/main/resources/mapper/NotifyMapper.xml
  22. 92 7
      applications/school/school-server/src/main/resources/mapper/SysClazzMapper.xml
  23. 67 1
      applications/school/school-server/src/main/resources/mapper/SysStudentMapper.xml
  24. 40 0
      applications/school/school-server/src/main/resources/mapper/SysTeacherMapper.xml
  25. 26 14
      frontend/pc-web/app/model/Timetable.js
  26. 11 0
      frontend/pc-web/app/store/Ethnicity.js
  27. 39 3
      frontend/pc-web/app/store/Subject.js
  28. 67 37
      frontend/pc-web/app/view/Interaction/homework/List.js
  29. 47 6
      frontend/pc-web/app/view/Interaction/homework/Release.js
  30. 31 7
      frontend/pc-web/app/view/Interaction/notice/List.js
  31. 44 0
      frontend/pc-web/app/view/Interaction/notice/SchoolNotice.js
  32. 3 6
      frontend/pc-web/app/view/Interaction/score/Detail.js
  33. 47 56
      frontend/pc-web/app/view/Interaction/score/List.js
  34. 63 53
      frontend/pc-web/app/view/Interaction/timetable/Detail.js
  35. 17 0
      frontend/pc-web/app/view/Interaction/timetable/DetailController.js
  36. 75 21
      frontend/pc-web/app/view/Interaction/timetable/List.js
  37. 2 2
      frontend/pc-web/app/view/auth/ReLogin.js
  38. 1 1
      frontend/pc-web/app/view/auth/ReLoginController.js
  39. 4 2
      frontend/pc-web/app/view/basic/class/ClassInfoController.js
  40. 40 14
      frontend/pc-web/app/view/basic/school/SchoolInfo.js
  41. 55 66
      frontend/pc-web/app/view/basic/staff/StaffDetail.js
  42. 19 25
      frontend/pc-web/app/view/basic/staff/StaffList.js
  43. 33 26
      frontend/pc-web/app/view/basic/student/StudentDetail.js
  44. 17 0
      frontend/pc-web/app/view/basic/student/StudentDetailController.js
  45. 16 29
      frontend/pc-web/app/view/basic/student/StudentList.js
  46. 2 2
      frontend/pc-web/app/view/core/base/GridPanel.js
  47. 2 5
      frontend/pc-web/app/view/core/button/import/Window.js
  48. 1 1
      frontend/pc-web/app/view/core/form/field/ConDateField.js
  49. 14 0
      frontend/pc-web/app/view/core/form/field/EthnicityComboBox.js
  50. 14 0
      frontend/pc-web/app/view/core/form/field/GenderComboBox.js

+ 19 - 15
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/ClassServiceImpl.java

@@ -37,7 +37,7 @@ public class ClassServiceImpl implements ClassService{
         ClassForm cf = new ClassForm();
         SysClazz clazz = sysClazzMapper.selectByPrimaryKey(id);
         List<SysStudent> students = sysStudentMapper.selectByConditon("clazz_id=" + id, school_id);
-        List<TeacherDetail> teacherDetails = sysClazzMapper.selectTeacher(id);
+        List<SysTeacherClazz> teacherDetails = sysClazzMapper.selectTeacher(id);
         cf.setMain(clazz);
         cf.setItems1(students);
         cf.setItems2(teacherDetails);
@@ -51,32 +51,36 @@ public class ClassServiceImpl implements ClassService{
         }
         SysClazz clazz = formdata.getMain();
         List<SysStudent> students = formdata.getItems1();
+        List<SysTeacherClazz> teachers = formdata.getItems2();
         Long id = clazz.getClazz_id();
         Long school_id = BaseContextHolder.getSchoolId();
+        //判断是否存在年纪名称
+        if (StringUtils.isEmpty(clazz.getClazz_grade())) {
+            throw new BizException(BizExceptionCode.NONGRADE);
+        }
 
         //插入从表数据
-        List<SysStudent> insertDetails = new ArrayList<>();
+        List<SysTeacherClazz> insertDetails = new ArrayList<>();
         //更新从表数据
-        List<SysStudent> updateDetails = new ArrayList<>();
+        List<SysTeacherClazz> updateDetails = new ArrayList<>();
         //新增
         if (StringUtils.isEmpty(id) || "0".equals(id.toString())) {
             clazz.setClazz_status(1);
+            clazz.setClazz_nickname(clazz.getClazz_grade() + clazz.getClazz_name());
             clazz.setSchool_id(school_id);
             sysClazzMapper.insertSelective(clazz);
-            for (SysStudent student : students) {
-                student.setClazz_id(clazz.getClazz_id());
-                student.setStu_status(1);
-                student.setSchool_id(school_id);
-                sysStudentMapper.insertSelective(student);
+            for (SysTeacherClazz teacher : teachers) {
+                teacher.setClazz_id(clazz.getClazz_id());
+                sysClazzMapper.insertTeacher(teacher);
             }
             return new DocBaseDTO(clazz.getClazz_id());
         }
         //更新
         sysClazzMapper.updateByPrimaryKeySelective(clazz);
         //更新明细
-        for (SysStudent detail : students) {
+        for (SysTeacherClazz detail : teachers) {
             detail.setClazz_id(clazz.getClazz_id());
-            if (StringUtils.isEmpty(detail.getStu_id()) || "0".equals(detail.getStu_id().toString())) {
+            if (StringUtils.isEmpty(detail.getTeacher_clazz_id()) || "0".equals(detail.getTeacher_clazz_id().toString())) {
                 insertDetails.add(detail);
             } else {
                 updateDetails.add(detail);
@@ -85,15 +89,14 @@ public class ClassServiceImpl implements ClassService{
         //插入从表
         if (insertDetails.size() > 0) {
             Long pr_id = null;
-            for (SysStudent item : insertDetails) {
-                item.setSchool_id(school_id);
-                sysStudentMapper.insertSelective(item);
+            for (SysTeacherClazz item : insertDetails) {
+                sysClazzMapper.insertTeacher(item);
             }
         }
         //更新从表
         if (updateDetails.size() > 0) {
-            for (SysStudent item : updateDetails) {
-                sysStudentMapper.updateByPrimaryKeySelective(item);
+            for (SysTeacherClazz item : updateDetails) {
+                sysClazzMapper.updateTeacher(item);
             }
         }
         return new DocBaseDTO(clazz.getClazz_id());
@@ -109,5 +112,6 @@ public class ClassServiceImpl implements ClassService{
             throw new BizException(BizExceptionCode.EXISTS_STU);
         }
         sysClazzMapper.deleteByPrimaryKey(id);
+        sysStudentMapper.deleteTeacher(id);
     }
 }

+ 2 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/GradeServiceImpl.java

@@ -136,6 +136,8 @@ public class GradeServiceImpl implements GradeService{
                         if (null != detail) {
                            detail.setGrade_id(grade_id);
                            detail.setClazz_status(1);
+                           detail.setClazz_grade(grade.getGrade_name());
+                           detail.setClazz_nickname(grade.getGrade_name() + detail.getClazz_name());
                            clazzes.add(detail);
                         }
                     }

+ 1 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/StudentServiceImpl.java

@@ -75,6 +75,7 @@ public class StudentServiceImpl implements StudentService{
         List<SysParents> items = formdata.getItems();
         Long id = student.getStu_id();
         Long schoolid = BaseContextHolder.getSchoolId();
+        schoolid = 1l;
         //插入从表数据
         List<SysParents> insertDetails = new ArrayList<>();
         //更新从表数据

+ 6 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/controller/HomeWorkController.java

@@ -52,4 +52,10 @@ public class HomeWorkController {
         homeWorkService.batchDelete(baseDTOs);
         return Result.success();
     }
+
+    @PostMapping("/publish/{id}")
+    public Result publish(@PathVariable("id") Long id){
+        homeWorkService.publish(id);
+        return Result.success();
+    }
 }

+ 7 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/controller/NoticeController.java

@@ -53,4 +53,11 @@ public class NoticeController {
         noticeService.batchDelete(baseDTOs);
         return Result.success();
     }
+
+    @PostMapping("/publish/{id}")
+    public Result publish(@PathVariable("id") Long id){
+        noticeService.publish(id);
+        return Result.success();
+    }
+
 }

+ 2 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/service/HomeWorkService.java

@@ -18,4 +18,6 @@ public interface HomeWorkService {
     void batchDelete(BatchDealBaseDTO baseDTOs);
 
     HomeWork getFormdata(Long id);
+
+    void publish(Long id);//发布
 }

+ 2 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/service/NoticeService.java

@@ -18,4 +18,6 @@ public interface NoticeService {
     void delete(Long id);
 
     void batchDelete(BatchDealBaseDTO baseDTOs);
+
+    void publish(Long id);//发布
 }

+ 9 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/service/impl/HomeWorkServiceImpl.java

@@ -38,6 +38,7 @@ public class HomeWorkServiceImpl implements HomeWorkService{
         formdata.setSchool_id(school_id);
         //新增
         if (StringUtils.isEmpty(formdata.getTask_id()) || "0".equals(formdata.getTask_id().toString())) {
+            formdata.setTask_status(2);
             homeWorkMapper.insertSelective(formdata);
 
         } else {
@@ -90,4 +91,12 @@ public class HomeWorkServiceImpl implements HomeWorkService{
         HomeWork data = homeWorkMapper.selectByPrimaryKey(id);
         return data;
     }
+
+    @Override
+    public void publish(Long id) {
+        if(StringUtils.isEmpty(id) || "0".equals(id)) {
+            return;
+        }
+        homeWorkMapper.updateByPublish(id);
+    }
 }

+ 9 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/service/impl/NoticeServiceImpl.java

@@ -38,6 +38,7 @@ public class NoticeServiceImpl implements NoticeService{
         formdata.setSchool_id(school_id);
         //新增
         if (StringUtils.isEmpty(formdata.getNotify_id()) || "0".equals(formdata.getNotify_id().toString())) {
+            formdata.setNotify_status(2);
             noticeMapper.insertSelective(formdata);
 
         } else {
@@ -90,4 +91,12 @@ public class NoticeServiceImpl implements NoticeService{
             delete(base.getId());
         }
     }
+
+    @Override
+    public void publish(Long id) {
+        if(StringUtils.isEmpty(id) || "0".equals(id)) {
+            return;
+        }
+        noticeMapper.updateByPublish(id);
+    }
 }

+ 2 - 1
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/exception/BizExceptionCode.java

@@ -11,7 +11,8 @@ public enum BizExceptionCode implements BaseExceptionCode {
     BIZ_IMPORT_ERROREXCEL(500002, "请选用正确的导入模板"),
     EMPTY_DATA(76100,"数据为空,请填写后再保存"),
     EXISTS_STU(500003,"该班级存在学生,无法删除"),
-    USELESS_DATA(50001, "无效数据");
+    USELESS_DATA(50001, "无效数据"),
+    NONGRADE(500004, "无年纪名称");
 
     private int code;
     private String message;

+ 2 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/HomeWorkMapper.java

@@ -25,4 +25,6 @@ public interface HomeWorkMapper {
     int updateByPrimaryKey(HomeWork record);
 
     List<HomeWork> selectByConditon(@Param("con") String condition, @Param("school_id") Long schoolId);
+
+    int updateByPublish(Long task_id);
 }

+ 2 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/NoticeMapper.java

@@ -24,4 +24,6 @@ public interface NoticeMapper {
     int updateByPrimaryKey(Notify record);
 
     List<Notify> selectByConditon(@Param("con") String con, @Param("school_id") Long schoolId);
+
+    int updateByPublish(Long notify_id);
 }

+ 6 - 1
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/SysClazzMapper.java

@@ -1,6 +1,7 @@
 package com.usoftchina.smartschool.school.mapper;
 
 import com.usoftchina.smartschool.school.po.SysClazz;
+import com.usoftchina.smartschool.school.po.SysTeacherClazz;
 import com.usoftchina.smartschool.school.po.TeacherDetail;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -23,7 +24,11 @@ public interface SysClazzMapper {
 
     List<SysClazz> selectBygrade(Long id);
 
-    List<TeacherDetail> selectTeacher(Long id);
+    List<SysTeacherClazz> selectTeacher(Long id);
 
     SysClazz selectByName(@Param("name") String name, @Param("gradeId") Long gradeId, @Param("schoolId") Long schoolId);
+
+    void insertTeacher(SysTeacherClazz teacher);
+
+    void updateTeacher(SysTeacherClazz item);
 }

+ 2 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/SysStudentMapper.java

@@ -44,4 +44,6 @@ public interface SysStudentMapper {
     Integer checkStu(Long id);
 
     void deleteRelationById(Long id);
+
+    void deleteTeacher(Long id);
 }

+ 3 - 3
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/ClassForm.java

@@ -10,7 +10,7 @@ import java.util.List;
 public class ClassForm implements Serializable{
     private SysClazz main;
     private List<SysStudent> items1;
-    private List<TeacherDetail> items2;
+    private List<SysTeacherClazz> items2;
 
 
     public SysClazz getMain() {
@@ -29,11 +29,11 @@ public class ClassForm implements Serializable{
         this.items1 = items1;
     }
 
-    public List<TeacherDetail> getItems2() {
+    public List<SysTeacherClazz> getItems2() {
         return items2;
     }
 
-    public void setItems2(List<TeacherDetail> items2) {
+    public void setItems2(List<SysTeacherClazz> items2) {
         this.items2 = items2;
     }
 }

+ 20 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/SysClazz.java

@@ -24,6 +24,10 @@ public class SysClazz implements Serializable{
 
     private Integer clazz_no;
 
+    private String clazz_grade;
+
+    private String clazz_nickname;
+
     private Boolean leaf = true;
 
     public Long getSchool_id() {
@@ -34,6 +38,22 @@ public class SysClazz implements Serializable{
         this.school_id = school_id;
     }
 
+    public String getClazz_grade() {
+        return clazz_grade;
+    }
+
+    public void setClazz_grade(String clazz_grade) {
+        this.clazz_grade = clazz_grade;
+    }
+
+    public String getClazz_nickname() {
+        return clazz_nickname;
+    }
+
+    public void setClazz_nickname(String clazz_nickname) {
+        this.clazz_nickname = clazz_nickname;
+    }
+
     public Boolean getLeaf() {
         return leaf;
     }

+ 60 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/SysStudent.java

@@ -37,6 +37,66 @@ public class SysStudent {
 
     private Long school_id;
 
+    private String stu_classnickname;
+
+    private String stu_class;
+
+    private String stu_grade;
+
+    private String stu_native;
+
+    private String stu_nation;
+
+    private String stu_political;
+
+    public String getStu_classnickname() {
+        return stu_classnickname;
+    }
+
+    public void setStu_classnickname(String stu_classnickname) {
+        this.stu_classnickname = stu_classnickname;
+    }
+
+    public String getStu_class() {
+        return stu_class;
+    }
+
+    public void setStu_class(String stu_class) {
+        this.stu_class = stu_class;
+    }
+
+    public String getStu_grade() {
+        return stu_grade;
+    }
+
+    public void setStu_grade(String stu_grade) {
+        this.stu_grade = stu_grade;
+    }
+
+    public String getStu_native() {
+        return stu_native;
+    }
+
+    public void setStu_native(String stu_native) {
+        this.stu_native = stu_native;
+    }
+
+    public String getStu_nation() {
+        return stu_nation;
+    }
+
+    public void setStu_nation(String stu_nation) {
+        this.stu_nation = stu_nation;
+    }
+
+    public String getStu_political() {
+        return stu_political;
+    }
+
+    public void setStu_political(String stu_political) {
+        this.stu_political = stu_political;
+    }
+
     public Long getStu_id() {
         return stu_id;
     }

+ 41 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/SysTeacher.java

@@ -50,6 +50,47 @@ public class SysTeacher {
 
     private String teacher_education;
 
+    private String teacher_native;
+
+    private Integer teacher_marriage;
+
+    private String teacher_major;
+
+    private String teacher_political;
+
+
+    public String getTeacher_political() {
+        return teacher_political;
+    }
+
+    public void setTeacher_political(String teacher_political) {
+        this.teacher_political = teacher_political;
+    }
+
+    public String getTeacher_native() {
+        return teacher_native;
+    }
+
+    public void setTeacher_native(String teacher_native) {
+        this.teacher_native = teacher_native;
+    }
+
+    public Integer getTeacher_marriage() {
+        return teacher_marriage;
+    }
+
+    public void setTeacher_marriage(Integer teacher_marriage) {
+        this.teacher_marriage = teacher_marriage;
+    }
+
+    public String getTeacher_major() {
+        return teacher_major;
+    }
+
+    public void setTeacher_major(String teacher_major) {
+        this.teacher_major = teacher_major;
+    }
+
     public String getTeacher_phone() {
         return teacher_phone;
     }

+ 73 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/SysTeacherClazz.java

@@ -0,0 +1,73 @@
+package com.usoftchina.smartschool.school.po;
+
+public class SysTeacherClazz {
+    private Long teacher_clazz_id;
+
+    private Long clazz_id;
+
+    private Long teacher_id;
+
+    private Long subject_id;
+
+    private String clazz_name;
+
+    private String teacher_name;
+
+    private String subject_name;
+
+    public Long getTeacher_clazz_id() {
+        return teacher_clazz_id;
+    }
+
+    public void setTeacher_clazz_id(Long teacher_clazz_id) {
+        this.teacher_clazz_id = teacher_clazz_id;
+    }
+
+    public Long getClazz_id() {
+        return clazz_id;
+    }
+
+    public void setClazz_id(Long clazz_id) {
+        this.clazz_id = clazz_id;
+    }
+
+    public Long getTeacher_id() {
+        return teacher_id;
+    }
+
+    public void setTeacher_id(Long teacher_id) {
+        this.teacher_id = teacher_id;
+    }
+
+    public Long getSubject_id() {
+        return subject_id;
+    }
+
+    public void setSubject_id(Long subject_id) {
+        this.subject_id = subject_id;
+    }
+
+    public String getClazz_name() {
+        return clazz_name;
+    }
+
+    public void setClazz_name(String clazz_name) {
+        this.clazz_name = clazz_name == null ? null : clazz_name.trim();
+    }
+
+    public String getTeacher_name() {
+        return teacher_name;
+    }
+
+    public void setTeacher_name(String teacher_name) {
+        this.teacher_name = teacher_name == null ? null : teacher_name.trim();
+    }
+
+    public String getSubject_name() {
+        return subject_name;
+    }
+
+    public void setSubject_name(String subject_name) {
+        this.subject_name = subject_name == null ? null : subject_name.trim();
+    }
+}

+ 5 - 0
applications/school/school-server/src/main/resources/mapper/HomeWorkMapper.xml

@@ -193,4 +193,9 @@
     </where>
     ORDER BY task_id DESC
   </select>
+  <update id="updateByPublish" parameterType="java.lang.Long">
+    update task_notify
+    set task_status = 1
+    where task_id = #{task_id,jdbcType=BIGINT}
+  </update>
 </mapper>

+ 5 - 0
applications/school/school-server/src/main/resources/mapper/NotifyMapper.xml

@@ -190,4 +190,9 @@
     </where>
     ORDER BY notify_id DESC
   </select>
+  <update id="updateByPublish" parameterType="java.lang.Long">
+    update notify
+    set notify_status = 1
+    where notify_id = #{notify_id,jdbcType=BIGINT}
+  </update>
 </mapper>

+ 92 - 7
applications/school/school-server/src/main/resources/mapper/SysClazzMapper.xml

@@ -9,6 +9,8 @@
     <result column="clazz_remarks" property="clazz_remarks" jdbcType="VARCHAR" />
     <result column="grade_id" property="grade_id" jdbcType="BIGINT" />
     <result column="school_id" property="school_id" jdbcType="BIGINT" />
+    <result column="clazz_nickname" property="clazz_nickname" jdbcType="VARCHAR" />
+    <result column="clazz_grade" property="clazz_grade" jdbcType="VARCHAR" />
   </resultMap>
   <sql id="Base_Column_List" >
     clazz_id, clazz_name, clazz_adress, clazz_status, clazz_remarks, grade_id
@@ -56,6 +58,12 @@
       <if test="school_id != null" >
         school_id,
       </if>
+      <if test="clazz_grade != null" >
+        clazz_grade,
+      </if>
+      <if test="clazz_nickname != null" >
+        clazz_nickname,
+      </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides="," >
       <if test="clazz_name != null" >
@@ -76,6 +84,12 @@
       <if test="school_id != null" >
         #{school_id,jdbcType=BIGINT}
       </if>
+      <if test="clazz_grade != null" >
+        #{clazz_grade,jdbcType=VARCHAR},
+      </if>
+      <if test="clazz_nickname != null" >
+        #{clazz_nickname,jdbcType=VARCHAR},
+      </if>
     </trim>
   </insert>
   <update id="updateByPrimaryKeySelective" parameterType="com.usoftchina.smartschool.school.po.SysClazz" >
@@ -96,6 +110,12 @@
       <if test="grade_id != null" >
         grade_id = #{grade_id,jdbcType=BIGINT},
       </if>
+      <if test="clazz_nickname != null" >
+        clazz_nickname = #{clazz_nickname,jdbcType=VARCHAR},
+      </if>
+      <if test="clazz_grade != null" >
+        clazz_grade = #{clazz_grade,jdbcType=VARCHAR},
+      </if>
     </set>
     where clazz_id = #{clazz_id,jdbcType=BIGINT}
   </update>
@@ -124,12 +144,77 @@
     <result column="classes" property="classes" jdbcType="VARCHAR" />
   </resultMap>
 
-  <select id="selectTeacher" parameterType="long" resultMap="teacherMap">
-    select  sys_teacher.teacher_name teacher,sys_grade.grade_name grade,sys_clazz.clazz_name classes,subject.subject_name subject
-from sys_teacher_clazz left join subject on sys_teacher_clazz.subject_id = subject.subject_id
-left join sys_clazz on sys_teacher_clazz.clazz_id = sys_clazz.clazz_id
-left join sys_grade on sys_grade.grade_id=sys_clazz.grade_id
-left join sys_teacher on sys_teacher.teacher_id = sys_teacher_clazz.teacher_id
-where sys_teacher_clazz.clazz_id=#{id};
+  <select id="selectTeacher" parameterType="long" resultType="com.usoftchina.smartschool.school.po.SysTeacherClazz">
+    select * from sys_teacher_clazz where teacher_clazz_id = #{id}
   </select>
+
+
+  <insert id="insertTeacher" parameterType="com.usoftchina.smartschool.school.po.SysTeacherClazz" >
+    insert into sys_teacher_clazz
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="clazz_id != null" >
+        clazz_id,
+      </if>
+      <if test="teacher_id != null" >
+        teacher_id,
+      </if>
+      <if test="subject_id != null" >
+        subject_id,
+      </if>
+      <if test="clazz_name != null" >
+        clazz_name,
+      </if>
+      <if test="teacher_name != null" >
+        teacher_name,
+      </if>
+      <if test="subject_name != null" >
+        subject_name,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="clazz_id != null" >
+        #{clazz_id,jdbcType=BIGINT},
+      </if>
+      <if test="teacher_id != null" >
+        #{teacher_id,jdbcType=BIGINT},
+      </if>
+      <if test="subject_id != null" >
+        #{subject_id,jdbcType=BIGINT},
+      </if>
+      <if test="clazz_name != null" >
+        #{clazz_name,jdbcType=VARCHAR},
+      </if>
+      <if test="teacher_name != null" >
+        #{teacher_name,jdbcType=VARCHAR},
+      </if>
+      <if test="subject_name != null" >
+        #{subject_name,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+
+  <update id="updateTeacher" parameterType="com.usoftchina.smartschool.school.po.SysTeacherClazz" >
+    update sys_teacher_clazz
+    <set >
+      <if test="clazz_id != null" >
+        clazz_id = #{clazz_id,jdbcType=BIGINT},
+      </if>
+      <if test="teacher_id != null" >
+        teacher_id = #{teacher_id,jdbcType=BIGINT},
+      </if>
+      <if test="subject_id != null" >
+        subject_id = #{subject_id,jdbcType=BIGINT},
+      </if>
+      <if test="clazz_name != null" >
+        clazz_name = #{clazz_name,jdbcType=VARCHAR},
+      </if>
+      <if test="teacher_name != null" >
+        teacher_name = #{teacher_name,jdbcType=VARCHAR},
+      </if>
+      <if test="subject_name != null" >
+        subject_name = #{subject_name,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where teacher_clazz_id = #{teacher_clazz_id,jdbcType=BIGINT}
+  </update>
 </mapper>

+ 67 - 1
applications/school/school-server/src/main/resources/mapper/SysStudentMapper.xml

@@ -17,7 +17,14 @@
     <result column="stu_remarks" property="stu_remarks" jdbcType="VARCHAR" />
     <result column="clazz_id" property="clazz_id" jdbcType="BIGINT" />
     <result column="school_id" property="school_id" jdbcType="BIGINT" />
+    <result column="stu_classnickname" property="stu_classnickname" jdbcType="VARCHAR" />
+    <result column="stu_class" property="stu_class" jdbcType="VARCHAR" />
+    <result column="stu_grade" property="stu_grade" jdbcType="VARCHAR" />
+    <result column="stu_native" property="stu_native" jdbcType="VARCHAR" />
+    <result column="stu_nation" property="stu_nation" jdbcType="VARCHAR" />
+    <result column="stu_political" property="stu_political" jdbcType="VARCHAR" />
   </resultMap>
+
   <sql id="Base_Column_List" >
     stu_id, stu_number, stu_name, stu_enroll_date, stu_graduate_date, stu_birthday, stu_age, 
     stu_sex, stu_address, stu_photo, stu_status, stu_is_write, stu_remarks, clazz_id, 
@@ -25,7 +32,7 @@
   </sql>
   <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
     select 
-    <include refid="Base_Column_List" />
+    *
     from sys_student
     where stu_id = #{stu_id,jdbcType=BIGINT}
   </select>
@@ -95,6 +102,24 @@
       <if test="school_id != null" >
         school_id,
       </if>
+      <if test="stu_classnickname != null" >
+        stu_classnickname,
+      </if>
+      <if test="stu_class != null" >
+        stu_class,
+      </if>
+      <if test="stu_grade != null" >
+        stu_grade,
+      </if>
+      <if test="stu_native != null" >
+        stu_native,
+      </if>
+      <if test="stu_nation != null" >
+        stu_nation,
+      </if>
+      <if test="stu_political != null" >
+        stu_political,
+      </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides="," >
       <if test="stu_number != null" >
@@ -139,6 +164,24 @@
       <if test="school_id != null" >
         #{school_id,jdbcType=BIGINT},
       </if>
+      <if test="stu_classnickname != null" >
+        #{stu_classnickname,jdbcType=VARCHAR},
+      </if>
+      <if test="stu_class != null" >
+        #{stu_class,jdbcType=VARCHAR},
+      </if>
+      <if test="stu_grade != null" >
+        #{stu_grade,jdbcType=VARCHAR},
+      </if>
+      <if test="stu_native != null" >
+        #{stu_native,jdbcType=VARCHAR},
+      </if>
+      <if test="stu_nation != null" >
+        #{stu_nation,jdbcType=VARCHAR},
+      </if>
+      <if test="stu_political != null" >
+        #{stu_political,jdbcType=VARCHAR},
+      </if>
     </trim>
   </insert>
   <update id="updateByPrimaryKeySelective" parameterType="com.usoftchina.smartschool.school.po.SysStudent" >
@@ -186,6 +229,24 @@
       <if test="school_id != null" >
         school_id = #{school_id,jdbcType=BIGINT},
       </if>
+      <if test="stu_classnickname != null" >
+        stu_classnickname = #{stu_classnickname,jdbcType=VARCHAR},
+      </if>
+      <if test="stu_class != null" >
+        stu_class = #{stu_class,jdbcType=VARCHAR},
+      </if>
+      <if test="stu_grade != null" >
+        stu_grade = #{stu_grade,jdbcType=VARCHAR},
+      </if>
+      <if test="stu_native != null" >
+        stu_native = #{stu_native,jdbcType=VARCHAR},
+      </if>
+      <if test="stu_nation != null" >
+        stu_nation = #{stu_nation,jdbcType=VARCHAR},
+      </if>
+      <if test="stu_political != null" >
+        stu_political = #{stu_political,jdbcType=VARCHAR},
+      </if>
     </set>
     where stu_id = #{stu_id,jdbcType=BIGINT}
   </update>
@@ -363,4 +424,9 @@
   <select id="checkStu" parameterType="long" resultType="integer">
     select count(1) from sys_student where clazz_id=#{id}
   </select>
+
+  <delete id="deleteTeacher" parameterType="java.lang.Long" >
+    delete from sys_teacher_clazz
+    where teacher_clazz_id = #{teacher_clazz_id,jdbcType=BIGINT}
+  </delete>
 </mapper>

+ 40 - 0
applications/school/school-server/src/main/resources/mapper/SysTeacherMapper.xml

@@ -21,6 +21,10 @@
     <result column="teacher_nation" property="teacher_nation" jdbcType="VARCHAR" />
     <result column="teacher_school" property="teacher_school" jdbcType="VARCHAR" />
     <result column="teacher_education" property="teacher_education" jdbcType="VARCHAR" />
+    <result column="teacher_native" property="teacher_native" jdbcType="VARCHAR" />
+    <result column="teacher_major" property="teacher_major" jdbcType="VARCHAR" />
+    <result column="teacher_marriage" property="teacher_marriage" jdbcType="INTEGER" />
+    <result column="teacher_political" property="teacher_political" jdbcType="VARCHAR" />
   </resultMap>
   <sql id="Base_Column_List" >
     teacher_id, user_id, openid, school_id, teacher_number, teacher_name, teacher_sex, 
@@ -119,6 +123,18 @@
       <if test="teacher_education != null" >
         teacher_education,
       </if>
+      <if test="teacher_major != null" >
+        teacher_major,
+      </if>
+      <if test="teacher_native != null" >
+        teacher_native,
+      </if>
+      <if test="teacher_marriage != null" >
+        teacher_marriage,
+      </if>
+      <if test="teacher_political != null" >
+        teacher_political,
+      </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides="," >
       <if test="user_id != null" >
@@ -181,6 +197,18 @@
       <if test="teacher_education != null" >
         #{teacher_education,jdbcType=VARCHAR},
       </if>
+      <if test="teacher_major != null" >
+        #{teacher_major,jdbcType=VARCHAR},
+      </if>
+      <if test="teacher_native != null" >
+        #{teacher_native,jdbcType=VARCHAR},
+      </if>
+      <if test="teacher_marriage != null" >
+        #{teacher_marriage,jdbcType=INTEGER},
+      </if>
+      <if test="teacher_political != null" >
+        #{teacher_political,jdbcType=INTEGER},
+      </if>
     </trim>
   </insert>
   <update id="updateByPrimaryKeySelective" parameterType="com.usoftchina.smartschool.school.po.SysTeacher" >
@@ -246,6 +274,18 @@
       <if test="teacher_education != null" >
         teacher_education = #{teacher_education,jdbcType=VARCHAR},
       </if>
+      <if test="teacher_native != null" >
+        teacher_native = #{teacher_native,jdbcType=VARCHAR},
+      </if>
+      <if test="teacher_marriage != null" >
+        teacher_marriage = #{teacher_marriage,jdbcType=INTEGER},
+      </if>
+      <if test="teacher_major != null" >
+        teacher_major = #{teacher_major,jdbcType=VARCHAR},
+      </if>
+      <if test="teacher_political != null" >
+        teacher_political = #{teacher_political,jdbcType=VARCHAR},
+      </if>
     </set>
     where teacher_id = #{teacher_id,jdbcType=BIGINT}
   </update>

+ 26 - 14
frontend/pc-web/app/model/Timetable.js

@@ -4,34 +4,46 @@
 Ext.define('school.model.Timetable', {
     extend: 'school.model.Base',
     fields: [{
-        name: 'monday', type: 'string'
+        name: 'mon', type: 'string'
     }, {
-        name: 'tuesday', type: 'string'
+        name: 'tues', type: 'string'
     }, {
-        name: 'wednesday', type: 'string'
+        name: 'wed', type: 'string'
     }, {
-        name: 'thursday', type: 'string'
+        name: 'thur', type: 'string'
     }, {
-        name: 'friday', type: 'string'
+        name: 'fri', type: 'string'
     }, {
-        name: 'saturday', type: 'string'
+        name: 'sat', type: 'string'
     }, {
         name: 'sunday', type: 'string'
     }, {
-        name: 'period0', type: 'date'
+        name: 'startTime', type: 'string',
     }, {
-        name: 'periodText0', type: 'string',
+        name: 'endTime', type: 'string',
+    }, {
+        name: '_time1', type: 'date',
+        convert: function(v, rec) {
+            return new Date('1997-01-01 ' + rec.get('startTime'));
+        },
+        depends: ['startTime']
+    }, {
+        name: '_timeText1', type: 'string',
         convert: function(v, rec) {
-            return Ext.Date.format(rec.get('period0'), 'H:i');
+            return Ext.Date.format(rec.get('_time1'), 'H:i');
         },
-        depends: ['period0']
+        depends: ['_time1']
     }, {
-        name: 'period1', type: 'date'
+        name: '_time2', type: 'date',
+        convert: function(v, rec) {
+            return new Date('1997-01-01 ' + rec.get('endTime'));
+        },
+        depends: ['endTime']
     }, {
-        name: 'periodText1', type: 'string',
+        name: '_timeText2', type: 'string',
         convert: function(v, rec) {
-            return Ext.Date.format(rec.get('period1'), 'H:i');
+            return Ext.Date.format(rec.get('_time2'), 'H:i');
         },
-        depends: ['period1']
+        depends: ['_time2']
     }]
 });

+ 11 - 0
frontend/pc-web/app/store/Ethnicity.js

@@ -0,0 +1,11 @@
+Ext.define('school.store.Ethnicity', {
+    extend: 'Ext.data.ArrayStore',
+    alias: 'store.store_ethnicity',
+
+    fields: ['name', 'value'],
+    
+    // DATAS: ['汉族','满族','蒙古族','回族','藏族','维吾尔族','苗族','彝族','壮族','布依族','侗族','瑶族','白族','土家族','哈尼族','哈萨克族','傣族','黎族','傈僳族','佤族','畲族','高山族','拉祜族','水族','东乡族','纳西族','景颇族','柯尔克孜族','土族','达斡尔族','仫佬族','羌族','布朗族','撒拉族','毛南族','仡佬族','锡伯族','阿昌族','普米族','朝鲜族','塔吉克族','怒族','乌孜别克族','俄罗斯族','鄂温克族','德昂族','保安族','裕固族','京族','塔塔尔族','独龙族','鄂伦春族','赫哲族','门巴族','珞巴族','基诺族'],
+    
+    // JSON.stringify(DATAS.map(function(d){return [d, d]}))
+    data: [["汉族","汉族"],["满族","满族"],["蒙古族","蒙古族"],["回族","回族"],["藏族","藏族"],["维吾尔族","维吾尔族"],["苗族","苗族"],["彝族","彝族"],["壮族","壮族"],["布依族","布依族"],["侗族","侗族"],["瑶族","瑶族"],["白族","白族"],["土家族","土家族"],["哈尼族","哈尼族"],["哈萨克族","哈萨克族"],["傣族","傣族"],["黎族","黎族"],["傈僳族","傈僳族"],["佤族","佤族"],["畲族","畲族"],["高山族","高山族"],["拉祜族","拉祜族"],["水族","水族"],["东乡族","东乡族"],["纳西族","纳西族"],["景颇族","景颇族"],["柯尔克孜族","柯尔克孜族"],["土族","土族"],["达斡尔族","达斡尔族"],["仫佬族","仫佬族"],["羌族","羌族"],["布朗族","布朗族"],["撒拉族","撒拉族"],["毛南族","毛南族"],["仡佬族","仡佬族"],["锡伯族","锡伯族"],["阿昌族","阿昌族"],["普米族","普米族"],["朝鲜族","朝鲜族"],["塔吉克族","塔吉克族"],["怒族","怒族"],["乌孜别克族","乌孜别克族"],["俄罗斯族","俄罗斯族"],["鄂温克族","鄂温克族"],["德昂族","德昂族"],["保安族","保安族"],["裕固族","裕固族"],["京族","京族"],["塔塔尔族","塔塔尔族"],["独龙族","独龙族"],["鄂伦春族","鄂伦春族"],["赫哲族","赫哲族"],["门巴族","门巴族"],["珞巴族","珞巴族"],["基诺族","基诺族"]],
+});

+ 39 - 3
frontend/pc-web/app/store/Subject.js

@@ -8,13 +8,49 @@ Ext.define('school.store.Subject', {
     model: 'school.model.Subject',
 
     data: [{
-        code: 'language',
+        code: '1',
         name: '语文'
     }, {
-        code: 'math',
+        code: '2',
         name: '数学'
     }, {
-        code: 'english',
+        code: '3',
         name: '英语'
+    }, {
+        code: '4',
+        name: '物理'
+    }, {
+        code: '5',
+        name: '化学'
+    }, {
+        code: '6',
+        name: '生物'
+    }, {
+        code: '7',
+        name: '政治'
+    }, {
+        code: '8',
+        name: '历史'
+    }, {
+        code: '9',
+        name: '地理'
+    }, {
+        code: '10',
+        name: '体育'
+    }, {
+        code: '11',
+        name: '书法'
+    }, {
+        code: '12',
+        name: '美工'
+    }, {
+        code: '13',
+        name: '画画'
+    }, {
+        code: '14',
+        name: '自然'
+    }, {
+        code: '15',
+        name: '思想品德'
     }]
 });

+ 67 - 37
frontend/pc-web/app/view/Interaction/homework/List.js

@@ -9,23 +9,47 @@ Ext.define('school.view.interaction.homework.List', {
     dataUrl: '/api/school/homework/list',
     _title: '作业发布',
 
-    initComponent: function() {
+    initComponent: function () {
         var me = this;
         Ext.apply(this, {
             searchField: [{
                 xtype: 'textfield',
-                name: 'creator',
-                fieldLabel: '发布人'
+                name: 'keyword',
+                fieldLabel: '关键字',
+                getCondition: function (value) {
+                    return ' (task_title like\'%' + value + '%\' or task_context like \'%' + value + '%\') ';
+                }
             }, {
-                xtype: 'datefield',
-                name: 'createTime',
-                fieldLabel: '发布时间'
+                xtype: 'textfield',
+                name: 'bj',
+                fieldLabel: '班级'
             }, {
                 xtype: 'textfield',
-                name: 'keyword',
-                fieldLabel:'关键字'
+                name: 'task_creator',
+                fieldLabel: '发布人'
+            }, {
+                xtype: 'combobox',
+                name: 'homework_status',
+                fieldLabel: '发布状态',
+                displayField: 'name',
+                valueField: 'value',
+                editable: false,
+                store: Ext.create('Ext.data.ArrayStore', {
+                    fields: ['name', 'value'],
+                    data: [
+                        ['已发布', 1],
+                        ['未发布', 0]
+                    ]
+                }),
+                minChars: 0,
+                queryMode: 'local'
+            }, {
+                xtype: 'condatefield',
+                name: 'start_date',
+                fieldLabel: '发布时间',
+                columnWidth: 0.5
             }],
-        
+
             gridConfig: {
                 addTitle: '作业发布',
                 addXtype: 'interaction-homework-release',
@@ -37,27 +61,27 @@ Ext.define('school.view.interaction.homework.List', {
                 totalProperty: 'data.total',
                 actionColumn: [],
                 selModel: {
-                    checkOnly:true,
-                    type:'checkboxmodel',
-                    mode : "MULTI" ,
-                    ignoreRightMouseSelection : false
+                    checkOnly: true,
+                    type: 'checkboxmodel',
+                    mode: "MULTI",
+                    ignoreRightMouseSelection: false
                 },
                 hiddenTools: false,
                 toolBtns: [{
                     xtype: 'button',
                     text: '删除',
-                    handler: function() {
+                    handler: function () {
                         let grid = this.up('grid'),
-                        selectedRecords = grid.getSelection();
+                            selectedRecords = grid.getSelection();
                         let data;
 
-                        data = selectedRecords.map(function(r) {
+                        data = selectedRecords.map(function (r) {
                             return {
                                 id: r.get('task_id')
                             };
                         });
 
-                        if(data.length == 0) {
+                        if (data.length == 0) {
                             school.util.BaseUtil.showErrorToast('请先勾选需要删除的记录');
                             return;
                         }
@@ -70,11 +94,11 @@ Ext.define('school.view.interaction.homework.List', {
                             params: JSON.stringify({
                                 baseDTOs: data
                             })
-                        }).then(function(res) {
+                        }).then(function (res) {
                             grid.setLoading(false);
                             school.util.BaseUtil.showSuccessToast('成功删除' + data.length + '条记录');
                             grid.store.loadPage(grid.store.currentPage);
-                        }).catch(function(e) {
+                        }).catch(function (e) {
                             grid.setLoading(false);
                             school.util.BaseUtil.showErrorToast('删除失败: ' + e.message);
                         });
@@ -82,21 +106,27 @@ Ext.define('school.view.interaction.homework.List', {
                 }, {
                     xtype: 'button',
                     text: '新增',
-                    handler: function() {
+                    handler: function () {
                         school.util.BaseUtil.openTab('interaction-homework-release', '新增作业', 'interaction-homework-release-add');
                     }
                 }],
-                columns : [{
+                columns: [{
                     text: 'id',
                     dataIndex: 'task_id',
                     hidden: true
+                }, {
+                    text: '年级',
+                    dataIndex: 'nj'
+                }, {
+                    text: '班级',
+                    dataIndex: 'bj'
                 }, {
                     text: '标题',
                     dataIndex: 'task_title',
                     width: 120,
                     tdCls: 'x-detail-column',
                     listeners: {
-                        click: function(view, td, row, col, e, record, tr, eOpts, event) {
+                        click: function (view, td, row, col, e, record, tr, eOpts, event) {
                             let gridConfig = me.gridConfig;
                             school.util.BaseUtil.openTab(gridConfig.addXtype, gridConfig.addTitle + '(' + record.get('task_title') + ')', gridConfig.addXtype + '-' + record.get(gridConfig.idField), {
                                 initId: record.get(gridConfig.idField)
@@ -107,18 +137,18 @@ Ext.define('school.view.interaction.homework.List', {
                     text: '内容',
                     dataIndex: 'task_context',
                     width: 300
-                }, {
-                    text: '通知人',
-                    dataIndex: 'task_notifier'
                 }, {
                     text: '发布人',
                     dataIndex: 'task_creator',
                     width: 150
+                }, {
+                    text: '发布状态',
+                    dataIndex: 'zt'
                 }, {
                     text: '发布时间',
                     dataIndex: 'start_date',
                     width: 120
-                },]
+                }, ]
             },
         });
         this.callParent(arguments);
@@ -158,33 +188,33 @@ Ext.define('school.view.interaction.homework.List', {
         return conditionValue;
     },
 
-    getExtraParams: function(store, op, condition) {
+    getExtraParams: function (store, op, condition) {
         var temp = {};
 
-        for(let x = 0; x < condition.length; x++) {
+        for (let x = 0; x < condition.length; x++) {
             let c = condition[x];
-            if(c.field == 'keyword') {
+            if (c.field == 'keyword') {
                 temp.keyword = c.value;
-            }else if(c.field == 'date') {
+            } else if (c.field == 'date') {
                 temp.fromDate = new Date(c.value.split(',')[0]).getTime();
                 temp.endDate = new Date(c.value.split(',')[1]).getTime();
-            }else if(c.field == 'quoted') {
+            } else if (c.field == 'quoted') {
                 temp.quoted = c.value == 'all' ? null : c.value;
-            }else if(c.field == 'closed') {
+            } else if (c.field == 'closed') {
                 // temp.endDate = c.value == 'all' ? null : (
                 //     c.value == '0' ? 
                 // );
             }
         }
         let obj = {
-            pageNumber: store.exportNumber?store.exportNumber:op._page,
-            pageSize: store.exportPageSize?store.exportPageSize:store.pageSize
+            pageNumber: store.exportNumber ? store.exportNumber : op._page,
+            pageSize: store.exportPageSize ? store.exportPageSize : store.pageSize
         };
-        for(let k in temp) {
-            if(!!temp[k]) {
+        for (let k in temp) {
+            if (!!temp[k]) {
                 obj[k] = temp[k];
             }
         }
         return obj;
-     },
+    }
 });

+ 47 - 6
frontend/pc-web/app/view/Interaction/homework/Release.js

@@ -29,18 +29,30 @@ Ext.define('school.view.interaction.homework.Release', {
                 name: "task_creator",
                 fieldLabel: "发布人",
                 columnWidth: 0.5
+            }, {
+                xtype: 'textfield',
+                name: 'njid',
+                fieldLabel: '年级id',
+                hidden: true
+            }, {
+                xtype: 'textfield',
+                name: 'nj',
+                fieldLabel: '年级'
+            }, {
+                xtype: 'textfield',
+                name: 'bjid',
+                fieldLabel: '班级id',
+                hidden: true
+            }, {
+                xtype: 'textfield',
+                name: 'bj',
+                fieldLabel: '班级'
             }, {
                 xtype: 'datefield',
                 name: 'start_date',
                 fieldLabel: '开始时间',
                 columnWidth: 0.5,
                 defaultValue: new Date()
-            }, {
-                xtype: 'textfield',
-                name: 'task_notifier',
-                fieldLabel: '通知人',
-                maxLength: 500,
-                columnWidth: 0.5,
             }, {
                 xtype: 'datefield',
                 name: 'end_date',
@@ -57,6 +69,35 @@ Ext.define('school.view.interaction.homework.Release', {
                 fieldLabel: "内容",
                 columnWidth: 1,
                 height: 250
+            }, {
+                xtype: 'textfield',
+                name: 'fj',
+                fieldLabel: '附件'
+            }],
+            toolBtns: [{
+                xtype: 'button',
+                text: '发布',
+                bind: {
+                    hidden: '{!task_id}'
+                },
+                handler: function() {
+                    let id = me.getViewModel().data.task_id;
+                    me.setLoading(true);
+                    school.util.BaseUtil.request({
+                        url: '/api/school/homework/publish/' + id,
+                        method: 'POST'
+                    })
+                    .then(function() {
+                        me.setLoading(false);
+                        school.util.BaseUtil.showSuccessToast('发布成功');
+                        me.getViewModel().set('notify_status', 1);
+                        me.clearDirty();
+                    })
+                    .catch(function(e) {
+                        me.setLoading(false);
+                        school.util.BaseUtil.showErrorToast('发布失败: ' + e.message);
+                    });
+                }
             }]
         });
         this.callParent();

+ 31 - 7
frontend/pc-web/app/view/Interaction/notice/List.js

@@ -14,16 +14,33 @@ Ext.define('school.view.interaction.notice.List', {
         Ext.apply(this, {
             searchField: [{
                 xtype: 'textfield',
-                name: 'creator',
+                name: 'keyword',
+                fieldLabel:'关键字',
+                getCondition: function (value) {
+                    return ' (notify_title like\'%' + value + '%\' or notify_details like \'%' + value + '%\') ';
+                }
+            }, {
+                xtype: 'textfield',
+                name: 'notify_creator',
                 fieldLabel: '发布人'
             }, {
-                xtype: 'datefield',
-                name: 'createTime',
-                fieldLabel: '发布时间'
+                xtype: 'combobox',
+                name: 'notify_status',
+                fieldLabel: '发布状态',
+                displayField: 'name',
+                valueField: 'value',
+                editable: false,
+                store: Ext.create('Ext.data.ArrayStore', {
+                    fields: ['name', 'value'],
+                    data: [['已发布', 1], ['未发布', 2]]
+                }),
+                minChars: 0,
+                queryMode: 'local'
             }, {
-                xtype: 'textfield',
-                name: 'keyword',
-                fieldLabel:'关键字'
+                xtype: 'condatefield',
+                name: 'create_date',
+                fieldLabel: '发布时间',
+                columnWidth: 0.5
             }],
         
             gridConfig: {
@@ -112,6 +129,13 @@ Ext.define('school.view.interaction.notice.List', {
                     text: '发布人',
                     dataIndex: 'notify_creator',
                     width: 150
+                }, {
+                    text: '发布状态',
+                    dataIndex: 'notify_status',
+                    width: 120,
+                    renderer: function(v) {
+                        return !!v ? (v == 2 ? '未发布' : '已发布') : '未发布'
+                    }
                 }, {
                     xtype: 'datecolumn',
                     formate: 'Y-m-d H:i:s',

+ 44 - 0
frontend/pc-web/app/view/Interaction/notice/SchoolNotice.js

@@ -29,6 +29,21 @@ Ext.define('school.view.interaction.notice.SchoolNotice', {
                 name: "notify_creator",
                 fieldLabel: "发布人",
                 columnWidth: 0.5
+            }, {
+                xtype: 'combobox',
+                name: 'notify_status',
+                fieldLabel: '发布状态',
+                displayField: 'name',
+                valueField: 'value',
+                editable: false,
+                readOnly: true,
+                defaultValue: 2,
+                store: Ext.create('Ext.data.ArrayStore', {
+                    fields: ['name', 'value'],
+                    data: [['未发布', 2], ['已发布', 1]]
+                }),
+                minChars: 0,
+                queryMode: 'local'
             }, {
                 xtype: 'datefield',
                 name: 'create_date',
@@ -46,6 +61,35 @@ Ext.define('school.view.interaction.notice.SchoolNotice', {
                 fieldLabel: "内容",
                 height: 300,
                 columnWidth: 1,
+            }, {
+                xtype: 'textfield',
+                name: 'fj',
+                fieldLabel: '附件'
+            }],
+            toolBtns: [{
+                xtype: 'button',
+                text: '发布',
+                bind: {
+                    hidden: '{!notify_id}'
+                },
+                handler: function() {
+                    let id = me.getViewModel().data.notify_id;
+                    me.setLoading(true);
+                    school.util.BaseUtil.request({
+                        url: '/api/school/notice/publish/' + id,
+                        method: 'POST'
+                    })
+                    .then(function() {
+                        me.setLoading(false);
+                        school.util.BaseUtil.showSuccessToast('发布成功');
+                        me.getViewModel().set('notify_status', 1);
+                        me.clearDirty();
+                    })
+                    .catch(function(e) {
+                        me.setLoading(false);
+                        school.util.BaseUtil.showErrorToast('发布失败: ' + e.message);
+                    });
+                }
             }]
         });
         this.callParent();

+ 3 - 6
frontend/pc-web/app/view/Interaction/score/Detail.js

@@ -5,12 +5,9 @@ Ext.define('school.view.interaction.score.Detail', {
     _title: '成绩录入',
     _idField: 'student_id',
     _codeField: 'student_number',
-    _statusField: null,
-    _statusCodeField: null,
-    _auditmanField: null,
-    _auditdateField: null,
-    // _readUrl: 'http://10.1.80.35:8560/api/sale/saledown/read',
-    _readUrl: '/api/sale/xxxx/read',
+
+    // _readUrl: 'http://10.1.80.47:9560/score/read',
+    _readUrl: '/api/school/score/read',
     // _saveUrl: 'http://10.1.80.35:8560/api/sale/saledown/update',
     _saveUrl: '/api/sale/sss/update',
     // _toSaleUrl: 'http://10.1.80.35:8560/api/sale/saledown/toSale',

+ 47 - 56
frontend/pc-web/app/view/Interaction/score/List.js

@@ -7,8 +7,9 @@ Ext.define('school.view.interaction.score.List', {
 
     controller: 'interaction-score-list',
 
-    dataUrl: '/api/interaction/score/list',
-    initComponent: function() {
+    // dataUrl: 'http://10.1.80.47:9560/score/list',
+    dataUrl: '/api/school/score/list',
+    initComponent: function () {
         var me = this;
         Ext.apply(this, {
             searchField: [{
@@ -24,7 +25,7 @@ Ext.define('school.view.interaction.score.List', {
                 name: 'class',
                 fieldLabel: '班级'
             }],
-        
+
             caller: null,
             _formXtype: null,
             _title: null,
@@ -32,73 +33,63 @@ Ext.define('school.view.interaction.score.List', {
             _batchOpenUrl: null,
             _batchCloseUrl: null,
             _batchDeleteUrl: null,
-        
+
             gridConfig: {
-                idField: null,
-                codeField: null,
-                statusCodeField: null,
+                addTitle: '成绩录入',
+                addXtype: 'interaction-score-detail',
+                idField: 'score_id',
+                codeField: 'score_num',
+                detailField: null,
                 dataUrl: me.dataUrl,
                 caller: null,
                 rootProperty: 'data.list',
                 totalProperty: 'data.total',
                 actionColumn: [],
                 selModel: {
-                    checkOnly:true,
-                    type:'checkboxmodel',
-                    mode : "MULTI" ,
-                    ignoreRightMouseSelection : false
+                    checkOnly: true,
+                    type: 'checkboxmodel',
+                    mode: "MULTI",
+                    ignoreRightMouseSelection: false
                 },
                 hiddenTools: false,
                 toolBtns: [{
                     xtype: 'button',
-                    text: '下载模板'
-                }, {
-                    xtype: 'button',
-                    text: '上传成绩'
+                    text: '导入'
                 }, {
                     xtype: 'button',
-                    text: '添加',
-                    handler: 'onAddClick'
+                    text: '删除'
                 }, {
                     xtype: 'button',
-                    text: '删除'
+                    text: '新增',
+                    // handler: 'onAddClick'
                 }],
-                columns : [{
+                columns: [{
+                    text: 'ID',
+                    dataIndex: 'score_id',
+                    hidden: true
+                }, {
                     text: '编号',
-                    dataIndex: 'code',
+                    dataIndex: 'score_num',
                     width: 150
                 }, {
-                    text: '标题',
-                    dataIndex: 'name',
+                    text: '成绩类型',
+                    dataIndex: 'score_name',
                     width: 120
                 }, {
-                    text: '时间',
-                    dataIndex: 'gender',
-                    width: 120
+                    text: '考试时间',
+                    dataIndex: 'score_date',
+                    width: 150
                 }, {
-                    text: '类型',
-                    dataIndex: 'grade'
+                    text: '年级',
+                    dataIndex: 'score_scope'
                 }, {
-                    text: '录入人',
-                    dataIndex: 'class'
+                    text: '类型',
+                    dataIndex: 'score_type'
                 }, {
-                    text: '录入时间',
-                    dataIndex: 'birth',
+                    text: '备注',
+                    dataIndex: 'score_remarks',
                     width: 120
-                }, {
-                    text: '状态',
-                    dataIndex: 'open'
-                }, {
-                    text: '操作',
-                    dataIndex: 'status'
-                }],
-                listeners: {
-                    itemclick: function(view, record, item, index, e, eOpts) {
-                        school.util.BaseUtil.openTab('interaction-score-detail', '课程表', 'interaction-score-detail'+record.get('id'), {
-                            initId: record.get('id')
-                        }); 
-                    }
-                }
+                }]
             },
         });
         this.callParent(arguments);
@@ -138,33 +129,33 @@ Ext.define('school.view.interaction.score.List', {
         return conditionValue;
     },
 
-    getExtraParams: function(store, op, condition) {
+    getExtraParams: function (store, op, condition) {
         var temp = {};
 
-        for(let x = 0; x < condition.length; x++) {
+        for (let x = 0; x < condition.length; x++) {
             let c = condition[x];
-            if(c.field == 'keyword') {
+            if (c.field == 'keyword') {
                 temp.keyword = c.value;
-            }else if(c.field == 'date') {
+            } else if (c.field == 'date') {
                 temp.fromDate = new Date(c.value.split(',')[0]).getTime();
                 temp.endDate = new Date(c.value.split(',')[1]).getTime();
-            }else if(c.field == 'quoted') {
+            } else if (c.field == 'quoted') {
                 temp.quoted = c.value == 'all' ? null : c.value;
-            }else if(c.field == 'closed') {
+            } else if (c.field == 'closed') {
                 // temp.endDate = c.value == 'all' ? null : (
                 //     c.value == '0' ? 
                 // );
             }
         }
         let obj = {
-            pageNumber: store.exportNumber?store.exportNumber:op._page,
-            pageSize: store.exportPageSize?store.exportPageSize:store.pageSize
+            pageNumber: store.exportNumber ? store.exportNumber : op._page,
+            pageSize: store.exportPageSize ? store.exportPageSize : store.pageSize
         };
-        for(let k in temp) {
-            if(!!temp[k]) {
+        for (let k in temp) {
+            if (!!temp[k]) {
                 obj[k] = temp[k];
             }
         }
         return obj;
-     },
+    }
 });

+ 63 - 53
frontend/pc-web/app/view/Interaction/timetable/Detail.js

@@ -2,89 +2,99 @@ Ext.define('school.view.interaction.timetable.Detail', {
     extend: 'school.view.core.form.FormPanel',
     xtype: 'interaction-timetable-detail',
 
+    controller: 'interaction-timetable-detail',
+
     _title: '课程表',
-    _idField: 'student_id',
-    _codeField: 'student_number',
-    _statusField: null,
-    _statusCodeField: null,
-    _auditmanField: null,
-    _auditdateField: null,
+    _idField: 'id',
+    _codeField: null,
     // _readUrl: 'http://10.1.80.35:8560/api/sale/saledown/read',
-    _readUrl: '/api/sale/xxxx/read',
-    // _saveUrl: 'http://10.1.80.35:8560/api/sale/saledown/update',
-    _saveUrl: '/api/sale/sss/update',
-    // _toSaleUrl: 'http://10.1.80.35:8560/api/sale/saledown/toSale',
-    _toSaleUrl: '/api/sale/sss/toSale',
+    _readUrl: '/api/school/curriculum/read',
+    // _saveUrl: 'http://10.1.80.36:9520/api/school/curriculum/save',
+    _saveUrl: '/api/school/curriculum/save',
+    _deleteUrl: '/api/school/curriculum/delete',
     initId: 0,
     cls: 'timetable',
 
-    codeInHeader: true,
-
     START_TIME: Ext.Date.parse('08:00', 'H:i'), // 开始上课时间
     END_TIME: Ext.Date.parse('22:00', 'H:i'), // 结束上课时间
     MIN_WHILE: 10, // 一节课最小时间(分钟)
 
+
     initComponent: function () {
         let me = this;
         Ext.apply(this, {
             defaultItems: [{
-                xtype: 'textfield',
-                name: 'number',
-                fieldLabel: '录入人'
+                xtype: 'hidden',
+                name: 'id',
+                fieldLabel: 'id'
             }, {
                 xtype: 'textfield',
                 name: 'name',
-                fieldLabel: '录入时间'
+                fieldLabel: '课表名称'
             }, {
-                xtype: 'textfield',
-                name: 'grade',
-                fieldLabel: '状态'
+                xtype: 'numberfield',
+                name: 'gradeId',
+                fieldLabel: '年级(id)',
+                allowBlank: false
             }, {
-                xtype: 'textfield',
-                name: 'class',
-                fieldLabel: '课表编号'
-            }, {
-                xtype: "textfield",
-                name: "jg",
-                fieldLabel: "学期名称"
+                xtype: 'numberfield',
+                name: 'clazzId',
+                fieldLabel: '班级(id)',
+                allowBlank: false
             }, {
                 xtype: 'textfield',
-                name: 'mz',
-                fieldLabel: '课表名称'
+                name: 'creatorName',
+                fieldLabel: '录入人'
+            }, {
+                xtype: 'datefield',
+                name: 'createTime',
+                fieldLabel: '录入时间',
+                format: 'Y-m-d H:i:s'
             }, {
                 xtype: 'textfield',
-                name: 'birth',
-                fieldLabel: '课表班级'
+                name: 'status',
+                fieldLabel: '状态'
             }, {
                 xtype: "textfield",
-                name: "address",
-                fieldLabel: "学期开始时间"
+                name: "termName",
+                fieldLabel: "学期名称"
             }, {
-                xtype: 'textfield',
-                name: 'teacher_zz',
-                fieldLabel: '学期结束时间'
+                xtype: "datefield",
+                name: "termStart",
+                fieldLabel: "学期开始时间",
+                format: 'Y-m-d'
             }, {
-                xtype: 'textfield',
-                name: 'zs',
+                xtype: 'datefield',
+                name: 'termEnd',
+                fieldLabel: '学期结束时间',
+                format: 'Y-m-d'
+            }, {
+                xtype: 'numberfield',
+                name: 'weekNum',
                 fieldLabel: '周数'
             }, {
                 name: "timetable",
                 xtype: "detailGridField",
-                detnoColumn: 'no',
+                idColumn: 'id',
+                detnoColumn: 'lessons',
                 storeModel: 'school.model.Timetable',
-                deleteDetailUrl: '/api/sale/sale/deleteDetail',
+                deleteDetailUrl: '/api/school/curriculum/deleteDetail',
                 allowEmpty: true,
                 showCount: false,
                 emptyRows: 10,
                 rowViewModel: {},
                 columns: [{
+                    text: 'id',
+                    dataIndex: 'id',
+                    hidden: true
+                }, {
                     text: '时间段',
                     xtype: 'widgetcolumn',
                     width: 200,
                     padding: 0,
                     tdCls: 'x-period-column',
                     getBindField: function(c) {
-                        return ['period0', 'period1']
+                        return ['startTime', 'endTime']
                     },
                     widget: {
                         xtype: 'container',
@@ -95,7 +105,7 @@ Ext.define('school.view.interaction.timetable.Detail', {
                             xtype: 'button',
                             text: '0:00',
                             bind: {
-                                text: '{record.periodText0}',
+                                text: '{record._timeText1}',
                             },
                             style: {
                                 margin: '5px',
@@ -127,7 +137,7 @@ Ext.define('school.view.interaction.timetable.Detail', {
                             xtype: 'button',
                             text: '0:00',
                             bind: {
-                                text: '{record.periodText1}',
+                                text: '{record._timeText2}',
                             },
                             style: {
                                 margin: '5px',
@@ -155,7 +165,7 @@ Ext.define('school.view.interaction.timetable.Detail', {
                                     beforeshow: function(th, eOpts) {
                                         me.currentRecord = th.ownerCmp.ownerCt.$widgetRecord;
                                         let picker = th.down('timepicker');
-                                        let startDate = me.currentRecord.get('period0') || Ext.Date.parse('08:00', 'H:i');
+                                        let startDate = me.currentRecord.get('_time1') || Ext.Date.parse('08:00', 'H:i');
                                         let minValue = Ext.Date.add(startDate, Ext.Date.MINUTE, me.MIN_WHILE);
                                         picker.setMinValue(minValue)
                                     },
@@ -165,27 +175,27 @@ Ext.define('school.view.interaction.timetable.Detail', {
                     }
                 }, {
                     text: '星期一',
-                    dataIndex: 'monday',
+                    dataIndex: 'mon',
                     xtype: 'subjectcolumn'
                 }, {
                     text: '星期二',
-                    dataIndex: 'tuesday',
+                    dataIndex: 'tues',
                     xtype: 'subjectcolumn'
                 }, {
                     text: '星期三',
-                    dataIndex: 'wednesday',
+                    dataIndex: 'wed',
                     xtype: 'subjectcolumn'
                 }, {
                     text: '星期四',
-                    dataIndex: 'thursday',
+                    dataIndex: 'thur',
                     xtype: 'subjectcolumn'
                 }, {
                     text: '星期五',
-                    dataIndex: 'friday',
+                    dataIndex: 'fri',
                     xtype: 'subjectcolumn'
                 }, {
                     text: '星期六',
-                    dataIndex: 'saturday',
+                    dataIndex: 'sat',
                     xtype: 'subjectcolumn'
                 }, {
                     text: '星期日',
@@ -199,15 +209,15 @@ Ext.define('school.view.interaction.timetable.Detail', {
 
     onSelectPeriod0: function(picker, menu, record) {
         let me = this;
-        me.currentRecord.set('period0', record.get('date'));
+        me.currentRecord.set('startTime', Ext.Date.format(record.get('date'), 'H:i:s'));
         menu.setVisible(false);
     },
 
     onSelectPeriod1: function(picker, menu, record) {
         let me = this;
-        me.currentRecord.set('period1', record.get('date'));
+        me.currentRecord.set('endTime', Ext.Date.format(record.get('date'), 'H:i:s'));
         menu.setVisible(false);
-        let classTime = Math.abs(Ext.Date.diff(me.currentRecord.get('period0'), record.get('date'), Ext.Date.MINUTE));
+        let classTime = Math.abs(Ext.Date.diff(me.currentRecord.get('_time1'), record.get('date'), Ext.Date.MINUTE));
         me.CLASS_TIME = classTime;
     }
 });

+ 17 - 0
frontend/pc-web/app/view/Interaction/timetable/DetailController.js

@@ -0,0 +1,17 @@
+Ext.define('school.view.interaction.timetable.DetailController', {
+    extend: 'school.view.core.form.FormPanelController',
+    alias: 'controller.interaction-timetable-detail',
+
+    onAfterSave: function(localJson) {
+        var form = this.getView();
+        var id = localJson.data.id;
+        var code = localJson.data.code;
+        form.initId = id;
+        school.util.FormUtil.loadData(form).then(function(data) {
+            var newId = form.xtype + '-' + data.main.id;
+            var newTitle = form._title + '(' + data.main.id + ')';
+    
+            school.util.BaseUtil.refreshTabTitle(newId, newTitle);
+        });
+    },
+});

+ 75 - 21
frontend/pc-web/app/view/Interaction/timetable/List.js

@@ -9,37 +9,44 @@ Ext.define('school.view.interaction.timetable.List', {
 
     // dataUrl: 'http://10.1.80.36:9520/api/school/curriculum/list',
     dataUrl: '/api/school/curriculum/list',
+    _title: '课程表',
+    caller: 'Curriculum',
+    pathKey: 'curriculum',
+
     initComponent: function() {
         var me = this;
         Ext.apply(this, {
             searchField: [{
                 xtype: 'textfield',
-                name: 'term',
-                fieldLabel: '学期'
+                name: 'name',
+                fieldLabel: '课表名称'
             }, {
                 xtype: 'textfield',
-                name: 'grade',
+                name: 'gradeName',
                 fieldLabel: '年级'
             }, {
                 xtype: 'textfield',
-                name: 'class',
+                name: 'clazzName',
                 fieldLabel: '班级'
+            }, {
+                xtype: 'numberfield',
+                name: 'text',
+                fieldLabel: '学年',
+                getCondition: function(v) {
+                    return '1=1';
+                }
+            }, {
+                xtype: 'textfield',
+                name: 'termName',
+                fieldLabel: '学期'
             }],
         
-            caller: null,
-            _formXtype: null,
-            _title: null,
-            _deleteUrl: null,
-            _batchOpenUrl: null,
-            _batchCloseUrl: null,
-            _batchDeleteUrl: null,
-        
             gridConfig: {
                 addTitle: '课程表',
                 addXtype: 'interaction-timetable-detail',
-                idField: 'notify_id',
+                idField: 'id',
                 codeField: null,
-                detailField: 'notify_title',
+                detailField: 'name',
                 dataUrl: me.dataUrl,
                 caller: null,
                 rootProperty: 'data.list',
@@ -53,14 +60,61 @@ Ext.define('school.view.interaction.timetable.List', {
                 },
                 hiddenTools: false,
                 toolBtns: [{
-                    xtype: 'button',
-                    text: '删除'
-                }, {
                     xtype: 'button',
                     text: '新增',
                     handler: 'onAddClick'
+                }, {
+                    xtype: 'importbutton',
+                    text: '导入',
+                    belong: me,
+                    caller: me.caller,
+                    pathKey: me.pathKey,
+                    onSuccess: function () {
+                        //刷新界面
+                        var g = me.down('grid');
+                        g.store.loadPage(g.store.currentPage);
+                    }
+                }, {
+                    xtype: 'button',
+                    text: '删除',
+                    handler: function() {
+                        let grid = this.up('grid'),
+                            selectedRecords = grid.getSelection();
+                        let data;
+
+                        data = selectedRecords.map(function (r) {
+                            return {
+                                id: r.get('id')
+                            };
+                        });
+
+                        if (data.length == 0) {
+                            school.util.BaseUtil.showErrorToast('请先勾选需要删除的记录');
+                            return;
+                        }
+
+                        grid.setLoading(true);
+                        school.util.BaseUtil.request({
+                            url: '/api/school/curriculum/deleteDetail',
+                            method: 'POST',
+                            params: JSON.stringify({
+                                baseDTOs: data
+                            })
+                        }).then(function (res) {
+                            grid.setLoading(false);
+                            school.util.BaseUtil.showSuccessToast('成功删除' + data.length + '条记录');
+                            grid.store.loadPage(grid.store.currentPage);
+                        }).catch(function (e) {
+                            grid.setLoading(false);
+                            school.util.BaseUtil.showErrorToast('删除失败: ' + e.message);
+                        });
+                    }
                 }],
                 columns : [{
+                    text: 'id',
+                    dataIndex: 'id',
+                    hidden: true
+                }, {
                     text: '课表名称',
                     dataIndex: 'name',
                     width: 120,
@@ -68,7 +122,7 @@ Ext.define('school.view.interaction.timetable.List', {
                     listeners: {
                         click: function(view, td, row, col, e, record, tr, eOpts, event) {
                             let gridConfig = me.gridConfig;
-                            school.util.BaseUtil.openTab(gridConfig.addXtype, gridConfig.addTitle + '(' + record.get('name') + ')', gridConfig.addXtype + record.get(gridConfig.idField), {
+                            school.util.BaseUtil.openTab(gridConfig.addXtype, gridConfig.addTitle + '(' + record.get('id') + ')', gridConfig.addXtype + record.get(gridConfig.idField), {
                                 initId: record.get(gridConfig.idField)
                             });
                         }
@@ -79,13 +133,13 @@ Ext.define('school.view.interaction.timetable.List', {
                 }, {
                     text: '班级',
                     dataIndex: 'clazzName'
+                }, {
+                    text: '学年',
+                    dataIndex: 'xn'
                 }, {
                     text: '学期',
                     dataIndex: 'termName',
                     width: 120
-                }, {
-                    text: '状态',
-                    dataIndex: 'status'
                 }]
             },
         });

+ 2 - 2
frontend/pc-web/app/view/auth/ReLogin.js

@@ -29,10 +29,10 @@ Ext.define('school.view.auth.ReLogin', {
             value: '会话已过期,请重新登录',
         }, {
             xtype: 'textfield',
-            name: 'username',
+            name: 'user_phone',
             emptyText: '请输入账号/邮箱/手机号',
             fieldLabel: '账号',
-            bind: '{account.username}',
+            bind: '{account.user_phone}',
             readOnly: true,
             hideLabel: true,
             allowBlank: false

+ 1 - 1
frontend/pc-web/app/view/auth/ReLoginController.js

@@ -34,7 +34,7 @@ Ext.define('school.view.auth.ReLoginController', {
 
         view.mask('请稍等...');
 
-        school.model.Session.login(values.username, values.password)
+        school.model.Session.login(values.user_phone, values.password)
         .then(function (session) {
             view.isMasked() && view.unmask();
             viewModel.set('session', session);

+ 4 - 2
frontend/pc-web/app/view/basic/class/ClassInfoController.js

@@ -190,7 +190,8 @@ Ext.define('school.view.basic.class.ClassInfoController', {
                         xtype: 'textfield',
                         name: 'text',
                         emptyText: '名称',
-                        allowBlank: false
+                        allowBlank: false,
+                        maxLength: 20
                     }],
                     buttonAlign: 'center',
                     buttons: [{
@@ -289,7 +290,8 @@ Ext.define('school.view.basic.class.ClassInfoController', {
                         name: 'text',
                         emptyText: '名称',
                         value: data.text,
-                        allowBlank: false
+                        allowBlank: false,
+                        maxLength: 20
                     }],
                     buttonAlign: 'center',
                     buttons: [{

+ 40 - 14
frontend/pc-web/app/view/basic/school/SchoolInfo.js

@@ -14,7 +14,7 @@ Ext.define('school.view.basic.school.SchoolInfo', {
 
     layout: 'column',
     autoScroll: true,
-    bodyPadding: '8 12 8 12',
+    bodyPadding: '12 250 12 250',
 
     fieldDefaults: {
         margin: '0 0 10 0',
@@ -27,7 +27,7 @@ Ext.define('school.view.basic.school.SchoolInfo', {
         Ext.apply(this, {
             dockedItems: [{
                 xtype: 'toolbar',
-                dock: 'top',
+                dock: 'bottom',
                 items: ['->', {
                     xtype: 'button',
                     text: '更新',
@@ -37,25 +37,27 @@ Ext.define('school.view.basic.school.SchoolInfo', {
                     handler: function() {
                         me.onSave();
                     }
-                }],
+                }, '->'],
             }],
             items: [{
                 xtype: 'hidden',
                 name: 'school_id',
                 bind: '{schoolId}',
-                fieldLabel: 'id'
+                fieldLabel: 'id',
+                columnWidth: 1
             }, {
                 xtype: "textfield",
                 name: "school_name",
                 bind: '{schoolName}',
                 fieldLabel: "学校名称",
                 allowBlank: false,
-                columnWidth: 0.5
+                columnWidth: 1
             }, {
-                xtype: 'textfield',
-                name: 'school_status',
-                bind: '{schoolStatus}',
-                fieldLabel: '状态',
+                xtype: "textfield",
+                name: 'school_phone',
+                bind: '{schoolPhone}',
+                fieldLabel: '联系电话',
+                columnWidth: 1
             }, {
                 xtype: "textfield",
                 name: "school_address",
@@ -64,15 +66,39 @@ Ext.define('school.view.basic.school.SchoolInfo', {
                 allowBlank: true,
                 columnWidth: 1
             }, {
-                xtype: "textfield",
-                name: 'school_phone',
-                bind: '{schoolPhone}',
-                fieldLabel: '联系电话'
+                xtype: 'combobox',
+                name: 'school_status',
+                bind: '{schoolStatus}',
+                fieldLabel: '状态',
+                displayField: 'name',
+                valueField: 'value',
+                queryMode: 'local',
+                editable: false,
+                store: Ext.create('Ext.data.Store', {
+                    fields: ['name', 'value'],
+                    data: [{
+                        name: '正常',
+                        value: 1
+                    }, {
+                        name: '冻结',
+                        value: 2
+                    }]
+                }),
+                columnWidth: 1
             }, {
                 xtype: 'textfield',
                 name: 'school_appid',
                 bind: '{schoolAppId}',
-                fieldLabel: '绑定微信号'
+                fieldLabel: '公众号账号',
+                readOnly: true,
+                columnWidth: 1
+            }, {
+                xtype: 'textfield',
+                name: 'school_secret',
+                bind: '{schoolSecret}',
+                fieldLabel: '公众号密钥',
+                columnWidth: 1,
+                readOnly: true
             }, {
                 xtype: 'textfield',
                 name: 'school_remarks',

+ 55 - 66
frontend/pc-web/app/view/basic/staff/StaffDetail.js

@@ -12,6 +12,7 @@ Ext.define('school.view.basic.staff.StaffDetail', {
     _statusCodeField: null,
     _auditmanField: null,
     _auditdateField: null,
+    // _readUrl: 'http://10.1.80.47:9560/teacher/read',
     _readUrl: '/api/school/teacher/read',
     // _saveUrl: 'http://10.1.80.47:9560/teacher/save',
     _saveUrl: '/api/school/teacher/save',
@@ -35,94 +36,82 @@ Ext.define('school.view.basic.staff.StaffDetail', {
                 name: 'teacher_name',
                 fieldLabel: '姓名'
             }, {
-                xtype: 'combobox',
+                xtype: 'gendercombo',
                 name: 'teacher_sex',
                 fieldLabel: '性别',
-                displayField: 'name',
-                valueField: 'value',
-                editable: false,
-                store: {
-                    type: 'store_gender'
-                },
-                minChars: 0,
-                queryMode: 'local'
             }, {
                 xtype: 'textfield',
                 name: 'teacher_phone',
                 fieldLabel: '手机号'
+            }, {
+                xtype: 'textfield',
+                name: 'teacher_email',
+                fieldLabel: '邮箱'
+            }, {
+                xtype: 'ethnicitycombobox',
+                name: 'teacher_nation',
+                fieldLabel: '民族',
             }, {
                 xtype: "textfield",
-                name: "teacher_jg",
+                name: "teacher_native",
                 fieldLabel: "籍贯"
             }, {
                 xtype: 'datefield',
-                name: 'teacher_birth',
-                fieldLabel: '出生年月日',
+                name: 'teacher_birthday',
+                fieldLabel: '出生日',
                 format: 'Y-m-d'
             }, {
-                xtype: 'textfield',
-                name: 'teacher_mz',
-                fieldLabel: '民族'
-            }, {
-                xtype: 'textfield',
-                name: 'teacher_hf',
-                fieldLabel: '婚姻状态'
-            }, {
-                xtype: 'textfield',
-                name: 'teacher_zz',
-                fieldLabel: '政治面貌'
-            }, {
-                xtype: 'textfield',
-                name: 'teacher_address',
-                fieldLabel: '现居住址'
-            }, {
-                xtype: 'textfield',
-                name: 'teacher_jjname',
-                fieldLabel: '紧急联系人'
-            }, {
-                xtype: 'textfield',
-                name: 'teacher_jjphone',
-                fieldLabel: '紧急联系人电话'
-            }, {
-                xtype: 'textfield',
-                name: 'teacher_jjgx',
-                fieldLabel: '紧急联系人关系'
+                xtype: 'combobox',
+                name: 'teacher_marriage',
+                fieldLabel: '婚姻状态',
+                displayField: 'name',
+                valueField: 'value',
+                editable: false,
+                store: Ext.create('Ext.data.ArrayStore', {
+                    fields: ['name', 'value'],
+                    data: [['未婚', 0], ['已婚', 1], ['离异', -1]]
+                }),
+                minChars: 0,
+                queryMode: 'local'
             }, {
-                xtype: 'textfield',
-                name: 'teacher_xl',
-                fieldLabel: '学历'
+                xtype: 'combobox',
+                name: 'teacher_political',
+                fieldLabel: '政治面貌',
+                displayField: 'name',
+                valueField: 'name',
+                editable: false,
+                store: Ext.create('Ext.data.ArrayStore', {
+                    fields: ['name'],
+                    data: [['中共党员'], ['中共预备党员'], ['共青团员'], ['群众']]
+                }),
+                minChars: 0,
+                queryMode: 'local'
             }, {
                 xtype: 'textfield',
-                name: 'teacher_by',
+                name: 'teacher_school',
                 fieldLabel: '毕业学校'
             }, {
-                xtype: 'textfield',
-                name: 'teacher_zy',
-                fieldLabel: '专业'
-            }, {
-                xtype: 'textfield',
-                name: 'teacher_phone',
-                fieldLabel: '手机号码'
-            }, {
-                xtype: 'textfield',
-                name: 'teacher_email',
-                fieldLabel: '邮箱'
-            }, {
-                xtype: 'textfield',
-                name: 'teacher_app',
-                fieldLabel: '是否开通APP'
-            }, {
-                xtype: 'textfield',
-                name: 'teacher_wechat',
-                fieldLabel: '绑定微信号'
+                xtype: 'combobox',
+                name: 'teacher_education',
+                fieldLabel: '学历',
+                displayField: 'name',
+                valueField: 'name',
+                editable: false,
+                store: Ext.create('Ext.data.ArrayStore', {
+                    fields: ['name'],
+                    data: [['博士后'], ['博士'], ['硕士'], ['研究生'], ['本科(统招)'], ['本科(成人高考)'], ['本科(专升本)'], ['大专'], ['高中'], ['职高'], ['初中'], ['小学']]
+                }),
+                minChars: 0,
+                queryMode: 'local'
             }, {
                 xtype: 'textfield',
-                name: 'teacher_type',
-                fieldLabel: '账号类型'
+                name: 'teacher_major',
+                fieldLabel: '专业'
             }, {
                 xtype: 'textfield',
-                name: 'teacher_gwlx',
-                fieldLabel: '岗位类型'
+                name: 'teacher_address',
+                fieldLabel: '现居住址',
+                columnWidth: 0.5
             }, {
                 name: "detailGridField",
                 xtype: "detailGridField",

+ 19 - 25
frontend/pc-web/app/view/basic/staff/StaffList.js

@@ -16,16 +16,12 @@ Ext.define('school.view.basic.staff.StaffList', {
         Ext.apply(this, {
             searchField: [{
                 xtype: 'textfield',
-                name: 'code',
+                name: 'teacher_number',
                 fieldLabel: '教职工号'
             }, {
                 xtype: 'textfield',
-                name: 'name',
+                name: 'teacher_name',
                 fieldLabel: '姓名'
-            }, {
-                xtype: 'textfield',
-                name: 'job',
-                fieldLabel: '职位'
             }],
 
             gridConfig: {
@@ -46,7 +42,14 @@ Ext.define('school.view.basic.staff.StaffList', {
                 },
                 hiddenTools: false,
                 toolBtns: [{
+                    xtype: 'button',
+                    text: '新增',
+                    handler: function () {
+                        school.util.BaseUtil.openTab('basic-staff-staffdetail', '新增教职工信息', 'basic-staff-staffdetail-add');
+                    }
+                }, {
                     xtype: 'importbutton',
+                    text: '导入',
                     belong: me,
                     caller: me.caller,
                     pathKey: me.pathKey,
@@ -55,9 +58,6 @@ Ext.define('school.view.basic.staff.StaffList', {
                         var g = me.down('grid');
                         g.store.loadPage(g.store.currentPage);
                     }
-                }, {
-                    xtype: 'button',
-                    text: '一键开通'
                 }, {
                     xtype: 'button',
                     text: '删除',
@@ -94,12 +94,6 @@ Ext.define('school.view.basic.staff.StaffList', {
                             school.util.BaseUtil.showErrorToast('删除失败: ' + e.message);
                         });
                     }
-                }, {
-                    xtype: 'button',
-                    text: '新增',
-                    handler: function () {
-                        school.util.BaseUtil.openTab('basic-staff-staffdetail', '新增教职工信息', 'basic-staff-staffdetail-add');
-                    }
                 }],
                 columns: [{
                     text: 'ID',
@@ -109,14 +103,14 @@ Ext.define('school.view.basic.staff.StaffList', {
                     text: '工号',
                     dataIndex: 'teacher_number',
                     width: 150
-                }, {
-                    text: '绑定手机号',
-                    dataIndex: 'phone',
-                    width: 120
                 }, {
                     text: '姓名',
                     dataIndex: 'teacher_name',
                     width: 120
+                }, {
+                    text: '手机号',
+                    dataIndex: 'phone',
+                    width: 120
                 }, {
                     text: '性别',
                     dataIndex: 'teacher_sex',
@@ -124,14 +118,14 @@ Ext.define('school.view.basic.staff.StaffList', {
                         return v == 1 ? '男' : (v == 0 ? '女' : '未知');
                     }
                 }, {
-                    text: '工龄',
-                    dataIndex: 'teacher_working_age'
+                    text: '民族',
+                    dataIndex: 'teacher_nation'
                 }, {
-                    text: '是否开通',
-                    dataIndex: 'open'
+                    text: '学历',
+                    dataIndex: 'teacher_education'
                 }, {
-                    text: '状态',
-                    dataIndex: 'teacher_status'
+                    text: '专业',
+                    dataIndex: 'teacher_major'
                 }]
             },
         });

+ 33 - 26
frontend/pc-web/app/view/basic/student/StudentDetail.js

@@ -2,7 +2,7 @@ Ext.define('school.view.basic.student.StudentDetail', {
     extend: 'school.view.core.form.FormPanel',
     xtype: 'basic-student-studentdetail',
 
-    // controller: 'sale-b2b-purchasedetail',
+    controller: 'basic-student-studentdetail',
     // viewModel: 'sale-b2b-purchasedetail',
 
     //字段属性
@@ -47,30 +47,27 @@ Ext.define('school.view.basic.student.StudentDetail', {
                 },
                 minChars: 0,
                 queryMode: 'local'
-            }, {
-                xtype: 'datefield',
-                name: 'stu_enroll_date',
-                fieldLabel: '入学时间'
-            }, {
-                xtype: 'datefield',
-                name: 'stu_graduate_date',
-                fieldLabel: '毕业时间'
-            }, {
-                xtype: 'textfield',
-                name: 'grade',
-                fieldLabel: '年级'
             }, {
                 xtype: 'textfield',
-                name: 'class',
-                fieldLabel: '班级'
+                name: 'stu_native',
+                fieldLabel: '籍贯'
             }, {
-                xtype: "textfield",
-                name: "jg",
-                fieldLabel: "籍贯"
+                xtype: 'ethnicitycombobox',
+                name: 'stu_nation',
+                fieldLabel: '民族',
             }, {
-                xtype: 'textfield',
-                name: 'mz',
-                fieldLabel: '民族'
+                xtype: 'combobox',
+                name: 'stu_political',
+                fieldLabel: '政治面貌',
+                displayField: 'name',
+                valueField: 'name',
+                editable: false,
+                store: Ext.create('Ext.data.ArrayStore', {
+                    fields: ['name'],
+                    data: [['中共党员'], ['中共预备党员'], ['共青团员'], ['群众']]
+                }),
+                minChars: 0,
+                queryMode: 'local'
             }, {
                 xtype: 'datefield',
                 name: 'stu_birthday',
@@ -82,15 +79,25 @@ Ext.define('school.view.basic.student.StudentDetail', {
             }, {
                 xtype: "textfield",
                 name: "stu_address",
-                fieldLabel: "家庭住址"
+                fieldLabel: "家庭住址",
+                columnWidth: 0.5
+            }, {
+                xtype: 'datefield',
+                name: 'stu_enroll_date',
+                fieldLabel: '入学日期'
             }, {
                 xtype: 'textfield',
-                name: 'teacher_zz',
-                fieldLabel: '政治面貌'
+                name: 'stu_grade',
+                fieldLabel: '年级'
             }, {
                 xtype: 'textfield',
-                name: 'stu_status',
-                fieldLabel: '状态'
+                name: 'clazz_id',
+                fieldLabel: '班级id',
+                hidden: true
+            }, {
+                xtype: 'textfield',
+                name: 'stu_class',
+                fieldLabel: '班级'
             }, {
                 name: "parent",
                 xtype: "detailGridField",

+ 17 - 0
frontend/pc-web/app/view/basic/student/StudentDetailController.js

@@ -0,0 +1,17 @@
+Ext.define('school.view.basic.student.StudentDetailController', {
+    extend: 'school.view.core.form.FormPanelController',
+    alias: 'controller.basic-student-studentdetail',
+
+    onAfterSave: function(localJson) {
+        var form = this.getView();
+        var id = localJson.data.id;
+        var code = localJson.data.code;
+        form.initId = id;
+        school.util.FormUtil.loadData(form).then(function(data) {
+            var newId = form.xtype + '-' + data.main.id;
+            var newTitle = form._title + '(' + data.main.stu_number + ')';
+    
+            school.util.BaseUtil.refreshTabTitle(newId, newTitle);
+        });
+    },
+});

+ 16 - 29
frontend/pc-web/app/view/basic/student/StudentList.js

@@ -23,16 +23,17 @@ Ext.define('school.view.basic.student.StudentList', {
                 fieldLabel: '班级'
             }, {
                 xtype: 'textfield',
-                name: 'code',
+                name: 'stu_number',
                 fieldLabel:'学号'
             }, {
                 xtype: 'textfield',
-                name: 'name',
+                name: 'stu_name',
                 fieldLabel: '姓名'
             }, {
-                xtype: 'textfield',
-                name: 'parent',
-                fieldLabel: '家长'
+                xtype: 'condatefield',
+                name: 'stu_enroll_date',
+                fieldLabel: '入学日期',
+                columnWidth: 0.5
             }],
         
             gridConfig: {
@@ -54,6 +55,12 @@ Ext.define('school.view.basic.student.StudentList', {
                 },
                 hiddenTools: false,
                 toolBtns: [{
+                    xtype: 'button',
+                    text: '新增',
+                    handler: function() {
+                        school.util.BaseUtil.openTab('basic-student-studentdetail', '新增学生信息', 'basic-student-studentdetail-add');
+                    }
+                }, {
                     xtype: 'importbutton',
                     belong: me,
                     caller: me.caller,
@@ -63,9 +70,6 @@ Ext.define('school.view.basic.student.StudentList', {
                         var g = me.down('grid');
                         g.store.loadPage(g.store.currentPage);
                     }
-                }, {
-                    xtype: 'button',
-                    text: '一键开通'
                 }, {
                     xtype: 'button',
                     text: '删除',
@@ -102,12 +106,6 @@ Ext.define('school.view.basic.student.StudentList', {
                             school.util.BaseUtil.showErrorToast('删除失败: ' + e.message);
                         });
                     }
-                }, {
-                    xtype: 'button',
-                    text: '新增',
-                    handler: function() {
-                        school.util.BaseUtil.openTab('basic-student-studentdetail', '新增学生信息', 'basic-student-studentdetail-add');
-                    }
                 }],
                 columns : [{
                     text: 'id',
@@ -118,7 +116,7 @@ Ext.define('school.view.basic.student.StudentList', {
                     dataIndex: 'stu_number',
                     width: 150
                 }, {
-                    text: '学生姓名',
+                    text: '姓名',
                     dataIndex: 'stu_name',
                     width: 120
                 }, {
@@ -134,28 +132,17 @@ Ext.define('school.view.basic.student.StudentList', {
                 }, {
                     text: '班级',
                     dataIndex: 'class'
-                }, {
-                    text: '出生日期',
-                    dataIndex: 'stu_birthday',
-                    width: 120,
-                    xtype: 'datecolumn',
-                    format: 'Y-m-d'
-                }, {
-                    text: '年龄',
-                    dataIndex: 'stu_age'
                 }, {
                     text: '入学日期',
                     dataIndex: 'stu_enroll_date',
                     xtype: 'datecolumn',
                     format: 'Y-m-d'
                 }, {
-                    text: '毕业日期',
-                    dataIndex: 'stu_graduate_date',
+                    text: '出生日期',
+                    dataIndex: 'stu_birthday',
+                    width: 120,
                     xtype: 'datecolumn',
                     format: 'Y-m-d'
-                }, {
-                    text: '状态',
-                    dataIndex: 'stu_status'
                 }]
             },
         });

+ 2 - 2
frontend/pc-web/app/view/core/base/GridPanel.js

@@ -42,7 +42,7 @@ Ext.define('school.view.core.base.GridPanel', {
 
             me.store = Ext.create('Ext.data.Store',{
                 fields:fields,
-                autoLoad: true,
+                autoLoad: false,
                 pageSize: 10,
                 data: [],
                 proxy: {
@@ -109,7 +109,7 @@ Ext.define('school.view.core.base.GridPanel', {
             var store = grid.getStore(),
             gridBodyBox = grid.body.dom.getBoundingClientRect(),
             gridBodyBoxHeight = gridBodyBox.height;//可能有滚动条
-            var pageSize = Math.floor(gridBodyBoxHeight / 33);
+            var pageSize = Math.floor(gridBodyBoxHeight / 32);
             store.setPageSize(pageSize);
         }
     },

+ 2 - 5
frontend/pc-web/app/view/core/button/import/Window.js

@@ -84,7 +84,6 @@ Ext.define('school.view.core.button.import.Window', {
             if (id) {
                 form.setLoading(true);
                 Ext.Ajax.request({
-                    // url: '/api/document/'+form.ownerCt.caller.toLocaleLowerCase()+'/saveToFormal',//这里是填写需要跨域访问的URL
                     // url: 'http://10.1.80.47:9560/' + win.pathKey + '/saveToFormal', //这里是填写需要跨域访问的URL
                     url: '/api/school/' + win.pathKey + '/saveToFormal', //这里是填写需要跨域访问的URL
                     method: 'post',
@@ -179,9 +178,7 @@ Ext.define('school.view.core.button.import.Window', {
                         handler: function (b) {
                             //获取模版
                             var serverOptions = Ext.manifest.server;
-                            // window.location.href = (serverOptions.basePath.https?serverOptions.basePath.https:serverOptions.basePath) + '/api/commons/excel/import/templet?caller='+me.caller;
-                            // window.location.href = 'http://10.1.80.47:9560/' + 'excel/import/templet?caller=' + me.caller;
-                            window.location.href = '/api/school/' + 'excel/import/templet?caller=' + me.caller;
+                            window.location.href = (serverOptions.basePath.https?serverOptions.basePath.https:serverOptions.basePath) + '/api/school/' + 'excel/import/templet?caller=' + me.caller;
                         }
                     }
                 }, {
@@ -253,7 +250,7 @@ Ext.define('school.view.core.button.import.Window', {
                             fd.append('caller', me.caller);
                             form.setLoading(true);
                             Ext.Ajax.request({
-                                // url: 'http://10.1.80.47:9560/excel/import/parse', //这里是填写需要跨域访问的URL
+                                // url: 'http://10.1.80.36:9520/api/school/excel/import/parse', //这里是填写需要跨域访问的URL
                                 url: '/api/school/excel/import/parse', //这里是填写需要跨域访问的URL
                                 cors: true,
                                 useDefaultXhrHeader: false,

+ 1 - 1
frontend/pc-web/app/view/core/form/field/ConDateField.js

@@ -122,7 +122,7 @@ Ext.define('school.view.core.form.field.ConDateField', {
         });
         var t = this.value;
         if(!t || !t in [1,2,3,4,5,6,7]) {
-            t = 1;
+            t = 7;
         }
         this.value = null;
         this.setInitValue(t);

+ 14 - 0
frontend/pc-web/app/view/core/form/field/EthnicityComboBox.js

@@ -0,0 +1,14 @@
+Ext.define('school.view.core.form.field.EthnicityComboBox', {
+    extend: 'Ext.form.field.ComboBox',
+    alias: 'widget.ethnicitycombobox',
+
+    fieldLabel: '民族',
+    displayField: 'name',
+    valueField: 'value',
+    editable: true,
+    store: {
+        type: 'store_ethnicity'
+    },
+    minChars: 0,
+    queryMode: 'local'
+});

+ 14 - 0
frontend/pc-web/app/view/core/form/field/GenderComboBox.js

@@ -0,0 +1,14 @@
+Ext.define('school.view.core.form.field.GenderComboBox', {
+    extend: 'Ext.form.field.ComboBox',
+    alias: 'widget.gendercombo',
+
+    fieldLabel: '性别',
+    displayField: 'name',
+    valueField: 'value',
+    editable: false,
+    store: {
+        type: 'store_gender'
+    },
+    minChars: 0,
+    queryMode: 'local'
+});