From ce97a870398b6b745aa03843d55162a48830f936 Mon Sep 17 00:00:00 2001 From: tjq Date: Sat, 28 Nov 2020 20:59:04 +0800 Subject: [PATCH] feat: valid TimeExpression #116 --- .../server/service/ValidateService.java | 71 +++++ .../server/web/controller/ToolController.java | 42 --- .../web/controller/ValidateController.java | 32 ++ .../web/response/WorkflowInstanceInfoVO.java | 4 +- .../src/main/resources/static/js/10.js | 84 +++-- .../src/main/resources/static/js/2.js | 298 +++++++++--------- .../src/main/resources/static/js/3.js | 188 +++++------ .../src/main/resources/static/js/4.js | 190 ++++++----- .../src/main/resources/static/js/6.js | 183 ++++++----- .../src/main/resources/static/js/7.js | 91 +++--- .../src/main/resources/static/js/8.js | 80 ++--- .../src/main/resources/static/js/9.js | 80 ++--- .../src/main/resources/static/js/app.js | 8 +- 13 files changed, 767 insertions(+), 584 deletions(-) create mode 100644 powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/ValidateService.java delete mode 100644 powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/ToolController.java create mode 100644 powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/ValidateController.java diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/ValidateService.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/ValidateService.java new file mode 100644 index 00000000..742ecfee --- /dev/null +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/ValidateService.java @@ -0,0 +1,71 @@ +package com.github.kfcfans.powerjob.server.service; + +import com.github.kfcfans.powerjob.common.OmsConstant; +import com.github.kfcfans.powerjob.common.TimeExpressionType; +import com.github.kfcfans.powerjob.server.common.utils.CronExpression; +import com.google.common.collect.Lists; +import org.apache.commons.lang3.time.DateFormatUtils; + +import java.text.ParseException; +import java.util.Collections; +import java.util.Date; +import java.util.List; + +/** + * 校验服务 + * + * @author tjq + * @since 2020/11/28 + */ +public class ValidateService { + + private static final int NEXT_N_TIMES = 5; + + /** + * 计算指定时间表达式接下来的运行状况 + * @param timeExpressionType 时间表达式类型 + * @param timeExpression 时间表达式 + * @return 最近 N 次运行的时间 + * @throws Exception 异常 + */ + public static List calculateNextTriggerTime(TimeExpressionType timeExpressionType, String timeExpression) throws Exception { + switch (timeExpressionType) { + case API: return Lists.newArrayList(OmsConstant.NONE); + case WORKFLOW: return Lists.newArrayList("VALID: depends on workflow"); + case CRON: return calculateCronExpression(timeExpression); + case FIX_RATE: return calculateFixRate(timeExpression); + case FIX_DELAY: return Lists.newArrayList("VALID: depends on execution cost time"); + } + // impossible + return Collections.emptyList(); + } + + + private static List calculateFixRate(String timeExpression) { + List result = Lists.newArrayList(); + long delay = Long.parseLong(timeExpression); + for (int i = 0; i < NEXT_N_TIMES; i++) { + long nextTime = System.currentTimeMillis() + i * delay; + result.add(DateFormatUtils.format(nextTime, OmsConstant.TIME_PATTERN)); + } + return result; + } + + private static List calculateCronExpression(String expression) throws ParseException { + CronExpression cronExpression = new CronExpression(expression); + List result = Lists.newArrayList(); + Date time = new Date(); + for (int i = 0; i < NEXT_N_TIMES; i++) { + Date nextValidTime = cronExpression.getNextValidTimeAfter(time); + if (nextValidTime == null) { + break; + } + result.add(DateFormatUtils.format(nextValidTime.getTime(), OmsConstant.TIME_PATTERN)); + time = nextValidTime; + } + if (result.isEmpty()) { + result.add("INVALID: no next validate schedule time"); + } + return result; + } +} diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/ToolController.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/ToolController.java deleted file mode 100644 index 318a865e..00000000 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/ToolController.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.github.kfcfans.powerjob.server.web.controller; - -import com.github.kfcfans.powerjob.common.OmsConstant; -import com.github.kfcfans.powerjob.common.response.ResultDTO; -import com.github.kfcfans.powerjob.server.common.utils.CronExpression; -import com.google.common.collect.Lists; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.time.DateFormatUtils; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.util.Date; -import java.util.List; - -/** - * 工具 Controller - * - * @author tjq - * @since 2020/11/28 - */ -@Slf4j -@RestController -@RequestMapping("/tool") -public class ToolController { - - @GetMapping("/validateCron") - public ResultDTO> calculateNextCronTriggerTime(String expression) throws Exception { - CronExpression cronExpression = new CronExpression(expression); - List result = Lists.newArrayList(); - Date time = new Date(); - for (int i = 0; i < 10; i++) { - Date nextValidTime = cronExpression.getNextValidTimeAfter(time); - if (nextValidTime == null) { - break; - } - result.add(DateFormatUtils.format(nextValidTime.getTime(), OmsConstant.TIME_PATTERN)); - time = nextValidTime; - } - return ResultDTO.success(result); - } -} diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/ValidateController.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/ValidateController.java new file mode 100644 index 00000000..cb9b122e --- /dev/null +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/ValidateController.java @@ -0,0 +1,32 @@ +package com.github.kfcfans.powerjob.server.web.controller; + +import com.github.kfcfans.powerjob.common.TimeExpressionType; +import com.github.kfcfans.powerjob.common.response.ResultDTO; +import com.github.kfcfans.powerjob.server.service.ValidateService; +import com.google.common.collect.Lists; +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 校验控制器 + * + * @author tjq + * @since 2020/11/28 + */ +@RestController +@RequestMapping("/validate") +public class ValidateController { + + @GetMapping("/timeExpression") + public ResultDTO> checkTimeExpression(TimeExpressionType timeExpressionType, String timeExpression) { + try { + return ResultDTO.success(ValidateService.calculateNextTriggerTime(timeExpressionType, timeExpression)); + } catch (Exception e) { + return ResultDTO.success(Lists.newArrayList(ExceptionUtils.getMessage(e))); + } + } +} diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/response/WorkflowInstanceInfoVO.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/response/WorkflowInstanceInfoVO.java index ed1e2daa..1524a848 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/response/WorkflowInstanceInfoVO.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/response/WorkflowInstanceInfoVO.java @@ -51,7 +51,9 @@ public class WorkflowInstanceInfoVO { vo.setWorkflowId(String.valueOf(wfInstanceDO.getWorkflowId())); // 格式化时间 - vo.setExpectedTriggerTime(DateFormatUtils.format(wfInstanceDO.getExpectedTriggerTime(), OmsConstant.TIME_PATTERN)); + if (wfInstanceDO.getExpectedTriggerTime() != null) { + vo.setExpectedTriggerTime(DateFormatUtils.format(wfInstanceDO.getExpectedTriggerTime(), OmsConstant.TIME_PATTERN)); + } vo.setActualTriggerTime(DateFormatUtils.format(wfInstanceDO.getActualTriggerTime(), OmsConstant.TIME_PATTERN)); if (wfInstanceDO.getFinishedTime() == null) { vo.setFinishedTime(OmsConstant.NONE); diff --git a/powerjob-server/src/main/resources/static/js/10.js b/powerjob-server/src/main/resources/static/js/10.js index df7d7196..76514e9c 100644 --- a/powerjob-server/src/main/resources/static/js/10.js +++ b/powerjob-server/src/main/resources/static/js/10.js @@ -1,62 +1,96 @@ (window["webpackJsonp"] = window["webpackJsonp"] || []).push([[10],{ -/***/ "./node_modules/cache-loader/dist/cjs.js?!./node_modules/babel-loader/lib/index.js!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/components/views/JobManager.vue?vue&type=script&lang=js&": -/*!*************************************************************************************************************************************************************************************************************************************************************!*\ - !*** ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/views/JobManager.vue?vue&type=script&lang=js& ***! - \*************************************************************************************************************************************************************************************************************************************************************/ +/***/ "./node_modules/cache-loader/dist/cjs.js?!./node_modules/babel-loader/lib/index.js!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/components/views/WFInstanceManager.vue?vue&type=script&lang=js&": +/*!********************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/views/WFInstanceManager.vue?vue&type=script&lang=js& ***! + \********************************************************************************************************************************************************************************************************************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: \"JobManager\",\n data: function data() {\n return {\n modifiedJobFormVisible: false,\n // 新建任务对象\n modifiedJobForm: {\n id: undefined,\n jobName: \"\",\n jobDescription: \"\",\n appId: this.$store.state.appInfo.id,\n jobParams: \"\",\n timeExpressionType: \"\",\n timeExpression: \"\",\n executeType: \"\",\n processorType: \"\",\n processorInfo: \"\",\n maxInstanceNum: 0,\n concurrency: 5,\n instanceTimeLimit: 0,\n instanceRetryNum: 0,\n taskRetryNum: 1,\n minCpuCores: 0,\n minMemorySpace: 0,\n minDiskSpace: 0,\n enable: true,\n designatedWorkers: \"\",\n maxWorkerCount: 0,\n notifyUserIds: []\n },\n // 任务查询请求对象\n jobQueryContent: {\n appId: this.$store.state.appInfo.id,\n index: 0,\n pageSize: 10,\n jobId: undefined,\n keyword: undefined\n },\n // 任务列表(查询结果),包含index、pageSize、totalPages、totalItems、data(List类型)\n jobInfoPageResult: {\n pageSize: 10,\n totalItems: 0,\n data: []\n },\n // 时间表达式选择类型\n timeExpressionTypeOptions: [{\n key: \"API\",\n label: \"API\"\n }, {\n key: \"CRON\",\n label: \"CRON\"\n }, {\n key: \"FIX_RATE\",\n label: this.$t('message.fixRate')\n }, {\n key: \"FIX_DELAY\",\n label: this.$t('message.fixDelay')\n }, {\n key: \"WORKFLOW\",\n label: this.$t('message.workflow')\n }],\n // 处理器类型\n processorTypeOptions: [{\n key: \"EMBEDDED_JAVA\",\n label: \"JAVA\"\n }, {\n key: \"JAVA_CONTAINER\",\n label: this.$t('message.javaContainer')\n }, {\n key: \"SHELL\",\n label: \"SHELL\"\n }, {\n key: \"PYTHON\",\n label: \"PYTHON\"\n }],\n // 执行方式类型\n executeTypeOptions: [{\n key: \"STANDALONE\",\n label: this.$t('message.standalone')\n }, {\n key: \"BROADCAST\",\n label: this.$t('message.broadcast')\n }, {\n key: \"MAP\",\n label: this.$t('message.map')\n }, {\n key: \"MAP_REDUCE\",\n label: this.$t('message.mapReduce')\n }],\n // 用户列表\n userList: []\n };\n },\n methods: {\n // 保存变更,包括新增和修改\n saveJob: function saveJob() {\n var _this = this;\n\n var that = this;\n this.axios.post(\"/job/save\", this.modifiedJobForm).then(function () {\n that.modifiedJobFormVisible = false;\n that.$message.success(_this.$t('message.success')); // 重新加载数据\n\n that.listJobInfos();\n }, function () {\n return that.modifiedJobFormVisible = false;\n });\n },\n // 列出符合当前搜索条件的任务\n listJobInfos: function listJobInfos() {\n var that = this;\n this.axios.post(\"/job/list\", this.jobQueryContent).then(function (res) {\n that.jobInfoPageResult = res;\n });\n },\n // 修改任务状态\n changeJobStatus: function changeJobStatus(data) {\n // switch 会自动更改 enable 的值\n var that = this;\n\n if (data.enable === false) {\n // 仅有,有特殊逻辑(关闭秒级任务),走单独接口\n that.axios.get(\"/job/disable?jobId=\" + data.id).then(function () {\n return that.listJobInfos();\n });\n } else {\n // 启用,则发起正常的保存操作\n this.modifiedJobForm = data;\n this.saveJob();\n }\n },\n // 新增任务,去除旧数据\n onClickNewJob: function onClickNewJob() {\n this.modifiedJobForm.id = undefined;\n this.modifiedJobForm.jobName = undefined;\n this.modifiedJobForm.jobDescription = undefined;\n this.modifiedJobForm.jobParams = undefined;\n this.modifiedJobForm.timeExpression = undefined;\n this.modifiedJobForm.timeExpressionType = undefined;\n this.modifiedJobForm.processorInfo = undefined;\n this.modifiedJobForm.processorType = undefined;\n this.modifiedJobForm.executeType = undefined;\n this.modifiedJobFormVisible = true;\n },\n // 点击 编辑按钮\n onClickModify: function onClickModify(data) {\n // 修复点击编辑后再点击新增 行数据被清空 的问题\n this.modifiedJobForm = JSON.parse(JSON.stringify(data));\n this.modifiedJobFormVisible = true;\n },\n // 点击 立即运行按钮\n onClickRun: function onClickRun(data) {\n var _this2 = this;\n\n var that = this;\n var url = \"/job/run?jobId=\" + data.id;\n this.axios.get(url).then(function () {\n return that.$message.success(_this2.$t('message.success'));\n });\n },\n // 点击 删除任务\n onClickDeleteJob: function onClickDeleteJob(data) {\n var _this3 = this;\n\n var that = this;\n var url = \"/job/delete?jobId=\" + data.id;\n this.axios.get(url).then(function () {\n that.$message.success(_this3.$t('message.success'));\n that.listJobInfos();\n });\n },\n // 点击 历史记录\n onClickRunHistory: function onClickRunHistory(data) {\n console.log(JSON.stringify(data));\n this.$router.push({\n name: 'instanceManager',\n params: {\n jobId: data.id\n }\n });\n },\n // 点击 换页\n onClickChangePage: function onClickChangePage(index) {\n // 后端从0开始,前端从1开始\n this.jobQueryContent.index = index - 1;\n this.listJobInfos();\n },\n // 点击重置按钮\n onClickReset: function onClickReset() {\n this.jobQueryContent.keyword = undefined;\n this.jobQueryContent.jobId = undefined;\n this.listJobInfos();\n },\n verifyPlaceholder: function verifyPlaceholder(processorType) {\n var res;\n\n switch (processorType) {\n case \"EMBEDDED_JAVA\":\n res = this.$t('message.javaProcessorInfoPLH');\n break;\n\n case \"JAVA_CONTAINER\":\n res = this.$t('message.containerProcessorInfoPLH');\n break;\n\n case \"SHELL\":\n res = this.$t('message.shellProcessorInfoPLH');\n break;\n\n case \"PYTHON\":\n res = this.$t('message.pythonProcessorInfoPLH');\n }\n\n return res;\n },\n // 翻译执行类型\n translateExecuteType: function translateExecuteType(executeType) {\n switch (executeType) {\n case \"STANDALONE\":\n return this.$t('message.standalone');\n\n case \"BROADCAST\":\n return this.$t('message.broadcast');\n\n case \"MAP_REDUCE\":\n return this.$t('message.mapReduce');\n\n case \"MAP\":\n return this.$t('message.map');\n\n default:\n return \"UNKNOWN\";\n }\n },\n // 翻译处理器类型\n translateProcessorType: function translateProcessorType(processorType) {\n if (processorType === \"JAVA_CONTAINER\") {\n return this.$t('message.javaContainer');\n }\n\n return processorType;\n }\n },\n mounted: function mounted() {\n // 加载用户信息\n var that = this;\n that.axios.get(\"/user/list\").then(function (res) {\n return that.userList = res;\n }); // 加载任务信息\n\n this.listJobInfos();\n }\n});\n\n//# sourceURL=webpack:///./src/components/views/JobManager.vue?./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options"); +eval("__webpack_require__.r(__webpack_exports__);\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: \"WFInstanceManager\",\n data: function data() {\n return {\n // 查询条件\n wfInstanceQueryContent: {\n appId: this.$store.state.appInfo.id,\n index: 0,\n pageSize: 10,\n wfInstanceId: undefined,\n workflowId: undefined,\n status: \"\"\n },\n // 查询结果\n wfInstancePageResult: {\n pageSize: 10,\n totalItems: 0,\n data: []\n },\n // 工作流实例状态选择\n wfInstanceStatusOptions: [{\n key: \"\",\n label: this.$t('message.all')\n }, {\n key: \"WAITING\",\n label: this.$t('message.waitingDispatch')\n }, {\n key: \"RUNNING\",\n label: this.$t('message.running')\n }, {\n key: \"FAILED\",\n label: this.$t('message.failed')\n }, {\n key: \"SUCCEED\",\n label: this.$t('message.success')\n }, {\n key: \"STOPPED\",\n label: this.$t('message.stopped')\n }]\n };\n },\n methods: {\n listWfInstances: function listWfInstances() {\n var that = this;\n this.axios.post(\"/wfInstance/list\", this.wfInstanceQueryContent).then(function (res) {\n return that.wfInstancePageResult = res;\n });\n },\n // 重置搜索条件\n onClickRest: function onClickRest() {\n this.wfInstanceQueryContent.wfInstanceId = undefined;\n this.wfInstanceQueryContent.workflowId = undefined;\n this.wfInstanceQueryContent.status = \"\";\n this.listWfInstances();\n },\n // 查看工作流详情\n onClickShowDetail: function onClickShowDetail(data) {\n console.log(data);\n this.$router.push({\n name: 'WorkflowInstanceDetail',\n params: {\n wfInstanceId: data.wfInstanceId\n }\n });\n },\n // 停止工作流\n onClickStop: function onClickStop(data) {\n var _this = this;\n\n var that = this;\n var url = \"/wfInstance/stop?wfInstanceId=\" + data.wfInstanceId + \"&appId=\" + this.$store.state.appInfo.id;\n this.axios.get(url).then(function () {\n that.$message.success(_this.$t('message.success')); // 重新加载列表\n\n that.listInstanceInfos();\n });\n },\n // 换页\n onClickChangeInstancePage: function onClickChangeInstancePage(index) {\n // 后端从0开始,前端从1开始\n this.wfInstanceQueryContent.index = index - 1;\n this.listWfInstances();\n },\n // 表单颜色\n wfInstanceTableRowClassName: function wfInstanceTableRowClassName(_ref) {\n var row = _ref.row;\n\n switch (row.status) {\n // 失败\n case 3:\n return \"error-row\";\n // 成功\n\n case 4:\n return \"success-row\";\n\n case 10:\n return \"warning-row\";\n }\n },\n fetchWFStatus: function fetchWFStatus(status) {\n return this.common.translateWfInstanceStatus(status);\n }\n },\n mounted: function mounted() {\n this.listWfInstances();\n }\n});\n\n//# sourceURL=webpack:///./src/components/views/WFInstanceManager.vue?./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options"); /***/ }), -/***/ "./node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"f7b44cbc-vue-loader-template\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/components/views/JobManager.vue?vue&type=template&id=392659be&scoped=true&": -/*!*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ - !*** ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"f7b44cbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/views/JobManager.vue?vue&type=template&id=392659be&scoped=true& ***! - \*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ "./node_modules/cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"f7b44cbc-vue-loader-template\"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/components/views/WFInstanceManager.vue?vue&type=template&id=bfc76970&": +/*!****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"f7b44cbc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/views/WFInstanceManager.vue?vue&type=template&id=bfc76970& ***! + \****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /*! exports provided: render, staticRenderFns */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { attrs: { id: \"job_manager\" } },\n [\n _c(\n \"el-row\",\n { attrs: { gutter: 20 } },\n [\n _c(\n \"el-col\",\n { attrs: { span: 20 } },\n [\n _c(\n \"el-form\",\n {\n staticClass: \"el-form--inline\",\n attrs: { inline: true, model: _vm.jobQueryContent }\n },\n [\n _c(\n \"el-form-item\",\n { attrs: { label: _vm.$t(\"message.jobId\") } },\n [\n _c(\"el-input\", {\n attrs: { placeholder: _vm.$t(\"message.jobId\") },\n model: {\n value: _vm.jobQueryContent.jobId,\n callback: function($$v) {\n _vm.$set(_vm.jobQueryContent, \"jobId\", $$v)\n },\n expression: \"jobQueryContent.jobId\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: _vm.$t(\"message.keyword\") } },\n [\n _c(\"el-input\", {\n attrs: { placeholder: _vm.$t(\"message.keyword\") },\n model: {\n value: _vm.jobQueryContent.keyword,\n callback: function($$v) {\n _vm.$set(_vm.jobQueryContent, \"keyword\", $$v)\n },\n expression: \"jobQueryContent.keyword\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n [\n _c(\n \"el-button\",\n {\n attrs: { type: \"primary\" },\n on: { click: _vm.listJobInfos }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.query\")))]\n ),\n _c(\n \"el-button\",\n {\n attrs: { type: \"cancel\" },\n on: { click: _vm.onClickReset }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.reset\")))]\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n ),\n _c(\"el-col\", { attrs: { span: 4 } }, [\n _c(\n \"div\",\n { staticStyle: { float: \"right\", \"padding-right\": \"10px\" } },\n [\n _c(\n \"el-button\",\n {\n attrs: { type: \"primary\" },\n on: { click: _vm.onClickNewJob }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.newJob\")))]\n )\n ],\n 1\n )\n ])\n ],\n 1\n ),\n _c(\n \"el-row\",\n [\n _c(\n \"el-table\",\n {\n staticStyle: { width: \"100%\" },\n attrs: { data: _vm.jobInfoPageResult.data }\n },\n [\n _c(\"el-table-column\", {\n attrs: {\n prop: \"id\",\n label: _vm.$t(\"message.jobId\"),\n width: \"80\"\n }\n }),\n _c(\"el-table-column\", {\n attrs: { prop: \"jobName\", label: _vm.$t(\"message.jobName\") }\n }),\n _c(\"el-table-column\", {\n attrs: { label: _vm.$t(\"message.scheduleInfo\") },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(scope) {\n return [\n _vm._v(\n \" \" +\n _vm._s(scope.row.timeExpressionType) +\n \" \" +\n _vm._s(scope.row.timeExpression) +\n \" \"\n )\n ]\n }\n }\n ])\n }),\n _c(\"el-table-column\", {\n attrs: { label: _vm.$t(\"message.executeType\") },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(scope) {\n return [\n _vm._v(\n \" \" +\n _vm._s(\n _vm.translateExecuteType(scope.row.executeType)\n ) +\n \" \"\n )\n ]\n }\n }\n ])\n }),\n _c(\"el-table-column\", {\n attrs: { label: _vm.$t(\"message.processorType\") },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(scope) {\n return [\n _vm._v(\n \" \" +\n _vm._s(\n _vm.translateProcessorType(\n scope.row.processorType\n )\n ) +\n \" \"\n )\n ]\n }\n }\n ])\n }),\n _c(\"el-table-column\", {\n attrs: { label: _vm.$t(\"message.status\"), width: \"80\" },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(scope) {\n return [\n _c(\"el-switch\", {\n attrs: {\n \"active-color\": \"#13ce66\",\n \"inactive-color\": \"#ff4949\"\n },\n on: {\n change: function($event) {\n return _vm.changeJobStatus(scope.row)\n }\n },\n model: {\n value: scope.row.enable,\n callback: function($$v) {\n _vm.$set(scope.row, \"enable\", $$v)\n },\n expression: \"scope.row.enable\"\n }\n })\n ]\n }\n }\n ])\n }),\n _c(\"el-table-column\", {\n attrs: { label: _vm.$t(\"message.operation\"), width: \"150\" },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(scope) {\n return [\n _c(\n \"el-button\",\n {\n attrs: { size: \"mini\", type: \"text\" },\n on: {\n click: function($event) {\n return _vm.onClickModify(scope.row)\n }\n }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.edit\")))]\n ),\n _c(\n \"el-button\",\n {\n attrs: { size: \"mini\", type: \"text\" },\n on: {\n click: function($event) {\n return _vm.onClickRun(scope.row)\n }\n }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.run\")))]\n ),\n _c(\n \"el-dropdown\",\n { attrs: { trigger: \"click\" } },\n [\n _c(\n \"el-button\",\n { attrs: { size: \"mini\", type: \"text\" } },\n [_vm._v(_vm._s(_vm.$t(\"message.more\")))]\n ),\n _c(\n \"el-dropdown-menu\",\n { attrs: { slot: \"dropdown\" }, slot: \"dropdown\" },\n [\n _c(\n \"el-dropdown-item\",\n [\n _c(\n \"el-button\",\n {\n attrs: { size: \"mini\", type: \"text\" },\n on: {\n click: function($event) {\n return _vm.onClickRunHistory(\n scope.row\n )\n }\n }\n },\n [\n _vm._v(\n _vm._s(_vm.$t(\"message.runHistory\"))\n )\n ]\n )\n ],\n 1\n ),\n _c(\n \"el-dropdown-item\",\n [\n _c(\n \"el-button\",\n {\n attrs: { size: \"mini\", type: \"text\" },\n on: {\n click: function($event) {\n return _vm.onClickDeleteJob(\n scope.row\n )\n }\n }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.delete\")))]\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n }\n }\n ])\n })\n ],\n 1\n )\n ],\n 1\n ),\n _c(\n \"el-row\",\n [\n _c(\"el-pagination\", {\n attrs: {\n layout: \"prev, pager, next\",\n total: this.jobInfoPageResult.totalItems,\n \"page-size\": this.jobInfoPageResult.pageSize,\n \"hide-on-single-page\": true\n },\n on: { \"current-change\": _vm.onClickChangePage }\n })\n ],\n 1\n ),\n _c(\n \"el-dialog\",\n {\n attrs: { visible: _vm.modifiedJobFormVisible, width: \"60%\" },\n on: {\n \"update:visible\": function($event) {\n _vm.modifiedJobFormVisible = $event\n }\n }\n },\n [\n _c(\n \"el-form\",\n { attrs: { model: _vm.modifiedJobForm, \"label-width\": \"120px\" } },\n [\n _c(\n \"el-form-item\",\n { attrs: { label: _vm.$t(\"message.jobName\") } },\n [\n _c(\"el-input\", {\n model: {\n value: _vm.modifiedJobForm.jobName,\n callback: function($$v) {\n _vm.$set(_vm.modifiedJobForm, \"jobName\", $$v)\n },\n expression: \"modifiedJobForm.jobName\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: _vm.$t(\"message.jobDescription\") } },\n [\n _c(\"el-input\", {\n model: {\n value: _vm.modifiedJobForm.jobDescription,\n callback: function($$v) {\n _vm.$set(_vm.modifiedJobForm, \"jobDescription\", $$v)\n },\n expression: \"modifiedJobForm.jobDescription\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: _vm.$t(\"message.jobParams\") } },\n [\n _c(\"el-input\", {\n model: {\n value: _vm.modifiedJobForm.jobParams,\n callback: function($$v) {\n _vm.$set(_vm.modifiedJobForm, \"jobParams\", $$v)\n },\n expression: \"modifiedJobForm.jobParams\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: _vm.$t(\"message.scheduleInfo\") } },\n [\n _c(\n \"el-row\",\n [\n _c(\n \"el-col\",\n { attrs: { span: 8 } },\n [\n _c(\n \"el-select\",\n {\n attrs: {\n placeholder: _vm.$t(\n \"message.timeExpressionType\"\n )\n },\n model: {\n value: _vm.modifiedJobForm.timeExpressionType,\n callback: function($$v) {\n _vm.$set(\n _vm.modifiedJobForm,\n \"timeExpressionType\",\n $$v\n )\n },\n expression: \"modifiedJobForm.timeExpressionType\"\n }\n },\n _vm._l(_vm.timeExpressionTypeOptions, function(\n item\n ) {\n return _c(\"el-option\", {\n key: item.key,\n attrs: { label: item.label, value: item.key }\n })\n }),\n 1\n )\n ],\n 1\n ),\n _c(\n \"el-col\",\n { attrs: { span: 12 } },\n [\n _c(\"el-input\", {\n attrs: {\n placeholder: _vm.$t(\n \"message.timeExpressionPlaceHolder\"\n )\n },\n model: {\n value: _vm.modifiedJobForm.timeExpression,\n callback: function($$v) {\n _vm.$set(\n _vm.modifiedJobForm,\n \"timeExpression\",\n $$v\n )\n },\n expression: \"modifiedJobForm.timeExpression\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-col\",\n { attrs: { span: 4 } },\n [\n _c(\n \"el-link\",\n {\n attrs: {\n href: \"https://www.bejson.com/othertools/cron/\",\n type: \"success\",\n target: \"_blank\"\n }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.onlineCronTool\")))]\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: _vm.$t(\"message.executeConfig\") } },\n [\n _c(\n \"el-row\",\n [\n _c(\n \"el-col\",\n { attrs: { span: 5 } },\n [\n _c(\n \"el-select\",\n {\n attrs: {\n placeholder: _vm.$t(\"message.executeType\")\n },\n model: {\n value: _vm.modifiedJobForm.executeType,\n callback: function($$v) {\n _vm.$set(\n _vm.modifiedJobForm,\n \"executeType\",\n $$v\n )\n },\n expression: \"modifiedJobForm.executeType\"\n }\n },\n _vm._l(_vm.executeTypeOptions, function(item) {\n return _c(\"el-option\", {\n key: item.key,\n attrs: { label: item.label, value: item.key }\n })\n }),\n 1\n )\n ],\n 1\n ),\n _c(\n \"el-col\",\n { attrs: { span: 6 } },\n [\n _c(\n \"el-select\",\n {\n attrs: {\n placeholder: _vm.$t(\"message.processorType\")\n },\n model: {\n value: _vm.modifiedJobForm.processorType,\n callback: function($$v) {\n _vm.$set(\n _vm.modifiedJobForm,\n \"processorType\",\n $$v\n )\n },\n expression: \"modifiedJobForm.processorType\"\n }\n },\n _vm._l(_vm.processorTypeOptions, function(item) {\n return _c(\"el-option\", {\n key: item.key,\n attrs: { label: item.label, value: item.key }\n })\n }),\n 1\n )\n ],\n 1\n ),\n _c(\n \"el-col\",\n { attrs: { span: 13 } },\n [\n _c(\"el-input\", {\n attrs: {\n placeholder: _vm.verifyPlaceholder(\n _vm.modifiedJobForm.processorType\n )\n },\n model: {\n value: _vm.modifiedJobForm.processorInfo,\n callback: function($$v) {\n _vm.$set(\n _vm.modifiedJobForm,\n \"processorInfo\",\n $$v\n )\n },\n expression: \"modifiedJobForm.processorInfo\"\n }\n })\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: _vm.$t(\"message.runtimeConfig\") } },\n [\n _c(\n \"el-row\",\n [\n _c(\n \"el-col\",\n { attrs: { span: 8 } },\n [\n _c(\n \"el-input\",\n {\n staticClass: \"ruleContent\",\n attrs: {\n placeholder: _vm.$t(\"message.maxInstanceNum\")\n },\n model: {\n value: _vm.modifiedJobForm.maxInstanceNum,\n callback: function($$v) {\n _vm.$set(\n _vm.modifiedJobForm,\n \"maxInstanceNum\",\n $$v\n )\n },\n expression: \"modifiedJobForm.maxInstanceNum\"\n }\n },\n [\n _c(\"template\", { slot: \"prepend\" }, [\n _vm._v(_vm._s(_vm.$t(\"message.maxInstanceNum\")))\n ])\n ],\n 2\n )\n ],\n 1\n ),\n _c(\n \"el-col\",\n { attrs: { span: 8 } },\n [\n _c(\n \"el-input\",\n {\n staticClass: \"ruleContent\",\n attrs: {\n placeholder: _vm.$t(\"message.threadConcurrency\")\n },\n model: {\n value: _vm.modifiedJobForm.concurrency,\n callback: function($$v) {\n _vm.$set(\n _vm.modifiedJobForm,\n \"concurrency\",\n $$v\n )\n },\n expression: \"modifiedJobForm.concurrency\"\n }\n },\n [\n _c(\"template\", { slot: \"prepend\" }, [\n _vm._v(\n _vm._s(_vm.$t(\"message.threadConcurrency\"))\n )\n ])\n ],\n 2\n )\n ],\n 1\n ),\n _c(\n \"el-col\",\n { attrs: { span: 8 } },\n [\n _c(\n \"el-input\",\n {\n staticClass: \"ruleContent\",\n attrs: { placeholder: _vm.$t(\"message.timeout\") },\n model: {\n value: _vm.modifiedJobForm.instanceTimeLimit,\n callback: function($$v) {\n _vm.$set(\n _vm.modifiedJobForm,\n \"instanceTimeLimit\",\n $$v\n )\n },\n expression: \"modifiedJobForm.instanceTimeLimit\"\n }\n },\n [\n _c(\"template\", { slot: \"prepend\" }, [\n _vm._v(_vm._s(_vm.$t(\"message.timeout\")))\n ])\n ],\n 2\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: _vm.$t(\"message.retryConfig\") } },\n [\n _c(\n \"el-row\",\n [\n _c(\n \"el-col\",\n { attrs: { span: 12 } },\n [\n _c(\n \"el-input\",\n {\n staticClass: \"ruleContent\",\n attrs: {\n placeholder: _vm.$t(\"message.taskRetryTimes\")\n },\n model: {\n value: _vm.modifiedJobForm.instanceRetryNum,\n callback: function($$v) {\n _vm.$set(\n _vm.modifiedJobForm,\n \"instanceRetryNum\",\n $$v\n )\n },\n expression: \"modifiedJobForm.instanceRetryNum\"\n }\n },\n [\n _c(\"template\", { slot: \"prepend\" }, [\n _vm._v(_vm._s(_vm.$t(\"message.taskRetryTimes\")))\n ])\n ],\n 2\n )\n ],\n 1\n ),\n _c(\n \"el-col\",\n { attrs: { span: 12 } },\n [\n _c(\n \"el-input\",\n {\n staticClass: \"ruleContent\",\n attrs: {\n placeholder: _vm.$t(\"message.subTaskRetryTimes\")\n },\n model: {\n value: _vm.modifiedJobForm.taskRetryNum,\n callback: function($$v) {\n _vm.$set(\n _vm.modifiedJobForm,\n \"taskRetryNum\",\n $$v\n )\n },\n expression: \"modifiedJobForm.taskRetryNum\"\n }\n },\n [\n _c(\"template\", { slot: \"prepend\" }, [\n _vm._v(\n _vm._s(_vm.$t(\"message.subTaskRetryTimes\"))\n )\n ])\n ],\n 2\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: _vm.$t(\"message.workerConfig\") } },\n [\n _c(\n \"el-row\",\n [\n _c(\n \"el-col\",\n { attrs: { span: 8 } },\n [\n _c(\n \"el-input\",\n {\n staticClass: \"ruleContent\",\n attrs: { placeholder: _vm.$t(\"message.minCPU\") },\n model: {\n value: _vm.modifiedJobForm.minCpuCores,\n callback: function($$v) {\n _vm.$set(\n _vm.modifiedJobForm,\n \"minCpuCores\",\n $$v\n )\n },\n expression: \"modifiedJobForm.minCpuCores\"\n }\n },\n [\n _c(\"template\", { slot: \"prepend\" }, [\n _vm._v(_vm._s(_vm.$t(\"message.minCPU\")))\n ])\n ],\n 2\n )\n ],\n 1\n ),\n _c(\n \"el-col\",\n { attrs: { span: 8 } },\n [\n _c(\n \"el-input\",\n {\n staticClass: \"ruleContent\",\n attrs: {\n placeholder: _vm.$t(\"message.minMemory\")\n },\n model: {\n value: _vm.modifiedJobForm.minMemorySpace,\n callback: function($$v) {\n _vm.$set(\n _vm.modifiedJobForm,\n \"minMemorySpace\",\n $$v\n )\n },\n expression: \"modifiedJobForm.minMemorySpace\"\n }\n },\n [\n _c(\"template\", { slot: \"prepend\" }, [\n _vm._v(_vm._s(_vm.$t(\"message.minMemory\")))\n ])\n ],\n 2\n )\n ],\n 1\n ),\n _c(\n \"el-col\",\n { attrs: { span: 8 } },\n [\n _c(\n \"el-input\",\n {\n staticClass: \"ruleContent\",\n attrs: { placeholder: _vm.$t(\"message.minDisk\") },\n model: {\n value: _vm.modifiedJobForm.minDiskSpace,\n callback: function($$v) {\n _vm.$set(\n _vm.modifiedJobForm,\n \"minDiskSpace\",\n $$v\n )\n },\n expression: \"modifiedJobForm.minDiskSpace\"\n }\n },\n [\n _c(\"template\", { slot: \"prepend\" }, [\n _vm._v(_vm._s(_vm.$t(\"message.minDisk\")))\n ])\n ],\n 2\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: _vm.$t(\"message.clusterConfig\") } },\n [\n _c(\n \"el-row\",\n [\n _c(\n \"el-col\",\n { attrs: { span: 16 } },\n [\n _c(\n \"el-input\",\n {\n staticClass: \"ruleContent\",\n attrs: {\n placeholder: _vm.$t(\n \"message.designatedWorkerAddressPLH\"\n )\n },\n model: {\n value: _vm.modifiedJobForm.designatedWorkers,\n callback: function($$v) {\n _vm.$set(\n _vm.modifiedJobForm,\n \"designatedWorkers\",\n $$v\n )\n },\n expression: \"modifiedJobForm.designatedWorkers\"\n }\n },\n [\n _c(\"template\", { slot: \"prepend\" }, [\n _vm._v(\n _vm._s(\n _vm.$t(\"message.designatedWorkerAddress\")\n )\n )\n ])\n ],\n 2\n )\n ],\n 1\n ),\n _c(\n \"el-col\",\n { attrs: { span: 8 } },\n [\n _c(\n \"el-input\",\n {\n staticClass: \"ruleContent\",\n attrs: {\n placeholder: _vm.$t(\"message.maxWorkerNumPLH\")\n },\n model: {\n value: _vm.modifiedJobForm.maxWorkerCount,\n callback: function($$v) {\n _vm.$set(\n _vm.modifiedJobForm,\n \"maxWorkerCount\",\n $$v\n )\n },\n expression: \"modifiedJobForm.maxWorkerCount\"\n }\n },\n [\n _c(\"template\", { slot: \"prepend\" }, [\n _vm._v(_vm._s(_vm.$t(\"message.maxWorkerNum\")))\n ])\n ],\n 2\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: _vm.$t(\"message.alarmConfig\") } },\n [\n _c(\n \"el-select\",\n {\n attrs: {\n multiple: \"\",\n filterable: \"\",\n placeholder: _vm.$t(\"message.alarmSelectorPLH\")\n },\n model: {\n value: _vm.modifiedJobForm.notifyUserIds,\n callback: function($$v) {\n _vm.$set(_vm.modifiedJobForm, \"notifyUserIds\", $$v)\n },\n expression: \"modifiedJobForm.notifyUserIds\"\n }\n },\n _vm._l(_vm.userList, function(user) {\n return _c(\"el-option\", {\n key: user.id,\n attrs: { label: user.username, value: user.id }\n })\n }),\n 1\n )\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n [\n _c(\n \"el-button\",\n { attrs: { type: \"primary\" }, on: { click: _vm.saveJob } },\n [_vm._v(_vm._s(_vm.$t(\"message.save\")))]\n ),\n _c(\n \"el-button\",\n {\n on: {\n click: function($event) {\n _vm.modifiedJobFormVisible = false\n }\n }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.cancel\")))]\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack:///./src/components/views/JobManager.vue?./node_modules/cache-loader/dist/cjs.js?%7B%22cacheDirectory%22:%22node_modules/.cache/vue-loader%22,%22cacheIdentifier%22:%22f7b44cbc-vue-loader-template%22%7D!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { attrs: { id: \"wf_instance_manager\" } },\n [\n _c(\n \"el-row\",\n [\n _c(\n \"el-col\",\n { attrs: { span: 20 } },\n [\n _c(\n \"el-form\",\n {\n staticClass: \"el-form--inline\",\n attrs: { inline: true, model: _vm.wfInstanceQueryContent }\n },\n [\n _c(\n \"el-form-item\",\n { attrs: { label: _vm.$t(\"message.wfId\") } },\n [\n _c(\"el-input\", {\n attrs: { placeholder: _vm.$t(\"message.wfId\") },\n model: {\n value: _vm.wfInstanceQueryContent.workflowId,\n callback: function($$v) {\n _vm.$set(\n _vm.wfInstanceQueryContent,\n \"workflowId\",\n $$v\n )\n },\n expression: \"wfInstanceQueryContent.workflowId\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: _vm.$t(\"message.wfInstanceId\") } },\n [\n _c(\"el-input\", {\n attrs: { placeholder: _vm.$t(\"message.wfInstanceId\") },\n model: {\n value: _vm.wfInstanceQueryContent.wfInstanceId,\n callback: function($$v) {\n _vm.$set(\n _vm.wfInstanceQueryContent,\n \"wfInstanceId\",\n $$v\n )\n },\n expression: \"wfInstanceQueryContent.wfInstanceId\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: _vm.$t(\"message.status\") } },\n [\n _c(\n \"el-select\",\n {\n attrs: { placeholder: _vm.$t(\"message.status\") },\n model: {\n value: _vm.wfInstanceQueryContent.status,\n callback: function($$v) {\n _vm.$set(\n _vm.wfInstanceQueryContent,\n \"status\",\n $$v\n )\n },\n expression: \"wfInstanceQueryContent.status\"\n }\n },\n _vm._l(_vm.wfInstanceStatusOptions, function(item) {\n return _c(\"el-option\", {\n key: item.key,\n attrs: { label: item.label, value: item.key }\n })\n }),\n 1\n )\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n [\n _c(\n \"el-button\",\n {\n attrs: { type: \"primary\" },\n on: { click: _vm.listWfInstances }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.query\")))]\n ),\n _c(\n \"el-button\",\n {\n attrs: { type: \"cancel\" },\n on: { click: _vm.onClickRest }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.reset\")))]\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n ),\n _c(\"el-col\", { attrs: { span: 4 } }, [\n _c(\n \"div\",\n { staticStyle: { float: \"right\", \"padding-right\": \"10px\" } },\n [\n _c(\n \"el-button\",\n {\n attrs: { type: \"primary\" },\n on: { click: _vm.listWfInstances }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.refresh\")))]\n )\n ],\n 1\n )\n ])\n ],\n 1\n ),\n _c(\n \"el-row\",\n [\n _c(\n \"el-table\",\n {\n staticStyle: { width: \"100%\" },\n attrs: {\n data: _vm.wfInstancePageResult.data,\n \"row-class-name\": _vm.wfInstanceTableRowClassName\n }\n },\n [\n _c(\"el-table-column\", {\n attrs: {\n prop: \"workflowId\",\n label: _vm.$t(\"message.wfId\"),\n width: \"160\"\n }\n }),\n _c(\"el-table-column\", {\n attrs: { prop: \"workflowName\", label: _vm.$t(\"message.wfName\") }\n }),\n _c(\"el-table-column\", {\n attrs: {\n prop: \"wfInstanceId\",\n label: _vm.$t(\"message.wfInstanceId\")\n }\n }),\n _c(\"el-table-column\", {\n attrs: {\n prop: \"status\",\n label: _vm.$t(\"message.status\"),\n width: \"160\"\n },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(scope) {\n return [\n _vm._v(\n \" \" +\n _vm._s(_vm.fetchWFStatus(scope.row.status)) +\n \" \"\n )\n ]\n }\n }\n ])\n }),\n _c(\"el-table-column\", {\n attrs: {\n prop: \"actualTriggerTime\",\n label: _vm.$t(\"message.triggerTime\")\n }\n }),\n _c(\"el-table-column\", {\n attrs: {\n prop: \"finishedTime\",\n label: _vm.$t(\"message.finishedTime\")\n }\n }),\n _c(\"el-table-column\", {\n attrs: { label: _vm.$t(\"message.operation\"), width: \"300\" },\n scopedSlots: _vm._u([\n {\n key: \"default\",\n fn: function(scope) {\n return [\n _c(\n \"el-button\",\n {\n attrs: { size: \"medium\" },\n on: {\n click: function($event) {\n return _vm.onClickShowDetail(scope.row)\n }\n }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.detail\")))]\n ),\n _c(\n \"el-button\",\n {\n attrs: { size: \"medium\" },\n on: {\n click: function($event) {\n return _vm.onClickStop(scope.row)\n }\n }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.stop\")))]\n )\n ]\n }\n }\n ])\n })\n ],\n 1\n )\n ],\n 1\n ),\n _c(\n \"el-row\",\n [\n _c(\n \"el-col\",\n { attrs: { span: 24 } },\n [\n _c(\"el-pagination\", {\n attrs: {\n total: this.wfInstancePageResult.totalItems,\n \"page-size\": this.wfInstancePageResult.pageSize,\n layout: \"prev, pager, next\"\n },\n on: { \"current-change\": _vm.onClickChangeInstancePage }\n })\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack:///./src/components/views/WFInstanceManager.vue?./node_modules/cache-loader/dist/cjs.js?%7B%22cacheDirectory%22:%22node_modules/.cache/vue-loader%22,%22cacheIdentifier%22:%22f7b44cbc-vue-loader-template%22%7D!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options"); /***/ }), -/***/ "./src/components/views/JobManager.vue": -/*!*********************************************!*\ - !*** ./src/components/views/JobManager.vue ***! - \*********************************************/ +/***/ "./node_modules/css-loader/dist/cjs.js?!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/components/views/WFInstanceManager.vue?vue&type=style&index=0&lang=css&": +/*!**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--6-oneOf-1-2!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/views/WFInstanceManager.vue?vue&type=style&index=0&lang=css& ***! + \**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.i, \"\\nsvg{\\n font-size: 10px;\\n border: 1px solid red;\\n}\\ntext {\\n font-weight: 300;\\n font-family: \\\"Helvetica Neue\\\", Helvetica, Arial, sans-serif;\\n font-size: 14px;\\n}\\n.node rect {\\n stroke: #999;\\n fill: #fff;\\n stroke-width: 1.5px;\\n}\\n.edgePath path {\\n stroke: #333;\\n stroke-width: 1px;\\n}\\n\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n\n\n//# sourceURL=webpack:///./src/components/views/WFInstanceManager.vue?./node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--6-oneOf-1-2!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options"); + +/***/ }), + +/***/ "./node_modules/vue-style-loader/index.js?!./node_modules/css-loader/dist/cjs.js?!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/components/views/WFInstanceManager.vue?vue&type=style&index=0&lang=css&": +/*!****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/vue-style-loader??ref--6-oneOf-1-0!./node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src??ref--6-oneOf-1-2!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/views/WFInstanceManager.vue?vue&type=style&index=0&lang=css& ***! + \****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +eval("// style-loader: Adds some css to the DOM by adding a