新增开发日志,修改cms描述,api请求接口新增操作日志,新增能jsonp返回安装结果

This commit is contained in:
hdm 2021-08-24 10:36:33 +08:00
parent 4c4b65cdae
commit c0835e52e4
12 changed files with 356 additions and 124 deletions

View File

@ -17,6 +17,7 @@
- 勾股CMS是一套基于ThinkPHP6 + Layui + MySql打造的轻量级、高性能极速后台开发框架。
- 系统后台各管理模块,一目了然,操作简单;通用型的后台权限管理框架,前后台用户的操作记录覆盖跟踪,紧随潮流、极低门槛、开箱即用。
- 系统易于功能扩展,代码维护,方便二次开发,帮助开发者简单高效降低二次开发的成本,满足专注业务深度开发的需求。
- 可以快速基于此系统进行ThinkPHP6的快速开发免去每次都写一次后台基础的痛苦。
- 可去前台版权,真正意义的永久免费,可商用的后台系统。
### 目录结构
@ -81,6 +82,62 @@ www 系统部署目录(或者子目录)
├─think 命令行入口文件
~~~
### 主要功能
- 后台登录验证
- 系统配置
- 系统操作日志管理
- 用户(组)管理
- 用户(组)权限
- 功能管理(同是也是后台菜单来源)
- 导航设置
- 网站地图
- 轮播广告
- TAG关键字管理
- 文件上传
- 数据备份/还原
- 文章功能
- 用户管理
- 用户操作日志
- 前台注册/登录
具体功能树如下:
~~~
系统
├─系统管理
│ ├─系统配置
│ ├─功能菜单
│ ├─功能节点
│ ├─权限角色
│ ├─管 理 员
│ ├─操作日志
│ ├─数据备份
│ ├─系统配置
│ ├─数据还原
├─基础数据
│ ├─导航设置
│ ├─网站地图
│ ├─轮播广告
│ ├─SEO关键字
│ ├─搜索关键词
├─平台用户
│ ├─用户列表
│ ├─操作记录
│ ├─操作日志
├─资讯中心
│ ├─文章分类
│ ├─文章列表
├─...
~~~
### 安装教程
一、勾股CMS推荐你使用阿里云和腾讯云服务器。

View File

@ -51,10 +51,10 @@
<div class="bottom">
<form class="layui-form" id="gougu-login">
<div class="layui-form-item">
<input type="text" name="username" lay-verify="required" placeholder="请输入账户" lay-reqText="请输入账户" autocomplete="off" class="layui-input">
<input type="text" name="username" lay-verify="required" value="gougucms" placeholder="请输入账户" lay-reqText="请输入账户" autocomplete="off" class="layui-input">
</div>
<div class="layui-form-item">
<input type="password" name="password" lay-verify="required" placeholder="请输入密码" lay-reqText="请输入密码" autocomplete="off" class="layui-input">
<input type="password" name="password" lay-verify="required" value="gougucms" placeholder="请输入密码" lay-reqText="请输入密码" autocomplete="off" class="layui-input">
</div>
<div class="layui-form-item">
<div class="layui-input-inline" style="width:188px;">

View File

