管理模塊是系統的核心業(yè)務(wù)模塊,主要負責:
src/components/ckfp/ckgd/
├── ckgd.js # 主組件
├── ckgd.less # 樣式文件
├── methods.js # 業(yè)務(wù)方法
├── base/ # 基礎組件
│ ├── DynamicTable.js # 動(dòng)態(tài)表格組件
│ └── ...
└── components/ # 子組件
├── BasicInfoPanel.js
├── GoodsListPanel.js
└── AttachmentPanel.js
// 報關(guān)單狀態(tài)管理
export const CkgdStatus = {
DRAFT: '0', // 草稿
SUBMITTED: '1', // 已提交
APPROVED: '2', // 已審核
REJECTED: '3', // 已拒絕
COMPLETED: '4' // 已完成
};
// 報關(guān)單類(lèi)型
export const CkgdType = {
IMPORT: 'I', // 進(jìn)口
EXPORT: 'E' // 出口
};
// 狀態(tài)樹(shù)結構
{
user: {
info: {}, // 用戶(hù)信息
permissions: [] // 權限列表
},
ckgd: {
list: [], // 報關(guān)單列表
current: {}, // 當前報關(guān)單
loading: false, // 加載狀態(tài)
error: null // 錯誤信息
},
common: {
dictionaries: {}, // 字典數據
config: {} // 系統配置
}
}
// 報關(guān)單相關(guān)Action
export const CKGDActions = {
// 獲取列表
FETCH_LIST_REQUEST: 'CKGDFETCH_LIST_REQUEST',
FETCH_LIST_SUCCESS: 'CKGDFETCH_LIST_SUCCESS',
FETCH_LIST_FAILURE: 'CKGDFETCH_LIST_FAILURE',
// 獲取詳情
FETCH_DETAIL_REQUEST: 'CKGDFETCH_DETAIL_REQUEST',
FETCH_DETAIL_SUCCESS: 'CKGDFETCH_DETAIL_SUCCESS',
FETCH_DETAIL_FAILURE: 'CKGDFETCH_DETAIL_FAILURE',
// 更新報關(guān)單
UPDATE_REQUEST: 'CKGD_UPDATE_REQUEST',
UPDATE_SUCCESS: 'CKGD_UPDATE_SUCCESS',
UPDATE_FAILURE: 'CKGD_UPDATE_FAILURE'
};
// 權限枚舉
export const Permissions = {
CKGDLIST_VIEW: 'ckgdlist_view', // 查看列表
CKGDLIST_CREATE: 'ckgdlist_create', // 創(chuàng )建報關(guān)單
CKGDLIST_EDIT: 'ckgdlist_edit', // 編輯報關(guān)單
CKGDLIST_DELETE: 'ckgdlist_delete', // 刪除報關(guān)單
CKGDLIST_APPROVE: 'ckgdlist_approve', // 審核報關(guān)單
CKGDLIST_EXPORT: 'ckgdlist_export' // 導出數據
};
// 權限檢查函數
export const hasPermission = (permission) => {
const userPermissions = store.getState().user.permissions;
return userPermissions.includes(permission);
};
// 附件類(lèi)型
export const AttachmentType = {
INVOICE: 'invoice', // 發(fā)票
CONTRACT: 'contract', // 合同
CERTIFICATE: 'certificate', // 證書(shū)
OTHER: 'other' // 其他
};
// 文件上傳管理
export class FileManager {
constructor() {
this.maxSize = 10 * 1024 * 1024; // 10MB
this.allowedTypes = ['image/jpeg', 'image/png', 'application/pdf'];
}
// 驗證文件
validateFile(file) {
if (file.size > this.maxSize) {
throw new Error('文件大小超過(guò)限制');
}
if (!this.allowedTypes.includes(file.type)) {
throw new Error('文件類(lèi)型不支持');
}
return true;
}
// 上傳文件
async uploadFile(file, type) {
try {
this.validateFile(file);
const formData = new FormData();
formData.append('file', file);
formData.append('type', type);
const response = await post('/api/upload', formData, {
headers: {
'Content-Type': 'multipart/form-data'
}
});
return response;
} catch (error) {
throw new Error(`文件上傳失敗: ${error.message}`);
}
}
}
// 統計指標
export const StatisticsMetrics = {
TOTAL_COUNT: 'total_count', // 總數量
APPROVED_COUNT: 'approved_count', // 已審核數量
PENDING_COUNT: 'pending_count', // 待處理數量
REJECTED_COUNT: 'rejected_count', // 已拒絕數量
AMOUNT_SUM: 'amount_sum' // 金額總和
};
// 統計函數
export class StatisticsCalculator {
// 按狀態(tài)統計
static countByStatus(data) {
return data.reduce((acc, item) => {
acc[item.status] = (acc[item.status] || 0) + 1;
return acc;
}, {});
}
// 按日期統計
static countByDate(data, dateField = 'createTime') {
return data.reduce((acc, item) => {
const date = formatDate(item[dateField], 'YYYY-MM-DD');
acc[date] = (acc[date] || 0) + 1;
return acc;
}, {});
}
// 金額統計
static sumAmount(data, amountField = 'amount') {
return data.reduce((sum, item) => {
return sum + (parseFloat(item[amountField]) || 0);
}, 0);
}
}
// 系統配置
export const SystemConfig = {
// API配置
API: {
BASE_URL: process.env.REACT_APP_API_BASE_URL,
TIMEOUT: 30000,
RETRY_COUNT: 3
},
// 界面配置
UI: {
THEME: 'default',
LANGUAGE: 'zh-CN',
PAGE_SIZE: 20
},
// 業(yè)務(wù)配置
BUSINESS: {
MAX_FILE_SIZE: 10 * 1024 * 1024,
ALLOWED_FILE_TYPES: ['jpg', 'png', 'pdf', 'doc', 'docx'],
AUTO_SAVE_INTERVAL: 30000
}
};
// 配置管理類(lèi)
export class ConfigManager {
static get(key, defaultValue = null) {
const keys = key.split('.');
let value = SystemConfig;
for (const k of keys) {
if (value && typeof value === 'object' && k in value) {
value = value[k];
} else {
return defaultValue;
}
}
return value;
}
// 從環(huán)境變量加載配置
static loadFromEnv() {
return {
API_BASE_URL: process.env.REACT_APP_API_BASE_URL,
APP_VERSION: process.env.REACT_APP_VERSION,
BUILD_DATE: process.env.REACT_APP_BUILD_DATE
};
}
}
這些業(yè)務(wù)模塊為系統提供了完整的業(yè)務(wù)功能支持,涵蓋了報關(guān)單管理、權限控制、文件處理等核心業(yè)務(wù)場(chǎng)景。