Explorar el Código

Merge branch 'master' of ssh://10.10.100.21/source/smartschool-platform

koul hace 7 años
padre
commit
374af3cf03
Se han modificado 34 ficheros con 252 adiciones y 285 borrados
  1. 5 0
      applications/school/school-server/pom.xml
  2. 12 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/StudentServiceImpl.java
  3. 19 2
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/TeacherServiceImpl.java
  4. 6 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/SysStudentMapper.java
  5. 6 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/SysTeacherMapper.java
  6. 4 0
      applications/school/school-server/src/main/resources/mapper/SysStudentMapper.xml
  7. 3 0
      applications/school/school-server/src/main/resources/mapper/SysTeacherMapper.xml
  8. 6 0
      base-servers/account/account-api/src/main/java/com/usoftchina/smartschool/account/api/AccountApi.java
  9. 11 1
      base-servers/auth/auth-server/src/main/java/com/usoftchina/smartschool/auth/controller/AuthController.java
  10. 6 0
      frontend/pc-web/app/model/Class.js
  11. 11 2
      frontend/pc-web/app/store/Class.js
  12. 10 2
      frontend/pc-web/app/store/Grade.js
  13. 3 52
      frontend/pc-web/app/store/Subject.js
  14. 8 2
      frontend/pc-web/app/view/Interaction/access/List.js
  15. 8 2
      frontend/pc-web/app/view/Interaction/homework/List.js
  16. 7 3
      frontend/pc-web/app/view/Interaction/homework/Release.js
  17. 8 2
      frontend/pc-web/app/view/Interaction/mailbox/List.js
  18. 5 0
      frontend/pc-web/app/view/Interaction/score/Detail.js
  19. 10 4
      frontend/pc-web/app/view/Interaction/score/List.js
  20. 5 3
      frontend/pc-web/app/view/Interaction/timetable/Detail.js
  21. 7 65
      frontend/pc-web/app/view/Interaction/timetable/List.js
  22. 4 1
      frontend/pc-web/app/view/basic/class/ClassDetailController.js
  23. 1 1
      frontend/pc-web/app/view/basic/class/ClassInfo.js
  24. 4 1
      frontend/pc-web/app/view/basic/class/ClassInfoController.js
  25. 1 1
      frontend/pc-web/app/view/basic/staff/StaffDetail.js
  26. 14 1
      frontend/pc-web/app/view/basic/staff/StaffDetailController.js
  27. 11 7
      frontend/pc-web/app/view/basic/student/StudentDetail.js
  28. 40 0
      frontend/pc-web/app/view/basic/student/StudentDetailModel.js
  29. 8 4
      frontend/pc-web/app/view/basic/student/StudentList.js
  30. 4 62
      frontend/pc-web/app/view/basic/subject/List.js
  31. 0 38
      frontend/pc-web/app/view/core/List.js
  32. 2 2
      frontend/pc-web/app/view/core/form/field/ClassComboBox.js
  33. 2 2
      frontend/pc-web/app/view/core/form/field/GradeComboBox.js
  34. 1 24
      frontend/pc-web/app/view/viewport/ViewportModel.js

+ 5 - 0
applications/school/school-server/pom.xml

@@ -118,6 +118,11 @@
         <artifactId>auth-dto</artifactId>
         <version>1.0.0-SNAPSHOT</version>
       </dependency>
+      <dependency>
+        <groupId>com.usoftchina.smartschool</groupId>
+        <artifactId>account-api</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+      </dependency>
     </dependencies>
 
     <build>

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

@@ -3,6 +3,8 @@ package com.usoftchina.smartschool.school.basic.service.impl;
 import com.alibaba.fastjson.JSONObject;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.usoftchina.smartschool.account.api.AccountApi;
+import com.usoftchina.smartschool.account.dto.AccountRegDTO;
 import com.usoftchina.smartschool.context.BaseContextHolder;
 import com.usoftchina.smartschool.exception.BizException;
 import com.usoftchina.smartschool.page.PageRequest;