@ -1,4 +1,9 @@
<?php
/**
* @copyright Copyright (c) 2021 勾股工作室
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.gougucms.com
*/
//读取文章分类列表
function get_article_cate()
{

View File

@ -19,7 +19,7 @@ class Index extends BaseController
* 控制器中间件 [登录、注册 不需要鉴权]
* @var array
*/
protected $middleware = [
protected $middleware = [
Auth::class => ['except' => ['index','login','reg'] ]
];
@ -31,6 +31,7 @@ class Index extends BaseController
{
$list = Db::name('Article')->select();
$seo = get_system_config('web');
add_user_log('api', '首页');
$this->apiSuccess('请求成功',['list' => $list,'seo' => $seo]);
}
@ -76,6 +77,7 @@ class Index extends BaseController
//获取jwt的句柄
$jwtAuth = JwtAuth::getInstance();
$token = $jwtAuth->setUid($user['id'])->encode()->getToken();
add_user_log('api', '登录');
$this->apiSuccess('登录成功',['token' => $token]);
}
}
@ -110,6 +112,7 @@ class Index extends BaseController
$char = mb_substr($param['username'], 0, 1, 'utf-8');
$uid = Db::name('User')->strict(false)->field(true)->insertGetId($param);
if($uid){
add_user_log('api', '注册');
$this->apiSuccess('注册成功');
}else{
$this->apiError('注册失败');
@ -131,6 +134,7 @@ class Index extends BaseController
$jwtAuth = JwtAuth::getInstance();
$uid = $jwtAuth->getUid();
$userInfo = Db::name('User')->where(['id' => $uid])->find();
add_user_log('api', '测试页面');
$this->apiSuccess('请求成功',['list' => $list,'user' => $userInfo]);
}

View File

@ -273,6 +273,122 @@ function get_file($id)
}
//获取当前登录用户的信息
function get_login_user($key = "")
{
$session_user = get_config('app.session_user');
if (\think\facade\Session::has($session_user)) {
$gougu_user = \think\facade\Session::get($session_user);
if (!empty($key)) {
if (isset($gougu_user[$key])) {
return $gougu_user[$key];
} else {
return '';
}
} else {
return $gougu_user;
}
} else {
return '';
}
}
/**
* 客户操作日志
* @param string $type 操作类型 login reg add edit view delete down join sign play order pay
* @param string $param_str 操作内容
* @param int $param_id 操作内容id
* @param array $param 提交的参数
*/
function add_user_log($type, $param_str = '', $param_id = 0, $param = [])
{
$request = request();
switch ($type) {
case 'login':
$title = '登录';
break;
case 'reg':
$title = '注册';
break;
case 'add':
$title = '新增';
break;
case 'edit':
$title = '编辑';
break;
case 'view':
$title = '查看';
break;
case 'delete':
$title = '删除';
break;
case 'down':
$title = '下载';
break;
case 'join':
$title = '报名';
break;
case 'sign':
$title = '签到';
break;
case 'play':
$title = '播放';
break;
case 'order':
$title = '下单';
break;
case 'pay':
$title = '支付';
break;
case 'api':
$title = 'API请求';
break;
case 'install':
$title = '安装';
break;
default:
$title = '未知';
break;
}
if ($type == 'login') {
$login_user = \think\facade\Db::name('user')->where(array('id' => $param_id))->find();
if ($login_user['nickname'] == '') {
$login_user['nickname'] = $login_user['name'];
}
if ($login_user['nickname'] == '') {
$login_user['nickname'] = $login_user['username'];
}
} else {
$login_user = get_login_user();
if (empty($login_user)) {
$login_user = [];
$login_user['id'] = 0;
$login_user['nickname'] = '游客';
} else {
if ($login_user['nickname'] == '') {
$login_user['nickname'] = $login_user['username'];
}
}
}
$content = $login_user['nickname'] . '在' . date('Y-m-d H:i:s') . '执行了' . $title . '操作';
if ($param_str != '') {
$content = $login_user['nickname'] . '在' . date('Y-m-d H:i:s') . $title . '了' . $param_str;
}
$data = [];
$data['uid'] = $login_user['id'];
$data['nickname'] = $login_user['nickname'];
$data['type'] = $type;
$data['title'] = $title;
$data['content'] = $content;
$data['param_id'] = $param_id;
$data['param'] = json_encode($param);
$data['module'] = \think\facade\App::initialize()->http->getName();
$data['controller'] = app('request')->controller();
$data['function'] = app('request')->action();
$data['ip'] = $request->ip();
$data['create_time'] = time();
\think\facade\Db::name('user_log')->strict(false)->field(true)->insert($data);
}
/**
* 判断是否是手机浏览器
* @return bool

View File

@ -6,114 +6,6 @@
*/
// 这是home公共文件
//获取当前登录用户的信息
function get_login_user($key = "")
{
$session_user = get_config('app.session_user');
if (\think\facade\Session::has($session_user)) {
$gougu_user = \think\facade\Session::get($session_user);
if (!empty($key)) {
if (isset($gougu_user[$key])) {
return $gougu_user[$key];
} else {
return '';
}
} else {
return $gougu_user;
}
} else {
return '';
}
}
/**
* 客户操作日志
* @param string $type 操作类型 login add edit view delete,pay
* @param int $param_id 操作类型
* @param array $param 提交的参数
*/
function add_user_log($type, $param_str = '', $param_id = 0, $param = [])
{
$request = request();
switch ($type) {
case 'login':
$title = '登录';
break;
case 'reg':
$title = '注册';
break;
case 'add':
$title = '新增';
break;
case 'edit':
$title = '编辑';
break;
case 'view':
$title = '查看';
break;
case 'delete':
$title = '删除';
break;
case 'down':
$title = '下载';
break;
case 'join':
$title = '报名';
break;
case 'sign':
$title = '签到';
break;
case 'play':
$title = '播放';
break;
case 'order':
$title = '下单';
break;
case 'pay':
$title = '支付';
break;
default:
$title = '未知';
break;
}
if ($type == 'login') {
$login_user = \think\facade\Db::name('user')->where(array('id' => $param_id))->find();
if ($login_user['nickname'] == '') {
$login_user['nickname'] = $login_user['name'];
}
if ($login_user['nickname'] == '') {
$login_user['nickname'] = $login_user['username'];
}
} else {
$login_user = get_login_user();
if (empty($login_user)) {
$login_user = [];
$login_user['id'] = 0;
$login_user['nickname'] = '游客';
} else {
if ($login_user['nickname'] == '') {
$login_user['nickname'] = $login_user['username'];
}
}
}
$content = $login_user['nickname'] . '在' . date('Y-m-d H:i:s') . '执行了' . $title . '操作';
if ($param_str != '') {
$content = $login_user['nickname'] . '在' . date('Y-m-d H:i:s') . $title . '了' . $param_str;
}
$data = [];
$data['uid'] = $login_user['id'];
$data['nickname'] = $login_user['nickname'];
$data['type'] = $type;
$data['title'] = $title;
$data['content'] = $content;
$data['param_id'] = $param_id;
$data['param'] = json_encode($param);
$data['module'] = \think\facade\App::initialize()->http->getName();
$data['controller'] = app('request')->controller();
$data['function'] = app('request')->action();
$data['ip'] = $request->ip();
$data['create_time'] = time();
\think\facade\Db::name('user_log')->strict(false)->field(true)->insert($data);
}
//读取导航列表,用于前台
function get_navs($name)

