Commit 5b14a4c2 by yzh

feat:cron表达式组件修改完成

parent f08f3e48
...@@ -307,10 +307,9 @@ const handleDetails = (row: any) => { ...@@ -307,10 +307,9 @@ const handleDetails = (row: any) => {
detailVisibleValue.value = true detailVisibleValue.value = true
} }
const getData = async () => { const getData = async () => {
console.log('getData');
const res = await getItulist({page:pageObj.value.pageNo,size:pageObj.value.pageSize}) const res = await getItulist({page:pageObj.value.pageNo,size:pageObj.value.pageSize})
tableData.value = res.data.list pageObj.value.total = res.data.length
pageObj.value.total = res.data.total tableData.value = res.data
} }
const handleClose = () => { const handleClose = () => {
......
<template> <template>
<el-dialog v-model="currentVisible" :title="currentMode === AddMode.ADD_TASK ? '新增' : '修改'" width="610" center <el-dialog v-model="currentVisible" :title="currentMode === AddMode.ADD_TASK ? '新增' : '修改'" width="710" center
align-center @close="handleClose" draggable> align-center @close="handleClose" draggable>
<el-form :inline="true" v-if="currentMode === AddMode.ADD_TASK"> <el-form :model="ruleForm" :rules="rules" ref="ruleFormRef" label-width="100px">
<el-form-item label="任务名称:"> <el-form-item label="任务名称:" v-if="currentMode === AddMode.ADD_TASK" prop="taskName">
<el-input v-model="taskName" placeholder="请输入任务名称" /> <el-input v-model="ruleForm.taskName" placeholder="请输入任务名称"style="width: 90%" />
</el-form-item> </el-form-item>
<el-form-item label="所属爬虫:"> <el-form-item label="所属爬虫:" v-if="currentMode === AddMode.ADD_TASK" prop="spiderTypeValue">
<el-select v-model="spiderTypeValue" placeholder="请选择所属爬虫" style="width: 181px"> <el-select v-model="ruleForm.spiderTypeValue" placeholder="请选择所属爬虫" style="width: 90%">
<el-option v-for="item in spiderTypeOptions" :key="item.value" :label="item.label" :value="item.value" /> <el-option v-for="item in spiderTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="执行频率(秒/次):"> <el-form-item label="执行频率:" prop="cronExpression">
<Crontab v-model="cronExpression" style="width: 250px;" /> <Crontab v-model="ruleForm.cronExpression" style="width: 90%" />
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-form v-if="currentMode === AddMode.UPDATE_TASK">
<el-form-item label="执行频率(秒/次):">
<Crontab v-model="cronExpression" />
</el-form-item>
<!-- <el-form-item label="启用/停止:" v-if="currentMode === AddMode.UPDATE_TASK">
<el-switch v-model="taskSwitchValue" class="ml-2"
style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949" />
</el-form-item> -->
</el-form>
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button @click="handleClose">取消</el-button> <el-button @click="handleClose">取消</el-button>
...@@ -31,7 +22,6 @@ ...@@ -31,7 +22,6 @@
</el-button> </el-button>
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
</template> </template>
...@@ -42,6 +32,19 @@ import { watch } from 'vue' ...@@ -42,6 +32,19 @@ import { watch } from 'vue'
import { addSpiderTask } from '@/api/spiderTask' import { addSpiderTask } from '@/api/spiderTask'
import { AddMode } from './enum' import { AddMode } from './enum'
import { Crontab } from '@/components/Crontab/index' import { Crontab } from '@/components/Crontab/index'
import type { FormInstance, FormRules } from 'element-plus'
interface RuleForm {
taskName: string
spiderTypeValue: string
cronExpression: string
}
const ruleFormRef = ref<FormInstance>()
const ruleForm = ref<RuleForm>({
taskName: '',
spiderTypeValue: '',
cronExpression: '',
})
interface addDialogPropType { interface addDialogPropType {
dialogVisible: boolean, dialogVisible: boolean,
mode: AddMode, mode: AddMode,
...@@ -49,20 +52,35 @@ interface addDialogPropType { ...@@ -49,20 +52,35 @@ interface addDialogPropType {
cron: string, cron: string,
spiderType: string, spiderType: string,
options: string, options: string,
// frequency: string,
// taskStatus: boolean
} }
const props = defineProps<addDialogPropType>() const props = defineProps<addDialogPropType>()
const rules = ref<FormRules<RuleForm>>({
taskName: [
{ required: true, message: '请输入任务名称', trigger: 'blur' },
{ min: 1, max: 50, message: '任务名称应在1-50个字符之间', trigger: 'blur' },
],
spiderTypeValue: [
{
required: true,
message: '请选择所属爬虫',
trigger: 'change',
},
],
cronExpression: [
{
required: true,
message: '请输入执行频率',
trigger: 'change',
},
{ min: 1, message: '执行频率应为cron表达式', trigger: 'blur' },
]
})
// 向父组件传递dialog值 // 向父组件传递dialog值
const emit = defineEmits(['update:dialogVisible', 'confirm', 'update:mode', 'getTaskList']) const emit = defineEmits(['update:dialogVisible', 'confirm', 'update:mode', 'getTaskList'])
// 组件的状态 // 组件的状态
const currentVisible = ref(props.dialogVisible) const currentVisible = ref(props.dialogVisible)
const currentMode = ref(props.mode) const currentMode = ref(props.mode)
const taskName = ref('') const taskName = ref('')
const taskFrequency = ref('')
const taskTime = ref('')
const taskSwitchValue = ref(false)
const spiderTypeValue = ref('') const spiderTypeValue = ref('')
const spiderTypeOptions = ref([ const spiderTypeOptions = ref([
{ {
...@@ -84,43 +102,49 @@ const taskParams = ref({ ...@@ -84,43 +102,49 @@ const taskParams = ref({
project: 'spiders' project: 'spiders'
}) })
const cronExpression = ref('') const cronExpression = ref('')
// const shortcuts = [
// { text: '每工作日9点', value: '0 0 9 ? * MON-FRI' },
// { text: '每季度第一天', value: '0 0 0 1 1/3 ?' }
// ]
// 关闭的方法 // 关闭的方法
const handleClose = () => { const handleClose = () => {
taskName.value = '' ruleForm.value.taskName = ''
taskFrequency.value = '' ruleForm.value.spiderTypeValue
cronExpression.value = '' ruleForm.value.cronExpression = ''
currentVisible.value = false currentVisible.value = false
} }
// 确定的方法 // 确定的方法
const handleConfirm = async () => { const handleConfirm = async () => {
if (currentMode.value === AddMode.ADD_TASK) { if (!ruleFormRef.value) return
await addSpiderTask({ await ruleFormRef.value.validate(async (valid, fields) => {
scrapyd_server_id: taskParams.value.scrapyd_server_id, console.log('开始校验');
schedule_type: taskParams.value.schedule_type, //验证表单内容是否通过,通过继续执行
project: taskParams.value.project, if (valid) {
spider: spiderTypeValue.value, if (currentMode.value === AddMode.ADD_TASK) {
cron: cronExpression.value, await addSpiderTask({
options: JSON.stringify({ jobName: taskName.value }) scrapyd_server_id: taskParams.value.scrapyd_server_id,
}) schedule_type: taskParams.value.schedule_type,
currentVisible.value = false project: taskParams.value.project,
emit('getTaskList') spider: ruleForm.value.spiderTypeValue,
}else if (currentMode.value === AddMode.UPDATE_TASK) { cron: ruleForm.value.cronExpression,
await addSpiderTask({ options: JSON.stringify({ jobName: ruleForm.value.taskName })
scrapyd_server_id: taskParams.value.scrapyd_server_id, })
schedule_type: taskParams.value.schedule_type, currentVisible.value = false
project: taskParams.value.project, emit('getTaskList')
spider: props.spiderType, } else if (currentMode.value === AddMode.UPDATE_TASK) {
job_id: props.jobId, await addSpiderTask({
cron: cronExpression.value, scrapyd_server_id: taskParams.value.scrapyd_server_id,
options: props.options schedule_type: taskParams.value.schedule_type,
}) project: taskParams.value.project,
currentVisible.value = false spider: props.spiderType,
emit('getTaskList') job_id: props.jobId,
} cron: ruleForm.value.cronExpression,
options: props.options
})
currentVisible.value = false
emit('getTaskList')
}
} else {
console.log('校验不通过');
}
})
} }
// 监听props变化,同步给组件内部 // 监听props变化,同步给组件内部
...@@ -150,13 +174,13 @@ watch(() => currentMode.value, ...@@ -150,13 +174,13 @@ watch(() => currentMode.value,
) )
watch( watch(
[() => props.dialogVisible, () => props.mode, () => props.cron], [() => props.dialogVisible, () => props.mode, () => props.cron],
([newVisible, newMode,newCron]) => { ([newVisible, newMode, newCron]) => {
if (newVisible && newMode === AddMode.UPDATE_TASK) { if (newVisible && newMode === AddMode.UPDATE_TASK) {
cronExpression.value = newCron; ruleForm.value.cronExpression = newCron;
} }
if (!newVisible) { if (!newVisible) {
// 清空表单 // 清空表单
cronExpression.value = '' cronExpression.value = ''
} }
}, },
{ immediate: true } { immediate: true }
......
...@@ -30,7 +30,7 @@ export default defineConfig({ ...@@ -30,7 +30,7 @@ export default defineConfig({
proxy: { proxy: {
// 代理API请求,使用更精确的路径匹配 // 代理API请求,使用更精确的路径匹配
'/api': { '/api': {
target: 'http://127.0.0.1:5001/', target: 'http://192.168.0.200:5001/',
changeOrigin: true, changeOrigin: true,
}, },
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment