<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="renderer" content="webkit">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="icon" href="favicon.ico">
    <title>xxx系统</title>

    <link rel="stylesheet" href="css/main.css" />

    <link rel="stylesheet" href="js/lib/element-plus/index.css" />
    <script src="js/lib/vue.global.js"></script>
    <script src="js/lib/element-plus/element-plus.js"></script>
    <script src="js/lib/element-plus/icons-vue.js"></script>

    <script src="js/lib/axios.min.js"></script>
    <script src="js/lib/httpVueLoader.js"></script>
	
	<style>#app-job-record{padding:10px;}</style>
</head>
<body>
<div id="app-job-record">
    <div id="loader-wrapper" v-if="loading">
        <div id="loader"></div>
        <div class="loader-section section-left"></div>
        <div class="loader-section section-right"></div>
        <div class="load_title">正在加载系统资源,请耐心等待</div>
    </div>

    <el-form :model="queryParams" :inline="true">
        <el-form-item label="执行结果" prop="listStatus">
            <el-select
                v-model="queryParams.listStatus"
                multiple
                placeholder="请选择"
                style="width: 240px"
            >
                <el-option label="成功" value="200"></el-option>
                <el-option label="失败" value="300"></el-option>
            </el-select>
        </el-form-item>
        <el-form-item label="任务执行时间">
            <el-date-picker
                v-model="dateRangeExecuteTime"
                value-format="YYYY-MM-DD HH:mm:ss"
                type="daterange"
                range-separator="-"
                start-placeholder="开始日期"
                end-placeholder="结束日期"
                :default-time="[
                    new Date(2000, 1, 1, 0, 0, 0),
                    new Date(2000, 1, 1, 23, 59, 59),
                    ]"
            ></el-date-picker>
        </el-form-item>
        <el-form-item>
            <el-button type="primary" icon="search" @click="handleQuery">搜索</el-button>
            <el-button icon="Refresh" @click="resetQuery">重置</el-button>
        </el-form-item>
    </el-form>

    <el-table
		:stripe="true"
		:border="true"
        :data="dataList"
        @selection-change="handleSelectionChange"
        @row-dblclick="handleDetail"
    >
        <el-table-column label="执行时间" min-width="155" align="center" prop="startTimeView"></el-table-column>
        <el-table-column label="任务编号" min-width="175" align="center" prop="taskNo"></el-table-column>
        <el-table-column label="任务名称" min-width="300" align="center" prop="taskName"></el-table-column>
        <el-table-column label="执行参数" min-width="175" align="center" prop="executeParameter"></el-table-column>
        <el-table-column label="执行完成时间" min-width="155" align="center" prop="endTimeView"></el-table-column>
        <el-table-column label="执行耗时(ms)" min-width="150" align="center" prop="executeTimes">
            <template #default="scope">
                {{ scope.row.executeTimes }}
                {{ showExecuteTimes(scope.row.executeTimes) }}
            </template>
        </el-table-column>
        <el-table-column label="任务状态" min-width="80" align="center" prop="taskStatusView"></el-table-column>
        <el-table-column label="执行结果" min-width="80" align="center" prop="failReason" :show-overflow-tooltip="true"></el-table-column>
        <el-table-column
            label="操作"
            align="center"
            min-width="90"
            fixed="right"
            class-name="small-padding fixed-width"
        >
            <template #default="scope">
                <el-button
                    link
                    type="primary"
                    v-if="scope.row.taskStatus === 300"
                    @click="handleDetail(scope.row)"
                >错误信息</el-button>
            </template>
        </el-table-column>
    </el-table>

    <!-- 修改对话框 -->
    <el-dialog
		title="错误信息"
		v-model="dialogOpenModify"
		width="80%"
		append-to-body
    >
        <div style="white-space: pre-wrap;">
            {{ formModify.errorValue }}
        </div>
        <template #footer>
            <div class="dialog-footer">
                <el-button @click="cancelModify">关闭</el-button>
            </div>
        </template>
    </el-dialog>
	
    <el-pagination
        v-if="total > 0"
        :background="tabConfig.background"
        :hide-on-single-page="tabConfig.hideOnSinglePage"
        :page-sizes="tabConfig.listPageSize"
        :total="total"
        v-model:current-page="queryParams.page"
        v-model:page-size="queryParams.limit"
        @change ="getList"
    />
</div>

