ソースを参照

Merge remote-tracking branch 'origin/dev' into dev

chenw 7 年 前
コミット
ab26dc72dd

+ 10 - 0
frontend/pc-web/app/model/access/Role.js

@@ -0,0 +1,10 @@
+/**
+ * 角色
+ */
+Ext.define('school.model.access.Role', {
+    extend: 'school.model.Base',
+    fields: [{
+        name: 'name',
+        type: 'int'
+    }],
+});

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

@@ -0,0 +1,28 @@
+/**
+ * 学生
+ */
+Ext.define('school.model.basic.Student', {
+    extend: 'school.model.Base',
+    fields: [{
+        name: 'student_id', // id
+        type: 'int'
+    }, {
+        name: 'student_number', // 学号
+        type: 'string'
+    }, {
+        name: 'student_name', // 姓名
+        type: 'string'
+    }, {
+        name: 'student_gender', // 性别
+        type: 'string'
+    }, {
+        name: 'student_birth', // 出生日期
+        type: 'date'
+    }, {
+        name: 'student_age', // 年龄
+        type: 'int'
+    }, {
+        name: 'student_address', // 家庭住址
+        type: 'string'
+    }],
+});

+ 16 - 0
frontend/pc-web/app/model/basic/staff/StaffDetail.js

@@ -0,0 +1,16 @@
+/**
+ * 教职员工
+ */
+Ext.define('school.model.basic.staff.StaffDetail', {
+    extend: 'school.model.Base',
+    fields: [{
+        name: 'clazz_id', // id
+        type: 'int'
+    }, {
+        name: 'clazz_name', // 名称
+        type: 'string'
+    }, {
+        name: 'kemu', // 所属年级
+        type: 'string'
+    }],
+});

+ 46 - 6
frontend/pc-web/app/view/basic/class/ClassDetail.js

@@ -23,12 +23,14 @@ Ext.define('school.view.basic.class.ClassDetail', {
             defaultItems: [{
                 xtype: 'hidden',
                 name: 'currentDetail.id',
-                fieldLabel: 'id'
+                fieldLabel: 'id',
+                group: '班级信息',
             }, {
                 xtype: "textfield",
                 name: "currentDetail.name",
                 fieldLabel: "班级名称",
-                columnWidth: 0.5
+                columnWidth: 0.5,
+                group: '班级信息',
             }, {
             //     xtype: 'textfield',
             //     name: 'code',
@@ -37,22 +39,60 @@ Ext.define('school.view.basic.class.ClassDetail', {
                 xtype: 'textfield',
                 name: 'currentDetail.grade',
                 fieldLabel: '所属年级',
-                columnWidth: 0.5
+                columnWidth: 0.5,
+                group: '班级信息',
             }, {
                 xtype: "textfield",
                 name: "address",
                 fieldLabel: "班级地址",
-                columnWidth: 1
+                columnWidth: 1,
+                group: '班级信息',
             }, {
                 xtype: "textfield",
                 name: 'status',
                 fieldLabel: "状态",
-                columnWidth: 0.5
+                columnWidth: 0.5,
+                group: '班级信息',
             }, {
                 xtype: "textfield",
                 name: 'remark',
                 fieldLabel: '备注',
-                columnWidth: 0.5
+                columnWidth: 0.5,
+                group: '班级信息',
+            }, {
+                name: "detailGridField",
+                xtype: "detailGridField",
+                detnoColumn: 'sd_detno',
+                storeModel: 'school.model.basic.Student',
+                deleteDetailUrl: '/api/sale/sale/deleteDetail',
+                allowEmpty: true,
+                showCount: false,
+                group: '学生信息',
+                columns: [{
+                    text: 'id',
+                    dataIndex: 'student_id',
+                    hidden: true
+                }, {
+                    text: '学号',
+                    dataIndex: 'student_number'
+                }, {
+                    text: '姓名',
+                    dataIndex: 'student_name'
+                }, {
+                    text: '性别',
+                    dataIndex: 'student_gender'
+                }, {
+                    text: '出生日期',
+                    dataIndex: 'student_birth',
+                    xtype: 'datecolumn',
+                    format: 'Y-m-d'
+                }, {
+                    text: '年龄',
+                    dataIndex: 'student_age'
+                }, {
+                    text: '家庭住址',
+                    dataIndex: 'student_address'
+                }]
             }]
         });
         this.callParent();

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

@@ -1,5 +1,5 @@
 /**
- * 班级信息
+ * 班级组织信息
  */
 Ext.define('school.view.basic.class.ClassInfo', {
     extend: 'Ext.panel.Panel',
@@ -59,8 +59,11 @@ Ext.define('school.view.basic.class.ClassInfo', {
     }, {
         region: 'center',
         bodyPadding: 10,
+        layout: 'fit',
         items: [{
             xtype: 'panel',
+            layout: 'fit',
+            scrollable: true,
             tbar: [{
                 padding: '7 0 7 0',
                 ui: 'header',

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

@@ -0,0 +1,143 @@
+Ext.define('school.view.basic.staff.StaffDetail', {
+    extend: 'school.view.core.form.FormPanel',
+    xtype: 'basic-staff-staffdetail',
+
+    // controller: 'sale-b2b-purchasedetail',
+    // viewModel: 'sale-b2b-purchasedetail',
+
+    //字段属性
+    _title: '教职工信息',
+    _idField: 'teacher_id',
+    _codeField: 'teacher_number',
+    _statusField: null,
+    _statusCodeField: null,
+    _auditmanField: null,
+    _auditdateField: null,
+    // _readUrl: 'http://10.1.80.35:8560/api/sale/saledown/read',
+    _readUrl: '/api/sale/saledown/read',
+    // _saveUrl: 'http://10.1.80.35:8560/api/sale/saledown/update',
+    _saveUrl: '/api/sale/saledown/update',
+    // _toSaleUrl: 'http://10.1.80.35:8560/api/sale/saledown/toSale',
+    _toSaleUrl: '/api/sale/saledown/toSale',
+    initId: 0,
+
+    codeInHeader: true,
+
+    initComponent: function () {
+        Ext.apply(this, {
+            defaultItems: [{
+                xtype: 'textfield',
+                name: 'teacher_number',
+                fieldLabel: '工号'
+            }, {
+                xtype: 'textfield',
+                name: 'teacher_name',
+                fieldLabel: '姓名'
+            }, {
+                xtype: "textfield",
+                name: "teacher_phone",
+                fieldLabel: "性别"
+            }, {
+                xtype: 'textfield',
+                name: 'teacher_phone',
+                fieldLabel: '手机号'
+            }, {
+                xtype: "textfield",
+                name: "teacher_jg",
+                fieldLabel: "籍贯"
+            }, {
+                xtype: 'datefield',
+                name: 'teacher_birth',
+                fieldLabel: '出生年月日',
+                format: 'Y-m-d'
+            }, {
+                xtype: 'textfield',
+                name: 'teacher_mz',
+                fieldLabel: '民族'
+            }, {
+                xtype: 'textfield',
+                name: 'teacher_hf',
+                fieldLabel: '婚姻状态'
+            }, {
+                xtype: 'textfield',
+                name: 'teacher_zz',
+                fieldLabel: '政治面貌'
+            }, {
+                xtype: 'textfield',
+                name: 'teacher_address',
+                fieldLabel: '现居住址'
+            }, {
+                xtype: 'textfield',
+                name: 'teacher_jjname',
+                fieldLabel: '紧急联系人'
+            }, {
+                xtype: 'textfield',
+                name: 'teacher_jjphone',
+                fieldLabel: '紧急联系人电话'
+            }, {
+                xtype: 'textfield',
+                name: 'teacher_jjgx',
+                fieldLabel: '紧急联系人关系'
+            }, {
+                xtype: 'textfield',
+                name: 'teacher_xl',
+                fieldLabel: '学历'
+            }, {
+                xtype: 'textfield',
+                name: 'teacher_by',
+                fieldLabel: '毕业学校'
+            }, {
+                xtype: 'textfield',
+                name: 'teacher_zy',
+                fieldLabel: '专业'
+            }, {
+                xtype: 'textfield',
+                name: 'teacher_phone',
+                fieldLabel: '手机号码'
+            }, {
+                xtype: 'textfield',
+                name: 'teacher_email',
+                fieldLabel: '邮箱'
+            }, {
+                xtype: 'textfield',
+                name: 'teacher_app',
+                fieldLabel: '是否开通APP'
+            }, {
+                xtype: 'textfield',
+                name: 'teacher_wechat',
+                fieldLabel: '绑定微信号'
+            }, {
+                xtype: 'textfield',
+                name: 'teacher_type',
+                fieldLabel: '账号类型'
+            }, {
+                xtype: 'textfield',
+                name: 'teacher_gwlx',
+                fieldLabel: '岗位类型'
+            }, {
+                name: "detailGridField",
+                xtype: "detailGridField",
+                detnoColumn: 'sd_detno',
+                storeModel: 'school.model.basic.staff.StaffDetail',
+                deleteDetailUrl: '/api/sale/sale/deleteDetail',
+                allowEmpty: true,
+                showCount: false,
+                columns: [{
+                    text: '任课班级',
+                    dataIndex: 'clazz_id',
+                    hidden: true
+                }, {
+                    text: '任课班级',
+                    dataIndex: 'clazz_name',
+                    editor: {
+                        xtype: 'textfield'
+                    }
+                }, {
+                    text: '科目',
+                    dataIndex: 'kemu'
+                }]
+            }],
+        });
+        this.callParent();
+    },
+});

+ 24 - 7
frontend/pc-web/app/view/basic/staff/StaffList.js

@@ -5,7 +5,7 @@ Ext.define('school.view.basic.staff.StaffList', {
     extend: 'school.view.core.base.BasePanel',
     xtype: 'basic-staff-stafflist',
 
-    // dataUrl: '/api/sale/saledown/list',
+    dataUrl: '/api/basic/staff/list',
     initComponent: function() {
         var me = this;
         Ext.apply(this, {
@@ -41,10 +41,27 @@ Ext.define('school.view.basic.staff.StaffList', {
                 totalProperty: 'data.total',
                 actionColumn: [],
                 selModel: {
-                    type: 'cellmodel'
+                    checkOnly:true,
+                    type:'checkboxmodel',
+                    mode : "MULTI" ,
+                    ignoreRightMouseSelection : false
                 },
-                data: [{
-
+                hiddenTools: false,
+                toolBtns: [{
+                    xtype: 'button',
+                    text: '一键开通'
+                }, {
+                    xtype: 'button',
+                    text: '下载模板'
+                }, {
+                    xtype: 'button',
+                    text: '批量导入'
+                }, {
+                    xtype: 'button',
+                    text: '删除'
+                }, {
+                    xtype: 'button',
+                    text: '新增'
                 }],
                 columns : [{
                     text: '工号',
@@ -71,9 +88,9 @@ Ext.define('school.view.basic.staff.StaffList', {
                 }],
                 listeners: {
                     itemclick: function(view, record, item, index, e, eOpts) {
-                        // saas.util.BaseUtil.openTab('sale-b2b-purchasedetail', '客户采购单', 'sale-b2b-purchasedetail'+record.id, {
-                        //     initId: record.get('id')
-                        // }); 
+                        school.util.BaseUtil.openTab('basic-staff-staffdetail', '教职工信息', 'basic-staff-staffdetail'+record.get('id'), {
+                            initId: record.get('id')
+                        }); 
                     }
                 }
             },

+ 92 - 0
frontend/pc-web/app/view/basic/student/StudentDetail.js

@@ -0,0 +1,92 @@
+Ext.define('school.view.basic.student.StudentDetail', {
+    extend: 'school.view.core.form.FormPanel',
+    xtype: 'basic-student-studentdetail',
+
+    // controller: 'sale-b2b-purchasedetail',
+    // viewModel: 'sale-b2b-purchasedetail',
+
+    //字段属性
+    _title: '学生信息',
+    _idField: 'student_id',
+    _codeField: 'student_number',
+    _statusField: null,
+    _statusCodeField: null,
+    _auditmanField: null,
+    _auditdateField: null,
+    // _readUrl: 'http://10.1.80.35:8560/api/sale/saledown/read',
+    _readUrl: '/api/sale/saledown/read',
+    // _saveUrl: 'http://10.1.80.35:8560/api/sale/saledown/update',
+    _saveUrl: '/api/sale/saledown/update',
+    // _toSaleUrl: 'http://10.1.80.35:8560/api/sale/saledown/toSale',
+    _toSaleUrl: '/api/sale/saledown/toSale',
+    initId: 0,
+
+    codeInHeader: true,
+
+    initComponent: function () {
+        Ext.apply(this, {
+            defaultItems: [{
+                xtype: 'textfield',
+                name: 'number',
+                fieldLabel: '学号'
+            }, {
+                xtype: 'textfield',
+                name: 'name',
+                fieldLabel: '姓名'
+            }, {
+                xtype: 'textfield',
+                name: 'grade',
+                fieldLabel: '年级'
+            }, {
+                xtype: 'textfield',
+                name: 'class',
+                fieldLabel: '班级'
+            }, {
+                xtype: "textfield",
+                name: "jg",
+                fieldLabel: "籍贯"
+            }, {
+                xtype: 'textfield',
+                name: 'mz',
+                fieldLabel: '民族'
+            }, {
+                xtype: 'textfield',
+                name: 'birth',
+                fieldLabel: '出生日期'
+            }, {
+                xtype: "textfield",
+                name: "address",
+                fieldLabel: "家庭住址"
+            }, {
+                xtype: 'textfield',
+                name: 'teacher_zz',
+                fieldLabel: '政治面貌'
+            }, {
+                name: "parent",
+                xtype: "detailGridField",
+                detnoColumn: 'sd_detno',
+                storeModel: 'school.model.basic.Student',
+                deleteDetailUrl: '/api/sale/sale/deleteDetail',
+                allowEmpty: true,
+                showCount: false,
+                columns: [{
+                    text: '家长姓名',
+                    dataIndex: 'parent_name',
+                    editor: {
+                        xtype: 'textfield'
+                    }
+                }, {
+                    text: '联系电话',
+                    dataIndex: 'parent_phone',
+                    editor: {
+                        xtype: 'numberfield'
+                    }
+                }, {
+                    text: '关系',
+                    dataIndex: 'parent_rel',
+                }]
+            }],
+        });
+        this.callParent();
+    },
+});

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

@@ -0,0 +1,178 @@
+/**
+ * 学生信息
+ */
+Ext.define('school.view.basic.student.StudentList', {
+    extend: 'school.view.core.base.BasePanel',
+    xtype: 'basic-student-studentlist',
+
+    dataUrl: '/api/basic/student/list',
+    initComponent: function() {
+        var me = this;
+        Ext.apply(this, {
+            searchField: [{
+                xtype: 'textfield',
+                name: 'grade',
+                fieldLabel: '年级'
+            }, {
+                xtype: 'textfield',
+                name: 'class',
+                fieldLabel: '班级'
+            }, {
+                xtype: 'textfield',
+                name: 'code',
+                fieldLabel:'学号'
+            }, {
+                xtype: 'textfield',
+                name: 'name',
+                fieldLabel: '姓名'
+            }, {
+                xtype: 'textfield',
+                name: 'parent',
+                fieldLabel: '家长'
+            }],
+        
+            caller: null,
+            _formXtype: null,
+            _title: null,
+            _deleteUrl: null,
+            _batchOpenUrl: null,
+            _batchCloseUrl: null,
+            _batchDeleteUrl: null,
+        
+            gridConfig: {
+                idField: null,
+                codeField: null,
+                statusCodeField: null,
+                dataUrl: me.dataUrl,
+                caller: null,
+                rootProperty: 'data.list',
+                totalProperty: 'data.total',
+                actionColumn: [],
+                selModel: {
+                    checkOnly:true,
+                    type:'checkboxmodel',
+                    mode : "MULTI" ,
+                    ignoreRightMouseSelection : false
+                },
+                hiddenTools: false,
+                toolBtns: [{
+                    xtype: 'button',
+                    text: '下载模板'
+                }, {
+                    xtype: 'button',
+                    text: '上传数据'
+                }, {
+                    xtype: 'button',
+                    text: '一键开通'
+                }, {
+                    xtype: 'button',
+                    text: '添加'
+                }, {
+                    xtype: 'button',
+                    text: '删除'
+                }],
+                columns : [{
+                    text: '学号',
+                    dataIndex: 'code',
+                    width: 150
+                }, {
+                    text: '学生姓名',
+                    dataIndex: 'name',
+                    width: 120
+                }, {
+                    text: '性别',
+                    dataIndex: 'gender',
+                    width: 120
+                }, {
+                    text: '年级',
+                    dataIndex: 'grade'
+                }, {
+                    text: '班级',
+                    dataIndex: 'class'
+                }, {
+                    text: '出生日期',
+                    dataIndex: 'birth',
+                    width: 120
+                }, {
+                    text: '年龄',
+                    dataIndex: 'open'
+                }, {
+                    text: '状态',
+                    dataIndex: 'status'
+                }],
+                listeners: {
+                    itemclick: function(view, record, item, index, e, eOpts) {
+                        school.util.BaseUtil.openTab('basic-student-studentdetail', '教职工信息', 'basic-student-studentdetail'+record.get('id'), {
+                            initId: record.get('id')
+                        }); 
+                    }
+                }
+            },
+        });
+        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;
+     },
+});

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

@@ -12,12 +12,19 @@ Ext.define('school.view.core.base.GridPanel', {
     }],
 
     cls:'core-base-gridpanel',
+
+    selModel: {
+        type: 'cellmodel'
+    },
     
     dataUrl: '',
     dbSearchFields: [],
     condition:'',
     rootProperty: 'data.list',
     totalProperty: 'data.total',
+    hiddenTools: true,
+    toolBtns: [],
+
 
     flexColumn: [{
         flex: 1,
@@ -79,6 +86,11 @@ Ext.define('school.view.core.base.GridPanel', {
 
             Ext.apply(me, {
                 dockedItems:[{
+                    xtype:'toolbar',
+                    dock:'top',
+                    hidden: me.hiddenTools,
+                    items: Ext.Array.merge(['->'], me.toolBtns)
+                }, {
                     xtype: 'pagingtoolbar',
                     dock: 'bottom',
                     cls:'x-basepanel-pagingtoolbar',

+ 3 - 11
frontend/pc-web/app/view/main/Navigation.js

@@ -15,17 +15,9 @@ Ext.define('school.view.main.Navigation', {
     initComponent: function () {
         var me = this;
         var view = new Ext.DataView({
-            store: Ext.create('Ext.data.Store', {
-                autoLoad: true,
-                fields: ['text', 'iconCls'],
-                proxy: {
-                    type: 'ajax',
-                    url: 'resources/json/navigation.json',
-                    reader: {
-                        type: 'json'
-                    }
-                }
-            }),
+            bind: {
+                store: '{navigationMenu}'
+            },
             tpl: new Ext.XTemplate('<ul class="x-navlist">',
                 '<tpl for=".">',
                 '<li class="x-navitem">',

+ 69 - 0
frontend/pc-web/app/view/setting/access/AccessList.js

@@ -0,0 +1,69 @@
+Ext.define('school.view.setting.access.AccessList', {
+    extend: 'Ext.tree.Panel',
+    xtype: 'setting-access-accesslist',
+
+    reserveScrollbar: true,
+    useArrows: true,
+    rootVisible: false,
+    multiSelect: true,
+    singleExpand: false,
+
+    columns: [{
+        xtype: 'treecolumn',
+        text: '菜单',
+        dataIndex: 'text',
+        width: 160
+    }, {
+        text: '显示',
+        dataIndex: 'enable',
+        xtype: 'actioncolumn',
+        menuDisabled: true,
+        align: 'center',
+        handler: 'onToggleEnable',
+        getClass: 'getEnableCls'
+    }],
+
+    initComponent: function() {
+        var me = this;
+        Ext.apply(me, {
+            store: me.getStore()
+        });
+        me.callParent(arguments);
+    },
+
+    getStore: function() {
+        var me = this,
+        parent = me.up('setting-access-roleaccess'),
+        viewModel = parent.getViewModel(),
+        navStore = viewModel.get('navigationMenu'),
+        store, data = [];
+
+        navStore.each(function(r) {
+            var items = r.get('items');
+            var children = items.map(function(item) {
+                return {
+                    text: item.text,
+                    enable: false,
+                    leaf: true
+                }
+            });
+            data.push({
+                expanded: true,
+                text: r.data.text,
+                children: children,
+                enable: false
+            });
+        });
+
+        store = Ext.create('Ext.data.TreeStore', {
+            fields: ['text', 'enable'],
+            root: {
+                text: 'root',
+                expanded: true
+            },
+            data: data,
+        });
+
+        return store;
+    }
+});

+ 18 - 0
frontend/pc-web/app/view/setting/access/RoleAccess.js

@@ -0,0 +1,18 @@
+Ext.define('school.view.setting.access.RoleAccess', {
+    extend: 'Ext.panel.Panel',
+    xtype: 'setting-access-roleaccess',
+
+    controller: 'setting-access-roleaccess',
+    viewModel: 'setting-access-roleaccess',
+
+    layout: 'border',
+
+    items: [{
+        xtype: 'setting-access-roletree',
+        region: 'west',
+        width: 250
+    }, {
+        xtype: 'setting-access-accesslist',
+        region: 'center'
+    }]
+});

+ 14 - 0
frontend/pc-web/app/view/setting/access/RoleAccessController.js

@@ -0,0 +1,14 @@
+Ext.define('school.view.setting.access.RoleAccessController', {
+    extend: 'Ext.app.ViewController',
+    alias: 'controller.setting-access-roleaccess',
+
+    getEnableCls: function(v, m, r) {
+        let checked = r.data.enable;
+        return 'x-grid-checkcolumn' + (checked ? ' x-grid-checkcolumn-checked' : '');
+    },
+
+    onToggleEnable: function(grid, rowIndex, colIndex, actionItem, event, record, row) {
+        let checked = record.get('enable');
+        record.set('enable', !checked);
+    }
+});

+ 46 - 0
frontend/pc-web/app/view/setting/access/RoleAccessModel.js

@@ -0,0 +1,46 @@
+Ext.define('school.view.setting.access.RoleAccessModel', {
+    extend: 'Ext.app.ViewModel',
+    alias: 'viewmodel.setting-access-roleaccess',
+
+    stores: {
+        roleTree: {
+            type: 'tree',
+            fields: [{
+                name: 'text'
+            }],
+            root: {
+                text: '所有角色',
+                expanded: true
+            },
+            data: [{
+                id: 'role1',
+                text: '角色1',
+                leaf: true
+            }, {
+                id: 'role2',
+                text: '角色2',
+                leaf: true
+            }, {
+                id: 'role3',
+                text: '角色3',
+                leaf: true
+            }, {
+                id: 'role4',
+                text: '角色4',
+                leaf: true
+            }, {
+                id: 'role5',
+                text: '角色5',
+                leaf: true
+            }, {
+                id: 'role6',
+                text: '角色6',
+                leaf: true
+            }, {
+                id: 'role7',
+                text: '角色7',
+                leaf: true
+            }]
+        }
+    }
+});

+ 15 - 0
frontend/pc-web/app/view/setting/access/RoleTree.js

@@ -0,0 +1,15 @@
+Ext.define('school.view.setting.access.RoleTree', {
+    extend: 'Ext.tree.Panel',
+    xtype: 'setting-access-roletree',
+
+    columns: [{
+        xtype: 'treecolumn',
+        dataIndex: 'text',
+        flex: 1
+    }],
+
+    bind: {
+        store: '{roleTree}'
+    }
+
+});

+ 75 - 0
frontend/pc-web/app/view/setting/operatelog/OperateLog.js

@@ -0,0 +1,75 @@
+/**
+ * 操作日志
+ */
+Ext.define('school.view.setting.operatelog.OperateLog', {
+    extend: 'school.view.core.base.BasePanel',
+    xtype: 'setting-operatelog-operatelog',
+
+    viewName: 'setting-operatelog-operatelog',
+    dataUrl: '/api/commons/operatelog/list',
+    initComponent: function () {
+        var me = this;
+        Ext.apply(this, {
+            searchField: [{
+                width: 110,
+                name: 'obj',
+                xtype: 'textfield',
+                emptyText : '对象',
+            }, {
+                columnWidth: 0.5,
+                name: 'time',
+                xtype: 'condatefield',
+                fieldLabel : '时间',
+                labelWidth: 50
+            }, {
+                width: 110,
+                name: 'man',
+                xtype: 'textfield',
+                emptyText : '操作人员',
+            }],
+
+            gridConfig: {
+                dataUrl: me.dataUrl,
+                actionColumn: [],
+                selModel: {
+                    type: 'cellmodel'
+                },
+                hiddenTools: true,
+                data: [],
+                columns: [{
+                    text : "id", 
+                    width : 0, 
+                    dataIndex : "id", 
+                    xtype : "numbercolumn",   
+                }, {
+                    text:'单据类型',
+                    dataIndex : "ml_name",
+                    width : 110.0, 
+                }, {
+                    text : "单据编号", 
+                    width : 150.0, 
+                    dataIndex : "ml_code", 
+                }, {
+                    text : "操作", 
+                    dataIndex : "ml_content", 
+                    width : 200.0, 
+                }, {
+                    xtype:'datecolumn',
+                    format:'Y-m-d H:i:s',
+                    text : "操作时间", 
+                    dataIndex : "createTime", 
+                    width : 150.0, 
+                }, {
+                    text : "结果", 
+                    dataIndex : "ml_result", 
+                    width : 150.0, 
+                }, {
+                    text : "操作人员", 
+                    dataIndex : "ml_man", 
+                    width : 110, 
+                }]
+            },
+        });
+        this.callParent(arguments);
+    }
+});

+ 11 - 0
frontend/pc-web/app/view/viewport/ViewportModel.js

@@ -20,6 +20,17 @@ Ext.define('school.view.viewport.ViewportModel', {
     },
 
     stores: {
+        navigationMenu: {
+            autoLoad: true,
+            fields: ['text', 'iconCls'],
+            proxy: {
+                type: 'ajax',
+                url: 'resources/json/navigation.json',
+                reader: {
+                    type: 'json'
+                }
+            }
+        },
         grade: {
             type: 'tree',
             // model: 'school.model.Grade',

+ 6 - 6
frontend/pc-web/resources/json/navigation.json

@@ -14,25 +14,25 @@
         "text": "教职工信息",
         "view": "basic-staff-stafflist"
     }, {
-        "id": "student-info",
+        "id": "basic-student-studentlist",
         "text": "学生信息",
-        "view": "student-info"
+        "view": "basic-student-studentlist"
     }]
 }, {
     "text": "系统设置",
     "iconCls": "x-sa sa-setting",
     "items": [{
-        "id": "role-access",
+        "id": "setting-access-roleaccess",
         "text": "角色授权",
-        "view": "role-access"
+        "view": "setting-access-roleaccess"
     }, {
         "id": "device-param",
         "text": "设备参数",
         "view": "device-param"
     }, {
-        "id": "operation-log",
+        "id": "setting-operatelog-operatelog",
         "text": "操作日志",
-        "view": "operation-log"
+        "view": "setting-operatelog-operatelog"
     }]
 }, {
     "text": "家校互动",