后台UI完善,体验优化

前端用户中心功能初始化
This commit is contained in:
2020-04-09 17:03:56 +08:00
parent 9810b08993
commit e1d3af1941
55 changed files with 780 additions and 3233 deletions

View File

@@ -0,0 +1,143 @@
// +----------------------------------------------------------------------
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://www.tensent.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
// +----------------------------------------------------------------------
// 当前资源URL目录
var baseRoot = (function () {
var scripts = document.scripts, src = scripts[0].src;
return src.substring(0, src.lastIndexOf("template")) + 'static/';
})();
var skinRoot = (function () {
var scripts = document.scripts, src = scripts[0].src;
return src.substring(0, src.lastIndexOf("/") - 2);
})();
// 配置参数
require.config({
waitSeconds: 60,
packages: [{
name: 'moment',
location: 'plugins/moment',
main: 'moment'
}
],
baseUrl: baseRoot,
map: {'*': {css: baseRoot + 'plugins/require/require.css.js'}},
paths: {
'sent': ['common/js/sent'],
'form': ['common/js/require-form'],
'upload': 'common/js/require-upload',
'validator': 'common/js/require-validator',
'message': ['plugins/messager/messager'],
'template': ['plugins/art-template/template'],
'webupload': ['plugins/webuploader/webuploader.min'],
//表单组件
'board': ['plugins/board/board.min'],
'droppable': ['plugins/droppable/droppable'],
'tagsinput': ['plugins/tagsinput/bootstrap-tagsinput'],
'select2': ['plugins/select2/select2.full'],
'iconpicker': ['plugins/bootstrap-iconpicker/dist/js/bootstrap-iconpicker.bundle.min'],
// openSource
'layer': ['plugins/layer/layer'],
'base64': ['plugins/jquery/base64.min'],
'cxselect': ['plugins/cxselect/jquery.cxselect.min'],
// jQuery
'jquery': ['plugins/jquery/jquery.min'],
'json': ['plugins/jquery/json2.min'],
'jquery.ztree': ['plugins/ztree/jquery.ztree.all.min'],
'jquery.masonry': ['plugins/jquery/masonry.min'],
'jquery.cookies': ['plugins/jquery/jquery.cookie'],
// bootstrap
'bootstrap': ['plugins/bootstrap/js/bootstrap.min'],
'bootstrap.typeahead': ['plugins/bootstrap/js/bootstrap3-typeahead.min'],
'bootstrap.multiselect': ['plugins/bootstrap-multiselect/bootstrap-multiselect'],
'bootstrap-editable': 'plugins/bootstrap-editable/js/bootstrap-editable.min',
'bootstrap-datetimepicker': 'plugins/bootstrap-datetimepicker/js/bootstrap-datetimepicker.min',
'bootstrap-daterangepicker': 'plugins/bootstrap-daterangepicker/daterangepicker',
'validator-core': 'plugins/nice-validator/jquery.validator',
'validator-lang': 'plugins/nice-validator/local/zh-CN',
'NKeditor': 'plugins/NKeditor/NKeditor-all-min',
//adminlte
'adminlte': ['plugins/adminlte/js/adminlte.min'],
// nanoscroller
'slimscroll': 'plugins/jquery-slimscroll/jquery.slimscroll',
},
shim: {
'message': {deps: ['jquery', 'css!'+'plugins/messager/css/style.css']},
'board': {deps: ['css!'+'plugins/board/board.min.css']},
// open-source
'websocket': {deps: [baseRoot + 'plugins/socket/swfobject.min.js']},
// jquery
'jquery.ztree': {deps: ['css!' + baseRoot + 'plugins/ztree/zTreeStyle/zTreeStyle.css']},
// bootstrap
'bootstrap':{deps: ['jquery']},
'bootstrap.typeahead': {deps: ['bootstrap']},
'bootstrap.multiselect': {deps: ['bootstrap', 'css!' + baseRoot + 'plugins/bootstrap-multiselect/bootstrap-multiselect.css']},
'bootstrap-editable': {deps:['bootstrap', 'css!'+baseRoot+'plugins/bootstrap-editable/css/bootstrap-editable.css'], exports:'$.fn.editable'},
'distpicker': {deps: [baseRoot + 'plugins/distpicker/distpicker.data.js']},
'bootstrap-daterangepicker': ['moment/locale/zh-cn'],
'bootstrap-datetimepicker': ['moment/locale/zh-cn','css!'+baseRoot+'plugins/bootstrap-datetimepicker/css/bootstrap-datetimepicker.min.css'],
'select2': {deps: ['jquery', 'bootstrap', 'css!'+baseRoot+'plugins/select2/select2.css', 'css!'+baseRoot+'plugins/select2/sent_diy.css']},
'board': {deps:['jquery', 'droppable', 'css!'+baseRoot+'plugins/board/board.min.css'], exports: '$.fn.board'},
'droppable': {deps:['jquery'], exports: '$.fn.droppable'},
'tagsinput':{deps: ['jquery', 'bootstrap', 'css!'+baseRoot+'plugins/tagsinput/bootstrap-tagsinput.css'], exports: '$.fn.tagsinput'},
'iconpicker':{deps: ['jquery', 'bootstrap', 'css!'+baseRoot+'plugins/bootstrap-iconpicker/dist/css/bootstrap-iconpicker.min.css'], exports: '$.fn.iconpicker'},
'validator-lang': ['validator-core'],
'slimscroll': {deps: ['jquery'],exports: '$.fn.extend'},
'adminlte': {deps: ['bootstrap', 'slimscroll'],exports: '$.AdminLTE'},
'form': {deps: ['css!'+baseRoot+'common/css/form.css']},
'webupload': {deps: ['jquery', 'css!'+baseRoot+'plugins/webuploader/theme/webuploader.css', 'css!'+baseRoot+'/plugins/webuploader/theme/app.css']},
'layer': {deps: ['jquery', 'css!'+baseRoot+'plugins/layer/theme/default/layer.css']},
'layui':{exports: "layui"}
},
deps: ['json'],
// 开启debug模式不缓存资源
urlArgs: "ver=" + (new Date()).getTime()
});
// 注册jquery到require模块
require(['jquery', 'bootstrap', 'message', 'adminlte'], function ($) {
//初始配置
var Config = requirejs.s.contexts._.config.config;
//将Config渲染到全局
window.Config = Config;
// 配置语言包的路径
var paths = {}; // 避免目录冲突
require.config({paths: paths});
$(function(){
require(['sent'], function(sent){
require([skinRoot + 'js/user.js'], function(backend){
//加载相应模块
if (Config.jsname) {
require([Config.jsname], function (Controller) {
if (Controller.hasOwnProperty(Config.actionname)) {
Controller[Config.actionname]();
} else {
if (Controller.hasOwnProperty("_empty")) {
Controller._empty();
}
}
}, function (e) {
console.error(e);
// 这里可捕获模块加载的错误
});
}
})
})
})
});

