guq 6 年之前
父節點
當前提交
55f4c00f85
共有 41 個文件被更改,包括 713 次插入175 次删除
  1. 6 17
      applications/school/school-dto/src/main/java/com/usoftchina/smartschool/school/dto/CurriculumDTO.java
  2. 6 18
      applications/school/school-dto/src/main/java/com/usoftchina/smartschool/school/dto/CurriculumListDTO.java
  3. 1 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/ClassServiceImpl.java
  4. 6 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/HomeWork.java
  5. 10 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/Notify.java
  6. 6 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/controller/WxUserController.java
  7. 6 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxMeetingServiceImpl.java
  8. 7 2
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxNotifyServiceImpl.java
  9. 7 2
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxOaApproveServiceImpl.java
  10. 5 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxOaLeaveServiceImpl.java
  11. 7 2
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxVoteServiceImpl.java
  12. 19 7
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/oaBean/Manager.java
  13. 6 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/support/RemindTask.java
  14. 4 1
      applications/school/school-server/src/main/resources/application.yml
  15. 3 0
      applications/school/school-server/src/main/resources/config/application-dev.yml
  16. 4 1
      applications/school/school-server/src/main/resources/config/application-docker-prod.yml
  17. 8 18
      applications/school/school-server/src/main/resources/mapper/CurriculumMapper.xml
  18. 9 3
      applications/school/school-server/src/main/resources/mapper/HomeWorkMapper.xml
  19. 3 1
      applications/school/school-server/src/main/resources/mapper/NotifyMapper.xml
  20. 11 8
      applications/school/school-server/src/main/resources/mapper/SysClazzMapper.xml
  21. 10 0
      framework/core/src/main/java/com/usoftchina/smartschool/context/SpringContextHolder.java
  22. 16 1
      frontend/pc-web/app.json
  23. 1 6
      frontend/pc-web/app/model/Grade.js
  24. 28 0
      frontend/pc-web/app/model/basic/Subject.js
  25. 11 0
      frontend/pc-web/app/store/Grade.js
  26. 8 8
      frontend/pc-web/app/view/Interaction/access/List.js
  27. 21 25
      frontend/pc-web/app/view/Interaction/timetable/Detail.js
  28. 6 9
      frontend/pc-web/app/view/Interaction/timetable/List.js
  29. 30 11
      frontend/pc-web/app/view/basic/class/ClassDetail.js
  30. 40 0
      frontend/pc-web/app/view/basic/class/ClassDetailController.js
  31. 6 1
      frontend/pc-web/app/view/basic/class/ClassInfo.js
  32. 15 4
      frontend/pc-web/app/view/basic/class/ListCard.js
  33. 8 4
      frontend/pc-web/app/view/basic/school/SchoolInfo.js
  34. 147 0
      frontend/pc-web/app/view/basic/subject/List.js
  35. 185 0
      frontend/pc-web/app/view/basic/subject/ListController.js
  36. 4 0
      frontend/pc-web/app/view/basic/subject/ListViewModel.js
  37. 21 5
      frontend/pc-web/app/view/viewport/ViewportModel.js
  38. 2 1
      frontend/pc-web/package.json
  39. 二進制
      frontend/pc-web/resources/images/auth-background.jpg
  40. 19 15
      frontend/pc-web/resources/json/navigation.json
  41. 1 0
      frontend/wechat-web/MP_verify_P40tTKo1dAMQh4CJ.txt

+ 6 - 17
applications/school/school-dto/src/main/java/com/usoftchina/smartschool/school/dto/CurriculumDTO.java

