You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							347 lines
						
					
					
						
							11 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							347 lines
						
					
					
						
							11 KiB
						
					
					
				| var HistoryPanel = function (parent) { | |
|     this.Parent = parent; | |
|     this.ResultList = new ResultList(this, '#history-result-list'); | |
| 
 | |
|     this.Startup = function () { | |
|         this.ResultList.Startup(); | |
|         this.InitDataGrid(); | |
|         this.InitDateTimes(); | |
| 
 | |
|         $('#dialog-close').on('click', this.HideEditDialog.bind(this)); | |
|         $('#delete-dialog-close').on('click', this.HideDeleteDialog.bind(this)); | |
|         $('#dialog-cancel').on('click', this.HideDeleteDialog.bind(this)); | |
|         $('#query-button').on('click', this.OnQueryButtonClick.bind(this)); | |
|         $('#query-button').trigger('click'); | |
|     }; | |
| 
 | |
|     this.InitDataGrid = function () { | |
|         $('#task-grid').datagrid({ | |
|             columns: [[ | |
|                 { field: 'ReleaseTime', title: '释放时间', align: 'center', width: 80, formatter: this.ShowDetailInfo.bind(this) }, | |
|                 { field: 'Height', title: '高度(米)', align: 'center', width: 30 }, | |
|                 { field: 'Manage', title: '操作', align: 'center', width: 40, formatter: this.OperateColumn.bind(this) } | |
|             ]], | |
|             striped: true, | |
|             singleSelect: false, | |
|             fitColumns: true, | |
|             fit: true, | |
|             scrollbarSize: 0, | |
|             onLoadSuccess: function (data) { | |
|                 for (var i = 0; i < data.rows.length; i++) { | |
|                     $('.datagrid-btable tr').eq(i).find('.edit').off('click').on('click', this.ShowEditDialog.bind(this, i)); | |
|                     $('.datagrid-btable tr').eq(i).find('.delete').off('click').on('click', this.ShowDeleteDialog.bind(this, i)); | |
|                 } | |
|             }.bind(this), | |
|             onSelect: this.OnTaskSelected.bind(this), | |
|             onUnselect: this.OnTaskUnselected.bind(this) | |
|         }); | |
|     }; | |
| 
 | |
|     this.InitDateTimes = function () { | |
|         $('#start-date').datetimebox({ | |
|             panelWidth: 190, | |
|             panelHeight: 230, | |
|             panelAlign: 'right', | |
|             showSeconds: false, | |
|             currentText: '现在' | |
|         }); | |
| 
 | |
|         $('#end-date').datetimebox({ | |
|             panelWidth: 190, | |
|             panelHeight: 230, | |
|             panelAlign: 'right', | |
|             showSeconds: false, | |
|             currentText: '现在' | |
|         }); | |
| 
 | |
|         var startDate = moment(new Date()).subtract(1, 'months').format('YYYY/MM/DD HH:mm'); | |
|         $('#start-date').datetimebox("setValue", startDate); | |
|     }; | |
| 
 | |
|     this.OnTaskSelected = function (index, task) { | |
|         this.LoadData(task); | |
| 
 | |
|         var selections = $('#task-grid').datagrid('getSelections'); | |
|         if (selections.length > 1) { | |
|             this.ResultList.DisableSwitch = true; | |
|             this.ResultList.ShowMask(); | |
|         } | |
|     }; | |
| 
 | |
|     this.OnTaskUnselected = function (index, row) { | |
|         // Remove data layer | |
|         this.Parent.Map.RemoveLayer(row.Id); | |
| 
 | |
|         // Reset result list if no task selected | |
|         var selections = $('#task-grid').datagrid('getSelections'); | |
|         if (selections.length === 0) { | |
|             this.ResultList.Reset(); | |
|             return; | |
|         } | |
| 
 | |
|         // Resize mask of result list | |
|         this.ResultList.DisableSwitch = (selections.length !== 1); | |
|         this.ResultList.ResizeMask(); | |
|     }; | |
| 
 | |
|     this.LoadData = function (task) { | |
|         $.getJSON("http://{0}/bj/getresult/{1}.json".format(Config.ApiRoot, task.Id), function (data) { | |
|             this.Parent.Map.LoadAverageData(task.Id, task, data); | |
|             this.ResultList.SetData(task.Id, [task.Latitude, task.Longitude], data); | |
|         }.bind(this)); | |
|     }; | |
| 
 | |
|     this.OnQueryButtonClick = function () { | |
|         this.ReloadAllLabels(); | |
|         this.ReloadDataGrid(); | |
|     }; | |
| 
 | |
|     this.ReloadAllLabels = function () { | |
|         $.ajax({ | |
|             type: "POST", | |
|             dataType: 'text', | |
|             url: '/Beijing/GetUserTags', | |
|             data: { | |
|                 userId: parseInt($('#user-info').attr('userid')) | |
|             }, | |
|             success: function (result) { | |
|                 this.CreateAllLabels(JSON.parse(result)); | |
|             }.bind(this) | |
|         }); | |
|     }; | |
| 
 | |
|     this.CreateAllLabels = function (data) { | |
|         var list = $('.all-label-list'); | |
|         if (data.length === 0) { | |
|             list.find('.no-tags').show(); | |
|             return; | |
|         } | |
| 
 | |
|         data.forEach(function (item) { | |
|             var label = $('<a href="javascript:;" tagId="{0}">{1}<span class="clear-btn"><i></i></span></a>'.format(item.Id, item.Name)); | |
|             label.on('click', this.SetActiveLabel.bind(this)); | |
|             label.find('.clear-btn').on('click', this.RemoveAllLabel.bind(this)); | |
|             list.append(label); | |
|         }.bind(this)); | |
|     }; | |
| 
 | |
|     this.SetActiveLabel = function (event) { | |
|         $(event.target).toggleClass('active'); | |
|         this.ReloadDataGrid(); | |
|     }; | |
| 
 | |
|     this.RemoveAllLabel = function (event) { | |
|         var aLabel = null; | |
| 
 | |
|         if ($(event.target).parent().is('a')) | |
|             aLabel = $(event.target).parent(); | |
|         else | |
|             aLabel = $(event.target).parents('a'); | |
| 
 | |
|         aLabel.remove(); | |
| 
 | |
|         if ($('.all-label-list a').length === 0) | |
|             $('.all-label-list').find('.no-tags').show(); | |
| 
 | |
|         this.Relayout(); | |
|         this.ClearLabel(parseInt(aLabel.text())); | |
|     }; | |
| 
 | |
|     this.ClearLabel = function (name) { | |
|         $.ajax({ | |
|             type: "POST", | |
|             dataType: 'json', | |
|             url: '/Beijing/DeleteTagsByName', | |
|             data: { | |
|                 userId: parseInt($('#user-info').attr('userid')), | |
|                 name: name | |
|             }, | |
|             success: function (result) { | |
|             }.bind(this) | |
|         }); | |
|     }; | |
| 
 | |
|     this.GetSeletedLabelId = function () { | |
|         var tagIds = []; | |
|         var items = $('.all-label-list a.active'); | |
|         items.each(function (index, item) { | |
|             var text = $(item).text(); | |
|             tagIds.push(parseInt(text)); | |
|         }.bind(this)); | |
| 
 | |
|         return tagIds; | |
|     }; | |
| 
 | |
|     this.ReloadDataGrid = function () { | |
|         $('#task-grid').datagrid({ | |
|             method: "POST", | |
|             url: '/Beijing/GetTasks', | |
|             queryParams: { | |
|                 userId: parseInt($('#user-info').attr('userid')), | |
|                 startTime: $("#start-date").datetimebox('getValue'), | |
|                 endTime: $("#end-date").datetimebox('getValue'), | |
|                 tags: this.GetSeletedLabelId() | |
|             } | |
|         }); | |
|     }; | |
| 
 | |
|     this.ShowDetailInfo = function (val) { | |
|         return moment(val).format('YYYY/MM/DD HH:mm'); | |
|     }; | |
| 
 | |
|     this.OperateColumn = function () { | |
|         return '<span class="edit"></span><span class="delete"></span>'; | |
|     }; | |
|      | |
|     this.ShowEditDialog = function (i, event) { | |
|         event.stopPropagation(); | |
| 
 | |
|         $('#label').val(''); | |
|         $('.dialog-manage').show(); | |
|         $('#dialog-label-list').find('h2').hide(); | |
|          | |
|         var rows = $("#task-grid").datagrid('getRows'); | |
|         $.ajax({ | |
|             type: "POST", | |
|             dataType: 'json', | |
|             url: '/Beijing/GetTaskTags', | |
|             data: { | |
|                 userId: parseInt($('#user-info').attr('userid')), | |
|                 taskId: rows[i].Id | |
|             }, | |
|             success: function (result) { | |
|                 this.CreateDialogLabel(result); | |
|                 this.SetDialogHeight(); | |
|                 $('#dialog-add-label').off('click').on('click', this.DialogAddLabelButton.bind(this, rows[i].Id)); | |
|             }.bind(this) | |
|         }); | |
|     }; | |
| 
 | |
|     this.CreateDialogLabel = function (data) { | |
|         var list = $('#dialog-label-list'); | |
|         list.find('a').remove(); | |
| 
 | |
|         if (data.length === 0) { | |
|             list.find('.dialog-no-tags').show(); | |
|             return; | |
|         } | |
|         data.forEach(function (item) { | |
|             var label = $('<a href="javascript:;" tagId="{0}">{1}<span class="clear-btn"><i></i></span></a>'.format(item.Id, item.Name)); | |
|             label.find('.clear-btn').on('click', this.RemoveLabel.bind(this)); | |
|             list.append(label); | |
|         }.bind(this)); | |
|     }; | |
| 
 | |
|     this.ShowDeleteDialog = function (i, event) { | |
|         event.stopPropagation(); | |
|         $('.dialog-delete').show(); | |
| 
 | |
|         var row = $("#task-grid").datagrid('getRows')[i]; | |
|         $('.dialog-clear h2').text('确定删除释放时间为「{0}」的任务吗?'.format(moment(row.ReleaseTime).format('YYYY/MM/DD HH:mm'))); | |
|         $('#dialog-sure').on('click', this.DeleteCurrentLabel.bind(this, row.Id)); | |
|     }; | |
| 
 | |
|     this.DeleteCurrentLabel = function (id) { | |
|         this.HideDeleteDialog(); | |
| 
 | |
|         $.ajax({ | |
|             type: "POST", | |
|             url: '/Beijing/DeleteTask', | |
|             async: true, | |
|             data: { | |
|                 id: id | |
|             }, | |
|             success: function () { | |
|                 this.ReloadDataGrid(); | |
|             }.bind(this) | |
|         }); | |
|     }; | |
| 
 | |
| 
 | |
|     this.HideDialog = function () { | |
|         this.Parent.HideDialog(); | |
|     }; | |
| 
 | |
|     this.HideEditDialog = function () { | |
|         $('.dialog-manage').hide(); | |
|     }; | |
| 
 | |
|     this.HideDeleteDialog = function () { | |
|         $('.dialog-delete').hide(); | |
|     }; | |
| 
 | |
|     this.DialogAddLabelButton = function (id) { | |
|         var value = $('#label').val().trim(); | |
|         if (value.length === 0) | |
|             return; | |
| 
 | |
|         $.ajax({ | |
|             type: "POST", | |
|             dataType: 'json', | |
|             data: { | |
|                 userId: parseInt($('#user-info').attr('userid')), | |
|                 taskId: id, | |
|                 name: value | |
|             }, | |
|             url: '/Beijing/AddTag', | |
|             success: function (result) { | |
|                 var label = '<a href="javascript:;" tagid="{0}">{1}<span class="clear-btn"><i></i></span></a>'.format(result, value); | |
|                 $('#dialog-label-list').append(label).find('.clear-btn').on('click', this.RemoveLabel.bind(this)); | |
|                 this.SetDialogHeight(); | |
|             }.bind(this) | |
|         }); | |
|     }; | |
| 
 | |
|     this.RemoveLabel = function (event) { | |
|         var label = null; | |
|         if ($(event.target).parent().is('a')) | |
|             label = $(event.target).parent(); | |
|         else | |
|             label = $(event.target).parents('a'); | |
| 
 | |
|         label.remove(); | |
|         this.DeleteLabel(parseInt(label.attr('tagid'))); | |
|         this.SetDialogHeight(); | |
|     }; | |
| 
 | |
|     this.DeleteLabel = function (id) { | |
|         $.ajax({ | |
|             type: "POST", | |
|             dataType: 'json', | |
|             url: '/Beijing/DeleteTag', | |
|             data: { | |
|                 id: id | |
|             }, | |
|             success: function (result) { | |
|             }.bind(this) | |
|         }); | |
|     }; | |
| 
 | |
|     this.SetDialogHeight = function () { | |
|         var dialog = $('.dialog-manage .dialog-content'); | |
|         var label = $('#dialog-label-list'); | |
|         var number = label.find('a').length; | |
|         if (number > 3) { | |
|             label.find('h2').hide(); | |
|             dialog.height(Math.ceil(number / 3) * 40 + 100); | |
|         } | |
|         else if (number === 0) { | |
|             label.find('h2').show(); | |
|             dialog.height(140); | |
|         } | |
|         else { | |
|             label.find('h2').hide(); | |
|             dialog.height(138); | |
|         } | |
|     }; | |
| 
 | |
|     this.Relayout = function () { | |
|         var windowHeight = $(window).height(); | |
|         var labelHeight = $('#history-slider').find('.label-list:first').height(); | |
|         var tableHeight = $('#history-slider').find('.calc-table:first').height(); | |
| 
 | |
|         var resultList = $('#history-result-list'); | |
|         resultList.find('.calc-list ul').height(windowHeight - labelHeight - tableHeight - 490); | |
|         this.ResultList.ResizeMask(); | |
|     }; | |
| }; |