View File

@@ -0,0 +1,186 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!-- Tell the browser to be responsive to screen width -->
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
<title>用户中心</title>
<link rel="stylesheet" type="text/css" href="__static__/common/css/main.css?time={:time()}">
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="__static__/common/js/html5shiv.js"></script>
<script src="__static__/common/js/respond.min.js"></script>
<![endif]-->
</head>
<body class="hold-transition skin-blue sidebar-mini layout-top-nav">
<div class="wrapper">
<header class="main-header">
<nav class="navbar navbar-static-top">
<div class="container">
<div class="navbar-header">
<a href="{:url('/user/index/index')}" class="navbar-brand"><b>用户中心</b></a>
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-collapse">
<i class="fa fa-bars"></i>
</button>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse pull-left" id="navbar-collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="{:url('front.Index/index')}">网站首页</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">我的内容 <span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li><a href="#">文章列表</a></li>
<li class="divider"></li>
<li><a href="#">图片列表</a></li>
</ul>
</li>
</ul>
</div>
<!-- /.navbar-collapse -->
<!-- Navbar Right Menu -->
<div class="navbar-custom-menu">
<ul class="nav navbar-nav">
<!-- Messages: style can be found in dropdown.less-->
<li class="dropdown messages-menu">
<!-- Menu toggle button -->
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-envelope-o"></i>
<span class="label label-success">4</span>
</a>
<ul class="dropdown-menu">
<li class="header">You have 4 messages</li>
<li>
<!-- inner menu: contains the messages -->
<ul class="menu">
<li><!-- start message -->
<a href="#">
<div class="pull-left">
<!-- User Image -->
<img src="__plugins__/adminlte/img/user2-160x160.jpg" class="img-circle" alt="User Image">
</div>
<!-- Message title and timestamp -->
<h4>
Support Team
<small><i class="fa fa-clock-o"></i> 5 mins</small>
</h4>
<!-- The message -->
<p>Why not buy a new awesome theme?</p>
</a>
</li>
<!-- end message -->
</ul>
<!-- /.menu -->
</li>
<li class="footer"><a href="#">See All Messages</a></li>
</ul>
</li>
<!-- /.messages-menu -->
<!-- User Account Menu -->
<li class="dropdown user user-menu">
<!-- Menu Toggle Button -->
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<!-- The user image in the navbar-->
<img src="__plugins__/adminlte/img/user2-160x160.jpg" class="user-image" alt="User Image">
<!-- hidden-xs hides the username on small devices so only the image appears. -->
<span class="hidden-xs">{:session('userInfo.nickname')}</span>
</a>
<ul class="dropdown-menu">
<!-- The user image in the menu -->
<li class="user-header">
<img src="__plugins__/adminlte/img/user2-160x160.jpg" class="img-circle" alt="User Image">
<p>
{:session('userInfo.nickname')}
<small>Member since Nov. 2012</small>
</p>
</li>
<!-- Menu Footer-->
<li class="user-footer">
<div class="pull-left">
<a href="{:url('/user/index/profile')}" class="btn btn-default btn-flat">个人资料</a>
</div>
<div class="pull-right">
<a href="{:url('/user/login/logout')}" class="btn btn-default btn-flat">退出</a>
</div>
</li>
</ul>
</li>
</ul>
</div>
<!-- /.navbar-custom-menu -->
</div>
<!-- /.container-fluid -->
</nav>
</header>
<!-- Full Width Column -->
<div class="content-wrapper">
<div class="container">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1>&nbsp;</h1>
<ol class="breadcrumb">
<li><a href="#"><i class="fa fa-dashboard"></i> 用户中心</a></li>
<li><a href="#">首页</a></li>
<li class="active">我的</li>
</ol>
</section>
<!-- Main content -->
<section class="content">
<div class="row">
<div class="col-sm-2" style="background: #222d32; padding: 0;">
<section class="sidebar">
<!-- Sidebar user panel -->
<div class="user-panel">
<div class="pull-left image">
<img src="__plugins__/adminlte/img/user2-160x160.jpg" class="img-circle" alt="User Image">
</div>
<div class="pull-left info">
<p>{:session('userInfo.nickname')}</p>
</div>
</div>
<ul class="sidebar-menu">
<li class="header">基础信息</li>
<li><a href="{:url('/user/index/profile')}"><i class="fa fa-book"></i> <span>个人资料</span></a></li>
<li><a href="{:url('/user/index/repasswd')}"><i class="fa fa-book"></i> <span>修改密码</span></a></li>
<li class="header">我的内容</li>
<li><a href="#"><i class="fa fa-book"></i> <span>我的内容</span></a></li>
<li class="header">我的表单</li>
<li><a href="#"><i class="fa fa-book"></i> <span>我的内容</span></a></li>
</ul>
</section>
</div>
<div class="col-sm-10" style="padding-left: 15px;">
{block name="body"}
<div class="box box-primary">
<div class="box-header with-border">
<h3 class="box-title"></h3>
</div>
<div class="box-body"></div>
</div>
{/block}
</div>
</div>
</section>
</div>
</div>
<!-- /.content-wrapper -->
<footer class="main-footer">
<div class="pull-right hidden-xs">
<b>Version</b> 4.x
</div>
<strong>Copyright &copy; 2013-2020 <a href="https://www.tensent.cn">SentCMS</a>.</strong> All rights
reserved.
</footer>
</div>
<script type="text/javascript">
var require = {
config: {"site": {$config|json_encode|raw}, 'module': 'admin', 'jsname': "{$require['jsname']|default=''}", 'actionname': "{$require['actionname']|default=''}", }
}
</script>
<script src="__plugins__/require/require.js" data-main="__js__/main.js"></script>
</body>
</html>

View File

@@ -0,0 +1 @@
{extend name="base" /}

View File

@@ -0,0 +1 @@
{extend name="base" /}

View File

@@ -0,0 +1 @@
{extend name="base" /}