|
62 | 62 | </div> |
63 | 63 | </div> |
64 | 64 |
|
| 65 | +<div id="jobEditDlgContent" class="hidden"> |
| 66 | + <form id="jobEditDlgForm" class="form-horizontal"> |
| 67 | + <div class="row"> |
| 68 | + <span class="hidden" id="oldJobInfo"> |
| 69 | + </span> |
| 70 | + <input type="hidden" name="jobId" value=""/> |
| 71 | + <input type="hidden" name="taskTrackerNodeGroup" value=""/> |
| 72 | + |
| 73 | + <div class="control-group span8"> |
| 74 | + <label class="control-label">CronExpression:</label> |
| 75 | + |
| 76 | + <div class="controls"> |
| 77 | + <input type="text" name="cronExpression" class="input-normal control-text" |
| 78 | + data-rules="{required : true}"> |
| 79 | + </div> |
| 80 | + </div> |
| 81 | + <div class="control-group span8"> |
| 82 | + <label class="control-label">优先级:</label> |
| 83 | + |
| 84 | + <div class="controls"> |
| 85 | + <input type="text" name="priority" placeholder="数值越小,优先级越大" class="input-normal control-text" |
| 86 | + data-rules="{required : true, number:true}"> |
| 87 | + </div> |
| 88 | + </div> |
| 89 | + <div class="control-group span8"> |
| 90 | + <label class="control-label">提交节点组:</label> |
| 91 | + |
| 92 | + <div class="controls"> |
| 93 | + <input type="text" name="submitNodeGroup" class="input-normal control-text" |
| 94 | + data-rules="{required : true}"> |
| 95 | + </div> |
| 96 | + </div> |
| 97 | + <div class="control-group span8"> |
| 98 | + <label class="control-label">反馈客户端:</label> |
| 99 | + |
| 100 | + <div class="controls"> |
| 101 | + <select class="input-normal" name="needFeedback"> |
| 102 | + <option value="true">是</option> |
| 103 | + <option value="false">否</option> |
| 104 | + </select> |
| 105 | + </div> |
| 106 | + </div> |
| 107 | + </div> |
| 108 | + <div class="row"> |
| 109 | + <div class="control-group span15"> |
| 110 | + <label class="control-label">用户参数(JSON):</label> |
| 111 | + |
| 112 | + <div class="controls control-row4"> |
| 113 | + <textarea class="input-large" name="extParams" type="text"></textarea> |
| 114 | + </div> |
| 115 | + </div> |
| 116 | + </div> |
| 117 | + </form> |
| 118 | +</div> |
| 119 | + |
65 | 120 | <script type="text/javascript"> |
66 | 121 | BUI.use('common/page'); |
67 | 122 | </script> |
|
72 | 127 | function buiInit(BUI, Grid, Form, Data, Overlay, DateUtil) { |
73 | 128 |
|
74 | 129 | var columns = [ |
75 | | - {title: '任务ID', dataIndex: 'taskId', width: 230, sortable: false}, |
| 130 | + {title: '任务ID', dataIndex: 'taskId', width: 240, sortable: false}, |
76 | 131 | {title: '提交节点组', dataIndex: 'submitNodeGroup', width: 150}, |
77 | 132 | {title: '执行节点组', dataIndex: 'taskTrackerNodeGroup', width: 150}, |
78 | 133 | { |
|
111 | 166 | { |
112 | 167 | title: '操作', dataIndex: '', width: 90, sortable: false, renderer: function (value, obj) { |
113 | 168 | var logUrl = "/job-logger/job-logger.htm?taskId=" + obj.taskId + "&taskTrackerNodeGroup=" + obj.taskTrackerNodeGroup; |
114 | | - return '<a target="_blank" href="'+ logUrl +'">日志</a>'; |
| 169 | + return '<a target="_blank" href="' + logUrl + '">日志</a> ' + |
| 170 | + '<a href="javascript:;" class="job-edit-btn">编辑<span class="hidden">' + JSON.stringify(obj) + '</span></a> ' + |
| 171 | + '<a href="javascript:;" class="job-del-btn" cronExpression="' + obj.cronExpression + '" jobId="' + obj.jobId + '" taskTrackerNodeGroup="' + obj.taskTrackerNodeGroup + '">删除</a>'; |
115 | 172 | } |
116 | 173 | } |
117 | 174 | ]; |
|
134 | 191 | bbar: { |
135 | 192 | pagingBar: true |
136 | 193 | }, |
137 | | - emptyDataTpl : '<div class="centered">查询的数据不存在</div>', |
| 194 | + emptyDataTpl: '<div class="centered">查询的数据不存在</div>', |
138 | 195 | store: store |
139 | 196 | }); |
140 | 197 | grid.render(); |
|
156 | 213 | }); |
157 | 214 |
|
158 | 215 | $('#btnSearch').trigger("click"); |
| 216 | +
|
| 217 | + var jobEditDlgForm = new Form.HForm({ |
| 218 | + srcNode: '#jobEditDlgForm' |
| 219 | + }).render(); |
| 220 | +
|
| 221 | + var editForm = $("#jobEditDlgForm"); |
| 222 | +
|
| 223 | + var jobEditDlg = new Overlay.Dialog({ |
| 224 | + title: '修改定时任务', |
| 225 | + width: 500, |
| 226 | + height: 320, |
| 227 | + contentId: 'jobEditDlgContent', |
| 228 | + success: function () { |
| 229 | +
|
| 230 | + if (!jobEditDlgForm.isValid()) { |
| 231 | + return; |
| 232 | + } |
| 233 | +
|
| 234 | + // 判断时间 |
| 235 | + // 提交表单,查看修改了哪些属性 |
| 236 | + var oldJob = JSON.parse(editForm.find("#oldJobInfo").text()); |
| 237 | + var updateJSON = {jobId: oldJob.jobId}; |
| 238 | + var cronExpression = editForm.find("input[name='cronExpression']").val(); |
| 239 | + if (cronExpression.trim() != oldJob.cronExpression) { |
| 240 | + // 表示修改了 |
| 241 | + updateJSON['cronExpression'] = cronExpression; |
| 242 | + } |
| 243 | + var priority = editForm.find("input[name='priority']").val(); |
| 244 | + if (priority.trim() != (oldJob.priority + '')) { |
| 245 | + updateJSON['priority'] = priority; |
| 246 | + } |
| 247 | + var needFeedback = editForm.find("select[name='needFeedback']").val(); |
| 248 | + if (needFeedback.trim() != (oldJob.needFeedback + '')) { |
| 249 | + updateJSON['needFeedback'] = needFeedback; |
| 250 | + } |
| 251 | + var extParams = editForm.find("textarea[name='extParams']").val(); |
| 252 | + if (!extParams) { |
| 253 | + extParams = '{}'; |
| 254 | + } |
| 255 | + // 验证是不是JSON |
| 256 | + try { |
| 257 | + JSON.parse(extParams.trim()); |
| 258 | + } catch (e) { |
| 259 | + BUI.Message.Alert("请输入正确的用户参数,JSON格式!"); |
| 260 | + return; |
| 261 | + } |
| 262 | + if (extParams.trim() != JSON.stringify(oldJob.extParams)) { |
| 263 | + updateJSON['extParams'] = extParams; |
| 264 | + } |
| 265 | + var taskTrackerNodeGroup = editForm.find("input[name='taskTrackerNodeGroup']").val(); |
| 266 | + updateJSON['taskTrackerNodeGroup'] = taskTrackerNodeGroup; |
| 267 | + var submitNodeGroup = editForm.find("input[name='submitNodeGroup']").val(); |
| 268 | + if (submitNodeGroup.trim() != oldJob.submitNodeGroup) { |
| 269 | + updateJSON['submitNodeGroup'] = submitNodeGroup; |
| 270 | + } |
| 271 | +
|
| 272 | + // 判断是否修改过 |
| 273 | + console.log(updateJSON); |
| 274 | + var modified = false; |
| 275 | + for (var key in updateJSON) { |
| 276 | + if (key != 'jobId') { |
| 277 | + modified = true; |
| 278 | + break; |
| 279 | + } |
| 280 | + } |
| 281 | + if (modified) { |
| 282 | + // 请求修改数据 |
| 283 | + $.ajax({ |
| 284 | + url: '/api/job-queue/executable-job-update', |
| 285 | + type: 'POST', |
| 286 | + dataType: 'json', |
| 287 | + data: updateJSON, |
| 288 | + success: function (json) { |
| 289 | + if (json && json.success) { |
| 290 | + BUI.Message.Alert("修改成功"); |
| 291 | + location.reload(); |
| 292 | + } else { |
| 293 | + BUI.Message.Alert("修改失败, " + json.msg); |
| 294 | + } |
| 295 | + } |
| 296 | + }); |
| 297 | + } else { |
| 298 | + jobEditDlg.close(); |
| 299 | + } |
| 300 | + } |
| 301 | + }); |
| 302 | +
|
| 303 | + // 编辑按钮 |
| 304 | + $(document).on("click", ".job-edit-btn", function () { |
| 305 | + var jobText = $(this).children("span").text(); |
| 306 | + var job = JSON.parse(jobText); |
| 307 | + editForm.find("#oldJobInfo").html(jobText); |
| 308 | + editForm.find("input[name='jobId']").val(job.jobId); |
| 309 | + editForm.find("input[name='cronExpression']").val(job.cronExpression); |
| 310 | + editForm.find("input[name='priority']").val(job.priority); |
| 311 | + editForm.find("input[name='submitNodeGroup']").val(job.submitNodeGroup); |
| 312 | + editForm.find("input[name='taskTrackerNodeGroup']").val(job.taskTrackerNodeGroup); |
| 313 | + editForm.find("select[name='needFeedback']").val("" + job.needFeedback); |
| 314 | + editForm.find("textarea[name='extParams']").val(JSON.stringify(job.extParams)); |
| 315 | + jobEditDlg.show(); |
| 316 | + }); |
| 317 | +
|
| 318 | + $(document).on("click", ".job-del-btn", function () { |
| 319 | + var jobId = $(this).attr("jobId"); |
| 320 | + var taskTrackerNodeGroup = $(this).attr("taskTrackerNodeGroup"); |
| 321 | + var cronExpression = $(this).attr("cronExpression"); |
| 322 | + var msg = "确认要删除该条任务吗?"; |
| 323 | + if (cronExpression) { |
| 324 | + msg = msg + " 该条是Cron Job 删除将影响下次执行,记得在定时队列管理中也将该任务删除掉!"; |
| 325 | + } |
| 326 | +
|
| 327 | + var that = $(this); |
| 328 | + BUI.Message.Confirm(msg, function () { |
| 329 | + $.ajax({ |
| 330 | + url: '/api/job-queue/executable-job-delete', |
| 331 | + type: 'POST', |
| 332 | + dataType: 'json', |
| 333 | + data: {jobId: jobId, taskTrackerNodeGroup: taskTrackerNodeGroup}, |
| 334 | + success: function (json) { |
| 335 | + if (json && json.success) { |
| 336 | + BUI.Message.Alert("删除成功!"); |
| 337 | + that.parents(".bui-grid-row").remove(); |
| 338 | + } else { |
| 339 | + BUI.Message.Alert("删除失败, " + json.msg); |
| 340 | + } |
| 341 | + } |
| 342 | + }); |
| 343 | + }, 'question'); |
| 344 | + }); |
159 | 345 | } |
160 | 346 |
|
161 | 347 | </script> |
|
0 commit comments