project-progress.html 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>项目进度</title>
  5. <!--#include file="common/_header.html"-->
  6. <style>
  7. .tab-labels{
  8. border-bottom: 1px solid #e8e8e8;
  9. }
  10. .tab-labels::after{
  11. content:'';
  12. display: block;
  13. clear:both;
  14. }
  15. .current{
  16. border-bottom-color: #1890ff !important;
  17. }
  18. .tab-label{
  19. cursor: pointer;
  20. display: inline-block;
  21. float: left;
  22. height: 40px;
  23. line-height: 40px;
  24. padding: 0 20px;
  25. border-bottom: solid 2px #fff;
  26. }
  27. .show {
  28. display: block;
  29. }
  30. .hide{
  31. display: none;
  32. }
  33. #app{
  34. position: absolute;
  35. top: 0px;
  36. bottom: 0px;
  37. left: 0px;
  38. right: 0px;
  39. display: flex;
  40. flex-direction: column;
  41. }
  42. #app iframe{
  43. flex:1;
  44. }
  45. </style>
  46. </head>
  47. <body>
  48. <div id="app">
  49. <ul class="tab-labels">
  50. <li class="tab-label" :class="{current:index==current}"
  51. @click="selectTab(index,process.procDefKey,process.procInstId)" v-for="(process,index) in processList">
  52. {{process.processName}}
  53. </li>
  54. </ul>
  55. <div style="position:absolute;top:5px;right:5px;">
  56. <a class="btn btn-success radius r" style="line-height:1.6em;margin-top:3px"
  57. href="javascript:reloadFrame();" title="刷新" ><i class="Hui-iconfont">&#xe68f;</i></a>
  58. </div>
  59. <div>
  60. <div style="padding:5px;">
  61. <input class="btn btn-primary radius" @click="showDiagram" type="button" value="流程图">
  62. <input class="btn btn-secondary radius" @click="showStepList" type="button" value="步骤列表">
  63. </div>
  64. <div v-show="showModel==1">
  65. <iframe id="frame1" name="frame1" :src="viewUrl" width="100%" height="600px" frameborder="0"></iframe>
  66. </div>
  67. <div v-show="showModel==2">
  68. <h5>项目名称:<span v-html="project.title"></span>&nbsp;采用模板:<span v-html="template.title"></span></h5>
  69. <table class="table table-border table-bordered">
  70. <thead>
  71. <tr>
  72. <td>步骤名称</td>
  73. <td>待办事项</td>
  74. <td>规定完成人天</td>
  75. <td>经办人</td>
  76. <td>候选人</td>
  77. <td>开始时间</td>
  78. <td>完成时间</td>
  79. </tr>
  80. </thead>
  81. <tbody v-if="stepList!=null">
  82. <template v-for="step in stepList">
  83. <tr>
  84. <td :rowspan="step.taskList.length" v-html="step.name"></td>
  85. <td :rowspan="step.taskList.length">
  86. <ul>
  87. <li v-for="todo,index in step.todoList">{{index+1}}.{{todo.detail}}</li>
  88. </ul>
  89. </td>
  90. <td :rowspan="step.taskList.length">
  91. <span v-html="step.day"></span>
  92. </td>
  93. <td v-html="step.taskList[0].assignee"></td>
  94. <td v-html="step.taskList[0].candidate"></td>
  95. <td v-html="step.taskList[0].startTime"></td>
  96. <td v-html="step.taskList[0].endTime"></td>
  97. </tr>
  98. <template v-for="task,index in step.taskList">
  99. <tr v-if="index>0">
  100. <td v-html="task.assignee"></td>
  101. <td v-html="task.candidate"></td>
  102. <td v-html="task.startTime"></td>
  103. <td v-html="task.endTime"></td>
  104. </tr>
  105. </template>
  106. </template>
  107. </tbody>
  108. </table>
  109. </div>
  110. </div>
  111. </div>
  112. <!--_footer 作为公共模版分离出去-->
  113. <!--#include file="common/_footer.html"-->
  114. <!--/_footer 作为公共模版分离出去-->
  115. <!--请在下方写此页面业务相关的脚本-->
  116. <script type="text/javascript" src="scripts/global.js"></script>
  117. <script type="text/javascript" src="lib/vue/vue.js"></script>
  118. <script type="text/javascript">
  119. var path = global_backend_url;
  120. var projectId = getQueryString("projectId");
  121. function reloadFrame(){
  122. //vm.viewUrl = vm.viewUrl;
  123. $("#frame1")[0].contentWindow.location.reload(true);
  124. }
  125. var vm = new Vue({
  126. el:"#app",
  127. data: {
  128. project:{},
  129. template:{},
  130. processList:[],
  131. stepList:[],
  132. current:0,
  133. showModel:1, // 1-流程图;2-步骤列表
  134. viewUrl:""
  135. },
  136. mounted: function(){
  137. var self = this;
  138. $.get(path + "/procInst/activeList",{
  139. projectId : projectId
  140. },function(resp){
  141. if(resp.result){
  142. self.processList = resp.data;
  143. self.selectTab(0,resp.data[0].procDefKey,resp.data[0].procInstId);
  144. }
  145. else{
  146. layer.msg(resp.message + "");
  147. }
  148. },"json");
  149. },
  150. methods: {
  151. selectTab: function(index,procDefKey,procInstId) {
  152. this.current = index;
  153. this.viewUrl = "procinst-diagram.html?procDefKey=" + procDefKey +"&procInstId=" + (procInstId!=null ? procInstId : "");
  154. if(this.showModel==2){
  155. this.showStepList();
  156. }
  157. },
  158. showDiagram() {
  159. this.showModel = 1;
  160. reloadFrame();
  161. },
  162. showStepList() {
  163. this.showModel = 2;
  164. var self = this;
  165. var loadingIndex = layer.load(0, {shade: false});
  166. // 读取流程步骤列表
  167. $.get(path + "/procInst/stepList",{
  168. projectId : projectId,
  169. procDefKey: self.processList[this.current].procDefKey,
  170. procInstId: self.processList[this.current].procInstId
  171. },function(resp){
  172. layer.close(loadingIndex);
  173. if(resp.result){
  174. self.project = resp.data.project;
  175. self.template = resp.data.template;
  176. self.stepList = resp.data.stepList;
  177. }
  178. else{
  179. layer.msg(resp.message + "");
  180. }
  181. },"json");
  182. }
  183. }
  184. });
  185. </script>
  186. <!--/请在上方写此页面业务相关的脚本-->
  187. </body>
  188. </html>