Bladeren bron

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

guq 7 jaren geleden
bovenliggende
commit
05ceb00afc
37 gewijzigde bestanden met toevoegingen van 721 en 370 verwijderingen
  1. 5 5
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxClazzCurriculumServiceImpl.java
  2. 11 3
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxNotifyServiceImpl.java
  3. 13 3
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxTaskNotifyServiceImpl.java
  4. 1 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxVoteServiceImpl.java
  5. 5 1
      applications/school/school-server/src/main/resources/application.yml
  6. 4 4
      frontend/pc-web/app.json
  7. 16 0
      frontend/pc-web/app/model/Score.js
  8. 0 52
      frontend/pc-web/app/view/Interaction/access/Access.js
  9. 140 0
      frontend/pc-web/app/view/Interaction/access/List.js
  10. 4 13
      frontend/pc-web/app/view/Interaction/homework/Release.js
  11. 151 0
      frontend/pc-web/app/view/Interaction/mailbox/List.js
  12. 4 12
      frontend/pc-web/app/view/Interaction/notice/SchoolNotice.js
  13. 69 0
      frontend/pc-web/app/view/Interaction/score/Detail.js
  14. 170 0
      frontend/pc-web/app/view/Interaction/score/List.js
  15. 8 0
      frontend/pc-web/app/view/Interaction/score/ListController.js
  16. 3 3
      frontend/pc-web/app/view/Interaction/timetable/Detail.js
  17. 0 0
      frontend/pc-web/app/view/Interaction/timetable/Detail.scss
  18. 5 5
      frontend/pc-web/app/view/Interaction/timetable/List.js
  19. 8 0
      frontend/pc-web/app/view/Interaction/timetable/ListController.js
  20. 2 2
      frontend/pc-web/app/view/basic/class/ClassInfoController.js
  21. 1 1
      frontend/pc-web/app/view/basic/class/ListCard.js
  22. 1 1
      frontend/pc-web/app/view/basic/class/ListCardController.js
  23. 4 2
      frontend/pc-web/app/view/basic/school/SchoolInfo.js
  24. 18 0
      frontend/pc-web/app/view/core/form/FormPanel.js
  25. 0 8
      frontend/pc-web/app/view/interact/timetable/ListController.js
  26. 8 2
      frontend/pc-web/app/view/viewport/ViewportController.js
  27. 20 215
      frontend/pc-web/app/view/viewport/ViewportModel.js
  28. 8 8
      frontend/pc-web/resources/json/navigation.json
  29. 4 4
      frontend/wechat-web/src/components/MeetingSignItem.jsx
  30. 7 7
      frontend/wechat-web/src/modules/accountBind/AccountBind.jsx
  31. 3 3
      frontend/wechat-web/src/modules/accountBind/BindMenu.jsx
  32. 12 6
      frontend/wechat-web/src/modules/meeting/MeetingSignIn.jsx
  33. 7 1
      frontend/wechat-web/src/modules/user/UserInfo.js
  34. 2 2
      frontend/wechat-web/src/modules/vote/VoteDetailPage.js
  35. 2 2
      frontend/wechat-web/src/modules/vote/VoteListParent.jsx
  36. 4 4
      frontend/wechat-web/src/modules/vote/VoteListTeacher.jsx
  37. 1 0
      frontend/wechat-web/src/redux/reducers/redUserInfo.js

+ 5 - 5
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxClazzCurriculumServiceImpl.java

@@ -11,10 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 
 @Service
