feat: 迁移自定义功能至 1.5.9.9 版本

包含音乐源限制、CI 防 OOM 优化、数据库连接池优化、管理端权限及 UI 细节定制等功能
This commit is contained in:
2026-09-12 19:26:42 +08:00
parent 34f0679117
commit 1106aeea6c
161 changed files with 18963 additions and 27900 deletions
+16 -18
View File
@@ -1,7 +1,7 @@
import { createError, defineEventHandler, getQuery } from 'h3'
import { db } from '~/drizzle/db'
import { users, userStatusLogs } from '~/drizzle/schema'
import { and, count, desc, eq, ilike, inArray, or, sql } from 'drizzle-orm'
import { and, count, desc, eq, ilike, or } from 'drizzle-orm'
import { getStatusText } from '~~/server/utils/user'
export default defineEventHandler(async (event) => {
@@ -11,7 +11,7 @@ export default defineEventHandler(async (event) => {
if (!user || !['ADMIN', 'SUPER_ADMIN'].includes(user.role)) {
throw createError({
statusCode: 403,
message: '没有权限访问'
statusMessage: '没有权限访问'
})
}
@@ -46,14 +46,15 @@ export default defineEventHandler(async (event) => {
.select({
id: userStatusLogs.id,
userId: userStatusLogs.userId,
// 优先快照列(用户删除后审计可追溯);存量旧日志快照为 NULL 时回退 join 的用户名
userName: sql`COALESCE(${userStatusLogs.name}, ${users.name})`,
userUsername: sql`COALESCE(${userStatusLogs.username}, ${users.username})`,
userName: users.name,
userUsername: users.username,
oldStatus: userStatusLogs.oldStatus,
newStatus: userStatusLogs.newStatus,
reason: userStatusLogs.reason,
createdAt: userStatusLogs.createdAt,
operatorId: userStatusLogs.operatorId
operatorId: userStatusLogs.operatorId,
operatorName: users.name,
operatorUsername: users.username
})
.from(userStatusLogs)
.leftJoin(users, eq(userStatusLogs.userId, users.id))
@@ -66,13 +67,15 @@ export default defineEventHandler(async (event) => {
.select({
id: userStatusLogs.id,
userId: userStatusLogs.userId,
userName: sql`COALESCE(${userStatusLogs.name}, ${users.name})`,
userUsername: sql`COALESCE(${userStatusLogs.username}, ${users.username})`,
userName: users.name,
userUsername: users.username,
oldStatus: userStatusLogs.oldStatus,
newStatus: userStatusLogs.newStatus,
reason: userStatusLogs.reason,
createdAt: userStatusLogs.createdAt,
operatorId: userStatusLogs.operatorId
operatorId: userStatusLogs.operatorId,
operatorName: users.name,
operatorUsername: users.username
})
.from(userStatusLogs)
.leftJoin(users, eq(userStatusLogs.userId, users.id))
@@ -80,9 +83,6 @@ export default defineEventHandler(async (event) => {
and(
whereClause,
or(
ilike(userStatusLogs.name, `%${searchTerm}%`),
ilike(userStatusLogs.username, `%${searchTerm}%`),
// 存量旧日志快照列为 NULL,回退 join 的用户名列以便可搜
ilike(users.name, `%${searchTerm}%`),
ilike(users.username, `%${searchTerm}%`),
ilike(userStatusLogs.reason, `%${searchTerm}%`)
@@ -106,8 +106,6 @@ export default defineEventHandler(async (event) => {
and(
whereClause,
or(
ilike(userStatusLogs.name, `%${searchTerm}%`),
ilike(userStatusLogs.username, `%${searchTerm}%`),
ilike(users.name, `%${searchTerm}%`),
ilike(users.username, `%${searchTerm}%`),
ilike(userStatusLogs.reason, `%${searchTerm}%`)
@@ -137,7 +135,7 @@ export default defineEventHandler(async (event) => {
username: users.username
})
.from(users)
.where(inArray(users.id, operatorIds))
.where(eq(users.id, operatorIds[0])) // 这里需要用inArray,但先简化处理
const operatorMap = new Map()
for (const op of operators) {
@@ -166,8 +164,8 @@ export default defineEventHandler(async (event) => {
createdAt: log.createdAt,
operator: {
id: log.operatorId,
name: operatorMap.get(log.operatorId)?.name || '未知操作员',
username: operatorMap.get(log.operatorId)?.username || 'unknown'
name: operatorMap.get(log.operatorId)?.name || log.operatorName || '未知操作员',
username: operatorMap.get(log.operatorId)?.username || log.operatorUsername || 'unknown'
}
})),
pagination: {
@@ -193,7 +191,7 @@ export default defineEventHandler(async (event) => {
throw createError({
statusCode: 500,
message: '获取状态变更日志失败: ' + error.message
statusMessage: '获取状态变更日志失败: ' + error.message
})
}
})