210 lines
6.4 KiB
Vue
210 lines
6.4 KiB
Vue
<template>
|
||
<div class="main-center-body">
|
||
<div class="container">
|
||
|
||
<div class="search-input-sendways">
|
||
<el-input v-model="search" size="small" placeholder="搜索" @change="filterFunc()" />
|
||
</div>
|
||
|
||
<div class="search-box">
|
||
<el-button size="small" type="primary" @click="clickAdd">新增任务</el-button>
|
||
</div>
|
||
|
||
<hr />
|
||
|
||
<div ref="refContainer">
|
||
<el-table :data="tableData" stripe empty-text="发信任务为空" :row-style="rowStyle()">
|
||
<el-table-column label="ID" prop="id" width="320px" />
|
||
<el-table-column label="任务名" prop="name" />
|
||
<el-table-column label="创建时间" prop="created_on" />
|
||
<el-table-column fixed="right" label="操作" width="190px">
|
||
<template #default="scope">
|
||
<div v-if="sysKeptTaskIds.includes(scope.row.id)">
|
||
<el-button link size="small" type="primary"
|
||
@click="handleViewLogs(scope.$index, scope.row)">日志</el-button>
|
||
<el-text class="mx-1" type="info" size="small" style="margin-left: 15px;">系统保留任务</el-text>
|
||
</div>
|
||
<div v-if="!sysKeptTaskIds.includes(scope.row.id)">
|
||
<el-button link size="small" type="primary" @click="handleViewAPI(scope.$index, scope.row)">接口</el-button>
|
||
<el-button link size="small" type="primary"
|
||
@click="handleViewLogs(scope.$index, scope.row)">日志</el-button>
|
||
<el-button link size="small" type="primary" @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
|
||
<tableDeleteButton @customHandleDelete="handleDelete(scope.$index, scope.row)" />
|
||
</div>
|
||
</template>
|
||
</el-table-column>
|
||
</el-table>
|
||
</div>
|
||
|
||
<div class="pagination-block">
|
||
<el-pagination layout="prev, pager, next" :total="total" :page-size="pageSize" @current-change="handPageChange" />
|
||
<el-text class="total-tip" size="small">每页{{ pageSize }}条,共{{ total }}条</el-text>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<addTaskPopUpComponent :componentName="addTaskPopUpComponentName" />
|
||
<editTaskPopUpComponent :componentName="editTaskPopUpComponentName" />
|
||
<viewTaskAPIPopUpComponent :componentName="viewTaskAPIPopUpComponentName" />
|
||
</template>
|
||
|
||
<script >
|
||
import { computed, ref, reactive, toRefs, onMounted } from 'vue'
|
||
import { usePageState } from '@/store/page_sate';
|
||
import { request } from '@/api/api'
|
||
import addTaskPopUpComponent from './view/addTaskPopUp.vue'
|
||
import editTaskPopUpComponent from './view/editTaskPopUp.vue'
|
||
import viewTaskAPIPopUpComponent from './view/viewTaskAPIPopUp.vue'
|
||
import tableDeleteButton from '@/views/common/tableDeleteButton.vue'
|
||
import { useRouter } from 'vue-router';
|
||
import { CONSTANT } from '@/constant'
|
||
|
||
export default {
|
||
components: {
|
||
addTaskPopUpComponent,
|
||
editTaskPopUpComponent,
|
||
tableDeleteButton,
|
||
viewTaskAPIPopUpComponent,
|
||
},
|
||
setup() {
|
||
const pageState = usePageState();
|
||
const router = useRouter();
|
||
|
||
const state = reactive({
|
||
addTaskPopUpComponentName: 'addTaskPopUpComponentName',
|
||
editTaskPopUpComponentName: 'editTaskPopUpComponentName',
|
||
viewTaskAPIPopUpComponentName: 'viewTaskAPIPopUpComponentName',
|
||
search: '',
|
||
optionValue: '',
|
||
dialogFormVisible: false,
|
||
// confirmBtnVisible: false,
|
||
tableData: [],
|
||
total: CONSTANT.TOTAL,
|
||
pageSize: pageState.siteConfigData.pagesize,
|
||
currPage: CONSTANT.PAGE,
|
||
displayCols: [
|
||
{ 'col': 'id', 'label': '任务ID' },
|
||
{ 'col': 'name', 'label': '任务名' },
|
||
{ 'col': 'type', 'label': '发信任务' },
|
||
{ 'col': 'created_on', 'label': '创建时间' },
|
||
],
|
||
options: [
|
||
{ label: '邮箱', value: 'Email' },
|
||
{ label: '钉钉', value: 'Dtalk' }
|
||
],
|
||
sysKeptTaskIds: [CONSTANT.LOG_TASK_ID],
|
||
|
||
});
|
||
|
||
const handleEdit = (index, row) => {
|
||
let name = state.editTaskPopUpComponentName;
|
||
pageState.ShowDialogData[name] = {};
|
||
pageState.ShowDialogData[name].isShow = true;
|
||
pageState.ShowDialogData[name].rowData = row;
|
||
}
|
||
|
||
const handleDelete = async (index, row) => {
|
||
const rsp = await request.post('/sendtasks/delete', { id: row.id });
|
||
if (rsp.status == 200) {
|
||
state.tableData.splice(index, 1);
|
||
}
|
||
}
|
||
|
||
const handleViewAPI = (index, row) => {
|
||
let name = state.viewTaskAPIPopUpComponentName;
|
||
pageState.ShowDialogData[name] = {};
|
||
pageState.ShowDialogData[name].isShow = true;
|
||
pageState.ShowDialogData[name].rowData = row;
|
||
}
|
||
|
||
const handPageChange = async (pageNum) => {
|
||
state.currPage = pageNum;
|
||
await queryListData(pageNum, state.pageSize);
|
||
|
||
}
|
||
|
||
const rowStyle = () => {
|
||
return {
|
||
'font-size': '13px',
|
||
}
|
||
}
|
||
|
||
const handleViewLogs = (index, row) => {
|
||
router.push('/sendlogs?taskid=' + row.id, { replace: true });
|
||
}
|
||
|
||
const filterFunc = async () => {
|
||
await queryListData(state.currPage, state.pageSize, state.search, state.optionValue);
|
||
|
||
}
|
||
|
||
const clickAdd = () => {
|
||
pageState.ShowDialogData[state.addTaskPopUpComponentName] = {};
|
||
pageState.ShowDialogData[state.addTaskPopUpComponentName].isShow = true;
|
||
}
|
||
|
||
const queryListData = async (page, size, name = '') => {
|
||
let params = { page: page, size: size, name: name };
|
||
const rsp = await request.get('/sendtasks/list', { params: params });
|
||
state.tableData = await rsp.data.data.lists;
|
||
state.total = await rsp.data.data.total;
|
||
}
|
||
|
||
onMounted(async () => {
|
||
await queryListData(1, state.pageSize);
|
||
});
|
||
|
||
return {
|
||
...toRefs(state), handleEdit, handleDelete, handleViewAPI, handleViewLogs,
|
||
clickAdd, rowStyle, handPageChange, filterFunc
|
||
};
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style scoped>
|
||
hr {
|
||
color: #FAFCFF;
|
||
background-color: #FAFCFF;
|
||
border-color: #FAFCFF;
|
||
}
|
||
|
||
.container {
|
||
background-color: white;
|
||
padding: 20px;
|
||
border-radius: 8px;
|
||
box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.1);
|
||
max-width: 1000px;
|
||
width: 100%;
|
||
margin-top: -10vh;
|
||
}
|
||
|
||
.pagination-block {
|
||
margin-top: 30px;
|
||
display: flex;
|
||
justify-content: flex-end;
|
||
}
|
||
|
||
.total-tip {
|
||
display: inline-block;
|
||
}
|
||
|
||
.search-box {
|
||
float: right;
|
||
}
|
||
|
||
:global(.select .el-input__inner) {
|
||
width: 80px;
|
||
}
|
||
|
||
.search-input-sendways {
|
||
/* margin-left: 40px; */
|
||
width: 150px;
|
||
display: inline-flex;
|
||
}
|
||
|
||
.op-col {
|
||
text-align: left;
|
||
}
|
||
</style> |