<script type="module">
function queryURLParams(url, paramName) {
    let parameterStr = url.split("?")[1];
    const urlSearchParams = new URLSearchParams(parameterStr);
    const params = Object.fromEntries(urlSearchParams.entries());
    
    if (!paramName) {
        // 没有传入参数名称, 返回含有所有参数的对象params
        return params;
    } else {
        if (params[paramName]) {
            return params[paramName];
        } else {
            return '';
        }
    }
}

    import { EState } from "/js/enums.js"

    const { createApp, ref, onMounted, h } = Vue
    const loading = ref(true)

    const Http = axios.create({
        baseURL: location.pathname.substr(0, location.pathname.lastIndexOf('/')),
        timeout: 1000,
        headers: {'X-Custom-Header': 'foobar'}
    });
    const $message = ElementPlus.ElMessage;
    const $confirm = ElementPlus.ElMessageBox;

    var app = Vue.createApp({
        el: '#app-job-record',
        props: {
            taskNo: String
        },
        data() {
			return {
				ddd: true
			}
        },
        methods: {
            funcA() {
                console.log(this.ddd);
                this.$message('这是一条普通info消息');
                this.$message.success('恭喜你,这是一条成功消息');
                this.$message.warning('警告哦,这是一条警告消息');
                this.$message.error('错了哦,这是一条错误消息');
                this.$message({
                    message: h('p', { style: 'line-height: 1; font-size: 14px' }, [
                        h('span', null, '这是一条自定义样式的消息 '),
                        h('i', { style: 'color: teal' }, 'VNode'),
                    ])
                });
            }
        },

        mounted: () => {
            //$message('这是一条普通info消息');
        },

        setup() {
const tabConfig = ref({
    background: true,
    hideOnSinglePage: true,
    listPageSize: [20, 50, 100, 200]
});

const listEState = EState.enums;
const getEStateLabel = (value) => {
    return EState.getLabelByValue(value)
}
const loading = ref(false);
const dataList = ref([]);

const modifyLoading = ref(false);
const dialogOpenModify = ref(false);

const total = ref(0);
const dateRangeExecuteTime = ref([]);
const ids = ref([]);
const single = ref(true);
const multiple = ref(true);

const queryParams = ref({
    page: 1,
    limit: 10,
    listStatus: [],
    taskNo: queryURLParams(location.href, 'taskNo'),
    executeTimeRange: ''
});

const formModify = ref({});

/** 查询列表 */
function getList() {
    loading.value = true;
    if (
        dateRangeExecuteTime &&
        dateRangeExecuteTime.value &&
        dateRangeExecuteTime.value[0]
    ) {
        queryParams.value.executeTimeRange = dateRangeExecuteTime.value.join(" ~ ");
    }
    Http.post('/quartz/taskRecords', queryParams.value)
    .then((response) => {
		let data = response.data.data;
        dataList.value = data.list;
        total.value = data.total;
        loading.value = false;
    });
}
/** 搜索按钮操作 */
function handleQuery() {
    queryParams.value.page = 1;
    getList();
}
/** 重置按钮操作 */
function resetQuery() {
    dateRangeCreateTime.value = [];
    dateRangeJoinTime.value = [];
    handleQuery();
}
/** 选择条数  */
function handleSelectionChange(selection) {
    ids.value = selection.map((item) => item.id);
    single.value = selection.length != 1;
    multiple.value = !selection.length;
}



/** 详情按钮 */
function handleDetail(row) {
    modifyLoading.value = true;
    resetModify();
    const id = row.id || ids.value[0];

    Http.get('/quartz/taskErrors/' + row.id)
    .then((response) => {
		let data = response.data.data;
        formModify.value = data;
        if (formModify.value) {
            dialogOpenModify.value = true;
        } else {
            $message.warning("没有更多信息");
        }
    }).finally(() => {
        modifyLoading.value = false;
    })
}
/** 编辑表单重置 */
function resetModify() {
    formModify.value = {
        id: undefined,
        taskName: undefined,
        schedulerRule: undefined,
        executor: undefined,
        sendType: undefined,
        url: undefined,
        executeParameter: undefined,
    };
}
/** 取消编辑按钮 */
function cancelModify() {
    dialogOpenModify.value = false;
    resetModify();
}

function showExecuteTimes(times) {
    let str = (times / 1000) + '';
    if (str.indexOf('.') > -1) {
        str = str.substring(0, str.indexOf('.') + 2);
    }
    return '(' + str + 's)';
}

onMounted(() => {
	loading.value = false
	getList()
})
return {
    tabConfig,
    listEState,
    getEStateLabel,
    loading,
	dataList,
	modifyLoading,
	dialogOpenModify,
	total,
	dateRangeExecuteTime,
	ids,
	single,
	multiple,
	queryParams,
	formModify,
	getList,
	handleQuery,
	resetQuery,
	handleSelectionChange,
	handleDetail,
	resetModify,
	cancelModify,
	showExecuteTimes
}
        }
    })
    app.use(ElementPlus)
    for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
      app.component(key, component)
    }
    app.mount("#app-job-record")
</script>
</body>
</html>