@@ -29,11 +29,8 @@ public class CurriculumDTO implements Serializable {
     /**
      * 学期开始日期
      */
-    private Date termStart;
-    /**
-     * 学期结束日期
-     */
-    private Date termEnd;
+    private String termPart;
+
     /**
      * 周 数
      */
@@ -149,20 +146,12 @@ public class CurriculumDTO implements Serializable {
         this.name = name;
     }
 
-    public Date getTermStart() {
-        return termStart;
-    }
-
-    public void setTermStart(Date termStart) {
-        this.termStart = termStart;
-    }
-
-    public Date getTermEnd() {
-        return termEnd;
+    public String getTermPart() {
+        return termPart;
     }
 
-    public void setTermEnd(Date termEnd) {
-        this.termEnd = termEnd;
+    public void setTermPart(String termPart) {
+        this.termPart = termPart;
     }
 
     public Long getWeekNum() {

+ 6 - 18
applications/school/school-dto/src/main/java/com/usoftchina/smartschool/school/dto/CurriculumListDTO.java

@@ -47,13 +47,9 @@ public class CurriculumListDTO implements Serializable {
      */
     private String name;
     /**
-     * 学期开始
+     * 学
      */
-    private String termStart;
-    /**
-     * 学期结束
-     */
-    private String termEnd;
+    private String termPart;
 
     public String getId() {
         return id;
@@ -79,20 +75,12 @@ public class CurriculumListDTO implements Serializable {
         this.name = name;
     }
 
-    public String getTermStart() {
-        return termStart;
-    }
-
-    public void setTermStart(String termStart) {
-        this.termStart = termStart;
-    }
-
-    public String getTermEnd() {
-        return termEnd;
+    public String getTermPart() {
+        return termPart;
     }
 
-    public void setTermEnd(String termEnd) {
-        this.termEnd = termEnd;
+    public void setTermPart(String termPart) {
+        this.termPart = termPart;
     }
 
     public String getSchoolName() {

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

@@ -33,7 +33,6 @@ public class ClassServiceImpl implements ClassService{
             throw new BizException(BizExceptionCode.USELESS_DATA);
         }
         Long school_id = BaseContextHolder.getSchoolId();
-        school_id = 1l;
         ClassForm cf = new ClassForm();
         SysClazz clazz = sysClazzMapper.selectByPrimaryKey(id);
         List<SysStudent> students = sysStudentMapper.selectByConditon("clazz_id=" + id, school_id);
@@ -41,6 +40,7 @@ public class ClassServiceImpl implements ClassService{
         cf.setMain(clazz);
         cf.setItems1(students);
         cf.setItems2(teacherDetails);
+
         return cf;
     }
 

+ 6 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/HomeWork.java

@@ -36,4 +36,10 @@ public class HomeWork implements Serializable{
 
     private String task_notifier;
 
+    private String classz_name;
+
+    private String grade_name;
+
+    private Date publish_date;
+
 }

+ 10 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/Notify.java

@@ -27,6 +27,8 @@ public class Notify implements Serializable{
 
     private String notify_stu;
 
+    private Date publish_date;
+
     public String getNotify_details() {
         return notify_details;
     }
@@ -122,4 +124,12 @@ public class Notify implements Serializable{
     public void setSchool_id(Long school_id) {
         this.school_id = school_id;
     }
+
+    public Date getPublish_date() {
+        return publish_date;
+    }
+
+    public void setPublish_date(Date publish_date) {
+        this.publish_date = publish_date;
+    }
 }

+ 6 - 1
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/controller/WxUserController.java

@@ -10,6 +10,7 @@ import com.usoftchina.smartschool.school.wxschool.utils.ObjectUtils;
 import com.usoftchina.smartschool.school.wxschool.utils.ResultBean;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.util.Assert;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -44,6 +45,10 @@ public class WxUserController {
 
 	@Autowired
 	private WxSchoolService schoolService;
+
+
+	@Value("${smartschool.domain.wechat}")
+	private String wechatUrl;
 	/**
 	 * 发送验证码
 	 */
@@ -151,7 +156,7 @@ public class WxUserController {
 		} catch (UnsupportedEncodingException e) {
 			e.printStackTrace();
 		}
-		return  new ModelAndView("redirect:https://school-wechat.ydyhz.com/bindMenu/open/"+openid+"/"+encode);
+		return  new ModelAndView("redirect:" + wechatUrl + "/bindMenu/open/"+openid+"/"+encode);
 	}
 
 	/**

+ 6 - 1
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxMeetingServiceImpl.java

@@ -16,6 +16,7 @@ import com.usoftchina.smartschool.school.wxschool.utils.DateFormatUtil;
 import com.usoftchina.smartschool.school.wxschool.utils.ObjectUtils;
 import com.usoftchina.smartschool.wechat.api.WxPushApi;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.text.SimpleDateFormat;
@@ -39,6 +40,9 @@ public class WxMeetingServiceImpl implements WxMeetingService {
 	@Autowired
 	private WxSchoolMapper wxSchoolMapper;
 
+	@Value("${smartschool.domain.wechat}")
+	private String wechatUrl;
+
 	/**
 	 * 创建会议
 	 * @param jsonMeeting
@@ -91,7 +95,8 @@ public class WxMeetingServiceImpl implements WxMeetingService {
 					SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
 					SchoolDO schoolDO = wxSchoolMapper.get(meetingDO.getSchoolId());
 					String openid = teacherMapper.get(l).getOpenid();
-					wxPushApi.wxPush(schoolDO.getSchoolAppid(), schoolDO.getSchoolSecret(),openid , "_hX_lGEG1W1bJmW37VBaPYQoLrRrUAlNCSScezZQQWk", "您好,您有一条新的会议通知", meetingDO.getMeetingName(), simpleDateFormat.format(meetingDO.getStartDate()), meetingDO.getMeetingAddress(), "-", "点击查看详情", "https://school-wechat.ydyhz.com/meet-detail/" + meetingDO.getMeetingId()+"?teacherId="+l);
+					wxPushApi.wxPush(schoolDO.getSchoolAppid(), schoolDO.getSchoolSecret(),openid , "_hX_lGEG1W1bJmW37VBaPYQoLrRrUAlNCSScezZQQWk", "您好,您有一条新的会议通知", meetingDO.getMeetingName(), simpleDateFormat.format(meetingDO.getStartDate()), meetingDO.getMeetingAddress(), "-", "点击查看详情",  wechatUrl + "/meet-detail/" + meetingDO.getMeetingId()+"?teacherId="+l);
+
 				}
 			}
 			return "创建成功";

+ 7 - 2
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxNotifyServiceImpl.java

@@ -8,6 +8,7 @@ import com.usoftchina.smartschool.school.wxschool.mapper.*;
 import com.usoftchina.smartschool.school.wxschool.utils.ObjectUtils;
 import com.usoftchina.smartschool.wechat.api.WxPushApi;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.text.SimpleDateFormat;
@@ -41,6 +42,10 @@ public class WxNotifyServiceImpl implements WxNotifyService {
 	private WxParentsStuMapper wxParentsStuMapper;
 
 
+	@Value("${smartschool.domain.wechat}")
+	private String wechatUrl;
+
+
 	/**
 	 * 获取系统消息和使用帮助
 	 * @param notifyType
@@ -96,7 +101,7 @@ public class WxNotifyServiceImpl implements WxNotifyService {
 					SchoolDO schoolDO = wxSchoolMapper.get(teacherDO.getSchoolId());
 					String teacherName = teacherMapper.get(notifyCreator).getTeacherName();
 					try {
-						wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),teacherDO.getOpenid(), "h0BkcnTo24b2jsficMeVO0B17GvE-VzlPvF0fVXea4w", "您好,您有一条通知", schoolDO.getSchoolName(),teacherName,format.format(new Date()),notifyDetails, "点击查看详情", "https://school-wechat.ydyhz.com/notifyDetail/teacher/"+notifyDO.getNotifyId()+"?teacherId="+l);
+						wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),teacherDO.getOpenid(), "h0BkcnTo24b2jsficMeVO0B17GvE-VzlPvF0fVXea4w", "您好,您有一条通知", schoolDO.getSchoolName(),teacherName,format.format(new Date()),notifyDetails, "点击查看详情", wechatUrl + "/notifyDetail/teacher/"+notifyDO.getNotifyId()+"?teacherId="+l);
 					}catch (Exception e){
 						e.printStackTrace();
 					}
@@ -118,7 +123,7 @@ public class WxNotifyServiceImpl implements WxNotifyService {
 							SchoolDO schoolDO = wxSchoolMapper.get(parentsDO.getSchoolId());
 							String teacherName = teacherMapper.get(notifyCreator).getTeacherName();
 							try {
-								wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),parentsDO.getOpenid(), "h0BkcnTo24b2jsficMeVO0B17GvE-VzlPvF0fVXea4w", "您好,您有一条通知", schoolDO.getSchoolName(),teacherName,format.format(new Date()),notifyDetails, "点击查看详情", "https://school-wechat.ydyhz.com/notifyDetail/parent/"+notifyDO.getNotifyId()+"?stuId="+l);
+								wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),parentsDO.getOpenid(), "h0BkcnTo24b2jsficMeVO0B17GvE-VzlPvF0fVXea4w", "您好,您有一条通知", schoolDO.getSchoolName(),teacherName,format.format(new Date()),notifyDetails, "点击查看详情",  wechatUrl + "/notifyDetail/parent/"+notifyDO.getNotifyId()+"?stuId="+l);
 							}catch (Exception e){
 								e.printStackTrace();
 							}

+ 7 - 2
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxOaApproveServiceImpl.java

@@ -17,6 +17,7 @@ import com.usoftchina.smartschool.school.wxschool.utils.DateFormatUtil;
 import com.usoftchina.smartschool.school.wxschool.utils.ObjectUtils;
 import com.usoftchina.smartschool.wechat.api.WxPushApi;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.text.SimpleDateFormat;
@@ -40,6 +41,10 @@ public class WxOaApproveServiceImpl implements WxOaApproveService {
     @Autowired
     private WxSchoolMapper wxSchoolMapper;
 
+
+    @Value("${smartschool.domain.wechat}")
+    private String wechatUrl;
+
     public int oaCreate(String oaString) {
         JSONObject parse = JSONObject.parseObject(oaString);
         OaApproveDO oaApprove = new OaApproveDO();
@@ -89,7 +94,7 @@ public class WxOaApproveServiceImpl implements WxOaApproveService {
                     wxPushApi.wxPush(schoolDO.getSchoolAppid(), schoolDO.getSchoolSecret(), teacherDO.getOpenid(),
                             "ohqfldHKfEmZPrLthLYt3h5SEjqd0AY7UFdngTDLTFY", "您有一个待审批事项", approveTitle,
                             teacher.getTeacherName(), format.format(new Date()), approveDetails, "点击查看详情",
-                            "https://school-wechat.ydyhz.com/approvel-detail/false/" +oaApprove.getApproveId());
+                             wechatUrl + "/approvel-detail/false/" +oaApprove.getApproveId());
                 }catch (Exception e){
                     e.printStackTrace();
                 }
@@ -98,7 +103,7 @@ public class WxOaApproveServiceImpl implements WxOaApproveService {
                     wxPushApi.wxPush(schoolDO.getSchoolAppid(), schoolDO.getSchoolSecret(), teacherDO.getOpenid(),
                             "ohqfldHKfEmZPrLthLYt3h5SEjqd0AY7UFdngTDLTFY", "您有一个待审批事项", approveTitle,
                             teacher.getTeacherName(), format.format(new Date()), approveDetails, "点击查看详情",
-                            "https://school-wechat.ydyhz.com/approvel-detail/false/" +oaApprove.getApproveId());
+                             wechatUrl + "/approvel-detail/false/" +oaApprove.getApproveId());
                 }catch (Exception e){
                     e.printStackTrace();
                 }

+ 5 - 1
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxOaLeaveServiceImpl.java

@@ -9,6 +9,7 @@ import com.usoftchina.smartschool.school.wxschool.utils.DateFormatUtil;
 import com.usoftchina.smartschool.school.wxschool.utils.ObjectUtils;
 import com.usoftchina.smartschool.wechat.api.WxPushApi;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.text.SimpleDateFormat;
@@ -37,6 +38,9 @@ public class WxOaLeaveServiceImpl implements WxOaLeaveService {
     @Autowired
     private WxSchoolMapper wxSchoolMapper;
 
+    @Value("${smartschool.domain.wechat}")
+    private String wechatUrl;
+
     /**
      * 请假条提交
      */
@@ -77,7 +81,7 @@ public class WxOaLeaveServiceImpl implements WxOaLeaveService {
                     SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
                     String date =format.format(leave.getStartDate())  + "至" + format.format(leave.getEndDate());
                     try {
-                        wxPushApi.wxPush(schoolDO.getSchoolAppid(), schoolDO.getSchoolSecret(), teacherDO.getOpenid(), "QC8H4hQd1Fh0wqaaE3mbAxvoBC6y-XkHctIe8Kx6gcA","您好,学生的请假申请", stuName, date, leave.getLvDetails(), "-", "点击查看详情", "https://school-wechat.ydyhz.com/leavedetail/teacher/" + leave.getLvId());
+                        wxPushApi.wxPush(schoolDO.getSchoolAppid(), schoolDO.getSchoolSecret(), teacherDO.getOpenid(), "QC8H4hQd1Fh0wqaaE3mbAxvoBC6y-XkHctIe8Kx6gcA","您好,学生的请假申请", stuName, date, leave.getLvDetails(), "-", "点击查看详情", wechatUrl + "/leavedetail/teacher/" + leave.getLvId());
                     }catch (Exception e){
                         e.printStackTrace();
                     }

+ 7 - 2
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxVoteServiceImpl.java

@@ -10,6 +10,7 @@ import com.usoftchina.smartschool.school.wxschool.utils.DateFormatUtil;
 import com.usoftchina.smartschool.school.wxschool.utils.ObjectUtils;
 import com.usoftchina.smartschool.wechat.api.WxPushApi;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -47,6 +48,10 @@ public class WxVoteServiceImpl implements WxVoteService {
     private WxParentsMapper wxParentsMapper;
 
 
+    @Value("${smartschool.domain.wechat}")
+    private String wechatUrl;
+
+
     /**
      * 创建投票单
      */
@@ -108,7 +113,7 @@ public class WxVoteServiceImpl implements WxVoteService {
                         wxPushApi.wxPush(schoolDO.getSchoolAppid(), schoolDO.getSchoolSecret(), teacherDO.getOpenid(),
                                 "h0BkcnTo24b2jsficMeVO0B17GvE-VzlPvF0fVXea4w", "有一个投票单需要您的支持", schoolDO.getSchoolName(),
                                 teacherName, format.format(new Date()), vote.getVoteName()
-                                , "点击查看详情", "https://school-wechat.ydyhz.com/voteDetail/teacher/" + vote.getVoteId()+"?teacherId="+ll);
+                                , "点击查看详情", wechatUrl + "/voteDetail/teacher/" + vote.getVoteId()+"?teacherId="+ll);
                     }catch (Exception e){
                         e.printStackTrace();
                     }
@@ -130,7 +135,7 @@ public class WxVoteServiceImpl implements WxVoteService {
                                     , "h0BkcnTo24b2jsficMeVO0B17GvE-VzlPvF0fVXea4w", "有一个投票单需要您的支持",
                                     schoolDO.getSchoolName(),teacherName ,
                                     format.format(new Date()), vote.getVoteName(), "点击查看详情",
-                                    "https://school-wechat.ydyhz.com/voteDetail/parent/" + vote.getVoteId()+"?stuId="+l);
+                                     wechatUrl + "/voteDetail/parent/" + vote.getVoteId()+"?stuId="+l);
                         }catch (Exception e){
                             e.printStackTrace();
                         }

+ 19 - 7
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/oaBean/Manager.java

@@ -2,6 +2,7 @@ package com.usoftchina.smartschool.school.wxschool.oaBean;
 
 
 
+import com.usoftchina.smartschool.context.SpringContextHolder;
 import com.usoftchina.smartschool.school.po.SchoolDO;
 import com.usoftchina.smartschool.school.wxschool.mapper.WxOaApproveMapper;
 import com.usoftchina.smartschool.school.wxschool.mapper.WxSchoolMapper;
@@ -13,14 +14,25 @@ import com.usoftchina.smartschool.wechat.api.WxPushApi;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 
-
 public class Manager extends Leader {
+
+
+    //private static String wechatUrl = "https://school-wechat.ubtob.com";
+
+    /*static {
+        String active = SpringContextHolder.getActiveProfile();
+        if ("docker-cloud".equals(active)) {
+            wechatUrl = "https://school-wechat.ydyhz.com";
+        }
+    }
+*/
     public Manager(String name){
         super(name);
     }
 
     @Override
     public String handleRequest(WxSchoolMapper wxSchoolMapper,WxPushApi wxPushApi, WxTeacherMapper teacherMapper, WxOaApproveMapper oaApproveMapper, OaApproveDO oaApprove, Integer status, String approveOpinion) throws Exception {
+        String wechatUrl = SpringContextHolder.getDomain();
         if (status==1){
             oaApprove.setApproveDate(new Date());
             oaApprove.setApproveStatus(2);
@@ -33,19 +45,19 @@ public class Manager extends Leader {
             if (i>0){
                 if (1==approveType){
                     try {
-                        wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),teacherDO.getOpenid(),"TCxxHDaVJWWxKEhJEcpyOoOl4nB75WL9_87-52gmHUg","您好,审批已通过",teacherDO.getTeacherName(),"出差",format.format(new Date()),teacherMapper.get(oaApprove.getApprover()).getTeacherName(),"点击查看详情","https://school-wechat.ydyhz.com/approvel-detail/true/"+oaApprove.getApproveId());
+                        wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),teacherDO.getOpenid(),"TCxxHDaVJWWxKEhJEcpyOoOl4nB75WL9_87-52gmHUg","您好,审批已通过",teacherDO.getTeacherName(),"出差",format.format(new Date()),teacherMapper.get(oaApprove.getApprover()).getTeacherName(),"点击查看详情",wechatUrl + "/approvel-detail/true/"+oaApprove.getApproveId());
                     }catch (Exception e){
                         e.printStackTrace();
                     }
                 }else if (2==approveType){
                     try {
-                        wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),teacherDO.getOpenid(),"TCxxHDaVJWWxKEhJEcpyOoOl4nB75WL9_87-52gmHUg","您好,审批已通过",teacherDO.getTeacherName(),"用品申请",format.format(new Date()),teacherMapper.get(oaApprove.getApprover()).getTeacherName(),"点击查看详情","https://school-wechat.ydyhz.com/approvel-detail/true/"+oaApprove.getApproveId());
+                        wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),teacherDO.getOpenid(),"TCxxHDaVJWWxKEhJEcpyOoOl4nB75WL9_87-52gmHUg","您好,审批已通过",teacherDO.getTeacherName(),"用品申请",format.format(new Date()),teacherMapper.get(oaApprove.getApprover()).getTeacherName(),"点击查看详情",wechatUrl + "/approvel-detail/true/"+oaApprove.getApproveId());
                     }catch (Exception e){
                         e.printStackTrace();
                     }
                 }else if (4==approveType){
                     try {
-                        wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),teacherDO.getOpenid(),"TCxxHDaVJWWxKEhJEcpyOoOl4nB75WL9_87-52gmHUg","您好,审批已通过",teacherDO.getTeacherName(),"请假",format.format(new Date()),teacherMapper.get(oaApprove.getApprover()).getTeacherName(),"点击查看详情","https://school-wechat.ydyhz.com/approvel-detail/true/"+oaApprove.getApproveId());
+                        wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),teacherDO.getOpenid(),"TCxxHDaVJWWxKEhJEcpyOoOl4nB75WL9_87-52gmHUg","您好,审批已通过",teacherDO.getTeacherName(),"请假",format.format(new Date()),teacherMapper.get(oaApprove.getApprover()).getTeacherName(),"点击查看详情",wechatUrl + "/approvel-detail/true/"+oaApprove.getApproveId());
                     }catch (Exception e){
                         e.printStackTrace();
                     }
@@ -68,19 +80,19 @@ public class Manager extends Leader {
             if (i>0){
                 if (1==approveType){
                     try {
-                        wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),teacherDO.getOpenid(),"Rs8AcmuluVWDd4uC9L08PDStVNYXJmZrsSCk9xiKxrI","抱歉,您的审批未通过","出差",teacherMapper.get(oaApprove.getApprover()).getTeacherName(),format.format(new Date()),"","点击查看详情","https://school-wechat.ydyhz.com/approvel-detail/true/"+oaApprove.getApproveId());
+                        wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),teacherDO.getOpenid(),"Rs8AcmuluVWDd4uC9L08PDStVNYXJmZrsSCk9xiKxrI","抱歉,您的审批未通过","出差",teacherMapper.get(oaApprove.getApprover()).getTeacherName(),format.format(new Date()),"","点击查看详情",wechatUrl + "/approvel-detail/true/"+oaApprove.getApproveId());
                     }catch (Exception e){
                         e.printStackTrace();
                     }
                 }else if(2==approveType){
                     try {
-                        wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),teacherDO.getOpenid(),"Rs8AcmuluVWDd4uC9L08PDStVNYXJmZrsSCk9xiKxrI","抱歉,您的审批未通过","用品申请",teacherMapper.get(oaApprove.getApprover()).getTeacherName(),format.format(new Date()),"","点击查看详情","https://school-wechat.ydyhz.com/approvel-detail/true/"+oaApprove.getApproveId());
+                        wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),teacherDO.getOpenid(),"Rs8AcmuluVWDd4uC9L08PDStVNYXJmZrsSCk9xiKxrI","抱歉,您的审批未通过","用品申请",teacherMapper.get(oaApprove.getApprover()).getTeacherName(),format.format(new Date()),"","点击查看详情",wechatUrl + "/approvel-detail/true/"+oaApprove.getApproveId());
                     }catch (Exception e){
                         e.printStackTrace();
                     }
                 }else if (4==approveType){
                     try {
-                        wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),teacherDO.getOpenid(),"Rs8AcmuluVWDd4uC9L08PDStVNYXJmZrsSCk9xiKxrI","抱歉,您的审批未通过","请假",teacherMapper.get(oaApprove.getApprover()).getTeacherName(),format.format(new Date()),"","点击查看详情","https://school-wechat.ydyhz.com/approvel-detail/true/"+oaApprove.getApproveId());
+                        wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),teacherDO.getOpenid(),"Rs8AcmuluVWDd4uC9L08PDStVNYXJmZrsSCk9xiKxrI","抱歉,您的审批未通过","请假",teacherMapper.get(oaApprove.getApprover()).getTeacherName(),format.format(new Date()),"","点击查看详情",wechatUrl + "/approvel-detail/true/"+oaApprove.getApproveId());
                     }catch (Exception e){
                         e.printStackTrace();
                     }

