style:优化ui

This commit is contained in:
不做码农 2023-04-29 09:40:28 +08:00
parent b9ad9522b1
commit dd2d9cd12f
13 changed files with 62 additions and 192 deletions

View File

@ -1,138 +0,0 @@
// 黑夜模式
[data-theme='theme-black'] {
--base-color: #22272e; // #304156;
--base-color-rgba: rgba(34,39,46, 0.3);
--base-color-white: #ffffff;
// root
--base-bg-main: var(--base-color);
--base-menu-background: var(--base-color);
--base-logo-title-color: var(--base-color-white);
--base-topBar-background: var(--base-color) !important;
--base-topBar-color: var(--base-color-white);
--base-color-bar: #dadada;
--base-border-color: #424242;
--base-border-black: #333333;
--base-text-color-regular: #9b9da1;
--base-text-color-placeholder: #7a7a7a;
--base-color-hover: #3c3c3c;
// el-ement ui 设置
--el-fill-color-light: var(--base-color-rgba) !important;
--el-fill-color-blank: var(--base-bg-main) !important;
// --el-table-bg-color: var(--el-fill-color-blank);
--el-color-white: var(--base-color) !important;
--el-text-color-primary: var(--base-color-bar) !important;
--el-border-color-base: var(--base-border-black) !important;
--el-border-color-light: var(--base-border-black) !important;
--el-text-color-regular: var(--base-text-color-regular) !important;
--el-bg-color: var(--base-bg-main) !important;
--el-color-success-lighter: var(--base-color) !important;
--el-color-warning-lighter: var(--base-color) !important;
--el-color-danger-lighter: var(--base-color) !important;
--el-color-primary-lighter: var(--base-color) !important;
--el-color-primary-light-9: var(--base-color-hover) !important;
--el-text-color-disabled-base: var(--el-color-primary) !important;
--el-border-color-lighter: var(--base-border-black) !important;
// --el-text-color-placeholder: var(--base-text-color-placeholder) !important;
// --el-disabled-bg-color: var(--base-color) !important;
--el-fill-base: var(--base-color-white) !important;
// el-date-picker bg
--el-bg-color-overlay: var(--base-bg-main) !important;
--el-disabled-text-color: var(--base-bg-main) !important;
// drawer
.drawer-item,
.drawer-title {
color: var(--base-color-white) !important;
}
.el-button--primary,
.el-button--info,
.el-button--danger,
.el-button--success,
.el-button--warning {
--el-button-text-color: var(--base-color-white) !important;
--el-button-hover-text-color: var(--base-color-white) !important;
--el-button-disabled-text-color: var(--base-color-white) !important;
&:hover {
border-color: var(--el-button-hover-border-color, var(--el-button-hover-bg-color)) !important;
}
}
// pagination
.el-pagination.is-background .el-pager li:not(.disabled).active {
color: var(--base-color-white) !important;
}
.el-pagination.is-background .btn-next,
.el-pagination.is-background .btn-prev,
.el-pagination.is-background .el-pager li {
background-color: var(--main-bg-color);
}
// tabs
.el-tabs--border-card {
background-color: var(--el-color-white) !important;
}
.el-tabs--border-card > .el-tabs__header .el-tabs__item.is-active {
background: var(--base-color) !important;
}
// alert / notice-bar
.home-card-item {
border: 1px solid var(--base-border-color-light) !important;
}
.el-alert,
.notice-bar {
border: 1px solid var(--base-border-color) !important;
background-color: var(--base-color) !important;
}
// colorPicker
.el-color-picker__mask {
background: unset !important;
}
.el-color-picker__trigger {
border: 1px solid var(--base-border-color-light) !important;
}
// popper / dropdown
.el-popper {
border: 1px solid var(--base-border-color) !important;
color: var(--el-text-color-primary) !important;
.el-popper__arrow:before {
background: var(--el-color-white) !important;
border: 1px solid var(--base-border-color);
}
a {
color: var(--el-text-color-primary) !important;
}
}
.el-popper,
.el-dropdown-menu {
background: var(--el-color-white) !important;
}
.el-dropdown-menu__item:hover:not(.is-disabled) {
background: var(--el-bg-color) !important;
}
.el-dropdown-menu__item.is-disabled {
font-weight: 700 !important;
}
//tags menu 选择
.tags-view-container .tags-view-wrapper .tags-view-item.active {
background-color: var(--base-color) !important;
// border-color: var(--base-color) !important;
}
// md 编辑器图片加载错误
.md,
.el-upload--picture-card,
.el-image__error {
background: none !important;
}
//el table loading mask
.el-loading-mask {
background-color: var(--base-color-rgba) !important;
}
}

