mirror of
https://github.com/woodchen-ink/clash-and-dashboard.git
synced 2025-07-18 22:11:56 +08:00
Add: component <Header>
This commit is contained in:
parent
39fdf2ff2c
commit
c5fcba3444
5
package-lock.json
generated
5
package-lock.json
generated
@ -2263,6 +2263,11 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"classnames": {
|
||||||
|
"version": "2.2.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
|
||||||
|
"integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
|
||||||
|
},
|
||||||
"clean-css": {
|
"clean-css": {
|
||||||
"version": "4.2.1",
|
"version": "4.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz",
|
||||||
|
@ -58,6 +58,7 @@
|
|||||||
"webpack-merge": "^4.1.4"
|
"webpack-merge": "^4.1.4"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"classnames": "^2.2.6",
|
||||||
"i18next": "^11.9.0",
|
"i18next": "^11.9.0",
|
||||||
"i18next-browser-languagedetector": "^2.2.3",
|
"i18next-browser-languagedetector": "^2.2.3",
|
||||||
"ini": "^1.3.5",
|
"ini": "^1.3.5",
|
||||||
|
20
src/components/Header/index.tsx
Normal file
20
src/components/Header/index.tsx
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
import * as React from 'react'
|
||||||
|
import { BaseComponentProps } from '@models/BaseProps'
|
||||||
|
import classnames from 'classnames'
|
||||||
|
import './style.scss'
|
||||||
|
|
||||||
|
interface HeaderProps extends BaseComponentProps {
|
||||||
|
// header title
|
||||||
|
title: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export class Header extends React.Component<HeaderProps, {}> {
|
||||||
|
render () {
|
||||||
|
const { title, children, className, style } = this.props
|
||||||
|
|
||||||
|
return <header className={classnames('header', className)} style={style}>
|
||||||
|
<h1>{title}</h1>
|
||||||
|
<div className="operations">{children}</div>
|
||||||
|
</header>
|
||||||
|
}
|
||||||
|
}
|
18
src/components/Header/style.scss
Normal file
18
src/components/Header/style.scss
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
@import '~@styles/variables';
|
||||||
|
|
||||||
|
.header {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
|
||||||
|
> h1 {
|
||||||
|
flex-shrink: 0;
|
||||||
|
font-size: 30px;
|
||||||
|
color: $color-primary-dark;
|
||||||
|
font-weight: 500;
|
||||||
|
text-shadow: 0 2px 6px rgba($color: $color-primary-dark, $alpha: 0.4);
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
}
|
1
src/components/index.ts
Normal file
1
src/components/index.ts
Normal file
@ -0,0 +1 @@
|
|||||||
|
export * from './Header'
|
12
src/containers/Proxies/index.tsx
Normal file
12
src/containers/Proxies/index.tsx
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import * as React from 'react'
|
||||||
|
import { Header } from '@components'
|
||||||
|
|
||||||
|
export default class Proxies extends React.Component<{}, {}> {
|
||||||
|
render () {
|
||||||
|
return <div className="container">
|
||||||
|
<Header title="代理" >
|
||||||
|
|
||||||
|
</Header>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
}
|
1
src/containers/Proxies/style.scss
Normal file
1
src/containers/Proxies/style.scss
Normal file
@ -0,0 +1 @@
|
|||||||
|
@import '~@styles/variables';
|
10
src/containers/ProxyGroup/index.tsx
Normal file
10
src/containers/ProxyGroup/index.tsx
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
import * as React from 'react'
|
||||||
|
import { Header } from '@components'
|
||||||
|
|
||||||
|
export default class ProxyGroup extends React.Component<{}, {}> {
|
||||||
|
render () {
|
||||||
|
return <div className="container">
|
||||||
|
<Header title="策略组" />
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
}
|
1
src/containers/ProxyGroup/style.scss
Normal file
1
src/containers/ProxyGroup/style.scss
Normal file
@ -0,0 +1 @@
|
|||||||
|
@import '~@styles/variables';
|
@ -4,6 +4,7 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
flex-shrink: 0;
|
||||||
width: 120px;
|
width: 120px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import { CSSProperties } from 'react'
|
||||||
import { RouteComponentProps } from 'react-router'
|
import { RouteComponentProps } from 'react-router'
|
||||||
import { RouterStore, ConfigStore } from '@stores'
|
import { RouterStore, ConfigStore } from '@stores'
|
||||||
|
|
||||||
@ -10,8 +11,13 @@ export interface BaseRouterProps extends RouteComponentProps<any>, BaseProps {}
|
|||||||
/**
|
/**
|
||||||
* use when component is inject by mobx
|
* use when component is inject by mobx
|
||||||
*/
|
*/
|
||||||
export interface BaseProps {
|
export interface BaseProps extends BaseComponentProps {
|
||||||
styles?: any
|
styles?: any
|
||||||
router?: RouterStore
|
router?: RouterStore
|
||||||
config?: ConfigStore
|
config?: ConfigStore
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface BaseComponentProps {
|
||||||
|
className?: string
|
||||||
|
style?: CSSProperties
|
||||||
|
}
|
||||||
|
@ -24,3 +24,20 @@ body {
|
|||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.page-container {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page {
|
||||||
|
padding: 10px 35px;
|
||||||
|
width: 100%;
|
||||||
|
max-width: 1200px;
|
||||||
|
margin: 0 auto;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
margin: 20px 0;
|
||||||
|
}
|
||||||
|
@ -27,7 +27,7 @@ export default class App extends React.Component<AppProps, {}> {
|
|||||||
return (
|
return (
|
||||||
<div className="app">
|
<div className="app">
|
||||||
<SlideBar routes={routes} />
|
<SlideBar routes={routes} />
|
||||||
<div>
|
<div className="page-container">
|
||||||
{
|
{
|
||||||
routes.map(
|
routes.map(
|
||||||
route => <Route exact={!!route.exact} path={route.path} component={route.component}/>
|
route => <Route exact={!!route.exact} path={route.path} component={route.component}/>
|
||||||
|
@ -1,7 +1,14 @@
|
|||||||
import * as React from 'react'
|
import * as React from 'react'
|
||||||
|
|
||||||
|
// containers
|
||||||
|
import ProxiesContainer from '@containers/Proxies'
|
||||||
|
import ProxyGroupContainer from '@containers/ProxyGroup'
|
||||||
|
|
||||||
export default class Proxies extends React.Component<{}, {}> {
|
export default class Proxies extends React.Component<{}, {}> {
|
||||||
render () {
|
render () {
|
||||||
return 'Proxies'
|
return <div className="page">
|
||||||
|
<ProxiesContainer />
|
||||||
|
<ProxyGroupContainer />
|
||||||
|
</div>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user