/** * 状态管理模块 - 拆分状态对象,提供初始化函数 * @module state */ ;(function() { 'use strict'; /** * 创建模板表单初始状态 * @param {string} [datasource='marketing'] - 数据源 * @returns {Object} 模板表单状态 */ const createTemplateFormState = (datasource = 'marketing') => ({ name: '', datasource: datasource, main_table: datasource === 'ymt' ? 'order_info' : 'order', orderType: datasource === 'ymt' ? 2 : 1, fieldsRaw: '', fieldsSel: [], file_format: 'xlsx', visibility: 'private' }); /** * 创建编辑表单初始状态 * @returns {Object} 编辑表单状态 */ const createEditFormState = () => ({ id: null, name: '', datasource: 'marketing', main_table: 'order', orderType: 1, fieldsSel: [], visibility: 'private', file_format: 'xlsx' }); /** * 创建导出表单初始状态 * @returns {Object} 导出表单状态 */ const createExportFormState = () => ({ tplId: null, datasource: 'marketing', file_format: 'xlsx', dateRange: [], // 营销系统筛选条件 creatorId: null, creatorIds: [], creatorIdsRaw: '', resellerId: null, planId: null, keyBatchId: null, codeBatchId: null, voucherChannelActivityId: '', // 易码通筛选条件 ymtCreatorId: '', ymtMerchantId: '', ymtActivityId: '' }); /** * 创建导出模板状态 * @returns {Object} 导出模板状态 */ const createExportTemplateState = () => ({ id: null, filters: {}, main_table: '', fields: [], datasource: '', file_format: '' }); /** * 创建任务列表状态 * @returns {Object} 任务列表状态 */ const createJobsState = () => ({ jobs: [], jobsVisible: false, jobsTplId: null, jobsPage: 1, jobsPageSize: 10, jobsTotal: 0 }); /** * 创建SQL预览状态 * @returns {Object} SQL预览状态 */ const createSqlPreviewState = () => ({ sqlVisible: false, sqlText: '', sqlExplainDesc: '' }); /** * 创建对话框状态 * @returns {Object} 对话框状态 */ const createDialogState = () => { const { CONSTANTS } = window.AppConfig || {}; const defaultWidth = CONSTANTS?.DIALOG_DEFAULT_WIDTH || 900; const editDefaultWidth = CONSTANTS?.DIALOG_EDIT_DEFAULT_WIDTH || 900; return { createVisible: false, editVisible: false, exportVisible: false, exportSubmitting: false, createWidth: localStorage.getItem('tplDialogWidth') || (defaultWidth + 'px'), editWidth: localStorage.getItem('tplEditDialogWidth') || (editDefaultWidth + 'px') }; }; /** * 创建完整的应用状态 * @returns {Object} 完整应用状态 */ const createAppState = () => { return { // 模板列表 templates: [], // 当前任务详情 job: {}, // 模板表单 form: createTemplateFormState(), // 编辑表单 edit: createEditFormState(), // 导出表单 exportForm: createExportFormState(), // 导出模板详情 exportTpl: createExportTemplateState(), // 任务列表 ...createJobsState(), // SQL 预览 ...createSqlPreviewState(), // 对话框 ...createDialogState() }; }; /** * 重置模板表单 * @param {Object} form - 表单对象 * @param {string} [datasource='marketing'] - 数据源 */ const resetTemplateForm = (form, datasource = 'marketing') => { const initial = createTemplateFormState(datasource); Object.assign(form, initial); }; /** * 重置编辑表单 * @param {Object} edit - 编辑表单对象 */ const resetEditForm = (edit) => { const initial = createEditFormState(); Object.assign(edit, initial); }; /** * 重置导出表单 * @param {Object} exportForm - 导出表单对象 */ const resetExportForm = (exportForm) => { const initial = createExportFormState(); Object.assign(exportForm, initial); }; /** * 表单验证规则工厂 */ const ValidationRules = { /** * 创建模板表单验证规则 * @returns {Object} 验证规则 */ createTemplateRules() { return { name: [{ required: true, message: '请输入模板名称', trigger: 'blur' }], datasource: [{ required: true, message: '请选择数据源', trigger: 'change' }], main_table: [{ required: true, message: '请选择导出场景', trigger: 'change' }], orderType: [{ required: true, message: '请选择订单类型', trigger: 'change' }], fieldsSel: [{ validator: (_rule, val, cb) => { if (Array.isArray(val) && val.length > 0) { cb(); } else { cb(new Error('请至少选择一个字段')); } }, trigger: 'change' }], file_format: [{ required: true, message: '请选择输出格式', trigger: 'change' }], visibility: [{ required: true, message: '请选择可见性', trigger: 'change' }] }; }, /** * 创建编辑表单验证规则 * @returns {Object} 验证规则 */ createEditRules() { return { name: [{ required: true, message: '请输入模板名称', trigger: 'blur' }], orderType: [{ required: true, message: '请选择订单类型', trigger: 'change' }], fieldsSel: [{ validator: (_rule, val, cb) => { if (Array.isArray(val) && val.length > 0) { cb(); } else { cb(new Error('请至少选择一个字段')); } }, trigger: 'change' }] }; }, /** * 创建导出表单验证规则 * @returns {Object} 验证规则 */ createExportRules() { return { tplId: [{ required: true, message: '请选择模板', trigger: 'change' }], dateRange: [{ validator: (_rule, val, cb) => { if (Array.isArray(val) && val.length === 2) { cb(); } else { cb(new Error('请选择时间范围')); } }, trigger: 'change' }] }; } }; // 导出模块 window.StateModule = { createTemplateFormState, createEditFormState, createExportFormState, createExportTemplateState, createJobsState, createSqlPreviewState, createDialogState, createAppState, resetTemplateForm, resetEditForm, resetExportForm, ValidationRules }; })();