Browse Source

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

FANGLH 6 years ago
parent
commit
c6009603e4
22 changed files with 577 additions and 280 deletions
  1. 4 0
      applications/school/school-dto/src/main/java/com/usoftchina/smartschool/school/dto/DocBaseDTO.java
  2. 43 5
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/controller/GradeController.java
  3. 15 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/GradeService.java
  4. 64 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/GradeServiceImpl.java
  5. 2 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/SysGradeMapper.java
  6. 36 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/Messagelog.java
  7. 13 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/SysClazz.java
  8. 11 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/SysGrade.java
  9. 9 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/TreeNode.java
  10. 3 0
      applications/school/school-server/src/main/resources/mapper/SysClazzMapper.xml
  11. 11 4
      applications/school/school-server/src/main/resources/mapper/SysGradeMapper.xml
  12. 30 6
      frontend/pc-web/app/view/Interaction/homework/Release.js
  13. 20 0
      frontend/pc-web/app/view/Interaction/notice/SchoolNotice.js
  14. 4 0
      frontend/pc-web/app/view/basic/class/ClassDetail.js
  15. 110 91
      frontend/pc-web/app/view/basic/class/ClassInfo.js
  16. 1 1
      frontend/pc-web/app/view/basic/staff/StaffDetail.js
  17. 13 40
      frontend/pc-web/app/view/basic/staff/StaffList.js
  18. 13 13
      frontend/pc-web/app/view/basic/student/StudentList.js
  19. 1 1
      frontend/pc-web/app/view/core/base/BasePanel.js
  20. 2 1
      frontend/pc-web/app/view/core/base/GridPanel.js
  21. 51 0
      frontend/pc-web/app/view/core/button/import/Button.js
  22. 121 115
      frontend/pc-web/app/view/core/button/import/Window.js

+ 4 - 0
applications/school/school-dto/src/main/java/com/usoftchina/smartschool/school/dto/DocBaseDTO.java

@@ -50,6 +50,10 @@ public class DocBaseDTO implements Serializable{
         this.name = name;
     }
 
+    public DocBaseDTO(Long id) {
+        this.id = id;
+    }
+
     public DocBaseDTO() {
     }
 }

+ 43 - 5
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/controller/GradeController.java

@@ -2,12 +2,13 @@ package com.usoftchina.smartschool.school.basic.controller;
 
 import com.usoftchina.smartschool.base.Result;
 import com.usoftchina.smartschool.school.basic.service.GradeService;
+import com.usoftchina.smartschool.school.dto.DocBaseDTO;
+import com.usoftchina.smartschool.school.po.SysClazz;
+import com.usoftchina.smartschool.school.po.SysGrade;
 import com.usoftchina.smartschool.school.po.SysSchool;
 import com.usoftchina.smartschool.school.po.TreeNode;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * @author: guq
@@ -27,17 +28,54 @@ public class GradeController {
     * @Author: guq
     * @Date: 2019/1/22
     */
-    @RequestMapping("/read/{id}")
+    @GetMapping("/read/{id}")
     public Result getSchoolTree(@PathVariable("id") Long id) {
         TreeNode school = gradeService.getSchoolTree(id);
         return Result.success(school);
     }
 
     //导入保存至列表
-    @RequestMapping("/saveToFormal")
+     @PostMapping("/saveToFormal")
     public Result saveToFormal(Integer id, boolean update) {
         gradeService.saveToFormal(id, update);
         return Result.success();
     }
 
+
+    @PostMapping("/save")
+    public Result saveGrade(String grade, Integer no) {
+        DocBaseDTO docBaseDTO = gradeService.saveGrade(grade, no);
+        return Result.success(docBaseDTO);
+    }
+
+    @PostMapping("/addClass")
+    public Result addClass(@RequestBody SysClazz sysClazz) {
+        DocBaseDTO baseDTO = gradeService.addClass(sysClazz);
+        return Result.success(baseDTO);
+    }
+
+    @PostMapping("/update")
+    public Result update(@RequestBody SysGrade grade) {
+        gradeService.update(grade);
+        return Result.success();
+    }
+
+    @PostMapping("/updateClass")
+    public Result updateClass(@RequestBody SysClazz sysClass) {
+        gradeService.updateClass(sysClass);
+        return Result.success();
+    }
+
+
+    @PostMapping("/delete/{id}")
+    public Result delete(@PathVariable("id") Long id) {
+        gradeService.delete(id);
+        return Result.success();
+    }
+
+    @PostMapping("/deleteClass/{id}")
+    public Result deleteClass(@PathVariable("id") Long id) {
+        gradeService.deleteClass(id);
+        return Result.success();
+    }
 }

+ 15 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/GradeService.java

@@ -1,5 +1,8 @@
 package com.usoftchina.smartschool.school.basic.service;
 
+import com.usoftchina.smartschool.school.dto.DocBaseDTO;
+import com.usoftchina.smartschool.school.po.SysClazz;
+import com.usoftchina.smartschool.school.po.SysGrade;
 import com.usoftchina.smartschool.school.po.SysSchool;
 import com.usoftchina.smartschool.school.po.TreeNode;
 
@@ -7,4 +10,16 @@ public interface GradeService {
     TreeNode getSchoolTree(Long id);
 
     void saveToFormal(Integer id, boolean update);
+
+    DocBaseDTO saveGrade(String grade, Integer no);
+
+    DocBaseDTO addClass(SysClazz sysClazz);
+
+    void delete(Long id);
+
+    void deleteClass(Long id);
+
+    void update(SysGrade grade);
+
+    void updateClass(SysClazz sysClass);
 }

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

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.usoftchina.smartschool.context.BaseContextHolder;
 import com.usoftchina.smartschool.exception.BizException;
 import com.usoftchina.smartschool.school.basic.service.GradeService;
+import com.usoftchina.smartschool.school.dto.DocBaseDTO;
 import com.usoftchina.smartschool.school.exception.BizExceptionCode;
 import com.usoftchina.smartschool.school.mapper.DataImportMapper;
 import com.usoftchina.smartschool.school.mapper.SysClazzMapper;
@@ -51,7 +52,7 @@ public class GradeServiceImpl implements GradeService{
         TreeNode gradeNode = null;
         TreeNode classNode = null;
         List<TreeNode> gradesTree = new ArrayList<>();
-        List<TreeNode> classesTree = new ArrayList<>();
+        List<TreeNode> classesTree = null;
         schoolTree.setId(school.getSchool_id());
         schoolTree.setLeaf(false);
         schoolTree.setText(school.getSchool_name());
@@ -66,6 +67,8 @@ public class GradeServiceImpl implements GradeService{
                 gradeNode.setLeaf(false);
                 gradeNode.setText(grade.getGrade_name());
                 gradeNode.setId(grade.getGrade_id());
+                gradeNode.setNo(grade.getGrade_no());
+                classesTree = new ArrayList<>();
 
                 List<SysClazz> classes = sysClazzMapper.selectBygrade(grade.getGrade_id());
                 if (null != classes && classes.size() > 0) {
@@ -75,6 +78,7 @@ public class GradeServiceImpl implements GradeService{
                         classNode.setLeaf(true);
                         classNode.setText(class_.getClazz_name());
                         classNode.setType(SCHOOLTYPE.CLASS.name());
+                        classNode.setNo(class_.getClazz_no());
                         classesTree.add(classNode);
                     }
                 }
@@ -147,4 +151,63 @@ public class GradeServiceImpl implements GradeService{
             dataImportMapper.updateDataImport(id);
         }
     }
+
+    @Override
+    public DocBaseDTO saveGrade(String grade, Integer no) {
+        if (StringUtils.isEmpty(grade)) {
+            throw new BizException(BizExceptionCode.USELESS_DATA);
+        }
+        Long school_id = BaseContextHolder.getSchoolId();
+        school_id = 1l;
+        SysGrade sysGrade = new SysGrade();
+        sysGrade.setGrade_status(1);
+        sysGrade.setSchool_id(school_id);
+        sysGrade.setGrade_no(no);
+        sysGrade.setGrade_name(grade);
+        sysGradeMapper.insertGrade(sysGrade);
+        return new DocBaseDTO(sysGrade.getGrade_id());
+    }
+
+    @Override
+    public DocBaseDTO addClass(SysClazz sysClazz) {
+        if (StringUtils.isEmpty(sysClazz)) {
+            throw new BizException(BizExceptionCode.USELESS_DATA);
+        }
+        sysClazz.setClazz_status(1);
+        sysClazzMapper.insertSelective(sysClazz);
+        return new DocBaseDTO(sysClazz.getClazz_id());
+    }
+
+    @Override
+    public void delete(Long id) {
+        if (StringUtils.isEmpty(id)) {
+            throw new BizException(BizExceptionCode.USELESS_DATA);
+        }
+        sysGradeMapper.deleteByPrimaryKey(id);
+    }
+
+    @Override
+    public void deleteClass(Long id) {
+        if (StringUtils.isEmpty(id)) {
+            throw new BizException(BizExceptionCode.USELESS_DATA);
+        }
+        sysClazzMapper.deleteByPrimaryKey(id);
+    }
+
+    @Override
+    public void update(SysGrade grade) {
+        if (StringUtils.isEmpty(grade)) {
+            throw new BizException(BizExceptionCode.USELESS_DATA);
+        }
+        sysGradeMapper.updateByPrimaryKeySelective(grade);
+
+    }
+
+    @Override
+    public void updateClass(SysClazz sysClass) {
+        if (StringUtils.isEmpty(sysClass)) {
+            throw new BizException(BizExceptionCode.USELESS_DATA);
+        }
+        sysClazzMapper.updateByPrimaryKeySelective(sysClass);
+    }
 }

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

@@ -23,4 +23,6 @@ public interface SysGradeMapper {
     List<SysGrade> selectBySchool(Long id);
 
     SysGrade selectByName(@Param("grade") String grade, @Param("school_id") Long school_id);
+
+    int insertGrade(SysGrade grade);
 }

+ 36 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/Messagelog.java

@@ -0,0 +1,36 @@
+package com.usoftchina.smartschool.school.po;
+
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class Messagelog implements Serializable{
+
+    private Integer ml_id;
+
+    private String ml_code;
+
+    private String ml_content;
+
+    private String ml_result;
+
+    private String ml_caller;
+
+    private String ml_man;
+
+    private Integer school_id;
+
+    private Date createTime;
+
+    private Integer creatorId;
+
+    private Integer ml_keyvalue;
+
+    private String ml_name;
+
+    private String creatorName;
+
+}

+ 13 - 1
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/SysClazz.java

@@ -1,10 +1,12 @@
 package com.usoftchina.smartschool.school.po;
 
+import java.io.Serializable;
+
 /**
  * @author: guq
  * @create: 2019-01-22 16:12
  **/
