zhongrj
2024-03-29 2ce6491e137bc6f990e1e605a952f6b92ef021d9
src/views/resource/distapch.vue
@@ -1,22 +1,22 @@
<template>
    <basic-container v-if="false">
    <basic-container>
        <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page" :permission="permissionList"
            v-model="form" ref="crud" @row-update="rowUpdate" @row-save="rowSave" @row-del="rowDel"
            :before-open="beforeOpen" @search-change="searchChange" @search-reset="searchReset"
            @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
            @refresh-change="refreshChange" @on-load="onLoad">
            <template slot="menuLeft">
                <el-button type="danger" size="small" icon="el-icon-delete" plain v-if="permission.oss_delete"
                <el-button type="danger" size="small" icon="el-icon-delete" plain v-if="permission.job_del"
                    @click="handleDelete">删 除
                </el-button>
            </template>
            <template slot-scope="{ row, size, index }" slot="menu">
                <el-button :size="size" type="text" icon="el-icon-video-play" v-if="userInfo.role_name.includes('admin')"
                    @click="handleDebug(row)">执行一次
                <el-button :size="size" type="text" icon="el-icon-video-pause" v-if="permission.job_enable && row.triggerStatus==1"
                    @click="handleEnable(row,0)">停止
                </el-button>
                <el-button :size="size" type="text" icon="el-icon-circle-check" v-if="permission.oss_enable"
                    @click.stop="handleEnable(row)">启用
                <el-button :size="size" type="text" icon="el-icon-video-play" v-if="permission.job_enable && row.triggerStatus==0"
                    @click.stop="handleEnable(row,1)">启用
                </el-button>
            </template>
@@ -38,14 +38,6 @@
        </avue-crud>
        <el-dialog title="对象存储上传调试" append-to-body :visible.sync="box" width="550px">
            <avue-form ref="form" :option="debugOption" v-model="debugForm" @submit="handleSubmit" />
        </el-dialog>
        <el-dialog title="Cron" append-to-body :visible.sync="cronPopover" width="550px">
            <!-- <el-popover v-model="cronPopover"> -->
@@ -64,7 +56,7 @@
</template>
<script>
import { getList, getDetail, add, update, remove, enable } from "@/api/resource/oss"
import { getList, add, update, remove, start,stop } from "@/api/xxljob/xxljob"
import { mapGetters } from "vuex"
import func from "@/util/func"
import vueCron from 'vue-cron'
@@ -90,8 +82,7 @@
                searchLabelWidth: 96,
                searchShow: true,
                searchMenuSpan: 3,
                menuWidth: 350,
                menuWidth: 280,
                height: 'auto',
                calcHeight: 30,
                tip: false,
