oaSchedule.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. layui.define(['tool'], function (exports) {
  2. const tool = layui.tool,layer = layui.layer,form = layui.form,laydate = layui.laydate;
  3. const obj = {
  4. loading:false,
  5. load: function (tid) {
  6. let callback = function (res) {
  7. if (res.code == 0 && res.data.length > 0) {
  8. let itemSchedule = '';
  9. $.each(res.data, function (index, item) {
  10. itemSchedule += `
  11. <div class="pt-2">
  12. <p class="gray">${item.start_time}~${item.end_time},${item.labor_time}工时</p>
  13. <p><span class="blue">${item.name}:</span>${item.title}</p>
  14. </div>
  15. `;
  16. });
  17. $("#schedule_" + tid).html(itemSchedule);
  18. layer.closeAll();
  19. }
  20. }
  21. tool.get("/project/api/task_schedule", { tid: tid }, callback);
  22. },
  23. //保存
  24. save: function (postData) {
  25. let callback = function (e) {
  26. if (e.code == 0) {
  27. layer.closeAll();
  28. layer.msg(e.msg);
  29. if(layui.scheduleTable){
  30. layui.scheduleTable.reload();
  31. }
  32. else{
  33. setTimeout(function(){
  34. location.reload();
  35. },1000);
  36. }
  37. } else {
  38. layer.msg(e.msg);
  39. }
  40. }
  41. tool.post("/oa/schedule/add", postData, callback);
  42. },
  43. //查看
  44. view: function (detail) {
  45. let project = '';
  46. if(detail.tid>0){
  47. project = `<table class="layui-table" style="margin:12px 12px 0;">
  48. <tr>
  49. <td class="layui-td-gray">关联项目</td>
  50. <td>${detail.project}</td>
  51. </tr>
  52. <tr>
  53. <td class="layui-td-gray">关联任务</td>
  54. <td>${detail.task}</td>
  55. </tr>
  56. </table>`;
  57. }
  58. let content = `<div style="width:696px">
  59. <table class="layui-table" style="margin:12px 12px 0;">
  60. <tr>
  61. <td class="layui-td-gray">执行员工</td>
  62. <td>${detail.name}</td>
  63. <td class="layui-td-gray">所在部门</td>
  64. <td>${detail.department}</td>
  65. <td class="layui-td-gray">工作类别</td>
  66. <td>${detail.work_cate}</td>
  67. </tr>
  68. <tr>
  69. <td class="layui-td-gray">时间范围</td>
  70. <td colspan="3">${detail.start_time} 至 ${detail.end_time},共${detail.labor_time}工时</td>
  71. <td class="layui-td-gray">工作类型</td>
  72. <td>${detail.labor_type_string}</td>
  73. </tr>
  74. <tr>
  75. <td class="layui-td-gray">工作内容</td>
  76. <td colspan="5">${detail.title}</td>
  77. </tr>
  78. <tr>
  79. <td class="layui-td-gray">补充描述</td>
  80. <td colspan="5">${detail.remark}</td>
  81. </tr>
  82. </table>
  83. ${project}
  84. </div>`;
  85. $(parent.$('.express-close')).addClass('parent-colse');
  86. layer.open({
  87. type: 1,
  88. title: '工作记录详情',
  89. area: ['720px', '420px'],
  90. content: content,
  91. end: function(){
  92. $(parent.$('.express-close')).removeClass('parent-colse');
  93. },
  94. success: function () {
  95. },
  96. btn: ['关闭'],
  97. btnAlign: 'c',
  98. yes: function (idx) {
  99. layer.close(idx);
  100. }
  101. })
  102. },
  103. add: function (tid, schedule) {
  104. let that = this, detail = {}, title = '添加工作记录';
  105. if(that.loading == true){
  106. return false;
  107. }
  108. that.loading = true;
  109. let html_time = '';
  110. if (schedule['id'] > 0) {
  111. if(schedule['admin_id'] != login_admin){
  112. layer.msg('不能编辑他人的工作记录');
  113. that.loading = false;
  114. return false;
  115. }
  116. title = '编辑工作记录';
  117. detail['id'] = schedule['id'];
  118. detail['cid'] = schedule['cid'];
  119. detail['tid'] = schedule['tid'];
  120. detail['title'] = schedule['title'];
  121. detail['labor_type'] = schedule['labor_type'];
  122. detail['start_time_a'] = schedule['start_time_a'];
  123. detail['start_time_b'] = schedule['start_time_b'];
  124. detail['end_time_a'] = schedule['end_time_a'];
  125. detail['end_time_b'] = schedule['end_time_b'];
  126. detail['remark'] = schedule['remark'];
  127. html_time = detail.start_time_a+' '+detail.start_time_b+' 至 '+detail.end_time_b+',共'+schedule.labor_time+'工时';
  128. } else {
  129. detail['id'] = schedule['id'];
  130. detail['tid'] = tid;
  131. detail['cid'] = 1;
  132. detail['title'] = '';
  133. detail['labor_type'] = 0;
  134. detail['start_time_a'] = schedule['start_time_a']?schedule['start_time_a']:'';
  135. detail['start_time_b'] = '09:00';
  136. detail['end_time_a'] = schedule['end_time_a']?schedule['end_time_a']:'';
  137. detail['end_time_b'] = '09:30';
  138. detail['remark'] = '';
  139. html_time = `<input id="start_time_a" name="start_time_a" style="width:90px; display:inline-block;" autocomplete="off" class="layui-input" value="${detail.start_time_a}" readonly lay-verify="required" lay-reqText="请选择"><div style="display: inline-block; margin-left:3px; width: 80px;"><select lay-filter="start_time_b" id="start_time_b"></select></div> 至 <input id="end_time_a" name="end_time_a" style="width:90px; display:inline-block;" autocomplete="off" class="layui-input" value="${detail.end_time_a}" readonly lay-verify="required" lay-reqText="请选择"><div style="display: inline-block; margin-left:3px; width: 80px;"><select lay-filter="end_time_b" id="end_time_b"></select></div>`;
  140. }
  141. let callback = function(e){
  142. that.loading = false;
  143. if(e.code==0){
  144. let cate = e.data;
  145. let content = `<form class="layui-form" style="width:696px">
  146. <table class="layui-table" style="margin:12px 12px 0;">
  147. <tr>
  148. <td class="layui-td-gray">时间范围 <span style="color: red">*</span></td>
  149. <td>${html_time}</td>
  150. <td class="layui-td-gray">工作类别<font>*</font></td>
  151. <td style="width: 120px;"><select name="cid" lay-filter="work_cate" id="work_cate"></select></td>
  152. </tr>
  153. <tr>
  154. <td class="layui-td-gray">工作类型<font>*</font></td>
  155. <td colspan="3"><input type="radio" name="labor_type" lay-filter="labor_type" value="1" title="案头工作"><input type="radio" name="labor_type" value="2" lay-filter="labor_type" title="外勤工作"></td>
  156. </tr>
  157. <tr>
  158. <td class="layui-td-gray">工作内容 <span style="color: red">*</span></td>
  159. <td colspan="3"><input name="title" class="layui-input" value="${detail.title}" lay-verify="required" lay-reqText="请完成工作内容"></td>
  160. </tr>
  161. <tr>
  162. <td class="layui-td-gray">补充描述</td>
  163. <td colspan="3">
  164. <textarea name="remark" form-input="remark" class="layui-textarea" style="min-height:120px;">${detail.remark}</textarea>
  165. <input name="tid" type="hidden" value="${detail.tid}">
  166. </td>
  167. </tr>
  168. </table>
  169. </form>`;
  170. $(parent.$('.express-close')).addClass('parent-colse');
  171. layer.open({
  172. type: 1,
  173. title: title,
  174. area: ['720px', '420px'],
  175. content: content,
  176. end: function(){
  177. $(parent.$('.express-close')).removeClass('parent-colse');
  178. },
  179. success: function () {
  180. if (detail['id'] == 0) {
  181. //日期时间范围
  182. laydate.render({
  183. elem: '#start_time_a',
  184. type: 'date',
  185. min: -7,
  186. max: 0,
  187. format: 'yyyy-MM-dd',
  188. showBottom: false,
  189. done: function (a, b, c) {
  190. $('#end_time_a').val(a);
  191. detail.start_time_a = a;
  192. detail.end_time_a = a;
  193. }
  194. });
  195. //日期时间范围
  196. laydate.render({
  197. elem: '#end_time_a',
  198. type: 'date',
  199. min: -7,
  200. max: 0,
  201. format: 'yyyy-MM-dd',
  202. showBottom: false,
  203. done: function (a, b, c) {
  204. $('#start_time_a').val(a);
  205. detail.start_time_a = a;
  206. detail.end_time_a = a;
  207. }
  208. });
  209. $('#start_time_b,#end_time_b').empty();
  210. var hourArray = [];
  211. for (var h = 0; h < 24; h++) {
  212. var t = h < 10 ? '0' + h : h
  213. var t_1 = t + ':00', t_2 = t + ':15', t_3 = t + ':30', t_4 = t + ':45';
  214. hourArray.push(t_1, t_2, t_3, t_4);
  215. }
  216. var html_1 = '', html_2 = '', def_h1 = detail['start_time_b'], def_h2 = detail['end_time_b'];
  217. for (var s = 0; s < hourArray.length; s++) {
  218. var check_1 = '', check_2 = '';
  219. if (hourArray[s] == def_h1) {
  220. check_1 = 'selected';
  221. }
  222. if (hourArray[s] == def_h2) {
  223. check_2 = 'selected';
  224. }
  225. html_1 += '<option value="' + hourArray[s] + '" ' + check_1 + '>' + hourArray[s] + '</option>';
  226. html_2 += '<option value="' + hourArray[s] + '" ' + check_2 + '>' + hourArray[s] + '</option>';
  227. }
  228. $('#start_time_b').append(html_1);
  229. $('#end_time_b').append(html_2);
  230. }
  231. $("input[name=labor_type][value="+detail.labor_type+"]").prop("checked","true");
  232. var html_c='';
  233. for (var c = 0; c < cate.length; c++) {
  234. var check_c = '';
  235. if (cate[c].id == detail['cid']) {
  236. check_c = 'selected';
  237. }
  238. html_c += '<option value="' + cate[c].id + '" ' + check_c + '>' + cate[c].title + '</option>';
  239. }
  240. $('#work_cate').append(html_c);
  241. form.render();
  242. form.on('select(start_time_b)', function (data) {
  243. detail.start_time_b = data.value;
  244. });
  245. form.on('select(end_time_b)', function (data) {
  246. detail.end_time_b = data.value;
  247. });
  248. $('[name="title"]').on('input', function () {
  249. var _val = $(this).val();
  250. detail.title = _val;
  251. });
  252. form.on('radio(labor_type)', function(data){
  253. detail.labor_type=data.value;
  254. })
  255. form.on('select(work_cate)', function(data){
  256. detail.cid=data.value;
  257. })
  258. $('[form-input="remark"]').on('input', function () {
  259. var _val = $(this).val();
  260. detail.remark = _val;
  261. });
  262. },
  263. btn: ['确定提交'],
  264. btnAlign: 'c',
  265. yes: function (idx) {
  266. if (detail.start_time_a == '' || detail.end_time_a == '') {
  267. layer.msg('请选择工作时间范围');
  268. return;
  269. }
  270. if(detail.labor_type==0){
  271. layer.msg('请选择工作类型');
  272. return;
  273. }
  274. if (detail.title == '') {
  275. layer.msg('请填写工作内容');
  276. return;
  277. }
  278. that.save(detail);
  279. }
  280. })
  281. }
  282. }
  283. tool.get("/api/index/get_work_cate", {}, callback);
  284. }
  285. };
  286. exports('oaSchedule', obj);
  287. });