+ 6 - 1
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/support/RemindTask.java

@@ -8,6 +8,7 @@ import com.usoftchina.smartschool.school.wxschool.mapper.WxSchoolMapper;
 import com.usoftchina.smartschool.school.wxschool.mapper.WxTeacherMapper;
 import com.usoftchina.smartschool.wechat.api.WxPushApi;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
@@ -29,6 +30,10 @@ public class RemindTask extends TimerTask {
     @Autowired
     private WxTeacherMapper teacherMapper;
 
+
+    @Value("${smartschool.domain.wechat}")
+    private String wechatUrl;
+
     private MeetingDO meetingDO;
 
     private Integer i;
@@ -58,7 +63,7 @@ public class RemindTask extends TimerTask {
             SchoolDO schoolDO = wxSchoolMapper.get(meetingDO.getSchoolId());
             String openid = teacherMapper.get(teacherId).getOpenid();
             try {
-                wxPushApi.wxPush(schoolDO.getSchoolAppid(), schoolDO.getSchoolSecret(),openid , "_hX_lGEG1W1bJmW37VBaPYQoLrRrUAlNCSScezZQQWk", "您好,您有一条新的会议通知", meetingDO.getMeetingName(), simpleDateFormat.format(meetingDO.getStartDate()), meetingDO.getMeetingAddress(), "-", "点击查看详情", "https://school-wechat.ydyhz.com/meet-detail/" + meetingDO.getMeetingId()+"?teacherId="+teacherId);
+                wxPushApi.wxPush(schoolDO.getSchoolAppid(), schoolDO.getSchoolSecret(),openid , "_hX_lGEG1W1bJmW37VBaPYQoLrRrUAlNCSScezZQQWk", "您好,您有一条新的会议通知", meetingDO.getMeetingName(), simpleDateFormat.format(meetingDO.getStartDate()), meetingDO.getMeetingAddress(), "-", "点击查看详情", wechatUrl + "/meet-detail/" + meetingDO.getMeetingId()+"?teacherId="+teacherId);
             } catch (Exception e) {
                 e.printStackTrace();
             }

+ 4 - 1
applications/school/school-server/src/main/resources/application.yml

@@ -87,4 +87,7 @@ hystrix:
                 enabled: true
               isolation:
                     thread:
-                        timeoutInMilliseconds: 4000
+                        timeoutInMilliseconds: 4000
+smartschool:
+  domain:
+    wechat: https://school-wechat.ubtob.com

+ 3 - 0
applications/school/school-server/src/main/resources/config/application-dev.yml

@@ -10,3 +10,6 @@ eureka:
     registryFetchIntervalSeconds: 5
     serviceUrl:
       defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@127.0.0.1:9500/eureka/
+smartschool:
+  domain:
+    wechat: https://school-wechat.ubtob.com

+ 4 - 1
applications/school/school-server/src/main/resources/config/application-docker-prod.yml

@@ -14,4 +14,7 @@ spring:
     password: select123***
   redis:
     host: 10.10.100.173
-    port: 6379
+    port: 6379
+smartschool:
+  domain:
+    wechat: https://school-wechat.ubtob.com

+ 8 - 18
applications/school/school-server/src/main/resources/mapper/CurriculumMapper.xml

@@ -24,8 +24,7 @@
     <result column="mcur_code" property="code" jdbcType="VARCHAR" />
     <result column="mcur_term_name" property="termName" jdbcType="VARCHAR" />
     <result column="mcur_name" property="name" jdbcType="VARCHAR" />
-    <result column="mcur_term_start" property="termStart" jdbcType="TIMESTAMP" />
-    <result column="mcur_term_end" property="termEnd" jdbcType="TIMESTAMP" />
+    <result column="mcur_term_part" property="termPart" jdbcType="VARCHAR" />
     <result column="mcur_weeknum" property="weekNum" jdbcType="INTEGER" />
     <result column="creatorName" property="creatorName" jdbcType="VARCHAR" />
     <result column="createTime" property="createTime" jdbcType="TIMESTAMP" />
@@ -39,7 +38,7 @@
 
   <select id="selectByCondition" resultType="com.usoftchina.smartschool.school.dto.CurriculumListDTO">
     select mcur.id id, school.school_name schoolName, grade.grade_name gradeName, clazz.clazz_name clazzName, mcur_status status, mcur.school_id schoolId, mcur.clazz_id clazzId, clazz.grade_id gradeId,
-    mcur.mcur_term_name termName, mcur.mcur_name name, mcur.mcur_term_start termStart, mcur.mcur_term_end termEnd
+    mcur.mcur_term_name termName, mcur.mcur_name name, mcur.mcur_term_part termPart
     from clazz_main_curriculum mcur
     left join sys_clazz clazz on mcur.clazz_id = clazz.clazz_id
     left join sys_grade grade on clazz.grade_id = grade.grade_id
@@ -96,11 +95,8 @@
       <if test="name != null">
         mcur_name,
       </if>
-      <if test="termStart != null">
-        mcur_term_start,
-      </if>
-      <if test="termEnd != null">
-        mcur_term_end,
+      <if test="termPart != null">
+        mcur_term_part,
       </if>
       <if test="weekNum != null">
         mcur_weeknum,
@@ -134,11 +130,8 @@
       <if test="name != null">
         #{name, jdbcType=VARCHAR},
       </if>
-      <if test="termStart != null">
-        #{termStart, jdbcType=TIMESTAMP},
-      </if>
-      <if test="termEnd != null">
-        #{termEnd, jdbcType=TIMESTAMP},
+      <if test="termPart != null">
+        #{termPart, jdbcType=VARCHAR},
       </if>
       <if test="weekNum != null">
         #{weekNum, jdbcType=INTEGER},
@@ -192,11 +185,8 @@
       <if test="name != null" >
         mcur_name = #{name,jdbcType=VARCHAR},
       </if>
-      <if test="termStart != null" >
-        mcur_term_start = #{termStart,jdbcType=VARCHAR},
-      </if>
-      <if test="termEnd != null" >
-        mcur_term_end = #{termEnd,jdbcType=VARCHAR},
+      <if test="termPart != null" >
+        mcur_term_part = #{termPart,jdbcType=VARCHAR},
       </if>
       <if test="weekNum != null" >
         mcur_weeknum = #{weekNum,jdbcType=INTEGER},

+ 9 - 3
applications/school/school-server/src/main/resources/mapper/HomeWorkMapper.xml

@@ -14,6 +14,9 @@
     <result column="task_context" property="task_context" jdbcType="LONGVARCHAR" />
     <result column="task_files" property="task_files" jdbcType="LONGVARCHAR" />
     <result column="task_notifier" property="task_notifier" jdbcType="LONGVARCHAR" />
+    <result column="classz_name" property="classz_name" jdbcType="VARCHAR" />
+    <result column="grade_name" property="grade_name" jdbcType="VARCHAR" />
+    <result column="publish_date" property="publish_date" jdbcType="TIMESTAMP" />
   </resultMap>
 
   <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
@@ -30,12 +33,14 @@
     insert into task_notify (subject_id, task_title,
       task_status, create_date, start_date, 
       end_date, task_creator, school_id, 
-      task_context, task_files, task_notifier
+      task_context, task_files, task_notifier,
+      classz_name, grade_name
       )
     values (#{subject_id,jdbcType=BIGINT}, #{task_title,jdbcType=VARCHAR},
       #{task_status,jdbcType=INTEGER}, #{create_date,jdbcType=TIMESTAMP}, #{start_date,jdbcType=TIMESTAMP}, 
       #{end_date,jdbcType=TIMESTAMP}, #{task_creator,jdbcType=BIGINT}, #{school_id,jdbcType=BIGINT}, 
-      #{task_context,jdbcType=LONGVARCHAR}, #{task_files,jdbcType=LONGVARCHAR}, #{task_notifier,jdbcType=LONGVARCHAR}
+      #{task_context,jdbcType=LONGVARCHAR}, #{task_files,jdbcType=LONGVARCHAR}, #{task_notifier,jdbcType=LONGVARCHAR},
+      #{task_title,jdbcType=VARCHAR},#{task_title,jdbcType=VARCHAR}
       )
   </insert>
   <insert id="insertSelective" parameterType="com.usoftchina.smartschool.school.po.HomeWork" >
@@ -195,7 +200,8 @@
   </select>
   <update id="updateByPublish" parameterType="java.lang.Long">
     update task_notify
-    set task_status = 1
+    set task_status = 1 ,
+      publish_date = now()
     where task_id = #{task_id,jdbcType=BIGINT}
   </update>
 </mapper>

+ 3 - 1
applications/school/school-server/src/main/resources/mapper/NotifyMapper.xml

@@ -14,6 +14,7 @@
     <result column="notify_files" property="notify_files" jdbcType="LONGVARCHAR" />
     <result column="notify_teacher" property="notify_teacher" jdbcType="LONGVARCHAR" />
     <result column="notify_stu" property="notify_stu" jdbcType="LONGVARCHAR" />
+    <result column="publish_date" property="publish_date" jdbcType="TIMESTAMP" />
   </resultMap>
   <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
     select *
@@ -192,7 +193,8 @@
   </select>
   <update id="updateByPublish" parameterType="java.lang.Long">
     update notify
-    set notify_status = 1
+    set notify_status = 1 ,
+      publish_date = now()
     where notify_id = #{notify_id,jdbcType=BIGINT}
   </update>
 </mapper>

+ 11 - 8
applications/school/school-server/src/main/resources/mapper/SysClazzMapper.xml

@@ -17,7 +17,7 @@
   </sql>
   <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
     select 
-    <include refid="Base_Column_List" />
+    *
     from sys_clazz
     where clazz_id = #{clazz_id,jdbcType=BIGINT}
   </select>
@@ -137,15 +137,18 @@
     select * from sys_clazz where grade_id = #{gradeId} and clazz_name = #{name} and school_id = #{schoolId}
   </select>
 
-  <resultMap id="teacherMap" type="com.usoftchina.smartschool.school.po.TeacherDetail" >
-    <result column="teacher" property="teacher" jdbcType="VARCHAR" />
-    <result column="grade" property="grade" jdbcType="VARCHAR" />
-    <result column="subject" property="subject" jdbcType="INTEGER" />
-    <result column="classes" property="classes" jdbcType="VARCHAR" />
+  <resultMap id="teacherMap" type="com.usoftchina.smartschool.school.po.SysTeacherClazz" >
+    <result column="teacher_clazz_id" property="teacher_clazz_id" jdbcType="BIGINT" />
+    <result column="clazz_id" property="clazz_id" jdbcType="BIGINT" />
+    <result column="teacher_id" property="teacher_id" jdbcType="BIGINT" />
+    <result column="subject_id" property="subject_id" jdbcType="BIGINT" />
+    <result property="clazz_name" column="clazz_name" jdbcType="VARCHAR"/>
+    <result property="subject_name" column="subject_name" jdbcType="VARCHAR"/>
+    <result property="teacher_name" column="teacher_name" jdbcType="VARCHAR"/>
   </resultMap>
 
-  <select id="selectTeacher" parameterType="long" resultType="com.usoftchina.smartschool.school.po.SysTeacherClazz">
-    select * from sys_teacher_clazz where teacher_clazz_id = #{id}
+  <select id="selectTeacher" parameterType="long" resultMap="teacherMap">
+    select * from sys_teacher_clazz where clazz_id = #{id}
   </select>
 
 

+ 10 - 0
framework/core/src/main/java/com/usoftchina/smartschool/context/SpringContextHolder.java

@@ -54,4 +54,14 @@ public class SpringContextHolder {
         Assert.notNull(context, "spring context not ready");
         return context.getEnvironment().getProperty("spring.application.name");
     }
+
+    /**
+     * 获取微信url
+     *
+     * @return
+     */
+    public static String getDomain() {
+        Assert.notNull(context, "spring context not ready");
+        return context.getEnvironment().getProperty("smartschool.domain.wechat");
+    }
 }

+ 16 - 1
frontend/pc-web/app.json

@@ -307,8 +307,23 @@
      * Settings specific to testing builds.
      */
     "testing": {
+        "output": {
+            "appCache": {
+                "enable": true,
+                "path": "cache.appcache"
+            }
+        },
+        "loader": {
+            "cache": "${build.timestamp}"
+        },
+        "cache": {
+            "enable": true
+        },
+        "compressor": {
+            "type": "yui"
+        },
         "server": {
-            "basePath": "https://saas-test-api.usoftchina.com",
+            "basePath": "https://school-api.ydyhz.com",
             "urlPattern": "^\/api\/"
         }
     },

+ 1 - 6
frontend/pc-web/app/model/Grade.js

@@ -21,10 +21,5 @@ Ext.define('school.model.Grade', {
     }, {
         name: 'school_id', // 所属学校
         type: 'int'
-    }],
-
-    hasMany: {
-        associatedName: 'classList',
-        model: 'school.model.Class'
-    }
+    }]
 });

