productoverviewblock.html.php 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  1. <?php
  2. /**
  3. * The product overview block view file of block module of ZenTaoPMS.
  4. * @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.zentao.net)
  5. * @license ZPL(https://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
  6. * @author LiuRuoGu <liuruogu@easycorp.ltd>
  7. * @package block
  8. * @link https://www.zentao.net
  9. */
  10. namespace zin;
  11. $id = $block->module . '-' . $block->code . '-' . $block->id;
  12. if($block->width == 1)
  13. {
  14. blockPanel
  15. (
  16. to::titleSuffix
  17. (
  18. icon
  19. (
  20. setClass('text-light text-sm cursor-pointer'),
  21. toggle::tooltip
  22. (
  23. array
  24. (
  25. 'title' => sprintf($lang->block->tooltips['metricTime'], $metricTime),
  26. 'placement' => 'bottom',
  27. 'type' => 'white',
  28. 'className' => 'text-dark border border-light leading-5'
  29. )
  30. ),
  31. 'help'
  32. )
  33. ),
  34. set::bodyClass('row items-center text-center'),
  35. set::headingClass('border-0 pb-0'),
  36. cell
  37. (
  38. width('1/3'),
  39. a
  40. (
  41. setClass('text-3xl leading-none text-primary num'),
  42. hasPriv('product', 'all') ? set::href(createLink('product', 'all', 'browseType=all')) : null,
  43. $data->productCount
  44. ),
  45. div
  46. (
  47. setClass('text-gray text-sm mt-3'),
  48. $lang->block->productoverview->productCount
  49. )
  50. ),
  51. cell
  52. (
  53. width('1/3'),
  54. div
  55. (
  56. setClass('text-3xl leading-none text-center num'),
  57. $data->releaseCount
  58. ),
  59. div
  60. (
  61. setClass('text-gray text-sm mt-3'),
  62. $lang->block->productoverview->releaseCount
  63. )
  64. ),
  65. cell
  66. (
  67. width('1/3'),
  68. div
  69. (
  70. setClass('text-3xl leading-none text-important num'),
  71. $data->milestoneCount
  72. ),
  73. div
  74. (
  75. setClass('text-gray text-sm mt-3'),
  76. $lang->block->productoverview->milestoneCount
  77. )
  78. )
  79. );
  80. }
  81. if($block->width == 3)
  82. {
  83. $suffix = ($app->clientLang == 'zh-cn' || $app->clientLang == 'zh-tw') ? $lang->year : '';
  84. $items = array();
  85. foreach($years as $year)
  86. {
  87. $url = createLink('block', 'printBlock', "blockID={$block->id}&params=" . helper::safe64Encode("year={$year}"));
  88. $items[] = array('text' => $year . $suffix, 'data-url' => $url, 'data-on' => 'click', 'data-do' => "loadBlock('$block->id', options.url)");
  89. }
  90. blockPanel
  91. (
  92. set::headingClass('hidden'),
  93. set::bodyClass('gradient row p-1 pt-3'),
  94. set::bodyProps(array('style' => array('background-image' => 'linear-gradient( 90deg, #ECF7FE 0%, #FFF 22%)'))),
  95. col
  96. (
  97. setID("{$id}-overview"),
  98. width('62.5%'),
  99. div
  100. (
  101. setClass('text-md font-bold mt-2 mb-3 ml-3'),
  102. $block->title,
  103. icon
  104. (
  105. setClass('text-light text-sm cursor-pointer ml-2'),
  106. toggle::tooltip
  107. (
  108. array
  109. (
  110. 'title' => sprintf($lang->block->tooltips['metricTime'], $metricTime),
  111. 'placement' => $app->getClientLang() == 'en' ? 'bottom-end' : 'bottom',
  112. 'type' => 'white',
  113. 'className' => 'text-dark border border-light leading-5'
  114. )
  115. ),
  116. 'help'
  117. )
  118. ),
  119. row
  120. (
  121. setClass('mt-4 text-center'),
  122. ($config->systemMode != 'ALM' && $config->systemMode != 'PLM') ? null : col
  123. (
  124. setClass('w-1/5 gap-2'),
  125. div
  126. (
  127. setClass('text-3xl leading-none num'),
  128. $data->productLineCount
  129. ),
  130. div($lang->block->productoverview->productLineCount)
  131. ),
  132. col
  133. (
  134. setClass('w-1/5 gap-2'),
  135. a
  136. (
  137. setClass('text-3xl leading-none text-primary num'),
  138. hasPriv('product', 'all') ? set::href(createLink('product', 'all', 'browseType=all')) : null,
  139. $data->productCount
  140. ),
  141. div($lang->block->productoverview->productCount)
  142. ),
  143. col
  144. (
  145. setClass('w-1/5 gap-2 border-l'),
  146. div
  147. (
  148. setClass('text-3xl leading-none num'),
  149. $data->unfinishedPlanCount
  150. ),
  151. div($lang->block->productoverview->unfinishedPlanCount)
  152. ),
  153. col
  154. (
  155. setClass('w-1/5 gap-2'),
  156. div
  157. (
  158. setClass('text-3xl leading-none num'),
  159. $data->unclosedStoryCount
  160. ),
  161. div($lang->block->productoverview->unclosedStoryCount)
  162. ),
  163. col
  164. (
  165. setClass('w-1/5 gap-2 border-r'),
  166. div
  167. (
  168. setClass('text-3xl leading-none num'),
  169. $data->activeBugCount
  170. ),
  171. div($lang->block->productoverview->activeBugCount)
  172. )
  173. )
  174. ),
  175. col
  176. (
  177. setID("{$id}-annual"),
  178. setClass('flex-auto'),
  179. row
  180. (
  181. setClass('text-sm font-bold mt-1 mb-3 ml-3 items-center'),
  182. span($lang->block->productoverview->yearFinished),
  183. dropdown
  184. (
  185. btn
  186. (
  187. set::type('ghost'),
  188. set::size('sm'),
  189. setClass('text-gray ml-4'),
  190. $currentYear . $suffix
  191. ),
  192. set::placement('bottom-end'),
  193. set::menu(array('style' => array('minWidth' => 70, 'width' => 70))),
  194. set::items($items)
  195. )
  196. ),
  197. row
  198. (
  199. setClass('mt-4 text-center'),
  200. col
  201. (
  202. setClass('w-1/3 gap-2'),
  203. div
  204. (
  205. setClass('text-3xl leading-none num'),
  206. $data->finishedReleaseCount['year']
  207. ),
  208. div
  209. (
  210. $lang->block->productoverview->finishedReleaseCount,
  211. !empty($data->finishedReleaseCount['week']) ? div
  212. (
  213. setClass('text-center'),
  214. $lang->block->productoverview->thisWeek,
  215. span
  216. (
  217. setClass('text-warning ml-1 num'),
  218. '+' . $data->finishedReleaseCount['week']
  219. )
  220. ) : null
  221. )
  222. ),
  223. col
  224. (
  225. setClass('w-1/3 gap-2'),
  226. div
  227. (
  228. setClass('text-3xl leading-none num'),
  229. $data->finishedStoryCount['year']
  230. ),
  231. div
  232. (
  233. $lang->block->productoverview->finishedStoryCount,
  234. !empty($data->finishedStoryCount['week']) ? div
  235. (
  236. $lang->block->productoverview->thisWeek,
  237. span
  238. (
  239. setClass('text-warning ml-1 num'),
  240. '+' . $data->finishedStoryCount['week']
  241. )
  242. ) : null
  243. )
  244. ),
  245. col
  246. (
  247. setClass('w-1/3 gap-2'),
  248. div
  249. (
  250. setClass('text-3xl leading-none num'),
  251. $data->finishedStoryPoint['year']
  252. ),
  253. div
  254. (
  255. $lang->block->productoverview->finishedStoryPoint,
  256. span
  257. (
  258. setClass('text-gray'),
  259. '(' . $config->block->storyUnitList[$config->custom->hourPoint] . ')'
  260. ),
  261. !empty($data->finishedStoryPoint['week']) ? div
  262. (
  263. $lang->block->productoverview->thisWeek,
  264. span
  265. (
  266. setClass('text-warning ml-1 num'),
  267. '+' . $data->finishedStoryPoint['week']
  268. )
  269. ) : null
  270. )
  271. )
  272. )
  273. )
  274. );
  275. }
  276. render();