基础功能

This commit is contained in:
wuyanwen 2019-12-06 08:24:07 +08:00
parent 6b4dd70752
commit 397c8bb7f7
614 changed files with 57215 additions and 216 deletions

View File

@ -93,26 +93,4 @@ abstract class BaseController
return $v->failException(true)->check($data);
}
/**
*
* @time 2019年11月28日
* @param string $template
* @throws \Exception
* @return string
*/
protected function fetch($template = ''): string
{
if (Str::contains($template, '::')) {
[$module, $template] = explode('::', $template);
View::config([
'view_path' => CatchAdmin::getViews()[$module]
]);
return View::fetch($template);
}
return View::fetch($template);
}
}

View File

@ -1,7 +1,7 @@
<?php
namespace app;
use catcher\JsonResponse;
use catcher\CatchResponse;
use think\db\exception\DataNotFoundException;
use think\db\exception\ModelNotFoundException;
use think\exception\Handle;
@ -53,7 +53,7 @@ class ExceptionHandle extends Handle
{
// 添加自定义异常处理机制
if ($request->isAjax()) {
return JsonResponse::fail($e->getMessage(), $e->getCode());
return CatchResponse::fail($e->getMessage(), $e->getCode());
}
// 其他错误交给系统处理
return parent::render($request, $e);

View File

@ -2,39 +2,8 @@
namespace app;
// 应用请求对象类
use app\exceptions\ValidateFailedException;
class Request extends \think\Request
{
/**
* Request constructor.
* @throws \Exception
*/
public function __construct()
{
parent::__construct();
$this->validate();
}
/**
* 初始化验证
*
* @time 2019年11月27日
* @throws \Exception
* @return mixed
*/
protected function validate()
{
if (method_exists($this, 'getValidate')) {
$validate = $this->getValidate();
if (!$validate->check(request()->param())) {
throw new ValidateFailedException($validate->getError());
}
return true;
}
return true;
}
}

View File

@ -11,7 +11,7 @@ return [
'LogLevel' => [],
'LogWrite' => [],
'RouteLoaded' => [
\app\event\LoadModuleRoutes::class,
catcher\event\LoadModuleRoutes::class,
],
],

View File

@ -1,25 +0,0 @@
<?php
declare (strict_types = 1);
namespace app\event;
use catcher\CatchAdmin;
use think\Route;
class LoadModuleRoutes
{
/**
* 处理
*
* @time 2019年11月29日
* @return void
*/
public function handle(): void
{
$router = app(Route::class);
$router->group(function () use ($router) {
include CatchAdmin::getRoutes();
});
}
}

View File

@ -1,7 +0,0 @@
<?php
namespace app\exceptions;
class LoginFailedException extends \Exception
{
protected $code = 10002;
}

View File

@ -1,7 +0,0 @@
<?php
namespace app\exceptions;
class ValidateFailedException extends \Exception
{
protected $code = 10001;
}

View File

@ -1,22 +0,0 @@
<?php
/**
* 模块 view path
*
*/
use think\helper\Arr;
if (!function_exists('getModuleViewPath()')) {
function getModuleViewPath($module) {
if (file_exists($views = app()->getRuntimePath() . 'module' . DIRECTORY_SEPARATOR . 'view.php')) {
$views = include $views;
return $views[$module];
} else {
}
return '';
}
}

View File

@ -1,12 +1,13 @@
<?php
namespace catchAdmin\index\controller;
use app\BaseController;
use catcher\base\BaseController;
class Index extends BaseController
{
public function index(): string
{
return $this->fetch('index::index');
return $this->fetch();
}
}

View File

@ -4,10 +4,10 @@
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link href="./assets/images/favicon.ico" rel="icon">
<title>EasyWeb后台开发框架</title>
<link rel="stylesheet" href="/static/assets/libs/layui/css/layui.css"/>
<link rel="stylesheet" href="/static/assets/module/admin.css?v=315"/>
<link href="__CATCH_ADMIN_IMAGES__/favicon.ico" rel="icon">
<title>CatchAdmin 后台管理系统</title>
<link rel="stylesheet" href="__CATCH_ADMIN_LIBS__/layui/css/layui.css"/>
<link rel="stylesheet" href="__CATCH_ADMIN_MODULE__/admin.css?v=315"/>
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
@ -18,8 +18,8 @@
<!-- 头部 -->
<div class="layui-header">
<div class="layui-logo">
<img src="/static/assets/images/logo.png"/>
<cite>&nbsp;EasyWeb Iframe</cite>
<img src="__CATCH_ADMIN_IMAGES__/logo.png"/>
<cite>CatchAdmin</cite>
</div>
<ul class="layui-nav layui-layout-left">
<li class="layui-nav-item" lay-unselect>
@ -44,7 +44,7 @@
</li>
<li class="layui-nav-item" lay-unselect>
<a>
<img src="assets/images/head.png" class="layui-nav-img">
<img src="__CATCH_ADMIN_IMAGES__/head.png" class="layui-nav-img">
<cite>管理员</cite>
</a>
<dl class="layui-nav-child">
@ -81,9 +81,9 @@
</dl>
</li>
<li class="layui-nav-item">
<a><i class="layui-icon layui-icon-set"></i>&emsp;<cite>系统管理</cite></a>
<a><i class="layui-icon layui-icon-set"></i>&emsp;<cite>权限管理</cite></a>
<dl class="layui-nav-child">
<dd><a lay-href="page/system/user.html">用户管理</a></dd>
<dd><a lay-href="{:url('user')}">用户管理</a></dd>
<dd><a lay-href="page/system/role.html">角色管理</a></dd>
<dd><a lay-href="page/system/authorities.html">菜单管理</a></dd>
<dd><a lay-href="page/system/loginRecord.html">登录日志</a></dd>
@ -233,8 +233,8 @@
</div>
<!-- js部分 -->
<script type="text/javascript" src="/static/assets/libs/layui/layui.js"></script>
<script type="text/javascript" src="/static/assets/js/common.js?v=315"></script>
<script type="text/javascript" src="__CATCH_ADMIN_LIBS__/layui/layui.js"></script>
<script type="text/javascript" src="__CATCH_ADMIN_JS__/common.js?v=315"></script>
<script>
layui.use(['index'], function () {
var $ = layui.jquery;

View File

@ -1,9 +1,9 @@
<?php
namespace catchAdmin\login\controller;
use app\BaseController;
use catchAdmin\login\Auth;
use catchAdmin\login\request\LoginRequest;
use catcher\base\BaseController;
class Index extends BaseController
{
@ -14,9 +14,9 @@ class Index extends BaseController
* @throws \Exception
* @return string
*/
public function index()
public function index(): string
{
return $this->fetch('login::index');
return $this->fetch();
}
/**

View File

@ -1,19 +1,23 @@
<?php
namespace catchAdmin\login\request;
use app\Request;
use catchAdmin\login\validate\LoginValidate;
use catcher\base\BaseRequest;
class LoginRequest extends Request
class LoginRequest extends BaseRequest
{
/**
*
* @time 2019年11月27日
* @return string
*/
protected function getValidate()
protected function rules(): array
{
// TODO: Implement getValidate() method.
return new LoginValidate();
// TODO: Implement rules() method.
return [
'name|用户名' => 'require|max:25',
'password|密码' => 'require',
'captcha|验证码' => 'require|captcha'
];
}
protected function message(): array
{
// TODO: Implement message() method.
return [];
}
}

View File

@ -2,13 +2,17 @@
namespace catchAdmin\login\validate;
use think\Validate;
use catcher\base\BaseValidate;
class LoginValidate extends Validate
class LoginValidate extends BaseValidate
{
protected $rule = [
'name|用户名' => 'require|max:25',
'password|密码' => 'require',
'captcha|验证码' => 'require|captcha'
];
protected function getRules(): array
{
// TODO: Implement getRules() method.
return [
'name|用户名' => 'require|max:25',
'password|密码' => 'require',
'captcha|验证码' => 'require|captcha'
];
}
}

View File

@ -5,9 +5,9 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<title>登录</title>
<link rel="stylesheet" href="/static/assets/libs/layui/css/layui.css"/>
<link rel="stylesheet" href="/static/assets/css/login.css?v=315">
<link rel="stylesheet" href="/static/assets/module/admin.css?v=315">
<link rel="stylesheet" href="__CATCH_ADMIN_LIBS__/layui/css/layui.css"/>
<link rel="stylesheet" href="__CATCH_ADMIN_CSS__/login.css?v=315">
<link rel="stylesheet" href="__CATCH_ADMIN_MODULE__/admin.css?v=315">
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
@ -91,8 +91,8 @@
</div>
<!-- js部分 -->
<script type="text/javascript" src="/static/assets/libs/layui/layui.js"></script>
<script type="text/javascript" src="/static/assets/js/common.js?v=315"></script>
<script type="text/javascript" src="__CATCH_ADMIN_LIBS__/layui/layui.js"></script>
<script type="text/javascript" src="__CATCH_ADMIN_JS__/common.js?v=315"></script>
<script>
layui.use(['layer', 'form'], function () {
var $ = layui.jquery;

View File

@ -1,10 +0,0 @@
<?php
// This file is automatically generated at:2019-11-29 08:20:23
declare (strict_types = 1);
return array (
'module\\index\\IndexService' => false,
'module\\install\\InstallService' => false,
'module\\login\\LoginService' => false,
'module\\permissions\\PermissionService' => false,
'module\\user\\UserService' => false,
);

View File

@ -1,33 +0,0 @@
<?php
namespace catchAdmin\user\controller;
use app\BaseController;
class Index extends BaseController
{
public function index()
{
}
public function create()
{
}
public function save()
{}
public function read()
{}
public function edit()
{}
public function update()
{}
public function delete()
{}
}

View File

@ -0,0 +1,91 @@
<?php
namespace catchAdmin\user\controller;
use catchAdmin\user\model\Users;
use catchAdmin\user\request\CreateRequest;
use catchAdmin\user\request\UpdateRequest;
use catcher\base\BaseController;
use catcher\CatchForm;
use catcher\CatchResponse;
class User extends BaseController
{
protected $user;
public function __construct(Users $user)
{
$this->user = $user;
}
/**
*
* @time 2019年12月04日
* @throws \Exception
* @return string
*/
public function index()
{
$form = new CatchForm();
$form->text('name', '用户名')->id('id')->class('class');
$form->select('names', '性别')->options(['请选择性别', '男', '女'])->default(1);
//$form->select('namess', '用户名');
$form->render();
return $this->fetch([
'form' => $form->render()
]);
}
/**
*
* @time 2019年12月04日
* @param CreateRequest $request
* @return \think\response\Json
*/
public function create(CreateRequest $request)
{
return CatchResponse::success($this->user->storeBy($request->post()));
}
public function save()
{}
/**
*
* @time 2019年12月04日
* @param $id
* @return \think\response\Json
*/
public function read($id)
{
return CatchResponse::success($this->user->findBy($id));
}
public function edit()
{}
/**
*
* @time 2019年12月04日
* @param $id
* @param UpdateRequest $request
* @return \think\response\Json
*/
public function update($id, UpdateRequest $request)
{
return CatchResponse::success($this->user->updateBy($id, $request->post()));
}
/**
*
* @time 2019年12月04日
* @param $id
* @return \think\response\Json
*/
public function delete($id)
{
return CatchResponse::success($this->user->deleteBy($id));
}
}

View File

@ -1,9 +1,9 @@
<?php
namespace catchAdmin\user\model;
use catcher\Model;
use catcher\base\BaseModel;
class Users extends Model
class Users extends BaseModel
{
protected $name = 'users';

View File

@ -0,0 +1,15 @@
<?php
namespace catchAdmin\user\request;
use catchAdmin\user\validate\CreateValidate;
use catcher\base\BaseRequest;
class CreateRequest extends BaseRequest
{
protected function getValidate()
{
// TODO: Implement getValidate() method.
return new CreateValidate();
}
}

View File

@ -0,0 +1,14 @@
<?php
namespace catchAdmin\user\request;
use catchAdmin\user\validate\UpdateValidate;
use catcher\base\BaseRequest;
class UpdateRequest extends BaseRequest
{
protected function getValidate()
{
// TODO: Implement getValidate() method.
return new UpdateValidate();
}
}

View File

@ -1,3 +1,3 @@
<?php
$router->resource('user', '\catchAdmin\user\controller\Index');
$router->resource('user', '\catchAdmin\user\controller\User');

View File

@ -0,0 +1,17 @@
<?php
namespace catchAdmin\user\validate;
use catcher\base\BaseValidate;
class CreateValidate extends BaseValidate
{
protected function getRules(): array
{
// TODO: Implement getRules() method.
return [
'username|用户名' => 'require|max:20',
'password|密码' => 'require|max:20',
'email|邮箱' => 'require|email'
];
}
}

View File

@ -0,0 +1,18 @@
<?php
namespace catchAdmin\user\validate;
use catchAdmin\user\model\Users;
use catcher\base\BaseValidate;
class UpdateValidate extends BaseValidate
{
protected function getRules(): array
{
// TODO: Implement getRules() method.
return [
'username|用户名' => 'require|max:20',
'password|密码' => 'require|max:20',
'email|邮箱' => 'require|email|unique:'.Users::class.',email,'.request()->route('user').',id',
];
}
}

View File

@ -1,10 +1,190 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{extend name="../../../view/layout"}
{block name="title"}用户管理{/block}
{block name="search"}
<div class="layui-form toolbar">
<div class="layui-form-item">
{php}echo $form{/php}
<div class="layui-inline">
<label class="layui-form-label w-auto">&emsp;号:</label>
<div class="layui-input-inline mr0">
<input name="username" class="layui-input" type="text" placeholder="输入账号"/>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label w-auto">用户名:</label>
<div class="layui-input-inline mr0">
<input name="nickName" class="layui-input" type="text" placeholder="输入用户名"/>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label w-auto">&emsp;别:</label>
<div class="layui-input-inline mr0">
<select name="sex">
<option value="">选择性别</option>
<option value="男"></option>
<option value="女"></option>
</select>
</div>
</div>
<div class="layui-inline" style="padding-right: 110px;">
<button class="layui-btn icon-btn" lay-filter="formSubSearchUser" lay-submit>
<i class="layui-icon">&#xe615;</i>搜索
</button>
<button id="btnAddUser" class="layui-btn icon-btn"><i class="layui-icon">&#xe654;</i>添加</button>
</div>
</div>
</div>
{/block}
{block name="table"}
<table class="layui-table" id="tableUser" lay-filter="tableUser"></table>
{/block}
{block name="script"}
<script>
layui.use(['layer', 'form', 'table', 'util', 'admin'], function () {
var $ = layui.jquery;
var layer = layui.layer;
var form = layui.form;
var table = layui.table;
var util = layui.util;
var admin = layui.admin;
</body>
</html>
// 渲染表格
var insTb = table.render({
elem: '#tableUser',
url: '../../json/user.json',
page: true,
toolbar: true,
cellMinWidth: 100,
cols: [[
{type: 'numbers', title: '#'},
{field: 'username', sort: true, title: '账号'},
{field: 'nickName', sort: true, title: '用户名'},
{field: 'sex', sort: true, title: '性别'},
{
field: 'createTime', sort: true, templet: function (d) {
return util.toDateString(d.createTime);
}, title: '创建时间'
},
{field: 'state', sort: true, templet: '#tableStateUser', title: '状态'},
{align: 'center', toolbar: '#tableBarUser', title: '操作', minWidth: 200}
]]
});
// 添加
$('#btnAddUser').click(function () {
showEditModel();
});
// 搜索
form.on('submit(formSubSearchUser)', function (data) {
insTb.reload({where: data.field}, 'data');
});
// 工具条点击事件
table.on('tool(tableUser)', function (obj) {
var data = obj.data;
var layEvent = obj.event;
if (layEvent === 'edit') { // 修改
showEditModel(data);
} else if (layEvent === 'del') { // 删除
doDel(data.userId, data.nickName);
} else if (layEvent === 'reset') { // 重置密码
resetPsw(data.userId, data.nickName);
}
});
// 显示表单弹窗
function showEditModel(mUser) {
admin.open({
type: 1,
title: (mUser ? '修改' : '添加') + '用户',
content: $('#modelUser').html(),
success: function (layero, dIndex) {
$(layero).children('.layui-layer-content').css('overflow', 'visible');
var url = mUser ? '../../json/ok.json' : '../../json/ok.json';
mUser && (mUser.roleId = mUser.roles[0].roleId);
// 回显数据
form.val('modelUserForm', mUser);
// 表单提交事件
form.on('submit(modelSubmitUser)', function (data) {
layer.load(2);
$.get(url, data.field, function (res) {
layer.closeAll('loading');
if (res.code == 200) {
layer.close(dIndex);
layer.msg(res.msg, {icon: 1});
insTb.reload({}, 'data');
} else {
layer.msg(res.msg, {icon: 2});
}
}, 'json');
return false;
});
}
});
}
// 删除
function doDel(userId, nickName) {
layer.confirm('确定要删除“' + nickName + '”吗?', {
skin: 'layui-layer-admin',
shade: .1
}, function (i) {
layer.close(i);
layer.load(2);
$.get('../../json/ok.json', {
userId: userId
}, function (res) {
layer.closeAll('loading');
if (res.code == 200) {
layer.msg(res.msg, {icon: 1});
insTb.reload({}, 'data');
} else {
layer.msg(res.msg, {icon: 2});
}
}, 'json');
});
}
// 修改用户状态
form.on('switch(ckStateUser)', function (obj) {
layer.load(2);
$.get('../../json/ok.json', {
userId: obj.elem.value,
state: obj.elem.checked ? 0 : 1
}, function (res) {
layer.closeAll('loading');
if (res.code == 200) {
layer.msg(res.msg, {icon: 1});
} else {
layer.msg(res.msg, {icon: 2});
$(obj.elem).prop('checked', !obj.elem.checked);
form.render('checkbox');
}
}, 'json');
});
// 重置密码
function resetPsw(userId, nickName) {
layer.confirm('确定要重置“' + nickName + '”的登录密码吗?', {
skin: 'layui-layer-admin',
shade: .1
}, function (i) {
layer.close(i);
layer.load(2);
$.get('../../json/ok.json', {
userId: userId
}, function (res) {
layer.closeAll('loading');
if (res.code == 200) {
layer.msg(res.msg, {icon: 1});
} else {
layer.msg(res.msg, {icon: 2});
}
}, 'json');
});
}
});
</script>
{/block}

View File

@ -28,9 +28,7 @@
"topthink/think-trace":"^1.0"
},
"autoload": {
"files": [
"catchAdmin/helper.php"
],
"files": [],
"psr-4": {
"app\\": "app",
"catchAdmin\\": "catchAdmin",

View File

@ -22,4 +22,13 @@ return [
'taglib_begin' => '{',
// 标签库标签结束标记
'taglib_end' => '}',
// 替换
'tpl_replace_string' => [
'__CATCH_ADMIN__'=>'/catch-admin',
'__CATCH_ADMIN_MODULE__' => '/catch-admin/assets/module',
'__CATCH_ADMIN_JS__' => '/catch-admin/assets/js',
'__CATCH_ADMIN_CSS__' => '/catch-admin/assets/css',
'__CATCH_ADMIN_IMAGES__' => '/catch-admin/assets/images',
'__CATCH_ADMIN_LIBS__' => '/catch-admin/assets/libs',
]
];

2
extend/.gitignore vendored
View File

@ -1,2 +0,0 @@
*
!.gitignore

View File

@ -0,0 +1,34 @@
/** 错误页面样式 */
.error-page {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
text-align: center;
}
.error-page-img {
max-width: 100%;
max-height: 300px;
}
.error-page-info {
display: inline-block;
text-align: center;
vertical-align: middle;
padding-left: 30px;
}
.error-page-info h1 {
color: #434e59;
font-size: 72px;
font-weight: 600;
margin-bottom: 10px;
}
.error-page-info-desc {
color: #777;
font-size: 20px;
line-height: 28px;
margin-bottom: 16px;
}

View File

@ -0,0 +1,165 @@
/** 登录页面样式 */
body {
background-image: url(".._login2.png");
background-position: center 110px;
background-repeat: no-repeat;
background-size: 100%;
background-color: #f0f2f5;
}
.login-wrapper, body, html {
height: 100%
}
.login-wrapper {
overflow: auto;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
.login-body {
padding: 10px 10px 40px 10px;
}
.login-body > .layui-card {
max-width: 360px;
margin: 0 auto;
}
.login-body .layui-card-header {
font-weight: 700;
font-size: 15px;
}
.login-body .layui-form-pane .layui-form-label {
width: 48px;
overflow: visible;
}
.login-body .layui-form-pane .layui-input-block {
margin-left: 48px;
}
.login-body .login-captcha {
width: 100%;
cursor: pointer;
height: 38px;
border: 1px solid #e6e6e6;
border-radius: 2px;
box-sizing: border-box;
}
.login-body .login-other > * {
display: inline-block;
vertical-align: middle;
margin-right: 10px;
font-size: 14px;
}
.login-body .login-other .layui-icon {
position: relative;
top: 2px;
font-size: 26px;
}
.login-body .login-other a:hover {
opacity: .8;
}
.layui-icon-login-qq {
color: #3492ED
}
.layui-icon-login-wechat {
color: #4DAF29
}
.layui-icon-login-weibo {
color: #CF1900
}
/** 底部样式 */
.login-footer {
text-align: center;
line-height: 30px;
color: rgba(255, 255, 255, 0.7) !important;
padding-bottom: 20px;
}
.login-footer span {
padding: 0 5px
}
.login-footer a {
padding: 0 5px;
color: rgba(255, 255, 255, 0.7) !important;
}
.login-footer a:hover {
color: rgba(255, 255, 255, 0.4) !important;
}
/** 头部样式 */
.login-header {
font-family: Myriad Pro, Helvetica Neue, Arial, Helvetica, sans-serif;
font-size: 20px;
font-weight: 600;
color: rgba(255, 255, 255, 0.85) !important;
padding: 10px;
}
.login-header img {
height: 40px;
}
/** 移动设备样式 */
@media screen and (min-height: 590px) {
.login-footer {
position: absolute;
bottom: 0;
width: 100%;
}
}
@media screen and (min-height: 670px) {
.login-body {
padding: 110px 10px 40px 10px;
}
}
/** 辅助样式 */
.layui-link {
color: #029789 !important;
}
.layui-link:hover {
opacity: .8;
}
.pull-right {
float: right;
}
.inline-block {
display: inline-block;
}
.login-header {
color: rgba(0, 0, 0, .85) !important;
}
.login-footer {
color: rgba(0, 0, 0, 0.7) !important;
}
.login-footer a {
color: rgba(0, 0, 0, 0.7) !important;
}
.login-footer a:hover {
color: rgba(0, 0, 0, 0.4) !important;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -0,0 +1,52 @@
/** EasyWeb iframe v3.1.5 date:2019-10-05 License By http://easyweb.vip */
// 以下代码是配置layui扩展模块的目录每个页面都需要引入
layui.config({
version: '315',
base: getProjectUrl() + 'assets/module/'
}).extend({
formSelects: 'formSelects/formSelects-v4',
treetable: 'treetable-lay/treetable',
dropdown: 'dropdown/dropdown',
notice: 'notice/notice',
step: 'step-lay/step',
dtree: 'dtree/dtree',
citypicker: 'city-picker/city-picker',
tableSelect: 'tableSelect/tableSelect',
Cropper: 'Cropper/Cropper',
zTree: 'zTree/zTree',
introJs: 'introJs/introJs',
fileChoose: 'fileChoose/fileChoose',
tagsInput: 'tagsInput/tagsInput',
Drag: 'Drag/Drag',
CKEDITOR: 'ckeditor/ckeditor',
Split: 'Split/Split',
cascader: 'cascader/cascader'
}).use(['layer', 'admin'], function () {
var $ = layui.jquery;
var layer = layui.layer;
var admin = layui.admin;
// 移除loading动画
setTimeout(function () {
admin.removeLoading();
}, window == top ? 600 : 100);
});
// 获取当前项目的根路径通过获取layui.js全路径截取assets之前的地址
function getProjectUrl() {
var layuiDir = layui.cache.dir;
if (!layuiDir) {
var js = document.scripts, last = js.length - 1, src;
for (var i = last; i > 0; i--) {
if (js[i].readyState === 'interactive') {
src = js[i].src;
break;
}
}
var jsPath = src || js[last].src;
layuiDir = jsPath.substring(0, jsPath.lastIndexOf('/') + 1);
}
return layuiDir.substring(0, layuiDir.indexOf('assets'));
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,79 @@
var myEchartsTheme = {
color: ["#009688", "#1E9FFF", "#5FB878", "#FFB980", "#D87A80", "#8d98b3", "#e5cf0d", "#97b552", "#95706d", "#dc69aa", "#07a2a4", "#9a7fd1", "#588dd5", "#f5994e", "#c05050", "#59678c", "#c9ab00", "#7eb00a", "#6f5553", "#c14089"],
title: {textStyle: {fontWeight: "normal", color: "#666"}},
dataRange: {itemWidth: 15, color: ["#009688", "#e0ffff"]},
toolbox: {color: ["#1e90ff", "#1e90ff", "#1e90ff", "#1e90ff"], effectiveColor: "#ff4500"},
tooltip: {
backgroundColor: "rgba(50,50,50,0.5)",
axisPointer: {
type: "line",
lineStyle: {color: "#009688"},
crossStyle: {color: "#008acd"},
shadowStyle: {color: "rgba(200,200,200,0.2)"}
}
},
dataZoom: {dataBackgroundColor: "#efefff", fillerColor: "rgba(182,162,222,0.2)", handleColor: "#008acd"},
grid: {borderColor: "#eee"},
categoryAxis: {
axisLine: {lineStyle: {color: "#009688"}},
axisTick: {show: !1},
splitLine: {lineStyle: {color: ["#eee"]}}
},
valueAxis: {
axisLine: {lineStyle: {color: "#009688"}},
splitArea: {show: !0, areaStyle: {color: ["rgba(250,250,250,0.1)", "rgba(200,200,200,0.1)"]}},
splitLine: {lineStyle: {color: ["#eee"]}}
},
polar: {
axisLine: {lineStyle: {color: "#ddd"}},
splitArea: {show: !0, areaStyle: {color: ["rgba(250,250,250,0.2)", "rgba(200,200,200,0.2)"]}},
splitLine: {lineStyle: {color: "#ddd"}}
},
timeline: {
lineStyle: {color: "#009688"},
controlStyle: {normal: {color: "#009688"}, emphasis: {color: "#009688"}},
symbol: "emptyCircle",
symbolSize: 3
},
bar: {itemStyle: {normal: {barBorderRadius: 2}, emphasis: {barBorderRadius: 2}}},
line: {smooth: !0, symbol: "emptyCircle", symbolSize: 3},
k: {
itemStyle: {
normal: {
color: "#d87a80",
color0: "#2ec7c9",
lineStyle: {color: "#d87a80", color0: "#2ec7c9"}
}
}
},
scatter: {symbol: "circle", symbolSize: 4},
radar: {symbol: "emptyCircle", symbolSize: 3},
map: {
itemStyle: {
normal: {areaStyle: {color: "#ddd"}, label: {textStyle: {color: "#d87a80"}}},
emphasis: {areaStyle: {color: "#fe994e"}}
}
},
force: {itemStyle: {normal: {linkStyle: {color: "#1e90ff"}}}},
chord: {
itemStyle: {
normal: {
borderWidth: 1,
borderColor: "rgba(128, 128, 128, 0.5)",
chordStyle: {lineStyle: {color: "rgba(128, 128, 128, 0.5)"}}
},
emphasis: {
borderWidth: 1,
borderColor: "rgba(128, 128, 128, 0.5)",
chordStyle: {lineStyle: {color: "rgba(128, 128, 128, 0.5)"}}
}
}
},
gauge: {
axisLine: {lineStyle: {color: [[.2, "#2ec7c9"], [.8, "#5ab1ef"], [1, "#d87a80"]], width: 10}},
axisTick: {splitNumber: 10, length: 15, lineStyle: {color: "auto"}},
splitLine: {length: 22, lineStyle: {color: "auto"}},
pointer: {width: 5}
},
textStyle: {fontFamily: "微软雅黑, Arial, Verdana, sans-serif"}
};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,2 @@
/** layui-v2.5.5 MIT License By https://www.layui.com */
html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-h3,.layui-code-view{position:relative;font-size:12px}.layui-code-view{display:block;margin:10px 0;padding:0;border:1px solid #e2e2e2;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New}.layui-code-h3{padding:0 10px;height:32px;line-height:32px;border-bottom:1px solid #e2e2e2}.layui-code-h3 a{position:absolute;right:10px;top:0;color:#999}.layui-code-view .layui-code-ol{position:relative;overflow:auto}.layui-code-view .layui-code-ol li{position:relative;margin-left:45px;line-height:20px;padding:0 5px;border-left:1px solid #e2e2e2;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view pre{margin:0}.layui-code-notepad{border:1px solid #0C0C0C;border-left-color:#3F3F3F;background-color:#0C0C0C;color:#C2BE9E}.layui-code-notepad .layui-code-h3{border-bottom:none}.layui-code-notepad .layui-code-ol li{background-color:#3F3F3F;border-left:none}

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 701 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 277 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Some files were not shown because too many files have changed in this diff Show More