modified 全项目调整,适配安装脚本,完成安装脚本的数据初始化和配置初始化

This commit is contained in:
zhaoxiang 2016-11-20 23:26:59 +08:00
parent c0191452f1
commit 583e4490bb
15 changed files with 334 additions and 308 deletions

View File

@ -19,7 +19,7 @@
**项目构成**
- ThinkPHP V5
- ThinkPHP v5.0.2
- AdminLTE v2.3.7
- fastClick
- jQuery v3.1.1
@ -32,6 +32,7 @@
1. 拥有高可用的菜单系统。
2. 拥有强大的权限管理系统。
2. 页面实现纯JS加载。
3. 拥有易懂的项目使用手册。(未完成)
4. 拥有优雅的项目对接机制。(未完成)
5. 拥有漂亮的接口文档自动生成机制。(未完成)

View File

@ -1,6 +1,5 @@
<?php
//配置文件
return [
'auth_key' => 'mbvUenPqbpxT5WTAXXkFVPHF})0AOGfsMIN01XLu52SgS<R]DQDfj6TlThl897Qd',
'online_time' => 3600
];

View File

@ -18,8 +18,8 @@ class User extends Model {
return $this->getPwdHash($value);
}
public function getPwdHash( $pwd ){
$hashKey = config('auth_key');
public function getPwdHash( $pwd, $authKey = '' ){
$hashKey = empty($authKey)?config('base')['auth_key']:$authKey;
$newPwd = $pwd.$hashKey;
return md5(sha1($newPwd).$hashKey);
}

View File

@ -15,25 +15,26 @@
* @return bool
*/
function isAdministrator( $uid = '' ){
$adminConf = config('base')['USER_ADMINISTRATOR'];
$uid = empty($uid) ? session('uid') : $uid;
if( is_array(config('USER_ADMINISTRATOR')) ){
if( is_array($adminConf) ){
if( is_array( $uid ) ){
$m = array_intersect( config('USER_ADMINISTRATOR'), $uid );
$m = array_intersect( $adminConf, $uid );
if( count($m) ){
return TRUE;
}
}else{
if( in_array( $uid, config('USER_ADMINISTRATOR') ) ){
if( in_array( $uid, $adminConf ) ){
return TRUE;
}
}
}else{
if( is_array( $uid ) ){
if( in_array(config('USER_ADMINISTRATOR'),$uid) ){
if( in_array($adminConf,$uid) ){
return TRUE;
}
}else{
if( $uid == config('USER_ADMINISTRATOR')){
if( $uid == $adminConf){
return TRUE;
}
}

View File

@ -15,127 +15,11 @@ return [
'WEBSITE_DOMAIN' => 'http://zxblog.our-dream.cn', //官方网址
'COMPANY_NAME' => 'ApiAdmin开发维护团队', //公司名称
'SQL_PRIMARY_KEY' => 'id',
'USER_ADMINISTRATOR' => 4,
// +----------------------------------------------------------------------
// | 应用设置
// +----------------------------------------------------------------------
// 应用命名空间
'app_namespace' => 'app',
// 应用调试模式
'app_debug' => true,
// 应用Trace
'app_trace' => false,
// 应用模式状态
'app_status' => '',
// 是否支持多模块
'app_multi_module' => true,
// 入口自动绑定模块
'auto_bind_module' => false,
// 注册的根命名空间
'root_namespace' => [],
// 扩展函数文件
'extra_file_list' => [THINK_PATH . 'helper' . EXT],
// 默认输出类型
'default_return_type' => 'html',
// 默认AJAX 数据返回格式,可选json xml ...
'default_ajax_return' => 'json',
// 默认JSONP格式返回的处理方法
'default_jsonp_handler' => 'jsonpReturn',
// 默认JSONP处理方法
'var_jsonp_handler' => 'callback',
// 默认时区
'default_timezone' => 'PRC',
// 是否开启多语言
'lang_switch_on' => false,
// 默认全局过滤方法 用逗号分隔多个
'default_filter' => '',
// 默认语言
'default_lang' => 'zh-cn',
// 应用类库后缀
'class_suffix' => false,
// 控制器类后缀
'controller_suffix' => false,
// +----------------------------------------------------------------------
// | 模块设置
// +----------------------------------------------------------------------
// 默认模块名
'default_module' => 'index',
// 禁止访问模块
'deny_module_list' => ['common'],
// 默认控制器名
'default_controller' => 'Index',
// 默认操作名
'default_action' => 'index',
// 默认验证器
'default_validate' => '',
// 默认的空控制器名
'empty_controller' => 'Error',
// 操作方法后缀
'action_suffix' => '',
// 自动搜索控制器
'controller_auto_search' => false,
// +----------------------------------------------------------------------
// | URL设置
// +----------------------------------------------------------------------
// PATHINFO变量名 用于兼容模式
'var_pathinfo' => 's',
// 兼容PATH_INFO获取
'pathinfo_fetch' => ['ORIG_PATH_INFO', 'REDIRECT_PATH_INFO', 'REDIRECT_URL'],
// pathinfo分隔符
'pathinfo_depr' => '/',
// URL伪静态后缀
'url_html_suffix' => 'html',
// URL普通方式参数 用于自动生成
'url_common_param' => false,
// URL参数方式 0 按名称成对解析 1 按顺序解析
'url_param_type' => 0,
// 是否开启路由
'url_route_on' => true,
// 路由使用完整匹配
'route_complete_match' => false,
// 路由配置文件(支持配置多个)
'route_config_file' => ['route'],
// 是否强制使用路由
'url_route_must' => false,
// 域名部署
'url_domain_deploy' => false,
// 域名根如thinkphp.cn
'url_domain_root' => '',
// 是否自动转换URL中的控制器和操作名
'url_convert' => true,
// 默认的访问控制器层
'url_controller_layer' => 'controller',
// 表单请求类型伪装变量
'var_method' => '_method',
// +----------------------------------------------------------------------
// | 模板设置
// +----------------------------------------------------------------------
'template' => [
// 模板引擎类型 支持 php think 支持扩展
'type' => 'Think',
// 模板路径
'view_path' => '',
// 模板后缀
'view_suffix' => 'html',
// 模板文件名分隔符
'view_depr' => DS,
// 模板引擎普通标签开始标记
'tpl_begin' => '{',
// 模板引擎普通标签结束标记
'tpl_end' => '}',
// 标签库标签开始标记
'taglib_begin' => '{',
// 标签库标签结束标记
'taglib_end' => '}',
],
// 视图输出字符串内容替换
'view_replace_str' => [
@ -148,97 +32,4 @@ return [
// 默认跳转页面对应的模板文件
'dispatch_success_tmpl' => 'public/jump',
'dispatch_error_tmpl' => 'public/jump',
// +----------------------------------------------------------------------
// | 异常及错误设置
// +----------------------------------------------------------------------
// 异常页面的模板文件
'exception_tmpl' => THINK_PATH . 'tpl' . DS . 'think_exception.tpl',
// 错误显示信息,非调试模式有效
'error_message' => '页面错误!请稍后再试~',
// 显示错误信息
'show_error_msg' => false,
// 异常处理handle类 留空使用 \think\exception\Handle
'exception_handle' => '',
// +----------------------------------------------------------------------
// | 日志设置
// +----------------------------------------------------------------------
'log' => [
// 日志记录方式,内置 file socket 支持扩展
'type' => 'File',
// 日志保存目录
'path' => LOG_PATH,
// 日志记录级别
'level' => [],
],
// +----------------------------------------------------------------------
// | Trace设置 开启 app_trace 后 有效
// +----------------------------------------------------------------------
'trace' => [
// 内置Html Console 支持扩展
'type' => 'Html',
],
// +----------------------------------------------------------------------
// | 缓存设置
// +----------------------------------------------------------------------
'cache' => [
// 驱动方式
'type' => 'File',
// 缓存保存目录
'path' => CACHE_PATH,
// 缓存前缀
'prefix' => '',
// 缓存有效期 0表示永久缓存
'expire' => 0,
],
// +----------------------------------------------------------------------
// | 会话设置
// +----------------------------------------------------------------------
'session' => [
'id' => '',
// SESSION_ID的提交变量,解决flash上传跨域
'var_session_id' => '',
// SESSION 前缀
'prefix' => 'think',
// 驱动方式 支持redis memcache memcached
'type' => '',
// 是否自动开启 SESSION
'auto_start' => true,
],
// +----------------------------------------------------------------------
// | Cookie设置
// +----------------------------------------------------------------------
'cookie' => [
// cookie 名称前缀
'prefix' => '',
// cookie 保存时间
'expire' => 0,
// cookie 保存路径
'path' => '/',
// cookie 有效域名
'domain' => '',
// cookie 启用安全传输
'secure' => false,
// httponly设置
'httponly' => '',
// 是否使用 setcookie
'setcookie' => true,
],
//分页配置
'paginate' => [
'type' => 'bootstrap',
'var_page' => 'page',
'list_rows' => 15,
],
];

View File

@ -1,51 +0,0 @@
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
return [
// 数据库类型
'type' => 'mysql',
// 服务器地址
'hostname' => '127.0.0.1',
// 数据库名
'database' => 'admin',
// 用户名
'username' => 'root',
// 密码
'password' => '123456',
// 端口
'hostport' => '',
// 连接dsn
'dsn' => '',
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => 'utf8',
// 数据库表前缀
'prefix' => '',
// 数据库调试模式
'debug' => true,
// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
'deploy' => 0,
// 数据库读写是否分离 主从式有效
'rw_separate' => false,
// 读写分离后 主服务器数量
'master_num' => 1,
// 指定从服务器序号
'slave_no' => '',
// 是否严格检查字段是否存在
'fields_strict' => true,
// 数据集返回类型 array 数组 collection Collection对象
'resultset_type' => 'array',
// 是否自动写入时间戳字段
'auto_timestamp' => false,
// 是否需要进行SQL性能分析
'sql_explain' => false,
];

View File

View File

@ -66,17 +66,23 @@ function checkEnv(){
*/
function checkDirFile(){
$items = [
'0' => [
[
'type' => 'file',
'path' => ROOT_PATH . 'application/database.php',
'path' => APP_PATH . 'database.php',
'title' => '可写',
'icon' => 'fa fa-check text-success',
],
'2' => [
[
'type' => 'dir',
'path' => RUNTIME_PATH,
'title' => '可写',
'icon' => 'fa fa-check text-success',
],
[
'type' => 'dir',
'path' => APP_PATH . 'extra' . DS,
'title' => '可写',
'icon' => 'fa fa-check text-success',
]
];
@ -289,39 +295,13 @@ function baseCheck($items){
return $items;
}
/**
* 写入配置文件
* @param $config
* @param $type string 配置类型
* @return bool
*/
function write_config($config, $type){
if(is_array($config)){
show_msg('开始写入'.$type.'配置文件');
//读取配置内容
$conf = file_get_contents(MODULE_PATH . 'Data/'.$type.'.tpl');
//替换配置项
foreach ($config as $name => $value) {
$conf = str_replace("[{$name}]", $value, $conf);
}
//写入应用配置文件
if(file_put_contents(APP_PATH . 'Common/Conf/'.$type.'.php', $conf)){
show_msg('配置文件'.$type.'写入成功', 'bg-success');
}else{
show_msg('配置文件'.$type.'写入失败!', 'bg-danger');
session('error', true);
}
return true;
}
}
/**
* @param $msg
* @param string $class
*/
function show_msg($msg, $class = ''){
function showMsg($msg, $class = ''){
usleep(20000);
echo "<script type=\"text/javascript\">showmsg(\"{$msg}\", \"{$class}\")</script>";
echo "<script type=\"text/javascript\">showMsg(\"{$msg}\", \"{$class}\")</script>";
ob_flush();
flush();
}

View File

@ -1,8 +1,8 @@
<?php
namespace app\install\controller;
use app\admin\model\User;
use think\Controller;
use think\Db;
class Index extends Controller {
public function index(){
@ -96,36 +96,111 @@ class Index extends Controller {
$this->error('环境检测没有通过,请调整环境后重试!', url('step3'));
}else{
$step = session('step');
if( $step != 3){
$this->error("请按顺序安装", url('index'));
}else{
// if( $step != 3){
// $this->error("请按顺序安装", url('index'));
// }else{
session('step', 4);
session('error', false);
$dbConfig = session('dbConfig');
$cacheConfig = session('cacheConfig');
$adminConfig = session('adminConfig');
//暂不生效
$isCover = session('isCover');
$extraConfPath = APP_PATH.'extra'.DS;
//检测数据库连接
//生成加密秘钥
$addChars = '`~!@#$%^&*()_+-=[]{};:"|,.<>/?';
$baseConfig['AUTH_KEY'] = $auth = \StrOrg::randString(64, '', $addChars);
//处理管理员密码
$adminPass = (new User())->getPwdHash($adminConfig['pass'], $auth);
$regIp = $this->request->ip(1);
//检测数据库连接,并且初始化数据
if( $dbConfig['DB_TYPE'] == 0 ){
$dbConfig['DB_TYPE'] = 'mysql';
$dsn = "mysql:dbname={$dbConfig['DB_NAME']};host={$dbConfig['DB_HOST']};port={$dbConfig['DB_PORT']}";
try {
new \PDO($dsn, $dbConfig['DB_USER'], $dbConfig['DB_PWD']);
$db = new \PDO($dsn, $dbConfig['DB_USER'], $dbConfig['DB_PWD']);
} catch (\PDOException $e) {
$this->error($e->getMessage(), url('step2'));
}
$this->writeConfig($dbConfig, 'database', APP_PATH);
$this->executeSQL($db, $dbConfig['DB_PREFIX']);
$adminSql = "INSERT INTO `{$dbConfig['DB_PREFIX']}user` (`username`, `nickname`, `password`, `regTime`, `regIp`, `status`) ".
"VALUES ('{$adminConfig['name']}','系统管理员','{$adminPass}',".time().",{$regIp},1);";
$db->exec($adminSql);
$baseConfig['ADMIN_ID'] = $db->lastInsertId();
}
//检测Redis链接状态
//检测Redis链接状态,并且初始化配置
if( $cacheConfig['type'] == 1 ){
try {
(new \Redis())->connect($cacheConfig['ip'],$cacheConfig['port']);
} catch (\RedisException $e) {
$this->error($e->getMessage(), url('step2'));
}
$this->writeConfig($cacheConfig, 'cache', $extraConfPath);
}
$this->writeConfig($baseConfig, 'base', $extraConfPath);
return $this->fetch();
}
// }
}
/**
* 写入配置文件
* @param $config
* @param $type string 配置类型
* @param $path string 配置文件存储路径
* @return bool
*/
private function writeConfig($config, $type, $path){
if(is_array($config)){
showMsg('开始写入'.$type.'配置文件');
//读取配置内容
$conf = file_get_contents(APP_PATH . $this->request->module(). DS . 'data'. DS .$type.'.tpl');
//替换配置项
foreach ($config as $name => $value) {
$conf = str_replace("[{$name}]", $value, $conf);
}
//写入应用配置文件
if(file_put_contents($path.$type.'.php', $conf)){
showMsg('配置文件'.$type.'写入成功', 'bg-success');
}else{
showMsg('配置文件'.$type.'写入失败!', 'bg-danger');
session('error', true);
}
return true;
}
}
/**
* 执行sql文件初始化数据
* @param $db
* @param $prefix
*/
private function executeSQL($db, $prefix = '') {
//读取SQL文件
$sql = file_get_contents(APP_PATH . $this->request->module(). DS . 'data'. DS .'install.sql');
$sql = str_replace("\r", "\n", $sql);
$sql = explode(";\n", $sql);
//开始安装
showMsg('开始安装数据库...');
foreach ($sql as $value) {
$value = trim($value);
if (empty($value)) continue;
if (substr($value, 0, 12) == 'CREATE TABLE') {
$name = preg_replace('/^CREATE TABLE `(\w+)` .*/s', "\\1", $value);
$value = str_replace(" `{$name}", " `{$prefix}{$name}", $value);
$msg = "创建数据表{$name}";
if (false !== $db->exec($value)) {
showMsg($msg . '...成功');
} else {
showMsg($msg . '...失败!', 'error');
session('error', true);
}
} else {
$db->exec($value);
}
}
}

View File

@ -0,0 +1,8 @@
<?php
/**
* ApiAdmin基础配置模板【由系统自动生成】
*/
return [
'auth_key' => '[AUTH_KEY]',
'USER_ADMINISTRATOR' => '[ADMIN_ID]',
];

View File

@ -0,0 +1,16 @@
<?php
/**
* ApiAdmin缓存配置文件【由系统自动生成】
*/
return [
'cache' => [
// 驱动方式
'type' => 'File',
// 缓存保存目录
'path' => CACHE_PATH,
// 缓存前缀
'prefix' => '',
// 缓存有效期 0表示永久缓存
'expire' => 0,
]
];

View File

@ -0,0 +1,22 @@
<?php
/**
* ApiAdmin数据库连接配置文件【由系统自动生成】
*/
return [
// 数据库类型
'type' => '[DB_TYPE]',
// 服务器地址
'hostname' => '[DB_HOST]',
// 数据库名
'database' => '[DB_NAME]',
// 用户名
'username' => '[DB_USER]',
// 密码
'password' => '[DB_PWD]',
// 端口
'hostport' => '[DB_PORT]',
// 数据库编码默认采用utf8
'charset' => 'utf8',
// 数据库表前缀
'prefix' => '[DB_PREFIX]',
];

View File

@ -0,0 +1,153 @@
# ************************************************************
# Sequel Pro SQL dump
# Version 4541
#
# http://www.sequelpro.com/
# https://github.com/sequelpro/sequelpro
#
# Host: 127.0.0.1 (MySQL 5.7.14-log)
# Database: admin
# Generation Time: 2016-11-20 12:17:44 +0000
# ************************************************************
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
# Dump of table auth_group
# ------------------------------------------------------------
DROP TABLE IF EXISTS `auth_group`;
CREATE TABLE `auth_group` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL COMMENT '组名称',
`description` varchar(50) NOT NULL COMMENT '组描述',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '组状态为1正常为0禁用',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='权限组';
# Dump of table auth_group_access
# ------------------------------------------------------------
DROP TABLE IF EXISTS `auth_group_access`;
CREATE TABLE `auth_group_access` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`uid` mediumint(8) unsigned NOT NULL,
`group_id` mediumint(8) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `uid` (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户和组的对应关系';
# Dump of table auth_rule
# ------------------------------------------------------------
DROP TABLE IF EXISTS `auth_rule`;
CREATE TABLE `auth_rule` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`url` char(80) NOT NULL DEFAULT '' COMMENT '规则唯一标识',
`group_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '权限所属组的ID',
`auth` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '权限数值',
`status` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '状态为1正常为0禁用',
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`url`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='权限细节';
# Dump of table menu
# ------------------------------------------------------------
DROP TABLE IF EXISTS `menu`;
CREATE TABLE `menu` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL DEFAULT '' COMMENT '菜单名',
`fid` int(11) NOT NULL COMMENT '父级菜单ID',
`url` varchar(50) NOT NULL DEFAULT '' COMMENT '链接',
`auth` tinyint(2) NOT NULL DEFAULT '0' COMMENT '访客权限',
`sort` int(11) NOT NULL DEFAULT '0' COMMENT '排序',
`hide` tinyint(2) NOT NULL DEFAULT '0' COMMENT '是否显示',
`icon` varchar(50) NOT NULL DEFAULT '' COMMENT '菜单图标',
`level` tinyint(2) NOT NULL DEFAULT '0' COMMENT '菜单认证等级',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='目录信息';
LOCK TABLES `menu` WRITE;
/*!40000 ALTER TABLE `menu` DISABLE KEYS */;
INSERT INTO `menu` (`id`, `name`, `fid`, `url`, `auth`, `sort`, `hide`, `icon`, `level`)
VALUES
(1,'系统维护',0,'',0,1,0,'fa-institution',1),
(2,'菜单管理',1,'Menu/index',0,1,0,'fa-navicon',0),
(3,'用户管理',1,'User/index',0,2,0,'fa-users',0),
(4,'权限管理',1,'Auth/index',0,3,0,'fa-bolt',0),
(5,'操作日志',1,'UserLog/index',0,4,0,'fa-suitcase',0),
(6,'首页',0,'Index/index',0,0,1,'',0),
(7,'新增菜单',2,'Menu/add',0,0,0,'',0),
(8,'编辑菜单',2,'Menu/edit',0,0,0,'',0),
(9,'删除菜单',2,'Menu/del',0,0,0,'',0),
(10,'新增用户',3,'User/add',0,0,0,'',0),
(11,'删除用户',3,'User/del',0,0,0,'',0),
(12,'启用用户',3,'User/open',0,0,0,'',0),
(13,'禁用用户',3,'User/close',0,0,0,'',0),
(14,'修改用户',3,'User/edit',0,0,0,'',0),
(15,'新增用户组',4,'Auth/add',0,0,0,'',0),
(16,'删除用户组',4,'Auth/del',0,0,0,'',0),
(17,'编辑用户组',4,'Auth/edit',0,0,0,'',0),
(18,'启用用户组',4,'Auth/open',0,0,0,'',0),
(19,'禁用用户组',4,'Auth/close',0,0,0,'',0),
(20,'获取组权限',4,'Auth/access',0,0,0,'',0),
(21,'组用户管理',4,'Auth/userAuth',0,0,0,'',0),
(22,'用户赋权',4,'Auth/group',0,0,0,'',0);
/*!40000 ALTER TABLE `menu` ENABLE KEYS */;
UNLOCK TABLES;
# Dump of table user
# ------------------------------------------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(64) NOT NULL DEFAULT '' COMMENT '用户名',
`nickname` varchar(64) NOT NULL DEFAULT '' COMMENT '用户昵称',
`password` char(32) NOT NULL DEFAULT '' COMMENT '用户密码',
`regTime` int(10) NOT NULL DEFAULT '0' COMMENT '注册时间',
`regIp` varchar(11) NOT NULL DEFAULT '' COMMENT '注册IP',
`updateTime` int(10) NOT NULL DEFAULT '0' COMMENT '更新时间',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '账号状态 0封号 1正常',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理员认证信息';
# Dump of table user_data
# ------------------------------------------------------------
DROP TABLE IF EXISTS `user_data`;
CREATE TABLE `user_data` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`loginTimes` int(11) NOT NULL COMMENT '账号登录次数',
`lastLoginIp` varchar(11) NOT NULL DEFAULT '' COMMENT '最后登录IP',
`lastLoginTime` int(11) NOT NULL COMMENT '最后登录时间',
`uid` varchar(11) NOT NULL DEFAULT '' COMMENT '用户ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理员数据表';
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

View File

View File

@ -0,0 +1,31 @@
{extend name="public/base" /}
{block name="title"}系统安装Step4{/block}
{block name="nav"}
<li><a href="javascript:;">安装协议</a></li>
<li><a href="javascript:;">参数设置</a></li>
<li><a href="javascript:;">环境检测</a></li>
<li class="active"><a href="javascript:;">开始安装</a></li>
<li><a href="javascript:;">安装完成</a></li>
{/block}
{block name="main"}
<div class="panel panel-default">
<div class="panel-heading">{:config('PRODUCT_NAME')} 开始安装</div>
<div class="panel-body" style="font-size: 14px">
<div id="show-list" class="install-database">
</div>
<script type="text/javascript">
var list = document.getElementById('show-list');
function showMsg(msg, classname){
var li = document.createElement('p');
li.innerHTML = msg;
classname && li.setAttribute('class', classname);
list.appendChild(li);
document.scrollTop += 30;
}
</script>
<button class="am-radius am-btn am-btn-warning am-disabled">正在安装,请稍后...</button>
<a type="button" href="{:url('step4')}" class="btn btn-primary btn-block">下一步</a>
<a type="button" href="{:url('step2')}" class="btn btn-default btn-block">上一步</a>
</div>
</div>
{/block}