From 82f1f5d0cf1b51a5d81915e842e01760f404fa74 Mon Sep 17 00:00:00 2001 From: 疯狂的狮子li <15040126243@163.com> Date: 星期三, 20 十月 2021 13:07:16 +0800 Subject: [PATCH] update 优化xxl-job-admin相关pr代码 增加格式化日志输出与docker镜像 --- ruoyi-ui/src/views/monitor/job/index.vue | 246 +++++++++++++++++++++++++++--------------------- 1 files changed, 138 insertions(+), 108 deletions(-) diff --git a/ruoyi-ui/src/views/monitor/job/index.vue b/ruoyi-ui/src/views/monitor/job/index.vue index 2b091e7..a97477b 100644 --- a/ruoyi-ui/src/views/monitor/job/index.vue +++ b/ruoyi-ui/src/views/monitor/job/index.vue @@ -13,25 +13,25 @@ <el-form-item label="浠诲姟缁勫悕" prop="jobGroup"> <el-select v-model="queryParams.jobGroup" placeholder="璇烽�夋嫨浠诲姟缁勫悕" clearable size="small"> <el-option - v-for="dict in jobGroupOptions" - :key="dict.dictValue" - :label="dict.dictLabel" - :value="dict.dictValue" + v-for="dict in dict.type.sys_job_group" + :key="dict.value" + :label="dict.label" + :value="dict.value" /> </el-select> </el-form-item> <el-form-item label="浠诲姟鐘舵��" prop="status"> <el-select v-model="queryParams.status" placeholder="璇烽�夋嫨浠诲姟鐘舵��" clearable size="small"> <el-option - v-for="dict in statusOptions" - :key="dict.dictValue" - :label="dict.dictLabel" - :value="dict.dictValue" + v-for="dict in dict.type.sys_job_status" + :key="dict.value" + :label="dict.label" + :value="dict.value" /> </el-select> </el-form-item> <el-form-item> - <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button> + <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button> </el-form-item> </el-form> @@ -40,6 +40,7 @@ <el-col :span="1.5"> <el-button type="primary" + plain icon="el-icon-plus" size="mini" @click="handleAdd" @@ -49,6 +50,7 @@ <el-col :span="1.5"> <el-button type="success" + plain icon="el-icon-edit" size="mini" :disabled="single" @@ -59,6 +61,7 @@ <el-col :span="1.5"> <el-button type="danger" + plain icon="el-icon-delete" size="mini" :disabled="multiple" @@ -69,8 +72,10 @@ <el-col :span="1.5"> <el-button type="warning" + plain icon="el-icon-download" size="mini" + :loading="exportLoading" @click="handleExport" v-hasPermi="['monitor:job:export']" >瀵煎嚭</el-button> @@ -78,6 +83,7 @@ <el-col :span="1.5"> <el-button type="info" + plain icon="el-icon-s-operation" size="mini" @click="handleJobLog" @@ -89,9 +95,13 @@ <el-table v-loading="loading" :data="jobList" @selection-change="handleSelectionChange"> <el-table-column type="selection" width="55" align="center" /> - <el-table-column label="浠诲姟缂栧彿" align="center" prop="jobId" /> + <el-table-column label="浠诲姟缂栧彿" width="100" align="center" prop="jobId" /> <el-table-column label="浠诲姟鍚嶇О" align="center" prop="jobName" :show-overflow-tooltip="true" /> - <el-table-column label="浠诲姟缁勫悕" align="center" prop="jobGroup" :formatter="jobGroupFormat" /> + <el-table-column label="浠诲姟缁勫悕" align="center" prop="jobGroup"> + <template slot-scope="scope"> + <dict-tag :options="dict.type.sys_job_group" :value="scope.row.jobGroup"/> + </template> + </el-table-column> <el-table-column label="璋冪敤鐩爣瀛楃涓�" align="center" prop="invokeTarget" :show-overflow-tooltip="true" /> <el-table-column label="cron鎵ц琛ㄨ揪寮�" align="center" prop="cronExpression" :show-overflow-tooltip="true" /> <el-table-column label="鐘舵��" align="center"> @@ -109,17 +119,30 @@ <el-button size="mini" type="text" - icon="el-icon-caret-right" - @click="handleRun(scope.row)" - v-hasPermi="['monitor:job:changeStatus']" - >鎵ц涓�娆�</el-button> + icon="el-icon-edit" + @click="handleUpdate(scope.row)" + v-hasPermi="['monitor:job:edit']" + >淇敼</el-button> <el-button size="mini" type="text" - icon="el-icon-view" - @click="handleView(scope.row)" - v-hasPermi="['monitor:job:query']" - >璇︾粏</el-button> + icon="el-icon-delete" + @click="handleDelete(scope.row)" + v-hasPermi="['monitor:job:remove']" + >鍒犻櫎</el-button> + <el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['monitor:job:changeStatus', 'monitor:job:query']"> + <span class="el-dropdown-link"> + <i class="el-icon-d-arrow-right el-icon--right"></i>鏇村 + </span> + <el-dropdown-menu slot="dropdown"> + <el-dropdown-item command="handleRun" icon="el-icon-caret-right" + v-hasPermi="['monitor:job:changeStatus']">鎵ц涓�娆�</el-dropdown-item> + <el-dropdown-item command="handleView" icon="el-icon-view" + v-hasPermi="['monitor:job:query']">浠诲姟璇︾粏</el-dropdown-item> + <el-dropdown-item command="handleJobLog" icon="el-icon-s-operation" + v-hasPermi="['monitor:job:query']">璋冨害鏃ュ織</el-dropdown-item> + </el-dropdown-menu> + </el-dropdown> </template> </el-table-column> </el-table> @@ -133,7 +156,7 @@ /> <!-- 娣诲姞鎴栦慨鏀瑰畾鏃朵换鍔″璇濇 --> - <el-dialog :title="title" :visible.sync="open" width="700px" append-to-body> + <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body> <el-form ref="form" :model="form" :rules="rules" label-width="120px"> <el-row> <el-col :span="12"> @@ -145,10 +168,10 @@ <el-form-item label="浠诲姟鍒嗙粍" prop="jobGroup"> <el-select v-model="form.jobGroup" placeholder="璇烽�夋嫨"> <el-option - v-for="dict in jobGroupOptions" - :key="dict.dictValue" - :label="dict.dictLabel" - :value="dict.dictValue" + v-for="dict in dict.type.sys_job_group" + :key="dict.value" + :label="dict.label" + :value="dict.value" ></el-option> </el-select> </el-form-item> @@ -169,17 +192,16 @@ <el-input v-model="form.invokeTarget" placeholder="璇疯緭鍏ヨ皟鐢ㄧ洰鏍囧瓧绗︿覆" /> </el-form-item> </el-col> - <el-col :span="12"> + <el-col :span="24"> <el-form-item label="cron琛ㄨ揪寮�" prop="cronExpression"> - <el-input v-model="form.cronExpression" placeholder="璇疯緭鍏ron鎵ц琛ㄨ揪寮�" /> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="鏄惁骞跺彂" prop="concurrent"> - <el-radio-group v-model="form.concurrent" size="small"> - <el-radio-button label="0">鍏佽</el-radio-button> - <el-radio-button label="1">绂佹</el-radio-button> - </el-radio-group> + <el-input v-model="form.cronExpression" placeholder="璇疯緭鍏ron鎵ц琛ㄨ揪寮�"> + <template slot="append"> + <el-button type="primary" @click="handleShowCron"> + 鐢熸垚琛ㄨ揪寮� + <i class="el-icon-time el-icon--right"></i> + </el-button> + </template> + </el-input> </el-form-item> </el-col> <el-col :span="24"> @@ -191,14 +213,22 @@ </el-radio-group> </el-form-item> </el-col> - <el-col :span="24"> + <el-col :span="12"> + <el-form-item label="鏄惁骞跺彂" prop="concurrent"> + <el-radio-group v-model="form.concurrent" size="small"> + <el-radio-button label="0">鍏佽</el-radio-button> + <el-radio-button label="1">绂佹</el-radio-button> + </el-radio-group> + </el-form-item> + </el-col> + <el-col :span="12"> <el-form-item label="鐘舵��"> <el-radio-group v-model="form.status"> <el-radio - v-for="dict in statusOptions" - :key="dict.dictValue" - :label="dict.dictValue" - >{{dict.dictLabel}}</el-radio> + v-for="dict in dict.type.sys_job_status" + :key="dict.value" + :label="dict.value" + >{{dict.label}}</el-radio> </el-radio-group> </el-form-item> </el-col> @@ -208,6 +238,10 @@ <el-button type="primary" @click="submitForm">纭� 瀹�</el-button> <el-button @click="cancel">鍙� 娑�</el-button> </div> + </el-dialog> + + <el-dialog title="Cron琛ㄨ揪寮忕敓鎴愬櫒" :visible.sync="openCron" append-to-body destroy-on-close class="scrollbar"> + <crontab @hide="openCron=false" @fill="crontabFill" :expression="expression"></crontab> </el-dialog> <!-- 浠诲姟鏃ュ織璇︾粏 --> @@ -261,14 +295,19 @@ </template> <script> -import { listJob, getJob, delJob, addJob, updateJob, exportJob, runJob, changeJobStatus } from "@/api/monitor/job"; +import { listJob, getJob, delJob, addJob, updateJob, runJob, changeJobStatus } from "@/api/monitor/job"; +import Crontab from '@/components/Crontab' export default { + components: { Crontab }, name: "Job", + dicts: ['sys_job_group', 'sys_job_status'], data() { return { // 閬僵灞� loading: true, + // 瀵煎嚭閬僵灞� + exportLoading: false, // 閫変腑鏁扮粍 ids: [], // 闈炲崟涓鐢� @@ -287,10 +326,10 @@ open: false, // 鏄惁鏄剧ず璇︾粏寮瑰嚭灞� openView: false, - // 浠诲姟缁勫悕瀛楀吀 - jobGroupOptions: [], - // 鐘舵�佸瓧鍏� - statusOptions: [], + // 鏄惁鏄剧ずCron琛ㄨ揪寮忓脊鍑哄眰 + openCron: false, + // 浼犲叆鐨勮〃杈惧紡 + expression: "", // 鏌ヨ鍙傛暟 queryParams: { pageNum: 1, @@ -317,12 +356,6 @@ }, created() { this.getList(); - this.getDicts("sys_job_group").then(response => { - this.jobGroupOptions = response.data; - }); - this.getDicts("sys_job_status").then(response => { - this.statusOptions = response.data; - }); }, methods: { /** 鏌ヨ瀹氭椂浠诲姟鍒楄〃 */ @@ -336,11 +369,7 @@ }, // 浠诲姟缁勫悕瀛楀吀缈昏瘧 jobGroupFormat(row, column) { - return this.selectDictLabel(this.jobGroupOptions, row.jobGroup); - }, - // 鐘舵�佸瓧鍏哥炕璇� - statusFormat(row, column) { - return this.selectDictLabel(this.statusOptions, row.status); + return this.selectDictLabel(this.dict.type.sys_job_group, row.jobGroup); }, // 鍙栨秷鎸夐挳 cancel() { @@ -377,32 +406,40 @@ this.single = selection.length != 1; this.multiple = !selection.length; }, + // 鏇村鎿嶄綔瑙﹀彂 + handleCommand(command, row) { + switch (command) { + case "handleRun": + this.handleRun(row); + break; + case "handleView": + this.handleView(row); + break; + case "handleJobLog": + this.handleJobLog(row); + break; + default: + break; + } + }, // 浠诲姟鐘舵�佷慨鏀� handleStatusChange(row) { let text = row.status === "0" ? "鍚敤" : "鍋滅敤"; - this.$confirm('纭瑕�"' + text + '""' + row.jobName + '"浠诲姟鍚�?', "璀﹀憡", { - confirmButtonText: "纭畾", - cancelButtonText: "鍙栨秷", - type: "warning" - }).then(function() { - return changeJobStatus(row.jobId, row.status); - }).then(() => { - this.msgSuccess(text + "鎴愬姛"); - }).catch(function() { - row.status = row.status === "0" ? "1" : "0"; - }); + this.$modal.confirm('纭瑕�"' + text + '""' + row.jobName + '"浠诲姟鍚楋紵').then(function() { + return changeJobStatus(row.jobId, row.status); + }).then(() => { + this.$modal.msgSuccess(text + "鎴愬姛"); + }).catch(function() { + row.status = row.status === "0" ? "1" : "0"; + }); }, /* 绔嬪嵆鎵ц涓�娆� */ handleRun(row) { - this.$confirm('纭瑕佺珛鍗虫墽琛屼竴娆�"' + row.jobName + '"浠诲姟鍚�?', "璀﹀憡", { - confirmButtonText: "纭畾", - cancelButtonText: "鍙栨秷", - type: "warning" - }).then(function() { - return runJob(row.jobId, row.jobGroup); - }).then(() => { - this.msgSuccess("鎵ц鎴愬姛"); - }).catch(function() {}); + this.$modal.confirm('纭瑕佺珛鍗虫墽琛屼竴娆�"' + row.jobName + '"浠诲姟鍚楋紵').then(function() { + return runJob(row.jobId, row.jobGroup); + }).then(() => { + this.$modal.msgSuccess("鎵ц鎴愬姛"); + }).catch(() => {}); }, /** 浠诲姟璇︾粏淇℃伅 */ handleView(row) { @@ -411,9 +448,19 @@ this.openView = true; }); }, + /** cron琛ㄨ揪寮忔寜閽搷浣� */ + handleShowCron() { + this.expression = this.form.cronExpression; + this.openCron = true; + }, + /** 纭畾鍚庡洖浼犲�� */ + crontabFill(value) { + this.form.cronExpression = value; + }, /** 浠诲姟鏃ュ織鍒楄〃鏌ヨ */ - handleJobLog() { - this.$router.push("/job/log"); + handleJobLog(row) { + const jobId = row.jobId || 0; + this.$router.push({ path: '/monitor/job-log/index', query: { jobId: jobId } }) }, /** 鏂板鎸夐挳鎿嶄綔 */ handleAdd() { @@ -437,19 +484,15 @@ if (valid) { if (this.form.jobId != undefined) { updateJob(this.form).then(response => { - if (response.code === 200) { - this.msgSuccess("淇敼鎴愬姛"); - this.open = false; - this.getList(); - } + this.$modal.msgSuccess("淇敼鎴愬姛"); + this.open = false; + this.getList(); }); } else { addJob(this.form).then(response => { - if (response.code === 200) { - this.msgSuccess("鏂板鎴愬姛"); - this.open = false; - this.getList(); - } + this.$modal.msgSuccess("鏂板鎴愬姛"); + this.open = false; + this.getList(); }); } } @@ -458,30 +501,17 @@ /** 鍒犻櫎鎸夐挳鎿嶄綔 */ handleDelete(row) { const jobIds = row.jobId || this.ids; - this.$confirm('鏄惁纭鍒犻櫎瀹氭椂浠诲姟缂栧彿涓�"' + jobIds + '"鐨勬暟鎹」?', "璀﹀憡", { - confirmButtonText: "纭畾", - cancelButtonText: "鍙栨秷", - type: "warning" - }).then(function() { - return delJob(jobIds); - }).then(() => { - this.getList(); - this.msgSuccess("鍒犻櫎鎴愬姛"); - }).catch(function() {}); + this.$modal.confirm('鏄惁纭鍒犻櫎瀹氭椂浠诲姟缂栧彿涓�"' + jobIds + '"鐨勬暟鎹」锛�').then(function() { + return delJob(jobIds); + }).then(() => { + this.getList(); + this.$modal.msgSuccess("鍒犻櫎鎴愬姛"); + }).catch(() => {}); }, /** 瀵煎嚭鎸夐挳鎿嶄綔 */ handleExport() { - const queryParams = this.queryParams; - this.$confirm("鏄惁纭瀵煎嚭鎵�鏈夊畾鏃朵换鍔℃暟鎹」?", "璀﹀憡", { - confirmButtonText: "纭畾", - cancelButtonText: "鍙栨秷", - type: "warning" - }).then(function() { - return exportJob(queryParams); - }).then(response => { - this.download(response.msg); - }).catch(function() {}); + this.$download.excel('/monitor/job/export', this.queryParams); } } }; -</script> \ No newline at end of file +</script> -- Gitblit v1.9.3