Initial commit: One Pipe System

完整的管理系统,包含账户管理、卡片管理、套餐管理、财务管理等功能模块。

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
sexygoat
2026-01-22 16:35:33 +08:00
commit 222e5bb11a
495 changed files with 145440 additions and 0 deletions

View File

@@ -0,0 +1,30 @@
import lightTheme from '@imgs/settings/theme_styles/light.png'
import darkTheme from '@imgs/settings/theme_styles/dark.png'
import systemTheme from '@imgs/settings/theme_styles/system.png'
import verticalLayout from '@imgs/settings/menu_layouts/vertical.png'
import horizontalLayout from '@imgs/settings/menu_layouts/horizontal.png'
import mixedLayout from '@imgs/settings/menu_layouts/mixed.png'
import dualColumnLayout from '@imgs/settings/menu_layouts/dual_column.png'
import designStyle from '@imgs/settings/menu_styles/design.png'
import darkStyle from '@imgs/settings/menu_styles/dark.png'
import lightStyle from '@imgs/settings/menu_styles/light.png'
// 配置设置中心图片
export const configImages = {
themeStyles: {
light: lightTheme,
dark: darkTheme,
system: systemTheme
},
menuLayouts: {
vertical: verticalLayout,
horizontal: horizontalLayout,
mixed: mixedLayout,
dualColumn: dualColumnLayout
},
menuStyles: {
design: designStyle,
dark: darkStyle,
light: lightStyle
}
}

View File

@@ -0,0 +1,94 @@
/**
* 网卡状态配置
*/
import { CardStatus } from '@/types/api'
import type { ComponentSize } from 'element-plus'
// 网卡状态选项
export const CARD_STATUS_OPTIONS = [
{
label: '激活',
value: CardStatus.ACTIVATED,
type: 'success' as const,
color: '#67C23A'
},
{
label: '停用',
value: CardStatus.DEACTIVATED,
type: 'danger' as const,
color: '#F56C6C'
},
{
label: '测试',
value: CardStatus.TESTING,
type: 'warning' as const,
color: '#E6A23C'
},
{
label: '库存',
value: CardStatus.INVENTORY,
type: 'info' as const,
color: '#909399'
},
{
label: '停机',
value: CardStatus.SUSPENDED,
type: 'danger' as const,
color: '#F56C6C'
},
{
label: '已过期',
value: CardStatus.EXPIRED,
type: 'info' as const,
color: '#909399'
}
]
// 网卡状态映射
export const CARD_STATUS_MAP = CARD_STATUS_OPTIONS.reduce(
(map, item) => {
map[item.value] = item
return map
},
{} as Record<
CardStatus,
{
label: string
value: CardStatus
type: 'success' | 'warning' | 'danger' | 'info'
color: string
}
>
)
// 获取网卡状态标签
export function getCardStatusLabel(status: CardStatus): string {
return CARD_STATUS_MAP[status]?.label || '未知'
}
// 获取网卡状态类型(用于 ElTag
export function getCardStatusType(status: CardStatus) {
return CARD_STATUS_MAP[status]?.type || 'info'
}
// 获取网卡状态颜色
export function getCardStatusColor(status: CardStatus): string {
return CARD_STATUS_MAP[status]?.color || '#909399'
}
// 网络类型选项
export const NETWORK_TYPE_OPTIONS = [
{ label: '2G', value: '2G' },
{ label: '3G', value: '3G' },
{ label: '4G', value: '4G' },
{ label: '5G', value: '5G' },
{ label: 'NB-IoT', value: 'NB-IoT' }
]
// 卡类型选项
export const CARD_TYPE_OPTIONS = [
{ label: '月卡', value: 'monthly' },
{ label: '年卡', value: 'annual' },
{ label: '流量卡', value: 'flow' }
]

View File

