Explorar o código

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

FANGLH %!s(int64=6) %!d(string=hai) anos
pai
achega
05373a927b

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

@@ -23,7 +23,7 @@
 
   <select id="getInOutRecord" resultType="java.util.Map">
     SELECT COUNT(*) count,RECORD_TYPE type,RECORD_DATE date FROM (
-    SELECT RECORD_TYPE,DATE_FORMAT(RECORD_DATE,'%H:%i') RECORD_DATE FROM OUT_IN_RECORD WHERE DATE_FORMAT(RECORD_DATE,'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d')
+    SELECT RECORD_TYPE,DATE_FORMAT(RECORD_DATE,'%Y-%m-%d %H:%i') RECORD_DATE FROM OUT_IN_RECORD WHERE DATE_FORMAT(RECORD_DATE,'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d')
     AND SCHOOL_ID = #{schoolId}
     ) SOURCE GROUP BY RECORD_TYPE,RECORD_DATE ORDER BY DATE
   </select>

+ 10 - 10
applications/school/school-server/src/main/resources/mapper/ScoreMapper.xml

@@ -560,20 +560,20 @@
         <if test="item.sd_stuNumber != null">
           sd_stuNumber = #{item.sd_stuNumber,jdbcType=VARCHAR},
         </if>
-        <if test="sd_total != null" >
-          sd_total = #{sd_total,jdbcType=INTEGER}
+        <if test="item.sd_total != null" >
+          sd_total = #{item.sd_total,jdbcType=INTEGER},
         </if>
-        <if test="sd_class_rank != null" >
-          sd_class_rank = #{sd_class_rank,jdbcType=INTEGER},
+        <if test="item.sd_class_rank != null" >
+          sd_class_rank = #{item.sd_class_rank,jdbcType=INTEGER},
         </if>
-        <if test="sd_grade_rank != null" >
-          sd_grade_rank = #{sd_grade_rank,jdbcType=INTEGER},
+        <if test="item.sd_grade_rank != null" >
+          sd_grade_rank = #{item.sd_grade_rank,jdbcType=INTEGER},
         </if>
-        <if test="sd_class_average != null" >
-          sd_class_average = #{sd_class_average,jdbcType=DOUBLE},
+        <if test="item.sd_class_average != null" >
+          sd_class_average = #{item.sd_class_average,jdbcType=DOUBLE},
         </if>
-        <if test="sd_grade_average != null" >
-          sd_grade_average = #{sd_grade_average,jdbcType=DOUBLE},
+        <if test="item.sd_grade_average != null" >
+          sd_grade_average = #{item.sd_grade_average,jdbcType=DOUBLE},
         </if>
       </set>
       WHERE sd_id= #{item.sd_id,jdbcType=BIGINT}

+ 15 - 0
frontend/pc-web/app/model/Score.js

@@ -18,5 +18,20 @@ Ext.define('school.model.Score', {
     }, {
         name: 'sd_remark',
         type: 'string'
+    }, {
+        name: 'sd_total',
+        type: 'float'
+    }, {
+        name: 'sd_grade_average',
+        type: 'float'
+    }, {
+        name: 'sd_grade_rank',
+        type: 'int'
+    }, {
+        name: 'sd_class_average',
+        type: 'float'
+    }, {
+        name: 'sd_class_rank',
+        type: 'int'
     }]
 });

+ 12 - 0
frontend/pc-web/app/view/Interaction/mailbox/Detail.js

@@ -60,6 +60,11 @@ Ext.define('school.view.interaction.maibox.Detail', {
                 fieldLabel: "内容",
                 columnWidth: 1,
                 readOnly: true
+            }, {
+                xtype: 'mfilefield',
+                name: 'mailbox_files',
+                fieldLabel: '附件',
+                readOnly: true
             }, {
                 xtype: 'textareafield',
                 name: 'mb_reply',
@@ -89,5 +94,12 @@ Ext.define('school.view.interaction.maibox.Detail', {
             }]
         });
         this.callParent();
+    },
+    listeners: {
+        load: function(form, data) {
+            let fileField = form.down('mfilefield');
+            fileField.value = data.main.mailbox_files
+            fileField.renderMF(fileField);
+        }
     }
 });

+ 37 - 1
frontend/pc-web/app/view/Interaction/score/Detail.js

@@ -11,7 +11,7 @@ Ext.define('school.view.interaction.score.Detail', {
 
     // _readUrl: 'http://10.1.80.36:9520/api/school/score/read',
     _readUrl: '/api/school/score/read',
-    // _saveUrl: 'http://10.1.80.47:9520/api/school/score/save',
+    // _saveUrl: 'http://10.1.80.36:9520/api/school/score/save',
     _saveUrl: '/api/school/score/save',
     // _deleteUrl: 'http://10.1.80.47:9520/api/school/score/delete',
     _deleteUrl: '/api/school/score/delete',
@@ -163,6 +163,42 @@ Ext.define('school.view.interaction.score.Detail', {
                         xtype: 'numberfield',
                         minValue: 0
                     }
+                }, {
+                    text: '满分',
+                    dataIndex: 'sd_total',
+                    allowBlank: false,
+                    editor: {
+                        xtype: 'numberfield',
+                        minValue: 0
+                    }
+                }, {
+                    text: '年级平均分',
+                    dataIndex: 'sd_grade_average',
+                    editor: {
+                        xtype: 'numberfield',
+                        minValue: 0
+                    }
+                }, {
+                    text: '年级排名',
+                    dataIndex: 'sd_grade_rank',
+                    editor: {
+                        xtype: 'numberfield',
+                        minValue: 0
+                    }
+                }, {
+                    text: '班级平均分',
+                    dataIndex: 'sd_class_average',
+                    editor: {
+                        xtype: 'numberfield',
+                        minValue: 0
+                    }
+                }, {
+                    text: '班级排名',
+                    dataIndex: 'sd_class_rank',
+                    editor: {
+                        xtype: 'numberfield',
+                        minValue: 0
+                    }
                 }, {
                     text: '备注',
                     dataIndex: 'sd_remark',

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

@@ -7,7 +7,7 @@ Ext.define('school.view.interaction.score.List', {
 
     controller: 'interaction-score-list',
 
-    // dataUrl: 'http://10.1.80.47:9520/api/school/score/list',
+    // dataUrl: 'http://10.1.80.36:9520/api/school/score/list',
     dataUrl: '/api/school/score/list',
     caller: 'ScorePublish',
     pathKey: 'score',

+ 3 - 2
frontend/pc-web/app/view/core/form/FormPanel.js

@@ -328,7 +328,7 @@ Ext.define('school.view.core.form.FormPanel', {
     clearDirty: function() {
         let me = this;
         let detailGrids = me.query('detailGridField');
-        let fields = me.getForm().getFields().items;
+        let fields = me.formItems;
         
         Ext.Array.each(fields, function(f) {
             f.resetOriginalValue ? f.resetOriginalValue() : '';
@@ -341,7 +341,8 @@ Ext.define('school.view.core.form.FormPanel', {
     setEditable: function(able) {
         let me = this,
         viewModel = me.getViewModel(),
-        items = me.getForm().getFields().items;
+        // items = me.getForm().getFields().items;
+        items = me.formItems;
 
         let detailGrids = me.query('detailGridField');
 

+ 13 - 5
frontend/pc-web/app/view/core/form/field/FileField.js

@@ -57,6 +57,10 @@ Ext.define('school.view.core.form.field.FileField', {
         return this.getValueField().value;
     },
 
+	resetOriginalValue: function() {
+		this.getValueField().resetOriginalValue();
+	},
+	
     getValueField: function () {
         return this.items.items[0].items.items[0];
     },
@@ -69,12 +73,11 @@ Ext.define('school.view.core.form.field.FileField', {
     },
 	renderMF: function(f){
 		f.setHtml(null);
-		var form = f.ownerCt;			
 		if(f.value != null && f.value.toString().trim() != ''){
 			f.download(f.value,f.name);
 		}
-		if(typeof(form.readOnly)!="undefined"){
-			f.setReadOnly(form.readOnly);
+		if(typeof(f.readOnly)!="undefined"){
+			f.setReadOnly(f.readOnly);
 		}
 	},
 	/**
@@ -181,13 +184,13 @@ Ext.define('school.view.core.form.field.FileField', {
 				fileName: f.name,
 				value: name,
 				columnWidth: w,
-				readOnly: false,
 				editable: false,
 				filepath: f.fullPath,
 				accessPath: f.accessPath,
 				filesize: f.size,
 				_id:f.id,
-				fieldStyle: 'background:#E0EEEE;'
+				fieldStyle: 'background:#E0EEEE;',
+				readOnly: me.readOnly
 			}));
 		});
 		me.dirty = false;
@@ -210,6 +213,7 @@ Ext.define('school.view.core.form.field.FileField', {
 	},
 	setReadOnly: function(bool){
 		//只读情况下限制不允许上传
+		this.readOnly = bool;
 		var f=this.down('filefield');
 		if(f.button&&f.fileInputEl){
 			//若界面配置字段可修改则允许传附件 
@@ -219,6 +223,10 @@ Ext.define('school.view.core.form.field.FileField', {
 				f.fileInputEl.dom.setAttribute('disabled',bool);	
 			}else f.fileInputEl.dom.removeAttribute('disabled');			
 		}
+		let files = this.query('trashfield');
+		Ext.Array.each(files, function(fe) {
+			fe.setReadOnly(bool);
+		});
 	},
 	setFieldStyle: function(str) {
 

+ 4 - 0
frontend/pc-web/app/view/core/form/field/RemoteImgField.js

@@ -126,6 +126,10 @@ Ext.define('school.view.core.form.field.RemoteImgField', {
         fileField.button.setDisabled(val);
     },
 
+    resetOriginalValue: function() {
+		this.getValueField().resetOriginalValue();
+	},
+
     /**
      * 上传附件
      */

+ 20 - 0
frontend/pc-web/app/view/core/form/field/TrashField.js

@@ -14,6 +14,26 @@ Ext.define('school.view.core.form.field.TrashField', {
 	triggers: {
 		foo: {
 			cls: 'x-form-download-trigger',
+			hideOnReadOnly: false,
+			/**
+			 * onClick和handler的区别:
+			 * onClick要先于handler触发,并且handler的触发是在onClick中进行的
+			 */
+			onClick: function() {
+				var me = this,
+					args = arguments,
+					e = me.clickRepeater ? args[1] : args[0],
+					handler = me.handler,
+					field = me.field;
+				// 这里去掉了 !field.readOnly 条件以保证只读下也能点击下载
+				if (handler &&  me.isFieldEnabled()) {
+					Ext.callback(me.handler, me.scope, [
+						field,
+						me,
+						e
+					], 0, field);
+				}
+			},
 			handler: function(e){
 				this.download();
 			},

+ 2 - 10
frontend/pc-web/app/view/home/Home.js

@@ -39,16 +39,11 @@ Ext.define('school.view.home.Home', {
 
         latyout: 'responsivecolumn',
         defaults: {
-            userCls: 'x-home-chart big-50 small-50',
+            userCls: 'x-home-chart big-100 small-100',
         },
         items: [{
-            xtype: 'studentgender',
+            xtype: 'inoutrecord',
             padding: '0 0 0 14',
-            margin: '0 16 0 0',
-        }, {
-            xtype: 'chinessavg',
-            padding: '0 0 0 14',
-            margin: 0,
         }]
     }],
 
@@ -59,18 +54,15 @@ Ext.define('school.view.home.Home', {
 
     listeners: {
         onTabActivate: function(p) {
-            return;
             p.refreshId = window.setInterval((p.refreshStores.bind(p)()).bind(p), p.REFRESH_INTERVALS);
         },
         onTabDeactivate: function(p) {
-            return;
             p.lastTime = 0;
             window.clearInterval(p.refreshId);
         }
     },
 
     refreshStores: function() {
-        return;
         var me = this,
         lastTime = me.lastTime || 0,
         now = Ext.Date.now(),

+ 37 - 0
frontend/pc-web/app/view/home/HomeModel.js

@@ -6,6 +6,43 @@ Ext.define('school.view.home.HomeModel', {
     },
 
     stores: {
+        infoData: {
+            fields: [],
+            autoLoad: true,
+            proxy: {
+                type: 'ajax',
+                // url: 'http://10.1.80.36:9520/api/school/portal/home',
+                url: '/api/school/portal/home',
+                timeout: 8000,
+                actionMethods: {
+                    read: 'GET'
+                },
+                reader: {
+                    type: 'json'
+                },
+                listeners: {
+                    exception: function(proxy, response, operation, eOpts) {
+                        var p = Ext.getCmp('infocard');
+                        p && p.setLoading(false);
+                    }
+                }
+            },
+            listeners: {
+                beforeload: function() {
+                    var p = Ext.getCmp('infocard');
+                        p && p.setLoading(true);
+                },
+                load: function(s, d) {
+                    var p = Ext.getCmp('infocard');
+                        p && p.setLoading(false);
+
+                    if(!d) return;
+                    var res = d[0] ? (d[0].data ? (d[0].data.data || {}) : {}) : {};
+
+                    Ext.getCmp('infocard').addCardItems(res);
+                }
+            }
+        },
         studentgender: {
             fields: ['x', 'y'],
             data: [{

+ 12 - 24
frontend/pc-web/app/view/home/InfoCard.js

@@ -34,15 +34,20 @@ Ext.define('school.view.home.InfoCard', {
 
         Ext.apply(me, {
             cards: {
-                staff: {
-                    title: '职工人数',
+                student: {
+                    title: '学生人数',
+                    color: 'blue',
+                    viewType: 'home-infocardlist-unauditcheckin',
+                },
+                teacher: {
+                    title: '教职工人数',
                     color: 'yellow',
                     viewType: 'home-infocardlist-saleout',
                 },
-                teacher: {
-                    title: '教师人数',
-                    color: 'purple',
-                    viewType: 'home-infocardlist-purchasein',
+                parent: {
+                    title: '家长人数',
+                    color: 'default',
+                    viewType: 'home-infocardlist-unauditsaleout',
                 },
                 grade: {
                     title: '年级',
@@ -53,16 +58,6 @@ Ext.define('school.view.home.InfoCard', {
                     title: '班级',
                     color: 'pink',
                     viewType: 'home-infocardlist-recment',
-                },
-                student: {
-                    title: '学生人数',
-                    color: 'blue',
-                    viewType: 'home-infocardlist-unauditcheckin',
-                },
-                parent: {
-                    title: '家长人数',
-                    color: 'default',
-                    viewType: 'home-infocardlist-unauditsaleout',
                 }
             },
             userCls: 'x-info-card ' + me.userCls,
@@ -97,14 +92,7 @@ Ext.define('school.view.home.InfoCard', {
     },
 
     initCardItems: function() {
-        this.addCardItems({
-            staff: 39,
-            teacher: 89,
-            grade: 6,
-            class: 36,
-            student: 980,
-            parent: 1783
-        });
+        this.addCardItems({});
     },
 
     addCardItems: function(infoData) {

+ 1 - 0
frontend/pc-web/app/view/home/InfoCard.scss

@@ -80,6 +80,7 @@ $card-box-height: 110px;
     }
 
     .x-mask {
+        border: none !important;
         background-color: transparent;
     }
 }

+ 105 - 0
frontend/pc-web/app/view/home/charts/InOutRecord.js

@@ -0,0 +1,105 @@
+Ext.define('school.view.home.charts.InOutRecord', {
+    extend: 'school.view.core.chart.ChartBase',
+    xtype: 'inoutrecord',
+
+    id: 'inoutrecord',
+
+    title: '学生出入校数据',
+
+    initComponent: function () {
+        var me = this;
+
+        Ext.apply(me, {
+            items: [{
+                xtype: 'echartsbase',
+                bind: {
+                    store: '{infoData}',
+                },
+                createOption: me.createOption
+            }]
+        });
+
+        me.callParent(arguments);
+    },
+
+    createOption: function (store) {
+        var inData = [],
+            outData = [];
+
+        Ext.Array.each(store.getData().items[0].data.data.inoutRecord, function (d) {
+            if(d.type == 1) {
+                inData.push([
+                    d.date, d.count
+                ]);
+            }else {
+                outData.push([
+                    d.date, d.count
+                ]);
+            }
+        });
+
+        return {
+            color: [
+                '#64B0E4',
+                '#FF1038'
+            ],
+            tooltip: {
+                trigger: 'axis'
+            },
+            legend: {
+                left: 0,
+                data: ['入校', '出校'],
+                icon: 'rect',
+                itemWidth: 10,
+                itemHeight: 2
+            },
+            grid: {
+                left: 0,
+                right: 16,
+                bottom: 5,
+                top: 40,
+                borderColor: '#E5EAEF',
+                containLabel: true
+            },
+            xAxis: {
+                type: 'time',
+                boundaryGap: false,
+                axisLine: {
+                    lineStyle: {
+                        color: '#E5EAEF',
+                    }
+                },
+                axisLabel: {
+                    color: '#485465'
+                },
+            },
+            yAxis: {
+                type: 'value',
+                axisLine: {
+                    lineStyle: {
+                        color: '#E5EAEF',
+                    }
+                },
+                splitLine: {
+                    lineStyle: {
+                        color: ['#E5EAEF']
+                    }
+                },
+                axisLabel: {
+                    color: '#485465'
+                }
+            },
+            series: [{
+                name: '入校',
+                showSymbol: true,
+                type: 'line',
+                data: inData
+            }, {
+                name: '出校',
+                showSymbol: true,
+                type: 'line',
+                data: outData
+            }]
+        }
+    }
+});