@@ -75,9 +72,12 @@ public class WxClazzCurriculumServiceImpl implements WxClazzCurriculumService {
 		List<Map<String,Object>> curThurs = new ArrayList<>();
 		List<Map<String,Object>> curTuess = new ArrayList<>();
 		List<Map<String,Object>> curWeds = new ArrayList<>();
-		SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm");
+		SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");
+		dateFormat.setTimeZone(TimeZone.getTimeZone("GMT-6"));
 		for (ClazzCurriculumDO cc:curricula) {
 			Long curFri = cc.getCurFri();
+			//System.err.println(cc.getCurStartTime());
+			//System.err.println(dateFormat.format(cc.getCurStartTime()));
 			if (ObjectUtils.isNotEmpty(curFri)){
 				Map<String, Object> curFriMap = new HashMap<>();
 				curFriMap.put("startTime",dateFormat.format(cc.getCurStartTime()));

+ 11 - 3
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxNotifyServiceImpl.java

@@ -37,6 +37,9 @@ public class WxNotifyServiceImpl implements WxNotifyService {
 	@Autowired
 	private WxParentsMapper wxParentsMapper;
 
+	@Autowired
+	private WxParentsStuMapper wxParentsStuMapper;
+
 
 	/**
 	 * 获取系统消息和使用帮助
@@ -103,9 +106,14 @@ public class WxNotifyServiceImpl implements WxNotifyService {
 					notifyrecordsDO.setNotifyId(notifyDO.getNotifyId());
 					notifyrecordsDO.setStuId(l);
 					notifyrecordsMapper.save(notifyrecordsDO);
-					ParentsDO parentsDO = wxParentsMapper.get(l);
-					SchoolDO schoolDO = wxSchoolMapper.get(parentsDO.getSchoolId());
-					this.wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),parentsDO.getOpenid(), "h0BkcnTo24b2jsficMeVO0B17GvE-VzlPvF0fVXea4w", "您好,您有一条通知", schoolDO.getSchoolName(),teacherMapper.get(notifyCreator).getTeacherName(),format.format(new Date()),notifyDetails, "点击查看详情", "");
+					List<ParentsStuDO> parentsStuDOS = wxParentsStuMapper.listByStuId(l);
+					if (parentsStuDOS.size()>0){
+						for (ParentsStuDO ps:parentsStuDOS) {
+							ParentsDO parentsDO = wxParentsMapper.get(ps.getParentId());
+							SchoolDO schoolDO = wxSchoolMapper.get(parentsDO.getSchoolId());
+							this.wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),parentsDO.getOpenid(), "h0BkcnTo24b2jsficMeVO0B17GvE-VzlPvF0fVXea4w", "您好,您有一条通知", schoolDO.getSchoolName(),teacherMapper.get(notifyCreator).getTeacherName(),format.format(new Date()),notifyDetails, "点击查看详情", "");
+						}
+					}
 				}
 			}
 			return "创建成功";

+ 13 - 3
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxTaskNotifyServiceImpl.java

@@ -42,6 +42,9 @@ public class WxTaskNotifyServiceImpl implements WxTaskNotifyService {
 	@Autowired
 	private WxSchoolMapper wxSchoolMapper;
 
+	@Autowired
+	private WxParentsStuMapper wxParentsStuMapper;
+
 	/**
 	 * 发布作业
 	 * @param taskString
@@ -74,9 +77,16 @@ public class WxTaskNotifyServiceImpl implements WxTaskNotifyService {
 				SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
 				SchoolDO schoolDO = wxSchoolMapper.get(schoolId);
 				List<Long> longs = JSON.parseArray(taskNotifier, Long.class);
-				for (Long parentId:longs) {
-					this.wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),parentsMapper.get(parentId).getOpenid(), "WwKtiHd4lso9axuavfLdpHIVbzTiopOTyh_uCsL3ZI8",taskTitle,"-",format.format(new Date()), taskContext,"-", "点击查看详情", "");
-				}
+				for (Long stuId:longs) {
+					List<ParentsStuDO> parentsStuDOS = wxParentsStuMapper.listByStuId(stuId);
+					if (parentsStuDOS.size()>0){
+						for (ParentsStuDO ps:parentsStuDOS) {
+							ParentsDO parentsDO = parentsMapper.get(ps.getParentId());
+							this.wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),parentsDO.getOpenid(), "WwKtiHd4lso9axuavfLdpHIVbzTiopOTyh_uCsL3ZI8",taskTitle,"-",format.format(new Date()), taskContext,"-", "点击查看详情", "");
+						}
+						}
+					}
+
 			}
 			return "作业发布成功";
 		}else {

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

@@ -104,7 +104,7 @@ public class WxVoteServiceImpl implements WxVoteService {
 			}
 			List<Long> stuId = JSON.parseArray(stuIds, Long.class);
 			List<Long> list1 = removeDuplicate(stuId);
-			new ArrayList<Long>();
+			//new ArrayList<Long>();
 			for (Long l:list1) {
 				List<ParentsStuDO> parentsStuDOS = wxParentsStuMapper.listByStuId(l);
 				if (parentsStuDOS.size() > 0) {

+ 5 - 1
applications/school/school-server/src/main/resources/application.yml

@@ -1,5 +1,5 @@
 school:
-  uploadPath: D:/wxschool/files/
+  uploadPath: /wxschool/files/
 spring:
   application:
     name: school-server
@@ -44,6 +44,10 @@ spring:
   jackson:
     date-format: yyyy-MM-dd HH:mm
     time-zone: GMT+8
+  servlet:
+    multipart:
+      max-file-size: 100Mb
+      max-request-size: 100Mb
 eureka:
   instance:
     leaseRenewalIntervalInSeconds: 10

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

@@ -298,8 +298,8 @@
             "type": "yui"
         },
         "server": {
-            "basePath": "https://saas-api.usoftchina.com",
-            "urlPattern": "^\/api\/"
+            "basePath": "https://school-api.ubtob.com/api/school",
+            "urlPattern": "^\/"
         }
     },
 
@@ -321,8 +321,8 @@
             "delay": 250
         },
         "server": {
-            "basePath": "http://10.1.81.61:8560",
-            "urlPattern": "^\/api\/"
+            "basePath": "https://school-api.ubtob.com/api/school",
+            "urlPattern": "^\/"
         }
     },
 

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

@@ -0,0 +1,16 @@
+/**
+ * 年级
+ */
+Ext.define('school.model.Score', {
+    extend: 'school.model.Base',
+    fields: [{
+        name: 'number', // 学号
+        type: 'int'
+    }, {
+        name: 'name', // 姓名
+        type: 'string'
+    }, {
+        name: 'score', // 成绩
+        type: 'float'
+    }]
+});

+ 0 - 52
frontend/pc-web/app/view/Interaction/access/Access.js

@@ -1,52 +0,0 @@
-/**
- * 出入校记录
- */
-Ext.define('school.view.Interaction.access.Access',{
-    // extend: 'school.view.core.form.FormPanel',
-    extend: 'Ext.grid.Panel',
-    xtype: 'interaction-access-access',
-
-    //字段属性
-    _title: '出入校记录',
-    _idField: 'id',
-    _codeField: 'pu_code',
-    _statusField: 'pu_status',
-    _statusCodeField: 'pu_statuscode',
-    _auditmanField: 'pu_auditman',
-    _auditdateField: 'pu_auditdate',
-    _relationColumn: 'pd_puid',
-    _readUrl: '/api/purchase/purchase/read',
-    _saveUrl: '/api/purchase/purchase/save',
-    _auditUrl: '/api/purchase/purchase/audit',
-    _unAuditUrl: '/api/purchase/purchase/unAudit',
-    _deleteUrl: '/api/purchase/purchase/delete',
-    _turnInUrl: '/api/purchase/purchase/turnProdin',
-    initId: 0,
-
-    initComponent: function () {
-        Ext.apply(this, {
-            title: '出入校记录',
-            store: Ext.create('Ext.data.Store', {
-                fields:['portrait', 'name', 'sex', 'class', 'StudentID', 'state', 'time'],
-                data:[
-                    {portrait:"头像1", name:"张三", sex:'男', class:'三年级二班', StudentID:'0001', state:'出校', time:"01/10/2004 16:00"},
-                    {portrait:"头像2", name:"李四", sex:'男', class:'三年级二班', StudentID:'0002', state:'出校', time:"04/01/2004 8:00"},
-                    {portrait:"头像3", name:"红红", sex:'女', class:'三年级二班', StudentID:'0003', state:'在校', time:"04/01/2004 19:00"},
-                    {portrait:"头像4", name:"王五", sex:'男', class:'三年级二班', StudentID:'0004', state:'出校', time:"04/01/2004 22:50"},
-                    {portrait:"头像5", name:"六六", sex:'男', class:'三年级二班', StudentID:'0005', state:'出校', time:"04/01/2004 9:00"},
-                ]
-            }),
-            columns: [
-                {text: '头像',  dataIndex:'portrait'},
-                {text: '姓名',  dataIndex:'name'},
-                {text: '性别',  dataIndex:'sex'},
-                {text: '班级',  dataIndex:'class'},
-                {text: '学号',  dataIndex:'StudentID'},
-                {text: '状态',  dataIndex:'state'},
-                {text: '时间',  dataIndex:'time', xtype: 'datecolumn', format:'Y-m-d H:i'},
-            ],
-            forceFit: true,
-        });
-        this.callParent();
-    }
-});

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

@@ -0,0 +1,140 @@
+/**
+ * 出入校记录
+ */
+Ext.define('school.view.interaction.access.List', {
+    extend: 'school.view.core.base.BasePanel',
+    xtype: 'interaction-access-list',
+
+    dataUrl: '/api/interaction/access/list',
+    initComponent: function () {
+        var me = this;
+        Ext.apply(this, {
+            searchField: [{
+                xtype: 'textfield',
+                name: 'keyword',
+                fieldLabel: '姓名'
+            }, {
+                xtype: 'condatefield',
+                name: 'term',
+                columnWidth: 0.5,
+                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: true,
+                toolBtns: [],
+                columns: [{
+                    text: '头像',
+                    dataIndex: 'portrait'
+                }, {
+                    text: '姓名',
+                    dataIndex: 'name'
+                }, {
+                    text: '性别',
+                    dataIndex: 'sex'
+                }, {
+                    text: '班级',
+                    dataIndex: 'class'
+                }, {
+                    text: '学号',
+                    dataIndex: 'StudentID'
+                }, {
+                    text: '状态',
+                    dataIndex: 'state'
+                }, {
+                    text: '时间',
+                    dataIndex: 'time',
+                    xtype: 'datecolumn',
+                    format: 'Y-m-d H:i'
+                }, ]
+            },
+        });
+        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;
+    },
+});

+ 4 - 13
frontend/pc-web/app/view/Interaction/homework/Release.js

@@ -1,7 +1,7 @@
 /**
  * 作业发布
  */
-Ext.define('school.view.Interaction.homework.Release', {
+Ext.define('school.view.interaction.homework.Release', {
     extend: 'school.view.core.form.FormPanel',
     xtype: 'interaction-homework-release',
 
@@ -71,19 +71,10 @@ Ext.define('school.view.Interaction.homework.Release', {
                 name: 'content',
                 fieldLabel: "内容",
                 columnWidth: 1,
-            }, {
+            }],
+            toolBtns: [{
                 xtype: 'button',
-                text : '发布',
-                style: {
-                    left: '50%',
-                    transform: 'translateX(-50%)',
-                    borderRadius: '4px'
-                },
-                listeners: {
-                    click: function() {
-                        // 点击后做的事情
-                    },
-                }
+                text: '发布',
             }]
         });
         this.callParent();

+ 151 - 0
frontend/pc-web/app/view/Interaction/mailbox/List.js

@@ -0,0 +1,151 @@
+/**
+ * 校长信箱
+ */
+Ext.define('school.view.interaction.mailbox.List', {
+    extend: 'school.view.core.base.BasePanel',
+    xtype: 'interaction-mailbox-list',
+
+    dataUrl: '/api/interaction/mailbox/list',
+    initComponent: function() {
+        var me = this;
+        Ext.apply(this, {
+            searchField: [{
+                xtype: 'textfield',
+                name: 'keyword',
+                fieldLabel: '关键字'
+            }, {
+                xtype: 'condatefield',
+                name: 'term',
+                columnWidth: 0.5,
+                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: '删除'
+                }],
+                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'
+                }]
+            },
+        });
+        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;
+     },
+});

+ 4 - 12
frontend/pc-web/app/view/Interaction/notice/SchoolNotice.js

@@ -1,7 +1,7 @@
 /**
  * 学校通知
  */
-Ext.define('school.view.Interaction.notice.SchoolNotice', {
+Ext.define('school.view.interaction.notice.SchoolNotice', {
     extend: 'school.view.core.form.FormPanel',
     xtype: 'interaction-notice-schoolnotice',
 
@@ -67,18 +67,10 @@ Ext.define('school.view.Interaction.notice.SchoolNotice', {
                 name: 'content',
                 fieldLabel: "内容",
                 columnWidth: 1,
-            }, {
+            }],
+            toolBtns: [{
                 xtype: 'button',
-                text : '发布',
-                style: {
-                    left: '50%',
-                    transform: 'translateX(-50%)',
-                },
-                listeners: {
-                    click: function() {
-                        // 点击后做的事情
-                    },
-                }
+                text: '发布',
             }]
         });
         this.callParent();

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

@@ -0,0 +1,69 @@
+Ext.define('school.view.interaction.score.Detail', {
+    extend: 'school.view.core.form.FormPanel',
+    xtype: 'interaction-score-detail',
+
+    _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/xxxx/read',
+    // _saveUrl: 'http://10.1.80.35:8560/api/sale/saledown/update',
+    _saveUrl: '/api/sale/sss/update',
+    // _toSaleUrl: 'http://10.1.80.35:8560/api/sale/saledown/toSale',
+    _toSaleUrl: '/api/sale/sss/toSale',
+    initId: 0,
+
+    codeInHeader: true,
+
+    initComponent: function () {
+        let me = this;
+        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: "及格分"
+            }, {
+                name: "score",
+                xtype: "detailGridField",
+                detnoColumn: 'no',
+                storeModel: 'school.model.Score',
+                deleteDetailUrl: '/api/sale/sale/deleteDetail',
+                allowEmpty: true,
+                showCount: false,
+                emptyRows: 10,
+                rowViewModel: {},
+                columns: [{
+                    text: '学生编号',
+                    dataIndex: 'number'
+                }, {
+                    text: '姓名',
+                    dataIndex: 'name'
+                }, {
+                    text: '成绩',
+                    dataIndex: 'score'
+                }]
+            }],
+        });
+        this.callParent();
+    }
+});

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

@@ -0,0 +1,170 @@
+/**
+ * 成绩发布
+ */
+Ext.define('school.view.interaction.score.List', {
+    extend: 'school.view.core.base.BasePanel',
+    xtype: 'interaction-score-list',
+
+    controller: 'interaction-score-list',
+
+    dataUrl: '/api/interaction/score/list',
+    initComponent: function() {
+        var me = this;
+        Ext.apply(this, {
+            searchField: [{
+                xtype: 'textfield',
+                name: 'term',
+                fieldLabel: '学期'
+            }, {
+                xtype: 'textfield',
+                name: 'grade',
+                fieldLabel: '年级'
+            }, {
+                xtype: 'textfield',
+                name: 'class',
+                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: '添加',
+                    handler: 'onAddClick'
+                }, {
+                    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('interaction-score-detail', '课程表', 'interaction-score-detail'+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;
+     },
+});

+ 8 - 0
frontend/pc-web/app/view/Interaction/score/ListController.js

@@ -0,0 +1,8 @@
+Ext.define('school.view.interaction.score.ListController', {
+    extend: 'Ext.app.ViewController',
+    alias: 'controller.interaction-score-list',
+
+    onAddClick: function() {
+        school.util.BaseUtil.openTab('interaction-score-detail', '录入成绩', 'interaction-score-detail-add'); 
+    }
+});

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

@@ -1,8 +1,8 @@
-Ext.define('school.view.interact.timetable.Detail', {
+Ext.define('school.view.interaction.timetable.Detail', {
     extend: 'school.view.core.form.FormPanel',
-    xtype: 'interact-timetable-detail',
+    xtype: 'interaction-timetable-detail',
 
-    _title: '学生信息',
+    _title: '课程表',
     _idField: 'student_id',
     _codeField: 'student_number',
     _statusField: null,

+ 0 - 0
frontend/pc-web/app/view/interact/timetable/Detail.scss → frontend/pc-web/app/view/Interaction/timetable/Detail.scss


+ 5 - 5
frontend/pc-web/app/view/interact/timetable/List.js → frontend/pc-web/app/view/Interaction/timetable/List.js

@@ -1,13 +1,13 @@
 /**
  * 课程表
  */
-Ext.define('school.view.interact.timetable.List', {
+Ext.define('school.view.interaction.timetable.List', {
     extend: 'school.view.core.base.BasePanel',
-    xtype: 'interact-timetable-list',
+    xtype: 'interaction-timetable-list',
 
-    controller: 'interact-timetable-list',
+    controller: 'interaction-timetable-list',
 
-    dataUrl: '/api/interact/timetable/list',
+    dataUrl: '/api/interaction/timetable/list',
     initComponent: function() {
         var me = this;
         Ext.apply(this, {
@@ -94,7 +94,7 @@ Ext.define('school.view.interact.timetable.List', {
                 }],
                 listeners: {
                     itemclick: function(view, record, item, index, e, eOpts) {
-                        school.util.BaseUtil.openTab('interact-timetable-detail', '课程表', 'interact-timetable-detail'+record.get('id'), {
+                        school.util.BaseUtil.openTab('interaction-timetable-detail', '课程表', 'interaction-timetable-detail'+record.get('id'), {
                             initId: record.get('id')
                         }); 
                     }

+ 8 - 0
frontend/pc-web/app/view/Interaction/timetable/ListController.js

@@ -0,0 +1,8 @@
+Ext.define('school.view.interaction.timetable.ListController', {
+    extend: 'Ext.app.ViewController',
+    alias: 'controller.interaction-timetable-list',
+
+    onAddClick: function() {
+        school.util.BaseUtil.openTab('interaction-timetable-detail', '新增课程表', 'interaction-timetable-detail-add'); 
+    }
+});

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

@@ -114,8 +114,8 @@ Ext.define('school.view.basic.class.ClassInfoController', {
         id = data.id,
         type = data.type;
 
-        var title = type == 'school' ? '新增年级' : '新增班级';
-        var sumType = type == 'school' ? 'grade' : 'class';
+        var title = type == 'SCHOOL' ? '新增年级' : '新增班级';
+        var sumType = type == 'SCHOOL' ? 'GRADE' : 'CLASS';
         if(!win) {
             win = Ext.create('Ext.window.Window', {
                 width: 300,

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

@@ -50,7 +50,7 @@ Ext.define('school.view.basic.class.ListCard', {
         classDetail = refs.classdetail,
         list, cardList;
 
-        if(node.data.type == 'class') {
+        if(node.data.type == 'CLASS') {
             currentlist.removeAll();
             listCard.setVisible(false);
             classDetail.setVisible(true);

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

@@ -6,7 +6,7 @@ Ext.define('school.view.basic.class.ListCardController', {
         var me = this,
         view = me.view,
         viewModel = me.getViewModel(),
-        grade = viewModel.get('grade');
+        grade = viewModel.get('store_grade');
 
         view.showNode(grade.getRootNode());
     },

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

@@ -9,7 +9,8 @@ Ext.define('school.view.basic.school.SchoolInfo', {
     // controller: 'purchase-purchase-formpanel',
     // viewModel: 'purchase-purchase-formpanel',
 
-    readUrl: 'http://10.1.80.35:9560/school/read',
+    // readUrl: 'http://10.1.80.35:9560/school/read',
+    readUrl: '/school/read',
 
     layout: 'column',
     autoScroll: true,
@@ -89,7 +90,8 @@ Ext.define('school.view.basic.school.SchoolInfo', {
 
         me.setLoading(true);
         school.util.BaseUtil.request({
-            url: 'http://10.1.80.35:9560/school/save',
+            // url: 'http://10.1.80.35:9560/school/save',
+            url: '/school/save',
             method: 'POST',
             params: JSON.stringify(values)
         })

+ 18 - 0
frontend/pc-web/app/view/core/form/FormPanel.js

@@ -23,6 +23,7 @@ Ext.define('school.view.core.form.FormPanel', {
     },
 
     items: [],
+    toolBtns: [],
 
     invalidText: '表单校验有误,请检查后重试', // 校验未通过提示内容
     dirtyAuditText: '表单数据有修改,是否先保存修改?', // 有修改时点击审核提示内容
@@ -31,11 +32,28 @@ Ext.define('school.view.core.form.FormPanel', {
 
     initComponent: function () {
         let me = this;
+
+        Ext.apply(me, {
+            dockedItems: [{
+                xtype: 'toolbar',
+                dock: 'top',
+                hidden: me.toolBtns.length == 0,
+                items: me.getToolBarItems(),
+            }],
+        });
         me.callParent(arguments);
         me.initFormItems();
 
     },
 
+    getToolBarItems: function() {
+        let me = this, items = [];
+        
+        items = Ext.Array.merge(['->'], me.toolBtns);
+
+        return items;
+    },
+
     initFormItems: function() {
         let me = this;
         school.util.FormUtil.setItems(me);

+ 0 - 8
frontend/pc-web/app/view/interact/timetable/ListController.js

@@ -1,8 +0,0 @@
-Ext.define('school.view.interact.timetable.ListController', {
-    extend: 'Ext.app.ViewController',
-    alias: 'controller.interact-timetable-list',
-
-    onAddClick: function() {
-        school.util.BaseUtil.openTab('interact-timetable-detail', '新增课程表', 'interact-timetable-detail-add'); 
-    }
-});

+ 8 - 2
frontend/pc-web/app/view/viewport/ViewportController.js

@@ -40,7 +40,10 @@ Ext.define('school.view.viewport.ViewportController', {
     showAuth: function() {
         var me = this;
         //读取学校
-        school.util.BaseUtil.request({url:'http://10.1.80.35:9560/school/read/1'})
+        school.util.BaseUtil.request({
+            // url:'http://10.1.80.35:9560/school/read/1'
+            url:'/school/read/1'
+        })
         .then(function(res) {
             if(res.success) {
                 let d = {
@@ -65,7 +68,10 @@ Ext.define('school.view.viewport.ViewportController', {
     showMain: function() {
         var me = this;
         //读取学校
-        school.util.BaseUtil.request({url:'http://10.1.80.35:9560/school/read/1'})
+        school.util.BaseUtil.request({
+            // url:'http://10.1.80.35:9560/school/read/1'
+            url:'/api/school/read/1'
+        })
         .then(function(res) {
             if(res.success) {
                 debugger

+ 20 - 215
frontend/pc-web/app/view/viewport/ViewportModel.js

@@ -33,234 +33,39 @@ Ext.define('school.view.viewport.ViewportModel', {
         },
         store_grade: {
             type: 'tree',
+            autoLoad: true,
             // model: 'school.model.Grade',
             fields: [{
                 name: 'text'
             }],
             proxy: {
                 type: 'ajax',
-                url: 'http://10.1.80.35:9560/grade/read/1',
+                // url: 'http://10.1.80.35:9520/grade/read/1',
+                url: '/grade/read/1',
                 reader: {
-                    type: 'json'
+                    transform: {
+                        fn: function(data) {
+                            let schools = data.data.children;
+                            schools.map(function(s) {
+                                s.id = 'school-' + s.id;
+                                let classes = s.children;
+                                classes.map(function(c) {
+                                    c.id = 'class-' + c.id;
+                                    return c;
+                                });
+                                return s;
+                            });
+                            return schools;
+                        },
+                        scope: this
+                    }
                 }
             },
             root: {
                 text: '全年级',
-                type: 'school',
+                type: 'SCHOOL',
                 expanded: true
             },
-            data1: [{
-                id: 'g1',
-                text: '一年级',
-                // grade_id: '1',
-                // grade_name: '一年级',
-                // grade_status: '1',
-                // grade_remarks: 'beizhu',
-                // grade_adress: '值dadada dad',
-                // school_id: '1',
-                type: 'grade',
-                children: [{
-                    id: 'c11',
-                    text: '一年级1班',
-                    type: 'class',
-                    leaf: true
-                }, {
-                    id: 'c12',
-                    text: '一年级2班',
-                    type: 'class',
-                    leaf: true
-                }, {
-                    id: 'c13',
-                    text: '一年级3班',
-                    type: 'class',
-                    leaf: true
-                }, {
-                    id: 'c14',
-                    text: '一年级4班',
-                    type: 'class',
-                    leaf: true
-                }, {
-                    id: 'c15',
-                    text: '一年级5班',
-                    type: 'class',
-                    leaf: true
-                }]
-            }, {
-                id: 'g2',
-                text: '二年级',
-                type: 'grade',
-                children: [{
-                    id: 'c21',
-                    text: '二年级1班',
-                    type: 'class',
-                    leaf: true
-                }, {
-                    id: 'c22',
-                    text: '二年级2班',
-                    type: 'class',
-                    leaf: true
-                }, {
-                    id: 'c23',
-                    text: '二年级3班',
-                    type: 'class',
-                    leaf: true
-                }, {
-                    id: 'c24',
-                    text: '二年级4班',
-                    type: 'class',
-                    leaf: true
-                }]
-            }, {
-                id: 'g3',
-                text: '三年级',
-                type: 'grade',
-                children: [{
-                    id: 'c31',
-                    text: '三年级1班',
-                    type: 'class',
-                    leaf: true
-                }, {
-                    id: 'c32',
-                    text: '三年级2班',
-                    type: 'class',
-                    leaf: true
-                }, {
-                    id: 'c33',
-                    text: '三年级3班',
-                    type: 'class',
-                    leaf: true
-                }, {
-                    id: 'c34',
-                    text: '三年级4班',
-                    type: 'class',
-                    leaf: true
-                }, {
-                    id: 'c35',
-                    text: '三年级5班',
-                    type: 'class',
-                    leaf: true
-                }, {
-                    id: 'c36',
-                    text: '三年级6班',
-                    type: 'class',
-                    leaf: true
-                }]
-            }, {
-                id: 'g4',
-                text: '四年级',
-                type: 'grade',
-                children: [{
-                    id: 'c41',
-                    text: '四年级1班',
-                    type: 'class',
-                    leaf: true
-                }, {
-                    id: 'c42',
-                    text: '四年级2班',
-                    type: 'class',
-                    leaf: true
-                }, {
-                    id: 'c43',
-                    text: '四年级3班',
-                    type: 'class',
-                    leaf: true
-                }, {
-                    id: 'c44',
-                    text: '四年级4班',
-                    type: 'class',
-                    leaf: true
-                }, {
-                    id: 'c45',
-                    text: '四年级5班',
-                    type: 'class',
-                    leaf: true
-                }, {
-                    id: 'c46',
-                    text: '四年级6班',
-                    type: 'class',
-                    leaf: true
-                }]
-            }, {
-                id: 'g5',
-                text: '五年级',
-                type: 'grade',
-                children: [{
-                    id: 'c51',
-                    text: '五年级1班',
-                    type: 'class',
-                    leaf: true
-                }, {
-                    id: 'c52',
-                    text: '五年级2班',
-                    type: 'class',
-                    leaf: true
-                }, {
-                    id: 'c53',
-                    text: '五年级3班',
-                    type: 'class',
-                    leaf: true
-                }, {
-                    id: 'c54',
-                    text: '五年级4班',
-                    type: 'class',
-                    leaf: true
-                }, {
-                    id: 'c55',
-                    text: '五年级5班',
-                    type: 'class',
-                    leaf: true
-                }, {
-                    id: 'c56',
-                    text: '五年级6班',
-                    type: 'class',
-                    leaf: true
-                }]
-            }, {
-                id: 'g6',
-                text: '六年级',
-                type: 'grade',
-                children: [{
-                    id: 'c61',
-                    text: '六年级1班',
-                    type: 'class',
-                    leaf: true
-                }, {
-                    id: 'c62',
-                    text: '六年级2班',
-                    type: 'class',
-                    leaf: true
-                }, {
-                    id: 'c63',
-                    text: '六年级3班',
-                    type: 'class',
-                    leaf: true
-                }, {
-                    id: 'c64',
-                    text: '六年级4班',
-                    type: 'class',
-                    leaf: true
-                }, {
-                    id: 'c65',
-                    text: '六年级5班',
-                    type: 'class',
-                    leaf: true
-                }, {
-                    id: 'c66',
-                    text: '六年级6班',
-                    type: 'class',
-                    leaf: true
-                }, {
-                    id: 'c6y1',
-                    text: '六年级扬帆班',
-                    type: 'class',
-                    leaf: true
-                }]
-            }, {
-                id: 'gn',
-                text: '新的年级',
-                type: 'grade',
-                children: []
-            }]
         }
     }
 });

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

@@ -46,20 +46,20 @@
         "text": "作业发布",
         "view": "interaction-homework-release"
     }, {
-        "id": "interact-timetable-list",
+        "id": "interaction-timetable-list",
         "text": "课程表",
-        "view": "interact-timetable-list"
+        "view": "interaction-timetable-list"
     }, {
-        "id": "grade",
+        "id": "interaction-score-list",
         "text": "成绩发布",
-        "view": "grade"
+        "view": "interaction-score-list"
     }, {
-        "id": "interaction-mailbox-mailbox",
+        "id": "interaction-mailbox-list",
         "text": "校长信箱",
-        "view": "interaction-mailbox-mailbox"
+        "view": "interaction-mailbox-list"
     }, {
-        "id": "interaction-access-access",
+        "id": "interaction-access-list",
         "text": "出入校记录",
-        "view": "interaction-access-access"
+        "view": "interaction-access-list"
     }]
 }]

+ 4 - 4
frontend/wechat-web/src/components/MeetingSignItem.jsx

@@ -35,7 +35,7 @@ export default class MeetingSignItem extends Component {
                 <div className='signContentlayout'>
                     <div className='titleLayout'>
                         <div className='titleText'>{meetingBean.title}</div>
-                        <div className={meetingBean.meetStatusCode === 3 ? 'meetStatusRed' : 'meetStatusGray'}>
+                        <div className={meetingBean.meetStatusCode === 2 ? 'meetStatusRed' : 'meetStatusGray'}>
                             {meetingBean.meetStatus}
                         </div>
                     </div>
@@ -52,8 +52,8 @@ export default class MeetingSignItem extends Component {
                         <div className='valueText'>{meetingBean.sponsor}</div>
                     </div>
                     <div className='bottomLayout'>
-                        <span className={meetingBean.signStatusCode === 3
-                             ? 'signBtnEnable' : 'signBtnActive'}
+                        <span className={(meetingBean.signStatusCode === 3
+                            || meetingBean.meetStatusCode !== 2) ? 'signBtnEnable' : 'signBtnActive'}
                               onClick={this.onMeetingSign}>
                             {meetingBean.signStatus}
                         </span>
@@ -67,7 +67,7 @@ export default class MeetingSignItem extends Component {
         e.stopPropagation();
         const {meetingBean} = this.state
 
-        if (meetingBean.signStatusCode != 3) {
+        if (meetingBean.signStatusCode != 3 && meetingBean.meetStatusCode === 2) {
             alert('提示', '确定对该会议签到吗?', [
                 {
                     text: '取消', onPress: () => {

+ 7 - 7
frontend/wechat-web/src/modules/accountBind/AccountBind.jsx

@@ -199,17 +199,17 @@ class AccountBind extends Component {
         fetchPost(API.BIND_OPENID, {
             userPhone: phone,
             code: code,
-            openid: this.props.userInfo.parent ? this.props.userInfo.parent.openid : this.props.userInfo.teacher.openid,
+            openid: this.props.userInfo.userOpenid,
         }).then(response => {
             Toast.hide()
             if (mType == 'parents') {
                 switchUser({
                     role: 1,
-                })
+                })()
             } else if (mType == 'teacher') {
                 switchUser({
                     role: 2,
-                })
+                })()
             }
 
             if (response && response.data) {
@@ -233,11 +233,11 @@ class AccountBind extends Component {
                             teacherBirthday: getStrValue(teacherDOS, 'teacherBirthday'),
                             teacherSex: getStrValue(teacherDOS, 'teacherSex'),//1:男,2:女
                         }
-                    })
+                    })()
                 } else {
                     switchUser({
                         teacher: ''
-                    })
+                    })()
                 }
 
                 if (response.data.parentsDOS) {
@@ -258,11 +258,11 @@ class AccountBind extends Component {
                             parentsPhoto: getStrValue(parentsDOS, 'parentsPhoto'),
                             parentsAddress: getStrValue(parentsDOS, 'parentsAddress'),
                         }
-                    })
+                    })()
                 } else {
                     switchUser({
                         parent: ''
-                    })
+                    })()
                 }
             }
             this.props.history.push('/homePage')

+ 3 - 3
frontend/wechat-web/src/modules/accountBind/BindMenu.jsx

@@ -78,6 +78,9 @@ export default class BindMenu extends Component {
             openid: this.openid,
             schoolId: 1
         }).then(response => {
+            switchUser({
+                userOpenid: this.openid,
+            })()
             if (response.data) {
                 if (!isObjEmpty(response.data.teacherDOS)) {
                     const teacherDOS = response.data.teacherDOS[0]
@@ -135,9 +138,6 @@ export default class BindMenu extends Component {
                     bindStatus: 2
                 })
             } else {
-                switchUser({
-                    userOpenid: this.openid,
-                })()
                 this.setState({
                     bindStatus: 1
                 })

+ 12 - 6
frontend/wechat-web/src/modules/meeting/MeetingSignIn.jsx

@@ -111,11 +111,11 @@ class MeetingSignIn extends Component {
                     meetBean.meetId = getIntValue(item, 'meetingId')
                     meetBean.title = getStrValue(item, 'meetingName')
                     meetBean.meetStatusCode = getIntValue(item, 'meetingStatus')
-                    if (meetBean.meetStatusCode === 2) {
+                    if (meetBean.meetStatusCode === 1) {
                         meetBean.meetStatus = '未开始'
-                    } else if (meetBean.meetStatusCode === 3) {
+                    } else if (meetBean.meetStatusCode === 2) {
                         meetBean.meetStatus = '进行中'
-                    } else if (meetBean.meetStatusCode === 4) {
+                    } else if (meetBean.meetStatusCode === 3) {
                         meetBean.meetStatus = '已结束'
                     }
                     meetBean.meetDetail = getStrValue(item, 'meetingDetails')
@@ -176,9 +176,15 @@ class MeetingSignIn extends Component {
             Toast.hide()
             Toast.success('签到成功')
             meetingSignList[index].signStatus = '已签到'
-            meetingSignList[index].signStatusCode = 5
-
-            this.setState({meetingSignList})
+            meetingSignList[index].signStatusCode = 3
+
+            this.setState({meetingSignList},()=>{
+                saveListState({
+                    scrollTop: ReactDOM.findDOMNode(this.container).scrollTop,
+                    listData: this.state.meetingSignList,
+                    pageIndex: mPageIndex,
+                })()
+            })
         }).catch(error => {
             Toast.hide()
 

+ 7 - 1
frontend/wechat-web/src/modules/user/UserInfo.js

@@ -145,7 +145,9 @@ class UserInfo extends Component {
                 <div className="item_flex_1 flex_row_right">
                     <div className='gray-line'
                          style={{height: '34px', background: '#CCCCCC', width: '1px'}}></div>
-                    <text className="margin_left_20" style={{color: "#3680ED"}}>更换</text>
+                    <text className="margin_left_20" style={{color: "#3680ED"}}
+                          onClick={this.onChangePhone}>更换
+                    </text>
                 </div>
             </div>
             <div className='gray-line' style={{height: '1px'}}></div>
@@ -193,6 +195,10 @@ class UserInfo extends Component {
         </div>
     }
 
+    onChangePhone = () => {
+        this.props.history.push('/changephonenumber')
+    }
+
     handlePreview = () => {
         this.setState({
             previewVisible: true,

+ 2 - 2
frontend/wechat-web/src/modules/vote/VoteDetailPage.js

@@ -127,9 +127,9 @@ class VoteDetailPage extends React.Component {
                 voteBean.voteEndDate = getStrValue(item, 'voteEndDate')
                 voteBean.voteRemarks = getStrValue(item, 'voteRemarks')
 
-                const topics = getStrValue(item, 'topics')
+                const topics = getStrValue(item, 'voteTopicDOS')
                 if (!isObjEmpty(topics)) {
-                    voteBean.options = topics[0].options
+                    voteBean.options = topics[0].voteOptionsDOS
                 }
 
                 if (this.props.listState.tabIndex >= 0) {

+ 2 - 2
frontend/wechat-web/src/modules/vote/VoteListParent.jsx

@@ -119,9 +119,9 @@ class VoteListParent extends Component {
                         voteBean.voteEndDate = getStrValue(dataObject, 'voteEndDate')
                         voteBean.voteRemarks = getStrValue(dataObject, 'voteRemarks')
 
-                        const topics = getStrValue(dataObject, 'topics')
+                        const topics = getStrValue(dataObject, 'voteTopicDOS')
                         if (!isObjEmpty(topics)) {
-                            voteBean.options = topics[0].options
+                            voteBean.options = topics[0].voteOptionsDOS
                         }
 
                         voteList.push(voteBean)

+ 4 - 4
frontend/wechat-web/src/modules/vote/VoteListTeacher.jsx

@@ -185,9 +185,9 @@ class VoteListTeacher extends Component {
                     voteBean.voteEndDate = getStrValue(item, 'voteEndDate')
                     voteBean.voteRemarks = getStrValue(item, 'voteRemarks')
 
-                    const topics = getStrValue(item, 'topics')
+                    const topics = getStrValue(item, 'voteTopicDOS')
                     if (!isObjEmpty(topics)) {
-                        voteBean.options = topics[0].options
+                        voteBean.options = topics[0].voteOptionsDOS
                     }
 
                     releaseList.push(voteBean)
@@ -256,9 +256,9 @@ class VoteListTeacher extends Component {
                     voteBean.voteEndDate = getStrValue(item, 'voteEndDate')
                     voteBean.voteRemarks = getStrValue(item, 'voteRemarks')
 
-                    const topics = getStrValue(item, 'topics')
+                    const topics = getStrValue(item, 'voteTopicDOS')
                     if (!isObjEmpty(topics)) {
-                        voteBean.options = topics[0].options
+                        voteBean.options = topics[0].voteOptionsDOS
                     }
 
                     receiveList.push(voteBean)

+ 1 - 0
frontend/wechat-web/src/redux/reducers/redUserInfo.js

@@ -54,6 +54,7 @@ const initListState = {
     userAvatar: '',
     userSex: 0,*/
 
+    userOpenid: '',
     userRole: 0,
     teacher: '',
     parent: '',