Commit ebf8fa50 by lijiabin

【需求 17679】 feat: 优化、调整UI等

parent 6a3cf54d
......@@ -16,6 +16,7 @@ export interface LoginResponseDto {
permissions: any[] | null
userRelated: any[] | null
isOfficialAccount: boolean | null
isAdmin: boolean
firstDeptId: number | null
password: string | null
enabled: boolean
......
......@@ -11,20 +11,20 @@
alt=""
class="w-12 h-12 rounded-full object-cover"
/>
<div
<!-- <div
class="absolute -bottom-1 -right-1 w-6 h-6 bg-gradient-to-r from-yellow-400 to-orange-400 rounded-full flex items-center justify-center text-xs font-bold text-white"
>
8
</div>
</div> -->
</div>
<div class="flex-1">
<div class="flex items-center gap-2">
<h3 class="font-semibold text-gray-800">{{ articleDetail?.createUserName }}</h3>
<span
<!-- <span
class="px-2 py-0.5 text-xs bg-gradient-to-r from-purple-100 to-blue-100 text-purple-600 rounded-full"
>
资深前端工程师
</span>
</span> -->
</div>
<p class="text-sm text-gray-500 mt-1">
{{ dayjs((articleDetail?.createTime || 0) * 1000).format('YYYY-MM-DD HH:mm:ss') }}
......
......@@ -100,12 +100,12 @@
<div class="flex-1">
<div class="flex items-center gap-2 mb-2">
<span class="font-semibold text-gray-800">{{ item.replyUser }}</span>
<span
<!-- <span
class="px-2 py-0.5 text-xs bg-gradient-to-r from-purple-100 to-blue-100 text-purple-600 rounded-full"
>
技术专家
</span>
<span class="px-2 py-0.5 text-xs bg-red-100 text-red-600 rounded-full">置顶</span>
</span> -->
<!-- <span class="px-2 py-0.5 text-xs bg-red-100 text-red-600 rounded-full">置顶</span> -->
</div>
<!-- 换行 -->
<p class="text-gray-700 mb-3 break-all">
......@@ -311,7 +311,8 @@ const handleReply = (item: CommentItemDto) => {
}
const showCommentBox = (item: CommentItemDto) => {
return (
currentCommentId.value === item.id || item.children?.some((i) => i.id === currentCommentId.value)
currentCommentId.value === item.id ||
item.children?.some((i) => i.id === currentCommentId.value)
)
}
......
<template>
<div class="layout-culture pb-11 h-full bg-[linear-gradient(to_bottom,#F0FBFD_0%,#ECEFFF_100%)]">
<div
class="header flex px-40 items-center justify-between bg-white mb-1 shadow-sm fixed top-0 left-0 right-0 z-100 w-100vw">
class="header flex px-40 items-center justify-between bg-white mb-1 shadow-sm fixed top-0 left-0 right-0 z-100 w-100vw"
>
<!-- Logo区域 -->
<div @click="router.push('/')" class="flex items-center flex-shrink-0 min-w-0 cursor-pointer">
<img class="h-10 mr-3 object-contain flex-shrink-0 sm:h-10 sm:mr-4"
src="http://soundasia.oss-cn-shenzhen.aliyuncs.com/OA/2022/10/13/1665643779583.png" alt="" />
<img
class="h-10 mr-3 object-contain flex-shrink-0 sm:h-10 sm:mr-4"
src="http://soundasia.oss-cn-shenzhen.aliyuncs.com/OA/2022/10/13/1665643779583.png"
alt=""
/>
</div>
<div class="flex items-center">
<!-- 搜索框 -->
<div v-show="showSearchInupt" class="flex-1 max-w-sm mx-4 hidden md:block lg:max-w-md lg:mx-6">
<div
v-show="showSearchInupt"
class="flex-1 max-w-sm mx-4 hidden md:block lg:max-w-md lg:mx-6"
>
<el-input v-model="search" class="h-8" placeholder="搜索">
<template #suffix>
<el-icon class="text-gray-400" @click="router.push('/searchPage?title=' + search)">
......@@ -23,20 +30,44 @@
<div class="flex items-center gap-1 flex-shrink-0 sm:gap-2 lg:gap-4">
<div
class="flex items-center cursor-pointer px-2 py-1 rounded transition-colors sm:px-3 sm:py-2 hover:shadow-lg duration-200"
@click="router.push('/userPage')">
<img class="w-8 h-8 object-contain flex-shrink-0 rounded-full" :src="userInfo?.avatar" alt="个人中心" />
<span class="ml-2 text-sm text-gray-700 whitespace-nowrap hidden lg:inline">个人中心</span>
@click="router.push('/userPage')"
>
<img
class="w-8 h-8 object-contain flex-shrink-0 rounded-full"
:src="userInfo?.avatar"
alt="个人中心"
/>
<span class="ml-2 text-sm text-gray-700 whitespace-nowrap hidden lg:inline"
>个人中心</span
>
</div>
<div class="flex items-center cursor-pointer px-2 py-1 rounded sm:px-3 sm:py-2 hover:shadow-lg duration-200">
<img class="w-7 h-7 object-contain flex-shrink-0" src="@/assets/img/culture/feedback.png" alt="" />
<span class="ml-2 text-sm text-gray-700 whitespace-nowrap hidden lg:inline">意见反馈</span>
<div
class="flex items-center cursor-pointer px-2 py-1 rounded sm:px-3 sm:py-2 hover:shadow-lg duration-200"
>
<img
class="w-7 h-7 object-contain flex-shrink-0"
src="@/assets/img/culture/feedback.png"
alt=""
/>
<span class="ml-2 text-sm text-gray-700 whitespace-nowrap hidden lg:inline"
>意见反馈</span
>
</div>
<el-dropdown placement="top-start" @command="handlePost" @visible-change="(val) => (isDropdownHover = val)">
<el-dropdown
placement="top-start"
@command="handlePost"
@visible-change="(val) => (isDropdownHover = val)"
>
<button
class="cursor-pointer w-24 h-9 text-black hover:text-black bg-[linear-gradient(to_right,#B3B8FD_0%,#7083FF_100%)] border-none duration-200 flex-1 text-xs sm:text-sm rounded-xl group"
:class="{ 'shadow-[0_1px_8px_0_rgba(95,0,237,0.25)]': isDropdownHover }">
<img class="h-7 w-7 transition-transform duration-300 ease-in-out"
:class="{ 'rotate-90': isDropdownHover }" src="@/assets/img/culture/post.png" alt="" />
:class="{ 'shadow-[0_1px_8px_0_rgba(95,0,237,0.25)]': isDropdownHover }"
>
<img
class="h-7 w-7 transition-transform duration-300 ease-in-out"
:class="{ 'rotate-90': isDropdownHover }"
src="@/assets/img/culture/post.png"
alt=""
/>
去发帖
</button>
<template #dropdown>
......@@ -52,7 +83,9 @@
</div>
</div>
<div class="flex-1 w-full flex items-center justify-center">
<div class="container max-h-none px-20 lg:px-20 2xl:px-30 transition-all duration-300 min-h-[calc(100vh-96px)]">
<div
class="container max-h-none px-0 lg:px-10 2xl:px-30 transition-all duration-300 min-h-[calc(100vh-96px)]"
>
<router-view v-slot="{ Component, route }">
<transition name="fade" mode="out-in">
<!-- 注释不能放到keep-alive下面 route是最终的路由信息 Component是当前n级路由的组件 二级路由 homePage videoDetail -->
......
......@@ -46,12 +46,12 @@ export default class DhRequest {
return handleBackendError(backendResult)
}
// 设置token
if (response.headers.authorization) {
const userStore = useUserStore()
userStore.setToken(response.headers.authorization)
// 存在本地
localStorage.setItem('token', response.headers.authorization)
}
// if (response.headers.authorization) {
// const userStore = useUserStore()
// userStore.setToken(response.headers.authorization)
// // 存在本地
// localStorage.setItem('token', response.headers.authorization)
// }
return response.data
} else {
// 处理请求成功后错误
......
<template>
<div
class="fixed 2xl:right-50 lg:right-20 right-10 top-70% -translate-y-50% flex flex-col items-center content-center gap-5"
class="fixed lg:right-5 right-5 top-70% -translate-y-50% flex flex-col items-center content-center gap-5 z-100"
>
<div class="flex flex-col bg-white rounded-8px shadow-md overflow-hidden">
<div
......
<template>
<div class="min-h-screen px-20">
<div class="min-h-screen">
<!-- 主内容区 -->
<ActionButtons
v-model="articleDetail"
......
......@@ -80,7 +80,7 @@
<el-form-item label="显示资源" prop="image">
<div class="upload-section">
<UploadFile v-model="form.assetUrl" />
<UploadFile v-model="form.assetUrl" :limit="1" />
<div class="upload-hint">上传图片,推荐比例为 W/H: 1280 / 480</div>
</div>
</el-form-item>
......
......@@ -53,7 +53,7 @@ interface MenuItem {
}
const menuList: MenuItem[] = [
{ path: '/backend/manager', title: '企业文化管理员' },
// { path: '/backend/manager', title: '企业文化管理员' },
{ path: '/backend/tags', title: '官方标签' },
{ path: '/backend/carousel', title: '轮播图设置' },
// { path: '/backend/topic-admin', title: '专栏——管理员' },
......
......@@ -38,12 +38,12 @@
/>
<!-- 问题内容 -->
<div>
<p class="text-gray-600 text-base leading-relaxed line-clamp-2">
<p class="text-gray-600 text-base leading-relaxed">
{{ item.content }}
</p>
<!-- line-clamp-2 -->
<!-- 展开/收起按钮 -->
<el-button
<!-- <el-button
v-if="item.content.length > 100 && !item.isExpand"
@click="handleReadMore(item)"
type="primary"
......@@ -53,7 +53,7 @@
>
阅读全文
<el-icon class="ml-1"><ArrowDown /></el-icon>
</el-button>
</el-button> -->
</div>
</div>
<!-- 底部信息栏 -->
......@@ -61,7 +61,7 @@
<!-- 左侧:发布人信息 -->
<div class="flex items-center gap-4">
<div class="flex items-center gap-2">
<span class="text-orange-500 text-sm font-medium">发布人</span>
<!-- <span class="text-orange-500 text-sm font-medium">发布人</span> -->
<div class="flex items-center gap-2">
<el-avatar :size="20" :src="item.showAvatar"> </el-avatar>
<span class="text-sm text-gray-700 font-medium">{{ item.showName }}</span>
......@@ -73,7 +73,7 @@
}}</span>
<!-- 操作按钮组 -->
<div class="flex items-center">
<!-- <div class="flex items-center">
<el-button size="small" plain>
<el-icon><Plus /></el-icon>
添加
......@@ -93,7 +93,7 @@
<el-icon><Warning /></el-icon>
举报
</el-button>
</div>
</div> -->
</div>
<!-- 右侧:统计信息 -->
......
<template>
<div class="min-h-screen bg-white p-6">
<div class="min-h-screen bg-white">
<div class="max-w-[1440px] mx-auto">
<!-- 顶部积分卡片 -->
<div
......
<template>
<div ref="searchPageRef" class="bg-white/90">
<div class="max-w-1400px mx-auto p-6">
<div>
<!-- 搜索栏 -->
<div class="mb-1 p-4">
<div class="relative flex items-center gap-3">
<el-input v-model="searchParams.title" placeholder="输入关键词搜索" class="w-300px! flex-1"
@keyup.enter="handleSearch" clearable />
<el-input
v-model="searchParams.title"
placeholder="输入关键词搜索"
class="w-300px! flex-1"
@keyup.enter="handleSearch"
clearable
/>
<el-button type="primary" @click="handleSearch"> 搜索 </el-button>
</div>
</div>
......@@ -15,18 +20,33 @@
<div class="flex items-center gap-2">
<span class="text-gray-600 text-14px">分类:</span>
<div class="flex gap-2">
<button v-for="sort in [{ label: '全部', value: '' }, ...articleTypeListOptions]" :key="sort.value"
class="px-4 py-1.5 rounded-lg text-14px transition-colors cursor-pointer" :class="{
<button
v-for="sort in [{ label: '全部', value: '' }, ...articleTypeListOptions]"
:key="sort.value"
class="px-4 py-1.5 rounded-lg text-14px transition-colors cursor-pointer"
:class="{
'text-blue-600 bg-blue-50': searchParams.type === sort.value,
'text-gray-600 hover:text-blue-600': searchParams.type !== sort.value,
}" @click="changeType(sort.value)">
}"
@click="changeType(sort.value)"
>
{{ sort.label }}
</button>
</div>
</div>
<div class="text-gray-500 text-14px">
<el-select v-model="searchParams.sortLogic" placeholder="请选择排序方式" class="w-100px!" @change="changeSort">
<el-option v-for="sort in sortOptions" :key="sort.value" :label="sort.label" :value="sort.value" />
<el-select
v-model="searchParams.sortLogic"
placeholder="请选择排序方式"
class="w-100px!"
@change="changeSort"
>
<el-option
v-for="sort in sortOptions"
:key="sort.value"
:label="sort.label"
:value="sort.value"
/>
</el-select>
</div>
</div>
......@@ -57,15 +77,22 @@
<div v-show="list.length">
<div class="space-y-4">
<div v-for="item in list" :key="item.id"
<div
v-for="item in list"
:key="item.id"
class="flex gap-4 p-4 rounded-lg hover:bg-gray-50 transition-colors cursor-pointer"
@click="handleClick(item)">
@click="handleClick(item)"
>
<!-- 封面图 -->
<div v-if="item.faceUrl"
class="flex-shrink-0 w-240px h-135px rounded-lg overflow-hidden bg-gray-100 relative">
<div
v-if="item.faceUrl"
class="flex-shrink-0 w-240px h-135px rounded-lg overflow-hidden bg-gray-100 relative"
>
<img :src="item.faceUrl" class="w-full h-full object-cover" />
<div v-if="item.type === ArticleTypeEnum.VIDEO"
class="absolute bottom-2 right-2 bg-black/70 text-white text-12px px-2 py-0.5 rounded">
<div
v-if="item.type === ArticleTypeEnum.VIDEO"
class="absolute bottom-2 right-2 bg-black/70 text-white text-12px px-2 py-0.5 rounded"
>
{{ item.videoDuration }}
</div>
</div>
......@@ -127,14 +154,23 @@
<!-- 右侧:分页器 -->
<div class="right">
<div class="pagination-wrapper bg-white rounded-lg shadow-sm border border-gray-100 p-3">
<el-pagination v-model:current-page="searchParams.current" v-model:page-size="searchParams.size"
:page-sizes="[5, 20, 1]" layout="prev, pager, next, jumper, total" :total="total"
class="custom-pagination" @current-change="
<div
class="pagination-wrapper bg-white rounded-lg shadow-sm border border-gray-100 p-3"
>
<el-pagination
v-model:current-page="searchParams.current"
v-model:page-size="searchParams.size"
:page-sizes="[5, 20, 1]"
layout="prev, pager, next, jumper, total"
:total="total"
class="custom-pagination"
@current-change="
(e) => {
; (handleBackTop(), goToPage(e))
;(handleBackTop(), goToPage(e))
}
" @size-change="changePageSize" />
"
@size-change="changePageSize"
/>
</div>
</div>
</div>
......@@ -163,10 +199,9 @@ const route = useRoute()
const searchPageRef = ref<HTMLElement | null>(null)
const { ScrollTopComp, handleBackTop } = useScrollTop(searchPageRef)
const queryType = route.query.type || '' as ArticleTypeEnum | undefined
const queryType = route.query.type || ('' as ArticleTypeEnum | undefined)
const querySearchTitle = route.query.title
const sortOptions = [
{ label: '最热', value: 0 },
{ label: '最新', value: 1 },
......
......@@ -21,7 +21,7 @@
<!-- 头像 -->
<el-form-item label="头像" prop="hiddenAvatar">
<div class="w-full">
<UploadFile v-model="form.hiddenAvatar" />
<UploadFile v-model="form.hiddenAvatar" :limit="1" />
<div class="text-xs text-gray-400 mt-2">修改资料后,请点击清除缓存</div>
</div>
</el-form-item>
......
......@@ -5,7 +5,14 @@
<!-- 顶部操作按钮 -->
<div class="absolute top-4 right-4 flex gap-2">
<el-button type="info" plain size="small" @click="handleClearCache">清除缓存</el-button>
<el-button type="info" plain size="small" @click="handleSwitchAccount">切换账号</el-button>
<el-button
v-if="userInfo.isAdmin"
type="info"
plain
size="small"
@click="handleSwitchAccount"
>切换账号</el-button
>
<el-button type="info" plain size="small" @click="handleAdmin">后台管理</el-button>
</div>
</div>
......
<template>
<!-- 整体页面容器:浅灰背景 -->
<div class="max-w-[1200px] mx-auto px-4">
<div>
<!-- 卡片1: 视频播放器区域 -->
<div class="bg-white rounded-lg shadow-sm overflow-hidden">
<!-- 标题区 -->
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment