//过滤方法,如果这个方法返回false,则该card不显示 var Filter = function(cardinfo){ return true;//cardinfo.title.indexOf('城战')!=-1; } function setFilter(fun){ Filter = fun; listInit(); } var filterList = { _lastFiler : 'null', "my" : function(){ this._lastFiler='my'; setFilter(function(cardinfo){ return cardinfo.members.indexOf(MYID)!=-1; }) }, "null" : function(){ this._lastFiler='null'; setFilter(function(cardinfo){ return true; }) }, "key" : function(v){ this._lastFiler='key'; setFilter(function(cardinfo){ return cardinfo.title.indexOf(v)!=-1; }) }, "hasLabel" : function(v){ this._lastFiler='hasLabel'; setFilter(function(cardinfo){ return cardinfo.labelIds.indexOf(v)!=-1; }) }, "hasqaLabel" : function(v){ this._lastFiler='hasqaLabel'; setFilter(function(cardinfo){ console.log('fun=== ',cardinfo); if(cardinfo.qalabelIds){ return cardinfo.qalabelIds.indexOf(v)!=-1; }else { return false } }) }, // 根据部门的人员设置的时间来过滤 "hasTodayDone4DeptLabel" : function(v){ this._lastFiler='hasTodayDone4DeptLabel'; console.log('filter v',v); setFilter(function(cardinfo){ console.log('fun=== ',cardinfo); var userList = DATA.yanqidepartmentuser[v]; var todayZeroTime = new Date(new Date().toLocaleDateString()).getTime()*0.001; if(cardinfo.mem_time){ var memTimeList = Object.keys(cardinfo.mem_time); for (let i = 0; i < memTimeList.length; i++) { var userid = memTimeList[i]; if(cardinfo.mem_time[userid]['end']==todayZeroTime && userList.user.indexOf(userid)>0){ return true } } return false; }else { return false } }) }, "hasTodayDone" : function(v){ this._lastFiler='hasTodayDone'; console.log('filter v',v); setFilter(function(cardinfo){ console.log('fun=== ',cardinfo); var userList = DATA.yanqidepartmentuser[v]; var todayZeroTime = new Date(new Date().toLocaleDateString()).getTime()*0.001; if(cardinfo.mem_time){ var memTimeList = Object.keys(cardinfo.mem_time); for (let i = 0; i < memTimeList.length; i++) { var userid = memTimeList[i]; if(cardinfo.mem_time[userid]['end']==todayZeroTime){ return true } } return false; }else { return false } }) } } //事件处理 function emitEventByJSON(json,sendOther){ var act = json.act; if(act=='addcomment'){ if(DATA.card_comments)DATA.card_comments[ json.data._id ] = json.data; }else if(act=='setdescription' || act=='settitle' || act=='addcard' || act=='memberchange' || act=='memtimechange' || act=='labelchange' || act=='attachmentschange' || act=='changesort'){ if(DATA.cards){ var oldListId; if(DATA.cards[ json.data._id ]){ oldListId = DATA.cards[ json.data._id ].listId; } DATA.cards[ json.data._id ] = json.data; DATA.cards[ json.data._id ].oldListId = oldListId; } }else if(act=='setlisttitle' || act=='addlist' || act=='archivedlist'){ if(DATA.lists)DATA.lists[ json.data._id ] = json.data; }else if(act=='addboard' || act=='boardtitlechange' || act=='modifylabel'){ if(DATA.boards)DATA.boards[ json.data._id ] = json.data; }else if(act=='addchecklist' || act=='setchecklistfinish'){ if(!DATA.card_checklists)DATA.card_checklists={}; DATA.card_checklists[ json.data._id ] = json.data; }else if(act=='delchecklist'){ if(!DATA.card_checklists)DATA.card_checklists={}; delete DATA.card_checklists[ json.data._id ]; }else if(act=='delcard'){ // if(DATA.lists)DATA.lists[ json.data._id ] = {}; delete DATA.cards[ json.data._id ]; } EVENT.emit( json.act , json.data ); if(sendOther!==false){ WS.sendToOther( JSON.stringify(json) ); } } EVENT.on('settitle',function(data){ fmtCardTitle(data._id); freshList( data.listId ); }); EVENT.on('setlisttitle',function(data){ if($('#list_'+ data._id).length==0)return; $('#list_'+ data._id +' .tasktitle_cont').html(data.title); createListTags(); }); EVENT.on('addcard',function(data){ if(data.boardId != DATA.boardid && DATA.boardid!=null)return; if($('#list_'+ data.listId).length==0)return; freshList( data.listId ); $('#list_'+ data.listId +' .tasklist').sortable('refresh'); }); // 删除卡片 EVENT.on('delcard',function(data){ if(data.boardId != DATA.boardid && DATA.boardid!=null)return; if($('#list_'+ data.listId).length==0)return; freshList( data.listId ); $('#list_'+ data.listId +' .tasklist').sortable('refresh'); }); EVENT.on('addlist',function(data){ if(data.boardId != DATA.boardid && DATA.boardid!=null)return; freshLists(); $('#centerpanel').sortable('refresh'); bindTasklistsort(); createListTags(); }); EVENT.on('boardtitlechange',function(data){ if(data._id != DATA.boardid && DATA.boardid!=null)return; $('.projectheader h1').html(data.title); }); EVENT.on('memberchange',function(data){ if(data.boardId != DATA.boardid && DATA.boardid!=null)return; if($('#card_'+ data._id).length==0)return; fmtMembersByCardID( data._id ); }); EVENT.on('memtimechange',function(data){ if(data.boardId != DATA.boardid && DATA.boardid!=null)return; if($('#card_'+ data._id).length==0)return; fmtMembersByCardID( data._id ); }); EVENT.on('labelchange',function(data){ if(data.boardId != DATA.boardid && DATA.boardid!=null)return; if($('#card_'+ data._id).length==0)return; fmtLabelsByCardID( data._id ); }); EVENT.on('changesort',function(data){ if(data.boardId != DATA.boardid)return; if($('#card_'+ data._id).length==0)return; if(data.oldListId){ freshList( data.oldListId ); } $('#card_'+ data._id).remove(); freshList( data.listId ); }); EVENT.on('archivedlist',function(data){ if(data.boardId != DATA.boardid)return; if($('#list_'+ data._id).length==0)return; $('#list_'+ data._id).remove(); freshLists(); $('#centerpanel').sortable('refresh'); bindTasklistsort(); createListTags(); }); EVENT.on('archivedcards',function(data){ if($('#list_'+ data.listId).length==0)return; for(var i=0;i0)continue; lists.push( DATA.lists[listid] ); } lists.sort(function(a,b){ return a.sort||0 - b.sort||0; }); fill('#tmpl-lists',lists ,'#centerpanel','prepend'); $('.tasklist').height( $('#main').height() - 150 ); } //刷新列表 function freshList(listid){ var cards = []; for(var cardid in DATA.cards){ if(DATA.cards[cardid].listId != listid)continue; if(DATA.cards[cardid].archived ) continue; if(!Filter(DATA.cards[cardid]))continue; cards.push( DATA.cards[cardid] ); } cards.sort(function(a,b){ var as = a.sort||0; var bs = b.sort||0; if(as==bs){ return a.createdAt.sec - b.createdAt.sec; }else{ return as-bs; } }); fill('#tmpl-card',cards ,'#list_'+ listid+' .tasklist'); var _all = cards.length; var _over = 0; for(var i=0;i"; } } */ $('#card_'+ cardid).find('.list_card_title').html(marked(title) ); if(_preTitle){ $('#card_'+ cardid).find('.list_card_title p').prepend(_preTitle); } var ckv = (title.indexOf('~~')==-1?false:true); $('#card_'+ cardid).find('.finishcheck').prop('checked',ckv); } function _formatDate(time) { var now = new Date(time); var year=now.getFullYear(); var month= ("0"+ (now.getMonth()+1)).substr(-2); var date= ("0"+ now.getDate()).substr(-2); var hour=now.getHours(); var minute=now.getMinutes(); var second=now.getSeconds(); return month+""+date; } //刷新指定cardid的标签 function fmtLabelsByCardID(cardid,callback){ if(!DATA.cards[cardid] || !$('#card_'+cardid) )return; var board = DATA.boards[DATA.cards[cardid].boardId]; if(!board)return; var html = []; for(var i=0;i < DATA.cards[cardid].labelIds.length;i++){ var lid = DATA.cards[cardid].labelIds[i]; for(var l=0;l=need*1000)blinkcss="blink"; timeto = ''+_formatDate(need*1000) + ''; } html.push(' '+ linfo.name + timeto +' '); } } } if(callback){ callback && callback( html.join('') ); }else{ $('#card_'+cardid).find('.minicard-labels').html( html.join('')); } } //刷新指定cardid的标签 function fmtQALabelsByCardID(cardid,callback){ if(!DATA.cards[cardid] || !$('#card_'+cardid) )return; var board = DATA.boards[DATA.cards[cardid].boardId]; if(!board)return; var html = []; if(DATA.cards[cardid].qalabelIds) { for(var i=0;i < DATA.cards[cardid].qalabelIds.length;i++){ var lid = DATA.cards[cardid].qalabelIds[i]; for(var l=0;l【'+linfo.name+'】' ||'【没有类型】'); }else { $('#card_'+ cardid).find('.list_card_title_qalabel_name').html('【'+linfo.name+'】' ||'【没有类型】'); } $('.cardinfo_title_qalabel_name').html( '【'+linfo.name+'】' ||'【没有类型】' ); // $('#card_'+ cardid).find('.list_card_title_qalabel_name').html('【'+linfo.name+'】' ||'【没有类型】'); html.push(' '+ linfo.name +' '); } } } } if(callback){ callback && callback( html.join('') ); }else{ $('#card_'+cardid).find('.minicard-labels').html( html.join('')); } } //刷新指定cardid的风险标签 function fmtRiskLabelsByCardID(cardid,callback){ if(!DATA.cards[cardid] || !$('#card_'+cardid) )return; var board = DATA.boards[DATA.cards[cardid].boardId]; if(!board)return; var html = []; if(DATA.cards[cardid].risklabelIds) { for(var i=0;i < DATA.cards[cardid].risklabelIds.length;i++){ var lid = DATA.cards[cardid].risklabelIds[i]; var linfo = DATA.risklabels[lid]; html.push(' '+ linfo.name +' '); } } // 刷新指定card的风险标签数量 if(DATA.cards[cardid].risklabelIds){ var num = DATA.cards[cardid].risklabelIds.length; if(num >=1){ $('#card_'+cardid).find('.card-corner-mark').html(''+ num +'').show(); }else{ $('#card_'+cardid).find('.card-corner-mark').hide(); } }else{ $('#card_'+cardid).find('.card-corner-mark').hide(); } if(callback){ callback && callback( html.join('') ); }else{ //$('#card_'+cardid).find('.minicard-labels').html( html.join('')); } } //刷新指定cardid风险标签相关事件列表 function fmtIssueTagsByCardID(cardid,callback){ if(!DATA.cards[cardid] || !$('#card_'+cardid) )return; var board = DATA.boards[DATA.cards[cardid].boardId]; if(!board)return; var html = []; DATA.riskdept = []; DATA.riskIssueId = []; //console.trace(); if(DATA.cards[cardid].risklabelIds) { for(var i=0;i < DATA.cards[cardid].risklabelIds.length;i++){ var lid = DATA.cards[cardid].risklabelIds[i]; var lb = DATA.allrisklabels[lid]; for(var c=0;c< lb.length;c++){ var linfo = lb[c]; DATA.riskIssueId.push( linfo.issueId ); } } var newurl = 'http://10.0.0.5' var issueIdStr = DATA.riskIssueId.join(','); var requrlObj = new URL('/bughistory/?app=api&act=hascont&bugids='+issueIdStr, newurl); var riskIssueId = $.getJSON(requrlObj, function(data) { DATA.riskIssueIdAPIs = []; for(bid in data){ var riskIssueIdAPI = bid console.log('bid', bid) DATA.riskIssueIdAPIs.push( riskIssueIdAPI ); } for(var i=0;i < DATA.cards[cardid].risklabelIds.length;i++){ var lid = DATA.cards[cardid].risklabelIds[i]; var lb = DATA.allrisklabels[lid]; for(var c=0;c< lb.length;c++){ var linfo = lb[c]; var issueColor; switch(linfo.issueColor){ case "1": issueColor="#c22b34"; break; case "2": issueColor="#0099FF"; break; case "3": issueColor="#8f4ccf"; // issueColor="#000000"; break; } DATA.riskdept.push( linfo.department ); res = new Set(DATA.riskIssueIdAPIs); var newurl = 'http://10.0.0.5'; var newurlObjEdit = new URL('/bughistory/?app=view&bugid='+linfo.issueId+'&urltitle='+ encodeURIComponent(linfo.description), newurl); if(res.has(linfo.issueId) == 1){ console.log('linfo issueID', DATA.riskIssueIdAPIs); var newurlObj = new URL('/bughistory/?app=view&bugid='+linfo.issueId, newurl); // html.push('
  • 【'+linfo.reasonTag+'】' + linfo.description + '
    ' + '问题原因:'+linfo.reason+ '>
  • ' ); // html.push('
  • 【'+linfo.reasonTag+'】' + linfo.description + '
    ' + '问题原因:'+linfo.reason+ '
  • ' ); html.push('
  • 【'+linfo.reasonTag+'】' + linfo.description + '' + '
    ' + '问题原因:'+linfo.reason+ '
  • ' ); }else{ html.push('
  • 【'+linfo.reasonTag+'】' + linfo.description + '
    ' + '问题原因:'+linfo.reason+ '
  • ' ); } } } if(callback){ callback && callback( html.join('') ); }else{ console.log( $('#cardinfoIssueTags') ); $('#cardinfoIssueTags').html( html.join('')); } }); } } // 列表中的卡片初始化的时候设置qa标签 function fmtQALabelsByCardIDInListCard(cardid,callback){ if(!DATA.cards[cardid] || !$('#card_'+cardid) )return; var board = DATA.boards[DATA.cards[cardid].boardId]; if(!board)return; var html = []; if(DATA.cards[cardid].qalabelIds) { for(var i=0;i < DATA.cards[cardid].qalabelIds.length;i++){ var lid = DATA.cards[cardid].qalabelIds[i]; for(var l=0;l【'+linfo.name+'】' ||'【没有类型】'); }else { $('#card_'+ cardid).find('.list_card_title_qalabel_name').html('【'+linfo.name+'】' ||'【没有类型】'); } $('.cardinfo_title_qalabel_name').html( '【'+linfo.name+'】' ||'【没有类型】' ); } } } } if(callback){ callback && callback( html.join('') ); }else{ // $('#card_'+cardid).find('.minicard-labels').html( html.join('')); } } //刷新指定cardid的评论数 function fmtCommentsNumByCardID(cardid){ var num = getCommentsNumByCardID(cardid); if($('#card_'+cardid).length==0 )return; if(num == 0){ $('#card_'+cardid).find('.commonts_num').empty(); }else{ $('#card_'+cardid).find('.commonts_num').html(' '+ num +''); } } function getCommentsNumByCardID(cardid){ var num = 0; for(var k in DATA.card_comments){ if(DATA.card_comments[k].cardId == cardid){ num++; } } return num; } //刷新指定cardid的参与者 function fmtMembersByCardID(cardid,callback){ if(!DATA.cards[cardid] || !$('#card_'+cardid) )return; var board = DATA.boards[DATA.cards[cardid].boardId]; if(!board)return; var html = []; for(var i=0;i < DATA.cards[cardid].members.length;i++){ var _uid = DATA.cards[cardid].members[i]; if( DATA.users[_uid] ){ var uinfo = DATA.users[_uid]; var timeto = ""; var timestr = ""; if(DATA.cards[cardid].mem_time && DATA.cards[cardid].mem_time[_uid] && DATA.cards[cardid].mem_time[_uid]['end']){ //有设定到期时间 //var now = (new Date()).getTime(); var start = DATA.cards[cardid].mem_time[_uid]['start']; var end = DATA.cards[cardid].mem_time[_uid]['end']; timestr = _formatDate(start*1000) +"~"+ _formatDate(end*1000) ;//DATA.cards[cardid].mem_time[_uid]['timestr']; var blinkcss = ""; //if(now>=need*1000)blinkcss="blink"; timeto = ''+ _formatDate(start*1000) +"/"+_formatDate(end*1000) + ''; } html.push(' '+ uinfo.profile.fullname.substr(-2) + timeto +''); } } if(callback){ callback && callback( html.join('') ); }else{ $('#card_'+cardid).find('.js-minicard-members').html( html.join('') ); } } //刷新指定cardid的参与者 function fmtYanQiMembersByCardID(cardid,callback){ if(!DATA.cards[cardid] || !$('#card_'+cardid) )return; var board = DATA.boards[DATA.cards[cardid].boardId]; if(!board)return; var html = []; for(var i=0;i < DATA.cards[cardid].members.length;i++){ var _uid = DATA.cards[cardid].members[i]; if( DATA.users[_uid] ){ var uinfo = DATA.users[_uid]; var timeto = ""; var timestr = ""; if(DATA.cards[cardid].mem_time && DATA.cards[cardid].mem_time[_uid] && DATA.cards[cardid].mem_time[_uid]['isyanqi']){ html.push(' '+ uinfo.profile.fullname.substr(-2) + timeto +''); } // html.push(' '+ uinfo.profile.fullname.substr(-2) + timeto +''); } } if(callback){ callback && callback( html.join('') ); }else{ $('#card_'+cardid).find('.js-minicard-members').html( html.join('') ); } } /* //增加或删除标签 $(document).on('mouseover','.member',function(e){ var timestr = $(this).find('.memtimeto').data('timestr'); var ov = $(this).find('.memtimeto').text(); if(timestr){ //console.log('timestr',timestr); $(this).find('.memtimeto').data('oldtmeto',ov).html(timestr); } }).on('mouseout','.member',function(e){ var oldtmeto = $(this).find('.memtimeto').data('oldtmeto'); if(oldtmeto){ $(this).find('.memtimeto').html(oldtmeto); } }); */ //增加卡片 function doSubmitAddCard(text,boardid,listid,callback){ $.get('./?app=api&apiact=add_card&listid='+listid+"&boardid="+boardid+"&text="+ encodeURIComponent(text),function(text){ var json = JSON.parse( text ); emitEventByJSON(json); callback && callback(json); }); } // 新的添加卡片方法 function doSubmitAddCard2(text,boardid,listid,callback){ $.get('./?app=api&apiact=add_card2&listid='+listid+"&boardid="+boardid+"&text="+ encodeURIComponent(text),function(text){ var json = JSON.parse( text ); emitEventByJSON(json); callback && callback(json); }); } //增加卡片设置内容 function doSubmitAddCardAndDesc(text,desc,boardid,listid,callback){ $.get('./?app=api&apiact=add_card&listid='+listid+"&boardid="+boardid+"&text="+ encodeURIComponent(text)+"&description="+ encodeURIComponent(desc),function(text){ var json = JSON.parse( text ); emitEventByJSON(json); callback && callback(json); }); } //设置栏目标题 function doSubmitSetListTitle(text,boardid,listid,callback){ $.get('./?app=api&apiact=set_list_title&listid='+listid+"&boardid="+boardid+"&text="+ encodeURIComponent(text),function(text){ var json = JSON.parse( text ); emitEventByJSON(json); callback && callback(json); }); } //增加栏目 function doSubmitAddList(text,boardid,callback){ $.get('./?app=api&apiact=add_list&boardid='+boardid+"&text="+ encodeURIComponent(text),function(text){ var json = JSON.parse( text ); emitEventByJSON(json); callback && callback(json); }); } //增加看板 function doSubmitAddboard(text,callback){ $.get('./?app=api&apiact=add_board&text='+ encodeURIComponent(text),function(text){ var json = JSON.parse( text ); emitEventByJSON(json); callback && callback(json); }); } //归档看板 function doArchivedboard(boardid,callback){ $.get('./?app=api&apiact=archived_board&boardid='+ boardid , function(text){ var json = JSON.parse( text ); emitEventByJSON(json); callback && callback(json); }); } //移动card并设定新排序 function doSubmitChangeListID(cardid,listid,newOrder,callback){ if (!listid){ alert('错误操作,bug就是你引起的,请进行归档操作!'); return } $.post('./?app=api&apiact=set_card_listid&cardid='+cardid+"&listid="+listid ,newOrder,function(text){ var json = JSON.parse( text ); emitEventByJSON(json); callback && callback(json); }); } //重新排序列表 function doSubmitSortList(boardid,newOrder,callback){ $.get('./?app=api&apiact=sort_list&boardid='+boardid+"&"+ newOrder ,function(text){ var json = JSON.parse( text ); emitEventByJSON(json); callback && callback(json); }); } //修改看板标题 function doSubmitMidifyBoardTitle(boardid,text,callback){ if(text.length==0)return; $.get('./?app=api&apiact=modify_board_title&boardid='+boardid+"&text="+ text ,function(text){ var json = JSON.parse( text ); emitEventByJSON(json); callback && callback(json); }); } //归档列表 function doSubmitArchivedList(listid,callback){ $.get('./?app=api&apiact=archived_list&listid='+listid,function(text){ var json = JSON.parse( text ); emitEventByJSON(json); callback && callback(json); }); } //归档已完成项目 function doSubmitArchivedOveredCards(listid,callback){ $.get('./?app=api&apiact=archived_overedcards&listid='+listid,function(text){ var json = JSON.parse( text ); emitEventByJSON(json); callback && callback(json); }); } // 删除卡片 function doSubmitDeleteCards(cid,callback){ $.get('./?app=api&apiact=del_card&cardid='+cid,function(text){ var json = JSON.parse( text ); if(json.msg){ alert(json.msg); return } emitEventByJSON(json); callback && callback(json); }); } function HASH(){ var res = {}; var hash = location.hash.replace('#',''); if(hash.length > 0){ var hashArr = hash.split('&'); for(var i=0;i0){ $('#modifyTitle').remove(); return; } $('#modifyTitle').remove(); var html = T( $('#tmpl-modifyTitle').html() , DATA ); $('body').append( html ); $('#modifyTitle').css({ 'left':$(document).scrollLeft()+e.clientX+5, 'top':e.clientY+10 }); var board = DATA.boards[ DATA.boardid ]; $('.modifyTitle_text').val( board.title ); } function showListMenu(e,obj){ if($('#listmenu').length>0){ $('#listmenu').remove(); return; } $('#listmenu').remove(); var listid = $(obj).parents('.panel').data('id'); var html = T( $('#tmpl-listmenu').html() , DATA.lists[ listid ] ); $('body').append( html ); $('#listmenu').css({ 'left':$(document).scrollLeft() + e.clientX-155, 'top':e.clientY+15 }); $("#listmenu").menu(); // var board = DATA.boards[ DATA.boardid ]; // $('.modifyTitle_text').val( board.title ); } //发送dingding消息 function sendDDMSG(toname,text,url,dduserid){ //if(!window.MYINFO)return; $.post('http://'+ HOSTANDPORT +'/dtalk/?app=senddmsgbyappid',{ appid:(DTALK_APPID||""), content:text, name:toname, dduserid:(dduserid||""), url:url }); }