task.blade.php 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437
  1. @extends('admin/layout')
  2. @section('header')
  3. <link rel="stylesheet" href="{{asset('js/plugins/bootstrap-select-1.13.9/dist/css/bootstrap-select.min.css')}}">
  4. <style>
  5. .area {
  6. resize: vertical;
  7. width: 280px;
  8. }
  9. .taskStatus {
  10. font-weight: bold;
  11. font-size: 14px;
  12. }
  13. .addBtn {
  14. margin-left: 10px;
  15. width: 50px;
  16. height: 30px;
  17. line-height: 30px;
  18. border: none;
  19. background-color: #ff6700;
  20. color: white;
  21. outline: none;
  22. }
  23. .my-select {
  24. width: 128px !important;
  25. }
  26. .navNav {
  27. padding: 10px 0 10px 10px;
  28. position: fixed;
  29. top: 10px;
  30. left: 10px;
  31. border: 1px solid gray;
  32. }
  33. .nav-ul {
  34. list-style-type: none;
  35. margin: 0;
  36. padding: 0;
  37. float: left;
  38. }
  39. .clearfix::after {
  40. content: '';
  41. display: block;
  42. clear: both;
  43. }
  44. .nav-ul li {
  45. margin-right: 12px;
  46. float: left;
  47. width: 80px;
  48. height: 32px;
  49. line-height: 32px;
  50. background-color: white;
  51. text-align: center;
  52. font-weight: bold;
  53. cursor: pointer;
  54. }
  55. .nav-active {
  56. background-color: #0d8ddb !important;
  57. color: white;
  58. }
  59. .man-section {
  60. display: none;
  61. }
  62. .section-active {
  63. display: block;
  64. }
  65. </style>
  66. @endsection
  67. @section('content')
  68. <body class="gray-bg" style="padding:10px">
  69. {{-- @if($is_user==0)
  70. <div class="col-md-12">
  71. <form class="row" id="searchForm" action="/admin/plan/week-task/index" method="get">
  72. <div class="col-md-12">
  73. <div class="input-group" style="width: 250px;margin: 0 auto;">
  74. <select class="my-select" name="duty_id" id="duty_id">
  75. <option value="0">请选择</option>
  76. @foreach($allUserList as $key=>$item)
  77. <option value="{{$key}}"
  78. @if($key==$dutyId) selected @endif>{{$item}}</option>
  79. @endforeach
  80. </select>
  81. <span class="input-group-btn">
  82. <button type="button" id="submitbut" class="btn btn-md btn-primary"> 搜索</button>
  83. </span>
  84. </div>
  85. </div>
  86. </form>
  87. </div>
  88. @endif--}}
  89. <nav class="navNav clearfix">
  90. <ul class="nav-ul">
  91. <li class="nav-li nav-active" data-section="0">技术部</li>
  92. <li class="nav-li" data-section="1">设计部</li>
  93. <li class="nav-li" data-section="2">SEO质检</li>
  94. <li class="nav-li" data-section="3">建站质检</li>
  95. <li class="nav-li" data-section="4">策划部</li>
  96. <li class="nav-li" data-section="5">优化部</li>
  97. </ul>
  98. @if ($type =='next')
  99. <button type="button" class="btn btn-danger" onclick="units.migrate()"
  100. style="float: left;margin-right: 10px">迁移
  101. </button>
  102. @endif
  103. </nav>
  104. @php $authUser=auth()->user(); @endphp
  105. <main style="margin-top: 60px;touch-action: none">
  106. @foreach($taskStaffList as $typeIndex=>$typeItem)
  107. <section class="man-section @if($typeIndex=='web') section-active @endif">
  108. <div class="ibox-content"
  109. style="position: fixed;top: 0;right: 0;z-index: 99;border: 1px solid grey;width: 700px;text-align: center">
  110. @foreach($typeItem as $inx=>$name)
  111. <a href="#{{$typeIndex.$inx}}" style="margin-right:20px;">{{$name}}</a>
  112. @endforeach
  113. </div>
  114. @foreach($typeItem as $inx=>$name)
  115. <div class="ibox float-e-margins" id="{{$typeIndex.$inx}}">
  116. <div class="ibox-title" style="border-style: none">
  117. <span style="font-weight:bold;">{{$name}}</span>
  118. </div>
  119. @if(substr($inx,0,3)=='wfp')
  120. @php $limit=0; @endphp
  121. @else
  122. @php $limit=6; @endphp
  123. @endif
  124. <div class="ibox-content">
  125. <ul style="list-style-type: none">
  126. @for($day=0;$day<=$limit;$day++)
  127. <li>
  128. @if(substr($inx,0,3)!='wfp') <span
  129. style="font-weight: bold;font-size: 18px">周{{\App\Http\Models\WeekTaskInfo::DayMap[$day]??'???'}}<span
  130. style="font-size: 14px">【{{$weekDate[$day]}}】 </span> </span>
  131. @endif
  132. <table class="table">
  133. <thead>
  134. <tr>
  135. <td style="width: 7%; font-weight:bold; text-align: center">状态</td>
  136. <td style="width: 10%; font-weight:bold;text-align: center">类型</td>
  137. <td style="width: 10%; font-weight:bold;text-align: center">任务描述</td>
  138. <td style="width: 7%; font-weight:bold;text-align: center">认领人</td>
  139. <td style="width: 7%; font-weight:bold;text-align: center">负责人</td>
  140. <td style="width: 7%; font-weight:bold;text-align: center">前端</td>
  141. <td style="width: 7%; font-weight:bold;text-align: center">设计</td>
  142. <td style="width: 10%; font-weight:bold;text-align: center">检查反馈</td>
  143. <td style="width: 10%; font-weight:bold;text-align: center">创建/期限时间</td>
  144. <td style="width: 10%; font-weight:bold;text-align: center">备注</td>
  145. <td style="width: 15%; font-weight:bold;text-align: center">
  146. <button type="button" class="addBtn" style="width: 80px"
  147. onclick="units.add('{{$typeIndex}}:{{$type}}:{{$day}}:{{$inx}}:0')">
  148. 提需求
  149. </button>
  150. </td>
  151. </tr>
  152. </thead>
  153. <tbody>
  154. @php
  155. if (substr($inx,0,3)=='wfp') {
  156. $dayDataList=array_get($taskInfoList,sprintf('%s.%s',$inx,0));
  157. } else {
  158. $dayDataList=array_get($taskInfoList,sprintf('%s.%s',$inx,$day));
  159. }
  160. $dayDataList=collect($dayDataList??[])->sortBy('sort')->toArray();
  161. @endphp
  162. @foreach($dayDataList as $dayData)
  163. <tr class="sortableList" style="text-align: center">
  164. <td>
  165. <span class="taskStatus">
  166. @php
  167. $beOverdue='';
  168. if($dayData['status']!=='ok' && $dayData['deadline'] && strtotime($dayData['deadline'])< strtotime(date('Y-m-d'))){
  169. $beOverdueDay=(strtotime(date('Y-m-d'))-strtotime($dayData['deadline']))/3600/24;
  170. $beOverdue='逾期'.round($beOverdueDay).'天';
  171. }
  172. @endphp
  173. {{\App\Http\Models\WeekTaskInfo::StatusMap[$dayData['status']]??''}} <span
  174. style="color: red">{{$beOverdue}}</span>
  175. </span>
  176. @php
  177. if(!empty($dayData['complete'])){
  178. echo '<br>'.substr($dayData['complete'],0,10);
  179. }
  180. @endphp
  181. <input type="hidden" name="status"
  182. value="{{$dayData['status']}}">
  183. </td>
  184. <td>
  185. {{$dayData['cond_name']??''}}
  186. </td>
  187. <td>
  188. {{$dayData['describe']??''}}
  189. </td>
  190. <td>
  191. <span style="color: darkred">{{$dayData['user_name']}}</span>
  192. </td>
  193. <td>
  194. {{$dayData['duty_name']}}
  195. </td>
  196. <td>
  197. {{$dayData['web_name']}}
  198. </td>
  199. <td>
  200. {{$dayData['design_name']}}
  201. </td>
  202. <td>
  203. @if($dayData['check_score']==0)
  204. 未评价
  205. @elseif($dayData['check_score']==1)
  206. 非常满意
  207. @elseif($dayData['check_score']==2)
  208. 满意
  209. @elseif($dayData['check_score']==3)
  210. 一般
  211. @endif
  212. </td>
  213. <td>
  214. @if(!empty($dayData['created_at']))
  215. <span style="color: green;font-weight: bold">
  216. @php
  217. echo substr($dayData['created_at'],0,10);
  218. @endphp
  219. </span>
  220. <br>
  221. @endif
  222. @php
  223. if($dayData['status']!=='ok' && $dayData['deadline'] && strtotime($dayData['deadline'])< strtotime(date('Y-m-d'))){
  224. $beOverdueDay=(strtotime(date('Y-m-d'))-strtotime($dayData['deadline']))/3600/24;
  225. if($beOverdueDay>0){
  226. echo "<span style='color: red;font-weight: bold'>{$dayData["deadline"]}</span>";
  227. }
  228. }else{
  229. echo "<span style='font-weight: bold'>{$dayData['deadline']}</span>";
  230. }
  231. @endphp
  232. </td>
  233. <td>
  234. {{$dayData['remark']}}
  235. </td>
  236. <td style="position:relative">
  237. <div>
  238. <input type="hidden" name="taskId"
  239. value="{{$dayData['id']}}">
  240. <button type="button" class="btn btn-default btn-sm"
  241. onclick="units.changeStatus(this,'reset')">重置
  242. </button>
  243. <button type="button" class="btn btn-info btn-sm"
  244. onclick="units.changeStatus(this,'ok')">完成
  245. </button>
  246. <button type="button" class="btn btn-success btn-sm"
  247. onclick="units.changeStatus(this,'pause')">暂停
  248. </button>
  249. </div>
  250. <div>
  251. <button type="button" class="btn btn-warning btn-sm"
  252. onclick="units.del(this)">删除
  253. </button>
  254. <button type="button" class="btn btn-primary btn-sm"
  255. onclick="units.singleSave('{{$dayData['id']}}','{{$typeIndex}}:{{$type}}:{{$day}}:{{$inx}}:1')">
  256. 编辑
  257. </button>
  258. <button type="button" class="btn btn-info btn-sm"
  259. style="background:#d80c18;border:1px solid #d80c18"
  260. onclick="units.release(this,'{{$typeIndex}}')">释放
  261. </button>
  262. </div>
  263. </td>
  264. </tr>
  265. @endforeach
  266. </tbody>
  267. </table>
  268. </li>
  269. @endfor
  270. </ul>
  271. </div>
  272. </div>
  273. @endforeach
  274. </section>
  275. @endforeach
  276. </main>
  277. </body>
  278. @endsection
  279. @section('footer')
  280. <script src="{{asset('js/plugins/bootstrap-select-1.13.9/dist/js/bootstrap-select.min.js')}}"></script>
  281. <script src="{{asset('js/plugins/layDate-v5.2.1/laydate/laydate.js')}}"></script>
  282. <script src="{{asset('js/jquery-ui-1.10.4.min.js')}}"></script>
  283. <script>
  284. //同时绑定多个
  285. lay('.deadline').each(function () {
  286. laydate.render({
  287. elem: this
  288. , trigger: 'click'
  289. });
  290. });
  291. $(function () {
  292. var getIndexNum = sessionStorage.getItem("tabLiNum");
  293. $(".nav-ul li").eq(getIndexNum).addClass('nav-active').siblings().removeClass('nav-active');
  294. $(".man-section").eq(getIndexNum).show().siblings(".man-section").hide();
  295. $(".nav-ul li").on('click', function () {
  296. $(this).addClass('nav-active').siblings().removeClass('nav-active');
  297. $(".man-section").eq($(this).index()).show().siblings(".man-section").hide();
  298. var indexNum = $(this).index(); //所点击li的索引值
  299. //console.log("当前li的下标为:", indexNum); //打印索引值
  300. sessionStorage.setItem("tabLiNum", indexNum); //将(下标名称,索引值)存入session中
  301. })
  302. });
  303. $("#submitbut").click(function () {
  304. $("#searchForm").submit();
  305. });
  306. $(function () {
  307. $('.my-select').selectpicker({
  308. liveSearch: true
  309. });
  310. $(document).on('click', '.nav-li', function () {
  311. var sectionInx = $(this).data('section');
  312. $(".nav-li").each(function (inx) {
  313. if (inx === sectionInx) {
  314. $(this).addClass("nav-active");
  315. } else {
  316. $(this).removeClass("nav-active");
  317. }
  318. });
  319. });
  320. });
  321. var units = {
  322. add: function (type) {
  323. layer.open({
  324. type: 2,
  325. content: ['/admin/plan/week-task/add/0/' + type],
  326. area: ['30%', '70%'],
  327. title: '添加任务'
  328. });
  329. },
  330. del: function (_this) {
  331. layer.confirm('确认删除', {icon: 3, title: '删除'}, function () {
  332. var taskId = $(_this).parent().parent().find("[name=taskId]").val();
  333. if (taskId > 0) {
  334. var ajaxConfig = {
  335. url: '/admin/plan/week-task/del',
  336. type: 'post',
  337. data: {taskId: taskId},
  338. success: function (result) {
  339. layer.msg(result.message, {icon: 6, time: 1000}, function () {
  340. window.location.reload();
  341. });
  342. }
  343. };
  344. tips.ajax(ajaxConfig);
  345. }
  346. });
  347. },
  348. release: function (_this, type) {
  349. layer.confirm('确认释放掉任务吗', {icon: 3, title: '释放'}, function () {
  350. var taskId = $(_this).parent().parent().find("[name=taskId]").val();
  351. if (taskId > 0) {
  352. var ajaxConfig = {
  353. url: '/admin/plan/week-task/release',
  354. type: 'post',
  355. data: {taskId: taskId, type: type},
  356. success: function (result) {
  357. layer.msg(result.message, {icon: 6, time: 1000}, function () {
  358. window.location.reload();
  359. });
  360. }
  361. };
  362. tips.ajax(ajaxConfig);
  363. }
  364. });
  365. },
  366. singleSave: function (taskId, type) {
  367. layer.open({
  368. type: 2,
  369. content: ['/admin/plan/week-task/add/' + taskId + '/' + type],
  370. area: ['30%', '70%'],
  371. title: '修改任务'
  372. });
  373. },
  374. migrate: function () {
  375. layer.confirm('确认迁移', {icon: 3, title: '迁移'}, function () {
  376. var ajaxConfig = {
  377. url: '/admin/plan/week-task/migrate',
  378. type: 'post',
  379. success: function (result) {
  380. layer.msg(result.message, {icon: 6, time: 1500}, function () {
  381. window.location.reload();
  382. });
  383. }
  384. };
  385. tips.ajax(ajaxConfig);
  386. });
  387. },
  388. changeStatus: function (_this, statusType) {
  389. var taskId = $(_this).parent().parent().find("[name=taskId]").val();
  390. if (taskId > 0) {
  391. var ajaxConfig = {
  392. url: '/admin/plan/week-task/change-status',
  393. type: 'post',
  394. data: {taskId: taskId, type: '{{$type}}', statusType: statusType},
  395. success: function (result) {
  396. layer.msg(result.message, {icon: 6, time: 1000}, function () {
  397. window.location.reload();
  398. });
  399. }
  400. };
  401. tips.ajax(ajaxConfig);
  402. }
  403. },
  404. };
  405. </script>
  406. @endsection