var $taskVue = new Vue({ el: "#task-container", data: { select: { currentRow: [], rows: {} }, selectCom: { model: 'post', data: [{ value: 'post', label: 'post' }, { value: 'get', label: 'get' }] }, log: { index: 0, model: false, title: '日志记录', group: '', closable: true, footerHide: true, spin: false, page: 0, data: [] }, isAdd: true, closable: false, footerHide: true, model: false, modelMessage: '任务管理', activedIndex: 0, taskValidate: { taskName: '', groupName: '', interval: '', apiUrl: '', authKey: '', authValue: '', describe: '', requestType: '' }, ruleValidate: { taskName: [{ required: true, message: '作业名称必填', trigger: 'blur' }], groupName: [{ required: true, message: '分组名称必填', trigger: 'blur' }], interval: [{ required: true, message: '间隔(Cron)必填', trigger: 'blur' }], requestType: [{ required: true, message: '请选择请求方式', trigger: 'change' }], apiUrl: [{ required: true, message: 'ApiUrl必填', trigger: 'blur' }] }, taskForm: [ { name: 'taskName', text: '作业名称', value: '', placeholder: '作业名称与触发器名称默认相同', readOnly: false }, { name: 'groupName', text: '分组', value: '', placeholder: '分组名称与分组名称默认相同', readOnly: false }, { name: 'interval', text: '间隔(Cron)', value: '', placeholder: '如10分钟执行一次:0/0 0/10 * * * ? ' }, { name: 'apiUrl', text: 'ApiUrl', value: '', placeholder: "远程调用接口URL" }, { name: 'authKey', text: 'header(key)', value: '', placeholder: '请求header验证的Key' }, { name: 'authValue', text: 'header(value)', value: '', placeholder: '请求header验证的Key' }, { name: 'requestType', text: '请求方式', value: '', onChange: (data,value) => { }, placeholder: 'post/get', type: 'select' }, { name: 'describe', text: '描述', value: '', type: 'textarea' } ], columns: [ { hidden:true, title: '测试', key: 'id', width: 120 }, { type: 'selection', width: 60, align: 'center' }, { title: '作业名称', key: 'taskName', width: 150 }, { title: '分组', key: 'groupName', width: 120 }, { title: '最后执行时间', key: 'lastRunTime', width: 170 }, { title: '间隔(Cron)', key: 'interval', width: 140 }, { title: '状态', key: 'status', width: 80, render: (h, params) => { var style = { color: 'white', background: 'red', padding: '3px 10px', borderRadius: '4px' }; var text = ''; switch (params.row.status) { case 0: style.background = '#0acb0a'; text = '正常'; break; case 1: style.background = '#ed4014'; text = '暂停'; break; case 2: style.background = '#fc2f2f'; text = '完成'; break; case 3: style.background = '#607D8B'; text = '异常'; break; case 4: style.background = '#607D8B'; text = '阻塞'; break; case 5: style.background = '#607D8B'; text = '停止'; break; default: style.background = '#f90'; text = '不存在'; break; } return h('div', [ h('Button', { props: { //type: 'error', size: 'small' }, style: style, on: { click: function () { } } }, text) ]); } }, { title: '描述', key: 'describe', minWidth:200 }, { title: 'ApiUrl', key: 'apiUrl', width: 180 }, { title: '请求方式', key: 'requestType', width: 95 }, { title: '操作', key: 'operat', width: 100, render: (h, params) => { var style = { 'font-size': '12px' }; return h('div', [ h('i-button', { props: { //type: 'error', size: 'small' }, style: style, on: { click: function () { $taskVue.getJobRunLog(params); } } }, '执行记录') ]); } } ], rows: [] }, methods: { onChange(item, value) { if (item.onChange && typeof item.onChange == "function") { item.onChange(value, item); } }, getColumns: function () { var columns = []; this.columns.forEach(function (item) { if (!item.hidden) { columns.push(item); } }) return columns; }, selectRow: function (selection, row) { this.select.currentRow = row; this.select.rows = selection; }, first: function () { $taskVue.log.index = 0; $taskVue.log.page = 0; $taskVue.log.data = []; this.getJobRunLog(null, true); }, next: function () { this.getJobRunLog(null, true); }, getJobRunLog: function (params, next) { if (!next) { //if (!(params.row.taskName === $taskVue.log.title // && params.row.groupName === $taskVue.log.groupName)) { $taskVue.log.page = 0; $taskVue.log.index = 0; $taskVue.log.title = params.row.taskName; $taskVue.log.groupName = params.row.groupName; $taskVue.log.data = []; // } } $taskVue.log.model = true; // $taskVue.log.spin = true; $taskVue.log.page++; $taskVue.ajax("/TaskBackGround/GetRunLog", { taskName: $taskVue.log.title, groupName: $taskVue.log.groupName, page: $taskVue.log.page }, function (data) { if (data.length === 0) { if ($taskVue.log.page >= 1) { $taskVue.log.page--; } if (next) { $taskVue.$Message.success('未查到数据!'); } return; } // $taskVue.log.spin = false; if (next) { $taskVue.log.data = data; // $taskVue.log.data.push(...data); } else { $taskVue.log.data = data; } $taskVue.log.index += $taskVue.log.index ? data.length: 1; }); }, getTaskValidate: function () { }, add: function () { for (var key in this.taskValidate) { this.taskValidate[key] = ''; } this.setFormClass(false); this.model = true; }, tiggerAction: function (action) { if (!this.select.rows.length) return $taskVue.$Message.success('请选择作业!'); this.ajax('/TaskBackGround/' + action, this.select.rows[0], function (data) { if (data.status) { $taskVue.refresh(true); } return $taskVue.$Message.success(data.msg); }); }, update: function () { // this.tiggerAction('update'); if (!this.select.rows.length) return $taskVue.$Message.success('请选择作业!'); this.model = true; //this.taskValidate = this.select.rows.slice(0, 1)[0]; for (var key in this.select.rows[0]) { this.taskValidate[key] = this.select.rows[0][key]; } this.setFormClass(true); //this.taskForm[0] }, refresh: function (_init) { this.select.currentRow = []; this.select.rows = {}; this.ajax("/TaskBackGround/GetJobs", {}, function (data) { data.forEach(function (row) { row.cellClassName = { operat: 'view-log' }; }); $taskVue.rows = data; if (!_init) { return $taskVue.$Message.success('刷新成功!'); } }); }, handleSelectAll(status) { this.$refs.selection.selectAll(status); }, handleSubmit(name) { this.$refs[name].validate((valid) => { if (!valid) { return this.$Message.error('数据填写不完整!'); } this.ajax("/TaskBackGround/" + (this.isAdd ? 'add' : 'update'), this.taskValidate, function (data) { $taskVue.$Message.success(data.msg || '保存成功'); if (data.status) { $taskVue.model = false; $taskVue.refresh(true); } }); }); }, setFormClass: function (readOnly) { this.isAdd = !readOnly; this.modelMessage = !readOnly ? '新建任务' : '修改任务'; this.taskForm.forEach(x => { if (x.name === "taskName" || x.name === "groupName") { x.readOnly = readOnly; } }); }, ajax: function (url, params, fun) { axios({ method: 'post', url: url, params: params, headers: { 'X-Requested-With':'XMLHttpRequest'} }).then(function (response) { fun && fun(response.data); }).catch(function (error) { if (error.response.status === 401) { return window.location.href = '/home/index'; } $taskVue.$Message.success('出错啦!'); console.log(error); }); } }, created: function () { this.refresh(true); }, mounted: function () { //$headerVue.activedIndex = 0; } });