View File

@ -21,6 +21,12 @@ class Index extends BaseController
$count = \think\facade\Db::name('UserLog')->where(array('type' => 'down'))->count();
return View('',['version'=>$version,'count'=>$count]);
}
public function logs()
{
add_user_log('view', '开发日志');
return View('');
}
public function down()
{

View File

@ -30,6 +30,17 @@ class Login
public function errorshow()
{
return View();
}
//系统安装提交
function install_ajax()
{
add_user_log('install', '系统');
if (!empty($_GET['callback'])) {
return $_GET['callback'] . '("install ok!")'; // jsonp
}
else{
return to_assign(0, 'install ok!');
}
}
//提交登录
public function login_submit()

View File

@ -3,24 +3,24 @@
<div class="footer-top-box clearfix">
<div class="l footer-link">
<dl>
<dt class="dt-title"><a href="#">勾股CMS</a></dt>
<dd><a href="#">开发手册</a></dd>
<dd><a href="#">进阶指南</a></dd>
<dd><a href="#">下载中心</a></dd>
<dd><a href="#">在线演示</a></dd>
<dt class="dt-title"><a href="/">勾股CMS</a></dt>
<dd><a href="/home/index/logs.html">开发手册</a></dd>
<dd><a href="/home/index/logs.html">进阶指南</a></dd>
<dd><a href="/home/index/down.html">下载中心</a></dd>
<dd><a href="/admin">在线演示</a></dd>
</dl>
</div>
<div class="l footer-link">
<dl>
<dt class="dt-title"><a href="#">使用帮助</a></dt>
<dd><a href="#">在线社区</a></dd>
<dd><a href="#">帮助中心</a></dd>
<dd><a href="#">常见问题</a></dd>
<dt class="dt-title"><a href="/home/index/logs.html">使用帮助</a></dt>
<dd><a href="/home/index/logs.html">在线社区</a></dd>
<dd><a href="/home/index/logs.html">帮助中心</a></dd>
<dd><a href="/home/index/logs.html">常见问题</a></dd>
</dl>
</div>
<div class="l footer-link">
<dl>
<dt class="dt-title"><a href="#">第三方支持</a></dt>
<dt class="dt-title"><a href="http://www.baidu.com">第三方支持</a></dt>
<dd><a href="https://www.kancloud.cn/manual/thinkphp6_0" target="_blank">ThinkPHP6.0开发手册</a></dd>
<dd><a href="https://www.layui.com/doc/" target="_blank">Layui开发文档</a></dd>
<dd><a href="https://fly.layui.com/extend/" target="_blank">Layui扩展组件</a></dd>
@ -38,7 +38,7 @@
<div class="r footer-about">
<dl>
<dt>联系方式</dt>
<dd>电子邮箱:327725426@qq.com</dd>
<dd>电子邮箱:hdm58@qq.com</dd>
<dd>QQ交流群24641076</dd>
<dd><a href="https://github.com/" target="_blank" rel="nofollow" class="site-fork">GitHub</a></dd>
<dd><a href="https://gitee.com/gougucms/gougucms" target="_blank" rel="nofollow" class="site-fork">Gitee</a></dd>

View File

@ -1,6 +1,6 @@
{extend name="common/base"/}
{block name="style"}
<link rel="stylesheet" href="{__CSS__}/index.css?v={:get_system_config('web','version')}" media="all">
<link rel="stylesheet" href="{__CSS__}/index.css?v={:get_system_config('web','version')}">
{/block}
<!-- 主体 -->
{block name="body"}
@ -18,7 +18,7 @@
</div>
<div class="cms-version">
<span>当前版本:<i>{$version}</i></span>
<span><a href="#" rel="nofollow" target="_blank">更新日志</a></span>
<span><a href="/home/index/logs.html" rel="nofollow" target="_blank">更新日志</a></span>
<span>下载量:<i>{$count}</i></span>
</div>
<div class="cms-other">

View File

@ -0,0 +1,131 @@
{extend name="common/base"/}
<!-- 样式 -->
{block name="style"}
<link rel="stylesheet" href="/static/layui/css/layui.css?v=1.0.2">
{/block}
<!-- /样式 -->
<!-- 主体 -->
{block name="body"}
{include file="common/header" nav='info' /}
<div style="background-color: #fff;padding:30px; width:1150px; margin:80px auto 30px;">
<div class="site-content">
<h1 style="height:60px; font-size:24px">更新日志</h1>
<ul class="layui-timeline">
<li class="layui-timeline-item">
<a name="2-4-x"> </a>
<i class="layui-icon layui-timeline-axis">&#xe63f;</i>
<div class="layui-timeline-content layui-text">
<div class="layui-timeline-title">
<h2>1.0.8</h2>
</div>
<blockquote class="layui-elem-quote">
<p>引入jwt包新增API接口模块可以帮助开发者快速进行接口开发。</p>
</blockquote>
<ul>
<li>
<a name="1.0.8"> </a>
<h3>v1.2021.07.28 <span class="layui-badge-rim">2021-07-28</span></h3>
<ul>
<li>引入jwt包新增API接口模块</li>
<li>系统配置中新增公安备案字段配置</li>
<li>优化前后台用户的操作日志记录</li>
<li>修复未登录的情况下报错的bug</li>
<li>修复后台权限验证bug</li>
<li>优化,规范模板文件</li>
</ul>
</li>
</ul>
</div>
</li>
<li class="layui-timeline-item">
<a name="2-4-x"> </a>
<i class="layui-icon layui-timeline-axis">&#xe63f;</i>
<div class="layui-timeline-content layui-text">
<div class="layui-timeline-title">
<h2>1.0.5</h2>
</div>
<blockquote class="layui-elem-quote">
<p>由于系统使用特殊字符作为表情,数据库字符集整体调整为 utf8mb4。</p>
</blockquote>
<ul>
<li>
<a name="1.0.5"> </a>
<h3>v1.2021.06.15 <span class="layui-badge-rim">2021-06-15</span></h3>
<ul>
<li>修改自动生成头像在php严格模式下的bug</li>
<li>修改新增节点时字段错误的bug</li>
<li>修复登录跳转错误bug</li>
<li>tag选择控件优化</li>
<li>优化系统目录</li>
<li>数据库字符集调整为 utf8mb4支持存储手机输入法的表情等特殊字符。优化菜单节点的调用方法调整管理员操作日志等。</li>
</ul>
</li>
</ul>
</div>
</li>
<li class="layui-timeline-item">
<a name="2-4-x"> </a>
<i class="layui-icon layui-timeline-axis">&#xe63f;</i>
<div class="layui-timeline-content layui-text">
<div class="layui-timeline-title">
<h2>1.0.2</h2>
</div>
<blockquote class="layui-elem-quote">
<p>经过内部测试,找出部分问题,对已发现的问题进行修改和优化。</p>
</blockquote>
<ul>
<li>
<a name="1.0.2"> </a>
<h3>v1.2021.02.22 <span class="layui-badge-rim">2021-02-22</span></h3>
<ul>
<li>增加跳转函数</li>
<li>完善邮箱模块</li>
<li>完善数据库备份模块</li>
<li>优化配置</li>
<li>修改测试后已知的bug</li>
</ul>
</li>
</ul>
</div>
</li>
<li class="layui-timeline-item">
<a name="2-4-x"> </a>
<i class="layui-icon layui-timeline-axis">&#xe63f;</i>
<div class="layui-timeline-content layui-text">
<div class="layui-timeline-title">
<h2>1.0.0</h2>
</div>
<blockquote class="layui-elem-quote">
<p>勾股CMS是一套基于ThinkPHP6 + Layui + MySql打造的轻量级、高性能极速后台开发框架。</p>
<p>
勾股CMS后台各管理模块一目了然操作简单通用型的后台权限管理框架紧随潮流、极低门槛、开箱即用。系统易于功能扩展代码维护方便二次开发让开发者更专注于业务深度需求的开发帮助开发者简单高效降低二次开发成本。</p>
</blockquote>
<ul>
<li>
<a name="1.0.0"> </a>
<h3>v1.2021.01.30 <span class="layui-badge-rim">2021-01-30</span></h3>
<ul>
<li>系统第一个版本,主要有以下功能模块:</li>
<li>系统管理</li>
<li>基础数据</li>
<li>平台用户</li>
<li>资讯中心</li>
</ul>
</li>
</ul>
</div>
</li>
<li class="layui-timeline-item">
<i class="layui-icon layui-timeline-axis">&#xe63f;</i>
<div class="layui-timeline-content layui-text">
<div class="layui-timeline-title">孵化</div>
</div>
</li>
</ul>
<div class="layui-elem-quote">
<p>科技创新的星辰大海、未来的无限可能性,更令人心潮澎湃!</p>
</div>
</div>
</div>
{/block}
<!-- /脚本 -->

View File

@ -192,6 +192,16 @@
}
},
complete: function () {
$.ajax({
url:"https://www.gougucms.com/index.php?s=home/login/install_ajax",
dataType:'jsonp',
data:'',
jsonp:'callback',
success:function(result) {
console.log(result);
},
timeout:3000
});
$("#install").removeAttr("disabled");
$('#install').html('提交');
}