view.html 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. {extend name="../../base/view/common/base" /}
  2. {block name="style"}
  3. <style>
  4. .layui-tab-title .layui-this{background-color:#fff;}
  5. .layui-tab-card,.layui-card{box-shadow:0 0 0 0 rgb(0 0 0 / 10%); border-radius:0; border-top:none;}
  6. .layui-card-tips {color: #969696;}
  7. .layui-card-value {padding: 4px 0 16px;font-size: 18px;color: #1E9FFF;}
  8. .content-content{line-height:1.6;}
  9. .content-content p{margin-bottom:6px;}
  10. .content-content img{max-width:100%; padding:8px; box-sizing: border-box;}
  11. .log-item i{font-weight:800; color:#323232}
  12. .log-content strong{margin:0 4px; color:#323232}
  13. .layui-unselect dl {max-height:188px;}
  14. .layui-table td.table-content img{max-width:100%; height:auto;}
  15. </style>
  16. {/block}
  17. {block name="body"}
  18. <div class="p-page">
  19. <h3 class="pb-3">任务详情</h3>
  20. <table class="layui-table layui-table-form" id="task">
  21. <tr>
  22. <td class="layui-td-gray">任务主题</td>
  23. <td colspan="3" class="click-edit" data-types="text" data-field="title">{$detail.title|default=''}</td>
  24. <td class="layui-td-gray">工作类型</td>
  25. <td class="click-edit" data-types="picker" data-field="work_id" data-type="1" data-picker="workcate">{$detail.cate_name|default='-'}</td>
  26. </tr>
  27. <tr>
  28. <td class="layui-td-gray">负责人员</td>
  29. <td class="click-edit" data-types="adminpicker" data-field="director_uid" data-type="1" data-ids="{$detail.director_uid}" data-names="{$detail.director_name|default=''}">{$detail.director_name|default=''}</td>
  30. <td class="layui-td-gray">协作人</td>
  31. <td colspan="3" class="click-edit" data-types="adminpicker" data-field="assist_admin_ids" data-type="2" data-ids="{$detail.assist_admin_ids}" data-names="{$detail.assist_admin_names|default=''}">{$detail.assist_admin_names|default=''}</td>
  32. </tr>
  33. <tr>
  34. <td class="layui-td-gray">优先级</td>
  35. <td class="click-edit" data-types="dropdown" data-field="priority" data-array="priority" data-text="{$detail.priority}">{$detail.priority_name}</td>
  36. <td class="layui-td-gray">关联项目</td>
  37. <td colspan="3" class="click-edit" data-types="picker" data-field="project_id" data-type="1" data-picker="project">{$detail.project_name|default='-'}</td>
  38. </tr>
  39. <tr>
  40. <td class="layui-td-gray">完成进度</td>
  41. <td class="click-edit" data-types="num" data-field="done_ratio" data-text="{$detail.done_ratio}" data-min="0" data-max="100">{$detail.done_ratio|default='0'}%</td>
  42. <td class="layui-td-gray">估计结束日期</td>
  43. <td class="click-edit" data-types="oadate" data-field="end_time">{$detail.end_time|date='Y-m-d'}</span>{gt name="$detail.delay" value="0"}<span class="red">『逾期 {$detail.delay}天』</span>{/gt}</td>
  44. <td class="layui-td-gray-3">估计工作量(工时)</td>
  45. <td class="click-edit" data-types="num" data-field="plan_hours">{$detail.plan_hours|default=''}</td>
  46. </tr>
  47. <tr>
  48. <td class="layui-td-gray">任务状态</td>
  49. <td class="click-edit" data-types="dropdown" data-field="status" data-array="status" data-text="{$detail.status}">{$detail.status_name}</td>
  50. <td class="layui-td-gray-2">实际完成日期</td>
  51. <td>{eq name="$detail.over_time" value="0"}-{else/}{$detail.over_time|date='Y-m-d'}{/eq}</td>
  52. <td class="layui-td-gray">实际工时</td>
  53. <td>{eq name="$detail.work_hours" value="0"}-{else/}{$detail.work_hours}{/eq}</td>
  54. </tr>
  55. <tr>
  56. <td class="layui-td-gray">相关附件 <button type="button" class="layui-btn layui-btn-xs" id="uploadBtn">附件上传</button></td>
  57. <td colspan="5">
  58. <div class="layui-row" id="uploadBox">
  59. <input type="hidden" data-type="file" name="file_ids" value="{$detail.file_ids|default=''}">
  60. {notempty name="$file_array"}
  61. {volist name="$file_array" id="vo"}
  62. <div class="layui-col-md4" id="uploadFile{$vo.id}">{:file_card($vo)}</div>
  63. {/volist}
  64. {/notempty}
  65. </div>
  66. </td>
  67. </tr>
  68. <tr>
  69. <td colspan="6" class="click-edit" data-types="editor" data-field="content" data-target="content" style="background-color:#FAFAFA;"><strong>任务描述</strong></td>
  70. </tr>
  71. <tr>
  72. <td colspan="6" id="content" class="table-content">{$detail.content|raw}</td>
  73. </tr>
  74. </table>
  75. <div class="layui-tab layui-tab-card" style="margin:0;" lay-filter="docDemoTabBrief">
  76. <ul class="layui-tab-title">
  77. <li class="layui-this">工作记录({$detail.schedules})</li>
  78. <li>员工评论(<span id="commentTotal">0</span>)</li>
  79. <li>操作日志(<span id="logListTotal">0</span>)</li>
  80. </ul>
  81. <div class="layui-tab-content py-1 px-3" style="background-color:#fff;">
  82. <div class="layui-tab-item layui-show py-2">
  83. <table class="layui-hide" id="table_work" lay-filter="table_work"></table>
  84. </div>
  85. <div class="layui-tab-item comment-list">
  86. <div class="comment-input my-2">
  87. <input type="text" id="commentInput" readonly placeholder="发表一下你的看法" class="layui-input" value="">
  88. </div>
  89. <div id="commentBox"></div>
  90. </div>
  91. <div class="layui-tab-item logs-list">
  92. <div id="logList" class="log-timeline p-3"></div>
  93. </div>
  94. </div>
  95. </div>
  96. </div>
  97. <script type="text/html" id="toolbarDemo">
  98. <div>
  99. <div class="layui-input-inline" style="margin-right:12px;"><strong>工作日志</strong></div><div class="layui-input-inline"><button class="layui-btn layui-btn-xs" type="button" lay-event="add">+ 添加工作日志</button></div>
  100. </div>
  101. </script>
  102. {/block}
  103. <!-- /主体 -->
  104. <!-- 脚本 -->
  105. {block name="script"}
  106. <script>
  107. const admin_id = '{$detail.admin_id}';
  108. const detail_id = '{$detail.id}';
  109. const status_array = {:json_encode(get_task_status(1),JSON_UNESCAPED_UNICODE)};
  110. const priority_array = {:json_encode(get_priority(1),JSON_UNESCAPED_UNICODE)};
  111. const moduleInit = ['tool','oaPicker','oaEdit','oaSchedule','oaComment','uploadPlus'];
  112. function gouguInit() {
  113. const oaEdit = layui.oaEdit,work = layui.oaSchedule,comment = layui.oaComment, uploadPlus = layui.uploadPlus, tool = layui.tool, table = layui.table;
  114. oaEdit.log('logList','Task',detail_id);
  115. comment.init({
  116. "box":'commentBox',//容器id
  117. "input": 'commentInput',
  118. "topic_id":detail_id,
  119. "module": 'task',
  120. });
  121. let edit_callback = function(e){
  122. layer.msg(e.msg);
  123. if(e.code==0){
  124. setTimeout(function(){
  125. location.reload();
  126. },1000)
  127. }
  128. }
  129. //附件上传
  130. var attachment = new uploadPlus({
  131. "target":'uploadBtn',
  132. "targetBox":'uploadBox',
  133. "attachment":{
  134. "type":1,//0ajax多文件模式,1ajax单文件单记录模式
  135. "uidDelete":true,//是否开启只有上传人自己才能删除自己的附件
  136. "ajaxSave":function(res){
  137. tool.post('/project/api/add_file',{'topic_id':detail_id,'file_id':res.data.id,'file_name': res.data.name, 'module': 'task'},edit_callback);
  138. },
  139. "ajaxDelete":function(file_id){
  140. tool.delete('/project/api/delete_file', {id: file_id}, edit_callback);
  141. }
  142. }
  143. });
  144. //快捷编辑
  145. oaEdit.init({
  146. box:'task',
  147. id:detail_id,
  148. url: "/project/task/add",
  149. dropdown:{
  150. status:status_array,
  151. priority:priority_array
  152. }
  153. });
  154. //工作记录相关
  155. layui.scheduleTable = table.render({
  156. elem: "#table_work"
  157. , toolbar: "#toolbarDemo"
  158. ,url: "/oa/api/get_schedule"
  159. ,page: true
  160. ,limit: 20
  161. ,where:{task_id:detail_id}
  162. ,cellMinWidth: 80
  163. ,cols: [[
  164. {field:'id',width:80, title: 'ID号', align:'center'}
  165. ,{field:'title',title: '工作内容',minWidth:240}
  166. ,{field: 'name', title: '所属人员', align:'center',width:80}
  167. ,{field: 'start_time', title: '工作时间范围', align:'center',width:260,templet:function(d){
  168. var html=d.start_time+' 至 '+d.end_time;
  169. return html;
  170. }}
  171. ,{field: 'labor_type_string', title: '工作类型', align:'center',width:80}
  172. ,{field: 'labor_time', title: '工时', align:'center',width:80}
  173. ,{field:'create_time', title: '创建时间',width:150,align:'center'}
  174. ,{width:90,fixed:'right',title: '操作', align:'center',ignoreExport:true,templet: function(d){
  175. var html='';
  176. var btn1='<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">详细</a>';
  177. if(d.admin_id !== login_admin){
  178. return btn1;
  179. }
  180. else{
  181. var btn2='<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>';
  182. html = '<div class="layui-btn-group">'+btn1+btn2+'</div>';
  183. return html;
  184. }
  185. }}
  186. ]]
  187. });
  188. table.on('toolbar(table_work)',function (obj) {
  189. if (obj.event === 'add') {
  190. work.add(detail_id,{'id':0});
  191. }
  192. });
  193. table.on('tool(table_work)',function (obj) {
  194. var checkStatus = table.checkStatus(obj.config.id); //获取选中行状态
  195. var data = obj.data;
  196. if (obj.event === 'view') {
  197. work.view(data);
  198. return;
  199. }
  200. if (obj.event === 'edit') {
  201. work.add(data.task_id,data);
  202. return;
  203. }
  204. if (obj.event === 'del') {
  205. layer.confirm('确定要删除该内容吗?', { icon: 3, title: '提示' }, function (index) {
  206. let callback = function (e) {
  207. layer.msg(e.msg);
  208. if (e.code == 0) {
  209. obj.del();
  210. }
  211. }
  212. tool.delete("/project/task/del", { id: data.id }, callback);
  213. layer.close(index);
  214. });
  215. return;
  216. }
  217. });
  218. //工作记录相关
  219. $('.add-schedule').on('click', function () {
  220. work.add(detail_id,{'id':0});
  221. })
  222. //回复
  223. $('#comment_task_' + detail_id).on('click', '[data-event="replay"]', function () {
  224. let pid = $(this).data('id');
  225. let to_uid = $(this).data('uid');
  226. let to_unames = $(this).data('unames');
  227. comment.textarea(0,detail_id,'task','',pid,to_uid,to_unames);
  228. })
  229. //编辑
  230. $('#comment_task_' + detail_id).on('click', '[data-event="edit"]', function () {
  231. let id = $(this).data('id');
  232. let content = $('#comment_' + id).data('content');
  233. comment.textarea(id, detail_id, 'task', content,0,0,'');
  234. })
  235. //删除
  236. $('#comment_task_' + detail_id).on('click', '[data-event="del"]', function () {
  237. let id = $(this).data('id');
  238. comment.del(id, detail_id, 'task');
  239. })
  240. }
  241. </script>
  242. {/block}