feat: 完成管理员密码登录修复和项目清理

- 修复BCryptPasswordEncoder密码验证问题
- 实现密码设置提示弹窗功能(仅对无密码用户显示一次)
- 优化修改密码逻辑和验证流程
- 更新Welcome页面背景样式
- 清理临时SQL文件和测试代码
- 移动数据库备份文件到database/backups目录
- 删除不必要的MD文档和临时文件
This commit is contained in:
AIGC Developer
2025-11-21 16:10:00 +08:00
parent 2961d2b0d0
commit dbd06435cb
384 changed files with 8064 additions and 5080 deletions

View File

@@ -27,7 +27,510 @@ export default {
noPermissionMsg: '权限不足,只有管理员才能访问后台管理',
logoutConfirm: '确定要退出登录吗?',
logoutSuccess: '退出登录成功',
tip: '提示'
tip: '提示',
submit: '提交',
back: '返回',
next: '下一步',
previous: '上一步',
close: '关闭',
success: '成功',
error: '错误',
warning: '警告',
info: '信息'
},
login: {
title: '登录',
emailCodeLogin: '邮箱验证码登录',
emailPasswordLogin: '邮箱密码登录',
emailPlaceholder: '请输入邮箱地址',
codePlaceholder: '请输入验证码',
passwordPlaceholder: '请输入密码',
getCode: '获取验证码',
loginButton: '登录',
loginOrRegister: '登陆/注册',
loggingIn: '登录中...',
agreement: '登录即表示您同意遵守用户协议和隐私政策',
testAccounts: '测试邮箱',
admin: '管理员',
normalUser: '普通用户',
quickEmail: '快捷输入'
},
home: {
title: '首页',
exploreCreativity: '探索无限创意',
subtitle: '用 AI 将你的想象变为现实',
getStarted: '开始创作',
learnMore: '了解更多',
features: '核心功能',
textToVideo: '文生视频',
textToVideoDesc: '输入文字描述AI 自动生成高质量视频',
imageToVideo: '图生视频',
imageToVideoDesc: '上传图片AI 智能生成动态视频',
storyboardVideo: '分镜视频',
storyboardVideoDesc: '专业分镜制作,打造电影级效果',
myWorks: '我的作品',
myWorksDesc: '管理和查看你的所有创作',
subscription: '会员订阅',
subscriptionDesc: '解锁更多高级功能和资源'
},
profile: {
title: '个人主页',
userInfo: '用户信息',
username: '用户名',
email: '邮箱',
memberLevel: '会员等级',
expiryDate: '到期时间',
availablePoints: '可用积分',
frozenPoints: '冻结积分',
accountStats: '账户统计',
totalWorks: '作品总数',
videoGenerated: '生成视频数',
storageUsed: '已用存储',
editProfile: '编辑资料',
changePassword: '修改密码',
viewWorks: '查看作品',
upgradeMembership: '升级会员',
subscription: '会员订阅',
myWorks: '我的作品',
tools: '工具',
noUsername: '未设置用户名',
published: '已发布',
userId: 'ID',
noWorksYet: '暂无作品,开始创作吧!',
createSimilar: '做同款',
workDetail: '作品详情',
category: '分类',
inputDetails: '输入详情',
createTime: '创建时间',
workId: '作品 ID',
date: '日期',
duration: '时长',
quality: '清晰度',
aspectRatio: '宽高比',
unknown: '未知',
anonymousUser: '匿名用户',
browserNotSupport: '您的浏览器不支持视频播放',
noPrompt: '暂无提示词',
dashboard: '数据仪表盘',
orderManagement: '订单管理',
memberManagement: '会员管理',
systemSettings: '系统设置',
insufficientPermission: '权限不足,只有管理员才能访问',
logoutConfirm: '确定要退出登录吗?',
logoutSuccess: '已退出登录',
logoutFailed: '退出登录失败',
loadWorksFailed: '加载作品列表失败',
loadUserInfoFailed: '获取用户信息失败',
loadDetailFailed: '加载作品详情失败',
profileEditDevMsg: '个人简介编辑功能待实现'
},
video: {
create: '创建',
generating: '生成中',
completed: '已完成',
failed: '失败',
prompt: '提示词',
promptPlaceholder: '请输入视频描述...',
optimizePrompt: '优化提示词',
uploadImage: '上传图片',
selectImage: '选择图片',
generate: '生成视频',
duration: '时长',
resolution: '分辨率',
style: '风格',
aspectRatio: '宽高比',
advancedSettings: '高级设置',
cost: '消耗积分',
estimatedTime: '预计用时',
result: '生成结果',
download: '下载',
share: '分享',
regenerate: '重新生成',
saveToWorks: '保存到作品',
videoUrl: '视频链接',
status: '状态',
createdAt: '创建时间',
// 文生视频专用翻译
textToVideo: {
aspectRatio: '宽高比',
dateFormat: '{year}年{month}月{day}日 {hours}:{minutes}',
pointsUpdated: '用户积分已更新',
pointsUpdateFailed: '更新用户积分失败',
textInputPlaceholder: '请输入视频描述,例如:在草原上奔跑的骏马...',
userAvatar: '用户头像',
optimizing: '优化中...',
oneClickOptimize: '一键优化',
hdMode: '高清模式',
hdModeCost: '+20积分',
startGenerate: '开始生成',
pleaseLogin: '请先登录',
loginRequired: '登录后才能开始创作',
loginNow: '立即登录',
inProgress: '进行中',
noVideoUrl: '暂无视频',
withWatermark: '带水印',
withoutWatermark: '不带水印',
createSimilar: '做同款',
downloadVideo: '下载视频',
deleteWork: '删除作品',
generationFailed: '生成失败',
checkInputOrRetry: '请检查输入或重新尝试',
regenerate: '重新生成',
startCreating: '开始创作你的视频吧!',
noDescription: '无描述',
queuing: '排队中...',
subscribeToSpeedUp: '订阅会员可加速',
noResult: '暂无结果',
pleaseLoginFirst: '请先登录后再创建任务',
taskInProgress: '当前已有任务正在生成中,请稍候',
pleaseEnterText: '请输入视频描述文本',
creatingTask: '正在创建任务...',
taskCreated: '任务创建成功,开始生成',
createTaskFailed: '创建任务失败',
videoCompleted: '视频生成完成!',
videoFailed: '视频生成失败:',
statusPending: '排队中',
statusProcessing: '生成中',
statusCancelled: '已取消',
statusUnknown: '未知状态',
pleaseEnterPrompt: '请先输入提示词',
promptTooLong: '提示词过长最多2000字符',
optimizingPrompt: '正在优化提示词...',
optimizeSuccess: '提示词优化成功!',
optimizeNoChange: '提示词已是最优,无需优化',
optimizeFailed: '优化失败,请稍后重试',
requestParamError: '请求参数错误',
requestTimeout: '请求超时,请检查网络',
serverError: '服务器错误,请稍后重试',
networkError: '网络错误,请检查连接',
networkConnectionError: '网络连接失败',
downloadStarted: '开始下载',
videoUrlNotAvailable: '视频链接不可用',
noWorkToDelete: '没有可删除的作品',
deleteConfirm: '确定要删除这个作品吗?删除后将无法恢复。',
confirmDelete: '确认删除',
workDeleted: '作品已删除',
deleteCancelled: '已取消删除',
historyLoadSuccess: '历史记录加载成功: {count}条',
historyLoadFailed: '加载历史记录失败',
historyParamsFilled: '已填充历史参数,可以开始生成',
cancelFunctionTBD: '取消功能开发中',
unfinishedTaskDetected: '检测到未完成任务,正在恢复...'
},
// 图生视频专用翻译
imageToVideo: {
userAvatar: '用户头像',
firstFrame: '首帧',
promptPlaceholder: '结合图片,描述想要生成的内容',
optimizing: '优化中...',
optimizePrompt: '一键优化',
hdMode: '高清模式',
hdModeCost: '开启消耗20积分',
startGenerate: '开始生成',
pleaseLogin: '请先登录',
loginRequired: '需要登录后才能提交任务',
loginNow: '立即登录',
inProgress: '进行中',
statusPending: '等待中',
statusProcessing: '处理中',
statusCompleted: '已完成',
statusFailed: '失败',
statusCancelled: '已取消',
noVideoUrl: '视频生成完成,但未获取到视频链接',
withWatermark: '带水印',
withoutWatermark: '不带水印 会员专享',
createSimilar: '做同款',
downloadVideo: '下载视频',
deleteWork: '删除作品',
retry: '重新生成',
generateFailed: '生成失败',
generateFailedDesc: '请检查输入内容或重试',
startCreating: '开始创作您的第一个作品吧!',
tip1: '上传首帧图片',
tip2: '输入描述文字',
tip3: '选择视频参数',
tip4: '点击开始生成',
noDescription: '无描述',
queuing: '排队中',
subscribeToSpeedUp: '订阅套餐以提升生成速度',
cancel: '取消',
firstFrameImage: '首帧图片',
noResult: '暂无结果',
year: '年',
month: '月',
day: '日',
fileSizeLimit: '图片文件大小不能超过100MB',
invalidImageFile: '请选择有效的图片文件',
pleaseLoginFirst: '请先登录后再提交任务',
taskInProgress: '已有任务在进行中,请等待完成或取消当前任务',
uploadFirstFrameRequired: '请上传首帧图片',
enterDescriptionRequired: '请输入描述文字',
creatingTask: '正在创建任务...',
taskCreatedSuccess: '任务创建成功,开始处理...',
createTaskFailed: '创建任务失败',
createTaskFailedRetry: '创建任务失败,请重试',
videoGenerateCompleted: '视频生成完成!',
videoGenerateFailed: '视频生成失败:',
enterPromptFirst: '请输入提示词',
promptTooLong: '提示词过长请控制在2000字符以内',
optimizingPrompt: '正在优化提示词,请稍候...',
promptOptimizedSuccess: '提示词优化成功!',
promptAlreadyOptimized: '提示词已优化,但可能无明显变化',
optimizeFailed: '优化失败',
optimizePromptFailed: '优化提示词失败',
requestParameterError: '请求参数错误',
requestTimeout: '请求超时,请稍后重试',
serverError: '服务器错误,请稍后重试',
networkError: '网络错误,请检查网络连接',
networkConnectionError: '网络连接错误,请检查您的网络',
startDownload: '开始下载视频',
videoUrlNotAvailable: '视频链接不可用',
noWorkToDelete: '没有可删除的作品',
confirmDeleteWork: '确定要删除这个作品吗?',
confirmDelete: '确认删除',
workDeleted: '作品已删除',
deleteCancelled: '已取消删除',
historyParamsFilled: '已填充历史记录参数,可以开始生成',
cancelFeatureTodo: '取消功能待实现',
resumingTask: '检测到未完成的任务,继续处理中...',
resumingStoryboardTask: '检测到分镜图生成任务,继续处理中...'
},
// 分镜视频专用翻译
storyboard: {
userAvatar: '用户头像',
generateStoryboard: '生成分镜图',
generateVideo: '生成视频',
uploadStoryboard: '上传分镜图 (可直接生成视频)',
uploadHint: '支持上传 1-6 张分镜图,可直接生成视频,无需文字描述',
addMore: '继续添加',
uploadedCount: '已上传 {count}/6',
uploadLimit: '已达上限',
uploadedImage: '上传的图片 {index}',
maxImages: '最多只能上传6张图片',
maxImagesWarning: '最多只能上传6张图片您已上传{current}张,还可以上传{remaining}张',
fileSizeLimit: '图片文件大小不能超过100MB',
invalidFileType: '请选择有效的图片文件',
uploadSuccess: '成功上传 {count} 张图片',
imageRemoved: '已删除图片',
promptPlaceholder: '例如:一个咖啡的广告\n\n提示:简单描述即可AI会自动优化成专业的分镜图\n支持中文或英文输入系统会自动翻译并优化为专业的分镜图描述',
tip1: '💡 AI会根据您的描述自动生成专业分镜图',
tip2: '🎬 支持多种画面构图和镜头类型描述',
optimizing: '优化中...',
enterPrompt: '请输入提示词',
promptTooLong: '提示词过长请控制在2000字符以内',
optimizingPrompt: '正在优化提示词,请稍候...',
optimizeSuccess: '提示词优化成功!',
alreadyOptimized: '提示词已优化,但可能无明显变化',
optimizeFailed: '优化提示词失败',
paramError: '请求参数错误',
timeout: '请求超时,请稍后重试',
serverError: '服务器错误,请稍后重试',
networkError: '网络错误,请检查网络连接',
storyboardImage: '分镜图',
noStoryboard: '暂无分镜图',
hdMode: '高清模式 (1080P)',
hdCost: '开启消耗20积分',
pleaseLogin: '请先登录',
loginRequired: '需要登录后才能提交任务',
loginNow: '立即登录',
loginBeforeSubmit: '请先登录后再提交任务',
inProgress: '进行中',
generatingVideo: '正在生成视频,请稍候...',
progress: '进度: {progress}%',
generatingStoryboardText: '正在生成分镜图,请稍候...',
generatingVideoText: '正在生成视频,请稍候...',
startCreating: '开始创作您的第一个作品吧!',
noDescription: '无描述',
queuing: '排队中',
subscribeToSpeed: '订阅套餐以提升生成速度',
noResult: '暂无结果',
uploadOrGenerateFirst: '请先上传分镜图或生成分镜图',
uploadOrInputPrompt: '请上传分镜图或输入提示词',
startGenerateVideo: '开始生成视频',
generateVideoWithUpload: '使用上传图片生成视频',
startGenerateStoryboard: '开始生成分镜图',
startGenerate: '开始生成',
enterDescription: '请输入描述文字',
startingGenerate: '开始生成分镜图...',
taskCreated: '分镜图任务创建成功!',
createTaskFailed: '创建任务失败',
generateFailed: '生成分镜图失败',
taskTimeout: '任务超时,请稍后查看',
storyboardCompleted: '分镜图生成完成!请点击"开始生成"按钮生成视频',
videoCompleted: '视频生成完成!',
taskFailed: '任务失败',
unknownError: '未知错误',
startingVideoGenerate: '开始生成视频...',
videoTaskStarted: '视频生成任务已启动,请稍候...',
videoStartFailed: '启动视频生成失败',
defaultPrompt: '根据图片生成视频',
videoTaskCreated: '视频任务创建成功,开始处理...',
createVideoTaskFailed: '创建视频任务失败',
generateVideoFailed: '生成视频失败',
videoTaskTimeout: '视频任务超时,请稍后查看',
videoGenerateFailed: '视频生成失败',
paramsFilled: '已填充历史记录参数,可以开始生成',
cancelFeaturePending: '取消功能待实现',
taskCompleted: '任务已完成!',
resumingVideoTask: '检测到未完成的视频生成任务,继续处理中...',
resumingStoryboardTask: '检测到未完成的分镜图生成任务,继续处理中...',
resumingTask: '检测到未完成的任务,继续处理中...'
}
},
works: {
title: '我的作品',
all: '全部',
textToVideo: '文生视频',
imageToVideo: '图生视频',
storyboardVideo: '分镜视频',
filter: '筛选',
sortBy: '排序',
newest: '最新',
oldest: '最旧',
noWorks: '暂无作品',
noWorksDesc: '开始创作你的第一个作品吧!',
viewDetail: '查看详情',
deleteConfirm: '确定要删除这个作品吗?',
deleteSuccess: '删除成功',
deleteFailed: '删除失败',
video: '视频',
image: '图片',
dateFilter: '日期',
today: '今天',
thisWeek: '本周',
thisMonth: '本月',
taskType: '任务类型',
resolution: '清晰度',
sd: '标清',
hd: '高清',
uhd: '超清',
ratio: '比例',
time: '时间',
popular: '热门',
searchPlaceholder: '名字/提示词/ID',
selectItems: '选择{count}个项目',
selectedCount: '已选 {count} 个项目',
favorite: '收藏',
downloadWithWatermark: '带水印下载',
downloadWithoutWatermark: '不带水印下载',
memberOnly: '会员',
rename: '重命名',
referenceImagePrompt: '图1在图2中奔跑视频',
allLoaded: '✓ 已加载全部内容',
noContent: '没有找到相关内容',
backToTop: '回到顶部',
createSimilarInfo: '基于作品"{title}"创建同款',
goToCreate: '跳转到创作页面',
downloadStart: '开始下载:{title}',
shareComingSoon: '分享链接功能即将上线',
downloadWithWatermarkStart: '开始下载带水印版本',
downloadWithoutWatermarkStart: '开始下载不带水印版本(会员专享)',
renameDevMsg: '重命名功能开发中',
deleteWorkConfirm: '确定删除该作品吗?',
deleteConfirmTitle: '删除确认',
bulkDownloadStart: '开始下载 {count} 个文件',
bulkDeleteConfirm: '确定删除选中的 {count} 个项目吗?',
bulkDeleteSuccess: '已删除选中项目',
filtersReset: '筛选器已重置',
processing: '生成中...',
noPreview: '无预览',
videoLoadFailed: '视频加载失败',
videoFileNotExist: '视频文件可能不存在或已被删除',
retry: '重试',
deleteFailedWork: '删除此作品',
deleteFailedWorkConfirm: '此作品视频加载失败,确定要删除吗?删除后无法恢复。'
},
subscription: {
title: '会员订阅',
choosePlan: '选择套餐',
currentPlan: '当前套餐',
free: '免费版',
standard: '标准版',
professional: '专业版',
perMonth: '/月',
subscribe: '立即订阅',
renew: '续费',
upgrade: '升级',
features: '功能特性',
unlimited: '无限',
limited: '有限',
pointsPerMonth: '积分/月',
videoQuality: '视频质量',
support: '客服支持',
priorityQueue: '优先队列',
advancedFeatures: '高级功能',
// 新增键
userAvatar: '用户头像',
loading: '加载中...',
pointsDetails: '积分详情',
myOrders: '我的订单',
currentActivePlan: '当前生效权益',
expiryTime: '到期时间',
permanent: '永久',
remainingPoints: '剩余积分',
plans: '套餐',
currentPackage: '当前套餐',
firstPurchaseDiscount: '首购低至8.5折',
bestValue: '超值之选',
standardPoints: '每月200积分',
premiumPoints: '每月1000积分',
freeNewUserBonus: '新用户首次登陆免费获得50积分',
fastGeneration: '快速通道生成',
superFastGeneration: '极速通道生成',
commercialUse: '支持商用',
noWatermark: '下载去水印',
earlyAccess: '新功能优先体验',
// 积分历史相关
pointsUsageHistory: '积分使用情况',
pointsUsageOverview: '积分使用总览',
totalRecharge: '总充值',
totalConsumption: '总消耗',
currentPoints: '当前积分',
noPointsHistory: '暂无积分使用记录',
description: '描述',
time: '时间',
orderNumber: '订单号',
taskId: '任务ID',
recharge: '充值',
consume: '消耗',
// 消息提示
pleaseLogin: '请先登录',
loadUserInfoFailed: '获取用户信息失败,使用默认值',
loadUserInfoError: '加载用户信息失败: {message}',
loadPointsHistoryFailed: '获取积分使用历史失败',
generatingQRCode: '正在生成支付二维码...',
subscriptionFailed: '订阅处理失败,请重试',
qrCodeGenerated: '二维码已生成,请使用支付宝扫码支付',
qrCodeGenerationFailed: '生成二维码失败,请重试',
qrCodeEmpty: '二维码生成失败:二维码为空',
createPaymentFailed: '创建支付订单失败',
qrCodeGenerationError: '二维码生成失败:{message}',
pleaseTryAgain: '请重试',
refreshPage: '请刷新页面重试',
paymentSuccess: '支付成功!正在更新信息...',
infoUpdated: '信息已更新!',
paymentProcessingFailed: '支付成功但处理订单失败,请联系客服',
paymentFailed: '支付失败,请重试',
creatingOrder: '正在创建订单...',
paymentPageLoadFailed: '支付页面加载失败',
createAlipayPaymentFailed: '创建支付宝支付失败',
createPaymentOrderFailed: '创建支付订单失败,请重试',
// 套餐描述
standardDescription: '标准版订阅 - 每月200积分',
premiumDescription: '专业版订阅 - 每月1000积分'
},
welcome: {
@@ -61,6 +564,10 @@ export default {
systemUptime: '系统运行时间'
},
admin: {
exitAdmin: '退出后台'
},
dashboard: {
title: '数据仪表台',
totalUsers: '用户总数',
@@ -84,7 +591,9 @@ export default {
month9: '9月',
month10: '10月',
month11: '11月',
month12: '12月'
month12: '12月',
pleaseLogin: '请先登录',
loadDataFailed: '加载仪表盘数据失败'
},
orders: {
@@ -175,10 +684,8 @@ export default {
cleanupStats: '清理统计',
manualCleanup: '手动清理',
autoCleanup: '自动清理',
// Membership pricing
perMonth: '/月',
includesPoints: '包含{points}资源点/月',
// Cleanup stats
cleanupStatsInfo: '清理统计信息',
refresh: '刷新',
currentTotalTasks: '当前任务总数',
@@ -188,7 +695,6 @@ export default {
cleanupLogsCount: '清理日志数',
retentionDays: '保留天数',
days: '天',
// Cleanup actions
cleanupActions: '清理操作',
performFullCleanup: '执行完整清理',
cleanupUserTasks: '清理指定用户任务',
@@ -196,13 +702,11 @@ export default {
fullCleanupDescDetail: '将成功任务导出到归档表,删除失败任务',
userCleanupDesc: '用户清理',
userCleanupDescDetail: '清理指定用户的所有任务',
// Cleanup config
cleanupConfig: '清理配置',
taskRetentionDays: '任务保留天数',
taskRetentionTip: '任务完成后保留的天数',
archiveRetentionDays: '归档保留天数',
archiveRetentionTip: '归档数据保留的天数',
// Edit membership dialog
membershipLevel: '会员等级',
selectLevelPlaceholder: '请选择会员等级',
freeMembership: '免费版会员',
@@ -214,7 +718,6 @@ export default {
monthly: '月付',
quarterly: '季付',
yearly: '年付',
// User cleanup dialog
enterUsername: '请输入要清理的用户名',
warning: '警告',
cleanupWarning: '此操作将清理该用户的所有任务,包括:',