|
@@ -0,0 +1,384 @@
|
|
|
+/**
|
|
|
+ * 营销活动管理相关常量定义
|
|
|
+ * @fileoverview 活动类型、审批状态等枚举值和工具函数
|
|
|
+ */
|
|
|
+
|
|
|
+/**
|
|
|
+ * 活动类型枚举
|
|
|
+ * @readonly
|
|
|
+ * @enum {string}
|
|
|
+ */
|
|
|
+export const ACTIVITY_TYPE = {
|
|
|
+ /** 促销活动 */
|
|
|
+ PROMOTION: '促销',
|
|
|
+ /** 新品推广 */
|
|
|
+ NEW_PRODUCT: '新品推广',
|
|
|
+ /** 其他活动 */
|
|
|
+ OTHER: '其他'
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 审批状态枚举
|
|
|
+ * @readonly
|
|
|
+ * @enum {number}
|
|
|
+ */
|
|
|
+export const APPROVAL_STATUS = {
|
|
|
+ /** 待审批 */
|
|
|
+ PENDING: 0,
|
|
|
+ /** 已通过 */
|
|
|
+ APPROVED: 1,
|
|
|
+ /** 已拒绝 */
|
|
|
+ REJECTED: 2
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 文件类型枚举
|
|
|
+ * @readonly
|
|
|
+ * @enum {string}
|
|
|
+ */
|
|
|
+export const FILE_TYPE = {
|
|
|
+ /** PDF文档 */
|
|
|
+ PDF: 'pdf',
|
|
|
+ /** Word文档 */
|
|
|
+ DOC: 'doc',
|
|
|
+ /** Word文档(新版) */
|
|
|
+ DOCX: 'docx',
|
|
|
+ /** Excel表格 */
|
|
|
+ XLS: 'xls',
|
|
|
+ /** Excel表格(新版) */
|
|
|
+ XLSX: 'xlsx',
|
|
|
+ /** PowerPoint演示文稿 */
|
|
|
+ PPT: 'ppt',
|
|
|
+ /** PowerPoint演示文稿(新版) */
|
|
|
+ PPTX: 'pptx',
|
|
|
+ /** JPEG图片 */
|
|
|
+ JPG: 'jpg',
|
|
|
+ /** JPEG图片 */
|
|
|
+ JPEG: 'jpeg',
|
|
|
+ /** PNG图片 */
|
|
|
+ PNG: 'png',
|
|
|
+ /** GIF图片 */
|
|
|
+ GIF: 'gif',
|
|
|
+ /** BMP图片 */
|
|
|
+ BMP: 'bmp',
|
|
|
+ /** 文本文件 */
|
|
|
+ TXT: 'txt',
|
|
|
+ /** ZIP压缩包 */
|
|
|
+ ZIP: 'zip',
|
|
|
+ /** RAR压缩包 */
|
|
|
+ RAR: 'rar',
|
|
|
+ /** 7Z压缩包 */
|
|
|
+ SEVEN_Z: '7z'
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 活动类型配置映射
|
|
|
+ * @readonly
|
|
|
+ * @type {Record<string, {label: string, type: string, color: string}>}
|
|
|
+ */
|
|
|
+export const ACTIVITY_TYPE_CONFIG = {
|
|
|
+ [ACTIVITY_TYPE.PROMOTION]: {
|
|
|
+ label: '促销',
|
|
|
+ type: 'success',
|
|
|
+ color: '#67C23A'
|
|
|
+ },
|
|
|
+ [ACTIVITY_TYPE.NEW_PRODUCT]: {
|
|
|
+ label: '新品推广',
|
|
|
+ type: 'primary',
|
|
|
+ color: '#409EFF'
|
|
|
+ },
|
|
|
+ [ACTIVITY_TYPE.OTHER]: {
|
|
|
+ label: '其他',
|
|
|
+ type: 'info',
|
|
|
+ color: '#909399'
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 审批状态配置映射
|
|
|
+ * @readonly
|
|
|
+ * @type {Record<number, {label: string, type: string, color: string}>}
|
|
|
+ */
|
|
|
+export const APPROVAL_STATUS_CONFIG = {
|
|
|
+ [APPROVAL_STATUS.PENDING]: {
|
|
|
+ label: '待审批',
|
|
|
+ type: 'warning',
|
|
|
+ color: '#E6A23C'
|
|
|
+ },
|
|
|
+ [APPROVAL_STATUS.APPROVED]: {
|
|
|
+ label: '已通过',
|
|
|
+ type: 'success',
|
|
|
+ color: '#67C23A'
|
|
|
+ },
|
|
|
+ [APPROVAL_STATUS.REJECTED]: {
|
|
|
+ label: '已拒绝',
|
|
|
+ type: 'danger',
|
|
|
+ color: '#F56C6C'
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 文件类型图标映射
|
|
|
+ * @readonly
|
|
|
+ * @type {Record<string, string>}
|
|
|
+ */
|
|
|
+export const FILE_TYPE_ICON_CONFIG = {
|
|
|
+ [FILE_TYPE.PDF]: 'el-icon-document',
|
|
|
+ [FILE_TYPE.DOC]: 'el-icon-document',
|
|
|
+ [FILE_TYPE.DOCX]: 'el-icon-document',
|
|
|
+ [FILE_TYPE.XLS]: 'el-icon-s-grid',
|
|
|
+ [FILE_TYPE.XLSX]: 'el-icon-s-grid',
|
|
|
+ [FILE_TYPE.PPT]: 'el-icon-present',
|
|
|
+ [FILE_TYPE.PPTX]: 'el-icon-present',
|
|
|
+ [FILE_TYPE.JPG]: 'el-icon-picture',
|
|
|
+ [FILE_TYPE.JPEG]: 'el-icon-picture',
|
|
|
+ [FILE_TYPE.PNG]: 'el-icon-picture',
|
|
|
+ [FILE_TYPE.GIF]: 'el-icon-picture',
|
|
|
+ [FILE_TYPE.BMP]: 'el-icon-picture',
|
|
|
+ [FILE_TYPE.TXT]: 'el-icon-document',
|
|
|
+ [FILE_TYPE.ZIP]: 'el-icon-folder-opened',
|
|
|
+ [FILE_TYPE.RAR]: 'el-icon-folder-opened',
|
|
|
+ [FILE_TYPE.SEVEN_Z]: 'el-icon-folder-opened'
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 活动类型选项数据
|
|
|
+ * @readonly
|
|
|
+ * @type {Array<{label: string, value: string}>}
|
|
|
+ */
|
|
|
+export const ACTIVITY_TYPE_OPTIONS = [
|
|
|
+ { label: '促销', value: ACTIVITY_TYPE.PROMOTION },
|
|
|
+ { label: '新品推广', value: ACTIVITY_TYPE.NEW_PRODUCT },
|
|
|
+ { label: '其他', value: ACTIVITY_TYPE.OTHER }
|
|
|
+]
|
|
|
+
|
|
|
+/**
|
|
|
+ * 审批状态选项数据
|
|
|
+ * @readonly
|
|
|
+ * @type {Array<{label: string, value: number}>}
|
|
|
+ */
|
|
|
+export const APPROVAL_STATUS_OPTIONS = [
|
|
|
+ { label: '待审批', value: APPROVAL_STATUS.PENDING },
|
|
|
+ { label: '已通过', value: APPROVAL_STATUS.APPROVED },
|
|
|
+ { label: '已拒绝', value: APPROVAL_STATUS.REJECTED }
|
|
|
+]
|
|
|
+
|
|
|
+/**
|
|
|
+ * 图片文件类型集合
|
|
|
+ * @readonly
|
|
|
+ * @type {Set<string>}
|
|
|
+ */
|
|
|
+export const IMAGE_FILE_TYPES = new Set([
|
|
|
+ FILE_TYPE.JPG,
|
|
|
+ FILE_TYPE.JPEG,
|
|
|
+ FILE_TYPE.PNG,
|
|
|
+ FILE_TYPE.GIF,
|
|
|
+ FILE_TYPE.BMP
|
|
|
+])
|
|
|
+
|
|
|
+// ==================== 工具函数 ====================
|
|
|
+
|
|
|
+/**
|
|
|
+ * 获取活动类型标签
|
|
|
+ * @param {string} activityType - 活动类型
|
|
|
+ * @returns {string} 活动类型标签
|
|
|
+ */
|
|
|
+export function getActivityTypeLabel(activityType) {
|
|
|
+ return (ACTIVITY_TYPE_CONFIG[activityType] && ACTIVITY_TYPE_CONFIG[activityType].label) || '未知类型'
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 获取活动类型样式类型
|
|
|
+ * @param {string} activityType - 活动类型
|
|
|
+ * @returns {string} 样式类型
|
|
|
+ */
|
|
|
+export function getActivityTypeType(activityType) {
|
|
|
+ return (ACTIVITY_TYPE_CONFIG[activityType] && ACTIVITY_TYPE_CONFIG[activityType].type) || 'info'
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 获取活动类型颜色
|
|
|
+ * @param {string} activityType - 活动类型
|
|
|
+ * @returns {string} 颜色值
|
|
|
+ */
|
|
|
+export function getActivityTypeColor(activityType) {
|
|
|
+ return (ACTIVITY_TYPE_CONFIG[activityType] && ACTIVITY_TYPE_CONFIG[activityType].color) || '#909399'
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 获取审批状态标签
|
|
|
+ * @param {number} approvalStatus - 审批状态
|
|
|
+ * @returns {string} 审批状态标签
|
|
|
+ */
|
|
|
+export function getApprovalStatusLabel(approvalStatus) {
|
|
|
+ return (APPROVAL_STATUS_CONFIG[approvalStatus] && APPROVAL_STATUS_CONFIG[approvalStatus].label) || '未知状态'
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 获取审批状态样式类型
|
|
|
+ * @param {number} approvalStatus - 审批状态
|
|
|
+ * @returns {string} 样式类型
|
|
|
+ */
|
|
|
+export function getApprovalStatusType(approvalStatus) {
|
|
|
+ return (APPROVAL_STATUS_CONFIG[approvalStatus] && APPROVAL_STATUS_CONFIG[approvalStatus].type) || 'info'
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 获取审批状态颜色
|
|
|
+ * @param {number} approvalStatus - 审批状态
|
|
|
+ * @returns {string} 颜色值
|
|
|
+ */
|
|
|
+export function getApprovalStatusColor(approvalStatus) {
|
|
|
+ return (APPROVAL_STATUS_CONFIG[approvalStatus] && APPROVAL_STATUS_CONFIG[approvalStatus].color) || '#909399'
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 获取文件类型图标
|
|
|
+ * @param {string} fileType - 文件类型
|
|
|
+ * @returns {string} 图标类名
|
|
|
+ */
|
|
|
+export function getFileTypeIcon(fileType) {
|
|
|
+ if (!fileType) return 'el-icon-document'
|
|
|
+
|
|
|
+ const type = fileType.toLowerCase()
|
|
|
+ return FILE_TYPE_ICON_CONFIG[type] || 'el-icon-document'
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 判断是否为图片文件
|
|
|
+ * @param {string} fileType - 文件类型
|
|
|
+ * @returns {boolean} 是否为图片文件
|
|
|
+ */
|
|
|
+export function isImageFile(fileType) {
|
|
|
+ if (!fileType) return false
|
|
|
+
|
|
|
+ const type = fileType.toLowerCase()
|
|
|
+ return IMAGE_FILE_TYPES.has(type)
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 验证活动类型是否有效
|
|
|
+ * @param {string} activityType - 活动类型
|
|
|
+ * @returns {boolean} 是否有效
|
|
|
+ */
|
|
|
+export function isValidActivityType(activityType) {
|
|
|
+ return Object.values(ACTIVITY_TYPE).includes(activityType)
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 验证审批状态是否有效
|
|
|
+ * @param {number} approvalStatus - 审批状态
|
|
|
+ * @returns {boolean} 是否有效
|
|
|
+ */
|
|
|
+export function isValidApprovalStatus(approvalStatus) {
|
|
|
+ return Object.values(APPROVAL_STATUS).includes(approvalStatus)
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 验证文件类型是否有效
|
|
|
+ * @param {string} fileType - 文件类型
|
|
|
+ * @returns {boolean} 是否有效
|
|
|
+ */
|
|
|
+export function isValidFileType(fileType) {
|
|
|
+ if (!fileType) return false
|
|
|
+
|
|
|
+ const type = fileType.toLowerCase()
|
|
|
+ return Object.values(FILE_TYPE).includes(type)
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 获取所有活动类型值
|
|
|
+ * @returns {string[]} 活动类型值数组
|
|
|
+ */
|
|
|
+export function getAllActivityTypeValues() {
|
|
|
+ return Object.values(ACTIVITY_TYPE)
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 获取所有审批状态值
|
|
|
+ * @returns {number[]} 审批状态值数组
|
|
|
+ */
|
|
|
+export function getAllApprovalStatusValues() {
|
|
|
+ return Object.values(APPROVAL_STATUS)
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 获取所有文件类型值
|
|
|
+ * @returns {string[]} 文件类型值数组
|
|
|
+ */
|
|
|
+export function getAllFileTypeValues() {
|
|
|
+ return Object.values(FILE_TYPE)
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 判断活动是否可编辑
|
|
|
+ * @param {number} approvalStatus - 审批状态
|
|
|
+ * @returns {boolean} 是否可编辑
|
|
|
+ */
|
|
|
+export function isActivityEditable(approvalStatus) {
|
|
|
+ return approvalStatus === APPROVAL_STATUS.PENDING
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 判断活动是否可审批
|
|
|
+ * @param {number} approvalStatus - 审批状态
|
|
|
+ * @returns {boolean} 是否可审批
|
|
|
+ */
|
|
|
+export function isActivityApprovable(approvalStatus) {
|
|
|
+ return approvalStatus === APPROVAL_STATUS.PENDING
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 判断活动是否已完成审批
|
|
|
+ * @param {number} approvalStatus - 审批状态
|
|
|
+ * @returns {boolean} 是否已完成审批
|
|
|
+ */
|
|
|
+export function isActivityApprovalCompleted(approvalStatus) {
|
|
|
+ return approvalStatus === APPROVAL_STATUS.APPROVED || approvalStatus === APPROVAL_STATUS.REJECTED
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 判断活动是否为促销类型
|
|
|
+ * @param {string} activityType - 活动类型
|
|
|
+ * @returns {boolean} 是否为促销类型
|
|
|
+ */
|
|
|
+export function isPromotionActivity(activityType) {
|
|
|
+ return activityType === ACTIVITY_TYPE.PROMOTION
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 判断活动是否为新品推广类型
|
|
|
+ * @param {string} activityType - 活动类型
|
|
|
+ * @returns {boolean} 是否为新品推广类型
|
|
|
+ */
|
|
|
+export function isNewProductActivity(activityType) {
|
|
|
+ return activityType === ACTIVITY_TYPE.NEW_PRODUCT
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 判断审批状态是否为通过
|
|
|
+ * @param {number} approvalStatus - 审批状态
|
|
|
+ * @returns {boolean} 是否为通过状态
|
|
|
+ */
|
|
|
+export function isApprovalApproved(approvalStatus) {
|
|
|
+ return approvalStatus === APPROVAL_STATUS.APPROVED
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 判断审批状态是否为拒绝
|
|
|
+ * @param {number} approvalStatus - 审批状态
|
|
|
+ * @returns {boolean} 是否为拒绝状态
|
|
|
+ */
|
|
|
+export function isApprovalRejected(approvalStatus) {
|
|
|
+ return approvalStatus === APPROVAL_STATUS.REJECTED
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 判断审批状态是否为待审批
|
|
|
+ * @param {number} approvalStatus - 审批状态
|
|
|
+ * @returns {boolean} 是否为待审批状态
|
|
|
+ */
|
|
|
+export function isApprovalPending(approvalStatus) {
|
|
|
+ return approvalStatus === APPROVAL_STATUS.PENDING
|
|
|
+}
|