270 lines
6.1 KiB
JavaScript
270 lines
6.1 KiB
JavaScript
/**
|
|
* 状态管理模块 - 拆分状态对象,提供初始化函数
|
|
* @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
|
|
};
|
|
|
|
})();
|