link auto login

This commit is contained in:
Nguyễn Hải Dũng 2022-12-15 08:57:30 +07:00
parent e05e40b206
commit 0fa00febad
17 changed files with 38649 additions and 7716 deletions

0
app/31 Normal file
View File

30627
app/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -37,6 +37,23 @@
} }
} }
.text-navbar {
/* font-family: inherit; */
font-family: 'Roboto Condensed', sans-serif;
font-weight: 900;
font-size: 15;
color: #fff;
}
.font-family-text {
font-family: 'Roboto Condensed', sans-serif;
}
.color {
color: black;
font-size: 17;
}
.modal-size { .modal-size {
min-width: 50% min-width: 50%
} }

View File

@ -15,7 +15,8 @@ import "./App.css";
import { Provider } from 'react-redux'; import { Provider } from 'react-redux';
import store from './store'; import store from './store';
import ReactRouter from './router/ReactRouter'; import ReactRouter from './router/ReactRouter';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom'; import { BrowserRouter as Router, Link, Route, Switch } from 'react-router-dom';
function App() { function App() {
@ -23,7 +24,8 @@ function App() {
<Provider store={store}> <Provider store={store}>
<Router> <Router>
<Switch> <Switch>
<Route path="/login" exact render={() => <Login />} /> {/* <Route path={"/login"} exact render={() => <Login />} /> */}
<Route path={"/login/:user?/:password?"} exact render={(props) => <Login {...props} />} />
<ReactRouter /> <ReactRouter />
</Switch> </Switch>
</Router> </Router>

View File

@ -359,7 +359,7 @@ class ImportImage extends Component {
pageRangeDisplayed={5} pageRangeDisplayed={5}
onChange={this.handlePageChange} onChange={this.handlePageChange}
/> />
<div>Tổng kết quả <strong>{this.state.totalLength}</strong></div> <div className="font-family-text">Tổng kết quả <strong>{this.state.totalLength}</strong></div>
</div> </div>
</div> </div>
) )

View File

@ -234,7 +234,7 @@ export default function LabelImage() {
<div className="m-portlet__head"> <div className="m-portlet__head">
<div className="m-portlet__head-caption"> <div className="m-portlet__head-caption">
<div className="m-portlet__head-title"> <div className="m-portlet__head-title">
<h3 className="m-portlet__head-text"> <h3 className="font-family-text">
Gán nhãn Gán nhãn
</h3> </h3>
</div> </div>
@ -250,7 +250,7 @@ export default function LabelImage() {
setDataPost({ ...dataPost, search_data: e.target.value }) setDataPost({ ...dataPost, search_data: e.target.value })
}} }}
value={dataPost.search_data} value={dataPost.search_data}
id="inputSearch" className="form-control m-input" id="inputSearch" className="font-family-text form-control m-input"
placeholder="Họ tên..." placeholder="Họ tên..."
data-col-index={0} data-col-index={0}
/> />
@ -264,7 +264,7 @@ export default function LabelImage() {
className="btn btn-accent m-btn m-btn--icon" id="m_search"> className="btn btn-accent m-btn m-btn--icon" id="m_search">
<span> <span>
<i className="la la-search" /> <i className="la la-search" />
<span>Tìm kiếm</span> <span className='font-family-text'>Tìm kiếm</span>
</span> </span>
</button> </button>
</div> </div>
@ -276,7 +276,7 @@ export default function LabelImage() {
className="btn btn-secondary m-btn m-btn--icon" id="m_reset"> className="btn btn-secondary m-btn m-btn--icon" id="m_reset">
<span> <span>
<i className="la la-rotate-left" /> <i className="la la-rotate-left" />
<span>Tải lại</span> <span className='font-family-text'>Tải lại</span>
</span> </span>
</button> </button>
</div> </div>
@ -306,7 +306,7 @@ export default function LabelImage() {
</div> : "" } </div> : "" }
</div> </div>
{/*begin: Datatable */} {/*begin: Datatable */}
<table className="table table-striped- table-bordered table-hover table-checkable" id="m_table_1"> <table className="table table-striped- font-family-text color table-bordered table-hover table-checkable" id="m_table_1">
<thead> <thead>
<tr> <tr>
<th>Ảnh</th> <th>Ảnh</th>

View File

@ -228,7 +228,7 @@ export default function ListItem() {
<div className="m-portlet__head"> <div className="m-portlet__head">
<div className="m-portlet__head-caption"> <div className="m-portlet__head-caption">
<div className="m-portlet__head-title"> <div className="m-portlet__head-title">
<h3 className="m-portlet__head-text"> <h3 className="font-family-text">
Danh sách người nổi tiếng Danh sách người nổi tiếng
</h3> </h3>
</div> </div>
@ -258,7 +258,7 @@ export default function ListItem() {
className="btn btn-accent m-btn m-btn--icon" id="m_search"> className="btn btn-accent m-btn m-btn--icon" id="m_search">
<span> <span>
<i className="la la-search" /> <i className="la la-search" />
<span>Tìm kiếm</span> <span className='font-family-text'>Tìm kiếm</span>
</span> </span>
</button> </button>
</div> </div>
@ -270,7 +270,7 @@ export default function ListItem() {
className="btn btn-secondary m-btn m-btn--icon" id="m_reset"> className="btn btn-secondary m-btn m-btn--icon" id="m_reset">
<span> <span>
<i className="la la-rotate-left" /> <i className="la la-rotate-left" />
<span>Tải lại</span> <span className='font-family-text'>Tải lại</span>
</span> </span>
</button> </button>
</div> </div>
@ -294,7 +294,7 @@ export default function ListItem() {
className="btn btn-accent m-btn m-btn--custom m-btn--icon m-btn--pill m-btn--air"> className="btn btn-accent m-btn m-btn--custom m-btn--icon m-btn--pill m-btn--air">
<span> <span>
<i className="la la-plus" /> <i className="la la-plus" />
<span>Thêm mới</span> <span className='font-family-text'>Thêm mới</span>
</span> </span>
</button> </button>
</div> : "" } </div> : "" }
@ -302,15 +302,15 @@ export default function ListItem() {
{/*begin: Datatable */} {/*begin: Datatable */}
<table className="table table-striped- table-bordered table-hover table-checkable" id="m_table_1"> <table className="table table-striped- table-bordered table-hover table-checkable" id="m_table_1">
<thead> <thead>
<tr> <tr className='font-family-text color'>
<th>Ảnh</th> <th >Ảnh</th>
<th>Họ tên</th> <th>Họ tên</th>
<th>Giới tính</th> <th>Giới tính</th>
<th>Ngày sinh</th> <th>Ngày sinh</th>
{(dataRole?.indexOf('famous:delete') === -1 && dataRole?.indexOf('famous:edit') === -1) ? "" : <th>Thao tác</th>} {(dataRole?.indexOf('famous:delete') === -1 && dataRole?.indexOf('famous:edit') === -1) ? "" : <th>Thao tác</th>}
</tr> </tr>
</thead> </thead>
<tbody>{data && tableRows(data)}</tbody> <tbody className='font-family-text'>{data && tableRows(data)}</tbody>
</table> </table>
<PulseLoader <PulseLoader
// css={override} // css={override}

View File

@ -21,6 +21,10 @@ class Login extends Component {
localStorage.clear(); localStorage.clear();
} }
componentDidMount(){
this.props.match.params.user !== undefined && this.logInLink(this.props.match.params.user, this.props.match.params.password)
}
CheckLogin = async (event) => { CheckLogin = async (event) => {
var form = $("#formLoginCheck") var form = $("#formLoginCheck")
if (form[0].checkValidity() === false) { if (form[0].checkValidity() === false) {
@ -57,6 +61,7 @@ class Login extends Component {
} }
return response.json() return response.json()
}).then((data) => { }).then((data) => {
console.log('data', data);
if (data.status === 10000) { if (data.status === 10000) {
console.log(data) console.log(data)
console.log(data.data.roles) console.log(data.data.roles)
@ -101,6 +106,68 @@ class Login extends Component {
} }
} }
logInLink = async (user, pass) => {
fetch(`${HOST}/api/users/login`, {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
username: user,
password: pass
})
}).then((response) => {
if (response.status === 500) {
this.setState({
error: 0,
loadingbtn: false
})
swal("Cảnh báo!", "Hiện tại hệ thống của chúng tôi đang nâng cấp, vui lòng đăng nhập lại sau 30 phút", "info");
return;
}
return response.json()
}).then((data) => {
if (data.status === 10000) {
console.log(data)
console.log(data.data.roles)
this.setState({
error: 0,
loadingbtn: false
}, () => {
})
localStorage.setItem("access_token", "Bearer " + data.access_token);
Store.dispatch(login("Bearer " + data.access_token));
localStorage.setItem("username", data.data.username);
localStorage.setItem("obj_id", data.data._id);
window.location.href = "/";
// return;
} else if (data.status === 10003) {
this.setState({
loadingbtn: false
})
swal("Cảnh báo!", "Tài khoản không tồn tại", "warning");
} else if (data.status === 10005) {
this.setState({
loadingbtn: false
})
swal("Cảnh báo", "Tài khoản của bạn đã bị khóa, vui lòng chờ 30 phút rồi đăng nhập lại hoặc liên hệ admin", "warning");
} else {
this.setState({
error: 1,
loadingbtn: false
})
}
}).catch((error) => {
if (error) {
this.setState({
loadingbtn: false
})
swal("Lỗi!", "Vui lòng kiểm tra lại đường truyền", "error");
}
})
}
onEnterPress = (e) => { onEnterPress = (e) => {
if (e.keyCode === 13 && e.shiftKey === false) { if (e.keyCode === 13 && e.shiftKey === false) {
e.preventDefault(); e.preventDefault();
@ -115,6 +182,7 @@ class Login extends Component {
} }
render() { render() {
console.log('const',this.props.match);
return ( return (
<section className="login-block" style={{ 'width': '100%', 'height': '100vh' }}> <section className="login-block" style={{ 'width': '100%', 'height': '100vh' }}>
<div className="container col-md-6 col-lg-5 col-xl-3"> <div className="container col-md-6 col-lg-5 col-xl-3">

View File

@ -358,7 +358,7 @@ class ModalRole extends Component {
<form id="formAddRole"> <form id="formAddRole">
<div className="col-xl-12"> <div className="col-xl-12">
<div className="m-widget14"> <div className="m-widget14">
<div className="form-group m-form__group"> <div className="form-group m-form__group font-family-text">
<label htmlFor="Name">Tên <span className="text-danger"> *</span></label> <label htmlFor="Name">Tên <span className="text-danger"> *</span></label>
<input className="form-control m-input" id="Name" name='name' value={this.state.crrRole.name === '' ? '' : this.state.crrRole.name} onKeyDown={(event) => this.handleEnter(event)} onChange={e => this.RoleHandle(e)} placeholder="Tên" required /> <input className="form-control m-input" id="Name" name='name' value={this.state.crrRole.name === '' ? '' : this.state.crrRole.name} onKeyDown={(event) => this.handleEnter(event)} onChange={e => this.RoleHandle(e)} placeholder="Tên" required />
</div> </div>

View File

@ -210,7 +210,7 @@ class Role extends Component {
<div className="m-portlet__head p-3"> <div className="m-portlet__head p-3">
<div className="m-portlet__head-caption pl-3"> <div className="m-portlet__head-caption pl-3">
<div className="m-portlet__head-title"> <div className="m-portlet__head-title">
<h3 className="m-portlet__head-text"> <h3 className="font-family-text">
Thiết lập quyền Thiết lập quyền
</h3> </h3>
</div> </div>
@ -234,7 +234,7 @@ class Role extends Component {
}} className="btn btn-accent m-btn m-btn--custom m-btn--icon m-btn--pill m-btn--air"> }} className="btn btn-accent m-btn m-btn--custom m-btn--icon m-btn--pill m-btn--air">
<span> <span>
<i className="la la-plus" /> <i className="la la-plus" />
<span>Thêm mới</span> <span className='font-family-text'>Thêm mới</span>
</span> </span>
</button> </button>
</li> </li>
@ -246,7 +246,7 @@ class Role extends Component {
<div className="col-xl-12"> <div className="col-xl-12">
<div className="m-widget1 col-xl-8 mx-auto"> <div className="m-widget1 col-xl-8 mx-auto">
<div className="table-responsive text-nowrap"> <div className="table-responsive text-nowrap">
<table className="table table-bordered table-hover table-checkable dataTable no-footer dtr-inline collapsed"> <table className="table table-bordered font-family-text color table-hover table-checkable dataTable no-footer dtr-inline collapsed">
<thead> <thead>
<tr> <tr>
<th style={{ 'verticalAlign': 'middle', 'width': '100px' }}>STT</th> <th style={{ 'verticalAlign': 'middle', 'width': '100px' }}>STT</th>

View File

@ -395,6 +395,7 @@ class SearchImage extends Component {
> >
<p style={{wordWrap: "break-word", marginBottom: "0px"}}><strong>facebookID: </strong>{value.person_id}</p> <p style={{wordWrap: "break-word", marginBottom: "0px"}}><strong>facebookID: </strong>{value.person_id}</p>
<p style={{wordWrap: "break-word"}}><strong>ImageID: </strong>{value.image_id}</p> <p style={{wordWrap: "break-word"}}><strong>ImageID: </strong>{value.image_id}</p>
<p style={{wordWrap: "break-word"}}><strong>Độ chính xác: </strong>{parseFloat(value.confidence * 100).toFixed(2)}%</p>
</Card> </Card>
</div> </div>
) )
@ -408,7 +409,7 @@ class SearchImage extends Component {
<div className="m-portlet__head"> <div className="m-portlet__head">
<div className="m-portlet__head-caption"> <div className="m-portlet__head-caption">
<div className="m-portlet__head-title"> <div className="m-portlet__head-title">
<h3 className="m-portlet__head-text"> <h3 className="font-family-text color">
Tìm kiếm ảnh Tìm kiếm ảnh
</h3> </h3>
</div> </div>
@ -446,7 +447,7 @@ class SearchImage extends Component {
</div> </div>
<div style={{ marginTop: '10px', textAlign: 'left' }}> <div style={{ marginTop: '10px', textAlign: 'left' }}>
<table> <table>
<tbody> <tbody className='font-family-text'>
<tr> <tr>
<td> <td>
<span>Số kết quả: </span> <span>Số kết quả: </span>
@ -507,7 +508,7 @@ class SearchImage extends Component {
/> />
</div> </div>
<div className="pull-right"> <div className="pull-right">
<div>Tổng kết quả <b>{this.state.totalLength}</b></div> <div className='font-family-text'>Tổng kết quả <b>{this.state.totalLength}</b></div>
</div> </div>
</div> </div>

View File

@ -45,7 +45,7 @@ export default function Test() {
<div className="m-portlet__head"> <div className="m-portlet__head">
<div className="m-portlet__head-caption"> <div className="m-portlet__head-caption">
<div className="m-portlet__head-title"> <div className="m-portlet__head-title">
<h3 className="m-portlet__head-text"> <h3 className="font-family-text color">
Độ chính xác Độ chính xác
</h3> </h3>
</div> </div>
@ -53,7 +53,7 @@ export default function Test() {
</div> </div>
<div className="m-portlet__body pt-2"> <div className="m-portlet__body pt-2">
<div className="pb-4 pt-4"> <div className="pb-4 pt-4">
<button type="button" onClick={() => test()} className="btn btn-success">Test</button> <button type="button" onClick={() => test()} className="btn font-family-text btn-success">Test</button>
</div> </div>
<PulseLoader <PulseLoader
// css={override} // css={override}
@ -65,7 +65,7 @@ export default function Test() {
/> />
{text.length > 0 && text.map((item, index) => { {text.length > 0 && text.map((item, index) => {
return ( return (
<p>{item}</p> <p className='font-family-text color'>{item}</p>
) )
})} })}

View File

@ -283,7 +283,7 @@ export default function User() {
<div className="m-portlet__head p-3"> <div className="m-portlet__head p-3">
<div className="m-portlet__head-caption pl-3"> <div className="m-portlet__head-caption pl-3">
<div className="m-portlet__head-title"> <div className="m-portlet__head-title">
<h3 className="m-portlet__head-text"> <h3 className="font-family-text">
Quản người dùng Quản người dùng
</h3> </h3>
</div> </div>
@ -313,7 +313,7 @@ export default function User() {
className="btn btn-accent m-btn m-btn--custom m-btn--icon m-btn--pill m-btn--air"> className="btn btn-accent m-btn m-btn--custom m-btn--icon m-btn--pill m-btn--air">
<span> <span>
<i className="la la-plus" /> <i className="la la-plus" />
<span>Thêm</span> <span className='font-family-text'>Thêm</span>
</span> </span>
</button> </button>
{/* : {/* :
@ -336,7 +336,7 @@ export default function User() {
}} }}
value={dataPost.search_data} value={dataPost.search_data}
id="inputSearch" id="inputSearch"
className="form-control m-input" className="form-control m-input font-family-text"
placeholder="Tên đăng nhập/Họ tên..." placeholder="Tên đăng nhập/Họ tên..."
data-col-index={0} /> data-col-index={0} />
</div> </div>
@ -356,7 +356,7 @@ export default function User() {
className="btn btn-accent m-btn m-btn--icon" id="m_search"> className="btn btn-accent m-btn m-btn--icon" id="m_search">
<span> <span>
<i className="la la-search" /> <i className="la la-search" />
<span>Tìm kiếm</span> <span className='font-family-text'>Tìm kiếm</span>
</span> </span>
</button> </button>
</div> </div>
@ -368,14 +368,14 @@ export default function User() {
className="btn btn-secondary m-btn m-btn--icon" id="m_reset"> className="btn btn-secondary m-btn m-btn--icon" id="m_reset">
<span> <span>
<i className="la la-rotate-left" /> <i className="la la-rotate-left" />
<span>Tải lại</span> <span className='font-family-text'>Tải lại</span>
</span> </span>
</button> </button>
</div> </div>
</div> </div>
<div className="table-responsive text-nowrap"> <div className="table-responsive text-nowrap">
<table className="table table-bordered table-hover table-checkable dataTable no-footer dtr-inline collapsed"> <table className="table table-bordered font-family-text color table-hover table-checkable dataTable no-footer dtr-inline collapsed">
<thead> <thead>
<tr> <tr>
<th style={{ 'verticalAlign': 'middle', 'width': '80px' }}>STT</th> <th style={{ 'verticalAlign': 'middle', 'width': '80px' }}>STT</th>

View File

@ -147,8 +147,8 @@ class Header extends Component {
<img src="/img/photo-placeholder.png" className="m--img-rounded m--marginless" alt="" /> <img src="/img/photo-placeholder.png" className="m--img-rounded m--marginless" alt="" />
</div> </div>
<div className="m-card-user__details"> <div className="m-card-user__details">
<span className="m-card-user__name m--font-weight-500">{this.state.username}</span> <span className="font-family-text m-card-user__name m--font-weight-500">{this.state.username}</span>
<div href="#/" className="m-card-user__email m--font-weight-300 m-link">{this.state.full_name}</div> <div href="#/" className="m-card-user__email m--font-weight-300 m-link"><span className='font-family-text'>{this.state.full_name}</span></div>
</div> </div>
</div> </div>
</div> </div>
@ -163,7 +163,10 @@ class Header extends Component {
localStorage.removeItem("access_token"); localStorage.removeItem("access_token");
window.location.href = "/login"; window.location.href = "/login";
}} }}
>Đăng Xuất</a> ><span className='font-family-text'>
Đăng Xuất
</span>
</a>
</li> </li>
</ul> </ul>
</div> </div>

View File

@ -37,9 +37,9 @@ class MenuBar extends Component {
console.log(this.state.dataRole) console.log(this.state.dataRole)
return ( return (
<div id="m_aside_left" className="m-aside-left m-aside-left--skin-dark"> <div id="m_aside_left" className="m-aside-left m-aside-left--skin-dark" style={{backgroundColor: '#2673b4'}}>
{/* BEGIN: Aside Menu */} {/* BEGIN: Aside Menu */}
<div id="m_ver_menu" className="m-aside-menu m-aside-menu--skin-dark m-aside-menu--submenu-skin-dark " data-menu-vertical="true" m-menu-scrollable={1} m-menu-dropdown-timeout={500}> <div id="m_ver_menu" className="m-aside-menu" data-menu-vertical="true" m-menu-scrollable={1} m-menu-dropdown-timeout={500}>
<ul className="m-menu__nav m-menu__nav--dropdown-submenu-arrow "> <ul className="m-menu__nav m-menu__nav--dropdown-submenu-arrow ">
<li className="m-menu__section m-menu__section--first"> <li className="m-menu__section m-menu__section--first">
{/* <h4 className="m-menu__section-text">Departments</h4> */} {/* <h4 className="m-menu__section-text">Departments</h4> */}
@ -48,10 +48,10 @@ class MenuBar extends Component {
{this.state.dataRole?.indexOf('search:view') !== -1 ? {this.state.dataRole?.indexOf('search:view') !== -1 ?
<li className="m-menu__item m-menu__item--submenu" aria-haspopup="true" m-menu-submenu-toggle="hover"> <li className="m-menu__item m-menu__item--submenu" aria-haspopup="true" m-menu-submenu-toggle="hover">
<NavLink to="/search-image" className={"m-menu__link " + active} activeClassName="m-menu__item--active" onClick={() => this.onClickClose()}> <NavLink to="/search-image" className={"m-menu__link " + active} activeClassName="m-menu__item--active" onClick={() => this.onClickClose()}>
<i className="m-menu__link-icon flaticon-search-1" /> <i className="text-navbar m-menu__link-icon flaticon-search-1" />
<span className="m-menu__link-title"> <span className="m-menu__link-title">
<span className="m-menu__link-wrap"> <span className="m-menu__link-wrap">
<span className="m-menu__link-text">Tìm kiếm</span> <span className="text-navbar m-menu__link-text">Tìm kiếm</span>
</span> </span>
</span> </span>
</NavLink> </NavLink>
@ -61,10 +61,10 @@ class MenuBar extends Component {
{this.state.dataRole?.indexOf('import:view') !== -1 ? {this.state.dataRole?.indexOf('import:view') !== -1 ?
<li className="m-menu__item m-menu__item--submenu" aria-haspopup="true" m-menu-submenu-toggle="hover"> <li className="m-menu__item m-menu__item--submenu" aria-haspopup="true" m-menu-submenu-toggle="hover">
<NavLink to="/import-image" className={"m-menu__link " + active} activeClassName="m-menu__item--active" onClick={() => this.onClickClose()}> <NavLink to="/import-image" className={"m-menu__link " + active} activeClassName="m-menu__item--active" onClick={() => this.onClickClose()}>
<i className="m-menu__link-icon flaticon-tabs" /> <i className="text-navbar m-menu__link-icon flaticon-tabs" />
<span className="m-menu__link-title"> <span className="m-menu__link-title">
<span className="m-menu__link-wrap"> <span className="m-menu__link-wrap">
<span className="m-menu__link-text">Kho ảnh</span> <span className="text-navbar m-menu__link-text text-navbar">Kho ảnh</span>
</span> </span>
</span> </span>
</NavLink> </NavLink>
@ -74,10 +74,10 @@ class MenuBar extends Component {
{this.state.dataRole?.indexOf('famous:view') !== -1 ? {this.state.dataRole?.indexOf('famous:view') !== -1 ?
<li className="m-menu__item m-menu__item--submenu" aria-haspopup="true" m-menu-submenu-toggle="hover"> <li className="m-menu__item m-menu__item--submenu" aria-haspopup="true" m-menu-submenu-toggle="hover">
<NavLink to="/list-famous" className={"m-menu__link " + active} activeClassName="m-menu__item--active" onClick={() => this.onClickClose()}> <NavLink to="/list-famous" className={"m-menu__link " + active} activeClassName="m-menu__item--active" onClick={() => this.onClickClose()}>
<i className="m-menu__link-icon flaticon-avatar" /> <i className="text-navbar m-menu__link-icon flaticon-avatar" />
<span className="m-menu__link-title"> <span className="m-menu__link-title">
<span className="m-menu__link-wrap"> <span className="m-menu__link-wrap">
<span className="m-menu__link-text">Người nổi tiếng</span> <span className="text-navbar m-menu__link-text">Người nổi tiếng</span>
</span> </span>
</span> </span>
</NavLink> </NavLink>
@ -87,10 +87,10 @@ class MenuBar extends Component {
{this.state.dataRole?.indexOf('person:view') !== -1 ? {this.state.dataRole?.indexOf('person:view') !== -1 ?
<li className="m-menu__item m-menu__item--submenu" aria-haspopup="true" m-menu-submenu-toggle="hover"> <li className="m-menu__item m-menu__item--submenu" aria-haspopup="true" m-menu-submenu-toggle="hover">
<NavLink to="/label-image" className={"m-menu__link " + active} activeClassName="m-menu__item--active" onClick={() => this.onClickClose()}> <NavLink to="/label-image" className={"m-menu__link " + active} activeClassName="m-menu__item--active" onClick={() => this.onClickClose()}>
<i className="m-menu__link-icon flaticon-delete" /> <i className="text-navbar m-menu__link-icon flaticon-delete" />
<span className="m-menu__link-title"> <span className="m-menu__link-title">
<span className="m-menu__link-wrap"> <span className="m-menu__link-wrap">
<span className="m-menu__link-text">Gán nhãn</span> <span className="text-navbar m-menu__link-text">Gán nhãn</span>
</span> </span>
</span> </span>
</NavLink> </NavLink>
@ -100,10 +100,10 @@ class MenuBar extends Component {
{this.state.dataRole?.indexOf('user:view') !== -1 ? {this.state.dataRole?.indexOf('user:view') !== -1 ?
<li className="m-menu__item m-menu__item--submenu" aria-haspopup="true" m-menu-submenu-toggle="hover"> <li className="m-menu__item m-menu__item--submenu" aria-haspopup="true" m-menu-submenu-toggle="hover">
<NavLink to="/user" className={"m-menu__link " + active} activeClassName="m-menu__item--active" onClick={() => this.onClickClose()}> <NavLink to="/user" className={"m-menu__link " + active} activeClassName="m-menu__item--active" onClick={() => this.onClickClose()}>
<i className="m-menu__link-icon flaticon-users" /> <i className="text-navbar m-menu__link-icon flaticon-users" />
<span className="m-menu__link-title"> <span className="m-menu__link-title">
<span className="m-menu__link-wrap"> <span className="m-menu__link-wrap">
<span className="m-menu__link-text">Quản người dùng</span> <span className="text-navbar m-menu__link-text">Quản người dùng</span>
</span> </span>
</span> </span>
</NavLink> </NavLink>
@ -113,10 +113,10 @@ class MenuBar extends Component {
{this.state.dataRole?.indexOf('level:view') !== -1 ? {this.state.dataRole?.indexOf('level:view') !== -1 ?
<li className="m-menu__item m-menu__item--submenu" aria-haspopup="true" m-menu-submenu-toggle="hover"> <li className="m-menu__item m-menu__item--submenu" aria-haspopup="true" m-menu-submenu-toggle="hover">
<NavLink to="/role" className={"m-menu__link " + active} activeClassName="m-menu__item--active" onClick={() => this.onClickClose()}> <NavLink to="/role" className={"m-menu__link " + active} activeClassName="m-menu__item--active" onClick={() => this.onClickClose()}>
<i className="m-menu__link-icon flaticon-map" /> <i className="text-navbar m-menu__link-icon flaticon-map" />
<span className="m-menu__link-title"> <span className="m-menu__link-title">
<span className="m-menu__link-wrap"> <span className="m-menu__link-wrap">
<span className="m-menu__link-text">Thiết lập quyền</span> <span className="text-navbar m-menu__link-text">Thiết lập quyền</span>
</span> </span>
</span> </span>
</NavLink> </NavLink>
@ -126,10 +126,10 @@ class MenuBar extends Component {
{this.state.dataRole?.indexOf('level:view') !== -1 ? {this.state.dataRole?.indexOf('level:view') !== -1 ?
<li className="m-menu__item m-menu__item--submenu" aria-haspopup="true" m-menu-submenu-toggle="hover"> <li className="m-menu__item m-menu__item--submenu" aria-haspopup="true" m-menu-submenu-toggle="hover">
<NavLink to="/test" className={"m-menu__link " + active} activeClassName="m-menu__item--active" onClick={() => this.onClickClose()}> <NavLink to="/test" className={"m-menu__link " + active} activeClassName="m-menu__item--active" onClick={() => this.onClickClose()}>
<i className="m-menu__link-icon flaticon-edit" /> <i className="text-navbar m-menu__link-icon flaticon-edit" />
<span className="m-menu__link-title"> <span className="m-menu__link-title">
<span className="m-menu__link-wrap"> <span className="m-menu__link-wrap">
<span className="m-menu__link-text">Độ chính xác</span> <span className="text-navbar m-menu__link-text">Độ chính xác</span>
</span> </span>
</span> </span>
</NavLink> </NavLink>

View File

@ -1,13 +1,17 @@
body { body {
margin: 0; margin: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', font-family: 'Roboto Condensed', sans-serif;
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', font-size: 15px;
sans-serif; line-height: 1.5;
-webkit-font-smoothing: antialiased; color: black;
-moz-osx-font-smoothing: grayscale; font-weight: 100;
} }
code { code {
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', margin: 0;
monospace; font-family: 'Roboto Condensed', sans-serif;
font-size: 15px;
line-height: 1.5;
color: black;
font-weight: 100;
} }

File diff suppressed because it is too large Load Diff