View File

@ -5,7 +5,6 @@
@import './sidebar.scss'; @import './sidebar.scss';
@import './btn.scss'; @import './btn.scss';
@import './waves.scss'; @import './waves.scss';
// @import './black.scss';
html, html,
body, body,

View File

@ -1,13 +1,12 @@
.login { .login {
background: radial-gradient(200% 100% at bottom center, #f7f7b6, #e96f92, #1b2947); background: radial-gradient(220% 105% at top center, #1b2947 10%, #4b76a7 40%, #81acae 65%, #f7f7b6);
background: radial-gradient(220% 105% at top center, #1b2947 10%, #75517d 40%, #e96f92 65%, #f7f7b6);
background-attachment: fixed; background-attachment: fixed;
overflow: hidden; overflow: hidden;
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
height: 100%; height: 100%;
// background-image: url('../assets/images/login-background.jpg'); // background-image: url('@/assets/images/login-bg.jpg');
background-size: cover; background-size: cover;
} }
@ -21,7 +20,7 @@
border-radius: 6px; border-radius: 6px;
background: #ffffff; background: #ffffff;
// background-color: hsla(0, 0%, 100%, 0.3); // background-color: hsla(0, 0%, 100%, 0.3);
width: 310px; width: var(--base-login-width);
padding: 25px 15px 5px 15px; padding: 25px 15px 5px 15px;
position: relative; position: relative;
@ -44,6 +43,7 @@
float: right; float: right;
img { img {
width: 100%;
cursor: pointer; cursor: pointer;
vertical-align: middle; vertical-align: middle;
} }

View File

@ -12,17 +12,19 @@ $panGreen: #30b08f;
:root { :root {
--base-text-color-rgba: rgba(0, 0, 0, 0.85); --base-text-color-rgba: rgba(0, 0, 0, 0.85);
--base-sidebar-width: 220px; --base-sidebar-width: 220px;
// 左侧菜单宽度 // 左侧菜单宽度
--el-aside-width: 220px; --el-aside-width: 220px;
//底部高度 //底部高度
--base-footer-height: 30px; --base-footer-height: 30px;
--base-tags-height: 34px; --base-tags-height: 34px;
--base-header-height: 50px; --base-header-height: 50px;
//登录框宽度
--base-login-width: 280px;
} }
/***侧边栏深色配置***/ /***侧边栏深色配置***/
[data-theme='theme-dark'] { [data-theme='theme-dark'] {
--base-menu-background: #304156; --base-menu-background: #324157;
--base-logo-title-color: #ffffff; --base-logo-title-color: #ffffff;
// // el-ement ui 设置 // // el-ement ui 设置
// --el-fill-color-blank: #304156; // --el-fill-color-blank: #304156;

View File

@ -1,7 +1,7 @@
<template> <template>
<div> <div>
<el-dropdown trigger="hover" @command="handleLanguageChange" style="vertical-align: middle"> <el-dropdown trigger="hover" @command="handleLanguageChange" style="vertical-align: middle">
<svg-icon class-name="size-icon" name="language" /> <svg-icon class-name="size-icon" name="language" :color="props.color" />
<template #dropdown> <template #dropdown>
<el-dropdown-menu> <el-dropdown-menu>
<el-dropdown-item v-for="item of langOptions" :key="item.value" :disabled="lang === item.value" :command="item.value"> <el-dropdown-item v-for="item of langOptions" :key="item.value" :disabled="lang === item.value" :command="item.value">
@ -17,12 +17,16 @@
import useAppStore from '@/store/modules/app' import useAppStore from '@/store/modules/app'
const appStore = useAppStore() const appStore = useAppStore()
const lang = computed(() => useAppStore().lang) const lang = computed(() => useAppStore().lang)
const props = defineProps({
color: {
type: String
}
})
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
const langOptions = ref([ const langOptions = ref([
{ label: '简体中文', value: 'zh-cn' }, { label: '简体中文', value: 'zh-cn' },
{ label: 'English', value: 'en' }, { label: 'English', value: 'en' },
{ label: '繁體中文', value: 'zh-tw' }, { label: '繁體中文', value: 'zh-tw' }
]) ])
function handleLanguageChange(lang) { function handleLanguageChange(lang) {

View File

@ -10,6 +10,6 @@
"reLogin": "重新登录", "reLogin": "重新登录",
"invalidSession": "无效的会话,或者会话已过期,请重新登录。", "invalidSession": "无效的会话,或者会话已过期,请重新登录。",
"otherLoginWay": "其他登录方式", "otherLoginWay": "其他登录方式",
"register": "立即注册" "register": "注册"
} }
} }

View File

@ -10,6 +10,6 @@
"reLogin": "重新登錄", "reLogin": "重新登錄",
"invalidSession": "無效的會話,或者會話已過期,請重新登錄。", "invalidSession": "無效的會話,或者會話已過期,請重新登錄。",
"otherLoginWay": "其他登錄方式", "otherLoginWay": "其他登錄方式",
"register": "立即註冊" "register": "註冊"
} }
} }

View File

@ -1,5 +1,5 @@
<template> <template>
<div class="navbar" :data-theme="sideTheme" :class="appStore.device"> <div class="navbar" :class="appStore.device">
<hamburger id="hamburger-container" :is-active="appStore.sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" /> <hamburger id="hamburger-container" :is-active="appStore.sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" />
<template v-if="appStore.device == 'desktop'"> <template v-if="appStore.device == 'desktop'">
<breadcrumb id="breadcrumb-container" class="breadcrumb-container" v-if="!settingsStore.topNav" /> <breadcrumb id="breadcrumb-container" class="breadcrumb-container" v-if="!settingsStore.topNav" />

View File

@ -2,7 +2,7 @@
<el-aside :data-theme="sideTheme" class="sidebar" :class="{ 'has-logo': showLogo }"> <el-aside :data-theme="sideTheme" class="sidebar" :class="{ 'has-logo': showLogo }">
<logo v-if="showLogo" :collapse="isCollapse" /> <logo v-if="showLogo" :collapse="isCollapse" />
<el-scrollbar :class="sideTheme" wrap-class="scrollbar-wrapper"> <el-scrollbar wrap-class="scrollbar-wrapper">
<el-menu <el-menu
:default-active="activeMenu" :default-active="activeMenu"
:collapse="isCollapse" :collapse="isCollapse"

View File

@ -50,20 +50,24 @@ const useUserStore = defineStore('user', {
*/ */
oauthLogin(data, param) { oauthLogin(data, param) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
oauthCallback(data, param).then((res) => { oauthCallback(data, param)
const { code, data } = res .then((res) => {
if (code == 200) { const { code, data } = res
setToken(data.token) if (code == 200) {
this.token = data.token setToken(data.token)
Cookies.set('username', data.userName, { expires: 30 }) this.token = data.token
Cookies.set('password', encrypt(data.password), { expires: 30 }) Cookies.set('username', data.userName, { expires: 30 })
Cookies.set('rememberMe', true, { expires: 30 }) Cookies.set('password', encrypt(data.password), { expires: 30 })
resolve(res) //then处理 Cookies.set('rememberMe', true, { expires: 30 })
} else { resolve(res) //then处理
console.log('login error ', res) } else {
reject(res) //catch处理 console.log('login error ', res)
} reject(res) //catch处理
}) }
})
.catch((err) => {
reject(err)
})
}) })
}, },
// 获取用户信息 // 获取用户信息

View File

@ -6,35 +6,23 @@
<LangSelect title="多语言设置" class="langSet" /> <LangSelect title="多语言设置" class="langSet" />
<el-form-item prop="username"> <el-form-item prop="username">
<el-input v-model="loginForm.username" type="text" size="default" auto-complete="off" :placeholder="$t('login.account')"> <el-input v-model="loginForm.username" type="text" auto-complete="off" :placeholder="$t('login.account')">
<template #prefix> <template #prefix>
<svg-icon name="user" class="el-input__icon input-icon" /> <svg-icon name="user" class="input-icon" />
</template> </template>
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item prop="password"> <el-form-item prop="password">
<el-input <el-input v-model="loginForm.password" type="password" auto-complete="off" :placeholder="$t('login.password')" @keyup.enter="handleLogin">
v-model="loginForm.password"
type="password"
size="default"
auto-complete="off"
:placeholder="$t('login.password')"
@keyup.enter="handleLogin">
<template #prefix> <template #prefix>
<svg-icon name="password" class="el-input__icon input-icon" /> <svg-icon name="password" class="input-icon" />
</template> </template>
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item prop="code" v-if="captchaOnOff != 'off'"> <el-form-item prop="code" v-if="captchaOnOff != 'off'">
<el-input <el-input v-model="loginForm.code" auto-complete="off" :placeholder="$t('login.captcha')" style="width: 63%" @keyup.enter="handleLogin">
v-model="loginForm.code"
size="default"
auto-complete="off"
:placeholder="$t('login.captcha')"
style="width: 63%"
@keyup.enter="handleLogin">
<template #prefix> <template #prefix>
<svg-icon name="validCode" class="el-input__icon input-icon" /> <svg-icon name="validCode" class="input-icon" />
</template> </template>
</el-input> </el-input>
<div class="login-code"> <div class="login-code">
@ -44,7 +32,10 @@
<div style="display: flex; justify-content: space-between"> <div style="display: flex; justify-content: space-between">
<el-checkbox v-model="loginForm.rememberMe">{{ $t('login.rememberMe') }}</el-checkbox> <el-checkbox v-model="loginForm.rememberMe">{{ $t('login.rememberMe') }}</el-checkbox>
<router-link class="link-type" :to="'/register'">{{ $t('login.register') }}</router-link> <span style="font-size: 12px">
<span @click="handleForgetPwd()" class="forget-pwd">忘记密码</span>
<router-link class="link-type" :to="'/register'">{{ $t('login.register') }}</router-link>
</span>
</div> </div>
<el-form-item style="width: 100%"> <el-form-item style="width: 100%">
@ -167,15 +158,24 @@ function onAuth(type) {
break break
} }
} }
function handleForgetPwd() {
proxy.$modal.msg('请联系管理员')
}
getCode() getCode()
getCookie() getCookie()
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import '@/assets/styles/login.scss'; @import '@/assets/styles/login.scss';
.forget-pwd {
color: #ccc;
margin-right: 10px;
cursor: pointer;
}
.login-icon { .login-icon {
width: 30px; width: 30px;
margin-right: 10px; height: 30px;
margin-right: 20px;
cursor: pointer; cursor: pointer;
} }
.other-login { .other-login {

View File

@ -152,8 +152,7 @@ getCode()
justify-content: center; justify-content: center;
align-items: center; align-items: center;
height: 100%; height: 100%;
background: radial-gradient(200% 100% at bottom center, #f7f7b6, #e96f92, #1b2947); background: radial-gradient(220% 105% at top center, #1b2947 10%, #4b76a7 40%, #81acae 65%, #f7f7b6);
background: radial-gradient(220% 105% at top center, #1b2947 10%, #75517d 40%, #e96f92 65%, #f7f7b6);
} }
.title { .title {
margin: 0px auto 30px auto; margin: 0px auto 30px auto;
@ -164,7 +163,7 @@ getCode()
.register-form { .register-form {
border-radius: 6px; border-radius: 6px;
background: #fff; background: #fff;
width: 310px; width: var(--base-login-width);
padding: 25px 15px 5px 15px; padding: 25px 15px 5px 15px;
.el-input { .el-input {
height: 38px; height: 38px;

View File

@ -49,7 +49,7 @@ if (callbackQuery.value && callbackQuery.value.state != null) {
router.push({ path: redirect.value || '/' }) router.push({ path: redirect.value || '/' })
}) })
.catch((error) => { .catch((error) => {
console.error(error) console.error('login-error', error)
proxy.$modal.msgError(error.msg) proxy.$modal.msgError(error.msg)
loading.value = false loading.value = false
}) })
@ -60,6 +60,6 @@ if (callbackQuery.value && callbackQuery.value.state != null) {
.loading { .loading {
text-align: center; text-align: center;
color: #ccc; color: #ccc;
padding: 10px; padding: 10px;
} }
</style> </style>