1
This commit is contained in:
@@ -147,10 +147,20 @@
|
|||||||
<InputNumber v-model="formData.max_deliver" :min="1" placeholder="默认10个" style="width: 100%;" />
|
<InputNumber v-model="formData.max_deliver" :min="1" placeholder="默认10个" style="width: 100%;" />
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem label="过滤关键词">
|
<FormItem label="过滤关键词">
|
||||||
<Input v-model="formData.filter_keywords" placeholder="包含这些关键词的职位会被优先考虑,多个用逗号分隔" />
|
<Input
|
||||||
|
v-model="formData.filter_keywords"
|
||||||
|
type="textarea"
|
||||||
|
:rows="4"
|
||||||
|
placeholder="包含这些关键词的职位会被优先考虑,每行一个关键词,或使用逗号分隔"
|
||||||
|
/>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem label="排除关键词">
|
<FormItem label="排除关键词">
|
||||||
<Input v-model="formData.exclude_keywords" placeholder="包含这些关键词的职位会被排除,多个用逗号分隔" />
|
<Input
|
||||||
|
v-model="formData.exclude_keywords"
|
||||||
|
type="textarea"
|
||||||
|
:rows="4"
|
||||||
|
placeholder="包含这些关键词的职位会被排除,每行一个关键词,或使用逗号分隔"
|
||||||
|
/>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem label="投递开始时间">
|
<FormItem label="投递开始时间">
|
||||||
<Input v-model="formData.deliver_start_time" placeholder="格式:HH:mm,如:09:00" />
|
<Input v-model="formData.deliver_start_time" placeholder="格式:HH:mm,如:09:00" />
|
||||||
@@ -364,16 +374,18 @@ export default {
|
|||||||
const deliverConfig = typeof row.deliver_config === 'string'
|
const deliverConfig = typeof row.deliver_config === 'string'
|
||||||
? JSON.parse(row.deliver_config)
|
? JSON.parse(row.deliver_config)
|
||||||
: row.deliver_config
|
: row.deliver_config
|
||||||
|
// 保存原有配置以便合并
|
||||||
|
this.formData.original_deliver_config = deliverConfig
|
||||||
this.formData.deliver_interval = deliverConfig.deliver_interval || 30
|
this.formData.deliver_interval = deliverConfig.deliver_interval || 30
|
||||||
this.formData.min_salary = deliverConfig.min_salary || 0
|
this.formData.min_salary = deliverConfig.min_salary || 0
|
||||||
this.formData.max_salary = deliverConfig.max_salary || 0
|
this.formData.max_salary = deliverConfig.max_salary || 0
|
||||||
this.formData.page_count = deliverConfig.page_count || 3
|
this.formData.page_count = deliverConfig.page_count || 3
|
||||||
this.formData.max_deliver = deliverConfig.max_deliver || 10
|
this.formData.max_deliver = deliverConfig.max_deliver || 10
|
||||||
this.formData.filter_keywords = Array.isArray(deliverConfig.filter_keywords)
|
this.formData.filter_keywords = Array.isArray(deliverConfig.filter_keywords)
|
||||||
? deliverConfig.filter_keywords.join(',')
|
? deliverConfig.filter_keywords.join('\n')
|
||||||
: (deliverConfig.filter_keywords || '')
|
: (deliverConfig.filter_keywords || '')
|
||||||
this.formData.exclude_keywords = Array.isArray(deliverConfig.exclude_keywords)
|
this.formData.exclude_keywords = Array.isArray(deliverConfig.exclude_keywords)
|
||||||
? deliverConfig.exclude_keywords.join(',')
|
? deliverConfig.exclude_keywords.join('\n')
|
||||||
: (deliverConfig.exclude_keywords || '')
|
: (deliverConfig.exclude_keywords || '')
|
||||||
// 处理时间区间配置
|
// 处理时间区间配置
|
||||||
if (deliverConfig.time_range) {
|
if (deliverConfig.time_range) {
|
||||||
@@ -381,6 +393,8 @@ export default {
|
|||||||
this.formData.deliver_end_time = deliverConfig.time_range.end_time || '18:00'
|
this.formData.deliver_end_time = deliverConfig.time_range.end_time || '18:00'
|
||||||
this.formData.deliver_workdays_only = deliverConfig.time_range.workdays_only !== undefined ? deliverConfig.time_range.workdays_only : 1
|
this.formData.deliver_workdays_only = deliverConfig.time_range.workdays_only !== undefined ? deliverConfig.time_range.workdays_only : 1
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
this.formData.original_deliver_config = {}
|
||||||
}
|
}
|
||||||
|
|
||||||
// chat_strategy 配置
|
// chat_strategy 配置
|
||||||
@@ -560,24 +574,42 @@ export default {
|
|||||||
weight: Number(item.weight) || 0
|
weight: Number(item.weight) || 0
|
||||||
}))
|
}))
|
||||||
|
|
||||||
// 处理 deliver_config
|
// 处理 deliver_config(合并原有配置)
|
||||||
const deliverConfig = {}
|
const originalDeliverConfig = saveData.original_deliver_config || {}
|
||||||
deliverConfig.deliver_interval = Number(saveData.deliver_interval) || 30
|
const deliverConfig = { ...originalDeliverConfig }
|
||||||
deliverConfig.min_salary = Number(saveData.min_salary) || 0
|
|
||||||
deliverConfig.max_salary = Number(saveData.max_salary) || 0
|
// 只覆盖传入的字段
|
||||||
deliverConfig.page_count = Number(saveData.page_count) || 3
|
if (saveData.deliver_interval !== undefined) {
|
||||||
deliverConfig.max_deliver = Number(saveData.max_deliver) || 10
|
deliverConfig.deliver_interval = Number(saveData.deliver_interval) || 30
|
||||||
deliverConfig.filter_keywords = typeof saveData.filter_keywords === 'string' && saveData.filter_keywords.trim()
|
}
|
||||||
? saveData.filter_keywords.split(',').map(k => k.trim()).filter(k => k)
|
if (saveData.min_salary !== undefined) {
|
||||||
: []
|
deliverConfig.min_salary = Number(saveData.min_salary) || 0
|
||||||
deliverConfig.exclude_keywords = typeof saveData.exclude_keywords === 'string' && saveData.exclude_keywords.trim()
|
}
|
||||||
? saveData.exclude_keywords.split(',').map(k => k.trim()).filter(k => k)
|
if (saveData.max_salary !== undefined) {
|
||||||
: []
|
deliverConfig.max_salary = Number(saveData.max_salary) || 0
|
||||||
// 处理时间区间配置
|
}
|
||||||
deliverConfig.time_range = {
|
if (saveData.page_count !== undefined) {
|
||||||
start_time: saveData.deliver_start_time || '09:00',
|
deliverConfig.page_count = Number(saveData.page_count) || 3
|
||||||
end_time: saveData.deliver_end_time || '18:00',
|
}
|
||||||
workdays_only: saveData.deliver_workdays_only ? 1 : 0
|
if (saveData.max_deliver !== undefined) {
|
||||||
|
deliverConfig.max_deliver = Number(saveData.max_deliver) || 10
|
||||||
|
}
|
||||||
|
// 解析过滤关键词:支持换行和逗号分隔
|
||||||
|
if (saveData.filter_keywords !== undefined) {
|
||||||
|
deliverConfig.filter_keywords = this.parseKeywords(saveData.filter_keywords)
|
||||||
|
}
|
||||||
|
// 解析排除关键词:支持换行和逗号分隔
|
||||||
|
if (saveData.exclude_keywords !== undefined) {
|
||||||
|
deliverConfig.exclude_keywords = this.parseKeywords(saveData.exclude_keywords)
|
||||||
|
}
|
||||||
|
// 处理时间区间配置(合并原有配置)
|
||||||
|
if (saveData.deliver_start_time !== undefined || saveData.deliver_end_time !== undefined || saveData.deliver_workdays_only !== undefined) {
|
||||||
|
deliverConfig.time_range = {
|
||||||
|
...(originalDeliverConfig.time_range || {}),
|
||||||
|
start_time: saveData.deliver_start_time !== undefined ? (saveData.deliver_start_time || '09:00') : (originalDeliverConfig.time_range?.start_time || '09:00'),
|
||||||
|
end_time: saveData.deliver_end_time !== undefined ? (saveData.deliver_end_time || '18:00') : (originalDeliverConfig.time_range?.end_time || '18:00'),
|
||||||
|
workdays_only: saveData.deliver_workdays_only !== undefined ? (saveData.deliver_workdays_only ? 1 : 0) : (originalDeliverConfig.time_range?.workdays_only !== undefined ? originalDeliverConfig.time_range.workdays_only : 1)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
saveData.deliver_config = deliverConfig
|
saveData.deliver_config = deliverConfig
|
||||||
delete saveData.deliver_interval
|
delete saveData.deliver_interval
|
||||||
@@ -590,6 +622,7 @@ export default {
|
|||||||
delete saveData.deliver_start_time
|
delete saveData.deliver_start_time
|
||||||
delete saveData.deliver_end_time
|
delete saveData.deliver_end_time
|
||||||
delete saveData.deliver_workdays_only
|
delete saveData.deliver_workdays_only
|
||||||
|
delete saveData.original_deliver_config
|
||||||
|
|
||||||
// 处理 chat_strategy
|
// 处理 chat_strategy
|
||||||
const chatStrategy = {}
|
const chatStrategy = {}
|
||||||
@@ -682,6 +715,28 @@ export default {
|
|||||||
this.priorityList[0].weight += diff
|
this.priorityList[0].weight += diff
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
// 解析关键词:支持换行和逗号分隔
|
||||||
|
parseKeywords(keywords) {
|
||||||
|
if (!keywords || typeof keywords !== 'string') {
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
|
||||||
|
const trimmed = keywords.trim()
|
||||||
|
if (!trimmed) {
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
|
||||||
|
// 先按换行分割,再按逗号分割,然后过滤空值
|
||||||
|
const result = []
|
||||||
|
trimmed.split(/\n|,|,/).forEach(keyword => {
|
||||||
|
const trimmedKeyword = keyword.trim()
|
||||||
|
if (trimmedKeyword) {
|
||||||
|
result.push(trimmedKeyword)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
return result
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
|||||||
@@ -208,9 +208,55 @@ class PlaAccountService {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 深度合并 JSON 配置字段(deliver_config、chat_strategy、active_actions)
|
||||||
|
const jsonConfigFields = ['deliver_config', 'chat_strategy', 'active_actions'];
|
||||||
|
jsonConfigFields.forEach(field => {
|
||||||
|
if (processedData[field] !== undefined && processedData[field] !== null) {
|
||||||
|
// 获取原有配置
|
||||||
|
const originalConfig = account[field] || {};
|
||||||
|
const newConfig = processedData[field];
|
||||||
|
|
||||||
|
// 深度合并配置(只覆盖传入的字段,保留原有的其他字段)
|
||||||
|
if (typeof newConfig === 'object' && !Array.isArray(newConfig)) {
|
||||||
|
// 对于对象类型,深度合并
|
||||||
|
processedData[field] = this.deepMerge(originalConfig, newConfig);
|
||||||
|
} else {
|
||||||
|
// 对于非对象类型(如 null、数组等),直接使用新值
|
||||||
|
processedData[field] = newConfig;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
await pla_account.update(processedData, { where: { id } });
|
await pla_account.update(processedData, { where: { id } });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 深度合并对象(只合并一层,用于 JSON 配置字段)
|
||||||
|
* @param {Object} target - 目标对象(原有配置)
|
||||||
|
* @param {Object} source - 源对象(新配置)
|
||||||
|
* @returns {Object} 合并后的对象
|
||||||
|
*/
|
||||||
|
deepMerge(target, source) {
|
||||||
|
const result = { ...target };
|
||||||
|
|
||||||
|
// 遍历源对象的所有键
|
||||||
|
Object.keys(source).forEach(key => {
|
||||||
|
const sourceValue = source[key];
|
||||||
|
const targetValue = target[key];
|
||||||
|
|
||||||
|
// 如果源值是对象且目标值也是对象,递归合并
|
||||||
|
if (sourceValue && typeof sourceValue === 'object' && !Array.isArray(sourceValue) &&
|
||||||
|
targetValue && typeof targetValue === 'object' && !Array.isArray(targetValue)) {
|
||||||
|
result[key] = this.deepMerge(targetValue, sourceValue);
|
||||||
|
} else {
|
||||||
|
// 否则直接覆盖(包括 null、undefined、数组等)
|
||||||
|
result[key] = sourceValue;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除账号(软删除)
|
* 删除账号(软删除)
|
||||||
* @param {number} id - 账号ID
|
* @param {number} id - 账号ID
|
||||||
|
|||||||
Reference in New Issue
Block a user