-public class SysClazz {
+public class SysClazz implements Serializable{
 
     private Long clazz_id;
 
@@ -18,6 +20,8 @@ public class SysClazz {
 
     private Long grade_id;
 
+    private Integer clazz_no;
+
     private Boolean leaf = true;
 
     public Boolean getLeaf() {
@@ -76,4 +80,12 @@ public class SysClazz {
         this.grade_id = grade_id;
     }
 
+
+    public Integer getClazz_no() {
+        return clazz_no;
+    }
+
+    public void setClazz_no(Integer clazz_no) {
+        this.clazz_no = clazz_no;
+    }
 }

+ 11 - 1
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/SysGrade.java

@@ -1,12 +1,13 @@
 package com.usoftchina.smartschool.school.po;
 
+import java.io.Serializable;
 import java.util.List;
 
 /**
  * @author: guq
  * @create: 2019-01-22 16:11
  **/
-public class SysGrade {
+public class SysGrade implements Serializable{
 
     private Long grade_id;
 
@@ -20,6 +21,8 @@ public class SysGrade {
 
     private Long school_id;
 
+    private Integer grade_no;
+
     private List<SysClazz> children;
 
     private Boolean leaf = false;
@@ -88,4 +91,11 @@ public class SysGrade {
         this.school_id = school_id;
     }
 
+    public Integer getGrade_no() {
+        return grade_no;
+    }
+
+    public void setGrade_no(Integer grade_no) {
+        this.grade_no = grade_no;
+    }
 }

+ 9 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/TreeNode.java

@@ -14,6 +14,15 @@ public class TreeNode implements Serializable{
     private String text;
     private boolean leaf;
     private List<TreeNode> children;
+    private Integer no;
+
+    public Integer getNo() {
+        return no;
+    }
+
+    public void setNo(Integer no) {
+        this.no = no;
+    }
 
     public Long getId() {
         return id;

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

@@ -32,6 +32,9 @@
       )
   </insert>
   <insert id="insertSelective" parameterType="com.usoftchina.smartschool.school.po.SysClazz" >
+    <selectKey  resultType="java.lang.Long" keyProperty="clazz_id">
+      SELECT LAST_INSERT_ID() AS ID
+    </selectKey>
     insert into sys_clazz
     <trim prefix="(" suffix=")" suffixOverrides="," >
       <if test="clazz_name != null" >

+ 11 - 4
applications/school/school-server/src/main/resources/mapper/SysGradeMapper.xml

@@ -8,6 +8,7 @@
     <result column="grade_remarks" property="grade_remarks" jdbcType="VARCHAR" />
     <result column="grade_address" property="grade_address" jdbcType="VARCHAR" />
     <result column="school_id" property="school_id" jdbcType="BIGINT" />
+    <result column="grade_no" property="grade_no" jdbcType="INTEGER"/>
   </resultMap>
   <sql id="Base_Column_List" >
     grade_id, grade_name, grade_status, grade_remarks, grade_address, school_id
@@ -85,9 +86,6 @@
       <if test="grade_address != null" >
         grade_address = #{grade_address,jdbcType=VARCHAR},
       </if>
-      <if test="school_id != null" >
-        school_id = #{school_id,jdbcType=BIGINT},
-      </if>
     </set>
     where grade_id = #{grade_id,jdbcType=BIGINT}
   </update>
@@ -101,9 +99,18 @@
     where grade_id = #{grade_id,jdbcType=BIGINT}
   </update>
   <select id="selectBySchool" parameterType="java.lang.Long" resultMap="BaseResultMap">
-    select * from sys_grade where school_id = #{id}
+    select * from sys_grade where school_id = #{id} order by grade_no,grade_id
   </select>
   <select id="selectByName" resultMap="BaseResultMap">
     select * from sys_grade where grade_name=#{grade} and school_id=#{school_id}
   </select>
+
+  <insert id="insertGrade" parameterType="com.usoftchina.smartschool.school.po.SysGrade">
+    <selectKey  resultType="java.lang.Long" keyProperty="grade_id">
+      SELECT LAST_INSERT_ID() AS ID
+    </selectKey>
+    insert into sys_grade (grade_name,grade_no,school_id) select #{grade_name},#{grade_no},#{school_id} from dual where
+    not  exists (select 1 from sys_grade where grade_name = #{grade_name} and school_id = #{school_id})
+  </insert>
+
 </mapper>

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

@@ -36,10 +36,11 @@ Ext.define('school.view.interaction.homework.Release', {
                 fieldLabel: "发布人",
                 columnWidth: 0.5
             }, {
-                xtype: 'textfield',
-                name: 'time',
-                fieldLabel: '发布时间',
-                columnWidth: 0.5
+                xtype: 'datefield',
+                name: 'startDate',
+                fieldLabel: '开始时间',
+                columnWidth: 0.5,
+                defaultValue: new Date()
             }, {
                 xtype: 'combobox',
                 name: 'Notifications',
@@ -57,8 +58,8 @@ Ext.define('school.view.interaction.homework.Release', {
                     ]
                 })
             }, {
-                xtype: 'textfield',
-                name: 'Deadline',
+                xtype: 'datefield',
+                name: 'endDate',
                 fieldLabel: '截止时间',
                 columnWidth: 0.5
             }, {
@@ -71,10 +72,33 @@ Ext.define('school.view.interaction.homework.Release', {
                 name: 'content',
                 fieldLabel: "内容",
                 columnWidth: 1,
+                height: 250
             }],
             toolBtns: [{
                 xtype: 'button',
                 text: '发布',
+                handler: function() {
+                    let form = this.up('form');
+                    let values = form.getSaveData().main;
+                    form.setLoading(true);
+                    school.util.BaseUtil.request({
+                        // url: 'http://10.1.80.47:9560/homework/save',
+                        url: '/api/school/homework/save',
+                        method: 'POST',
+                        params: JSON.stringify({
+                            task_title: values.title,
+                            start_date: values.startDate,
+                            end_date: values.endDate,
+                            task_context: values.content
+                        })
+                    }).then(function(res) {
+                        form.setLoading(false);
+                        school.util.BaseUtil.showSuccessToast('发布成功');
+                    }).catch(function(e) {
+                        form.setLoading(false);
+                        school.util.BaseUtil.showErrorToast('发布失败: ' + e.message);
+                    });
+                }
             }]
         });
         this.callParent();

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

@@ -71,6 +71,26 @@ Ext.define('school.view.interaction.notice.SchoolNotice', {
             toolBtns: [{
                 xtype: 'button',
                 text: '发布',
+                handler: function() {
+                    let form = this.up('form');
+                    let values = form.getValues();
+                    form.setLoading(true);
+                    school.util.BaseUtil.request({
+                        // url: 'http://10.1.80.47:9560/notice/save',
+                        url: '/api/school/notice/save',
+                        method: 'POST',
+                        params: JSON.stringify({
+                            notify_title: values.title,
+                            notify_details: values.content
+                        })
+                    }).then(function(res) {
+                        form.setLoading(false);
+                        school.util.BaseUtil.showSuccessToast('发布成功');
+                    }).catch(function(e) {
+                        form.setLoading(false);
+                        school.util.BaseUtil.showErrorToast('发布失败: ' + e.message);
+                    });
+                }
             }]
         });
         this.callParent();

+ 4 - 0
frontend/pc-web/app/view/basic/class/ClassDetail.js

@@ -126,6 +126,10 @@ Ext.define('school.view.basic.class.ClassDetail', {
                     text: '学科',
                     dataIndex: 'subject'
                 }]
+            }],
+            toolBtns: [{
+                xtype: 'button',
+                text: '保存'
             }]
         });
         this.callParent();

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

@@ -15,103 +15,122 @@ Ext.define('school.view.basic.class.ClassInfo', {
     layout: 'border',
 
     // bodyPadding: '8 12 8 12',
-    items: [{
-        region: 'west',
-        split: true,
-        border: false,
-        hideHeaders: true,
-        singleExpand: true,
-        width: 250,
-        xtype: 'treepanel',
-        reference: 'treelist',
-        bind: {
-            store: '{store_grade}',
-            width: '{treeWidth}'
-        },
-        // viewConfig: {
-        //     plugins: {
-        //         treeviewdragdrop: {
-        //             containerScroll: true
-        //         }
-        //     }
-        // },
-        columns: [{
-            xtype: 'treecolumn',
-            text: 'Name',
-            dataIndex: 'text',
-            flex: 1,
-            sortable: true,
-            renderer: function(v, metaData, record) {
-                metaData.glyph = record.glyph;
-                return v;
-            }
-        }, {
-            xtype: 'actioncolumn',
-            width: 30,
-            items: [{
-                iconCls: 'action-icon x-hidden x-ss ss-add',
-                tooltip: '新增',
-                handler: 'onTreeAddClick'
-            }]
-        }, {
-            xtype: 'actioncolumn',
-            width: 30,
-            items: [{
-                iconCls: 'action-icon x-hidden x-fa fa-pencil',
-                tooltip: '编辑',
-                handler: 'onTreeEditClick'
-            }]
-        }, {
-            xtype: 'actioncolumn',
-            width: 30,
+
+    initComponent: function() {
+        let me = this;
+        Ext.apply(me, {
             items: [{
-                iconCls: 'action-icon x-hidden x-ss ss-delete',
-                tooltip: '删除',
-                handler: 'onTreeDeleteClick'
-            }]
-        }],
-        listeners: {
-            itemclick: 'onItemClick',
-            itemmouseenter: 'onItemMouseEnter',
-            itemmouseleave: 'onItemMouseLeave',
-            beforedrop: 'onItemBeforeDrop',
-            drop: 'onItemDrop',
-        }
-    }, {
-        region: 'center',
-        bodyPadding: 10,
-        layout: 'fit',
-        items: [{
-            xtype: 'panel',
-            layout: 'fit',
-            scrollable: true,
-            tbar: [{
-                padding: '7 0 7 0',
-                ui: 'header',
+                region: 'west',
+                split: true,
+                border: false,
+                hideHeaders: true,
+                singleExpand: true,
+                width: 250,
+                xtype: 'treepanel',
+                reference: 'treelist',
                 bind: {
-                    iconCls:'x-sa {toggleIconCls}'
+                    store: '{store_grade}',
+                    width: '{treeWidth}'
                 },
-                handler: 'onToggleTree'
-            }, {
-                xtype: 'tbtext',
-                bind: {
-                    text: '{currentNodeData.text}'
+                // viewConfig: {
+                //     plugins: {
+                //         treeviewdragdrop: {
+                //             containerScroll: true
+                //         }
+                //     }
+                // },
+                columns: [{
+                    xtype: 'treecolumn',
+                    text: 'Name',
+                    dataIndex: 'text',
+                    flex: 1,
+                    sortable: true,
+                    renderer: function(v, metaData, record) {
+                        metaData.glyph = record.glyph;
+                        return v;
+                    }
+                }, {
+                    xtype: 'actioncolumn',
+                    width: 30,
+                    items: [{
+                        iconCls: 'action-icon x-hidden x-ss ss-add',
+                        tooltip: '新增',
+                        handler: 'onTreeAddClick'
+                    }]
+                }, {
+                    xtype: 'actioncolumn',
+                    width: 30,
+                    items: [{
+                        iconCls: 'action-icon x-hidden x-fa fa-pencil',
+                        tooltip: '编辑',
+                        handler: 'onTreeEditClick'
+                    }]
+                }, {
+                    xtype: 'actioncolumn',
+                    width: 30,
+                    items: [{
+                        iconCls: 'action-icon x-hidden x-ss ss-delete',
+                        tooltip: '删除',
+                        handler: 'onTreeDeleteClick'
+                    }]
+                }],
+                bbar: ['->', {
+                    xtype: 'importbutton',
+                    width: '100%',
+                    text: '导入',
+                    caller: 'GradeAndCLass',
+                    pathKey: 'grade',
+                    onSuccess: function() {
+                        let viewModel = me.getViewModel();
+        
+                        viewModel.get('store_grade').load();
+                    }
+                }, '->'],
+                listeners: {
+                    itemclick: 'onItemClick',
+                    itemmouseenter: 'onItemMouseEnter',
+                    itemmouseleave: 'onItemMouseLeave',
+                    beforedrop: 'onItemBeforeDrop',
+                    drop: 'onItemDrop',
                 }
             }, {
-                xtype: 'button',
-                text: '上一级',
-                handler: 'onTreeUp'
+                region: 'center',
+                bodyPadding: 10,
+                layout: 'fit',
+                items: [{
+                    xtype: 'panel',
+                    layout: 'fit',
+                    scrollable: true,
+                    tbar: [{
+                        padding: '7 0 7 0',
+                        ui: 'header',
+                        bind: {
+                            iconCls:'x-sa {toggleIconCls}'
+                        },
+                        handler: 'onToggleTree'
+                    }, {
+                        xtype: 'tbtext',
+                        bind: {
+                            text: '{currentNodeData.text}'
+                        }
+                    }, {
+                        xtype: 'button',
+                        text: '上一级',
+                        handler: 'onTreeUp'
+                    }],
+                    items: [{
+                        xtype: 'listcard',
+                        reference: 'listcard'
+                    }, {
+                        xtype: 'classdetail',
+                        reference: 'classdetail',
+                        hidden: true
+                    }]
+                }]
             }],
-            items: [{
-                xtype: 'listcard',
-                reference: 'listcard'
-            }, {
-                xtype: 'classdetail',
-                reference: 'classdetail',
-                hidden: true
-            }]
-        }]
-    }],
+        });
+        me.callParent(arguments);
+    },
     
     listeners: {
         afterrender: 'onAfterRender'

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

@@ -35,7 +35,7 @@ Ext.define('school.view.basic.staff.StaffDetail', {
                 fieldLabel: '姓名'
             }, {
                 xtype: "textfield",
-                name: "teacher_phone",
+                name: "teacher_sex",
                 fieldLabel: "性别"
             }, {
                 xtype: 'textfield',

+ 13 - 40
frontend/pc-web/app/view/basic/staff/StaffList.js

@@ -6,6 +6,10 @@ Ext.define('school.view.basic.staff.StaffList', {
     xtype: 'basic-staff-stafflist',
 
     dataUrl: '/api/school/teacher/list',
+    _title: '教职工信息导入',
+    caller: 'Teacher',
+    pathKey: 'teacher',
+
     initComponent: function() {
         var me = this;
         Ext.apply(this, {
@@ -23,14 +27,6 @@ Ext.define('school.view.basic.staff.StaffList', {
                 fieldLabel: '职位'
             }],
         
-            caller: null,
-            _formXtype: null,
-            _title: null,
-            _deleteUrl: null,
-            _batchOpenUrl: null,
-            _batchCloseUrl: null,
-            _batchDeleteUrl: null,
-        
             gridConfig: {
                 idField: null,
                 codeField: null,
@@ -48,18 +44,18 @@ Ext.define('school.view.basic.staff.StaffList', {
                 },
                 hiddenTools: false,
                 toolBtns: [{
-                    xtype: 'button',
-                    text: '导入测试按钮',
-                    handler: me.onImport,
+                    xtype: 'importbutton',
+                    belong: me,
+                    caller: me.caller,
+                    pathKey: me.pathKey,
+                    onSuccess: function() {
+                        //刷新界面
+                        var g = me.down('grid');
+                        g.store.loadPage(g.store.currentPage);
+                    }
                 }, {
                     xtype: 'button',
                     text: '一键开通'
-                }, {
-                    xtype: 'button',
-                    text: '下载模板'
-                }, {
-                    xtype: 'button',
-                    text: '批量导入'
                 }, {
                     xtype: 'button',
                     text: '删除'
@@ -111,29 +107,6 @@ Ext.define('school.view.basic.staff.StaffList', {
         this.callParent(arguments);
     },
 
-    onImport:function(){
-        var grid = this.ownerCt.ownerCt;
-        var form = grid.ownerCt,panelEl = form.getEl();
-        var box = panelEl.getBox();
-        var height = box.height;
-        var width = box.width;
-        var win = form.add(Ext.create('school.view.core.base.ImportWindow', {  
-            cls:'x-window-dbfind', 
-            belong:form,  
-            modal:true,
-            height: height * 0.8,
-            width: width * 0.8,
-            title: form._title + '导入',
-            scrollable: true,
-            bodyPadding: 10,
-            constrain: true,
-            closable: true,
-            layout:'fit',
-            renderTo:form.getEl()
-        }));
-        win.show();
-    },
-
     /**
      * 处理部分字段值
      */

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

@@ -6,6 +6,10 @@ Ext.define('school.view.basic.student.StudentList', {
     xtype: 'basic-student-studentlist',
 
     dataUrl: '/api/school/student/list',
+    _title: '学生信息',
+    caller: 'Student',
+    pathKey: 'student',
+
     initComponent: function() {
         var me = this;
         Ext.apply(this, {
@@ -31,14 +35,6 @@ Ext.define('school.view.basic.student.StudentList', {
                 fieldLabel: '家长'
             }],
         
-            caller: null,
-            _formXtype: null,
-            _title: null,
-            _deleteUrl: null,
-            _batchOpenUrl: null,
-            _batchCloseUrl: null,
-            _batchDeleteUrl: null,
-        
             gridConfig: {
                 idField: null,
                 codeField: null,
@@ -56,11 +52,15 @@ Ext.define('school.view.basic.student.StudentList', {
                 },
                 hiddenTools: false,
                 toolBtns: [{
-                    xtype: 'button',
-                    text: '下载模板'
-                }, {
-                    xtype: 'button',
-                    text: '上传数据'
+                    xtype: 'importbutton',
+                    belong: me,
+                    caller: me.caller,
+                    pathKey: me.pathKey,
+                    onSuccess: function() {
+                        //刷新界面
+                        var g = me.down('grid');
+                        g.store.loadPage(g.store.currentPage);
+                    }
                 }, {
                     xtype: 'button',
                     text: '一键开通'

+ 1 - 1
frontend/pc-web/app/view/core/base/BasePanel.js

@@ -228,7 +228,7 @@ Ext.define('school.view.core.base.BasePanel', {
         return conditionValue;
     },
 
-    getExtraParams: function(store, op, condition) {
+    getDefaultExtraParams: function(store, op, condition) {
         return {
             number: store.exportNumber?store.exportNumber:op._page,
             size: store.exportPageSize?store.exportPageSize:store.pageSize,

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

@@ -79,7 +79,8 @@ Ext.define('school.view.core.base.GridPanel', {
                         }
 
                         var obj = basePanel.getExtraParams(store, op, condition);
-                        Ext.apply(store.proxy.extraParams, obj);
+                        var defaultObj = basePanel.getDefaultExtraParams(store, op, condition);
+                        Ext.apply(store.proxy.extraParams, obj, defaultObj);
                     }
                 }
             });

+ 51 - 0
frontend/pc-web/app/view/core/button/import/Button.js

@@ -0,0 +1,51 @@
+Ext.define('school.view.core.button.import.Button', {
+    extend: 'Ext.button.Button',
+    xtype: 'importbutton',
+
+    text: '导入',
+
+    caller: null,
+
+    initComponent: function () {
+        let me = this;
+        Ext.apply(me, {
+            handler: me.onClick
+        });
+        me.callParent(arguments);
+    },
+
+    listeners: {
+        boxready: function() {
+            let me = this;
+            me.belong = me.belong || me.up('core-tab-panel');
+        },
+    },
+
+    onClick: function () {
+        let me = this;
+        let belong = me.belong;
+        let boxEl = belong.getEl();
+        let box = boxEl.getBox();
+        let height = box.height * 0.8;
+        let width = box.width * 0.8;
+        let win = belong.add(Ext.create('school.view.core.button.import.Window', {
+            cls: 'x-window-dbfind',
+            belong: belong,
+            modal: true,
+            height: height,
+            width: width,
+            title: '导入',
+            scrollable: true,
+            bodyPadding: 10,
+            constrain: true,
+            closable: true,
+            layout: 'fit',
+            caller: me.caller,
+            pathKey: me.pathKey,
+            renderTo: boxEl,
+            onSuccess: me.onSuccess || Ext.emptyFn,
+            onFailure: me.onFailure || Ext.emptyFn
+        }));
+        win.show();
+    }
+});

+ 121 - 115
frontend/pc-web/app/view/core/base/ImportWindow.js → frontend/pc-web/app/view/core/button/import/Window.js

@@ -1,18 +1,19 @@
-Ext.define('school.view.core.base.ImportWindow', {
+Ext.define('school.view.core.button.import.Window', {
     extend: 'Ext.window.Window',
     xtype: 'importwindow',
-    layout:'fit',
+
+    layout: 'fit',
 
     requires: [
         'Ext.form.field.File',
         'Ext.container.ButtonGroup'
     ],
 
-    bbar:['->',{
-        hidden:true,
-        name:'prev',
-        text:'上一步',
-        handler:function(b){
+    bbar: ['->', {
+        hidden: true,
+        name: 'prev',
+        text: '上一步',
+        handler: function (b) {
             var p = this.ownerCt.ownerCt.items.items[0];
             var tbar = p.dockedItems.items[0];
             //first
@@ -40,10 +41,10 @@ Ext.define('school.view.core.base.ImportWindow', {
             p.down('[name=detail]').show();
             p.down('[name=message]').hide();
         }
-    },{
-        name:'next',
-        text:'下一步',
-        handler:function(b){
+    }, {
+        name: 'next',
+        text: '下一步',
+        handler: function (b) {
             var p = this.ownerCt.ownerCt.items.items[0];
             var tbar = p.dockedItems.items[0];
             //first
@@ -71,41 +72,42 @@ Ext.define('school.view.core.base.ImportWindow', {
             p.down('[name=detail]').hide();
             p.down('[name=message]').show();
         }
-    },{
-        hidden:true,
-        name:'over',
-        text:'完成',
-        disabled:true,
-        handler:function(b){
+    }, {
+        hidden: true,
+        name: 'over',
+        text: '完成',
+        disabled: true,
+        handler: function (b) {
+            var win = b.up('window');
             var form = b.ownerCt.ownerCt;
             var id = form.importId;
-            if(id){
+            if (id) {
                 form.setLoading(true);
                 Ext.Ajax.request({
-                    url: '/api/document/'+form.ownerCt.caller.toLocaleLowerCase()+'/saveToFormal',//这里是填写需要跨域访问的URL
+                    // url: '/api/document/'+form.ownerCt.caller.toLocaleLowerCase()+'/saveToFormal',//这里是填写需要跨域访问的URL
+                    // url: 'http://10.1.80.47:9560/' + win.pathKey + '/saveToFormal', //这里是填写需要跨域访问的URL
+                    url: '/api/school/' + win.pathKey + '/saveToFormal', //这里是填写需要跨域访问的URL
                     method: 'post',
                     headers: {
                         'Access-Control-Allow-Origin': '*',
-                        'Authorization':  school.util.State.get('session').token,
+                        'Authorization': school.util.State.get('session').token,
                         "Content-Type": 'application/x-www-form-urlencoded;charset=UTF-8'
                     },
-                    params:{
-                        id:id,
-                        update:false
+                    params: {
+                        id: id,
+                        update: false
                     },
                     success: function (response, opts) {
                         form.setLoading(false);
                         var res = Ext.decode(response.responseText);
-                        if(!res.success){
+                        if (!res.success) {
                             var upload = form.down('[name=upload]');
                             upload.reset();
                             form.dockedItems.items[1].down('[name=over]').setDisabled(true);
                             form.down('[name=messagedetail]').setHtml(res.message + '</br></br><span style="color:#ff0000">请修改后重新上传</span>');
-                        }else{
-                            //刷新界面
-                            var g = form.ownerCt.down('grid');
-                            g.store.loadPage(g.store.currentPage);
-                            form.close();
+                        } else {
+                            win.onSuccess(res);
+                            win.close();
                         }
                     },
                     failure: function (response, opts) {
@@ -115,97 +117,98 @@ Ext.define('school.view.core.base.ImportWindow', {
                         form.dockedItems.items[1].down('[name=over]').setDisabled(true);
                         var res = Ext.decode(response.responseText);
                         school.util.BaseUtil.showErrorToast('导入数据失败: ' + res.message);
-                        
+                        win.onFailure(response);
                     }
                 });
-            }else{
+            } else {
                 form.close();
             }
         }
-    },{
-        name:'close',
-        text:'关闭',
-        handler:function(b){
+    }, {
+        name: 'close',
+        text: '关闭',
+        handler: function (b) {
             b.ownerCt.ownerCt.close()
         }
     }],
 
-    initComponent: function() {
+    initComponent: function () {
         var me = this;
         Ext.apply(me, {
-            items:[{
-                cls:'x-panel-import',
-                padding:'10px 100px 10px 100px',
-                xtype:'panel',
-                layout:'vbox',
-                tbar:['->',{
-                    name:'first',
-                    cls:'x-btn-import-first',
-                    style:'background: #34baf6;border-color: #35baf6;    opacity: 1;',
-                    focusable:false,
-                    disabled:true,
-                    width:300,
-                    text:'下载模板并填写',
-                },{
-                    name:'middle',
-                    disabled:true,
-                    focusable:false,
-                    style:'width: 20px;margin: 0px;margin-left: -16px;border-width: 1px 0px;min-width: 0px;border-style: solid;border-color: rgb(53, 186, 246);    opacity: 1;    background-color: #fff;',
-                    width:20,
-                    cls:'x-btn-import-middle'
-                },{
-                    name:'last',
-                    disabled:true,
-                    cls:'x-btn-import-last',
-                    style:'border-left-width: 0px;background: #fff;border-color: #35baf6;opacity:1;background-color: #fff;',
-                    focusable:false,
-                    margin:'0 0 0 -1',
-                    width:300,
-                    text:'上传导入文件',
-                },'->'],
-                items:[{
-                    margin:'15px 0 0 0',
+            items: [{
+                cls: 'x-panel-import',
+                padding: '10px 100px 10px 100px',
+                xtype: 'panel',
+                layout: 'vbox',
+                tbar: ['->', {
+                    name: 'first',
+                    cls: 'x-btn-import-first',
+                    style: 'background: #34baf6;border-color: #35baf6;    opacity: 1;',
+                    focusable: false,
+                    disabled: true,
+                    width: 300,
+                    text: '下载模板并填写',
+                }, {
+                    name: 'middle',
+                    disabled: true,
+                    focusable: false,
+                    style: 'width: 20px;margin: 0px;margin-left: -16px;border-width: 1px 0px;min-width: 0px;border-style: solid;border-color: rgb(53, 186, 246);    opacity: 1;    background-color: #fff;',
+                    width: 20,
+                    cls: 'x-btn-import-middle'
+                }, {
+                    name: 'last',
+                    disabled: true,
+                    cls: 'x-btn-import-last',
+                    style: 'border-left-width: 0px;background: #fff;border-color: #35baf6;opacity:1;background-color: #fff;',
+                    focusable: false,
+                    margin: '0 0 0 -1',
+                    width: 300,
+                    text: '上传导入文件',
+                }, '->'],
+                items: [{
+                    margin: '15px 0 0 0',
                     width: 240,
-                    labelWidth:160,
-                    buttonOnly:true,
-                    fieldLabel:'导入模板下载',
-                    name:'download',
+                    labelWidth: 160,
+                    buttonOnly: true,
+                    fieldLabel: '导入模板下载',
+                    name: 'download',
                     xtype: 'filefield',
                     buttonText: '下载模板',
-                    buttonConfig:{
-                        xtype:'button',
-                        handler:function(b){
-                            var caller = b.ownerCt.ownerCt.ownerCt.ownerCt.caller;
+                    buttonConfig: {
+                        xtype: 'button',
+                        handler: function (b) {
                             //获取模版
                             var serverOptions = Ext.manifest.server;
-                            window.location.href = (serverOptions.basePath.https?serverOptions.basePath.https:serverOptions.basePath) + '/api/commons/excel/import/templet?caller='+caller;
+                            // window.location.href = (serverOptions.basePath.https?serverOptions.basePath.https:serverOptions.basePath) + '/api/commons/excel/import/templet?caller='+me.caller;
+                            // window.location.href = 'http://10.1.80.47:9560/' + 'excel/import/templet?caller=' + me.caller;
+                            window.location.href = '/api/school/' + 'excel/import/templet?caller=' + me.caller;
                         }
                     }
-                },{
-                    margin:'10px 0 0 45px',
+                }, {
+                    margin: '10px 0 0 45px',
                     xtype: 'fieldset',
                     title: '导入说明',
-                    name:'detail',
+                    name: 'detail',
                     collapsible: false,
                     items: [{
-                        xtype : 'fieldcontainer',
-                        html: '1.下载模板后打开</br>2.查看模板内说明、并修改模板内容,保存后点击下一步按钮</br>3.上传Excel文件,此时会校验文件的字段格式,有问题则需要修改错误数据后再次上传文件</br>4.校验成功后'+
-                        '点击完成按钮将数据进行数据库校验'
+                        xtype: 'fieldcontainer',
+                        html: '1.下载模板后打开</br>2.查看模板内说明、并修改模板内容,保存后点击下一步按钮</br>3.上传Excel文件,此时会校验文件的字段格式,有问题则需要修改错误数据后再次上传文件</br>4.校验成功后' +
+                            '点击完成按钮将数据进行数据库校验'
                     }]
-                },{
-                    hidden:true,
-                    margin:'15px 0 0 0',
-                    labelWidth:100,
-                    allowBlank : true, 
-                    width:180,
-                    buttonOnly:true,
-                    fieldLabel:'上传文件',
+                }, {
+                    hidden: true,
+                    margin: '15px 0 0 0',
+                    labelWidth: 100,
+                    allowBlank: true,
+                    width: 180,
+                    buttonOnly: true,
+                    fieldLabel: '上传文件',
                     xtype: 'filefield',
-                    name:'upload',
+                    name: 'upload',
                     buttonText: '选择文件',
-                    createFileInput : function() {
-                            var me = this;
-                            me.fileInputEl = me.button.el.createChild({
+                    createFileInput: function () {
+                        var me = this;
+                        me.fileInputEl = me.button.el.createChild({
                             name: me.getName(),
                             cls: Ext.baseCSSPrefix + 'form-file-input',
                             tag: 'input',
@@ -214,13 +217,13 @@ Ext.define('school.view.core.base.ImportWindow', {
                         }).on('change', me.onFileChange, me);
                     },
                     listeners: {
-                        change: function(field){
+                        change: function (field) {
                             var form = field.ownerCt.ownerCt;
                             var myForm = field.ownerCt;
                             var fileEl = field.fileInputEl.dom;
                             var file = fileEl.files[0];
-                            var type = file.name.substring(file.name.lastIndexOf('.'),file.name.length);
-                            if(type.indexOf('xlsx')<0||type.indexOf('xls')<0){
+                            var type = file.name.substring(file.name.lastIndexOf('.'), file.name.length);
+                            if (type.indexOf('xlsx') < 0 || type.indexOf('xls') < 0) {
                                 school.util.BaseUtil.showErrorToast('文件格式不正确,只能选择xlsx或xls格式的文件进行上传');
                                 field.reset();
                                 return;
@@ -244,14 +247,14 @@ Ext.define('school.view.core.base.ImportWindow', {
                             //     school.util.BaseUtil.showErrorToast('上传失败:没有 导入 权限');
                             //     return false;
                             // }
-                            
+
                             var fd = new FormData();
                             fd.append('file', fileEl.files[0]);
-                            fd.append('caller', 'GradeAndCLass');
+                            fd.append('caller', me.caller);
                             form.setLoading(true);
-                            debugger
                             Ext.Ajax.request({
-                                url: '/excel/import/parse',//这里是填写需要跨域访问的URL
+                                // url: 'http://10.1.80.47:9560/excel/import/parse', //这里是填写需要跨域访问的URL
+                                url: '/api/school/excel/import/parse', //这里是填写需要跨域访问的URL
                                 cors: true,
                                 useDefaultXhrHeader: false,
                                 method: 'post',
@@ -260,22 +263,22 @@ Ext.define('school.view.core.base.ImportWindow', {
                                     'Access-Control-Allow-Origin': '*',
                                     //'Authorization':  school.util.State.get('session').token,
                                     //"Content-Type": 'multipart/form-data'  //文件上传的格式, 
-                                    "Content-Type":null
+                                    "Content-Type": null
                                 },
                                 success: function (response, opts) {
                                     form.setLoading(false);
                                     var res = Ext.decode(response.responseText);
-                                    if(res.success){
+                                    if (res.success) {
                                         var id = res.data;
-                                        if(id){
+                                        if (id) {
                                             field.ownerCt.down('[name=messagedetail]').setHtml('文件名: ' + file.name + ' 导入格式校验成功!</br></br>请点击 <span style="color:#35baf6">完成</span> 执行数据库校验');
                                             form.importId = id;
                                             field.ownerCt.ownerCt.dockedItems.items[1].down('[name=over]').setDisabled(false)
-                                        }else{
+                                        } else {
                                             field.reset();
                                             school.util.BaseUtil.showErrorToast('上传失败:后台未返回信息');
                                         }
-                                    }else{
+                                    } else {
                                         field.reset();
                                         field.ownerCt.down('[name=messagedetail]').setHtml(res.message + '</br><span style="color:#ff0000">请修改后重新上传</span>');
                                     }
@@ -289,22 +292,25 @@ Ext.define('school.view.core.base.ImportWindow', {
                             });
                         }
                     }
-                },{
-                    hidden:true,
-                    margin:'10px 0 0 45px',
+                }, {
+                    hidden: true,
+                    margin: '10px 0 0 45px',
                     xtype: 'fieldset',
                     title: '导入详情',
-                    name:'message',
+                    name: 'message',
                     collapsible: false,
                     items: [{
-                        name:'messagedetail',
-                        xtype : 'fieldcontainer',
-                        html:'暂无导入信息'
+                        name: 'messagedetail',
+                        xtype: 'fieldcontainer',
+                        html: '暂无导入信息'
                     }]
                 }]
             }]
         });
         me.callParent(arguments);
-    }
+    },
+
+    onSuccess: Ext.emptyFn,
+    onFailure: Ext.emptyFn
 
 });