166 lines
6.1 KiB
JavaScript
166 lines
6.1 KiB
JavaScript
/**
|
||
* 投递配置状态管理
|
||
*/
|
||
export default {
|
||
namespaced: true,
|
||
state: {
|
||
deliveryStats: {
|
||
todayCount: 0,
|
||
weekCount: 0,
|
||
monthCount: 0,
|
||
totalCount: 0,
|
||
successCount: 0,
|
||
failedCount: 0,
|
||
pendingCount: 0,
|
||
interviewCount: 0,
|
||
successRate: 0,
|
||
interviewRate: 0
|
||
},
|
||
deliveryConfig: {
|
||
autoDelivery: false,
|
||
interval: 30,
|
||
minSalary: 15000,
|
||
maxSalary: 30000,
|
||
scrollPages: 3,
|
||
maxPerBatch: 10,
|
||
filterKeywords: '',
|
||
excludeKeywords: '',
|
||
startTime: '09:00',
|
||
endTime: '18:00',
|
||
workdaysOnly: true
|
||
}
|
||
},
|
||
mutations: {
|
||
SET_DELIVERY_STATS(state, stats) {
|
||
state.deliveryStats = { ...state.deliveryStats, ...stats };
|
||
},
|
||
SET_DELIVERY_CONFIG(state, config) {
|
||
state.deliveryConfig = { ...state.deliveryConfig, ...config };
|
||
},
|
||
UPDATE_DELIVERY_CONFIG(state, { key, value }) {
|
||
state.deliveryConfig[key] = value;
|
||
}
|
||
},
|
||
actions: {
|
||
updateDeliveryStats({ commit }, stats) {
|
||
commit('SET_DELIVERY_STATS', stats);
|
||
},
|
||
async loadDeliveryStats({ commit, rootState }) {
|
||
try {
|
||
const snCode = rootState.auth.snCode;
|
||
if (!snCode) {
|
||
console.warn('[Delivery Store] 没有 snCode,无法加载统计数据');
|
||
return { success: false, error: '请先登录' };
|
||
}
|
||
|
||
// 动态导入 API
|
||
const applyRecordsAPI = (await import('../../api/apply_records.js')).default;
|
||
const result = await applyRecordsAPI.getStatistics(snCode);
|
||
|
||
// 后端返回格式:{ code: 0, data: {...} }
|
||
if (result && result.code === 0 && result.data) {
|
||
commit('SET_DELIVERY_STATS', result.data);
|
||
return { success: true };
|
||
} else {
|
||
const errorMsg = result?.message || '加载统计失败';
|
||
console.error('[Delivery Store] 加载统计失败:', result);
|
||
return { success: false, error: errorMsg };
|
||
}
|
||
} catch (error) {
|
||
console.error('[Delivery Store] 加载统计失败:', error);
|
||
return { success: false, error: error.message || '加载统计失败' };
|
||
}
|
||
},
|
||
updateDeliveryConfig({ commit }, { key, value }) {
|
||
commit('UPDATE_DELIVERY_CONFIG', { key, value });
|
||
},
|
||
setDeliveryConfig({ commit }, config) {
|
||
commit('SET_DELIVERY_CONFIG', config);
|
||
},
|
||
async saveDeliveryConfig({ state, rootState }) {
|
||
try {
|
||
const snCode = rootState.auth.snCode;
|
||
if (!snCode) {
|
||
return { success: false, error: '请先登录' };
|
||
}
|
||
|
||
// 将前端配置格式转换为后端格式
|
||
const deliverConfig = {
|
||
auto_delivery: state.deliveryConfig.autoDelivery || false,
|
||
interval: state.deliveryConfig.interval || 30,
|
||
min_salary: state.deliveryConfig.minSalary || 0,
|
||
max_salary: state.deliveryConfig.maxSalary || 0,
|
||
scroll_pages: state.deliveryConfig.scrollPages || 3,
|
||
max_per_batch: state.deliveryConfig.maxPerBatch || 10,
|
||
filter_keywords: state.deliveryConfig.filterKeywords || '',
|
||
exclude_keywords: state.deliveryConfig.excludeKeywords || '',
|
||
start_time: state.deliveryConfig.startTime || '09:00',
|
||
end_time: state.deliveryConfig.endTime || '18:00',
|
||
// 将布尔值转换为数字 1/0,后端期望数字类型
|
||
workdays_only: state.deliveryConfig.workdaysOnly ? 1 : 0
|
||
};
|
||
|
||
// 动态导入 API
|
||
const deliveryConfigAPI = (await import('../../api/delivery_config.js')).default;
|
||
const result = await deliveryConfigAPI.saveConfig(snCode, deliverConfig);
|
||
|
||
// 后端返回格式:{ code: 0, message: 'success', data: {...} }
|
||
// 或者:{ success: true, ... }
|
||
if (result && (result.code === 0 || result.success === true)) {
|
||
return { success: true };
|
||
} else {
|
||
const errorMsg = result?.message || result?.error || '保存失败';
|
||
console.error('[Delivery Store] 保存配置失败:', result);
|
||
return { success: false, error: errorMsg };
|
||
}
|
||
} catch (error) {
|
||
console.error('[Delivery Store] 保存配置失败:', error);
|
||
return { success: false, error: error.message || '保存配置失败' };
|
||
}
|
||
},
|
||
async loadDeliveryConfig({ commit, rootState }) {
|
||
try {
|
||
const snCode = rootState.auth.snCode;
|
||
if (!snCode) {
|
||
// 如果没有登录,使用默认配置
|
||
return { success: true };
|
||
}
|
||
|
||
// 动态导入 API
|
||
const deliveryConfigAPI = (await import('../../api/delivery_config.js')).default;
|
||
const result = await deliveryConfigAPI.getConfig(snCode);
|
||
|
||
// 后端返回格式:{ code: 0, data: { deliver_config: {...} } }
|
||
if (result && result.data && result.data.deliver_config) {
|
||
const deliverConfig = result.data.deliver_config;
|
||
// 将后端格式转换为前端格式
|
||
const frontendConfig = {
|
||
autoDelivery: deliverConfig.auto_delivery || false,
|
||
interval: deliverConfig.interval || 30,
|
||
minSalary: deliverConfig.min_salary || 0,
|
||
maxSalary: deliverConfig.max_salary || 0,
|
||
scrollPages: deliverConfig.scroll_pages || 3,
|
||
maxPerBatch: deliverConfig.max_per_batch || 10,
|
||
filterKeywords: deliverConfig.filter_keywords || '',
|
||
excludeKeywords: deliverConfig.exclude_keywords || '',
|
||
startTime: deliverConfig.start_time || '09:00',
|
||
endTime: deliverConfig.end_time || '18:00',
|
||
// 将数字 1/0 转换为布尔值,前端使用布尔值
|
||
workdaysOnly: deliverConfig.workdays_only === 1 || deliverConfig.workdays_only === true
|
||
};
|
||
commit('SET_DELIVERY_CONFIG', frontendConfig);
|
||
return { success: true };
|
||
} else {
|
||
// 如果获取失败,使用默认配置
|
||
return { success: true };
|
||
}
|
||
} catch (error) {
|
||
console.error('[Delivery Store] 加载配置失败:', error);
|
||
// 如果加载失败,使用默认配置
|
||
return { success: true };
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|