@@ -0,0 +1,60 @@
/**
* 佣金相关配置
*/
import { CommissionStatus, WithdrawalStatus } from '@/types/api'
// 佣金状态选项
export const COMMISSION_STATUS_OPTIONS = [
{ label: '待结算', value: CommissionStatus.PENDING, type: 'warning' as const },
{ label: '已结算', value: CommissionStatus.SETTLED, type: 'success' as const },
{ label: '已提现', value: CommissionStatus.WITHDRAWN, type: 'info' as const },
{ label: '冻结', value: CommissionStatus.FROZEN, type: 'danger' as const }
]
// 提现状态选项
export const WITHDRAWAL_STATUS_OPTIONS = [
{ label: '待审核', value: WithdrawalStatus.PENDING, type: 'warning' as const },
{ label: '已通过', value: WithdrawalStatus.APPROVED, type: 'success' as const },
{ label: '已拒绝', value: WithdrawalStatus.REJECTED, type: 'danger' as const },
{ label: '处理中', value: WithdrawalStatus.PROCESSING, type: 'primary' as const },
{ label: '已完成', value: WithdrawalStatus.COMPLETED, type: 'success' as const },
{ label: '失败', value: WithdrawalStatus.FAILED, type: 'danger' as const }
]
// 支付方式选项
export const PAYMENT_METHOD_OPTIONS = [
{ label: '银行转账', value: 'bank', icon: 'bank' },
{ label: '支付宝', value: 'alipay', icon: 'alipay' },
{ label: '微信', value: 'wechat', icon: 'wechat' }
]
// 获取佣金状态标签
export function getCommissionStatusLabel(status: CommissionStatus): string {
const option = COMMISSION_STATUS_OPTIONS.find((item) => item.value === status)
return option?.label || status
}
// 获取佣金状态类型
export function getCommissionStatusType(status: CommissionStatus) {
const option = COMMISSION_STATUS_OPTIONS.find((item) => item.value === status)
return option?.type || 'info'
}
// 获取提现状态标签
export function getWithdrawalStatusLabel(status: WithdrawalStatus): string {
const option = WITHDRAWAL_STATUS_OPTIONS.find((item) => item.value === status)
return option?.label || status
}
// 获取提现状态类型
export function getWithdrawalStatusType(status: WithdrawalStatus) {
const option = WITHDRAWAL_STATUS_OPTIONS.find((item) => item.value === status)
return option?.type || 'info'
}
// 获取支付方式标签
export function getPaymentMethodLabel(method: string): string {
const option = PAYMENT_METHOD_OPTIONS.find((item) => item.value === method)
return option?.label || method
}

View File

@@ -0,0 +1,18 @@
/**
* 公共配置和常量统一导出
*/
// 运营商相关
export * from './operators'
// 网卡状态相关
export * from './cardStatus'
// 用户角色相关
export * from './userRoles'
// 佣金相关
export * from './commission'
// 通用状态相关
export * from './status'

View File

@@ -0,0 +1,36 @@
/**
* 运营商配置
*/
import { Operator } from '@/types/api'
// 运营商选项
export const OPERATOR_OPTIONS = [
{ label: '中国移动', value: Operator.CHINA_MOBILE, color: '#4CAF50' },
{ label: '中国联通', value: Operator.CHINA_UNICOM, color: '#2196F3' },
{ label: '中国电信', value: Operator.CHINA_TELECOM, color: '#FF9800' },
{ label: 'GS移动', value: Operator.GS_MOBILE, color: '#4CAF50' },
{ label: 'GS联通', value: Operator.GS_UNICOM, color: '#2196F3' },
{ label: 'GS电信', value: Operator.GS_TELECOM, color: '#FF9800' },
{ label: 'DC物联', value: Operator.DC_IOT, color: '#9C27B0' },
{ label: 'GDWL', value: Operator.GDWL, color: '#F44336' }
]
// 运营商映射
export const OPERATOR_MAP = OPERATOR_OPTIONS.reduce(
(map, item) => {
map[item.value] = item
return map
},
{} as Record<Operator, { label: string; value: Operator; color: string }>
)
// 获取运营商标签
export function getOperatorLabel(operator: Operator): string {
return OPERATOR_MAP[operator]?.label || operator
}
// 获取运营商颜色
export function getOperatorColor(operator: Operator): string {
return OPERATOR_MAP[operator]?.color || '#666'
}

View File

@@ -0,0 +1,133 @@
/**
* 通用状态配置
*/
// 通用状态枚举
export enum CommonStatus {
DISABLED = 0, // 禁用
ENABLED = 1 // 启用/正常
}
// 通用状态选项(完整版)
export const STATUS_OPTIONS = [
{
label: '启用',
value: CommonStatus.ENABLED,
type: 'success' as const,
color: '#67C23A',
text: '正常'
},
{
label: '禁用',
value: CommonStatus.DISABLED,
type: 'danger' as const,
color: '#F56C6C',
text: '禁用'
}
]
// 通用状态选项(精简版,用于搜索表单和下拉选择)
export const STATUS_SELECT_OPTIONS = [
{ label: '启用', value: CommonStatus.ENABLED },
{ label: '禁用', value: CommonStatus.DISABLED }
]
// 状态映射
export const STATUS_MAP = STATUS_OPTIONS.reduce(
(map, item) => {
map[item.value] = item
return map
},
{} as Record<
CommonStatus,
{
label: string
value: CommonStatus
type: 'success' | 'danger'
color: string
text: string
}
>
)
// 获取状态标签
export function getStatusLabel(status: number): string {
return STATUS_MAP[status as CommonStatus]?.label || '未知'
}
// 获取状态文本(用于 ElSwitch
export function getStatusText(status: number): string {
return STATUS_MAP[status as CommonStatus]?.text || '未知'
}
// 获取状态类型(用于 ElTag
export function getStatusType(status: number) {
return STATUS_MAP[status as CommonStatus]?.type || 'info'
}
// 获取状态颜色
export function getStatusColor(status: number): string {
return STATUS_MAP[status as CommonStatus]?.color || '#909399'
}
// ========== 权限类型相关 ==========
// 权限类型枚举
export enum PermissionType {
MENU = 1, // 菜单权限
BUTTON = 2 // 按钮权限
}
// 权限类型选项(完整版,用于表格显示等)
export const PERMISSION_TYPE_OPTIONS = [
{
label: '菜单权限',
value: PermissionType.MENU,
type: '' as const,
text: '菜单'
},
{
label: '按钮权限',
value: PermissionType.BUTTON,
type: 'success' as const,
text: '按钮'
}
]
// 权限类型选项(精简版,用于搜索表单和下拉选择)
export const PERMISSION_TYPE_SELECT_OPTIONS = [
{ label: '菜单权限', value: PermissionType.MENU },
{ label: '按钮权限', value: PermissionType.BUTTON }
]
// 权限类型映射
export const PERMISSION_TYPE_MAP = PERMISSION_TYPE_OPTIONS.reduce(
(map, item) => {
map[item.value] = item
return map
},
{} as Record<
PermissionType,
{
label: string
value: PermissionType
type: '' | 'success'
text: string
}
>
)
// 获取权限类型标签
export function getPermissionTypeLabel(type: number): string {
return PERMISSION_TYPE_MAP[type as PermissionType]?.label || '未知'
}
// 获取权限类型文本
export function getPermissionTypeText(type: number): string {
return PERMISSION_TYPE_MAP[type as PermissionType]?.text || '未知'
}
// 获取权限类型标签类型(用于 ElTag
export function getPermissionTypeTag(type: number) {
return PERMISSION_TYPE_MAP[type as PermissionType]?.type || 'info'
}

View File

@@ -0,0 +1,51 @@
/**
* 用户角色配置
*/
import { UserRole } from '@/types/api'
// 用户角色选项
export const USER_ROLE_OPTIONS = [
{ label: '超级管理员', value: UserRole.SUPER_ADMIN, color: '#F56C6C' },
{ label: '管理员', value: UserRole.ADMIN, color: '#E6A23C' },
{ label: '代理商', value: UserRole.AGENT, color: '#409EFF' },
{ label: '企业客户', value: UserRole.ENTERPRISE, color: '#67C23A' }
]
// 用户角色映射
export const USER_ROLE_MAP = USER_ROLE_OPTIONS.reduce(
(map, item) => {
map[item.value] = item
return map
},
{} as Record<UserRole, { label: string; value: UserRole; color: string }>
)
// 获取用户角色标签
export function getUserRoleLabel(role: UserRole): string {
return USER_ROLE_MAP[role]?.label || role
}
// 获取用户角色颜色
export function getUserRoleColor(role: UserRole): string {
return USER_ROLE_MAP[role]?.color || '#909399'
}
// 账号状态选项
export const ACCOUNT_STATUS_OPTIONS = [
{ label: '启用', value: 1, type: 'success' as const },
{ label: '禁用', value: 0, type: 'danger' as const },
{ label: '锁定', value: 2, type: 'warning' as const }
]
// 获取账号状态标签
export function getAccountStatusLabel(status: number): string {
const option = ACCOUNT_STATUS_OPTIONS.find((item) => item.value === status)
return option?.label || '未知'
}
// 获取账号状态类型
export function getAccountStatusType(status: number) {
const option = ACCOUNT_STATUS_OPTIONS.find((item) => item.value === status)
return option?.type || 'info'
}

23
src/config/festival.ts Normal file
View File

@@ -0,0 +1,23 @@
/**
* 节日配置
* 包含:礼花效果、滚动文字
*/
// 图片需要在 components/Ceremony/Fireworks 文件预先定义
import { FestivalConfig } from '@/types/config'
import sd from '@imgs/ceremony/sd.png'
import yd from '@imgs/ceremony/yd.png'
export const festivalConfigList: FestivalConfig[] = [
{
date: '2025-01-01',
name: '元旦',
image: yd,
scrollText: '新年快乐Art Design Pro 祝您在2025年万事如意事业腾飞阖家幸福好运连连'
},
{
date: '2024-12-25',
name: '圣诞节',
image: sd,
scrollText: 'Merry ChristmasArt Design Pro 祝您圣诞快乐,愿节日的欢乐与祝福如雪花般纷至沓来!'
}
]

136
src/config/index.ts Normal file
View File

@@ -0,0 +1,136 @@
/**
* 系统配置
* 包含:系统信息、系统主题、菜单主题、菜单布局、系统主色、系统主色列表、系统主色、系统其他项默认配置
*/
import { MenuThemeEnum, MenuTypeEnum, SystemThemeEnum } from '@/enums/appEnum'
import { SystemConfig } from '@/types/config'
import { configImages } from './assets/images'
const appConfig: SystemConfig = {
// 系统信息
systemInfo: {
name: '君鸿卡管系统' // 系统名称
},
// Element Plus 主题
elementPlusTheme: {
primary: '#5D87FF'
},
// 系统主题
systemThemeStyles: {
[SystemThemeEnum.LIGHT]: { className: '' },
[SystemThemeEnum.DARK]: { className: SystemThemeEnum.DARK }
},
// 系统主题列表
settingThemeList: [
{
name: 'Light',
theme: SystemThemeEnum.LIGHT,
color: ['#fff', '#fff'],
leftLineColor: '#EDEEF0',
rightLineColor: '#EDEEF0',
img: configImages.themeStyles.light
},
{
name: 'Dark',
theme: SystemThemeEnum.DARK,
color: ['#22252A'],
leftLineColor: '#3F4257',
rightLineColor: '#3F4257',
img: configImages.themeStyles.dark
},
{
name: 'System',
theme: SystemThemeEnum.AUTO,
color: ['#fff', '#22252A'],
leftLineColor: '#EDEEF0',
rightLineColor: '#3F4257',
img: configImages.themeStyles.system
}
],
// 菜单布局列表
menuLayoutList: [
{ name: 'Left', value: MenuTypeEnum.LEFT, img: configImages.menuLayouts.vertical },
{ name: 'Top', value: MenuTypeEnum.TOP, img: configImages.menuLayouts.horizontal },
{ name: 'Mixed', value: MenuTypeEnum.TOP_LEFT, img: configImages.menuLayouts.mixed },
{ name: 'Dual Column', value: MenuTypeEnum.DUAL_MENU, img: configImages.menuLayouts.dualColumn }
],
// 菜单主题列表
themeList: [
{
theme: MenuThemeEnum.DESIGN,
background: '#FFFFFF',
systemNameColor: 'var(--art-text-gray-800)',
iconColor: '#6B6B6B',
textColor: '#29343D',
textActiveColor: '#3F8CFF',
iconActiveColor: '#333333',
tabBarBackground: '#FAFBFC',
systemBackground: '#FAFBFC',
leftLineColor: '#EDEEF0',
rightLineColor: '#EDEEF0',
img: configImages.menuStyles.design
},
{
theme: MenuThemeEnum.DARK,
background: '#191A23',
systemNameColor: '#BABBBD',
iconColor: '#BABBBD',
textColor: '#BABBBD',
textActiveColor: '#FFFFFF',
iconActiveColor: '#FFFFFF',
tabBarBackground: '#FFFFFF',
systemBackground: '#F8F8F8',
leftLineColor: '#3F4257',
rightLineColor: '#EDEEF0',
img: configImages.menuStyles.dark
},
{
theme: MenuThemeEnum.LIGHT,
background: '#ffffff',
systemNameColor: '#68758E',
iconColor: '#6B6B6B',
textColor: '#29343D',
textActiveColor: '#3F8CFF',
iconActiveColor: '#333333',
tabBarBackground: '#FFFFFF',
systemBackground: '#F8F8F8',
leftLineColor: '#EDEEF0',
rightLineColor: '#EDEEF0',
img: configImages.menuStyles.light
}
],
darkMenuStyles: [
{
theme: MenuThemeEnum.DARK,
background: '#161618',
systemNameColor: '#DDDDDD',
iconColor: '#BABBBD',
textColor: 'rgba(#FFFFFF, 0.7)',
textActiveColor: '',
iconActiveColor: '#FFFFFF',
tabBarBackground: '#FFFFFF',
systemBackground: '#F8F8F8',
leftLineColor: '#3F4257',
rightLineColor: '#EDEEF0'
}
],
// 系统主色
systemMainColor: [
'#5D87FF',
'#B48DF3',
'#1D84FF',
'#60C041',
'#38C0FC',
'#F9901F',
'#FF80C8'
] as const,
// 系统其他项默认配置
systemSetting: {
defaultMenuWidth: 240, // 菜单宽度
defaultCustomRadius: '0.75', // 自定义圆角
defaultTabStyle: 'tab-default' // 标签样式
}
}
export default Object.freeze(appConfig)