@@ -102,253 +93,205 @@
                dialogWidth: 880,
                dialogClickModal: false,
                dialogDirection: 'rtl',
                dialogType: 'drawer',
                dialogType: 'dialog',
                column: [
                    {
                        label: "分类",
                        type: "radio",
                        value: 1,
                        span: 24,
                        width: 120,
                        searchLabelWidth: 50,
                        row: true,
                        dicUrl: "/api/blade-system/dict/dictionary?code=oss",
                        props: {
                            label: "dictValue",
                            value: "dictKey"
                        },
                        dataType: "number",
                        slot: true,
                        prop: "category",
                {
                        label: "任务描述",
                        searchLabelWidth: 76,
                        prop: "jobDesc",
                        labelWidth:150,
                        search: true,
                        rules: [{
                            required: true,
                            message: "请选择分类",
                            message: "请输入任务描述",
                            trigger: "blur"
                        }],
                        display: false
                    },
                    // {
                    //     label: "调度类型",
                    //     width: 120,
                    //     searchLabelWidth: 76,
                    //     labelWidth:150,
                    //     prop: "scheduleType",
                    //     rules: [{
                    //         required: true,
                    //         message: "请选择调度类型",
                    //         trigger: "blur"
                    //     }],
                    //     display: false
                    // },
                    {
                        label: "表达式",
                        prop: "scheduleConf",
                        // width: 120,
                        labelWidth:150,
                        rules: [{
                            required: true,
                            message: "请输入表达式",
                            trigger: "blur"
                        }],
                    },
                    {
                        label: "资源编号",
                        prop: "ossCode",
                        span: 24,
                        label: "执行器任务handler",
                        prop: "executorHandler",
                        labelWidth:150,
                        width: 160,
                        rules: [{
                            required: true,
                            message: "请输入执行器任务handler",
                            trigger: "blur"
                        }],
                    },
                    {
                        label: "负责人",
                        prop: "author",
                        width: 120,
                        search: true,
                        labelWidth:150,
                        rules: [{
                            required: true,
                            message: "请输入资源编号",
                            message: "请输入负责人",
                            trigger: "blur"
                        }],
                        display: false
                    },
                    {
                        label: "资源地址",
                        prop: "endpoint",
                        span: 24,
                        rules: [{
                            required: true,
                            message: "请输入资源地址",
                            trigger: "blur"
                        }],
                        display: false
                    },
                    {
                        label: "空间名",
                        prop: "bucketName",
                        span: 24,
                        width: 120,
                        rules: [{
                            required: true,
                            message: "请输入空间名",
                            trigger: "blur"
                        }],
                        display: false
                    },
                    {
                        label: "accessKey",
                        prop: "accessKey",
                        span: 24,
                        search: true,
                        width: 200,
                        label: "报警邮件",
                        prop: "alarmEmail",
                        width: 150,
                        labelWidth:150,
                        overHidden: true,
                        rules: [{
                            required: true,
                            message: "请输入accessKey",
                            message: "请输入报警邮件",
                            trigger: "blur"
                        }],
                        display: false
                    },
                    {
                        label: "secretKey",
                        prop: "secretKey",
                        span: 24,
                        width: 200,
                        overHidden: true,
                        rules: [{
                            required: true,
                            message: "请输入secretKey",
                            trigger: "blur"
                        }],
                        display: false
                    },
                    {
                        label: "appId",
                        prop: "appId",
                        span: 24,
                        hide: true,
                        display: false,
                    },
                    {
                        label: "region",
                        prop: "region",
                        span: 24,
                        hide: true,
                        display: false,
                    },
                    {
                        width: 100,
                        label: "是否启用",
                        prop: "status",
                        span: 24,
                        align: "center",
                        slot: true,
                        addDisplay: false,
                        editDisplay: false,
                        viewDisplay: false,
                    },
                    {
                        label: "备注",
                        prop: "remark",
                        span: 24,
                        hide: true,
                        display: false
                    },{
                        label: "状态",
                        prop: "triggerStatus",
                        search: true,
                        searchSpan:4,
                        type:"select",
                        align:"center",
                        labelWidth:150,
                        width: 120,
                        searchLabelWidth: 66,
                        viewDisplay:true,
                        addDisplay:false,
                        editDisplay:false,
                        dataType:"number",
                        dicData:[
                            {
                                label:"运行",
                                value: 1
                            },
                            {
                                label:"停止",
                                value: 0
                            }
                        ],
                    },
                ],
                group: [
                    {
                        label: '基础配置',
                        prop: 'jbxx',
                        column: [
                            {
                                label: '执行器',
                                prop: '',
                                type: 'select',
                            },
                            {
                                label: '任务描述',
                                prop: ''
                            },
                            {
                                label: '负责人',
                                prop: '',
            //     group: [
            //         {
            //             label: '基础配置',
            //             prop: 'jbxx',
            //             column: [
            //                 {
            //                     label: '执行器',
            //                     prop: '',
            //                     type: 'select',
            //                 },
            //                 {
            //                     label: '任务描述',
            //                     prop: ''
            //                 },
            //                 {
            //                     label: '负责人',
            //                     prop: '',
                            },
                            {
                                label: '报警邮件',
                                prop: ''
                            }
                        ]
                    },
                    {
                        label: '调度配置',
                        prop: 'jbxx',
                        column: [
                            {
                                label: '调度类型',
                                prop: '',
                                type: 'select',
                            },
                            {
                                label: 'Cron',
                                prop: 'cron',
                                formslot: true,
                            }
                        ]
                    },
                    {
                        label: '任务配置',
                        prop: 'jbxx',
                        column: [
                            {
                                label: '运行模式',
                                prop: '',
                                type: 'select',
                            },
                            {
                                label: 'JobHandler',
                                prop: ''
                            },
                            {
                                label: '任务参数',
                                prop: '',
                                type: 'textarea',
                                span: 24
                            }
                        ]
                    },
                    {
                        label: '高级配置',
                        prop: 'jbxx',
                        column: [
                            {
                                label: '调度类型',
                                prop: '',
                                type: 'select',
                            },
                            {
                                label: '子任务ID',
                                prop: ''
                            },
                            {
                                label: '调度类型',
                                prop: '',
                                type: 'select',
                            },
                            {
                                label: '任务参数',
                                prop: '',
                                type: 'select',
                            },
                            {
                                label: '任务超时时间',
                                prop: '',
                            },
                            {
                                label: '失败重试次数',
                                prop: '',
                            }
                        ]
                    },
                ]
            //                 },
            //                 {
            //                     label: '报警邮件',
            //                     prop: ''
            //                 }
            //             ]
            //         },
            //         {
            //             label: '调度配置',
            //             prop: 'jbxx',
            //             column: [
            //                 {
            //                     label: '调度类型',
            //                     prop: '',
            //                     type: 'select',
            //                 },
            //                 {
            //                     label: 'Cron',
            //                     prop: 'cron',
            //                     formslot: true,
            //                 }
            //             ]
            //         },
            //         {
            //             label: '任务配置',
            //             prop: 'jbxx',
            //             column: [
            //                 {
            //                     label: '运行模式',
            //                     prop: '',
            //                     type: 'select',
            //                 },
            //                 {
            //                     label: 'JobHandler',
            //                     prop: ''
            //                 },
            //                 {
            //                     label: '任务参数',
            //                     prop: '',
            //                     type: 'textarea',
            //                     span: 24
            //                 }
            //             ]
            //         },
            //         {
            //             label: '高级配置',
            //             prop: 'jbxx',
            //             column: [
            //                 {
            //                     label: '调度类型',
            //                     prop: '',
            //                     type: 'select',
            //                 },
            //                 {
            //                     label: '子任务ID',
            //                     prop: ''
            //                 },
            //                 {
            //                     label: '调度类型',
            //                     prop: '',
            //                     type: 'select',
            //                 },
            //                 {
            //                     label: '任务参数',
            //                     prop: '',
            //                     type: 'select',
            //                 },
            //                 {
            //                     label: '任务超时时间',
            //                     prop: '',
            //                 },
            //                 {
            //                     label: '失败重试次数',
            //                     prop: '',
            //                 }
            //             ]
            //         },
            //     ]
            },
            data: [],
            debugForm: {
                code: '',
            },
            debugOption: {
                submitText: "保存",
                column: [
                    {
                        label: "资源编号",
                        prop: "code",
                        disabled: true,
                        span: 24,
                    },
                    {
                        label: "上传背景",
                        prop: "backgroundUrl",
                        type: 'upload',
                        listType: 'picture-img',
                        dataType: 'string',
                        action: '/api/blade-resource/oss/endpoint/put-file',
                        propsHttp: {
                            res: 'data',
                            url: 'link',
                        },
                        span: 24,
                    },
                ]
            }
        }
    },
    watch: {
@@ -372,10 +315,10 @@
        ...mapGetters(["userInfo", "permission"]),
        permissionList () {
            return {
                addBtn: this.vaildData(this.permission.oss_add),
                addBtn: this.vaildData(this.permission.job_add),
                viewBtn: this.vaildData(this.permission.oss_view),
                delBtn: this.vaildData(this.permission.oss_delete),
                editBtn: this.vaildData(this.permission.oss_edit)
                delBtn: this.vaildData(this.permission.job_del),
                editBtn: this.vaildData(this.permission.job_update)
            }
        },
        ids () {
@@ -393,6 +336,16 @@
        },
        rowSave (row, done, loading) {
            row['jobGroup'] = 1;
            row['glueType'] = 'bean';
            row['scheduleType'] = 'CRON';
            row['executorParam'] = '';
            row['executorRouteStrategy'] = 'FIRST';
            row['misfireStrategy'] = 'DO_NOTHING';
            row['executorBlockStrategy'] = 'SERIAL_EXECUTION';
            row['executorTimeout'] = 0;
            row['executorFailRetryCount'] = 0;
            row['glueRemark'] = 'GLUE代码初始化';
            add(row).then(() => {
                this.onLoad(this.page)
                this.$message({
@@ -452,14 +405,26 @@
            this.selectionList = []
            this.$refs.crud.toggleSelection()
        },
        handleEnable (row) {
            this.$confirm("是否确定启用这条配置?", {
        handleEnable (row,status) {
            var temstr = ""
            if(status == 1){
                temstr = "启动"
            }else{
                temstr = "停止"
            }
            this.$confirm("是否确定" + temstr + "当前任务?", {
                confirmButtonText: "确定",
                cancelButtonText: "取消",
                type: "warning"
            })
                .then(() => {
                    return enable(row.id)
                    if(status==1){
                        row.triggerStatus = 1
                        return start(row)
                    }else{
                        row.triggerStatus = 0
                        return stop(row)
                    }
                })
                .then(() => {
                    this.onLoad(this.page)
@@ -469,11 +434,6 @@
                    })
                    this.$refs.crud.toggleSelection()
                })
        },
        handleDebug (row) {
            this.box = true
            this.debugForm.code = row.ossCode
            this.debugForm.backgroundUrl = ''
        },
        handleSubmit (form, done) {
            this.$message({
@@ -505,11 +465,11 @@
                })
        },
        beforeOpen (done, type) {
            if (["edit", "view"].includes(type)) {
                getDetail(this.form.id).then(res => {
                    this.form = res.data.data
                })
            }
            // if (["edit", "view"].includes(type)) {
            //     getDetail(this.form.id).then(res => {
            //         this.form = res.data.data
            //     })
            // }
            done()
        },
        currentChange (currentPage) {