m.create.html.php 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. <?php
  2. /**
  3. * The task create mobile view file of task module of ZenTaoPMS.
  4. *
  5. * @copyright Copyright 2009-2016 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
  6. * @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
  7. * @author Fei Chen <chenfei@cnezsoft.com>
  8. * @package task
  9. * @version $Id
  10. * @link http://www.zentao.net
  11. */
  12. ?>
  13. <div class='heading divider'>
  14. <div class='title'><i class='icon-plus muted'></i> <strong><?php echo $lang->task->create;?></strong></div>
  15. <nav class='nav'><a data-dismiss='display'><i class='icon icon-remove muted'></i></a></nav>
  16. </div>
  17. <form class='content box ajaxform' data-form-refresh='#page' method='post' id='createTaskForm' action='<?php echo $this->createLink('task', 'create', http_build_query($this->app->getParams()));?>' enctype='multipart/form-data'>
  18. <div class="control">
  19. <label for='module'><?php echo $lang->task->module;?></label>
  20. <div class='select'><?php echo html::select('module', $moduleOptionMenu, $task->module, "onchange='setStories(this.value,$execution->id)'");?></div>
  21. </div>
  22. <div class="control">
  23. <label for='module'><?php echo $lang->task->type;?></label>
  24. <div class='select'><?php echo html::select('type', $lang->task->typeList, $task->type, 'onchange=setOwners(this.value)');?></div>
  25. </div>
  26. <div class='control'>
  27. <div class="checkbox pull-right">
  28. <input type="checkbox" name="multiple" value="1" id="multipleBox">
  29. <label for="multipleBox" class="text-link"><?php echo $lang->task->multipleAB;?></label>
  30. </div>
  31. <label for='assignedTo'><?php echo $lang->task->assignedTo;?></label>
  32. <div class='select flex'>
  33. <?php echo html::select('assignedTo[]', $members, $task->assignedTo);?>
  34. </div>
  35. </div>
  36. <div id='taskTeam' class='hidden has-padding gray'>
  37. <div class='control small muted'><label><?php echo $lang->task->team;?></label></div>
  38. <div class='row flex-nowrap'>
  39. <div class='cell'>
  40. <div class='control'>
  41. <div class='select'>
  42. <?php echo html::select("team[1]", $members);?>
  43. </div>
  44. </div>
  45. </div>
  46. <div class='cell-4'>
  47. <div class='control'>
  48. <?php echo html::input("teamEstimate[1]", '', "type='number' step='0.01' class='input text-center' autocomplete='off' placeholder='{$lang->task->estimateAB}'") ?>
  49. </div>
  50. </div>
  51. <div class='cell flex-none'>
  52. <a class='btn member-deleter'><i class='icon-trash text-danger'></i></a>
  53. </div>
  54. </div>
  55. <?php if(isset($currentOrder)):?>
  56. <div class='row flex-nowrap'>
  57. <div class='cell'>
  58. <div class='control'>
  59. <div class='select'>
  60. <?php echo html::select("team[]", $members, $member);?>
  61. </div>
  62. </div>
  63. </div>
  64. <div class='cell-4'>
  65. <div class='control'>
  66. <input type='number' step='0.01' name='real[]' class='input text-right member-estimate' value='<?php echo $currentOrder->plan ?>' placeholder='<?php echo $this->lang->contract->placeholder->real ?>'>
  67. </div>
  68. </div>
  69. <div class='cell flex-none'>
  70. <a class='btn member-deleter'><i class='icon-trash text-danger'></i></a>
  71. </div>
  72. </div>
  73. <?php endif;?>
  74. <a class="btn text-primary btn-add-member"><i class="icon-plus"></i></a>
  75. </div>
  76. <?php if(strpos(",$showFields,", ',story,') !== false and $config->global->flow != 'onlyTask'):?>
  77. <div class='control'>
  78. <label for='story'><?php echo $lang->task->story;?></label>
  79. <div class='select'><?php echo html::select('story', $stories, $task->story, 'onchange=setStoryModule()');?></div>
  80. </div>
  81. <?php endif;?>
  82. <div class='control'>
  83. <label for='name'><?php echo $lang->task->name;?></label>
  84. <?php echo html::input('name', '', "class='input' placeholder='{$lang->required}'");?>
  85. </div>
  86. <div class='row'>
  87. <?php if(strpos(",$showFields,", ',pri,') !== false):?>
  88. <div class='cell-6'>
  89. <div class='control'>
  90. <label for='pri'><?php echo $lang->task->pri;?></label>
  91. <div class='select'><?php echo html::select('pri', $lang->task->priList);?></div>
  92. </div>
  93. </div>
  94. <?php endif;?>
  95. <?php if(strpos(",$showFields,", ',estimate,') !== false):?>
  96. <div class='cell-6'>
  97. <div class='control'>
  98. <label for='estimate'><?php echo $lang->task->estimate;?></label>
  99. <?php echo html::input('estimate', '', "class='input'");?>
  100. </div>
  101. </div>
  102. <?php endif;?>
  103. </div>
  104. <div class='control'>
  105. <label for='desc'><?php echo $lang->task->desc;?></label>
  106. <?php echo html::textarea('desc', '', "rews='5' class='textarea'");?>
  107. </div>
  108. <div class='row'>
  109. <?php if(strpos(",$showFields,", ',estStarted,') !== false):?>
  110. <div class='cell-6'>
  111. <div class='control'>
  112. <label for='estStarted'><?php echo $lang->task->estStarted;?></label>
  113. <input type='date' class='input' id='estStarted' name='estStarted'>
  114. </div>
  115. </div>
  116. <?php endif;?>
  117. <?php if(strpos(",$showFields,", ',deadline,') !== false):?>
  118. <div class='cell-6'>
  119. <div class='control'>
  120. <label for='deadline'><?php echo $lang->task->deadline;?></label>
  121. <input type='date' class='input' id='deadline' name='deadline'>
  122. </div>
  123. </div>
  124. <?php endif;?>
  125. </div>
  126. <?php if(strpos(",$showFields,", ',mailto,') !== false):?>
  127. <div class='control'>
  128. <label for='mailto[]'><?php echo $lang->task->mailto;?></label>
  129. <div class='select multiple'><?php echo html::select('mailto[]', $execution->acl == 'private' ? $members : $users, str_replace(' ', '', $task->mailto), 'multiple');?></div>
  130. </div>
  131. <?php endif;?>
  132. <div class='control'>
  133. <?php echo $this->fetch('file', 'buildForm', 'fileCount=1');?>
  134. <?php echo html::hidden('execution', $execution->id);?>
  135. </div>
  136. </form>
  137. <div class='footer has-padding'>
  138. <button type='submit' data-submit='#createTaskForm' class='btn primary'><?php echo $lang->save;?></button>
  139. </div>
  140. <div class='template'>
  141. <div class='row flex-nowrap'>
  142. <div class='cell'>
  143. <div class='control'>
  144. <div class='select'>
  145. <?php echo html::select("team[key]", $members);?>
  146. </div>
  147. </div>
  148. </div>
  149. <div class='cell-4'>
  150. <div class='control'>
  151. <?php echo html::input("teamEstimate[key]", '', "type='number' step='0.01' class='input text-center' autocomplete='off' placeholder='{$lang->task->estimateAB}'") ?>
  152. </div>
  153. </div>
  154. <div class='cell flex-none'>
  155. <a class='btn member-deleter'><i class='icon-trash text-danger'></i></a>
  156. </div>
  157. </div>
  158. </div>
  159. <script>
  160. function setOwners(type)
  161. {
  162. if(type == 'affair')
  163. {
  164. $('#assignedTo').attr('multiple', 'multiple');
  165. }
  166. else if($('#assignedTo').attr('multiple') == 'multiple')
  167. {
  168. $('#assignedTo').removeAttr('multiple');
  169. }
  170. }
  171. function setStoryModule()
  172. {
  173. var storyID = $('#story').val();
  174. if(storyID)
  175. {
  176. var link = createLink('story', 'ajaxGetModule', 'storyID=' + storyID);
  177. $.get(link, function(moduleID){$('#module').val(moduleID);});
  178. }
  179. }
  180. function setStories(moduleID, executionID)
  181. {
  182. link = createLink('story', 'ajaxGetExecutionStories', 'executionID=' + executionID + '&productID=0&branch=0&moduleID=' + moduleID);
  183. $.get(link, function(stories)
  184. {
  185. var storyID = $('#story').val();
  186. if(!stories) stories = '<select id="story" name="story"></select>';
  187. $('#story').replaceWith(stories);
  188. $('#story').val(storyID);
  189. });
  190. }
  191. $(function()
  192. {
  193. $('[name^=multiple]').change(function()
  194. {
  195. if($(this).prop('checked'))
  196. {
  197. $('#assignedTo').addClass('hidden');
  198. $('#assignedTo').parent('.flex').removeClass('select');
  199. $('#taskTeam').removeClass('hidden');
  200. $('#estimate').attr('readonly', true);
  201. }
  202. else
  203. {
  204. $('#assignedTo').removeClass('hidden');
  205. $('#assignedTo').parent('.flex').addClass('select');
  206. $('#taskTeam').addClass('hidden');
  207. $('#estimate').attr('readonly', false);
  208. }
  209. });
  210. $('#createTaskForm').modalForm().listenScroll({container: 'parent'});
  211. var memberKey = 2;
  212. $('#taskTeam').on($.TapName, '.member-deleter', function()
  213. {
  214. if($('#taskTeam').find('.row').length == 1) return false;
  215. $(this).closest('.row').remove();
  216. });
  217. $('body').on($.TapName, '.btn-add-member', function(e)
  218. {
  219. var $member = $('.template').html().replace(/key/g, memberKey);
  220. $('.btn-add-member').before($member);
  221. memberKey ++;
  222. e.stopPropagation();
  223. e.preventDefault();
  224. });
  225. $(document).on('change', '[name*=teamEstimate]', function()
  226. {
  227. var time = 0;
  228. $('[name*=teamEstimate]').each(function()
  229. {
  230. var $this = $(this);
  231. estimate = parseFloat($this.val());
  232. if(!isNaN(estimate))
  233. {
  234. time += estimate;
  235. }
  236. $('#estimate').val(time);
  237. })
  238. });
  239. });
  240. </script>