Browse Source

班级组织、课程表

zhuth 7 years ago
parent
commit
5883563c4b

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

@@ -336,7 +336,7 @@
             "delay": 250
         },
         "server": {
-            "basePath": "http://10.1.80.47:9520",
+            "basePath": "https://school-api.ubtob.com",
             "urlPattern": "^\/api\/"
         }
     },

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

+ 2 - 1
frontend/pc-web/app/view/basic/school/SchoolInfo.js

@@ -58,7 +58,8 @@ Ext.define('school.view.basic.school.SchoolInfo', {
                 name: 'school_phone',
                 bind: '{schoolPhone}',
                 fieldLabel: '联系电话',
-                columnWidth: 1
+                columnWidth: 1,
+                maxLength: 50
             }, {
                 xtype: "textfield",
                 name: "school_address",

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

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

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

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

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

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

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

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

BIN
frontend/pc-web/resources/images/auth-background.jpg


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

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