爬虫实现,修改class转样式,前端渲染
This commit is contained in:
@@ -41,6 +41,7 @@
|
||||
>
|
||||
<el-option label="成功" :value="1" />
|
||||
<el-option label="失败" :value="0" />
|
||||
<el-option label="运行中" :value="2" />
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="search-actions">
|
||||
@@ -69,8 +70,11 @@
|
||||
<el-table-column prop="methodName" label="方法名称" width="120" />
|
||||
<el-table-column label="执行状态" width="100">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.executeStatus === 1 ? 'success' : 'danger'" size="small">
|
||||
{{ row.executeStatus === 1 ? '成功' : '失败' }}
|
||||
<el-tag
|
||||
:type="row.executeStatus === 1 ? 'success' : row.executeStatus === 2 ? 'warning' : 'danger'"
|
||||
size="small"
|
||||
>
|
||||
{{ row.executeStatus === 1 ? '成功' : row.executeStatus === 2 ? '运行中' : '失败' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
@@ -152,8 +156,11 @@
|
||||
</div>
|
||||
<div class="detail-item">
|
||||
<span class="detail-label">执行状态:</span>
|
||||
<el-tag :type="currentLog.executeStatus === 1 ? 'success' : 'danger'" size="small">
|
||||
{{ currentLog.executeStatus === 1 ? '成功' : '失败' }}
|
||||
<el-tag
|
||||
:type="currentLog.executeStatus === 1 ? 'success' : currentLog.executeStatus === 2 ? 'warning' : 'danger'"
|
||||
size="small"
|
||||
>
|
||||
{{ currentLog.executeStatus === 1 ? '成功' : currentLog.executeStatus === 2 ? '运行中' : '失败' }}
|
||||
</el-tag>
|
||||
</div>
|
||||
<div class="detail-item">
|
||||
|
||||
@@ -232,25 +232,67 @@
|
||||
{{ param.description }}
|
||||
<span class="param-type">({{ param.type }})</span>
|
||||
</span>
|
||||
<!-- 文本输入框 -->
|
||||
<el-input
|
||||
v-if="param.type === 'String'"
|
||||
v-if="param.type === 'Input'"
|
||||
v-model="dynamicParams[param.name]"
|
||||
:placeholder="`请输入${param.description}`"
|
||||
clearable
|
||||
/>
|
||||
<!-- 数字输入框 -->
|
||||
<el-input-number
|
||||
v-else-if="param.type === 'Integer'"
|
||||
v-else-if="param.type === 'InputNumber'"
|
||||
v-model="dynamicParams[param.name]"
|
||||
:placeholder="`请输入${param.description}`"
|
||||
controls-position="right"
|
||||
style="width: 100%"
|
||||
/>
|
||||
<!-- 日期选择器 -->
|
||||
<el-date-picker
|
||||
v-else-if="param.type === 'DatePicker'"
|
||||
v-model="dynamicParams[param.name]"
|
||||
type="date"
|
||||
:placeholder="`请选择${param.description}`"
|
||||
format="YYYY-MM-DD"
|
||||
value-format="YYYY-MM-DD"
|
||||
clearable
|
||||
style="width: 100%"
|
||||
/>
|
||||
<!-- 日期范围选择器 -->
|
||||
<el-date-picker
|
||||
v-else-if="param.type === 'DateRangePicker'"
|
||||
v-model="dynamicParams[param.name]"
|
||||
type="daterange"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
format="YYYY-MM-DD"
|
||||
value-format="YYYY-MM-DD"
|
||||
clearable
|
||||
style="width: 100%"
|
||||
/>
|
||||
<!-- 布尔开关 -->
|
||||
<el-switch
|
||||
v-else-if="param.type === 'Boolean'"
|
||||
v-else-if="param.type === 'Switch'"
|
||||
v-model="dynamicParams[param.name]"
|
||||
active-text="是"
|
||||
inactive-text="否"
|
||||
/>
|
||||
<!-- 下拉选择器 -->
|
||||
<el-select
|
||||
v-else-if="param.type === 'Select'"
|
||||
v-model="dynamicParams[param.name]"
|
||||
:placeholder="`请选择${param.description}`"
|
||||
clearable
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-option
|
||||
v-for="option in param.options"
|
||||
:key="option.value"
|
||||
:label="option.label"
|
||||
:value="option.value"
|
||||
/>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -819,6 +861,24 @@ async function handleEdit(row: CrontabTask) {
|
||||
const params = JSON.parse(row.methodParams);
|
||||
// 排除系统参数
|
||||
const { scriptPath, taskId, logId, ...restParams } = params;
|
||||
|
||||
// 处理DateRangePicker参数:将startKey和endKey合并为dateRange数组
|
||||
if (method.params) {
|
||||
for (const param of method.params) {
|
||||
if (param.type === 'DateRangePicker' && param.startKey && param.endKey) {
|
||||
const startValue = restParams[param.startKey];
|
||||
const endValue = restParams[param.endKey];
|
||||
if (startValue && endValue) {
|
||||
// 合并为数组
|
||||
restParams[param.name] = [startValue, endValue];
|
||||
// 删除原始的start和end字段
|
||||
delete restParams[param.startKey];
|
||||
delete restParams[param.endKey];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 延迟设置,确保watch先执行完
|
||||
setTimeout(() => {
|
||||
dynamicParams.value = restParams;
|
||||
@@ -971,11 +1031,12 @@ async function handleSubmit() {
|
||||
for (const param of selectedMethod.value.params) {
|
||||
const value = dynamicParams.value[param.name];
|
||||
|
||||
if (param.required && param.type === 'String' && (!value || value.trim() === '')) {
|
||||
// 使用valueType判断值类型
|
||||
if (param.required && param.valueType === 'String' && (!value || value.trim() === '')) {
|
||||
ElMessage.warning(`请输入${param.description}`);
|
||||
return;
|
||||
}
|
||||
if (param.required && param.type === 'Integer' && (value === undefined || value === null || value === '')) {
|
||||
if (param.required && param.valueType === 'Integer' && (value === undefined || value === null || value === '')) {
|
||||
ElMessage.warning(`请输入${param.description}`);
|
||||
return;
|
||||
}
|
||||
@@ -984,15 +1045,32 @@ async function handleSubmit() {
|
||||
|
||||
submitting.value = true;
|
||||
try {
|
||||
// 处理DateRangePicker参数,将数组拆分为开始和结束日期
|
||||
const processedParams = { ...dynamicParams.value };
|
||||
if (selectedMethod.value.params) {
|
||||
for (const param of selectedMethod.value.params) {
|
||||
if (param.type === 'DateRangePicker' && processedParams[param.name]) {
|
||||
const dateRange = processedParams[param.name];
|
||||
if (Array.isArray(dateRange) && dateRange.length === 2) {
|
||||
// 拆分为startKey和endKey
|
||||
const startKey = (param as any).startKey || 'startDate';
|
||||
const endKey = (param as any).endKey || 'endDate';
|
||||
processedParams[startKey] = dateRange[0];
|
||||
processedParams[endKey] = dateRange[1];
|
||||
// 删除原始的range参数
|
||||
delete processedParams[param.name];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 构建CreateTaskRequest
|
||||
const requestData: CreateTaskRequest = {
|
||||
metaId: selectedMetaId.value,
|
||||
task: {
|
||||
...formData,
|
||||
defaultRecipient: useDefaultRecipients.value,
|
||||
methodParams: JSON.stringify({
|
||||
...dynamicParams.value
|
||||
})
|
||||
methodParams: JSON.stringify(processedParams)
|
||||
} as CrontabTask,
|
||||
additionalRecipients: additionalRecipients.value
|
||||
};
|
||||
|
||||
@@ -6,11 +6,11 @@
|
||||
<div class="article-management">
|
||||
<div class="action-bar">
|
||||
<el-button type="primary" @click="showCreateDialog">+ 新增文章</el-button>
|
||||
<el-button @click="handleDataCollection">数据采集</el-button>
|
||||
<el-input
|
||||
v-model="searchKeyword"
|
||||
placeholder="搜索文章..."
|
||||
style="width: 300px"
|
||||
onkeydown=""
|
||||
clearable
|
||||
/>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user