diff --git a/src/api/admin/dramaClassification.ts b/src/api/admin/dramaClassification.ts index 50f6b9d..246539d 100644 --- a/src/api/admin/dramaClassification.ts +++ b/src/api/admin/dramaClassification.ts @@ -51,10 +51,7 @@ export const deleteClassificationApi = (id: number) => { } /** 分类下已关联的短剧 */ -export const listClassificationDramasApi = ( - id: number, - params: ClassificationDramaPageParams -) => { +export const listClassificationDramasApi = (id: number, params: ClassificationDramaPageParams) => { return request.get>({ url: `/admin/drama-classifications/${id}/dramas`, params diff --git a/src/api/admin/legalDocument.ts b/src/api/admin/legalDocument.ts new file mode 100644 index 0000000..02514e8 --- /dev/null +++ b/src/api/admin/legalDocument.ts @@ -0,0 +1,18 @@ +// Author: fruit.com.cn + +import request from '@/axios' + +export interface LegalDocument { + docCode: 'terms' | 'privacy' | string + lang: 'zh' | 'en' | 'id' | string + title: string + content: string +} + +export const listLegalDocumentsApi = () => { + return request.get({ url: '/admin/legal-documents' }) +} + +export const saveLegalDocumentsApi = (items: LegalDocument[]) => { + return request.put({ url: '/admin/legal-documents', data: items }) +} diff --git a/src/api/admin/types.ts b/src/api/admin/types.ts index a58f120..8641c5f 100644 --- a/src/api/admin/types.ts +++ b/src/api/admin/types.ts @@ -386,6 +386,10 @@ export interface AppUserItem { maskedTarget: string createdAt?: string lastLoginAt?: string + /** ANDROID / IOS / WEB */ + platform?: string + /** 系统版本,例如 Android 16 */ + osVersion?: string /** 预留:会员等级与到期(第二阶段) */ vipLevel?: number vipExpireAt?: string @@ -425,6 +429,8 @@ export interface WatchHistoryItem { finished?: boolean source: string deviceId: string + platform?: string + osVersion?: string watchedAt?: string } diff --git a/src/router/index.ts b/src/router/index.ts index 2dbd084..123ec04 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -211,6 +211,14 @@ export const asyncRouterMap: AppRouteRecordRaw[] = [ meta: { title: '操作日志' } + }, + { + path: 'legal-documents', + name: 'legal-documents', + component: () => import('@/views/systemManagement/LegalDocumentView.vue'), + meta: { + title: '协议设置' + } } ] } diff --git a/src/views/contentManagement/CategoryDramaView.vue b/src/views/contentManagement/CategoryDramaView.vue index 05d7968..8107ff2 100644 --- a/src/views/contentManagement/CategoryDramaView.vue +++ b/src/views/contentManagement/CategoryDramaView.vue @@ -249,12 +249,7 @@ onMounted(loadClassifications) title="分类管理" description="分类是运营自定义的分组,与「类型」无关;一个分类可以关联任意多部短剧。" > - + 新建分类 @@ -277,7 +272,13 @@ onMounted(loadClassifications) {{ item.dramaCount || 0 }}
- + 查询 - + 添加短剧 @@ -379,11 +376,7 @@ onMounted(loadClassifications)
- + @@ -475,20 +468,20 @@ onMounted(loadClassifications) } .classification-list { - margin: 0; padding: 0; + margin: 0; list-style: none; } .classification-list__item { display: flex; + padding: 8px 12px 8px 16px; + color: var(--el-text-color-regular); + cursor: pointer; + border-left: 3px solid transparent; align-items: center; justify-content: space-between; gap: 8px; - padding: 8px 12px 8px 16px; - cursor: pointer; - color: var(--el-text-color-regular); - border-left: 3px solid transparent; } .classification-list__item:hover { @@ -496,10 +489,10 @@ onMounted(loadClassifications) } .classification-list__item.is-active { + font-weight: 600; + color: var(--el-color-primary); background: var(--el-color-primary-light-9); border-left-color: var(--el-color-primary); - color: var(--el-color-primary); - font-weight: 600; } .classification-list__main { @@ -520,10 +513,10 @@ onMounted(loadClassifications) padding: 0 6px; font-size: 12px; line-height: 18px; - text-align: center; - border-radius: 9px; - background: var(--el-fill-color); color: var(--el-text-color-secondary); + text-align: center; + background: var(--el-fill-color); + border-radius: 9px; } .classification-list__actions { @@ -537,8 +530,8 @@ onMounted(loadClassifications) .classification-list__empty { padding: 16px; - color: var(--el-text-color-secondary); line-height: 1.6; + color: var(--el-text-color-secondary); } .classification-layout__main { diff --git a/src/views/contentManagement/DramaPlaylistView.vue b/src/views/contentManagement/DramaPlaylistView.vue index 2bf1fb7..5115a74 100644 --- a/src/views/contentManagement/DramaPlaylistView.vue +++ b/src/views/contentManagement/DramaPlaylistView.vue @@ -259,12 +259,7 @@ onMounted(loadCategories) title="剧单管理" description="剧单使用自己的分类体系(与「分类管理」无关),每个分类下直接选择短剧。" > - + 新建分类 @@ -287,7 +282,13 @@ onMounted(loadCategories) {{ item.dramaCount || 0 }}
- +
-
@@ -113,14 +113,14 @@ onBeforeUnmount(destroy) .rendition-player__error { margin: 0; - color: var(--el-color-danger); font-size: 13px; + color: var(--el-color-danger); } .rendition-player__url { margin: 0; - color: var(--el-text-color-secondary); font-size: 12px; + color: var(--el-text-color-secondary); word-break: break-all; } diff --git a/src/views/systemManagement/LegalDocumentView.vue b/src/views/systemManagement/LegalDocumentView.vue new file mode 100644 index 0000000..6926bee --- /dev/null +++ b/src/views/systemManagement/LegalDocumentView.vue @@ -0,0 +1,119 @@ + + + + + + + diff --git a/src/views/userManagement/AppUsersView.vue b/src/views/userManagement/AppUsersView.vue index 5b39fe1..ab5c11e 100644 --- a/src/views/userManagement/AppUsersView.vue +++ b/src/views/userManagement/AppUsersView.vue @@ -11,6 +11,7 @@ import { COUNTRY_OPTIONS, formatDuration, statusMeta, + systemText, useAppUsers } from './composables/useAppUsers' @@ -172,6 +173,9 @@ function canBeBanned(row) {
+ + +