@@ -34,9 +36,10 @@ public class StudentServiceImpl implements StudentService{
 
     @Autowired
     private SysStudentMapper sysStudentMapper;
-
     @Autowired
     private DataImportMapper dataImportMapper;
+    @Autowired
+    private AccountApi accountApi;
 
     @Override
     public PageInfo<SysStudent> getListData(PageRequest page, ListReqDTO listReqDTO) {
@@ -114,6 +117,14 @@ public class StudentServiceImpl implements StudentService{
                 sysStudentMapper.insertparent(item);
                 pr_id = item.getParent_id();
                 sysStudentMapper.insertrelation(id, pr_id, item.getPs_relation());
+                //自动创建家长账户
+                if (!StringUtils.isEmpty(item.getPa_phone())) {
+                    AccountRegDTO accountRegDTO = new AccountRegDTO();
+                    accountRegDTO.setUser_phone(item.getPa_phone());
+                    accountRegDTO.setUser_pass("111111");
+                    accountRegDTO.setRoleId(sysStudentMapper.selectRoleId());
+                    accountApi.register(accountRegDTO);
+                }
             }
         }
         //更新从表

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

@@ -3,6 +3,8 @@ package com.usoftchina.smartschool.school.basic.service.impl;
 import com.alibaba.fastjson.JSONObject;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.usoftchina.smartschool.account.api.AccountApi;
+import com.usoftchina.smartschool.account.dto.AccountRegDTO;
 import com.usoftchina.smartschool.context.BaseContextHolder;
 import com.usoftchina.smartschool.exception.BizException;
 import com.usoftchina.smartschool.page.PageRequest;
@@ -33,9 +35,10 @@ public class TeacherServiceImpl implements TeacherService{
 
     @Autowired
     private SysTeacherMapper sysTeacherMapper;
-
     @Autowired
     private DataImportMapper dataImportMapper;
+    @Autowired
+    private AccountApi accountApi;
 
     @Override
     public PageInfo<SysTeacher> getListData(PageRequest page, ListReqDTO listReqDTO) {
@@ -75,7 +78,9 @@ public class TeacherServiceImpl implements TeacherService{
         //新增教师
         if (StringUtils.isEmpty(formdata.getTeacher_id()) || "0".equals(formdata.getTeacher_id().toString())) {
             sysTeacherMapper.insertSelective(formdata);
-
+            if (!StringUtils.isEmpty(formdata.getTeacher_phone())) {
+                createAccount(formdata);
+            }
         } else {
             //更新教师
             sysTeacherMapper.updateByPrimaryKeySelective(formdata);
@@ -83,6 +88,18 @@ public class TeacherServiceImpl implements TeacherService{
         return new DocBaseDTO(formdata.getTeacher_id(), null, null);
     }
 
+    /**
+     * 新建账户信息
+     */
+    private void createAccount(SysTeacher sysTeacher) {
+        AccountRegDTO accountRegDTO = new AccountRegDTO();
+        accountRegDTO.setUser_phone(sysTeacher.getTeacher_phone());
+        accountRegDTO.setUser_pass("111111");
+        Long roleId = sysTeacherMapper.selectRoleId();
+        accountRegDTO.setRoleId(roleId);
+        accountApi.register(accountRegDTO);
+    }
+
     @Override
     @Transactional
     public void saveToFormal(Integer id, boolean update) {

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

@@ -46,4 +46,10 @@ public interface SysStudentMapper {
     void deleteRelationById(Long id);
 
     void deleteTeacher(Long id);
+
+    /**
+     * 查询家长角色
+     * @return
+     */
+    Long selectRoleId();
 }

+ 6 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/SysTeacherMapper.java

@@ -32,4 +32,10 @@ public interface SysTeacherMapper {
     void deleteRelation(Long id);
 
     List<SysTeacher> selectByTeacher(@Param("condition") String condition, @Param("school_id") Long schoolId);
+
+    /**
+     * 查询角色为"教师"的roleId
+     * @return
+     */
+    Long selectRoleId();
 }

+ 4 - 0
applications/school/school-server/src/main/resources/mapper/SysStudentMapper.xml

@@ -436,4 +436,8 @@
     delete from sys_teacher_clazz
     where teacher_clazz_id = #{teacher_clazz_id,jdbcType=BIGINT}
   </delete>
+
+  <select id="selectRoleId" resultType="long">
+    SELECT ROLE_ID FROM SYS_ROLE WHERE ROLE_NAME = '家长'
+  </select>
 </mapper>

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

@@ -372,4 +372,7 @@ where sys_teacher_clazz.teacher_id=#{id}
       </if>
     </where>
   </select>
+  <select id="selectRoleId" resultType="long">
+    SELECT ROLE_ID FROM SYS_ROLE WHERE ROLE_NAME = '教师'
+  </select>
 </mapper>

+ 6 - 0
base-servers/account/account-api/src/main/java/com/usoftchina/smartschool/account/api/AccountApi.java

@@ -1,9 +1,11 @@
 package com.usoftchina.smartschool.account.api;
 
 import com.usoftchina.smartschool.account.dto.AccountDTO;
+import com.usoftchina.smartschool.account.dto.AccountRegDTO;
 import com.usoftchina.smartschool.base.Result;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 
 /**
@@ -21,4 +23,8 @@ public interface AccountApi {
 
     @GetMapping("/account/getUsername")
     Result<String> getUsername(@RequestParam(value = "schoolId") Long schoolId, @RequestParam(value = "userId") Long userId);
+
+    @GetMapping("/account/register")
+    Result<String> register(@RequestBody AccountRegDTO accountRegDTO);
+
 }

+ 11 - 1
base-servers/auth/auth-server/src/main/java/com/usoftchina/smartschool/auth/controller/AuthController.java

@@ -8,6 +8,8 @@ import com.usoftchina.smartschool.auth.jwt.JwtHelper;
 import com.usoftchina.smartschool.auth.jwt.JwtInfo;
 import com.usoftchina.smartschool.auth.jwt.JwtToken;
 import com.usoftchina.smartschool.base.Result;
+import com.usoftchina.smartschool.exception.BizException;
+import com.usoftchina.smartschool.exception.ExceptionCode;
 import com.usoftchina.smartschool.utils.BeanMapper;
 import com.usoftchina.smartschool.utils.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -48,7 +50,15 @@ public class AuthController {
         Result<AccountDTO> result = accountApi.checkPwd(username, password);
         if (result.isSuccess()){
             AccountDTO accountDTO = result.getData();
-            Long school_id = accountDTO.getRoleMaps().stream().filter(roleDTO -> "教师".equals(roleDTO.getRole_name())).findFirst().get().getSchool_id();
+            Long school_id = -1L;
+            try {
+                school_id = accountDTO.getRoleMaps().stream().filter(roleDTO -> "教师".equals(roleDTO.getRole_name())).findFirst().get().getSchool_id();
+                if (school_id == -1){
+                    throw new BizException(ExceptionCode.USER_NOT_EXIST);
+                }
+            }catch (Exception e){
+                throw new BizException(ExceptionCode.USER_NOT_EXIST);
+            }
             accountDTO.setSchool_id(school_id);
             String realName = accountApi.getUsername(school_id, accountDTO.getId()).getData();
             accountDTO.setUsername(realName);

+ 6 - 0
frontend/pc-web/app/model/Class.js

@@ -9,6 +9,9 @@ Ext.define('school.model.Class', {
     }, {
         name: 'clazz_name', // 名称
         type: 'string'
+    }, {
+        name: 'clazz_nickname',
+        type: 'string'
     }, {
         name: 'clazz_status', // 状态
         type: 'int'
@@ -21,5 +24,8 @@ Ext.define('school.model.Class', {
     }, {
         name: 'grade_id', // 所属年级
         type: 'int'
+    }, {
+        name: 'clazz_grade', // 所属年级
+        type: 'string'
     }],
 });

+ 11 - 2
frontend/pc-web/app/store/Class.js

@@ -7,6 +7,15 @@ Ext.define('school.store.Class', {
 
     storeId: 'store_class',
 
-    fields: ['name', 'value'],
-    data: []
+    model: 'school.model.Grade',
+
+    autoLoad: true,
+    proxy: {
+        type: 'ajax',
+        url: '/api/school/mirror/findClazz',
+        reader: {
+            type: 'json',
+            rootProperty: 'data.list'
+        }
+    },
 });

+ 10 - 2
frontend/pc-web/app/store/Grade.js

@@ -7,7 +7,15 @@ Ext.define('school.store.Grade', {
 
     storeId: 'store_grade',
 
-    fields: ['name', 'value'],
+    model: 'school.model.Grade',
 
-    data: []
+    autoLoad: true,
+    proxy: {
+        type: 'ajax',
+        url: '/api/school/mirror/findGrade',
+        reader: {
+            type: 'json',
+            rootProperty: 'data.list'
+        }
+    },
 });

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

@@ -7,62 +7,13 @@ Ext.define('school.store.Subject', {
     storeId: 'store_subject',
 
     model: 'school.model.Subject',
-    autoLoad: false,
+    autoLoad: true,
     proxy: {
         type: 'ajax',
-        url: '/api/school/subject/list',
+        url: '/api/school/mirror/findSubject',
         reader: {
             type: 'json',
             rootProperty: 'data.list'
         }
-    },
-    // fields: ['subject_id', 'subject_name'],
-    // data: []
-
-    // data: [{
-    //     code: '1',
-    //     name: '语文'
-    // }, {
-    //     code: '2',
-    //     name: '数学'
-    // }, {
-    //     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: '思想品德'
-    // }]
+    }
 });

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

@@ -35,7 +35,7 @@ Ext.define('school.view.interaction.access.List', {
                         var gradeName = gradeCombo.getValue();
 
                         var filter = new Ext.util.Filter({
-                            property: 'gradeName',
+                            property: 'clazz_grade',
                             value: gradeName
                         });
 
@@ -44,7 +44,7 @@ Ext.define('school.view.interaction.access.List', {
                         }
                     },
                     select: function (combo, record, eOpts) {
-                        combo.up('form').getForm().findField('grade_name').setValue(record.get('gradeName'));
+                        combo.up('form').getForm().findField('grade_name').setValue(record.get('clazz_grade'));
                     }
                 }
             }],
@@ -108,5 +108,11 @@ Ext.define('school.view.interaction.access.List', {
             },
         });
         this.callParent(arguments);
+    },
+
+    refresh: function() {
+        Ext.StoreMgr.get('store_grade').load();
+        Ext.StoreMgr.get('store_class').load();
+        this.items.items[0].store.load();
     }
 });

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

@@ -40,7 +40,7 @@ Ext.define('school.view.interaction.homework.List', {
                         var gradeName = gradeCombo.getValue();
 
                         var filter = new Ext.util.Filter({
-                            property: 'gradeName',
+                            property: 'clazz_grade',
                             value: gradeName
                         });
 
@@ -49,7 +49,7 @@ Ext.define('school.view.interaction.homework.List', {
                         }
                     },
                     select: function (combo, record, eOpts) {
-                        combo.up('form').getForm().findField('grade_name').setValue(record.get('gradeName'));
+                        combo.up('form').getForm().findField('grade_name').setValue(record.get('clazz_grade'));
                     }
                 }
             }, {
@@ -185,5 +185,11 @@ Ext.define('school.view.interaction.homework.List', {
             },
         });
         this.callParent(arguments);
+    },
+
+    refresh: function() {
+        Ext.StoreMgr.get('store_grade').load();
+        Ext.StoreMgr.get('store_class').load();
+        this.items.items[0].store.load();
     }
 });

+ 7 - 3
frontend/pc-web/app/view/Interaction/homework/Release.js

@@ -58,7 +58,7 @@ Ext.define('school.view.interaction.homework.Release', {
                         var gradeName = gradeCombo.getValue();
 
                         var filter = new Ext.util.Filter({
-                            property: 'gradeName',
+                            property: 'clazz_grade',
                             value: gradeName
                         });
 
@@ -67,7 +67,7 @@ Ext.define('school.view.interaction.homework.Release', {
                         }
                     },
                     select: function (combo, record, eOpts) {
-                        combo.up('form').getForm().findField('grade_name').setValue(record.get('gradeName'));
+                        combo.up('form').getForm().findField('grade_name').setValue(record.get('clazz_grade'));
                     }
                 },
                 allowBlank: false
@@ -102,7 +102,6 @@ Ext.define('school.view.interaction.homework.Release', {
                 fieldLabel: '发布时间',
                 readOnly: true,
                 format: 'Y-m-d H:i:s',
-                defaultValue: new Date(),
                 readOnly: true
             }, {
                 xtype: "textfield",
@@ -148,5 +147,10 @@ Ext.define('school.view.interaction.homework.Release', {
             fileField.value = data.main.accessory
             fileField.renderMF(fileField);
         }
+    },
+
+    refresh: function() {
+        Ext.StoreMgr.get('store_grade').load();
+        Ext.StoreMgr.get('store_class').load();
     }
 });

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

@@ -40,7 +40,7 @@ Ext.define('school.view.interaction.mailbox.List', {
                         var gradeName = gradeCombo.getValue();
 
                         var filter = new Ext.util.Filter({
-                            property: 'gradeName',
+                            property: 'clazz_grade',
                             value: gradeName
                         });
 
@@ -49,7 +49,7 @@ Ext.define('school.view.interaction.mailbox.List', {
                         }
                     },
                     select: function (combo, record, eOpts) {
-                        combo.up('form').getForm().findField('mb_grade').setValue(record.get('gradeName'));
+                        combo.up('form').getForm().findField('mb_grade').setValue(record.get('clazz_grade'));
                     }
                 }
             }, {
@@ -180,5 +180,11 @@ Ext.define('school.view.interaction.mailbox.List', {
             },
         });
         this.callParent(arguments);
+    },
+
+    refresh: function() {
+        Ext.StoreMgr.get('store_grade').load();
+        Ext.StoreMgr.get('store_class').load();
+        this.items.items[0].store.load();
     }
 });

+ 5 - 0
frontend/pc-web/app/view/Interaction/score/Detail.js

@@ -74,5 +74,10 @@ Ext.define('school.view.interaction.score.Detail', {
         });
         this.callParent();
         this.setEditable(false);
+    },
+
+    refresh: function() {
+        Ext.StoreMgr.get('store_grade').load();
+        Ext.StoreMgr.get('store_class').load();
     }
 });

+ 10 - 4
frontend/pc-web/app/view/Interaction/score/List.js

@@ -21,7 +21,7 @@ Ext.define('school.view.interaction.score.List', {
                 fieldLabel: '年级',
                 listeners: {
                     select: function (combo, record, eOpts) {
-                        combo.up('form').getForm().findField('class').setValue(null);
+                        combo.up('form').getForm().findField('si_class').setValue(null);
                     }
                 }
             }, {
@@ -32,11 +32,11 @@ Ext.define('school.view.interaction.score.List', {
                     expand: function (combo, eOpts) {
                         combo.store.clearFilter();
 
-                        var gradeCombo = combo.up('form').getForm().findField('grade');
+                        var gradeCombo = combo.up('form').getForm().findField('si_grade');
                         var gradeName = gradeCombo.getValue();
 
                         var filter = new Ext.util.Filter({
-                            property: 'gradeName',
+                            property: 'clazz_grade',
                             value: gradeName
                         });
 
@@ -45,7 +45,7 @@ Ext.define('school.view.interaction.score.List', {
                         }
                     },
                     select: function (combo, record, eOpts) {
-                        combo.up('form').getForm().findField('grade').setValue(record.get('gradeName'));
+                        combo.up('form').getForm().findField('si_grade').setValue(record.get('clazz_grade'));
                     }
                 }
             }, {
@@ -202,5 +202,11 @@ Ext.define('school.view.interaction.score.List', {
             }
         }
         return obj;
+    },
+
+    refresh: function() {
+        Ext.StoreMgr.get('store_grade').load();
+        Ext.StoreMgr.get('store_class').load();
+        this.items.items[0].store.load();
     }
 });

+ 5 - 3
frontend/pc-web/app/view/Interaction/timetable/Detail.js

@@ -66,7 +66,7 @@ Ext.define('school.view.interaction.timetable.Detail', {
                         var gradeName = gradeCombo.getValue();
 
                         var filter = new Ext.util.Filter({
-                            property: 'gradeName',
+                            property: 'clazz_grade',
                             value: gradeName
                         });
 
@@ -75,8 +75,8 @@ Ext.define('school.view.interaction.timetable.Detail', {
                         }
                     },
                     select: function (combo, record, eOpts) {
-                        combo.up('form').getForm().findField('clazzId').setValue(record.get('value'));
-                        combo.up('form').getForm().findField('gradeName').setValue(record.get('gradeName'));
+                        combo.up('form').getForm().findField('clazzId').setValue(record.get('clazz_id'));
+                        combo.up('form').getForm().findField('gradeName').setValue(record.get('clazz_grade'));
                     }
                 }
             }, {
@@ -267,6 +267,8 @@ Ext.define('school.view.interaction.timetable.Detail', {
     },
 
     refresh: function() {
+        Ext.StoreMgr.get('store_grade').load();
+        Ext.StoreMgr.get('store_class').load();
         Ext.StoreMgr.get('store_subject').load();
     }
 });

+ 7 - 65
frontend/pc-web/app/view/Interaction/timetable/List.js

@@ -41,7 +41,7 @@ Ext.define('school.view.interaction.timetable.List', {
                         var gradeName = gradeCombo.getValue();
 
                         var filter = new Ext.util.Filter({
-                            property: 'gradeName',
+                            property: 'clazz_grade',
                             value: gradeName
                         });
 
@@ -50,7 +50,7 @@ Ext.define('school.view.interaction.timetable.List', {
                         }
                     },
                     select: function (combo, record, eOpts) {
-                        combo.up('form').getForm().findField('grade_name').setValue(record.get('gradeName'));
+                        combo.up('form').getForm().findField('grade_name').setValue(record.get('clazz_grade'));
                     }
                 }
             }, {
@@ -168,67 +168,9 @@ Ext.define('school.view.interaction.timetable.List', {
         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;
-     },
+    refresh: function() {
+        Ext.StoreMgr.get('store_grade').load();
+        Ext.StoreMgr.get('store_class').load();
+        this.items.items[0].store.load();
+    }
 });

+ 4 - 1
frontend/pc-web/app/view/basic/class/ClassDetailController.js

@@ -6,12 +6,14 @@ Ext.define('school.view.basic.class.ClassDetailController', {
         let me = this;
 
         me.refresh(localJson.data.id);
+        Ext.StoreMgr.get('store_class').load();
     },
 
     refresh: function(id) {
         let me = this,
         view = me.getView();
 
+        view.setLoading(true);
         school.util.BaseUtil.request({
             url: view._readUrl + '/' + id
         }).then(function(res) {
@@ -31,9 +33,10 @@ Ext.define('school.view.basic.class.ClassDetailController', {
                     }
                 }
                 view.initFormData(o);
-                view.fireEvent('load', classDetail, o);
+                view.fireEvent('load', view, o);
             }
         }).catch(function(e) {
+            view.setLoading(false);
             school.util.BaseUtil.showErrorToast('请求数据失败: ' + e.message);
         });
     }

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

@@ -138,6 +138,6 @@ Ext.define('school.view.basic.class.ClassInfo', {
     },
     
     listeners: {
-        afterrender: 'onAfterRender'
+        beforerender: 'onBeforeRender'
     }
 });

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

@@ -2,7 +2,7 @@ Ext.define('school.view.basic.class.ClassInfoController', {
     extend: 'Ext.app.ViewController',
     alias: 'controller.basic-class-classinfo',
 
-    onAfterRender: function() {
+    onBeforeRender: function() {
         let me = this,
         view = me.getView(),
         viewModel = me.getViewModel();
@@ -332,6 +332,9 @@ Ext.define('school.view.basic.class.ClassInfoController', {
                                 currentNode.commit();
                                 win.close();
                                 listCard.showNode(currentNode);
+                            }).then(function() {
+                                Ext.StoreMgr.get('store_grade').load();
+                                Ext.StoreMgr.get('store_class').load();
                             }).catch(function(e) {
                                 view.setLoading(false);
                                 school.util.BaseUtil.showErrorToast(e.message);

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

@@ -14,7 +14,7 @@ Ext.define('school.view.basic.staff.StaffDetail', {
     _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: 'http://10.1.80.180:9520/api/school/teacher/save',
     _saveUrl: '/api/school/teacher/save',
     // _deleteUrl: 'http://10.1.80.47:9560/teacher/delete',
     _deleteUrl: '/api/school/teacher/delete',

+ 14 - 1
frontend/pc-web/app/view/basic/staff/StaffDetailController.js

@@ -4,5 +4,18 @@ Ext.define('school.view.basic.staff.StaffDetailController', {
 
     getMySaveParams: function(params) {
         return params.main;
-    }
+    },
+
+    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.teacher_number + ')';
+    
+            school.util.BaseUtil.refreshTabTitle(newId, newTitle);
+        });
+    },
 });

+ 11 - 7
frontend/pc-web/app/view/basic/student/StudentDetail.js

@@ -3,7 +3,7 @@ Ext.define('school.view.basic.student.StudentDetail', {
     xtype: 'basic-student-studentdetail',
 
     controller: 'basic-student-studentdetail',
-    // viewModel: 'sale-b2b-purchasedetail',
+    viewModel: 'basic-student-studentdetail',
 
     //字段属性
     _title: '学生信息',
@@ -84,7 +84,8 @@ Ext.define('school.view.basic.student.StudentDetail', {
             }, {
                 xtype: 'numberfield',
                 name: 'stu_age',
-                fieldLabel: '年龄'
+                fieldLabel: '年龄',
+                readOnly: true
             }, {
                 xtype: "textfield",
                 name: "stu_address",
@@ -99,7 +100,6 @@ Ext.define('school.view.basic.student.StudentDetail', {
             }, {
                 xtype: 'gradecombo',
                 name: 'stu_grade',
-                valueField: 'name',
                 fieldLabel: '年级',
                 listeners: {
                     select: function (combo, record, eOpts) {
@@ -118,7 +118,6 @@ Ext.define('school.view.basic.student.StudentDetail', {
                 xtype: 'classcombo',
                 name: 'stu_class',
                 fieldLabel: '班级',
-                valueField: 'name',
                 listeners: {
                     expand: function (combo, eOpts) {
                         combo.store.clearFilter();
@@ -127,7 +126,7 @@ Ext.define('school.view.basic.student.StudentDetail', {
                         var gradeName = gradeCombo.getValue();
 
                         var filter = new Ext.util.Filter({
-                            property: 'gradeName',
+                            property: 'clazz_grade',
                             value: gradeName
                         });
 
@@ -136,8 +135,8 @@ Ext.define('school.view.basic.student.StudentDetail', {
                         }
                     },
                     select: function (combo, record, eOpts) {
-                        combo.up('form').getForm().findField('clazz_id').setValue(record.get('value'));
-                        combo.up('form').getForm().findField('stu_grade').setValue(record.get('gradeName'));
+                        combo.up('form').getForm().findField('clazz_id').setValue(record.get('clazz_id'));
+                        combo.up('form').getForm().findField('stu_grade').setValue(record.get('clazz_grade'));
                     }
                 },
                 allowBlank: false
@@ -190,4 +189,9 @@ Ext.define('school.view.basic.student.StudentDetail', {
         });
         this.callParent();
     },
+
+    refresh: function() {
+        Ext.StoreMgr.get('store_grade').load();
+        Ext.StoreMgr.get('store_class').load();
+    }
 });

+ 40 - 0
frontend/pc-web/app/view/basic/student/StudentDetailModel.js

@@ -0,0 +1,40 @@
+Ext.define('school.view.basic.student.StudentDetailModel', {
+    extend: 'school.view.core.form.FormPanelModel',
+    alias: 'viewmodel.basic-student-studentdetail',
+
+    formulas: {
+        stu_birthday_change: {
+            bind: '{stu_birthday}',
+            get: function(v) {
+                var val = new Date(v);
+                var now = new Date();
+                var nYear = now.getFullYear();
+                var nMonth = now.getMonth() + 1;
+                var nDay = now.getDate();
+
+                var vYear = val.getFullYear();
+                var vMonth = val.getMonth() + 1;
+                var vDay = val.getDate();
+                
+                var age = 0;
+
+                if(nYear < vYear) {
+                    age = nYear - vYear;
+                }else {
+                    age = nYear - vYear;
+                    if(nMonth < vMonth) {
+                        age--;
+                    }else if(nMonth == vMonth){
+                        if(nDay < vDay) {
+                            age--;
+                        }
+                    }
+                }
+
+                
+                this.set('stu_age', age);
+                return v;
+            }
+        }
+    }
+});

+ 8 - 4
frontend/pc-web/app/view/basic/student/StudentList.js

@@ -18,7 +18,6 @@ Ext.define('school.view.basic.student.StudentList', {
                 xtype: 'gradecombo',
                 name: 'stu_grade',
                 fieldLabel: '年级',
-                valueField: 'name',
                 listeners: {
                     select: function (combo, record, eOpts) {
                         combo.up('form').getForm().findField('stu_class').setValue(null);
@@ -28,7 +27,6 @@ Ext.define('school.view.basic.student.StudentList', {
                 xtype: 'classcombo',
                 name: 'stu_class',
                 fieldLabel: '班级',
-                valueField: 'name',
                 listeners: {
                     expand: function (combo, eOpts) {
                         combo.store.clearFilter();
@@ -37,7 +35,7 @@ Ext.define('school.view.basic.student.StudentList', {
                         var gradeName = gradeCombo.getValue();
 
                         var filter = new Ext.util.Filter({
-                            property: 'gradeName',
+                            property: 'clazz_grade',
                             value: gradeName
                         });
 
@@ -46,7 +44,7 @@ Ext.define('school.view.basic.student.StudentList', {
                         }
                     },
                     select: function (combo, record, eOpts) {
-                        combo.up('form').getForm().findField('stu_grade').setValue(record.get('gradeName'));
+                        combo.up('form').getForm().findField('stu_grade').setValue(record.get('clazz_grade'));
                     }
                 }
             }, {
@@ -184,5 +182,11 @@ Ext.define('school.view.basic.student.StudentList', {
             },
         });
         this.callParent(arguments);
+    },
+
+    refresh: function() {
+        Ext.StoreMgr.get('store_grade').load();
+        Ext.StoreMgr.get('store_class').load();
+        this.items.items[0].store.load();
     }
 });

+ 4 - 62
frontend/pc-web/app/view/basic/subject/List.js

@@ -81,67 +81,9 @@ Ext.define('school.view.basic.subject.List', {
         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];
-            }
+    listeners: {
+        load: function() {
+            Ext.StoreMgr.get('store_subject').load();
         }
-        return obj;
-     },
+    }
 });

+ 0 - 38
frontend/pc-web/app/view/core/List.js

@@ -1,38 +0,0 @@
-Ext.define('school.view.core.List', {
-    extend: 'Ext.grid.Panel',
-    xtype: 'corelist',
-
-    cls: 'x-core-list x-infocardlist',
-
-    border: 1,
-
-    plugins: [{
-        ptype: 'menuclipboard'
-    }],
-
-    columns: [],
-    store: Ext.create('Ext.data.Store', {
-        fields: [],
-        data: [],
-    }),
-
-    bbar: {
-        items: [{
-            xtype: 'button',
-            tooltip: '刷新',
-            ui: 'header',
-            cls: 'refresh',
-            iconCls: 'x-fa fa-refresh',
-            listeners: {
-                click: function() {
-                    this.up('grid').store.reload();
-                }
-            }
-        }]
-    },
-
-    refresh: function() {
-        this.store.reload();
-    },
-
-});

+ 2 - 2
frontend/pc-web/app/view/core/form/field/ClassComboBox.js

@@ -3,8 +3,8 @@ Ext.define('school.view.core.form.field.ClassComboBox', {
     alias: 'widget.classcombo',
 
     fieldLabel: '班级',
-    displayField: 'name',
-    valueField: 'name',
+    displayField: 'clazz_name',
+    valueField: 'clazz_name',
     editable: true,
     minChars: 0,
     queryMode: 'local',

+ 2 - 2
frontend/pc-web/app/view/core/form/field/GradeComboBox.js

@@ -3,8 +3,8 @@ Ext.define('school.view.core.form.field.GradeComboBox', {
     alias: 'widget.gradecombo',
 
     fieldLabel: '年级',
-    displayField: 'name',
-    valueField: 'name',
+    displayField: 'grade_name',
+    valueField: 'grade_name',
     editable: true,
     minChars: 0,
     queryMode: 'local',

+ 1 - 24
frontend/pc-web/app/view/viewport/ViewportModel.js

@@ -35,7 +35,7 @@ Ext.define('school.view.viewport.ViewportModel', {
             proxy: {
                 type: 'ajax',
                 // url: 'http://10.1.80.47:9560/grade/read/1',
-                url: '/api/school/grade/read/1',
+                url: '/api/school/grade/read/' + school.util.BaseUtil.getCurrentUser().school_id,
                 reader: {
                     transform: {
                         fn: function(data) {
@@ -61,29 +61,6 @@ Ext.define('school.view.viewport.ViewportModel', {
                 text: '全年级',
                 type: 'SCHOOL',
                 expanded: true
-            },
-            listeners: {
-                load: function(store, records) {
-                    let classData = [];
-                    let gradeData = records.map(function(r) {
-                        let d = r.data;
-                        let c = d.children.map(function(h) {
-                            return {
-                                value: h._id,
-                                name: h.text,
-                                gradeId: d._id,
-                                gradeName: d.text
-                            }
-                        });
-                        classData = classData.concat(c);
-                        return {
-                            value: d._id,
-                            name: d.text,
-                        }
-                    })
-                    Ext.StoreMgr.get('store_grade').loadData(gradeData);
-                    Ext.StoreMgr.get('store_class').loadData(classData);
-                }
             }
         }
     }