+ 28 - 0
frontend/pc-web/app/model/basic/Subject.js

@@ -0,0 +1,28 @@
+/**
+ * 学科
+ */
+Ext.define('school.model.basic.Subject', {
+    extend: 'school.model.Base',
+    fields: [{
+        name: 'teacher_clazz_id',
+        type: 'int'
+    }, {
+        name: 'subject_id',
+        type: 'int'
+    }, {
+        name: 'subject_name',
+        type: 'string'
+    }, {
+        name: 'clazz_id',
+        type: 'string'
+    }, {
+        name: 'clazz_name',
+        type: 'date'
+    }, {
+        name: 'teacher_id',
+        type: 'int'
+    }, {
+        name: 'teacher_name',
+        type: 'string'
+    }],
+});

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

@@ -0,0 +1,11 @@
+/**
+ * 学科
+ */
+Ext.define('school.store.Grade', {
+    extend: 'Ext.data.Store',
+    alias: 'store.subject',
+
+    model: 'school.model.Grade',
+
+    data: []
+});

+ 8 - 8
frontend/pc-web/app/view/Interaction/access/List.js

@@ -48,17 +48,17 @@ Ext.define('school.view.interaction.access.List', {
                     text: '类型',
                     dataIndex: 'record_name'
                 }, {
-                    text: '学',
-                    dataIndex: 'stu_id'
+                    text: '学',
+                    dataIndex: 'stu_number'
                 }, {
-                    text: '班级',
-                    dataIndex: 'class'
+                    text: '姓名',
+                    dataIndex: 'stu_name'
                 }, {
-                    text: '学号',
-                    dataIndex: 'StudentID'
+                    text: '年级',
+                    dataIndex: 'grade_name'
                 }, {
-                    text: '状态',
-                    dataIndex: 'state'
+                    text: '班级',
+                    dataIndex: 'clazz_name'
                 }, {
                     text: '时间',
                     dataIndex: 'in_date',

+ 21 - 25
frontend/pc-web/app/view/Interaction/timetable/Detail.js

@@ -7,7 +7,7 @@ Ext.define('school.view.interaction.timetable.Detail', {
     _title: '课程表',
     _idField: 'id',
     _codeField: null,
-    // _readUrl: 'http://10.1.80.35:8560/api/sale/saledown/read',
+    // _readUrl: 'http://10.1.80.36:9520/api/school/curriculum/read',
     _readUrl: '/api/school/curriculum/read',
     // _saveUrl: 'http://10.1.80.36:9520/api/school/curriculum/save',
     _saveUrl: '/api/school/curriculum/save',
@@ -34,44 +34,40 @@ Ext.define('school.view.interaction.timetable.Detail', {
             }, {
                 xtype: 'numberfield',
                 name: 'gradeId',
-                fieldLabel: '年级(id)',
-                allowBlank: false
+                fieldLabel: '年级ID'
+            }, {
+                xtype: 'textfield',
+                name: 'gradeName',
+                fieldLabel: '年级',
             }, {
                 xtype: 'numberfield',
                 name: 'clazzId',
-                fieldLabel: '班级(id)',
-                allowBlank: false
+                fieldLabel: '班级ID'
             }, {
                 xtype: 'textfield',
-                name: 'creatorName',
-                fieldLabel: '录入人'
-            }, {
-                xtype: 'datefield',
-                name: 'createTime',
-                fieldLabel: '录入时间',
-                format: 'Y-m-d H:i:s'
+                name: 'clazzName',
+                fieldLabel: '班级',
             }, {
                 xtype: 'textfield',
-                name: 'status',
-                fieldLabel: '状态'
+                name: 'termPart',
+                fieldLabel: '学年'
             }, {
                 xtype: "textfield",
                 name: "termName",
-                fieldLabel: "学期名称"
+                fieldLabel: "学期"
             }, {
-                xtype: "datefield",
-                name: "termStart",
-                fieldLabel: "学期开始时间",
-                format: 'Y-m-d'
+                xtype: "textfield",
+                name: "creatorName",
+                fieldLabel: "录入人"
             }, {
                 xtype: 'datefield',
-                name: 'termEnd',
-                fieldLabel: '学期结束时间',
-                format: 'Y-m-d'
+                name: 'createTime',
+                fieldLabel: '录入时间',
+                format: 'Y-m-d H:i:s'
             }, {
-                xtype: 'numberfield',
-                name: 'weekNum',
-                fieldLabel: '周数'
+                xtype: 'textfield',
+                name: 'status',
+                fieldLabel: '状态'
             }, {
                 name: "timetable",
                 xtype: "detailGridField",

+ 6 - 9
frontend/pc-web/app/view/Interaction/timetable/List.js

@@ -22,19 +22,16 @@ Ext.define('school.view.interaction.timetable.List', {
                 fieldLabel: '课表名称'
             }, {
                 xtype: 'textfield',
-                name: 'grade_id',
+                name: 'grade_name',
                 fieldLabel: '年级'
             }, {
                 xtype: 'textfield',
-                name: 'clazz_id',
+                name: 'clazz_name',
                 fieldLabel: '班级'
             }, {
-                xtype: 'numberfield',
-                name: 'text',
-                fieldLabel: '学年',
-                getCondition: function(v) {
-                    return '1=1';
-                }
+                xtype: 'textfield',
+                name: 'mcur_term_part',
+                fieldLabel: '学年'
             }, {
                 xtype: 'textfield',
                 name: 'mcur_term_name',
@@ -135,7 +132,7 @@ Ext.define('school.view.interaction.timetable.List', {
                     dataIndex: 'clazzName'
                 }, {
                     text: '学年',
-                    dataIndex: 'xn'
+                    dataIndex: 'termPart'
                 }, {
                     text: '学期',
                     dataIndex: 'termName',

+ 30 - 11
frontend/pc-web/app/view/basic/class/ClassDetail.js

@@ -2,6 +2,7 @@ Ext.define('school.view.basic.class.ClassDetail', {
     extend: 'school.view.core.form.FormPanel',
     xtype: 'classdetail',
 
+    controller: 'classdetail',
     viewModel: 'classdetail',
 
     //字段属性
@@ -9,7 +10,9 @@ Ext.define('school.view.basic.class.ClassDetail', {
     _idField: 'clazz_id',
     _codeField: null,
 
+    // _readUrl: 'http://10.1.80.47:9560/class/read',
     _readUrl: '/api/school/class/read',
+    // _saveUrl: 'http://10.1.80.47:9560/class/save',
     _saveUrl: '/api/school/class/save',
     _deleteUrl: '/api/school/class/delete',
 
@@ -33,7 +36,7 @@ Ext.define('school.view.basic.class.ClassDetail', {
             //     fieldLabel: '班级代码',
             // }, {
                 xtype: 'textfield',
-                name: 'currentDetail.grade',
+                name: 'clazz_grade',
                 fieldLabel: '所属年级',
                 columnWidth: 0.5,
                 group: '班级信息',
@@ -60,9 +63,9 @@ Ext.define('school.view.basic.class.ClassDetail', {
                 xtype: "detailGridField",
                 detnoColumn: 'sd_detno',
                 storeModel: 'school.model.basic.Student',
-                deleteDetailUrl: '/api/sale/sale/deleteDetail',
                 allowEmpty: true,
                 showCount: false,
+                readOnly: true,
                 group: '学生信息',
                 columns: [{
                     text: 'id',
@@ -105,23 +108,39 @@ Ext.define('school.view.basic.class.ClassDetail', {
             }, {
                 name: "detail1",
                 xtype: "detailGridField",
-                idColumn: 'teacher_id',
-                detnoColumn: 'sd_detno',
-                storeModel: 'school.model.basic.Student',
-                deleteDetailUrl: '/api/sale/sale/deleteDetail',
+                idColumn: 'teacher_clazz_id',
+                detnoColumn: 'no',
+                storeModel: 'school.model.basic.Subject',
+                deleteDetailUrl: '/api/school/class/deleteDetail',
                 allowEmpty: true,
                 showCount: false,
-                group: '任课教师信息',
+                group: '学科信息',
                 columns: [{
                     text: 'id',
-                    dataIndex: 'teacher_id',
+                    dataIndex: 'teacher_clazz_id',
                     hidden: true
                 }, {
-                    text: '姓名',
-                    dataIndex: 'teacher'
+                    text: '学科id',
+                    dataIndex: 'subject_id',
+                    editor: {
+                        xtype: 'textfield'
+                    }
                 }, {
                     text: '学科',
-                    dataIndex: 'subject'
+                    dataIndex: 'subject_name',
+                    xtype: 'subjectcolumn'
+                }, {
+                    text: '任课教师id',
+                    dataIndex: 'teacher_id',
+                    editor: {
+                        xtype: 'textfield'
+                    }
+                }, {
+                    text: '任课教师',
+                    dataIndex: 'teacher_name',
+                    editor: {
+                        xtype: 'textfield'
+                    }
                 }]
             }]
         });

+ 40 - 0
frontend/pc-web/app/view/basic/class/ClassDetailController.js

@@ -0,0 +1,40 @@
+Ext.define('school.view.basic.class.ClassDetailController', {
+    extend: 'school.view.core.form.FormPanelController',
+    alias: 'controller.classdetail',
+
+    onAfterSave: function(localJson) {
+        let me = this;
+
+        me.refresh(localJson.data.id);
+    },
+
+    refresh: function(id) {
+        let me = this,
+        view = me.getView();
+
+        school.util.BaseUtil.request({
+            url: view._readUrl + '/' + id
+        }).then(function(res) {
+            view.setLoading(false);
+            if(res.success) {
+                let d = res.data;
+                let o = {
+                    main: d.main
+                };
+                if(d.hasOwnProperty('items')) {
+                    o.detail0 = d.items;
+                }else {
+                    let idx = 1;
+                    while(d.hasOwnProperty('items' + idx)) {
+                        o['detail' + (idx - 1)] = d['items' + idx];
+                        idx++;
+                    }
+                }
+                view.initFormData(o);
+                view.fireEvent('load', classDetail, o);
+            }
+        }).catch(function(e) {
+            school.util.BaseUtil.showErrorToast('请求数据失败: ' + e.message);
+        });
+    }
+});

+ 6 - 1
frontend/pc-web/app/view/basic/class/ClassInfo.js

@@ -110,8 +110,13 @@ Ext.define('school.view.basic.class.ClassInfo', {
                         handler: 'onToggleTree'
                     }, {
                         xtype: 'tbtext',
+                        maxWidth: 200,
+                        style: {
+                            'overflow': 'hidden',
+                            'text-overflow': 'ellipsis'
+                        },
                         bind: {
-                            text: '{currentNodeData.text}'
+                            text: '{currentNodeData.pathText || currentNodeData.text}'
                         }
                     }, {
                         xtype: 'button',

+ 15 - 4
frontend/pc-web/app/view/basic/class/ListCard.js

@@ -56,7 +56,7 @@ Ext.define('school.view.basic.class.ListCard', {
             classDetail.setVisible(true);
             classDetail.setLoading(true);
             school.util.BaseUtil.request({
-                url: '/api/school/class/read/' + node.data._id
+                url: classDetail._readUrl + '/' + node.data._id
             }).then(function(res) {
                 classDetail.setLoading(false);
                 if(res.success) {
@@ -84,9 +84,20 @@ Ext.define('school.view.basic.class.ListCard', {
             listCard.setVisible(true);
             classDetail.setVisible(false);
 
-            list = node.childNodes.map(function(c) {
-                return c.data
-            });
+            if(node.data.type == 'GRADE') {
+                list = node.childNodes.map(function(c) {
+                    return Ext.Object.merge(c.data, {
+                        pathText: node.data.text + c.data.text
+                    })
+                });
+            }else {
+                node.data.pathText = node.data.text;
+                list = node.childNodes.map(function(c) {
+                    return Ext.Object.merge(c.data, {
+                        pathText: c.data.text
+                    })
+                });
+            }
 
             cardList = Ext.Array.merge(list, [{
                 addBtn: true,

+ 8 - 4
frontend/pc-web/app/view/basic/school/SchoolInfo.js

@@ -51,20 +51,23 @@ Ext.define('school.view.basic.school.SchoolInfo', {
                 bind: '{schoolName}',
                 fieldLabel: "学校名称",
                 allowBlank: false,
-                columnWidth: 1
+                columnWidth: 1,
+                maxLength: 100
             }, {
                 xtype: "textfield",
                 name: 'school_phone',
                 bind: '{schoolPhone}',
                 fieldLabel: '联系电话',
-                columnWidth: 1
+                columnWidth: 1,
+                maxLength: 50
             }, {
                 xtype: "textfield",
                 name: "school_address",
                 bind: '{schoolAddress}',
                 fieldLabel: "学校地址",
                 allowBlank: true,
-                columnWidth: 1
+                columnWidth: 1,
+                maxLength: 200
             }, {
                 xtype: 'combobox',
                 name: 'school_status',
@@ -104,7 +107,8 @@ Ext.define('school.view.basic.school.SchoolInfo', {
                 name: 'school_remarks',
                 bind: '{schoolRemarks}',
                 fieldLabel: '备注',
-                columnWidth: 1
+                columnWidth: 1,
+                maxLength: 250
             }]
         });
         this.callParent();

+ 147 - 0
frontend/pc-web/app/view/basic/subject/List.js

@@ -0,0 +1,147 @@
+/**
+ * 学科信息
+ */
+Ext.define('school.view.basic.subject.List', {
+    extend: 'school.view.core.base.BasePanel',
+    xtype: 'basic-subject-list',
+
+    // dataUrl: 'http://10.1.80.47:9560/subject/list',
+    dataUrl: '/api/school/subject/list',
+    _title: '学科信息',
+    caller: 'Subject',
+    pathKey: 'subject',
+    
+    controller: 'basic-subject-list',
+    viewModel: 'basic-subject-list',
+
+    initComponent: function() {
+        var me = this;
+        Ext.apply(this, {
+            searchField: [{
+                xtype: 'textfield',
+                name: 'subject_name',
+                fieldLabel: '名称'
+            }],
+        
+            gridConfig: {
+                addTitle: '学科信息',
+                addXtype: 'basic-subject-detail',
+                idField: 'subject_id',
+                codeField: null,
+                detailField: null,
+                dataUrl: me.dataUrl,
+                caller: null,
+                rootProperty: 'data.list',
+                totalProperty: 'data.total',
+                actionColumn: [],
+                selModel: {
+                    type: 'cellmodel'
+                },
+                hiddenTools: false,
+                toolBtns: [{
+                    xtype: 'button',
+                    text: '新增',
+                    handler: 'onAddClick'
+                }],
+                columns : [{
+                    text: 'id',
+                    dataIndex: 'subject_id',
+                    hidden: true
+                }, {
+                    text: '名称',
+                    dataIndex: 'subject_name',
+                    width: 150
+                }, {
+                    xtype:'actioncolumn',
+                    width:70,
+                    dataIndex:'actioncolumn',
+                    text:'操作',
+                    align: 'center',
+                    items: [{
+                        tooltip: '编辑',
+                        iconCls: 'x-fa fa-pencil fa-fw',
+                        scope:this,
+                        listeners: {
+                            click: function() {
+                                debugger;
+                            }
+                        }
+                    },{
+                        text:'删除',
+                        iconCls:'x-fa fa-trash-o fa-fw',
+                        tooltip: '删除',
+                        scope:this
+                    }],
+                    listeners: {
+                        click: 'onActionClick'
+                    }
+                }]
+            },
+        });
+        this.callParent(arguments);
+    },
+
+    /**
+     * 处理部分字段值
+     */
+    getConditionValue: function (field, value) {
+        var me = this,
+            xtypes = field.getXTypes().split('/'),
+            conditionValue;
+        if (me.isContainsAny(xtypes, ['datefield'])) {
+            conditionValue = Ext.Date.format(new Date(from), 'Y-m-d H:i:s');
+        } else if (me.isContainsAny(xtypes, ['conmonthfield'])) {
+            var from = value.from,
+                to = value.to;
+
+            conditionValue = from + ',' + to;
+        } else if (me.isContainsAny(xtypes, ['condatefield'])) {
+            var from = value.from,
+                to = value.to;
+
+            conditionValue = Ext.Date.format(new Date(from), 'Y-m-d 00:00:00') + ',' + Ext.Date.format(new Date(to), 'Y-m-d 23:59:59');
+        } else if (me.isContainsAny(xtypes, ['dbfindtrigger'])) {
+            conditionValue = value;
+        } else if (me.isContainsAny(xtypes, ['combobox', 'combo'])) {
+            conditionValue = value;
+        } else if (me.isContainsAny(xtypes, ['multicombo'])) {
+            conditionValue = value.map ? value.map(function (v) {
+                return v.value;
+            }).join(',') : '';
+        } else {
+            conditionValue = value;
+        }
+
+        return conditionValue;
+    },
+
+    getExtraParams: function(store, op, condition) {
+        var temp = {};
+
+        for(let x = 0; x < condition.length; x++) {
+            let c = condition[x];
+            if(c.field == 'keyword') {
+                temp.keyword = c.value;
+            }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') {
+                temp.quoted = c.value == 'all' ? null : c.value;
+            }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
+        };
+        for(let k in temp) {
+            if(!!temp[k]) {
+                obj[k] = temp[k];
+            }
+        }
+        return obj;
+     },
+});

+ 185 - 0
frontend/pc-web/app/view/basic/subject/ListController.js

@@ -0,0 +1,185 @@
+Ext.define('school.view.basic.subject.ListController', {
+    extend: 'school.view.core.base.BasePanelController',
+    alias: 'controller.basic-subject-list',
+
+    onAddClick: function () {
+        let me = this,
+        view = me.getView(),
+        win = Ext.getCmp('subject-addwin');
+
+        if (!win) {
+            win = Ext.create('Ext.window.Window', {
+                title: '新增学科信息',
+                width: 300,
+                height: 180,
+                id: 'subject-addwin',
+                constrain: true,
+                modal: true,
+                bodyPadding: 10,
+                layout: 'fit',
+                items: [{
+                    xtype: 'form',
+                    layout: 'column',
+                    defaults: {
+                        columnWidth: 1
+                    },
+                    items: [{
+                        xtype: 'textfield',
+                        name: 'text',
+                        emptyText: '学科名称',
+                        allowBlank: false,
+                        maxLength: 20
+                    }],
+                    buttonAlign: 'center',
+                    buttons: [{
+                        text: '确定',
+                        formBind: true,
+                        handler: function () {
+                            let form = this.up('form');
+                            let text = form.getValues().text;
+                            let url, params, headers;
+                            
+                            params = JSON.stringify({
+                                subject_name: text
+                            });
+
+                            view.setLoading(true);
+                            school.util.BaseUtil.request({
+                                url: '/api/school/subject/save',
+                                method: 'POST',
+                                params: params,
+                                headers: headers
+                            }).then(function (res) {
+                                view.setLoading(false);
+                                win.close();
+                                school.util.BaseUtil.showSuccessToast('添加成功');
+                                view.refresh();
+                            }).catch(function (e) {
+                                view.setLoading(false);
+                                school.util.BaseUtil.showErrorToast('添加失败: ' + e.message);
+                            });
+                        }
+                    }]
+                }]
+            });
+            view.add(win);
+        }
+        win.show();
+    },
+
+    onActionClick: function(tableView, td, row, col, e, record, tr) {
+        let me = this;
+        let targetCls = event.target.classList;
+        if(targetCls.contains('fa-pencil')) {
+            me.modifyClick(record.data);
+        }else if(targetCls.contains('fa-trash-o')) {
+            me.onDeleteClick(record.data.subject_id);
+        }
+    },
+
+    modifyClick: function (data) {
+        let me = this,
+        view = me.getView(),
+        win = Ext.getCmp('subject-modifywin');
+
+        if (!win) {
+            win = Ext.create('Ext.window.Window', {
+                title: '修改学科信息',
+                width: 300,
+                height: 180,
+                id: 'subject-modifywin',
+                constrain: true,
+                modal: true,
+                bodyPadding: 10,
+                layout: 'fit',
+                items: [{
+                    xtype: 'form',
+                    layout: 'column',
+                    defaults: {
+                        columnWidth: 1
+                    },
+                    items: [{
+                        xtype: 'textfield',
+                        name: 'text',
+                        emptyText: '学科名称',
+                        allowBlank: false,
+                        maxLength: 20
+                    }],
+                    buttonAlign: 'center',
+                    buttons: [{
+                        text: '确定',
+                        formBind: true,
+                        handler: function () {
+                            let form = this.up('form');
+                            let text = form.getValues().text;
+                            let url, params, headers;
+                            
+                            params = JSON.stringify({
+                                subject_id: data.subject_id,
+                                subject_name: text
+                            });
+
+                            view.setLoading(true);
+                            school.util.BaseUtil.request({
+                                url: '/api/school/subject/save',
+                                method: 'POST',
+                                params: params,
+                                headers: headers
+                            }).then(function (res) {
+                                view.setLoading(false);
+                                win.close();
+                                school.util.BaseUtil.showSuccessToast('修改成功');
+                                view.refresh();
+                            }).catch(function (e) {
+                                view.setLoading(false);
+                                school.util.BaseUtil.showErrorToast('修改失败: ' + e.message);
+                            });
+                        }
+                    }]
+                }]
+            });
+            view.add(win);
+            win.down('form').getForm().findField('text').setValue(data.subject_name);
+        }
+        win.show();
+    },
+
+    onDeleteClick: function(id) {
+        let me = this,
+        view = me.getView(),
+        grid = view.down('grid'),
+        selectedRecords = grid.getSelection(),
+        data;
+
+        data = id ? [{
+            id: id
+        }] : selectedRecords.map(function(r) {
+            return {
+                id: r.get('subject_id')
+            };
+        });
+
+        if(data.length == 0) {
+            school.util.BaseUtil.showErrorToast('请先勾选需要删除的记录');
+            return;
+        }
+
+        grid.setLoading(true);
+        school.util.BaseUtil.request({
+            // url: 'http://10.1.80.47:9560/student/batchDelete',
+            url: '/api/school/subject/batchDelete',
+            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);
+        });
+    }
+
+});

+ 4 - 0
frontend/pc-web/app/view/basic/subject/ListViewModel.js

@@ -0,0 +1,4 @@
+Ext.define('school.view.basic.subject.ListViewModel', {
+    extend: 'Ext.app.ViewModel',
+    alias: 'viewmodel.basic-subject-list',
+});

+ 21 - 5
frontend/pc-web/app/view/viewport/ViewportModel.js

@@ -39,19 +39,19 @@ Ext.define('school.view.viewport.ViewportModel', {
                 reader: {
                     transform: {
                         fn: function(data) {
-                            let schools = data.data.children;
-                            schools.map(function(s) {
+                            let grades = data.data.children;
+                            grades.map(function(s) {
                                 s._id = s.id;
-                                s.id = 'school-' + s.id;
+                                s.id = 'grade-' + s.id;
                                 let classes = s.children;
-                                classes.map(function(c) {
+                                let d = classes.map(function(c) {
                                     c._id = c.id;
                                     c.id = 'class-' + c.id;
                                     return c;
                                 });
                                 return s;
                             });
-                            return schools;
+                            return grades;
                         },
                         scope: this
                     }
@@ -62,6 +62,22 @@ Ext.define('school.view.viewport.ViewportModel', {
                 type: 'SCHOOL',
                 expanded: true
             },
+            listeners: {
+                load: function(store, records) {
+                    let stores = school.store;
+                    let mainModel = Ext.getCmp('mainView').getViewModel();
+                    let gradeStore = Ext.create('school.store.Grade', {
+                        data: records.map(function(r) {
+                            let d = r.data;
+                            return {
+                                grade_id: d._id,
+                                grade_name: d.text,
+                            }
+                        })
+                    });
+                    mainModel.set('grade_store', gradeStore);
+                }
+            }
         }
     }
 });

+ 2 - 1
frontend/pc-web/package.json

@@ -6,7 +6,8 @@
   "scripts": {
     "test": "echo \"Error: no test specified\" && exit 1",
     "dev": "sencha app watch",
-    "build": "sencha app build --production"
+    "build": "sencha app build --production",
+    "cloud": "sencha app build --testing"
   },
   "keywords": [
     "saas"

二進制
frontend/pc-web/resources/images/auth-background.jpg


+ 19 - 15
frontend/pc-web/resources/json/navigation.json

@@ -17,22 +17,10 @@
         "id": "basic-student-studentlist",
         "text": "学生信息",
         "view": "basic-student-studentlist"
-    }]
-}, {
-    "text": "系统设置",
-    "iconCls": "x-ss ss-nav-setting",
-    "items": [{
-        "id": "setting-access-roleaccess",
-        "text": "角色授权",
-        "view": "setting-access-roleaccess"
     }, {
-        "id": "device-param",
-        "text": "设备参数",
-        "view": "device-param"
-    }, {
-        "id": "setting-operatelog-operatelog",
-        "text": "操作日志",
-        "view": "setting-operatelog-operatelog"
+        "id": "basic-subject-list",
+        "text": "学科信息",
+        "view": "basic-subject-list"
     }]
 }, {
     "text": "家校互动",
@@ -62,4 +50,20 @@
         "text": "出入校记录",
         "view": "interaction-access-list"
     }]
+}, {
+    "text": "系统设置",
+    "iconCls": "x-ss ss-nav-setting",
+    "items": [{
+        "id": "setting-access-roleaccess",
+        "text": "角色授权",
+        "view": "setting-access-roleaccess"
+    }, {
+        "id": "device-param",
+        "text": "设备参数",
+        "view": "device-param"
+    }, {
+        "id": "setting-operatelog-operatelog",
+        "text": "操作日志",
+        "view": "setting-operatelog-operatelog"
+    }]
 }]

+ 1 - 0
frontend/wechat-web/MP_verify_P40tTKo1dAMQh4CJ.txt

@@ -0,0 +1 @@
+P40tTKo1dAMQh4CJ