milestone相關前端控件的設計方案

      網友投稿 830 2025-04-03

      原來的需求是模擬visio里面做出來的時間線的效果,所以我就做成了下面那種方案;這幾天閑逛,看到別人做的不錯的設計,我這里記下來;


      我初步看了一下前端代碼繪制部分基于svg d3.js;

      下面我來說說我認為他的這種設計到底好在哪里,從用戶視角:

      采用明顯的顏色來區分,已完成迭代,當前迭代,未開始迭代

      雖然我那個設計中也采用了顏色進行狀態區分,但是線條小,視覺上不如這個明顯;

      環形的進度顯示相對于單純的百分比數值顯示更能聚焦人的注意力,

      不僅記錄進度還加入了相關的代碼量和工作量記錄,將用戶可能關注的相關要素集中呈現,避免二次對照的過程;

      當區段的長度相對小時,隱藏了代碼量部分的顯示,改成了鼠標浮動時顯示完整信息;

      鼠標浮動于當前時間點是,提示總體的一些進度和匯總信息;

      還可以注意到一些這樣細節,同一段的的斜杠前后的字體大小或者顏色的變化的設計,都一樣或者過于整齊的設計容易讓人產生視覺疲勞;

      其他的一些點,狀態圖的信息提示欄提供了更詳細的描述信息;

      采用了更多的進度和趨勢的圖形輔助,更直觀明了;

      還有一個我認為不錯的特點,右上角的播放循環展板的功能;

      看了一下這個項目的前端公共依賴:

      echarts.js

      EventEmitter.min.js//EventEmitter v5.2.5

      jquery-3.3.1.min.js//jQuery v3.3.1

      jquery-ui.min.js//jQuery UI - v1.11.0

      jquery.gridly.js//1.2.9

      bootstrap.min.js//Bootstrap v3.3.7

      Bootstrap: popover.js v3.2.0

      milestone相關前端控件的設計方案

      Bootstrap: tooltip.js v3.2.0

      bootstrap-slider.min.js//10.0.2

      pnotify.js

      bootstrap-table.js//1.12.1

      jquery.dataTables.js//DataTables 1.10.4

      dataTables.bootstrap.js

      dataTables.rowsGroup.js//RowsGroup for DataTables v2.0.0

      ColVis.min.js//1.0.8

      DT_bootstrap.js

      ckeditor.js//2003-2018

      ckeditor/styles.js

      ckeditor/lang/zh-cn.js

      d3.js//3.2.8

      jqPaginator.js

      select2.min.js

      bootstrap-multiselect.js//Bootstrap Multiselect v0.9.8

      基本上是使用jquery+bootstrap的前端結構,并沒有使用一些當前流行的前端框架,但是代碼邏輯還是清晰的;

      /*-------------------------------------------------------------------------------------------------*/

      less教程

      https://www.ibm.com/developerworks/cn/web/1207_zhaoch_lesscss/

      交互設計文檔設計的一些查詢記錄

      https://cloud.tencent.com/developer/article/1165820

      https://www.cnblogs.com/JoannaQ/p/3900463.html

      https://www.ctolib.com/topics-36574.html

      https://zhuanlan.zhihu.com/p/21577848

      http://www.yzsekj.com/cn_asp/m_newsview.asp%3Ftypeid%3D60%26id%3D83

      https://wemp.app/posts/7b00dafd-a935-4c9a-a6cb-0bc0587ce6de

      /*--------------------------------------------------------------------------------------------------*/

      /*------------------------------------分割線-----------------------------------------------------*/

      /*-------------------------------------------------------------------------------------------------*/

      基于angularjs和mxgraph的里程碑計劃控件

      控件效果:

      控件實現:

      首先下載 :https://github.com/jgraph/mxgraph?最新的版本

      需要其中的mxgraph-master\javaScript\examples\grapheditor\www目錄中的所有和src中的mxClient.js文件,

      控件模板:

      mxBasePath?=?'/Resources/mx/'; STYLE_PATH?=?'/Resources/mx/styles'; RESOURCES_PATH?=?'/resources/mx/resources'; STENCIL_PATH?=?'/resources/mx/stencils'; var?mile_ui?=?null; function?drawInit(xml){ ????var?editorUiInit?=?EditorUi.prototype.init; ????EditorUi.prototype.init?=?function(){ ?????.... ????}; mxResources.loadDefaultBundle?=?false; var?bundle?=?mxResources.getDefaultBundle(RESOURCE_BASE,?mxLanguage)?|| mxResources.getSpecialBundle(RESOURCE_BASE,?mxLanguage); mxUtils.getAll([bundle,?STYLE_PATH?+?'/default.xml'],?function(xhr) { .... //?Main mile_ui?=?new?EditorUi(new?Editor(urlParams['chrome']?==?'0',?themes),document.getElementById('eContainer')); updateDraw(xml); //sco["htm"]=$('#eContainer').html(); },?function() { .... }); } function?updateDraw(xml){ mile_ui.editor.graph.model.beginUpdate(); ????????try?{ var?doc?=?mxUtils.parseXml(xml); mile_ui.editor.graph.resizeContainer?=?true; mile_ui.editor.setGraphXml(doc.documentElement); mile_ui.editor.graph.centerZoom?=?false; mile_ui.editor.graph.setTooltips(false); mile_ui.editor.graph.setEnabled(false); mile_ui.editor.graph.resizeContainer?=?false; ????????}?catch?(e)?{ ????????????console.error(e); ????????}?finally?{ ????????????mile_ui.editor.graph.model.endUpdate(); ????????} } ????年 ????{{year}} ????操作 ???月 ???{{month}} ? {{tData.title}} 添加

      更新
      //這里要注意這里$index?如果放到里面回合checkbox擴展的相關功能沖突,$index始終為用tdata為參數始終為第一個的問題 //同時寫在外層也會有觸發兩次的問題使用preventdefeat處理 顯示計劃
      ? 顯示實際
      ....
      .....

      控制器:

      angular.module('xxx.milestone',?[]).component('mview',?{ ????controller:?['$scope',?'$http',?'$window',?'$stateParams',?'$timeout','$compile',?'xxxService',?function($scope,?$http,?$window,?$stateParams,?$timeout,$compile,?xxxService)?{ var?tid?=?0; ????????var?oldtid?=?tid; Object.defineProperty(this,?'tid',?{ get:?function()?{ ??return?tid; }, set:?function(newVal)?{ if(oldtid!=0?&&?oldtid?==?newVal){ return; } oldtid?=?newVal; tid?=?newVal; console.log('tid?changed:',?newVal); $scope.timelineId?=?tid; $scope.initData(); } }); ????????var?contextpath?=?window.Ruban.contextPath; ????????$scope.RangeYear?=?[]; ????????$scope.RangeMonth?=?[]; ????????$scope.timelineData?=?[]; ????????$scope.addMile?=?{}; ????????$scope.xml?=?""; ????????$scope.timelineId?=?1; ????????$scope.initDraw?=?false; ????????$scope.ht?=?300; ????????$scope.contentRestore?=?{}; ????????$scope.initData?=?function?()?{ var?param?=?{ ????????????????"timelineId":?$scope.timelineId ????????????}; ????????????$scope.ht?=?$scope.timelineId.split(",").length?*?300; var?url?=?contextpath?+?'api/private/xxxx/getTimeline.json'; xxxService.commonPostJQlike(url,?param,?function?(response)?{ ????????????????if(!response.data.success){ ???????????????????window.location.href=contextpath?+"xxxHome.html#!/error"; ???????????????????return; ????????????????} ????????????????$scope.timelineData?=?response.data.data; ????????????????$scope.xml?=?response.data.xml; ????????????var?bgDate?=?new?Date($scope.timelineData[0].bg); ????????????var?edDate?=?new?Date($scope.timelineData[0].ed); ????????????$scope.RangeYear?=?[]; ????????????$scope.RangeMonth?=?[]; ????????????for(var?i?=?bgDate.getFullYear();i?controllerAs:?'MilestoneController', ????templateUrl:?window.Ruban.contextPath+'pages/xxxx/milestone.html', ????bindings:?{ ????????tid:?'@' ????} });

      使用形式:

      ????//timelineId來自springcontrol綁定形式為以,分割的timelineId

      后端的一些實現:

      主要是使用dom4j寫了一個MxGraphService的類來對顯示到前端的mxgraph繪制對應的xml文件,

      public static String formatXmlByInfo(List> drawParam);

      //說明根據數據庫中由timelineId查詢到對應的里程碑信息來請求格式化繪圖xml節點信息

      public static List formatMileLine(int id[],int y);

      //id 為用來遞增為繪圖圖元的id,該函數用來格式化返回最基本的中間的時間線

      public static List formatToday(int id[],int x,int y,int parent);

      //返回指示當前日期的位置圖元

      public static List formatMilestone(int id[],int x,int y,Map info,String color,int parent);

      //返回計劃里程碑圖元

      public static List formatMilestoneD(int id[],int x,int y,Map info,String color,int parent);

      //返回實際完成時間點圖元

      說明:上面的格式化過程其實很簡單,具體是解析參數化過后的樣本結構xml獲得相應的xml節點返回,注意返回的xml Node需要clone以便添加到最終的根節點;

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:不用逐個打開復制粘貼 直接用=號引用 提取數據 合并多個表格(復制粘貼不能全部粘貼)
      下一篇:項目管理都有哪些
      相關文章
      亚洲综合亚洲综合网成人| 日韩亚洲国产高清免费视频| 亚洲精品高清视频| 亚洲成av人片在www鸭子| 亚洲ts人妖网站| 久久久久亚洲精品天堂| 亚洲视频.com| 亚洲最新视频在线观看| 久久久久亚洲精品无码蜜桃| 亚洲黄色片在线观看| 亚洲精品熟女国产| 亚洲国产精品白丝在线观看| 亚洲中字慕日产2021| 亚洲一级毛片免费在线观看| 亚洲制服丝袜在线播放| 伊人久久亚洲综合影院首页| 国产亚洲精品成人AA片| 亚洲国产成人精品无码区二本 | 亚洲综合在线一区二区三区| 亚洲一卡一卡二新区无人区| 亚洲国产精品成人综合色在线| 亚洲a∨国产av综合av下载| 亚洲国产精品无码久久九九大片| 亚洲国产无线乱码在线观看| 风间由美在线亚洲一区| 亚洲国产精品一区二区第一页免| 亚洲综合色视频在线观看| 国产精品亚洲一区二区三区在线| 久久亚洲精品成人| 亚洲精品视频观看| 亚洲 欧洲 日韩 综合在线| 亚洲AV永久无码精品一福利| 国产99久久亚洲综合精品| 亚洲国产精品成人一区| 亚洲欧洲精品无码AV| 亚洲日本中文字幕| 亚洲伦理中文字幕| 蜜芽亚洲av无码一区二区三区| 亚洲成a人片在线观看久| 亚洲色偷拍另类无码专区| 亚洲AV无码乱码国产麻豆|