mirror of https://gitee.com/karson/fastadmin.git
新增前台会员Money字段和余额日志表
新增插件配置温馨提示的功能 新增后台登录入口为默认时的安全提示 新增余额增减的静态方法 优化前台默认布局的展示 优化附件管理中非图片资源的图标显示 优化移动端左侧菜单栏滑动体验 修复语言包在加载失败时页面不加载的BUG 修复通用搜索在重置后分页的BUG 修复管理员禁用后仍然能登录后台的BUG 修复一键打包插件在Win下打包后目录路径错误的BUG 修复API接口Token无法刷新的BUGpull/89/head v1.0.0.20181127_beta
parent
2000a876dd
commit
f6ccbb70dd
|
|
@ -33,7 +33,7 @@ class Addon extends Command
|
||||||
{
|
{
|
||||||
$name = $input->getOption('name') ?: '';
|
$name = $input->getOption('name') ?: '';
|
||||||
$action = $input->getOption('action') ?: '';
|
$action = $input->getOption('action') ?: '';
|
||||||
if(stripos($name, 'addons/')!==false){
|
if (stripos($name, 'addons/') !== false) {
|
||||||
$name = explode('/', $name)[1];
|
$name = explode('/', $name)[1];
|
||||||
}
|
}
|
||||||
//强制覆盖
|
//强制覆盖
|
||||||
|
|
@ -241,7 +241,7 @@ class Addon extends Command
|
||||||
foreach ($files as $name => $file) {
|
foreach ($files as $name => $file) {
|
||||||
if (!$file->isDir()) {
|
if (!$file->isDir()) {
|
||||||
$filePath = $file->getRealPath();
|
$filePath = $file->getRealPath();
|
||||||
$relativePath = substr($filePath, strlen($addonDir));
|
$relativePath = str_replace(DS, '/', substr($filePath, strlen($addonDir)));
|
||||||
if (!in_array($file->getFilename(), ['.git', '.DS_Store', 'Thumbs.db'])) {
|
if (!in_array($file->getFilename(), ['.git', '.DS_Store', 'Thumbs.db'])) {
|
||||||
$zip->addFile($filePath, $relativePath);
|
$zip->addFile($filePath, $relativePath);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,15 +9,15 @@
|
||||||
<title>{$config.title}</title>
|
<title>{$config.title}</title>
|
||||||
|
|
||||||
<!-- Bootstrap Core CSS -->
|
<!-- Bootstrap Core CSS -->
|
||||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">
|
<link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
|
||||||
|
|
||||||
<!-- Plugin CSS -->
|
<!-- Plugin CSS -->
|
||||||
<link href="https://cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css" rel="stylesheet">
|
<link href="https://cdn.staticfile.org/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
|
||||||
|
|
||||||
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||||
<!--[if lt IE 9]>
|
<!--[if lt IE 9]>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
|
<script src="https://cdn.staticfile.org/html5shiv/3.7.3/html5shiv.min.js"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
|
<script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
|
||||||
<![endif]-->
|
<![endif]-->
|
||||||
|
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
|
|
@ -354,10 +354,10 @@
|
||||||
</div> <!-- /container -->
|
</div> <!-- /container -->
|
||||||
|
|
||||||
<!-- jQuery -->
|
<!-- jQuery -->
|
||||||
<script src="https://cdn.jsdelivr.net/npm/jquery@2.1.4/dist/jquery.min.js"></script>
|
<script src="https://cdn.staticfile.org/jquery/2.1.4/jquery.min.js"></script>
|
||||||
|
|
||||||
<!-- Bootstrap Core JavaScript -->
|
<!-- Bootstrap Core JavaScript -->
|
||||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
|
<script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
function syntaxHighlight(json) {
|
function syntaxHighlight(json) {
|
||||||
|
|
|
||||||
|
|
@ -29,17 +29,13 @@ CREATE TABLE `fa_admin` (
|
||||||
`status` varchar(30) NOT NULL DEFAULT 'normal' COMMENT '状态',
|
`status` varchar(30) NOT NULL DEFAULT 'normal' COMMENT '状态',
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
UNIQUE KEY `username` (`username`) USING BTREE
|
UNIQUE KEY `username` (`username`) USING BTREE
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='管理员表';
|
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='管理员表';
|
||||||
|
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
-- Records of fa_admin
|
-- Records of fa_admin
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
BEGIN;
|
BEGIN;
|
||||||
INSERT INTO `fa_admin` VALUES (1, 'admin', 'Admin', '075eaec83636846f51c152f29b98a2fd', 's4f3', '/assets/img/avatar.png', 'admin@fastadmin.net', 0, 1502029281, 1492186163, 1502029281, 'd3992c3b-5ecc-4ecb-9dc2-8997780fcadc', 'normal');
|
INSERT INTO `fa_admin` VALUES (1, 'admin', 'Admin', '075eaec83636846f51c152f29b98a2fd', 's4f3', '/assets/img/avatar.png', 'admin@fastadmin.net', 0, 1502029281, 1492186163, 1502029281, 'd3992c3b-5ecc-4ecb-9dc2-8997780fcadc', 'normal');
|
||||||
INSERT INTO `fa_admin` VALUES (2, 'admin2', 'admin2', '9a28ce07ce875fbd14172a9ca5357d3c', '2dHDmj', '/assets/img/avatar.png', 'admin2@fastadmin.net', 0, 1505450906, 1492186163, 1505450906, 'df45fdd5-26f4-45ca-83b3-47e4491a315a', 'normal');
|
|
||||||
INSERT INTO `fa_admin` VALUES (3, 'admin3', 'admin3', '1c11f945dfcd808a130a8c2a8753fe62', 'WOKJEn', '/assets/img/avatar.png', 'admin3@fastadmin.net', 0, 1501980868, 1492186201, 1501982377, '', 'normal');
|
|
||||||
INSERT INTO `fa_admin` VALUES (4, 'admin22', 'admin22', '1c1a0aa0c3c56a8c1a908aab94519648', 'Aybcn5', '/assets/img/avatar.png', 'admin22@fastadmin.net', 0, 0, 1492186240, 1492186240, '', 'normal');
|
|
||||||
INSERT INTO `fa_admin` VALUES (5, 'admin32', 'admin32', 'ade94d5d7a7033afa7d84ac3066d0a02', 'FvYK0u', '/assets/img/avatar.png', 'admin32@fastadmin.net', 0, 0, 1492186263, 1492186263, '', 'normal');
|
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
|
|
@ -134,10 +130,6 @@ CREATE TABLE `fa_auth_group_access` (
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
BEGIN;
|
BEGIN;
|
||||||
INSERT INTO `fa_auth_group_access` VALUES (1, 1);
|
INSERT INTO `fa_auth_group_access` VALUES (1, 1);
|
||||||
INSERT INTO `fa_auth_group_access` VALUES (2, 2);
|
|
||||||
INSERT INTO `fa_auth_group_access` VALUES (3, 3);
|
|
||||||
INSERT INTO `fa_auth_group_access` VALUES (4, 5);
|
|
||||||
INSERT INTO `fa_auth_group_access` VALUES (5, 5);
|
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
|
|
@ -431,6 +423,7 @@ CREATE TABLE `fa_user` (
|
||||||
`gender` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '性别',
|
`gender` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '性别',
|
||||||
`birthday` date COMMENT '生日',
|
`birthday` date COMMENT '生日',
|
||||||
`bio` varchar(100) NOT NULL DEFAULT '' COMMENT '格言',
|
`bio` varchar(100) NOT NULL DEFAULT '' COMMENT '格言',
|
||||||
|
`money` decimal(10,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '余额',
|
||||||
`score` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '积分',
|
`score` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '积分',
|
||||||
`successions` int(10) unsigned NOT NULL DEFAULT '1' COMMENT '连续登录天数',
|
`successions` int(10) unsigned NOT NULL DEFAULT '1' COMMENT '连续登录天数',
|
||||||
`maxsuccessions` int(10) unsigned NOT NULL DEFAULT '1' COMMENT '最大连续登录天数',
|
`maxsuccessions` int(10) unsigned NOT NULL DEFAULT '1' COMMENT '最大连续登录天数',
|
||||||
|
|
@ -479,6 +472,21 @@ BEGIN;
|
||||||
INSERT INTO `fa_user_group` VALUES (1, '默认组', '1,2,3,4,5,6,7,8,9,10,11,12', 1515386468, 1516168298, 'normal');
|
INSERT INTO `fa_user_group` VALUES (1, '默认组', '1,2,3,4,5,6,7,8,9,10,11,12', 1515386468, 1516168298, 'normal');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- Table structure for fa_user_money_log
|
||||||
|
-- ----------------------------
|
||||||
|
DROP TABLE IF EXISTS `fa_user_money_log`;
|
||||||
|
CREATE TABLE `fa_user_money_log` (
|
||||||
|
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
`user_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '会员ID',
|
||||||
|
`money` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '变更余额',
|
||||||
|
`before` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '变更前余额',
|
||||||
|
`after` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '变更后余额',
|
||||||
|
`memo` varchar(255) NOT NULL DEFAULT '' COMMENT '备注',
|
||||||
|
`createtime` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='会员余额变动表';
|
||||||
|
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
-- Table structure for fa_user_rule
|
-- Table structure for fa_user_rule
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
|
|
|
||||||
|
|
@ -81,7 +81,14 @@ class Addon extends Backend
|
||||||
}
|
}
|
||||||
$this->error(__('Parameter %s can not be empty', ''));
|
$this->error(__('Parameter %s can not be empty', ''));
|
||||||
}
|
}
|
||||||
$this->view->assign("addon", ['info' => $info, 'config' => $config]);
|
$tips = [];
|
||||||
|
foreach ($config as $index => &$item) {
|
||||||
|
if ($item['name'] == '__tips__') {
|
||||||
|
$tips = $item;
|
||||||
|
unset($config[$index]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$this->view->assign("addon", ['info' => $info, 'config' => $config, 'tips' => $tips]);
|
||||||
$configFile = ADDON_PATH . $name . DS . 'config.html';
|
$configFile = ADDON_PATH . $name . DS . 'config.html';
|
||||||
$viewFile = is_file($configFile) ? $configFile : '';
|
$viewFile = is_file($configFile) ? $configFile : '';
|
||||||
return $this->view->fetch($viewFile);
|
return $this->view->fetch($viewFile);
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,8 @@ return [
|
||||||
'Last month' => '上月',
|
'Last month' => '上月',
|
||||||
'This month' => '本月',
|
'This month' => '本月',
|
||||||
'Loading' => '加载中',
|
'Loading' => '加载中',
|
||||||
|
'Money' => '余额',
|
||||||
|
'Score' => '积分',
|
||||||
'More' => '更多',
|
'More' => '更多',
|
||||||
'Yes' => '是',
|
'Yes' => '是',
|
||||||
'No' => '否',
|
'No' => '否',
|
||||||
|
|
|
||||||
|
|
@ -42,4 +42,5 @@ return [
|
||||||
'Cdn url' => '静态资源CDN',
|
'Cdn url' => '静态资源CDN',
|
||||||
'Timezone' => '时区',
|
'Timezone' => '时区',
|
||||||
'Language' => '语言',
|
'Language' => '语言',
|
||||||
|
'Security tips' => '<i class="fa fa-warning"></i> 安全提示:你正在使用默认的后台登录入口,为了你的网站安全,建议你修改后台登录入口,<a href="https://forum.fastadmin.net/thread/7640" target="_blank">点击查看修改方法</a>',
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@ return [
|
||||||
'Username or password is incorrect' => '用户名或密码不正确',
|
'Username or password is incorrect' => '用户名或密码不正确',
|
||||||
'Username is incorrect' => '用户名不正确',
|
'Username is incorrect' => '用户名不正确',
|
||||||
'Password is incorrect' => '密码不正确',
|
'Password is incorrect' => '密码不正确',
|
||||||
|
'Admin is forbidden' => '管理员已经被禁止登录',
|
||||||
'Please try again after 1 day' => '请于1天后再尝试登录',
|
'Please try again after 1 day' => '请于1天后再尝试登录',
|
||||||
'Login successful' => '登录成功!',
|
'Login successful' => '登录成功!',
|
||||||
'Logout successful' => '退出成功!',
|
'Logout successful' => '退出成功!',
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,10 @@ class Auth extends \fast\Auth
|
||||||
$this->setError('Username is incorrect');
|
$this->setError('Username is incorrect');
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if ($admin['status'] == 'hidden') {
|
||||||
|
$this->setError('Admin is forbidden');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (Config::get('fastadmin.login_failure_retry') && $admin->loginfailure >= 10 && time() - $admin->updatetime < 86400) {
|
if (Config::get('fastadmin.login_failure_retry') && $admin->loginfailure >= 10 && time() - $admin->updatetime < 86400) {
|
||||||
$this->setError('Please try again after 1 day');
|
$this->setError('Please try again after 1 day');
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -134,6 +138,7 @@ class Auth extends \fast\Auth
|
||||||
* 检测当前控制器和方法是否匹配传递的数组
|
* 检测当前控制器和方法是否匹配传递的数组
|
||||||
*
|
*
|
||||||
* @param array $arr 需要验证权限的数组
|
* @param array $arr 需要验证权限的数组
|
||||||
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function match($arr = [])
|
public function match($arr = [])
|
||||||
{
|
{
|
||||||
|
|
@ -432,7 +437,7 @@ class Auth extends \fast\Auth
|
||||||
/**
|
/**
|
||||||
* 设置错误信息
|
* 设置错误信息
|
||||||
*
|
*
|
||||||
* @param $error 错误信息
|
* @param string $error 错误信息
|
||||||
* @return Auth
|
* @return Auth
|
||||||
*/
|
*/
|
||||||
public function setError($error)
|
public function setError($error)
|
||||||
|
|
|
||||||
|
|
@ -227,8 +227,10 @@ trait Backend
|
||||||
if ($ids) {
|
if ($ids) {
|
||||||
if ($this->request->has('params')) {
|
if ($this->request->has('params')) {
|
||||||
parse_str($this->request->post("params"), $values);
|
parse_str($this->request->post("params"), $values);
|
||||||
$values = array_intersect_key($values, array_flip(is_array($this->multiFields) ? $this->multiFields : explode(',', $this->multiFields)));
|
if (!$this->auth->isSuperAdmin()) {
|
||||||
if ($values || $this->auth->isSuperAdmin()) {
|
$values = array_intersect_key($values, array_flip(is_array($this->multiFields) ? $this->multiFields : explode(',', $this->multiFields)));
|
||||||
|
}
|
||||||
|
if ($values) {
|
||||||
$adminIds = $this->getDataLimitAdminIds();
|
$adminIds = $this->getDataLimitAdminIds();
|
||||||
if (is_array($adminIds)) {
|
if (is_array($adminIds)) {
|
||||||
$this->model->where($this->dataLimitField, 'in', $adminIds);
|
$this->model->where($this->dataLimitField, 'in', $adminIds);
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
namespace app\admin\model;
|
namespace app\admin\model;
|
||||||
|
|
||||||
|
use app\common\model\MoneyLog;
|
||||||
use think\Model;
|
use think\Model;
|
||||||
|
|
||||||
class User extends Model
|
class User extends Model
|
||||||
|
|
@ -36,6 +37,15 @@ class User extends Model
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
self::beforeUpdate(function ($row) {
|
||||||
|
$changedata = $row->getChangedData();
|
||||||
|
if (isset($changedata['money'])) {
|
||||||
|
$origin = $row->getOriginData();
|
||||||
|
MoneyLog::create(['user_id' => $row['id'], 'money' => $changedata['money'] - $origin['money'], 'memo' => '管理员变更金额']);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getGenderList()
|
public function getGenderList()
|
||||||
|
|
|
||||||
|
|
@ -1,88 +1,96 @@
|
||||||
<form id="config-form" class="edit-form form-horizontal" role="form" data-toggle="validator" method="POST" action="">
|
<form id="config-form" class="edit-form form-horizontal" role="form" data-toggle="validator" method="POST" action="">
|
||||||
|
{if $addon.tips}
|
||||||
|
<div class="alert {$addon.tips.extend|default='alert-info-light'}" style="margin-bottom:10px;">
|
||||||
|
<b>{$addon.tips.title}</b><br>
|
||||||
|
{$addon.tips.value}
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th width="15%">{:__('Title')}</th>
|
<th width="15%">{:__('Title')}</th>
|
||||||
<th width="85%">{:__('Value')}</th>
|
<th width="85%">{:__('Value')}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{foreach $addon.config as $item}
|
{foreach $addon.config as $item}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{$item.title}</td>
|
<td>{$item.title}</td>
|
||||||
<td>
|
<td>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-8 col-xs-12">
|
<div class="col-sm-8 col-xs-12">
|
||||||
{switch $item.type}
|
{switch $item.type}
|
||||||
{case string}
|
{case string}
|
||||||
<input {$item.extend} type="text" name="row[{$item.name}]" value="{$item.value}" class="form-control" data-rule="{$item.rule}" data-tip="{$item.tip}" />
|
<input {$item.extend} type="text" name="row[{$item.name}]" value="{$item.value}" class="form-control" data-rule="{$item.rule}" data-tip="{$item.tip}"/>
|
||||||
{/case}
|
{/case}
|
||||||
{case text}
|
{case text}
|
||||||
<textarea {$item.extend} name="row[{$item.name}]" class="form-control" data-rule="{$item.rule}" rows="5" data-tip="{$item.tip}">{$item.value}</textarea>
|
<textarea {$item.extend} name="row[{$item.name}]" class="form-control" data-rule="{$item.rule}" rows="5" data-tip="{$item.tip}">{$item.value}</textarea>
|
||||||
{/case}
|
{/case}
|
||||||
{case array}
|
{case array}
|
||||||
<dl class="fieldlist" data-name="row[{$item.name}]">
|
<dl class="fieldlist" data-name="row[{$item.name}]">
|
||||||
<dd>
|
<dd>
|
||||||
<ins>{:__('Array key')}</ins>
|
<ins>{:__('Array key')}</ins>
|
||||||
<ins>{:__('Array value')}</ins>
|
<ins>{:__('Array value')}</ins>
|
||||||
</dd>
|
</dd>
|
||||||
<dd><a href="javascript:;" class="btn btn-sm btn-success btn-append"><i class="fa fa-plus"></i> {:__('Append')}</a></dd>
|
<dd><a href="javascript:;" class="btn btn-sm btn-success btn-append"><i class="fa fa-plus"></i> {:__('Append')}</a></dd>
|
||||||
<textarea name="row[{$item.name}]" cols="30" rows="5" class="hide">{$item.value|json_encode}</textarea>
|
<textarea name="row[{$item.name}]" cols="30" rows="5" class="hide">{$item.value|json_encode}</textarea>
|
||||||
</dl>
|
</dl>
|
||||||
{/case}
|
{/case}
|
||||||
{case datetime}
|
{case datetime}
|
||||||
<input {$item.extend} type="text" name="row[{$item.name}]" value="{$item.value}" class="form-control datetimepicker" data-tip="{$item.tip}" data-rule="{$item.rule}" />
|
<input {$item.extend} type="text" name="row[{$item.name}]" value="{$item.value}" class="form-control datetimepicker" data-tip="{$item.tip}" data-rule="{$item.rule}"/>
|
||||||
{/case}
|
{/case}
|
||||||
{case number}
|
{case number}
|
||||||
<input {$item.extend} type="number" name="row[{$item.name}]" value="{$item.value}" class="form-control" data-tip="{$item.tip}" data-rule="{$item.rule}" />
|
<input {$item.extend} type="number" name="row[{$item.name}]" value="{$item.value}" class="form-control" data-tip="{$item.tip}" data-rule="{$item.rule}"/>
|
||||||
{/case}
|
{/case}
|
||||||
{case checkbox}
|
{case checkbox}
|
||||||
|
{foreach name="item.content" item="vo"}
|
||||||
|
<label for="row[{$item.name}][]-{$key}"><input id="row[{$item.name}][]-{$key}" name="row[{$item.name}][]" type="checkbox" value="{$key}" data-tip="{$item.tip}" {in name="key" value="$item.value" }checked{/in} /> {$vo}</label>
|
||||||
|
{/foreach}
|
||||||
|
{/case}
|
||||||
|
{case radio}
|
||||||
|
{foreach name="item.content" item="vo"}
|
||||||
|
<label for="row[{$item.name}]-{$key}"><input id="row[{$item.name}]-{$key}" name="row[{$item.name}]" type="radio" value="{$key}" data-tip="{$item.tip}" {in name="key" value="$item.value" }checked{/in} /> {$vo}</label>
|
||||||
|
{/foreach}
|
||||||
|
{/case}
|
||||||
|
{case value="select" break="0"}{/case}
|
||||||
|
{case value="selects"}
|
||||||
|
<select {$item.extend} name="row[{$item.name}]{$item.type=='selects'?'[]':''}" class="form-control selectpicker" data-tip="{$item.tip}" {$item.type=='selects'?'multiple':''}>
|
||||||
{foreach name="item.content" item="vo"}
|
{foreach name="item.content" item="vo"}
|
||||||
<label for="row[{$item.name}][]-{$key}"><input id="row[{$item.name}][]-{$key}" name="row[{$item.name}][]" type="checkbox" value="{$key}" data-tip="{$item.tip}" {in name="key" value="$item.value"}checked{/in} /> {$vo}</label>
|
<option value="{$key}" {in name="key" value="$item.value" }selected{
|
||||||
|
/in}>{$vo}</option>
|
||||||
{/foreach}
|
{/foreach}
|
||||||
{/case}
|
</select>
|
||||||
{case radio}
|
{/case}
|
||||||
{foreach name="item.content" item="vo"}
|
{case value="image" break="0"}{/case}
|
||||||
<label for="row[{$item.name}]-{$key}"><input id="row[{$item.name}]-{$key}" name="row[{$item.name}]" type="radio" value="{$key}" data-tip="{$item.tip}" {in name="key" value="$item.value"}checked{/in} /> {$vo}</label>
|
{case value="images"}
|
||||||
{/foreach}
|
<div class="form-inline">
|
||||||
{/case}
|
<input id="c-{$item.name}" class="form-control" size="37" name="row[{$item.name}]" type="text" value="{$item.value}" data-tip="{$item.tip}">
|
||||||
{case value="select" break="0"}{/case}
|
<span><button type="button" id="plupload-{$item.name}" class="btn btn-danger plupload" data-input-id="c-{$item.name}" data-mimetype="image/*" data-multiple="{$item.type=='image'?'false':'true'}" data-preview-id="p-{$item.name}"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
||||||
{case value="selects"}
|
<span><button type="button" id="fachoose-{$item.name}" class="btn btn-primary fachoose" data-input-id="c-{$item.name}" data-mimetype="image/*" data-multiple="{$item.type=='image'?'false':'true'}"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
||||||
<select {$item.extend} name="row[{$item.name}]{$item.type=='selects'?'[]':''}" class="form-control selectpicker" data-tip="{$item.tip}" {$item.type=='selects'?'multiple':''}>
|
<ul class="row list-inline plupload-preview" id="p-{$item.name}"></ul>
|
||||||
{foreach name="item.content" item="vo"}
|
|
||||||
<option value="{$key}" {in name="key" value="$item.value"}selected{/in}>{$vo}</option>
|
|
||||||
{/foreach}
|
|
||||||
</select>
|
|
||||||
{/case}
|
|
||||||
{case value="image" break="0"}{/case}
|
|
||||||
{case value="images"}
|
|
||||||
<div class="form-inline">
|
|
||||||
<input id="c-{$item.name}" class="form-control" size="37" name="row[{$item.name}]" type="text" value="{$item.value}" data-tip="{$item.tip}">
|
|
||||||
<span><button type="button" id="plupload-{$item.name}" class="btn btn-danger plupload" data-input-id="c-{$item.name}" data-mimetype="image/*" data-multiple="{$item.type=='image'?'false':'true'}" data-preview-id="p-{$item.name}"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
|
||||||
<span><button type="button" id="fachoose-{$item.name}" class="btn btn-primary fachoose" data-input-id="c-{$item.name}" data-mimetype="image/*" data-multiple="{$item.type=='image'?'false':'true'}"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
|
||||||
<ul class="row list-inline plupload-preview" id="p-{$item.name}"></ul>
|
|
||||||
</div>
|
|
||||||
{/case}
|
|
||||||
{case value="file" break="0"}{/case}
|
|
||||||
{case value="files"}
|
|
||||||
<div class="form-inline">
|
|
||||||
<input id="c-{$item.name}" class="form-control" size="37" name="row[{$item.name}]" type="text" value="{$item.value}" data-tip="{$item.tip}">
|
|
||||||
<span><button type="button" id="plupload-{$item.name}" class="btn btn-danger plupload" data-input-id="c-{$item.name}" data-multiple="{$item.type=='file'?'false':'true'}"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
|
||||||
<span><button type="button" id="fachoose-{$item.name}" class="btn btn-primary fachoose" data-input-id="c-{$item.name}" data-multiple="{$item.type=='file'?'false':'true'}"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
|
||||||
</div>
|
|
||||||
{/case}
|
|
||||||
{case bool}
|
|
||||||
<label for="row[{$item.name}]-yes"><input id="row[{$item.name}]-yes" name="row[{$item.name}]" type="radio" value="1" {$item.value?'checked':''} data-tip="{$item.tip}" /> {:__('Yes')}</label>
|
|
||||||
<label for="row[{$item.name}]-no"><input id="row[{$item.name}]-no" name="row[{$item.name}]" type="radio" value="0" {$item.value?'':'checked'} data-tip="{$item.tip}" /> {:__('No')}</label>
|
|
||||||
{/case}
|
|
||||||
{/switch}
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-4"></div>
|
{/case}
|
||||||
|
{case value="file" break="0"}{/case}
|
||||||
|
{case value="files"}
|
||||||
|
<div class="form-inline">
|
||||||
|
<input id="c-{$item.name}" class="form-control" size="37" name="row[{$item.name}]" type="text" value="{$item.value}" data-tip="{$item.tip}">
|
||||||
|
<span><button type="button" id="plupload-{$item.name}" class="btn btn-danger plupload" data-input-id="c-{$item.name}" data-multiple="{$item.type=='file'?'false':'true'}"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
||||||
|
<span><button type="button" id="fachoose-{$item.name}" class="btn btn-primary fachoose" data-input-id="c-{$item.name}" data-multiple="{$item.type=='file'?'false':'true'}"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
||||||
|
</div>
|
||||||
|
{/case}
|
||||||
|
{case bool}
|
||||||
|
<label for="row[{$item.name}]-yes"><input id="row[{$item.name}]-yes" name="row[{$item.name}]" type="radio" value="1" {$item.value?'checked':''} data-tip="{$item.tip}" /> {:__('Yes')}</label>
|
||||||
|
<label for="row[{$item.name}]-no"><input id="row[{$item.name}]-no" name="row[{$item.name}]" type="radio" value="0" {$item.value?'':'checked'} data-tip="{$item.tip}" /> {:__('No')}</label>
|
||||||
|
{/case}
|
||||||
|
{default /}{$item.value}
|
||||||
|
{/switch}
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-sm-4"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{/foreach}
|
{/foreach}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div class="form-group layer-footer">
|
<div class="form-group layer-footer">
|
||||||
|
|
|
||||||
|
|
@ -122,6 +122,11 @@
|
||||||
padding:30px 0;
|
padding:30px 0;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
{if preg_match('/\/admin\/|admin\.php|admin_d75KABNWt\.php/i', url())}
|
||||||
|
<div class="alert alert-danger-light">
|
||||||
|
{:__('Security tips')}
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
<div class="panel panel-default panel-intro">
|
<div class="panel panel-default panel-intro">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
{:build_heading(null, false)}
|
{:build_heading(null, false)}
|
||||||
|
|
|
||||||
|
|
@ -74,6 +74,12 @@
|
||||||
<input id="c-bio" data-rule="" class="form-control" name="row[bio]" type="text" value="{$row.bio}">
|
<input id="c-bio" data-rule="" class="form-control" name="row[bio]" type="text" value="{$row.bio}">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="c-money" class="control-label col-xs-12 col-sm-2">{:__('Money')}:</label>
|
||||||
|
<div class="col-xs-12 col-sm-4">
|
||||||
|
<input id="c-money" data-rule="required" class="form-control" name="row[money]" type="number" value="{$row.money}">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="c-score" class="control-label col-xs-12 col-sm-2">{:__('Score')}:</label>
|
<label for="c-score" class="control-label col-xs-12 col-sm-2">{:__('Score')}:</label>
|
||||||
<div class="col-xs-12 col-sm-4">
|
<div class="col-xs-12 col-sm-4">
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
namespace app\api\controller;
|
namespace app\api\controller;
|
||||||
|
|
||||||
use app\common\controller\Api;
|
use app\common\controller\Api;
|
||||||
|
use fast\Random;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Token接口
|
* Token接口
|
||||||
|
|
@ -35,10 +36,13 @@ class Token extends Api
|
||||||
*/
|
*/
|
||||||
public function refresh()
|
public function refresh()
|
||||||
{
|
{
|
||||||
|
//删除源Token
|
||||||
$token = $this->auth->getToken();
|
$token = $this->auth->getToken();
|
||||||
|
\app\common\library\Token::delete($token);
|
||||||
|
//创建新Token
|
||||||
|
$token = Random::uuid();
|
||||||
|
\app\common\library\Token::set($token, $this->auth->id, 2592000);
|
||||||
$tokenInfo = \app\common\library\Token::get($token);
|
$tokenInfo = \app\common\library\Token::get($token);
|
||||||
$tokenInfo->expiretime = time() + 2592000;
|
|
||||||
$tokenInfo->save();
|
|
||||||
$this->success('', ['token' => $tokenInfo['token'], 'expires_in' => $tokenInfo['expires_in']]);
|
$this->success('', ['token' => $tokenInfo['token'], 'expires_in' => $tokenInfo['expires_in']]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ class Auth
|
||||||
{
|
{
|
||||||
if ($config = Config::get('user'))
|
if ($config = Config::get('user'))
|
||||||
{
|
{
|
||||||
$this->options = array_merge($this->config, $config);
|
$this->config = array_merge($this->config, $config);
|
||||||
}
|
}
|
||||||
$this->options = array_merge($this->config, $options);
|
$this->options = array_merge($this->config, $options);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,9 +14,9 @@ class Area extends Model
|
||||||
/**
|
/**
|
||||||
* 根据经纬度获取当前地区信息
|
* 根据经纬度获取当前地区信息
|
||||||
*
|
*
|
||||||
* @param string $lng 经度
|
* @param string $lng 经度
|
||||||
* @param string $lat 纬度
|
* @param string $lat 纬度
|
||||||
* @return array 城市信息
|
* @return Area 城市信息
|
||||||
*/
|
*/
|
||||||
public static function getAreaFromLngLat($lng, $lat, $level = 3)
|
public static function getAreaFromLngLat($lng, $lat, $level = 3)
|
||||||
{
|
{
|
||||||
|
|
@ -24,17 +24,14 @@ class Area extends Model
|
||||||
$rangearr = [1 => 15000, 2 => 1000, 3 => 200];
|
$rangearr = [1 => 15000, 2 => 1000, 3 => 200];
|
||||||
$geoname = isset($namearr[$level]) ? $namearr[$level] : $namearr[3];
|
$geoname = isset($namearr[$level]) ? $namearr[$level] : $namearr[3];
|
||||||
$georange = isset($rangearr[$level]) ? $rangearr[$level] : $rangearr[3];
|
$georange = isset($rangearr[$level]) ? $rangearr[$level] : $rangearr[3];
|
||||||
$neararea = [];
|
|
||||||
// 读取范围内的ID
|
// 读取范围内的ID
|
||||||
$redis = Cache::store('redis')->handler();
|
$redis = Cache::store('redis')->handler();
|
||||||
$georadiuslist = [];
|
$georadiuslist = [];
|
||||||
if (method_exists($redis, 'georadius'))
|
if (method_exists($redis, 'georadius')) {
|
||||||
{
|
|
||||||
$georadiuslist = $redis->georadius($geoname, $lng, $lat, $georange, 'km', ['WITHDIST', 'COUNT' => 5, 'ASC']);
|
$georadiuslist = $redis->georadius($geoname, $lng, $lat, $georange, 'km', ['WITHDIST', 'COUNT' => 5, 'ASC']);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($georadiuslist)
|
if ($georadiuslist) {
|
||||||
{
|
|
||||||
list($id, $distance) = $georadiuslist[0];
|
list($id, $distance) = $georadiuslist[0];
|
||||||
}
|
}
|
||||||
$id = isset($id) && $id ? $id : 3;
|
$id = isset($id) && $id ? $id : 3;
|
||||||
|
|
@ -44,16 +41,15 @@ class Area extends Model
|
||||||
/**
|
/**
|
||||||
* 根据经纬度获取省份
|
* 根据经纬度获取省份
|
||||||
*
|
*
|
||||||
* @param string $lng 经度
|
* @param string $lng 经度
|
||||||
* @param string $lat 纬度
|
* @param string $lat 纬度
|
||||||
* @return array
|
* @return Area
|
||||||
*/
|
*/
|
||||||
public static function getProvinceFromLngLat($lng, $lat)
|
public static function getProvinceFromLngLat($lng, $lat)
|
||||||
{
|
{
|
||||||
$provincedata = [];
|
$provincedata = null;
|
||||||
$citydata = self::getCityFromLngLat($lng, $lat);
|
$citydata = self::getCityFromLngLat($lng, $lat);
|
||||||
if ($citydata)
|
if ($citydata) {
|
||||||
{
|
|
||||||
$provincedata = self::get($citydata['pid']);
|
$provincedata = self::get($citydata['pid']);
|
||||||
}
|
}
|
||||||
return $provincedata;
|
return $provincedata;
|
||||||
|
|
@ -62,16 +58,15 @@ class Area extends Model
|
||||||
/**
|
/**
|
||||||
* 根据经纬度获取城市
|
* 根据经纬度获取城市
|
||||||
*
|
*
|
||||||
* @param string $lng 经度
|
* @param string $lng 经度
|
||||||
* @param string $lat 纬度
|
* @param string $lat 纬度
|
||||||
* @return array
|
* @return Area
|
||||||
*/
|
*/
|
||||||
public static function getCityFromLngLat($lng, $lat)
|
public static function getCityFromLngLat($lng, $lat)
|
||||||
{
|
{
|
||||||
$citydata = [];
|
$citydata = null;
|
||||||
$districtdata = self::getDistrictFromLngLat($lng, $lat);
|
$districtdata = self::getDistrictFromLngLat($lng, $lat);
|
||||||
if ($districtdata)
|
if ($districtdata) {
|
||||||
{
|
|
||||||
$citydata = self::get($districtdata['pid']);
|
$citydata = self::get($districtdata['pid']);
|
||||||
}
|
}
|
||||||
return $citydata;
|
return $citydata;
|
||||||
|
|
@ -80,9 +75,9 @@ class Area extends Model
|
||||||
/**
|
/**
|
||||||
* 根据经纬度获取地区
|
* 根据经纬度获取地区
|
||||||
*
|
*
|
||||||
* @param string $lng 经度
|
* @param string $lng 经度
|
||||||
* @param string $lat 纬度
|
* @param string $lat 纬度
|
||||||
* @return array
|
* @return Area
|
||||||
*/
|
*/
|
||||||
public static function getDistrictFromLngLat($lng, $lat)
|
public static function getDistrictFromLngLat($lng, $lat)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\common\model;
|
||||||
|
|
||||||
|
use think\Model;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 会员余额日志模型
|
||||||
|
*/
|
||||||
|
class MoneyLog Extends Model
|
||||||
|
{
|
||||||
|
|
||||||
|
// 表名
|
||||||
|
protected $name = 'user_money_log';
|
||||||
|
// 开启自动写入时间戳字段
|
||||||
|
protected $autoWriteTimestamp = 'int';
|
||||||
|
// 定义时间戳字段名
|
||||||
|
protected $createTime = 'createtime';
|
||||||
|
protected $updateTime = '';
|
||||||
|
// 追加属性
|
||||||
|
protected $append = [
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
@ -74,6 +74,26 @@ class User Extends Model
|
||||||
return $value;
|
return $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 变更会员余额
|
||||||
|
* @param int $money 余额
|
||||||
|
* @param int $user_id 会员ID
|
||||||
|
* @param string $memo 备注
|
||||||
|
*/
|
||||||
|
public static function money($money, $user_id, $memo)
|
||||||
|
{
|
||||||
|
$user = self::get($user_id);
|
||||||
|
if ($user)
|
||||||
|
{
|
||||||
|
$before = $user->money;
|
||||||
|
$after = $user->money + $money;
|
||||||
|
//更新会员信息
|
||||||
|
$user->save(['money' => $after]);
|
||||||
|
//写入日志
|
||||||
|
MoneyLog::create(['user_id' => $user_id, 'money' => $money, 'before' => $before, 'after' => $after, 'memo' => $memo]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 变更会员积分
|
* 变更会员积分
|
||||||
* @param int $score 积分
|
* @param int $score 积分
|
||||||
|
|
|
||||||
|
|
@ -260,8 +260,8 @@ return [
|
||||||
//是否开启前台会员中心
|
//是否开启前台会员中心
|
||||||
'usercenter' => true,
|
'usercenter' => true,
|
||||||
//登录验证码
|
//登录验证码
|
||||||
'login_captcha' => false,
|
'login_captcha' => true,
|
||||||
//登录失败超过10则1天后重试
|
//登录失败超过10次则1天后重试
|
||||||
'login_failure_retry' => true,
|
'login_failure_retry' => true,
|
||||||
//是否同一账号同一时间只能在一个地方登录
|
//是否同一账号同一时间只能在一个地方登录
|
||||||
'login_unique' => false,
|
'login_unique' => false,
|
||||||
|
|
@ -272,7 +272,7 @@ return [
|
||||||
//自动检测更新
|
//自动检测更新
|
||||||
'checkupdate' => false,
|
'checkupdate' => false,
|
||||||
//版本号
|
//版本号
|
||||||
'version' => '1.0.0.20181031_beta',
|
'version' => '1.0.0.20181127_beta',
|
||||||
//API接口地址
|
//API接口地址
|
||||||
'api_url' => 'https://api.fastadmin.net',
|
'api_url' => 'https://api.fastadmin.net',
|
||||||
],
|
],
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,8 @@ return [
|
||||||
'OK' => '确定',
|
'OK' => '确定',
|
||||||
'Cancel' => '取消',
|
'Cancel' => '取消',
|
||||||
'Loading' => '加载中',
|
'Loading' => '加载中',
|
||||||
|
'Money' => '余额',
|
||||||
|
'Score' => '积分',
|
||||||
'More' => '更多',
|
'More' => '更多',
|
||||||
'Normal' => '正常',
|
'Normal' => '正常',
|
||||||
'Hidden' => '隐藏',
|
'Hidden' => '隐藏',
|
||||||
|
|
|
||||||
|
|
@ -12,17 +12,17 @@
|
||||||
<title>FastAdmin - {:__('The fastest framework based on ThinkPHP5 and Bootstrap')}</title>
|
<title>FastAdmin - {:__('The fastest framework based on ThinkPHP5 and Bootstrap')}</title>
|
||||||
|
|
||||||
<!-- Bootstrap Core CSS -->
|
<!-- Bootstrap Core CSS -->
|
||||||
<link href="//cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">
|
<link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
|
||||||
<link href="__CDN__/assets/css/index.css" rel="stylesheet">
|
<link href="__CDN__/assets/css/index.css" rel="stylesheet">
|
||||||
|
|
||||||
<!-- Plugin CSS -->
|
<!-- Plugin CSS -->
|
||||||
<link href="//cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css" rel="stylesheet">
|
<link href="https://cdn.staticfile.org/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
|
||||||
<link href="//cdn.jsdelivr.net/npm/simple-line-icons@2.4.1/css/simple-line-icons.min.css" rel="stylesheet">
|
<link href="https://cdn.staticfile.org/simple-line-icons/2.4.1/css/simple-line-icons.min.css" rel="stylesheet">
|
||||||
|
|
||||||
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||||
<!--[if lt IE 9]>
|
<!--[if lt IE 9]>
|
||||||
<script src="//cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
|
<script src="https://cdn.staticfile.org/html5shiv/3.7.3/html5shiv.min.js"></script>
|
||||||
<script src="//cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
|
<script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
|
||||||
<![endif]-->
|
<![endif]-->
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
|
@ -163,13 +163,13 @@
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
<!-- jQuery -->
|
<!-- jQuery -->
|
||||||
<script src="//cdn.jsdelivr.net/npm/jquery@2.1.4/dist/jquery.min.js"></script>
|
<script src=https://cdn.staticfile.org/jquery/2.1.4/jquery.min.js></script>
|
||||||
|
|
||||||
<!-- Bootstrap Core JavaScript -->
|
<!-- Bootstrap Core JavaScript -->
|
||||||
<script src="//cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
|
<script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
|
||||||
|
|
||||||
<!-- Plugin JavaScript -->
|
<!-- Plugin JavaScript -->
|
||||||
<script src="//cdn.jsdelivr.net/npm/jquery.easing@1.4.1/jquery.easing.min.js"></script>
|
<script src="https://cdn.staticfile.org/jquery-easing/1.4.1/jquery.easing.min.js"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
$(function () {
|
$(function () {
|
||||||
|
|
|
||||||
|
|
@ -44,11 +44,13 @@
|
||||||
<!-- Success -->
|
<!-- Success -->
|
||||||
<div class="basicinfo">
|
<div class="basicinfo">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-4 col-md-2">{:__('Lv')}</div>
|
<div class="col-xs-4 col-md-2">{:__('Money')}</div>
|
||||||
<div class="col-xs-8 col-md-4"><a href="javascript:;" class="viewlv">{$user.level}</a>
|
<div class="col-xs-8 col-md-4">
|
||||||
|
<a href="javascript:;" class="viewmoney">{$user.money}</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-4 col-md-2">{:__('Score')}</div>
|
<div class="col-xs-4 col-md-2">{:__('Score')}</div>
|
||||||
<div class="col-xs-8 col-md-4"><a href="javascript:;" class="viewscore">{$user.score}</a>
|
<div class="col-xs-8 col-md-4">
|
||||||
|
<a href="javascript:;" class="viewscore">{$user.score}</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
|
|
||||||
|
|
@ -365,11 +365,12 @@ class Tree
|
||||||
/**
|
/**
|
||||||
* 特殊
|
* 特殊
|
||||||
* @param integer $myid 要查询的ID
|
* @param integer $myid 要查询的ID
|
||||||
* @param string $itemtpl1 第一种HTML代码方式
|
* @param string $itemtpl1 第一种HTML代码方式
|
||||||
* @param string $itemtpl2 第二种HTML代码方式
|
* @param string $itemtpl2 第二种HTML代码方式
|
||||||
* @param mixed $selectedids 默认选中
|
* @param mixed $selectedids 默认选中
|
||||||
* @param mixed $disabledids 禁用
|
* @param mixed $disabledids 禁用
|
||||||
* @param integer $itemprefix 前缀
|
* @param string $itemprefix 前缀
|
||||||
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getTreeSpecial($myid, $itemtpl1, $itemtpl2, $selectedids = 0, $disabledids = 0, $itemprefix = '')
|
public function getTreeSpecial($myid, $itemtpl1, $itemtpl2, $selectedids = 0, $disabledids = 0, $itemprefix = '')
|
||||||
{
|
{
|
||||||
|
|
@ -413,9 +414,8 @@ class Tree
|
||||||
*
|
*
|
||||||
* 获取树状数组
|
* 获取树状数组
|
||||||
* @param string $myid 要查询的ID
|
* @param string $myid 要查询的ID
|
||||||
* @param string $nametpl 名称条目模板
|
|
||||||
* @param string $itemprefix 前缀
|
* @param string $itemprefix 前缀
|
||||||
* @return string
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function getTreeArray($myid, $itemprefix = '')
|
public function getTreeArray($myid, $itemprefix = '')
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -9,15 +9,15 @@
|
||||||
<title>FastAdmin</title>
|
<title>FastAdmin</title>
|
||||||
|
|
||||||
<!-- Bootstrap Core CSS -->
|
<!-- Bootstrap Core CSS -->
|
||||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">
|
<link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
|
||||||
|
|
||||||
<!-- Plugin CSS -->
|
<!-- Plugin CSS -->
|
||||||
<link href="https://cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css" rel="stylesheet">
|
<link href="https://cdn.staticfile.org/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
|
||||||
|
|
||||||
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||||
<!--[if lt IE 9]>
|
<!--[if lt IE 9]>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
|
<script src="https://cdn.staticfile.org/html5shiv/3.7.3/html5shiv.min.js"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
|
<script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
|
||||||
<![endif]-->
|
<![endif]-->
|
||||||
|
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
|
|
@ -3736,10 +3736,10 @@
|
||||||
</div> <!-- /container -->
|
</div> <!-- /container -->
|
||||||
|
|
||||||
<!-- jQuery -->
|
<!-- jQuery -->
|
||||||
<script src="https://cdn.jsdelivr.net/npm/jquery@2.1.4/dist/jquery.min.js"></script>
|
<script src="https://cdn.staticfile.org/jquery/2.1.4/jquery.min.js"></script>
|
||||||
|
|
||||||
<!-- Bootstrap Core JavaScript -->
|
<!-- Bootstrap Core JavaScript -->
|
||||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
|
<script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
function syntaxHighlight(json) {
|
function syntaxHighlight(json) {
|
||||||
|
|
|
||||||
|
|
@ -558,14 +558,14 @@ form.form-horizontal .control-label {
|
||||||
float: left;
|
float: left;
|
||||||
background: none;
|
background: none;
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
width: 80px;
|
min-width: 80px;
|
||||||
clear: none;
|
clear: none;
|
||||||
}
|
}
|
||||||
#treeview .jstree-leaf {
|
#treeview .jstree-leaf {
|
||||||
float: left;
|
float: left;
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
padding-left: 24px;
|
padding-left: 24px;
|
||||||
width: 80px;
|
min-width: 80px;
|
||||||
clear: none;
|
clear: none;
|
||||||
color: #777;
|
color: #777;
|
||||||
}
|
}
|
||||||
|
|
@ -959,7 +959,7 @@ table.table-nowrap thead > tr > th {
|
||||||
}
|
}
|
||||||
.main-sidebar,
|
.main-sidebar,
|
||||||
.left-side {
|
.left-side {
|
||||||
padding-top: 94px;
|
padding-top: 50px;
|
||||||
}
|
}
|
||||||
.n-bootstrap .n-right {
|
.n-bootstrap .n-right {
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -252,9 +252,6 @@ footer.footer {
|
||||||
color: #aaa;
|
color: #aaa;
|
||||||
background: #555;
|
background: #555;
|
||||||
margin-top: 25px;
|
margin-top: 25px;
|
||||||
position: fixed;
|
|
||||||
bottom: 0;
|
|
||||||
z-index: 99;
|
|
||||||
}
|
}
|
||||||
footer.footer .copyright {
|
footer.footer .copyright {
|
||||||
line-height: 50px;
|
line-height: 50px;
|
||||||
|
|
@ -370,12 +367,9 @@ footer.footer .copyright a:hover {
|
||||||
main.content {
|
main.content {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
top: 0;
|
|
||||||
position: absolute;
|
|
||||||
z-index: 10;
|
|
||||||
bottom: 50px;
|
|
||||||
padding: 15px;
|
padding: 15px;
|
||||||
padding-top: 67px;
|
padding-top: 20px;
|
||||||
|
min-height: calc(100vh - 125px);
|
||||||
}
|
}
|
||||||
.sidenav {
|
.sidenav {
|
||||||
padding: 20px 0 10px 0;
|
padding: 20px 0 10px 0;
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -152,6 +152,11 @@ $(function () {
|
||||||
AdminLTEOptions);
|
AdminLTEOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ('ontouchstart' in document.documentElement) {
|
||||||
|
$.AdminLTE.options.sidebarSlimScroll = false;
|
||||||
|
$(".main-sidebar").css({height: ($(window).height() - $(".main-header").height()) + "px", overflow: "scroll"});
|
||||||
|
}
|
||||||
|
|
||||||
//Easy access to options
|
//Easy access to options
|
||||||
var o = $.AdminLTE.options;
|
var o = $.AdminLTE.options;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -132,7 +132,7 @@ define(['jquery', 'bootstrap', 'backend', 'form', 'table'], function ($, undefin
|
||||||
var style = row.storage == 'upyun' ? '!/fwfh/120x90' : '';
|
var style = row.storage == 'upyun' ? '!/fwfh/120x90' : '';
|
||||||
return '<a href="' + row.fullurl + '" target="_blank"><img src="' + row.fullurl + style + '" alt="" style="max-height:90px;max-width:120px"></a>';
|
return '<a href="' + row.fullurl + '" target="_blank"><img src="' + row.fullurl + style + '" alt="" style="max-height:90px;max-width:120px"></a>';
|
||||||
} else {
|
} else {
|
||||||
return '<a href="' + row.fullurl + '" target="_blank">' + __('None') + '</a>';
|
return '<a href="' + row.fullurl + '" target="_blank"><img src="https://tool.fastadmin.net/icon/' + row.imagetype + '.png" alt=""></a>';
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
url: function (value, row, index) {
|
url: function (value, row, index) {
|
||||||
|
|
|
||||||
|
|
@ -19,24 +19,17 @@ define(['jquery', 'bootstrap', 'backend', 'addtabs', 'adminlte', 'form'], functi
|
||||||
|
|
||||||
//快捷搜索
|
//快捷搜索
|
||||||
$(".menuresult").width($("form.sidebar-form > .input-group").width());
|
$(".menuresult").width($("form.sidebar-form > .input-group").width());
|
||||||
var isAndroid = /(android)/i.test(navigator.userAgent);
|
|
||||||
var searchResult = $(".menuresult");
|
var searchResult = $(".menuresult");
|
||||||
$("form.sidebar-form").on("blur", "input[name=q]", function () {
|
$("form.sidebar-form").on("blur", "input[name=q]", function () {
|
||||||
searchResult.addClass("hide");
|
searchResult.addClass("hide");
|
||||||
if (isAndroid) {
|
|
||||||
$.AdminLTE.options.sidebarSlimScroll = true;
|
|
||||||
}
|
|
||||||
}).on("focus", "input[name=q]", function () {
|
}).on("focus", "input[name=q]", function () {
|
||||||
if (isAndroid) {
|
|
||||||
$.AdminLTE.options.sidebarSlimScroll = false;
|
|
||||||
}
|
|
||||||
if ($("a", searchResult).size() > 0) {
|
if ($("a", searchResult).size() > 0) {
|
||||||
searchResult.removeClass("hide");
|
searchResult.removeClass("hide");
|
||||||
}
|
}
|
||||||
}).on("keyup", "input[name=q]", function () {
|
}).on("keyup", "input[name=q]", function () {
|
||||||
searchResult.html('');
|
searchResult.html('');
|
||||||
var val = $(this).val();
|
var val = $(this).val();
|
||||||
var html = new Array();
|
var html = [];
|
||||||
if (val != '') {
|
if (val != '') {
|
||||||
$("ul.sidebar-menu li a[addtabs]:not([href^='javascript:;'])").each(function () {
|
$("ul.sidebar-menu li a[addtabs]:not([href^='javascript:;'])").each(function () {
|
||||||
if ($("span:first", this).text().indexOf(val) > -1 || $(this).attr("py").indexOf(val) > -1 || $(this).attr("pinyin").indexOf(val) > -1) {
|
if ($("span:first", this).text().indexOf(val) > -1 || $(this).attr("py").indexOf(val) > -1 || $(this).attr("pinyin").indexOf(val) > -1) {
|
||||||
|
|
@ -122,7 +115,7 @@ define(['jquery', 'bootstrap', 'backend', 'addtabs', 'adminlte', 'form'], functi
|
||||||
Layer.open({
|
Layer.open({
|
||||||
title: __('Discover new version'),
|
title: __('Discover new version'),
|
||||||
maxHeight: 400,
|
maxHeight: 400,
|
||||||
content: '<h5 style="background-color:#f7f7f7; font-size:14px; padding: 10px;">' + __('Your current version') + ':' + ret.data.version + ',' + __('New version') + ':' + ret.data.newversion + '</h5><span class="label label-danger">'+__('Release notes')+'</span><br/>' + ret.data.upgradetext,
|
content: '<h5 style="background-color:#f7f7f7; font-size:14px; padding: 10px;">' + __('Your current version') + ':' + ret.data.version + ',' + __('New version') + ':' + ret.data.newversion + '</h5><span class="label label-danger">' + __('Release notes') + '</span><br/>' + ret.data.upgradetext,
|
||||||
btn: [__('Go to download'), __('Ignore this version'), __('Do not remind again')],
|
btn: [__('Go to download'), __('Ignore this version'), __('Do not remind again')],
|
||||||
btn2: function (index, layero) {
|
btn2: function (index, layero) {
|
||||||
localStorage.setItem("ignoreversion", ret.data.newversion);
|
localStorage.setItem("ignoreversion", ret.data.newversion);
|
||||||
|
|
@ -304,8 +297,8 @@ define(['jquery', 'bootstrap', 'backend', 'addtabs', 'adminlte', 'form'], functi
|
||||||
//这一行需要放在点击左侧链接事件之前
|
//这一行需要放在点击左侧链接事件之前
|
||||||
var addtabs = Config.referer ? localStorage.getItem("addtabs") : null;
|
var addtabs = Config.referer ? localStorage.getItem("addtabs") : null;
|
||||||
|
|
||||||
//绑定tabs事件,如果需要点击强制刷新iframe,则请将iframeForceRefresh置为true
|
//绑定tabs事件,如果需要点击强制刷新iframe,则请将iframeForceRefresh置为true,iframeForceRefreshTable只强制刷新表格
|
||||||
nav.addtabs({iframeHeight: "100%", iframeForceRefresh: false, nav: nav});
|
nav.addtabs({iframeHeight: "100%", iframeForceRefresh: false, iframeForceRefreshTable: true, nav: nav});
|
||||||
|
|
||||||
if ($("ul.sidebar-menu li.active a").size() > 0) {
|
if ($("ul.sidebar-menu li.active a").size() > 0) {
|
||||||
$("ul.sidebar-menu li.active a").trigger("click");
|
$("ul.sidebar-menu li.active a").trigger("click");
|
||||||
|
|
|
||||||
|
|
@ -350,6 +350,7 @@
|
||||||
var searchQuery = getSearchQuery(this);
|
var searchQuery = getSearchQuery(this);
|
||||||
this.trigger('common-search', this, searchQuery);
|
this.trigger('common-search', this, searchQuery);
|
||||||
this.options.pageNumber = 1;
|
this.options.pageNumber = 1;
|
||||||
|
this.options.pageSize = $.fn.bootstrapTable.defaults.pageSize;
|
||||||
this.refresh({});
|
this.refresh({});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -250,7 +250,7 @@ define(['jquery', 'bootstrap', 'toastr', 'layer', 'lang'], function ($, undefine
|
||||||
i = 1;
|
i = 1;
|
||||||
string = string.toLowerCase();
|
string = string.toLowerCase();
|
||||||
//string = typeof Lang[string] != 'undefined' ? Lang[string] : string;
|
//string = typeof Lang[string] != 'undefined' ? Lang[string] : string;
|
||||||
if (typeof Lang[string] != 'undefined') {
|
if (typeof Lang !== 'undefined' && typeof Lang[string] !== 'undefined') {
|
||||||
if (typeof Lang[string] == 'object')
|
if (typeof Lang[string] == 'object')
|
||||||
return Lang[string];
|
return Lang[string];
|
||||||
string = Lang[string];
|
string = Lang[string];
|
||||||
|
|
|
||||||
|
|
@ -904,7 +904,7 @@ define('fast',['jquery', 'bootstrap', 'toastr', 'layer', 'lang'], function ($, u
|
||||||
i = 1;
|
i = 1;
|
||||||
string = string.toLowerCase();
|
string = string.toLowerCase();
|
||||||
//string = typeof Lang[string] != 'undefined' ? Lang[string] : string;
|
//string = typeof Lang[string] != 'undefined' ? Lang[string] : string;
|
||||||
if (typeof Lang[string] != 'undefined') {
|
if (typeof Lang !== 'undefined' && typeof Lang[string] !== 'undefined') {
|
||||||
if (typeof Lang[string] == 'object')
|
if (typeof Lang[string] == 'object')
|
||||||
return Lang[string];
|
return Lang[string];
|
||||||
string = Lang[string];
|
string = Lang[string];
|
||||||
|
|
@ -8433,7 +8433,7 @@ define('validator',['validator-core', 'validator-lang'], function (Validator, un
|
||||||
define('form',['jquery', 'bootstrap', 'upload', 'validator'], function ($, undefined, Upload, Validator) {
|
define('form',['jquery', 'bootstrap', 'upload', 'validator'], function ($, undefined, Upload, Validator) {
|
||||||
var Form = {
|
var Form = {
|
||||||
config: {
|
config: {
|
||||||
fieldlisttpl: '<dd class="form-inline"><input type="text" name="<%=name%>[<%=index%>][key]" class="form-control" value="<%=row.key%>" size="10" /> <input type="text" name="<%=name%>[<%=index%>][value]" class="form-control" value="<%=row.value%>" size="40" /> <span class="btn btn-sm btn-danger btn-remove"><i class="fa fa-times"></i></span> <span class="btn btn-sm btn-primary btn-dragsort"><i class="fa fa-arrows"></i></span></dd>'
|
fieldlisttpl: '<dd class="form-inline"><input type="text" name="<%=name%>[<%=index%>][key]" class="form-control" value="<%=row.key%>" size="10" /> <input type="text" name="<%=name%>[<%=index%>][value]" class="form-control" value="<%=row.value%>" size="30" /> <span class="btn btn-sm btn-danger btn-remove"><i class="fa fa-times"></i></span> <span class="btn btn-sm btn-primary btn-dragsort"><i class="fa fa-arrows"></i></span></dd>'
|
||||||
},
|
},
|
||||||
events: {
|
events: {
|
||||||
validator: function (form, success, error, submit) {
|
validator: function (form, success, error, submit) {
|
||||||
|
|
@ -9258,6 +9258,7 @@ define('form',['jquery', 'bootstrap', 'upload', 'validator'], function ($, undef
|
||||||
var searchQuery = getSearchQuery(this);
|
var searchQuery = getSearchQuery(this);
|
||||||
this.trigger('common-search', this, searchQuery);
|
this.trigger('common-search', this, searchQuery);
|
||||||
this.options.pageNumber = 1;
|
this.options.pageNumber = 1;
|
||||||
|
this.options.pageSize = $.fn.bootstrapTable.defaults.pageSize;
|
||||||
this.refresh({});
|
this.refresh({});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -10454,7 +10455,8 @@ define("drop", function(){});
|
||||||
tab: '.tab-addtabs',
|
tab: '.tab-addtabs',
|
||||||
iframeUse: true, //使用iframe还是ajax
|
iframeUse: true, //使用iframe还是ajax
|
||||||
iframeHeight: $(window).height() - 50, //固定TAB中IFRAME高度,根据需要自己修改
|
iframeHeight: $(window).height() - 50, //固定TAB中IFRAME高度,根据需要自己修改
|
||||||
iframeForceRefresh: false, //点击后强制刷新对应的iframe
|
iframeForceRefresh: false, //点击后强制加载对应的iframe
|
||||||
|
iframeForceRefreshTable: false, //点击后强制刷新对应的iframe中的table
|
||||||
callback: function () {
|
callback: function () {
|
||||||
//关闭后回调函数
|
//关闭后回调函数
|
||||||
}
|
}
|
||||||
|
|
@ -10579,6 +10581,15 @@ define("drop", function(){});
|
||||||
$("#" + conid + " iframe").attr('src', function (i, val) {
|
$("#" + conid + " iframe").attr('src', function (i, val) {
|
||||||
return val;
|
return val;
|
||||||
});
|
});
|
||||||
|
} else if (options.iframeForceRefreshTable) {
|
||||||
|
try {
|
||||||
|
//检测iframe中是否存在刷新按钮
|
||||||
|
if ($("#" + conid + " iframe").contents().find(".btn-refresh").size() > 0) {
|
||||||
|
$("#" + conid + " iframe")[0].contentWindow.$(".btn-refresh").trigger("click");
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
localStorage.setItem("addtabs", $(this).prop('outerHTML'));
|
localStorage.setItem("addtabs", $(this).prop('outerHTML'));
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
define(['jquery', 'bootstrap', 'upload', 'validator'], function ($, undefined, Upload, Validator) {
|
define(['jquery', 'bootstrap', 'upload', 'validator'], function ($, undefined, Upload, Validator) {
|
||||||
var Form = {
|
var Form = {
|
||||||
config: {
|
config: {
|
||||||
fieldlisttpl: '<dd class="form-inline"><input type="text" name="<%=name%>[<%=index%>][key]" class="form-control" value="<%=row.key%>" size="10" /> <input type="text" name="<%=name%>[<%=index%>][value]" class="form-control" value="<%=row.value%>" size="40" /> <span class="btn btn-sm btn-danger btn-remove"><i class="fa fa-times"></i></span> <span class="btn btn-sm btn-primary btn-dragsort"><i class="fa fa-arrows"></i></span></dd>'
|
fieldlisttpl: '<dd class="form-inline"><input type="text" name="<%=name%>[<%=index%>][key]" class="form-control" value="<%=row.key%>" size="10" /> <input type="text" name="<%=name%>[<%=index%>][value]" class="form-control" value="<%=row.value%>" size="30" /> <span class="btn btn-sm btn-danger btn-remove"><i class="fa fa-times"></i></span> <span class="btn btn-sm btn-primary btn-dragsort"><i class="fa fa-arrows"></i></span></dd>'
|
||||||
},
|
},
|
||||||
events: {
|
events: {
|
||||||
validator: function (form, success, error, submit) {
|
validator: function (form, success, error, submit) {
|
||||||
|
|
|
||||||
|
|
@ -904,7 +904,7 @@ define('fast',['jquery', 'bootstrap', 'toastr', 'layer', 'lang'], function ($, u
|
||||||
i = 1;
|
i = 1;
|
||||||
string = string.toLowerCase();
|
string = string.toLowerCase();
|
||||||
//string = typeof Lang[string] != 'undefined' ? Lang[string] : string;
|
//string = typeof Lang[string] != 'undefined' ? Lang[string] : string;
|
||||||
if (typeof Lang[string] != 'undefined') {
|
if (typeof Lang !== 'undefined' && typeof Lang[string] !== 'undefined') {
|
||||||
if (typeof Lang[string] == 'object')
|
if (typeof Lang[string] == 'object')
|
||||||
return Lang[string];
|
return Lang[string];
|
||||||
string = Lang[string];
|
string = Lang[string];
|
||||||
|
|
|
||||||
|
|
@ -641,14 +641,14 @@ form.form-horizontal .control-label {
|
||||||
float: left;
|
float: left;
|
||||||
background: none;
|
background: none;
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
width: 80px;
|
min-width: 80px;
|
||||||
clear: none;
|
clear: none;
|
||||||
}
|
}
|
||||||
.jstree-leaf {
|
.jstree-leaf {
|
||||||
float: left;
|
float: left;
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
padding-left: 24px;
|
padding-left: 24px;
|
||||||
width: 80px;
|
min-width: 80px;
|
||||||
clear: none;
|
clear: none;
|
||||||
color: #777;
|
color: #777;
|
||||||
}
|
}
|
||||||
|
|
@ -1092,7 +1092,7 @@ table.table-nowrap {
|
||||||
}
|
}
|
||||||
|
|
||||||
.main-sidebar, .left-side {
|
.main-sidebar, .left-side {
|
||||||
padding-top: 94px;
|
padding-top: 50px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.n-bootstrap {
|
.n-bootstrap {
|
||||||
|
|
|
||||||
|
|
@ -261,7 +261,7 @@ body {
|
||||||
}
|
}
|
||||||
|
|
||||||
footer.footer{
|
footer.footer{
|
||||||
width:100%;color: #aaa;background: #555;margin-top:25px;position: fixed;bottom: 0;z-index:99;
|
width:100%;color: #aaa;background: #555;margin-top:25px;
|
||||||
.copyright{
|
.copyright{
|
||||||
line-height: 50px;text-align: center;background: #393939;margin:0;
|
line-height: 50px;text-align: center;background: #393939;margin:0;
|
||||||
a{
|
a{
|
||||||
|
|
@ -345,12 +345,9 @@ footer.footer{
|
||||||
main.content {
|
main.content {
|
||||||
width:100%;
|
width:100%;
|
||||||
overflow:auto;
|
overflow:auto;
|
||||||
top:0;
|
|
||||||
position:absolute;
|
|
||||||
z-index:10;
|
|
||||||
bottom:50px;
|
|
||||||
padding:15px;
|
padding:15px;
|
||||||
padding-top:67px;
|
padding-top:20px;
|
||||||
|
min-height:calc(~ '100vh - 125px');
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidenav {
|
.sidenav {
|
||||||
|
|
|
||||||
|
|
@ -409,7 +409,7 @@ if (isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] == 'POST') {
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<!-- jQuery -->
|
<!-- jQuery -->
|
||||||
<script src="https://cdn.jsdelivr.net/npm/jquery@2.1.4/dist/jquery.min.js"></script>
|
<script src="https://cdn.staticfile.org/jquery/2.1.4/jquery.min.js"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
$(function () {
|
$(function () {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue