Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
bdc
/
bdcdj-web
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
d023487e
authored
2022-08-12 10:59:19 +0800
by
任超
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
style:element 换肤
1 parent
9e87899c
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
190 additions
and
23 deletions
src/components/Base/base.js
src/components/Theme/theme.vue
src/layout/components/Navbar.vue
src/main.js
src/store/modules/app.js
src/styles/element-ui.scss
src/components/Base/base.js
View file @
d023487
import
dialogBox
from
'@/components/DialogBox/dialogBox.vue'
import
lbTable
from
'@/components/lb-table/lb-table.vue'
import
Theme
from
'@/components/Theme/theme.vue'
export
default
{
install
:
(
Vue
)
=>
{
Vue
.
component
(
'dialogBox'
,
dialogBox
);
Vue
.
component
(
'lbTable'
,
lbTable
);
Vue
.
component
(
'Theme'
,
Theme
);
}
}
\ No newline at end of file
...
...
src/components/Theme/theme.vue
0 → 100644
View file @
d023487
<
template
>
<el-color-picker
v-model=
"theme"
:predefine=
"['#409EFF', '#1890ff', '#304156', '#212121', '#11a983', '#13c2c2', '#6959CD', '#f5222d',]"
class=
"theme-picker"
popper-class=
"theme-picker-dropdown"
/>
</
template
>
<
script
>
const
version
=
require
(
'element-ui/package.json'
).
version
// element-ui version from node_modules
const
ORIGINAL_THEME
=
'#409EFF'
// default color
export
default
{
data
()
{
return
{
chalk
:
''
,
// content of theme-chalk css
theme
:
''
}
},
computed
:
{
defaultTheme
()
{
return
this
.
$store
.
state
.
app
.
theme
}
},
watch
:
{
defaultTheme
:
{
handler
:
function
(
val
,
oldVal
)
{
this
.
theme
=
val
},
immediate
:
true
},
async
theme
(
val
)
{
const
oldVal
=
this
.
chalk
?
this
.
theme
:
ORIGINAL_THEME
if
(
typeof
val
!==
'string'
)
return
const
themeCluster
=
this
.
getThemeCluster
(
val
.
replace
(
'#'
,
''
))
const
originalCluster
=
this
.
getThemeCluster
(
oldVal
.
replace
(
'#'
,
''
))
console
.
log
(
themeCluster
,
originalCluster
)
const
$message
=
this
.
$message
({
message
:
' Compiling the theme'
,
customClass
:
'theme-message'
,
type
:
'success'
,
duration
:
0
,
iconClass
:
'el-icon-loading'
})
const
getHandler
=
(
variable
,
id
)
=>
{
return
()
=>
{
const
originalCluster
=
this
.
getThemeCluster
(
ORIGINAL_THEME
.
replace
(
'#'
,
''
))
const
newStyle
=
this
.
updateStyle
(
this
[
variable
],
originalCluster
,
themeCluster
)
let
styleTag
=
document
.
getElementById
(
id
)
if
(
!
styleTag
)
{
styleTag
=
document
.
createElement
(
'style'
)
styleTag
.
setAttribute
(
'id'
,
id
)
document
.
head
.
appendChild
(
styleTag
)
}
styleTag
.
innerText
=
newStyle
}
}
if
(
!
this
.
chalk
)
{
const
url
=
`https://unpkg.com/element-ui@
${
version
}
/lib/theme-chalk/index.css`
await
this
.
getCSSString
(
url
,
'chalk'
)
}
const
chalkHandler
=
getHandler
(
'chalk'
,
'chalk-style'
)
chalkHandler
()
const
styles
=
[].
slice
.
call
(
document
.
querySelectorAll
(
'style'
))
.
filter
(
style
=>
{
const
text
=
style
.
innerText
return
new
RegExp
(
oldVal
,
'i'
).
test
(
text
)
&&
!
/Chalk Variables/
.
test
(
text
)
})
styles
.
forEach
(
style
=>
{
const
{
innerText
}
=
style
if
(
typeof
innerText
!==
'string'
)
return
style
.
innerText
=
this
.
updateStyle
(
innerText
,
originalCluster
,
themeCluster
)
})
this
.
$emit
(
'change'
,
val
)
$message
.
close
()
}
},
methods
:
{
updateStyle
(
style
,
oldCluster
,
newCluster
)
{
let
newStyle
=
style
oldCluster
.
forEach
((
color
,
index
)
=>
{
newStyle
=
newStyle
.
replace
(
new
RegExp
(
color
,
'ig'
),
newCluster
[
index
])
})
return
newStyle
},
getCSSString
(
url
,
variable
)
{
return
new
Promise
(
resolve
=>
{
const
xhr
=
new
XMLHttpRequest
()
xhr
.
onreadystatechange
=
()
=>
{
if
(
xhr
.
readyState
===
4
&&
xhr
.
status
===
200
)
{
this
[
variable
]
=
xhr
.
responseText
.
replace
(
/@font-face{
[^
}
]
+}/
,
''
)
resolve
()
}
}
xhr
.
open
(
'GET'
,
url
)
xhr
.
send
()
})
},
getThemeCluster
(
theme
)
{
const
tintColor
=
(
color
,
tint
)
=>
{
let
red
=
parseInt
(
color
.
slice
(
0
,
2
),
16
)
let
green
=
parseInt
(
color
.
slice
(
2
,
4
),
16
)
let
blue
=
parseInt
(
color
.
slice
(
4
,
6
),
16
)
if
(
tint
===
0
)
{
// when primary color is in its rgb space
return
[
red
,
green
,
blue
].
join
(
','
)
}
else
{
red
+=
Math
.
round
(
tint
*
(
255
-
red
))
green
+=
Math
.
round
(
tint
*
(
255
-
green
))
blue
+=
Math
.
round
(
tint
*
(
255
-
blue
))
red
=
red
.
toString
(
16
)
green
=
green
.
toString
(
16
)
blue
=
blue
.
toString
(
16
)
return
`#
${
red
}${
green
}${
blue
}
`
}
}
const
shadeColor
=
(
color
,
shade
)
=>
{
let
red
=
parseInt
(
color
.
slice
(
0
,
2
),
16
)
let
green
=
parseInt
(
color
.
slice
(
2
,
4
),
16
)
let
blue
=
parseInt
(
color
.
slice
(
4
,
6
),
16
)
red
=
Math
.
round
((
1
-
shade
)
*
red
)
green
=
Math
.
round
((
1
-
shade
)
*
green
)
blue
=
Math
.
round
((
1
-
shade
)
*
blue
)
red
=
red
.
toString
(
16
)
green
=
green
.
toString
(
16
)
blue
=
blue
.
toString
(
16
)
return
`#
${
red
}${
green
}${
blue
}
`
}
const
clusters
=
[
theme
]
for
(
let
i
=
0
;
i
<=
9
;
i
++
)
{
clusters
.
push
(
tintColor
(
theme
,
Number
((
i
/
10
).
toFixed
(
2
))))
}
clusters
.
push
(
shadeColor
(
theme
,
0.1
))
return
clusters
}
}
}
</
script
>
<
style
>
.theme-message
,
.theme-picker-dropdown
{
z-index
:
99999
!important
;
}
.theme-picker
.el-color-picker__trigger
{
height
:
26px
!important
;
width
:
26px
!important
;
padding
:
2px
;
}
.theme-picker-dropdown
.el-color-dropdown__link-btn
{
display
:
none
;
}
</
style
>
\ No newline at end of file
src/layout/components/Navbar.vue
View file @
d023487
...
...
@@ -3,7 +3,9 @@
<div
class=
"logo"
>
<img
v-if=
"logo"
:src=
"logo"
class=
"header-logo"
>
</div>
<div
class=
"backdrop"
></div>
<div
class=
"backdrop"
>
<theme
style=
"float: right;height: 26px;width: 26px;margin-top: 26px;"
@
change=
"themeChange"
/>
</div>
<div
class=
"right-menu"
>
<el-dropdown
class=
"avatar-container right-menu-item hover-effect"
@
command=
"handleCommand"
>
<div
class=
"avatar-wrapper"
>
...
...
@@ -31,6 +33,9 @@ export default {
}
},
methods
:
{
themeChange
(
val
)
{
this
.
$store
.
dispatch
(
'app/updateTheme'
,
val
)
},
searchMessageCenter
()
{
this
.
$router
.
push
({
name
:
'messagecenter'
})
},
...
...
src/main.js
View file @
d023487
...
...
@@ -5,7 +5,7 @@ import App from './App'
import
'normalize.css/normalize.css'
// a modern alternative to CSS resets
import
Element
from
'element-ui'
import
'./styles/element-variables.scss'
import
'@/styles/index.scss'
// global css
import
'@/styles/index.scss'
import
Base
from
'./components/Base/base'
import
'./image/icons'
// icon
...
...
src/store/modules/app.js
View file @
d023487
import
Cookies
from
'js-cookie'
const
state
=
{
size
:
'small'
size
:
'small'
,
theme
:
'#409EFF'
}
const
mutations
=
{
SET_SIZE
:
(
state
,
size
)
=>
{
state
.
size
=
size
Cookies
.
set
(
'size'
,
size
)
}
},
UPDATE_THEME
(
state
,
val
)
{
state
.
theme
=
val
;
},
}
const
actions
=
{
closeSideBar
({
commit
},
{
withoutAnimation
})
{
commit
(
'CLOSE_SIDEBAR'
,
withoutAnimation
)
},
setSize
({
commit
},
size
)
{
commit
(
'SET_SIZE'
,
size
)
},
updateTheme
({
commit
},
val
)
{
commit
(
'UPDATE_THEME'
,
val
)
}
}
...
...
src/styles/element-ui.scss
View file @
d023487
...
...
@@ -326,19 +326,3 @@ input[type="number"] {
position
:
absolute
;
right
:
25px
;
}
\ No newline at end of file
// 表格分页
.el-pagination.is-background
.btn-prev
,
.el-pagination.is-background
.btn-next
,
.el-pagination.is-background
.el-pager
li
,
.el-pagination
.el-select
.el-input
.el-input__inner
{
background-color
:
#fff
!
important
;
border
:
1px
solid
#E4EBF4
!
important
;
border-radius
:
5px
!
important
;
}
.el-pagination.is-background
.el-pager
li
.active
{
background-color
:
#0F93F6
!
important
;
border
:
1px
solid
#0F93F6
!
important
;
color
:
#fff
!
important
;
}
\ No newline at end of file
...
...
Please
register
or
sign in
to post a comment