From ba90bf9bfbcddc10f543bcb63f0e07f84ca393ec Mon Sep 17 00:00:00 2001 From: Zhou Weidong <502333560@qq.com> Date: Mon, 19 Oct 2026 12:00:21 +0800 Subject: [PATCH 1/3] =?UTF-8?q?style(web):=20=E7=BB=9F=E4=B8=80=E8=BE=A3?= =?UTF-8?q?=E6=A4=92=E7=BA=A2=E4=B8=BB=E8=89=B2=E4=B8=8E=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E5=B1=82=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Menu/src/components/useRenderMenuItem.tsx | 9 +- .../src/components/useRenderMenuTitle.tsx | 4 +- src/components/Setting/src/Setting.vue | 2 +- src/store/modules/app.ts | 6 +- src/styles/business/dark.css | 16 +-- src/styles/business/index.css | 1 + src/styles/business/menu.css | 131 ++++++++++++++++++ src/styles/business/theme.css | 48 ++++--- src/views/Login/Login.vue | 2 +- src/views/permission/MenuManagementView.vue | 2 +- .../composables/useMenuManagement.js | 4 +- 11 files changed, 185 insertions(+), 40 deletions(-) create mode 100644 src/styles/business/menu.css diff --git a/src/components/Menu/src/components/useRenderMenuItem.tsx b/src/components/Menu/src/components/useRenderMenuItem.tsx index 301313f..0132652 100644 --- a/src/components/Menu/src/components/useRenderMenuItem.tsx +++ b/src/components/Menu/src/components/useRenderMenuItem.tsx @@ -9,7 +9,7 @@ const { renderMenuTitle } = useRenderMenuTitle() export const useRenderMenuItem = () => // allRouters: AppRouteRecordRaw[] = [], { - const renderMenuItem = (routers: AppRouteRecordRaw[], parentPath = '/') => { + const renderMenuItem = (routers: AppRouteRecordRaw[], parentPath = '/', nested = false) => { return routers .filter((v) => !v.meta?.hidden) .map((v) => { @@ -27,7 +27,8 @@ export const useRenderMenuItem = () => index={onlyOneChild ? pathResolve(fullPath, onlyOneChild.path) : fullPath} > {{ - default: () => renderMenuTitle(onlyOneChild ? onlyOneChild?.meta : meta) + default: () => + renderMenuTitle(onlyOneChild ? onlyOneChild?.meta : meta, !nested) }} ) @@ -35,8 +36,8 @@ export const useRenderMenuItem = () => return ( {{ - title: () => renderMenuTitle(meta), - default: () => renderMenuItem(v.children!, fullPath) + title: () => renderMenuTitle(meta, !nested), + default: () => renderMenuItem(v.children!, fullPath, true) }} ) diff --git a/src/components/Menu/src/components/useRenderMenuTitle.tsx b/src/components/Menu/src/components/useRenderMenuTitle.tsx index 5c3dde8..838423e 100644 --- a/src/components/Menu/src/components/useRenderMenuTitle.tsx +++ b/src/components/Menu/src/components/useRenderMenuTitle.tsx @@ -5,11 +5,11 @@ import { AppIcon } from '@/components/AppIcon' import { useI18n } from '@/hooks/web/useI18n' export const useRenderMenuTitle = () => { - const renderMenuTitle = (meta: RouteMeta) => { + const renderMenuTitle = (meta: RouteMeta, showIcon = true) => { const { t } = useI18n() const { title = 'Please set title', icon } = meta - return icon ? ( + return icon && showIcon ? ( <> diff --git a/src/components/Setting/src/Setting.vue b/src/components/Setting/src/Setting.vue index 6f25ee1..e60cf2d 100644 --- a/src/components/Setting/src/Setting.vue +++ b/src/components/Setting/src/Setting.vue @@ -195,7 +195,7 @@ const themeChange = () => { - + diff --git a/src/views/permission/composables/useMenuManagement.js b/src/views/permission/composables/useMenuManagement.js index 0d91b28..a5d8156 100644 --- a/src/views/permission/composables/useMenuManagement.js +++ b/src/views/permission/composables/useMenuManagement.js @@ -93,7 +93,7 @@ export function useMenuManagement() { routePath: raw.path || '', routeName: raw.name || '', component: raw.component === '#' ? '' : raw.component || '', - icon: normalizeAppIcon(raw.icon), + icon: raw.type === 'CATALOG' ? normalizeAppIcon(raw.icon) : '', permissionCode: raw.permissionCode || '', type: raw.type || 'MENU', sort: raw.sort ?? 1, @@ -113,7 +113,7 @@ export function useMenuManagement() { routePath: form.routePath.trim(), routeName: form.routeName.trim(), component: form.type === 'CATALOG' ? '#' : form.component.trim(), - icon: form.type === 'BUTTON' ? '' : normalizeAppIcon(form.icon), + icon: form.type === 'CATALOG' ? normalizeAppIcon(form.icon) : '', permissionCode: form.permissionCode.trim(), type: form.type, sort: Number(form.sort) || 1, From 805d7ddc5277687a3d1692a3f2989209b66271c8 Mon Sep 17 00:00:00 2001 From: Zhou Weidong <502333560@qq.com> Date: Mon, 19 Oct 2026 12:00:26 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feat(web):=20=E9=87=8D=E5=81=9A=E7=9F=AD?= =?UTF-8?q?=E5=89=A7=E7=BC=96=E8=BE=91=E5=BC=B9=E7=AA=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/styles/business/drama-management.css | 203 +++++++++++-- .../contentManagement/DramaManagementView.vue | 276 ++++++++++++++---- 2 files changed, 405 insertions(+), 74 deletions(-) diff --git a/src/styles/business/drama-management.css b/src/styles/business/drama-management.css index 7363c62..8fcd3ff 100644 --- a/src/styles/business/drama-management.css +++ b/src/styles/business/drama-management.css @@ -91,29 +91,192 @@ font-size: 13px; } -/* 编辑弹窗里的封面预览:固定竖版尺寸,和上传控件并排,避免弹窗过高 */ -.cover-field { +/* 短剧编辑弹窗:固定宽度、内容区滚动、底部操作固定。 */ +.drama-editor-dialog { display: flex; - gap: 12px; - align-items: flex-start; - width: 100%; + max-height: calc(100vh - 40px); + overflow: hidden; + flex-direction: column; + border-radius: var(--app-radius-lg) !important; } -.cover-field-actions { + +.drama-editor-dialog .el-dialog__body { + flex: 1 1 auto; + padding: 8px 24px 0; + overflow-y: auto; +} + +.drama-editor-dialog .el-dialog__footer { + flex: 0 0 auto; + padding: 14px 24px; + background: var(--el-bg-color-overlay); + border-top: 1px solid var(--el-border-color-lighter); +} + +.drama-editor-dialog .el-dialog__footer .el-button { + min-width: 88px; + height: 36px; +} + +.editor-section { + padding: 4px 0 18px; + border-bottom: 1px solid var(--el-border-color-lighter); +} + +.editor-section + .editor-section { + padding-top: 18px; +} + +.editor-section:last-child { + padding-bottom: 4px; + border-bottom: 0; +} + +.editor-section-title { + margin: 0 0 14px; + color: var(--el-text-color-primary); + font-size: 15px; + font-weight: 650; + line-height: 1.4; +} + +.editor-grid { + display: grid; + gap: 0 16px; +} + +.editor-grid--two { + grid-template-columns: repeat(2, minmax(0, 1fr)); +} + +.editor-number { + width: 180px !important; +} + +.cover-editor { + display: flex; + gap: 18px; + align-items: flex-start; +} + +.cover-preview-card { + position: relative; + display: grid; + flex: 0 0 96px; + width: 96px; + height: 128px; + overflow: hidden; + border: 1px solid var(--el-border-color); + border-radius: 8px; + background: var(--el-fill-color-lighter); +} + +.cover-preview-card img { + width: 100%; + height: 100%; + object-fit: cover; +} + +.cover-preview-empty { + display: flex; + height: 100%; + color: var(--el-text-color-placeholder); + font-size: 12px; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 8px; + border: 1px dashed var(--el-border-color); + border-radius: 8px; +} + +.cover-upload-mask { + position: absolute; + inset: 0; + display: flex; + color: #fff; + font-size: 12px; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 4px; + background: color-mix(in srgb, var(--el-color-primary) 78%, transparent); +} + +.cover-upload-mask b { + font-size: 16px; +} + +.cover-editor-meta { + display: flex; flex: 1 1 auto; min-width: 0; + flex-direction: column; + gap: 10px; } -.form-cover-preview { - display: block; - width: 84px; - height: 112px; - flex: 0 0 84px; - object-fit: cover; - border: 1px solid var(--el-border-color-lighter); - border-radius: var(--app-radius-md); - background: #f0f2f4 !important; + +.cover-status-line { + display: flex; + align-items: center; + gap: 10px; + min-width: 0; } -.dark .form-cover-preview { - background: #353b45 !important; + +.cover-filename { + overflow: hidden; + color: var(--el-text-color-regular); + font-size: 13px; + text-overflow: ellipsis; + white-space: nowrap; +} + +.cover-hint { + margin: 0; + color: var(--el-text-color-secondary); + font-size: 12px; +} + +.cover-actions { + display: flex; + align-items: center; + gap: 10px; + flex-wrap: wrap; +} + +.cover-actions .el-button { + height: 36px; +} + +.cover-original-link { + color: var(--el-color-primary); + font-size: 13px; + text-decoration: none; +} + +.cover-original-link:hover { + text-decoration: underline; +} + +@media (max-width: 600px) { + .drama-editor-dialog { + width: calc(100vw - 24px) !important; + margin: 12px auto !important; + } + + .drama-editor-dialog .el-dialog__body { + padding-right: 18px; + padding-left: 18px; + } + + .editor-grid--two { + grid-template-columns: 1fr; + } + +} + +html.dark .cover-preview-card, +html.dark .cover-preview-empty { + background: var(--el-fill-color-light); } /* 编辑弹窗里的视频预览 */ @@ -163,7 +326,7 @@ /* 列表里点视频即放大播放,给个悬停反馈 */ .episode-video-thumb:hover { border-color: var(--el-color-primary); - box-shadow: 0 0 0 2px rgba(64, 158, 255, 0.25); + box-shadow: 0 0 0 2px color-mix(in srgb, var(--el-color-primary) 25%, transparent); } .dark .table-result-count { color: #a6aeb9; @@ -233,8 +396,8 @@ .table-actions .el-button--primary { --el-button-bg-color: var(--el-color-primary); --el-button-border-color: var(--el-color-primary); - --el-button-hover-bg-color: var(--el-color-primary-light-3); - --el-button-hover-border-color: var(--el-color-primary-light-3); + --el-button-hover-bg-color: var(--el-color-primary-dark-2); + --el-button-hover-border-color: var(--el-color-primary-dark-2); } .table-actions .el-button--success { --el-button-bg-color: #4d866a; diff --git a/src/views/contentManagement/DramaManagementView.vue b/src/views/contentManagement/DramaManagementView.vue index 6b9db63..2dcbb1b 100644 --- a/src/views/contentManagement/DramaManagementView.vue +++ b/src/views/contentManagement/DramaManagementView.vue @@ -1,7 +1,7 @@ diff --git a/src/locales/en.ts b/src/locales/en.ts index 15ff3d6..3e35f06 100644 --- a/src/locales/en.ts +++ b/src/locales/en.ts @@ -52,6 +52,7 @@ export default { lockScreen: 'Lock screen', lock: 'Lock', lockPassword: 'Lock screen password', + description: 'Enter your password to unlock this session.', unlock: 'Click to unlock', backToLogin: 'Back to login', entrySystem: 'Entry the system', diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts index 9825d3a..1961130 100644 --- a/src/locales/zh-CN.ts +++ b/src/locales/zh-CN.ts @@ -52,6 +52,7 @@ export default { lockScreen: '锁定屏幕', lock: '锁定', lockPassword: '锁屏密码', + description: '输入密码解锁当前会话。', unlock: '点击解锁', backToLogin: '返回登录', entrySystem: '进入系统',