mirror of https://gitee.com/karson/fastadmin.git
新增插件功能
新增后台版本检测功能 新增插件命令行操作 新增citypicker城市选择插件 新增Backend.api.open的callback功能 新增Backend.api.close方法用于回调 新增Menu菜单类 新增Version版本类 新增rmdirs和copydirs函数 新增btn-ajax类直接发送AJAX请求功能 新增$this->assignconfig渲染数据到JS中的功能 启用全新网站首页 变更上传和表单的接口参数 变更菜单栏折叠时的展现方式 修复在包含下线划表的关联模型下的搜索错误 移除auth_rule表中name的admin前缀 移除从DOM中绑定上传和表单的事件 移除插件化后的模块及数据库 移除使用$this->code和$this->data功能 移除前台冗余的控制器和类pull/9/head v1.0.0.20170808_beta
parent
241c6fc370
commit
0cb5862736
|
|
@ -16,8 +16,9 @@ FastAdmin是一款基于ThinkPHP5+Bootstrap的极速后台开发框架。
|
|||
* 基于`Bower`进行前端组件包管理
|
||||
* 数据库表一键生成`CRUD`,包括控制器、模型、视图、JS、语言包
|
||||
* 一键压缩打包JS和CSS文件
|
||||
* 强大的插件扩展功能,在线安装卸载插件
|
||||
* 多语言支持,服务端及客户端支持
|
||||
* 无缝整合又拍云上传功能
|
||||
* 无缝整合又拍云、七牛上传等云存储功能
|
||||
* 第三方登录(QQ、微信、微博)整合
|
||||
* Ucenter整合
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,226 @@
|
|||
<?php
|
||||
|
||||
namespace app\admin\command;
|
||||
|
||||
use think\addons\AddonException;
|
||||
use think\addons\Service;
|
||||
use think\console\Command;
|
||||
use think\console\Input;
|
||||
use think\console\input\Option;
|
||||
use think\console\Output;
|
||||
use think\Exception;
|
||||
|
||||
class Addon extends Command
|
||||
{
|
||||
|
||||
protected function configure()
|
||||
{
|
||||
$this
|
||||
->setName('addon')
|
||||
->addOption('name', 'a', Option::VALUE_REQUIRED, 'addon name', null)
|
||||
->addOption('action', 'c', Option::VALUE_REQUIRED, 'action(create/enable/disable/install/uninstall/refresh)', 'create')
|
||||
->addOption('force', 'f', Option::VALUE_OPTIONAL, 'force override', null)
|
||||
->setDescription('Addon manager');
|
||||
}
|
||||
|
||||
protected function execute(Input $input, Output $output)
|
||||
{
|
||||
$name = $input->getOption('name') ?: '';
|
||||
$action = $input->getOption('action') ?: '';
|
||||
//强制覆盖
|
||||
$force = $input->getOption('force');
|
||||
|
||||
include dirname(__DIR__) . DS . 'common.php';
|
||||
|
||||
if (!$name)
|
||||
{
|
||||
throw new Exception('Addon name could not be empty');
|
||||
}
|
||||
if (!$action || !in_array($action, ['create', 'disable', 'enable', 'install', 'uninstall', 'refresh']))
|
||||
{
|
||||
throw new Exception('Please input correct action name');
|
||||
}
|
||||
|
||||
$addonDir = ADDON_PATH . $name;
|
||||
switch ($action)
|
||||
{
|
||||
case 'create':
|
||||
//非覆盖模式时如果存在则报错
|
||||
if (is_dir($addonDir) && !$force)
|
||||
{
|
||||
throw new Exception("addon already exists!\nIf you need to create again, use the parameter --force=true ");
|
||||
}
|
||||
//如果存在先移除
|
||||
if (is_dir($addonDir))
|
||||
{
|
||||
rmdirs($addonDir);
|
||||
}
|
||||
mkdir($addonDir);
|
||||
$data = [
|
||||
'name' => $name,
|
||||
'addon' => $name,
|
||||
'addonClassName' => ucfirst($name)
|
||||
];
|
||||
$this->writeToFile("addon", $data, $addonDir . DS . ucfirst($name) . '.php');
|
||||
$this->writeToFile("config", $data, $addonDir . DS . 'config.php');
|
||||
$this->writeToFile("info", $data, $addonDir . DS . 'info.ini');
|
||||
$output->info("Create Successed!");
|
||||
break;
|
||||
case 'disable':
|
||||
case 'enable':
|
||||
try
|
||||
{
|
||||
//调用启用、禁用的方法
|
||||
Service::$action($name, 0);
|
||||
}
|
||||
catch (AddonException $e)
|
||||
{
|
||||
if ($e->getCode() != -3)
|
||||
{
|
||||
throw new Exception($e->getMessage());
|
||||
}
|
||||
//如果有冲突文件则提醒
|
||||
$data = $e->getData();
|
||||
foreach ($data['conflictlist'] as $k => $v)
|
||||
{
|
||||
$output->warning($v);
|
||||
}
|
||||
$output->info("Are you sure you want to " . ($action == 'enable' ? 'override' : 'delete') . " all those files? Type 'yes' to continue: ");
|
||||
$line = fgets(STDIN);
|
||||
if (trim($line) != 'yes')
|
||||
{
|
||||
throw new Exception("Operation is aborted!");
|
||||
}
|
||||
//调用启用、禁用的方法
|
||||
Service::$action($name, 1);
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
throw new Exception($e->getMessage());
|
||||
}
|
||||
$output->info(ucfirst($action) . " Successed!");
|
||||
break;
|
||||
case 'install':
|
||||
//非覆盖模式时如果存在则报错
|
||||
if (is_dir($addonDir) && !$force)
|
||||
{
|
||||
throw new Exception("addon already exists!\nIf you need to install again, use the parameter --force=true ");
|
||||
}
|
||||
//如果存在先移除
|
||||
if (is_dir($addonDir))
|
||||
{
|
||||
rmdirs($addonDir);
|
||||
}
|
||||
try
|
||||
{
|
||||
Service::install($name, 0);
|
||||
}
|
||||
catch (AddonException $e)
|
||||
{
|
||||
if ($e->getCode() != -3)
|
||||
{
|
||||
throw new Exception($e->getMessage());
|
||||
}
|
||||
//如果有冲突文件则提醒
|
||||
$data = $e->getData();
|
||||
foreach ($data['conflictlist'] as $k => $v)
|
||||
{
|
||||
$output->warning($v);
|
||||
}
|
||||
$output->info("Are you sure you want to override all those files? Type 'yes' to continue: ");
|
||||
$line = fgets(STDIN);
|
||||
if (trim($line) != 'yes')
|
||||
{
|
||||
throw new Exception("Operation is aborted!");
|
||||
}
|
||||
Service::install($name, 1);
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
throw new Exception($e->getMessage());
|
||||
}
|
||||
|
||||
$output->info("Install Successed!");
|
||||
break;
|
||||
case 'uninstall':
|
||||
//非覆盖模式时如果存在则报错
|
||||
if (!$force)
|
||||
{
|
||||
throw new Exception("If you need to uninstall addon, use the parameter --force=true ");
|
||||
}
|
||||
try
|
||||
{
|
||||
Service::uninstall($name, 0);
|
||||
}
|
||||
catch (AddonException $e)
|
||||
{
|
||||
if ($e->getCode() != -3)
|
||||
{
|
||||
throw new Exception($e->getMessage());
|
||||
}
|
||||
//如果有冲突文件则提醒
|
||||
$data = $e->getData();
|
||||
foreach ($data['conflictlist'] as $k => $v)
|
||||
{
|
||||
$output->warning($v);
|
||||
}
|
||||
$output->info("Are you sure you want to delete all those files? Type 'yes' to continue: ");
|
||||
$line = fgets(STDIN);
|
||||
if (trim($line) != 'yes')
|
||||
{
|
||||
throw new Exception("Operation is aborted!");
|
||||
}
|
||||
Service::uninstall($name, 1);
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
throw new Exception($e->getMessage());
|
||||
}
|
||||
|
||||
$output->info("Uninstall Successed!");
|
||||
break;
|
||||
case 'refresh':
|
||||
Service::refresh();
|
||||
$output->info("Refresh Successed!");
|
||||
break;
|
||||
default :
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 写入到文件
|
||||
* @param string $name
|
||||
* @param array $data
|
||||
* @param string $pathname
|
||||
* @return mixed
|
||||
*/
|
||||
protected function writeToFile($name, $data, $pathname)
|
||||
{
|
||||
$search = $replace = [];
|
||||
foreach ($data as $k => $v)
|
||||
{
|
||||
$search[] = "{%{$k}%}";
|
||||
$replace[] = $v;
|
||||
}
|
||||
$stub = file_get_contents($this->getStub($name));
|
||||
$content = str_replace($search, $replace, $stub);
|
||||
|
||||
if (!is_dir(dirname($pathname)))
|
||||
{
|
||||
mkdir(strtolower(dirname($pathname)), 0755, true);
|
||||
}
|
||||
return file_put_contents($pathname, $content);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取基础模板
|
||||
* @param string $name
|
||||
* @return string
|
||||
*/
|
||||
protected function getStub($name)
|
||||
{
|
||||
return __DIR__ . '/Addon/stubs/' . $name . '.stub';
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
<?php
|
||||
|
||||
namespace addons\{%name%};
|
||||
|
||||
use think\Addons;
|
||||
|
||||
/**
|
||||
* 插件
|
||||
*/
|
||||
class {%addonClassName%} extends Addons
|
||||
{
|
||||
|
||||
/**
|
||||
* 插件安装方法
|
||||
* @return bool
|
||||
*/
|
||||
public function install()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 插件卸载方法
|
||||
* @return bool
|
||||
*/
|
||||
public function uninstall()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 实现钩子方法
|
||||
* @return mixed
|
||||
*/
|
||||
public function testhook($param)
|
||||
{
|
||||
// 调用钩子时候的参数信息
|
||||
print_r($param);
|
||||
// 当前插件的配置信息,配置信息存在当前目录的config.php文件中,见下方
|
||||
print_r($this->getConfig());
|
||||
// 可以返回模板,模板文件默认读取的为插件目录中的文件。模板名不能为空!
|
||||
//return $this->fetch('view/info');
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
[
|
||||
//配置唯一标识
|
||||
'name' => 'usernmae',
|
||||
//显示的标题
|
||||
'title' => '用户名',
|
||||
//类型
|
||||
'type' => 'string',
|
||||
//数据字典
|
||||
'content' => [
|
||||
],
|
||||
//值
|
||||
'value' => '',
|
||||
//验证规则
|
||||
'rule' => 'required',
|
||||
//错误消息
|
||||
'msg' => '',
|
||||
//提示消息
|
||||
'tip' => '',
|
||||
//成功消息
|
||||
'ok' => '',
|
||||
//扩展信息
|
||||
'extend' => ''
|
||||
],
|
||||
[
|
||||
'name' => 'password',
|
||||
'title' => '密码',
|
||||
'type' => 'string',
|
||||
'content' => [
|
||||
],
|
||||
'value' => '',
|
||||
'rule' => 'required',
|
||||
'msg' => '',
|
||||
'tip' => '',
|
||||
'ok' => '',
|
||||
'extend' => ''
|
||||
],
|
||||
];
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
name = {%name%}
|
||||
title = 插件名称
|
||||
intro = FastAdmin插件
|
||||
author = yourname
|
||||
website = http://www.fastadmin.net
|
||||
version = 1.0.0
|
||||
state = 1
|
||||
|
|
@ -44,6 +44,11 @@ class Crud extends Command
|
|||
*/
|
||||
protected $switchSuffix = ['switch'];
|
||||
|
||||
/**
|
||||
* 城市后缀
|
||||
*/
|
||||
protected $citySuffix = ['city'];
|
||||
|
||||
/**
|
||||
* Selectpage对应的后缀
|
||||
*/
|
||||
|
|
@ -114,6 +119,7 @@ class Crud extends Command
|
|||
->addOption('filefield', null, Option::VALUE_OPTIONAL | Option::VALUE_IS_ARRAY, 'automatically generate file component with suffix', null)
|
||||
->addOption('intdatesuffix', null, Option::VALUE_OPTIONAL | Option::VALUE_IS_ARRAY, 'automatically generate date component with suffix', null)
|
||||
->addOption('switchsuffix', null, Option::VALUE_OPTIONAL | Option::VALUE_IS_ARRAY, 'automatically generate switch component with suffix', null)
|
||||
->addOption('citysuffix', null, Option::VALUE_OPTIONAL | Option::VALUE_IS_ARRAY, 'automatically generate citypicker component with suffix', null)
|
||||
->addOption('selectpagesuffix', null, Option::VALUE_OPTIONAL | Option::VALUE_IS_ARRAY, 'automatically generate selectpage component with suffix', null)
|
||||
->addOption('selectpagessuffix', null, Option::VALUE_OPTIONAL | Option::VALUE_IS_ARRAY, 'automatically generate multiple selectpage component with suffix', null)
|
||||
->addOption('sortfield', null, Option::VALUE_OPTIONAL, 'sort field', null)
|
||||
|
|
@ -162,6 +168,8 @@ class Crud extends Command
|
|||
$intdatesuffix = $input->getOption('intdatesuffix');
|
||||
//开关后缀
|
||||
$switchsuffix = $input->getOption('switchsuffix');
|
||||
//城市后缀
|
||||
$citysuffix = $input->getOption('citysuffix');
|
||||
//selectpage后缀
|
||||
$selectpagesuffix = $input->getOption('selectpagesuffix');
|
||||
//selectpage多选后缀
|
||||
|
|
@ -182,6 +190,8 @@ class Crud extends Command
|
|||
$this->intDateSuffix = $intdatesuffix;
|
||||
if ($switchsuffix)
|
||||
$this->switchSuffix = $switchsuffix;
|
||||
if ($citysuffix)
|
||||
$this->citySuffix = $citysuffix;
|
||||
if ($selectpagesuffix)
|
||||
$this->selectpageSuffix = $selectpagesuffix;
|
||||
if ($selectpagessuffix)
|
||||
|
|
@ -447,7 +457,7 @@ class Crud extends Command
|
|||
$defaultValue = $v['COLUMN_DEFAULT'];
|
||||
$editValue = "{\$row.{$field}}";
|
||||
// 如果默认值非null,则是一个必选项
|
||||
if (!is_null($v['COLUMN_DEFAULT']))
|
||||
if ($v['IS_NULLABLE'] == 'NO')
|
||||
{
|
||||
$attrArr['data-rule'] = 'required';
|
||||
}
|
||||
|
|
@ -556,6 +566,13 @@ class Crud extends Command
|
|||
$formEditElement .= sprintf(Form::label("{$attrArr['id']}", "%s abcdefg"), Form::checkbox($fieldName, $yes, 0, $attrArr));
|
||||
$formEditElement = str_replace('type="checkbox"', 'type="checkbox" {in name="' . "\$row.{$field}" . '" value="' . $yes . '"}checked{/in}', $formEditElement);
|
||||
}
|
||||
else if ($inputType == 'citypicker')
|
||||
{
|
||||
$attrArr['class'] = implode(' ', $cssClassArr);
|
||||
$attrArr['data-toggle'] = "city-picker";
|
||||
$formAddElement = sprintf("<div class='control-relative'>%s</div>", Form::input('text', $fieldName, $defaultValue, $attrArr));
|
||||
$formEditElement = sprintf("<div class='control-relative'>%s</div>", Form::input('text', $fieldName, $editValue, $attrArr));
|
||||
}
|
||||
else
|
||||
{
|
||||
$search = $replace = '';
|
||||
|
|
@ -1077,6 +1094,11 @@ EOD;
|
|||
{
|
||||
$inputType = "switch";
|
||||
}
|
||||
// 指定后缀结尾城市选择框
|
||||
if ($this->isMatchSuffix($fieldsName, $this->citySuffix) && ($v['DATA_TYPE'] == 'varchar' || $v['DATA_TYPE'] == 'char'))
|
||||
{
|
||||
$inputType = "citypicker";
|
||||
}
|
||||
return $inputType;
|
||||
}
|
||||
|
||||
|
|
@ -1126,19 +1148,20 @@ EOD;
|
|||
*/
|
||||
protected function getImageUpload($field, $content)
|
||||
{
|
||||
$filter = '';
|
||||
$uploadfilter = $selectfilter = '';
|
||||
if ($this->isMatchSuffix($field, $this->imageField))
|
||||
{
|
||||
$filter = ' data-mimetype="image/*"';
|
||||
$uploadfilter = ' data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp"';
|
||||
$selectfilter = ' data-mimetype="image/*"';
|
||||
}
|
||||
$multiple = substr($field, -1) == 's' ? ' data-multiple="true"' : ' data-multiple="false"';
|
||||
$preview = $filter ? ' data-preview-id="p-' . $field . '"' : '';
|
||||
$preview = $uploadfilter ? ' data-preview-id="p-' . $field . '"' : '';
|
||||
$previewcontainer = $preview ? '<ul class="row list-inline plupload-preview" id="p-' . $field . '"></ul>' : '';
|
||||
return <<<EOD
|
||||
<div class="form-inline">
|
||||
{$content}
|
||||
<span><button type="button" id="plupload-{$field}" class="btn btn-danger plupload" data-input-id="c-{$field}"{$filter}{$multiple}{$preview}><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
||||
<span><button type="button" id="fachoose-{$field}" class="btn btn-primary fachoose" data-input-id="c-{$field}"{$filter}{$multiple}><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
||||
<span><button type="button" id="plupload-{$field}" class="btn btn-danger plupload" data-input-id="c-{$field}"{$uploadfilter}{$multiple}{$preview}><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
||||
<span><button type="button" id="fachoose-{$field}" class="btn btn-primary fachoose" data-input-id="c-{$field}"{$selectfilter}{$multiple}><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
||||
{$previewcontainer}
|
||||
</div>
|
||||
EOD;
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -219,13 +219,13 @@ class Menu extends Command
|
|||
|
||||
//先定入菜单的数据
|
||||
$pid = 0;
|
||||
$name = "/admin";
|
||||
foreach (explode('/', $controller) as $k => $v)
|
||||
foreach ($controllerArr as $k => $v)
|
||||
{
|
||||
$name .= '/' . strtolower($v);
|
||||
$title = (!isset($controllerArr[$k + 1]) ? $controllerTitle : '');
|
||||
$icon = (!isset($controllerArr[$k + 1]) ? $controllerIcon : 'fa fa-list');
|
||||
$remark = (!isset($controllerArr[$k + 1]) ? $controllerRemark : '');
|
||||
$key = $k + 1;
|
||||
$name = strtolower(implode('/', array_slice($controllerArr, 0, $key)));
|
||||
$title = (!isset($controllerArr[$key]) ? $controllerTitle : '');
|
||||
$icon = (!isset($controllerArr[$key]) ? $controllerIcon : 'fa fa-list');
|
||||
$remark = (!isset($controllerArr[$key]) ? $controllerRemark : '');
|
||||
$title = $title ? $title : __(ucfirst($v) . ' manager');
|
||||
$rulemodel = $this->model->get(['name' => $name]);
|
||||
if (!$rulemodel)
|
||||
|
|
|
|||
|
|
@ -32,8 +32,8 @@ class Min extends Command
|
|||
|
||||
protected function execute(Input $input, Output $output)
|
||||
{
|
||||
$module = $input->getOption('module') ? : '';
|
||||
$resource = $input->getOption('resource') ? : '';
|
||||
$module = $input->getOption('module') ?: '';
|
||||
$resource = $input->getOption('resource') ?: '';
|
||||
|
||||
if (!$module || !in_array($module, ['frontend', 'backend', 'all']))
|
||||
{
|
||||
|
|
@ -85,8 +85,8 @@ class Min extends Command
|
|||
'jsBaseUrl' => $this->options['jsBaseUrl'],
|
||||
'cssBaseName' => str_replace('{module}', $mod, $this->options['cssBaseName']),
|
||||
'cssBaseUrl' => $this->options['cssBaseUrl'],
|
||||
'jsBasePath' => ROOT_PATH . $this->options['jsBaseUrl'],
|
||||
'cssBasePath' => ROOT_PATH . $this->options['cssBaseUrl'],
|
||||
'jsBasePath' => str_replace('\\', '/', ROOT_PATH) . $this->options['jsBaseUrl'],
|
||||
'cssBasePath' => str_replace('\\', '/', ROOT_PATH) . $this->options['cssBaseUrl'],
|
||||
'ds' => DS,
|
||||
];
|
||||
|
||||
|
|
|
|||
|
|
@ -135,3 +135,87 @@ function build_heading($title = NULL, $content = NULL)
|
|||
return '';
|
||||
return '<div class="panel-heading"><div class="panel-lead"><em>' . $title . '</em>' . $content . '</div></div>';
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断文件或文件夹是否可写
|
||||
* @param string
|
||||
* @return bool
|
||||
*/
|
||||
function is_really_writable($file)
|
||||
{
|
||||
if (DIRECTORY_SEPARATOR === '/')
|
||||
{
|
||||
return is_writable($file);
|
||||
}
|
||||
if (is_dir($file))
|
||||
{
|
||||
$file = rtrim($file, '/') . '/' . md5(mt_rand());
|
||||
if (($fp = @fopen($file, 'ab')) === FALSE)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
fclose($fp);
|
||||
@chmod($file, 0777);
|
||||
@unlink($file);
|
||||
return TRUE;
|
||||
}
|
||||
elseif (!is_file($file) OR ( $fp = @fopen($file, 'ab')) === FALSE)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
fclose($fp);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除文件夹
|
||||
* @param string $dirname
|
||||
* @return boolean
|
||||
*/
|
||||
function rmdirs($dirname)
|
||||
{
|
||||
if (!is_dir($dirname))
|
||||
return false;
|
||||
$files = new RecursiveIteratorIterator(
|
||||
new RecursiveDirectoryIterator($dirname, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST
|
||||
);
|
||||
|
||||
foreach ($files as $fileinfo)
|
||||
{
|
||||
$todo = ($fileinfo->isDir() ? 'rmdir' : 'unlink');
|
||||
$todo($fileinfo->getRealPath());
|
||||
}
|
||||
@rmdir($dirname);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 复制文件夹
|
||||
* @param string $source 源文件夹
|
||||
* @param string $dest 目标文件夹
|
||||
*/
|
||||
function copydirs($source, $dest)
|
||||
{
|
||||
if (!is_dir($dest))
|
||||
{
|
||||
mkdir($dest, 0755);
|
||||
}
|
||||
foreach (
|
||||
$iterator = new RecursiveIteratorIterator(
|
||||
new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST) as $item
|
||||
)
|
||||
{
|
||||
if ($item->isDir())
|
||||
{
|
||||
$sontDir = $dest . DS . $iterator->getSubPathName();
|
||||
if (!is_dir($sontDir))
|
||||
{
|
||||
mkdir($sontDir);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
copy($item, $dest . DS . $iterator->getSubPathName());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,293 @@
|
|||
<?php
|
||||
|
||||
namespace app\admin\controller;
|
||||
|
||||
use app\common\controller\Backend;
|
||||
use think\addons\AddonException;
|
||||
use think\addons\Service;
|
||||
use think\Config;
|
||||
use think\Exception;
|
||||
|
||||
/**
|
||||
* 插件管理
|
||||
*
|
||||
* @icon fa fa-circle-o
|
||||
*/
|
||||
class Addon extends Backend
|
||||
{
|
||||
|
||||
protected $model = null;
|
||||
|
||||
public function _initialize()
|
||||
{
|
||||
parent::_initialize();
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$addons = get_addon_list();
|
||||
foreach ($addons as $k => &$v)
|
||||
{
|
||||
$config = get_addon_config($v['name']);
|
||||
$v['config'] = $config ? 1 : 0;
|
||||
}
|
||||
$this->assignconfig(['addons' => $addons]);
|
||||
return $this->view->fetch();
|
||||
}
|
||||
|
||||
/**
|
||||
* 配置
|
||||
*/
|
||||
public function config($ids = NULL)
|
||||
{
|
||||
$name = $this->request->get("name");
|
||||
if (!$name)
|
||||
{
|
||||
$this->error(__('Parameter %s can not be empty', $id ? 'id' : 'name'));
|
||||
}
|
||||
if (!is_dir(ADDON_PATH . $name))
|
||||
{
|
||||
$this->error(__('Directory not found'));
|
||||
}
|
||||
$info = get_addon_info($name);
|
||||
$config = get_addon_fullconfig($name);
|
||||
if (!$info)
|
||||
$this->error(__('No Results were found'));
|
||||
if ($this->request->isPost())
|
||||
{
|
||||
$params = $this->request->post("row/a");
|
||||
if ($params)
|
||||
{
|
||||
$configList = [];
|
||||
foreach ($config as $k => &$v)
|
||||
{
|
||||
if (isset($params[$v['name']]))
|
||||
{
|
||||
if ($v['type'] == 'array')
|
||||
{
|
||||
$fieldarr = $valuearr = [];
|
||||
$field = $params[$v['name']]['field'];
|
||||
$value = $params[$v['name']]['value'];
|
||||
|
||||
foreach ($field as $m => $n)
|
||||
{
|
||||
if ($n != '')
|
||||
{
|
||||
$fieldarr[] = $field[$m];
|
||||
$valuearr[] = $value[$m];
|
||||
}
|
||||
}
|
||||
$params[$v['name']] = array_combine($fieldarr, $valuearr);
|
||||
$value = $params[$v['name']];
|
||||
}
|
||||
else
|
||||
{
|
||||
$value = is_array($params[$v['name']]) ? implode(',', $params[$v['name']]) : $params[$v['name']];
|
||||
}
|
||||
|
||||
$v['value'] = $value;
|
||||
}
|
||||
}
|
||||
try
|
||||
{
|
||||
//更新配置文件
|
||||
set_addon_fullconfig($name, $config);
|
||||
$this->success();
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
$this->error($e->getMessage());
|
||||
}
|
||||
}
|
||||
$this->error(__('Parameter %s can not be empty', ''));
|
||||
}
|
||||
$this->view->assign("addon", ['info' => $info, 'config' => $config]);
|
||||
return $this->view->fetch();
|
||||
}
|
||||
|
||||
/**
|
||||
* 安装
|
||||
*/
|
||||
public function install()
|
||||
{
|
||||
$name = $this->request->post("name");
|
||||
$force = (int) $this->request->post("force");
|
||||
if (!$name)
|
||||
{
|
||||
$this->error(__('Parameter %s can not be empty', 'name'));
|
||||
}
|
||||
try
|
||||
{
|
||||
Service::install($name, $force);
|
||||
$this->success("安装成功", null, ['addon' => get_addon_info($name)]);
|
||||
}
|
||||
catch (AddonException $e)
|
||||
{
|
||||
$this->result($e->getData(), $e->getCode(), $e->getMessage());
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
$this->error($e->getMessage(), $e->getCode());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 卸载
|
||||
*/
|
||||
public function uninstall()
|
||||
{
|
||||
$name = $this->request->post("name");
|
||||
$force = (int) $this->request->post("force");
|
||||
if (!$name)
|
||||
{
|
||||
$this->error(__('Parameter %s can not be empty', 'name'));
|
||||
}
|
||||
try
|
||||
{
|
||||
Service::uninstall($name, $force);
|
||||
$this->success("卸载成功");
|
||||
}
|
||||
catch (AddonException $e)
|
||||
{
|
||||
$this->result($e->getData(), $e->getCode(), $e->getMessage());
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
$this->error($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 禁用启用
|
||||
*/
|
||||
public function state()
|
||||
{
|
||||
$name = $this->request->post("name");
|
||||
$action = $this->request->post("action");
|
||||
$force = (int) $this->request->post("force");
|
||||
if (!$name)
|
||||
{
|
||||
$this->error(__('Parameter %s can not be empty', 'name'));
|
||||
}
|
||||
try
|
||||
{
|
||||
$action = $action == 'enable' ? $action : 'disable';
|
||||
//调用启用、禁用的方法
|
||||
Service::$action($name, $force);
|
||||
$this->success("操作成功");
|
||||
}
|
||||
catch (AddonException $e)
|
||||
{
|
||||
$this->result($e->getData(), $e->getCode(), $e->getMessage());
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
$this->error($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 本地上传
|
||||
*/
|
||||
public function local()
|
||||
{
|
||||
$file = $this->request->file('file');
|
||||
$addonTmpDir = RUNTIME_PATH . 'addons' . DS;
|
||||
if (!is_dir($addonTmpDir))
|
||||
{
|
||||
@mkdir($addonTmpDir, 0755, true);
|
||||
}
|
||||
$info = $file->rule('uniqid')->validate(['size' => 10240000, 'ext' => 'zip'])->move($addonTmpDir);
|
||||
if ($info)
|
||||
{
|
||||
$tmpName = substr($info->getFilename(), 0, stripos($info->getFilename(), '.'));
|
||||
$tmpAddonDir = ADDON_PATH . $tmpName . DS;
|
||||
$tmpFile = $addonTmpDir . $info->getSaveName();
|
||||
try
|
||||
{
|
||||
Service::unzip($tmpName);
|
||||
@unlink($tmpFile);
|
||||
$infoFile = $tmpAddonDir . 'info.ini';
|
||||
if (!is_file($infoFile))
|
||||
{
|
||||
throw new Exception("插件配置文件未找到");
|
||||
}
|
||||
|
||||
$config = Config::parse($infoFile, '', $tmpName);
|
||||
$name = isset($config['name']) ? $config['name'] : '';
|
||||
if (!$name)
|
||||
{
|
||||
throw new Exception("插件配置信息不正确");
|
||||
}
|
||||
|
||||
$newAddonDir = ADDON_PATH . $name . DS;
|
||||
if (is_dir($newAddonDir))
|
||||
{
|
||||
throw new Exception("上传的插件已经存在");
|
||||
}
|
||||
|
||||
//重命名插件文件夹
|
||||
rename($tmpAddonDir, $newAddonDir);
|
||||
try
|
||||
{
|
||||
//默认禁用该插件
|
||||
$info = get_addon_info($name);
|
||||
if ($info['state'])
|
||||
{
|
||||
$info['state'] = 0;
|
||||
set_addon_info($name, $info);
|
||||
}
|
||||
|
||||
//执行插件的安装方法
|
||||
$class = get_addon_class($name);
|
||||
if (class_exists($class))
|
||||
{
|
||||
$addon = new $class();
|
||||
$addon->install();
|
||||
}
|
||||
|
||||
//导入SQL
|
||||
Service::importsql($name);
|
||||
|
||||
$this->success("插件安装成功,你需要手动启用该插件,使之生效", null, ['addon' => $info]);
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
@rmdirs($newAddonDir);
|
||||
throw new Exception($e->getMessage());
|
||||
}
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
@unlink($tmpFile);
|
||||
@rmdirs($tmpAddonDir);
|
||||
$this->error($e->getMessage());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 上传失败获取错误信息
|
||||
$this->error($file->getError());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 刷新缓存
|
||||
*/
|
||||
public function refresh()
|
||||
{
|
||||
try
|
||||
{
|
||||
Service::refresh();
|
||||
$this->success("操作成功");
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
$this->error($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -4,8 +4,6 @@ namespace app\admin\controller;
|
|||
|
||||
use app\common\controller\Backend;
|
||||
use fast\Random;
|
||||
use RecursiveDirectoryIterator;
|
||||
use RecursiveIteratorIterator;
|
||||
use think\Cache;
|
||||
use think\Config;
|
||||
use think\Db;
|
||||
|
|
@ -38,6 +36,7 @@ class Ajax extends Backend
|
|||
header('Content-Type: application/javascript');
|
||||
$callback = $this->request->get('callback');
|
||||
$controllername = input("controllername");
|
||||
//默认只加载了控制器对应的语言名,你还根据控制器名来加载额外的语言包
|
||||
$this->loadlang($controllername);
|
||||
//强制输出JSON Object
|
||||
$result = 'define(' . json_encode(Lang::get(), JSON_FORCE_OBJECT | JSON_UNESCAPED_UNICODE) . ');';
|
||||
|
|
@ -49,25 +48,14 @@ class Ajax extends Backend
|
|||
*/
|
||||
public function upload()
|
||||
{
|
||||
$this->code = -1;
|
||||
$file = $this->request->file('file');
|
||||
if (empty($file))
|
||||
{
|
||||
$this->msg = "未上传文件或超出服务器上传限制";
|
||||
return;
|
||||
$this->error("未上传文件或超出服务器上传限制");
|
||||
}
|
||||
|
||||
//判断是否已经存在附件
|
||||
$sha1 = $file->hash();
|
||||
$uploaded = model("attachment")->where('sha1', $sha1)->find();
|
||||
if ($uploaded)
|
||||
{
|
||||
$this->code = 1;
|
||||
$this->data = [
|
||||
'url' => $uploaded['url']
|
||||
];
|
||||
return;
|
||||
}
|
||||
|
||||
$upload = Config::get('upload');
|
||||
|
||||
|
|
@ -120,16 +108,17 @@ class Ajax extends Backend
|
|||
'storage' => 'local',
|
||||
'sha1' => $sha1,
|
||||
);
|
||||
model("attachment")->create(array_filter($params));
|
||||
$this->code = 1;
|
||||
$this->data = [
|
||||
$attachment = model("attachment");
|
||||
$attachment->create(array_filter($params));
|
||||
\think\Hook::listen("upload_after", $attachment);
|
||||
$this->success('上传成功', null, [
|
||||
'url' => $uploadDir . $splInfo->getSaveName()
|
||||
];
|
||||
]);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 上传失败获取错误信息
|
||||
$this->data = $file->getError();
|
||||
$this->error($file->getError());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -177,7 +166,7 @@ class Ajax extends Backend
|
|||
{
|
||||
Db::name($table)->where($prikey, $v[$prikey])->update([$field => $k + 1]);
|
||||
}
|
||||
$this->code = 1;
|
||||
$this->success();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -216,7 +205,7 @@ class Ajax extends Backend
|
|||
$weighids[$n] = $weighdata[$offset];
|
||||
Db::name($table)->where($prikey, $n)->update([$field => $weighdata[$offset]]);
|
||||
}
|
||||
$this->code = 1;
|
||||
$this->success();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -231,20 +220,11 @@ class Ajax extends Backend
|
|||
$dir = constant($item);
|
||||
if (!is_dir($dir))
|
||||
continue;
|
||||
$files = new RecursiveIteratorIterator(
|
||||
new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST
|
||||
);
|
||||
|
||||
foreach ($files as $fileinfo)
|
||||
{
|
||||
$todo = ($fileinfo->isDir() ? 'rmdir' : 'unlink');
|
||||
$todo($fileinfo->getRealPath());
|
||||
}
|
||||
|
||||
//rmdir($dir);
|
||||
rmdirs($dir);
|
||||
}
|
||||
Cache::clear();
|
||||
$this->code = 1;
|
||||
\think\Hook::listen("wipecache_after");
|
||||
$this->success();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -269,9 +249,7 @@ class Ajax extends Backend
|
|||
|
||||
$categorylist = Db::name('category')->where($where)->field('id as value,name')->order('weigh desc,id desc')->select();
|
||||
}
|
||||
$this->code = 1;
|
||||
$this->data = $categorylist;
|
||||
return;
|
||||
$this->success('', null, $categorylist);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -300,9 +278,7 @@ class Ajax extends Backend
|
|||
$provincelist = Db::name('area')->where($where)->field('id as value,name')->select();
|
||||
}
|
||||
}
|
||||
$this->code = 1;
|
||||
$this->data = $provincelist;
|
||||
return;
|
||||
$this->success('', null, $provincelist);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,10 +28,10 @@ class Category extends Backend
|
|||
$tree = Tree::instance();
|
||||
$tree->init($this->model->order('weigh desc,id desc')->select(), 'pid');
|
||||
$this->categorylist = $tree->getTreeList($tree->getTreeArray(0), 'name');
|
||||
$categorydata = [0 => __('None')];
|
||||
$categorydata = [0 => ['type'=>'all', 'name'=>__('None')]];
|
||||
foreach ($this->categorylist as $k => $v)
|
||||
{
|
||||
$categorydata[$v['id']] = $v['name'];
|
||||
$categorydata[$v['id']] = $v;
|
||||
}
|
||||
$this->view->assign("flagList", $this->model->getFlagList());
|
||||
$this->view->assign("typeList", CategoryModel::getTypeList());
|
||||
|
|
|
|||
|
|
@ -29,9 +29,8 @@ class Index extends Backend
|
|||
//
|
||||
$menulist = $this->auth->getSidebar([
|
||||
'dashboard' => 'hot',
|
||||
'auth' => ['new', 'red', 'badge'],
|
||||
'auth/admin' => 12,
|
||||
'auth/rule' => 4,
|
||||
'addon' => ['new', 'red', 'badge'],
|
||||
'auth/rule' => 'side',
|
||||
'general' => ['18', 'purple'],
|
||||
], $this->view->site['fixedpage']);
|
||||
$this->view->assign('menulist', $menulist);
|
||||
|
|
@ -48,7 +47,6 @@ class Index extends Backend
|
|||
if ($this->auth->isLogin())
|
||||
{
|
||||
$this->error(__("You've logged in, do not login again"), $url);
|
||||
return;
|
||||
}
|
||||
if ($this->request->isPost())
|
||||
{
|
||||
|
|
@ -71,20 +69,17 @@ class Index extends Backend
|
|||
if (!$result)
|
||||
{
|
||||
$this->error($validate->getError(), $url, ['token' => $this->request->token()]);
|
||||
return;
|
||||
}
|
||||
\app\admin\model\AdminLog::setTitle(__('Login'));
|
||||
$result = $this->auth->login($username, $password, $keeplogin ? 86400 : 0);
|
||||
if ($result === true)
|
||||
{
|
||||
$this->success(__('Login successful'), $url, ['url' => $url, 'id' => $this->auth->id, 'username' => $username, 'avatar' => $this->auth->avatar]);
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->error(__('Username or password is incorrect'), $url, ['token' => $this->request->token()]);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// 根据客户端的cookie,判断是否可以自动登录
|
||||
|
|
@ -92,7 +87,9 @@ class Index extends Backend
|
|||
{
|
||||
$this->redirect($url);
|
||||
}
|
||||
$this->view->assign('title', __('Login'));
|
||||
$background = cdnurl("/assets/img/loginbg.jpg");
|
||||
$this->view->assign('background', $background);
|
||||
\think\Hook::listen("login_init", $this->request);
|
||||
return $this->view->fetch();
|
||||
}
|
||||
|
||||
|
|
@ -103,7 +100,6 @@ class Index extends Backend
|
|||
{
|
||||
$this->auth->logout();
|
||||
$this->success(__('Logout successful'), 'index/login');
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,51 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace app\admin\controller;
|
||||
|
||||
use app\common\controller\Backend;
|
||||
|
||||
/**
|
||||
* 单页管理
|
||||
*
|
||||
* @icon fa fa-circle-o
|
||||
* @remark 用于管理普通的单页面,通常用于关于我们、联系我们、商务合作等单一页面
|
||||
*/
|
||||
class Page extends Backend
|
||||
{
|
||||
|
||||
protected $model = null;
|
||||
protected $relationSearch = true;
|
||||
|
||||
public function _initialize()
|
||||
{
|
||||
parent::_initialize();
|
||||
$this->model = model('Page');
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
if ($this->request->isAjax())
|
||||
{
|
||||
list($where, $sort, $order, $offset, $limit) = $this->buildparams();
|
||||
$total = $this->model
|
||||
->with("category")
|
||||
->where($where)
|
||||
->order($sort, $order)
|
||||
->count();
|
||||
$list = $this->model
|
||||
->with("category")
|
||||
->where($where)
|
||||
->order($sort, $order)
|
||||
->limit($offset, $limit)
|
||||
->select();
|
||||
$result = array("total" => $total, "rows" => $list);
|
||||
|
||||
return json($result);
|
||||
}
|
||||
return $this->view->fetch();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace app\admin\controller;
|
||||
|
||||
use app\common\controller\Backend;
|
||||
|
||||
/**
|
||||
* 会员管理
|
||||
*
|
||||
* @icon fa fa-circle-o
|
||||
* @internal
|
||||
*/
|
||||
class User extends Backend
|
||||
{
|
||||
|
||||
/**
|
||||
* User模型对象
|
||||
*/
|
||||
protected $model = null;
|
||||
|
||||
public function _initialize()
|
||||
{
|
||||
parent::_initialize();
|
||||
$this->model = model('User');
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,26 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace app\admin\controller;
|
||||
|
||||
use app\common\controller\Backend;
|
||||
|
||||
use think\Controller;
|
||||
use think\Request;
|
||||
|
||||
/**
|
||||
* 版本管理
|
||||
*
|
||||
* @icon fa fa-circle-o
|
||||
*/
|
||||
class Version extends Backend
|
||||
{
|
||||
|
||||
protected $model = null;
|
||||
|
||||
public function _initialize()
|
||||
{
|
||||
parent::_initialize();
|
||||
$this->model = model('Version');
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -101,7 +101,6 @@ class Admin extends Backend
|
|||
{
|
||||
if ($this->request->isPost())
|
||||
{
|
||||
$this->code = -1;
|
||||
$params = $this->request->post("row/a");
|
||||
if ($params)
|
||||
{
|
||||
|
|
@ -120,10 +119,9 @@ class Admin extends Backend
|
|||
$dataset[] = ['uid' => $admin->id, 'group_id' => $value];
|
||||
}
|
||||
model('AuthGroupAccess')->saveAll($dataset);
|
||||
$this->code = 1;
|
||||
$this->success();
|
||||
}
|
||||
|
||||
return;
|
||||
$this->error();
|
||||
}
|
||||
return $this->view->fetch();
|
||||
}
|
||||
|
|
@ -138,7 +136,6 @@ class Admin extends Backend
|
|||
$this->error(__('No Results were found'));
|
||||
if ($this->request->isPost())
|
||||
{
|
||||
$this->code = -1;
|
||||
$params = $this->request->post("row/a");
|
||||
if ($params)
|
||||
{
|
||||
|
|
@ -167,10 +164,9 @@ class Admin extends Backend
|
|||
$dataset[] = ['uid' => $row->id, 'group_id' => $value];
|
||||
}
|
||||
model('AuthGroupAccess')->saveAll($dataset);
|
||||
$this->code = 1;
|
||||
$this->success();
|
||||
}
|
||||
|
||||
return;
|
||||
$this->error();
|
||||
}
|
||||
$grouplist = $this->auth->getGroups($row['id']);
|
||||
$groupids = [];
|
||||
|
|
@ -188,7 +184,6 @@ class Admin extends Backend
|
|||
*/
|
||||
public function del($ids = "")
|
||||
{
|
||||
$this->code = -1;
|
||||
if ($ids)
|
||||
{
|
||||
// 避免越权删除管理员
|
||||
|
|
@ -208,12 +203,11 @@ class Admin extends Backend
|
|||
{
|
||||
$this->model->destroy($deleteIds);
|
||||
model('AuthGroupAccess')->where('uid', 'in', $deleteIds)->delete();
|
||||
$this->code = 1;
|
||||
$this->success();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
$this->error();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -223,7 +217,7 @@ class Admin extends Backend
|
|||
public function multi($ids = "")
|
||||
{
|
||||
// 管理员禁止批量操作
|
||||
$this->code = -1;
|
||||
$this->error();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ class Adminlog extends Backend
|
|||
}
|
||||
return $this->view->fetch();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 详情
|
||||
*/
|
||||
|
|
@ -93,7 +93,7 @@ class Adminlog extends Backend
|
|||
*/
|
||||
public function add()
|
||||
{
|
||||
$this->code = -1;
|
||||
$this->error();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -102,7 +102,7 @@ class Adminlog extends Backend
|
|||
*/
|
||||
public function edit($ids = NULL)
|
||||
{
|
||||
$this->code = -1;
|
||||
$this->error();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -110,7 +110,6 @@ class Adminlog extends Backend
|
|||
*/
|
||||
public function del($ids = "")
|
||||
{
|
||||
$this->code = -1;
|
||||
if ($ids)
|
||||
{
|
||||
$childrenGroupIds = $this->childrenIds;
|
||||
|
|
@ -127,12 +126,11 @@ class Adminlog extends Backend
|
|||
if ($deleteIds)
|
||||
{
|
||||
$this->model->destroy($deleteIds);
|
||||
$this->code = 1;
|
||||
$this->success();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
$this->error();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -142,7 +140,7 @@ class Adminlog extends Backend
|
|||
public function multi($ids = "")
|
||||
{
|
||||
// 管理员禁止批量操作
|
||||
$this->code = -1;
|
||||
$this->error();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -79,26 +79,21 @@ class Group extends Backend
|
|||
{
|
||||
if ($this->request->isPost())
|
||||
{
|
||||
$this->code = -1;
|
||||
$params = $this->request->post("row/a", [], 'strip_tags');
|
||||
$params['rules'] = explode(',', $params['rules']);
|
||||
if (!in_array($params['pid'], $this->childrenIds))
|
||||
{
|
||||
$this->code = -1;
|
||||
$this->msg = __('');
|
||||
return;
|
||||
$this->error(__('The parent group can not be its own child'));
|
||||
}
|
||||
$parentmodel = model("AuthGroup")->get($params['pid']);
|
||||
if (!$parentmodel)
|
||||
{
|
||||
$this->msg = __('The parent group can not found');
|
||||
return;
|
||||
$this->error(__('The parent group can not found'));
|
||||
}
|
||||
// 父级别的规则节点
|
||||
$parentrules = explode(',', $parentmodel->rules);
|
||||
// 当前组别的规则节点
|
||||
$currentrules = $this->auth->getRuleIds();
|
||||
$rules = $params['rules'];
|
||||
// 如果父组不是超级管理员则需要过滤规则节点,不能超过父组别的权限
|
||||
$rules = in_array('*', $parentrules) ? $rules : array_intersect($parentrules, $rules);
|
||||
// 如果当前组别不是超级管理员则需要过滤规则节点,不能超当前组别的权限
|
||||
|
|
@ -107,10 +102,9 @@ class Group extends Backend
|
|||
if ($params)
|
||||
{
|
||||
$this->model->create($params);
|
||||
$this->code = 1;
|
||||
$this->success();
|
||||
}
|
||||
|
||||
return;
|
||||
$this->error();
|
||||
}
|
||||
return $this->view->fetch();
|
||||
}
|
||||
|
|
@ -125,27 +119,25 @@ class Group extends Backend
|
|||
$this->error(__('No Results were found'));
|
||||
if ($this->request->isPost())
|
||||
{
|
||||
$this->code = -1;
|
||||
$params = $this->request->post("row/a", [], 'strip_tags');
|
||||
// 父节点不能是它自身的子节点
|
||||
if (!in_array($params['pid'], $this->childrenIds))
|
||||
{
|
||||
$this->msg = __('The parent group can not be its own child');
|
||||
return;
|
||||
$this->error(__('The parent group can not be its own child'));
|
||||
}
|
||||
$params['rules'] = explode(',', $params['rules']);
|
||||
|
||||
$parentmodel = model("AuthGroup")->get($params['pid']);
|
||||
if (!$parentmodel)
|
||||
{
|
||||
$this->msg = __('The parent group can not found');
|
||||
return;
|
||||
$this->error(__('The parent group can not found'));
|
||||
}
|
||||
// 父级别的规则节点
|
||||
$parentrules = explode(',', $parentmodel->rules);
|
||||
// 当前组别的规则节点
|
||||
$currentrules = $this->auth->getRuleIds();
|
||||
$rules = $params['rules'];
|
||||
$rules = $params['rules'];
|
||||
// 如果父组不是超级管理员则需要过滤规则节点,不能超过父组别的权限
|
||||
$rules = in_array('*', $parentrules) ? $rules : array_intersect($parentrules, $rules);
|
||||
// 如果当前组别不是超级管理员则需要过滤规则节点,不能超当前组别的权限
|
||||
|
|
@ -154,9 +146,9 @@ class Group extends Backend
|
|||
if ($params)
|
||||
{
|
||||
$row->save($params);
|
||||
$this->code = 1;
|
||||
$this->success();
|
||||
}
|
||||
|
||||
$this->error();
|
||||
return;
|
||||
}
|
||||
$this->view->assign("row", $row);
|
||||
|
|
@ -168,7 +160,6 @@ class Group extends Backend
|
|||
*/
|
||||
public function del($ids = "")
|
||||
{
|
||||
$this->code = -1;
|
||||
if ($ids)
|
||||
{
|
||||
$ids = explode(',', $ids);
|
||||
|
|
@ -201,16 +192,15 @@ class Group extends Backend
|
|||
}
|
||||
if (!$ids)
|
||||
{
|
||||
$this->msg = __('You can not delete group that contain child group and administrators');
|
||||
return;
|
||||
$this->error(__('You can not delete group that contain child group and administrators'));
|
||||
}
|
||||
$count = $this->model->where('id', 'in', $ids)->delete();
|
||||
if ($count)
|
||||
{
|
||||
$this->code = 1;
|
||||
$this->success();
|
||||
}
|
||||
}
|
||||
return;
|
||||
$this->error();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -220,8 +210,7 @@ class Group extends Backend
|
|||
public function multi($ids = "")
|
||||
{
|
||||
// 组别禁止批量操作
|
||||
$this->code = -1;
|
||||
return;
|
||||
$this->error();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -291,19 +280,16 @@ class Group extends Backend
|
|||
$state = array('selected' => in_array($v['id'], $current_rule_ids) && !in_array($v['id'], $hasChildrens));
|
||||
$nodelist[] = array('id' => $v['id'], 'parent' => $v['pid'] ? $v['pid'] : '#', 'text' => $v['title'], 'type' => 'menu', 'state' => $state);
|
||||
}
|
||||
$this->code = 1;
|
||||
$this->data = $nodelist;
|
||||
$this->success('',null,$nodelist);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->code = -1;
|
||||
$this->data = __('Can not change the parent to child');
|
||||
$this->error(__('Can not change the parent to child'));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->code = -1;
|
||||
$this->data = __('Group not found');
|
||||
$this->error(__('Group not found'));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -60,21 +60,18 @@ class Rule extends Backend
|
|||
{
|
||||
if ($this->request->isPost())
|
||||
{
|
||||
$this->code = -1;
|
||||
$params = $this->request->post("row/a", [], 'strip_tags');
|
||||
if ($params)
|
||||
{
|
||||
if (!$params['ismenu'] && !$params['pid'])
|
||||
{
|
||||
$this->msg = __('The non-menu rule must have parent');
|
||||
return;
|
||||
$this->error(__('The non-menu rule must have parent'));
|
||||
}
|
||||
$this->model->create($params);
|
||||
Cache::rm('__menu__');
|
||||
$this->code = 1;
|
||||
$this->success();
|
||||
}
|
||||
|
||||
return;
|
||||
$this->error();
|
||||
}
|
||||
return $this->view->fetch();
|
||||
}
|
||||
|
|
@ -89,21 +86,18 @@ class Rule extends Backend
|
|||
$this->error(__('No Results were found'));
|
||||
if ($this->request->isPost())
|
||||
{
|
||||
$this->code = -1;
|
||||
$params = $this->request->post("row/a", [], 'strip_tags');
|
||||
if ($params)
|
||||
{
|
||||
if (!$params['ismenu'] && !$params['pid'])
|
||||
{
|
||||
$this->msg = __('The non-menu rule must have parent');
|
||||
return;
|
||||
$this->error(__('The non-menu rule must have parent'));
|
||||
}
|
||||
$row->save($params);
|
||||
Cache::rm('__menu__');
|
||||
$this->code = 1;
|
||||
$this->success();
|
||||
}
|
||||
|
||||
return;
|
||||
$this->error();
|
||||
}
|
||||
$this->view->assign("row", $row);
|
||||
return $this->view->fetch();
|
||||
|
|
@ -114,7 +108,6 @@ class Rule extends Backend
|
|||
*/
|
||||
public function del($ids = "")
|
||||
{
|
||||
$this->code = -1;
|
||||
if ($ids)
|
||||
{
|
||||
$delIds = [];
|
||||
|
|
@ -127,11 +120,10 @@ class Rule extends Backend
|
|||
if ($count)
|
||||
{
|
||||
Cache::rm('__menu__');
|
||||
$this->code = 1;
|
||||
$this->success();
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
$this->error();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,70 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace app\admin\controller\example;
|
||||
|
||||
use app\common\controller\Backend;
|
||||
|
||||
/**
|
||||
* 表格完整示例
|
||||
*
|
||||
* @icon fa fa-table
|
||||
* @remark 在使用Bootstrap-table中的常用方式,更多使用方式可查看:http://bootstrap-table.wenzhixin.net.cn/zh-cn/
|
||||
*/
|
||||
class Bootstraptable extends Backend
|
||||
{
|
||||
|
||||
protected $model = null;
|
||||
protected $noNeedRight = ['change', 'detail'];
|
||||
|
||||
public function _initialize()
|
||||
{
|
||||
parent::_initialize();
|
||||
$this->model = model('AdminLog');
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
if ($this->request->isAjax())
|
||||
{
|
||||
list($where, $sort, $order, $offset, $limit) = $this->buildparams(NULL);
|
||||
$total = $this->model
|
||||
->where($where)
|
||||
->order($sort, $order)
|
||||
->count();
|
||||
$list = $this->model
|
||||
->where($where)
|
||||
->order($sort, $order)
|
||||
->limit($offset, $limit)
|
||||
->select();
|
||||
$result = array("total" => $total, "rows" => $list);
|
||||
|
||||
return json($result);
|
||||
}
|
||||
return $this->view->fetch();
|
||||
}
|
||||
|
||||
/**
|
||||
* 详情
|
||||
*/
|
||||
public function detail($ids)
|
||||
{
|
||||
$row = $this->model->get(['id' => $ids]);
|
||||
if (!$row)
|
||||
$this->error(__('No Results were found'));
|
||||
$this->view->assign("row", $row->toArray());
|
||||
return $this->view->fetch();
|
||||
}
|
||||
|
||||
/**
|
||||
* 变更
|
||||
* @internal
|
||||
*/
|
||||
public function change()
|
||||
{
|
||||
$this->code = 1;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace app\admin\controller\example;
|
||||
|
||||
use app\common\controller\Backend;
|
||||
|
||||
/**
|
||||
* 彩色角标
|
||||
*
|
||||
* @icon fa fa-table
|
||||
* @remark 在JS端控制角标的显示与隐藏,请注意左侧菜单栏角标的数值变化
|
||||
*/
|
||||
class Colorbadge extends Backend
|
||||
{
|
||||
|
||||
protected $model = null;
|
||||
|
||||
public function _initialize()
|
||||
{
|
||||
parent::_initialize();
|
||||
$this->model = model('AdminLog');
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace app\admin\controller\example;
|
||||
|
||||
use app\common\controller\Backend;
|
||||
|
||||
/**
|
||||
* 控制器间跳转
|
||||
*
|
||||
* @icon fa fa-table
|
||||
* @remark FastAdmin支持在控制器间跳转,点击后将切换到另外一个TAB中,无需刷新当前页面
|
||||
*/
|
||||
class Controllerjump extends Backend
|
||||
{
|
||||
|
||||
protected $model = null;
|
||||
|
||||
public function _initialize()
|
||||
{
|
||||
parent::_initialize();
|
||||
$this->model = model('AdminLog');
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace app\admin\controller\example;
|
||||
|
||||
use app\common\controller\Backend;
|
||||
|
||||
/**
|
||||
* 多级联动
|
||||
*
|
||||
* @icon fa fa-table
|
||||
* @remark FastAdmin使用了jQuery-cxselect实现多级联动,更多文档请参考https://github.com/karsonzhang/cxSelect
|
||||
*/
|
||||
class Cxselect extends Backend
|
||||
{
|
||||
|
||||
protected $model = null;
|
||||
|
||||
public function _initialize()
|
||||
{
|
||||
parent::_initialize();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace app\admin\controller\example;
|
||||
|
||||
use app\common\controller\Backend;
|
||||
|
||||
/**
|
||||
* 多表格示例
|
||||
*
|
||||
* @icon fa fa-table
|
||||
* @remark 当一个页面上存在多个Bootstrap-table时该如何控制按钮和表格
|
||||
*/
|
||||
class Multitable extends Backend
|
||||
{
|
||||
|
||||
protected $model = null;
|
||||
|
||||
public function _initialize()
|
||||
{
|
||||
parent::_initialize();
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$this->loadlang('general/attachment');
|
||||
$this->loadlang('general/crontab');
|
||||
return $this->view->fetch();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,52 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace app\admin\controller\example;
|
||||
|
||||
use app\common\controller\Backend;
|
||||
|
||||
/**
|
||||
* 多模型关联
|
||||
*
|
||||
* @icon fa fa-table
|
||||
* @remark 当使用到关联模型时需要重载index方法
|
||||
*/
|
||||
class Relationmodel extends Backend
|
||||
{
|
||||
|
||||
protected $model = null;
|
||||
|
||||
public function _initialize()
|
||||
{
|
||||
parent::_initialize();
|
||||
$this->model = model('AdminLog');
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$this->relationSearch = true;
|
||||
$this->searchFields = "admin.username,id";
|
||||
if ($this->request->isAjax())
|
||||
{
|
||||
list($where, $sort, $order, $offset, $limit) = $this->buildparams();
|
||||
$total = $this->model
|
||||
->with("admin")
|
||||
->where($where)
|
||||
->order($sort, $order)
|
||||
->count();
|
||||
$list = $this->model
|
||||
->with("admin")
|
||||
->where($where)
|
||||
->order($sort, $order)
|
||||
->limit($offset, $limit)
|
||||
->select();
|
||||
$result = array("total" => $total, "rows" => $list);
|
||||
|
||||
return json($result);
|
||||
}
|
||||
return $this->view->fetch();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,60 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace app\admin\controller\example;
|
||||
|
||||
use app\common\controller\Backend;
|
||||
|
||||
/**
|
||||
* 表格模板示例
|
||||
*
|
||||
* @icon fa fa-table
|
||||
* @remark 可以通过使用表格模板将表格中的行渲染成一样的展现方式,基于此功能可以任意定制自己想要的展示列表
|
||||
*/
|
||||
class Tabletemplate extends Backend
|
||||
{
|
||||
|
||||
protected $model = null;
|
||||
|
||||
public function _initialize()
|
||||
{
|
||||
parent::_initialize();
|
||||
$this->model = model('AdminLog');
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
if ($this->request->isAjax())
|
||||
{
|
||||
list($where, $sort, $order, $offset, $limit) = $this->buildparams(NULL);
|
||||
$total = $this->model
|
||||
->where($where)
|
||||
->order($sort, $order)
|
||||
->count();
|
||||
$list = $this->model
|
||||
->where($where)
|
||||
->order($sort, $order)
|
||||
->limit($offset, $limit)
|
||||
->select();
|
||||
$result = array("total" => $total, "rows" => $list);
|
||||
|
||||
return json($result);
|
||||
}
|
||||
return $this->view->fetch();
|
||||
}
|
||||
|
||||
/**
|
||||
* 详情
|
||||
*/
|
||||
public function detail($ids)
|
||||
{
|
||||
$row = $this->model->get(['id' => $ids]);
|
||||
if (!$row)
|
||||
$this->error(__('No Results were found'));
|
||||
$this->view->assign("row", $row->toArray());
|
||||
return $this->view->fetch();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -71,9 +71,23 @@ class Attachment extends Backend
|
|||
{
|
||||
if ($this->request->isAjax())
|
||||
{
|
||||
$this->code = -1;
|
||||
$this->error();
|
||||
}
|
||||
return $this->view->fetch();
|
||||
}
|
||||
|
||||
public function del($ids = "")
|
||||
{
|
||||
if ($ids)
|
||||
{
|
||||
$count = $this->model->destroy($ids);
|
||||
if ($count)
|
||||
{
|
||||
\think\Hook::listen("upload_after", $this);
|
||||
$this->success();
|
||||
}
|
||||
}
|
||||
$this->error(__('Parameter %s can not be empty', 'ids'));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -72,7 +72,6 @@ class Config extends Backend
|
|||
{
|
||||
if ($this->request->isPost())
|
||||
{
|
||||
$this->code = -1;
|
||||
$params = $this->request->post("row/a");
|
||||
if ($params)
|
||||
{
|
||||
|
|
@ -106,36 +105,30 @@ class Config extends Backend
|
|||
try
|
||||
{
|
||||
$this->refreshFile();
|
||||
$this->code = 1;
|
||||
$this->success();
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
$this->msg = $e->getMessage();
|
||||
$this->error($e->getMessage());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->msg = $this->model->getError();
|
||||
$this->error($this->model->getError());
|
||||
}
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
$this->msg = $e->getMessage();
|
||||
$this->error($e->getMessage());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->msg = __('Parameter %s can not be empty', '');
|
||||
}
|
||||
|
||||
return;
|
||||
$this->error(__('Parameter %s can not be empty', ''));
|
||||
}
|
||||
return $this->view->fetch();
|
||||
}
|
||||
|
||||
public function edit($ids = NULL)
|
||||
{
|
||||
$this->code = -1;
|
||||
if ($this->request->isPost())
|
||||
{
|
||||
$params = $this->request->post("row/a");
|
||||
|
|
@ -175,19 +168,14 @@ class Config extends Backend
|
|||
try
|
||||
{
|
||||
$this->refreshFile();
|
||||
$this->code = 1;
|
||||
$this->success();
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
$this->msg = $e->getMessage();
|
||||
$this->error($e->getMessage());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->msg = __('Parameter %s can not be empty', '');
|
||||
}
|
||||
|
||||
return;
|
||||
$this->error(__('Parameter %s can not be empty', ''));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -251,12 +239,11 @@ class Config extends Backend
|
|||
->send();
|
||||
if ($result)
|
||||
{
|
||||
$this->code = 1;
|
||||
$this->success();
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->code = -1;
|
||||
$this->msg = $email->getError();
|
||||
$this->error($email->getError());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,100 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace app\admin\controller\general;
|
||||
|
||||
use app\common\controller\Backend;
|
||||
use Cron\CronExpression;
|
||||
|
||||
/**
|
||||
* 定时任务
|
||||
*
|
||||
* @icon fa fa-tasks
|
||||
* @remark 类似于Linux的Crontab定时任务,可以按照设定的时间进行任务的执行,目前仅支持三种任务:请求URL、执行SQL、执行Shell
|
||||
*/
|
||||
class Crontab extends Backend
|
||||
{
|
||||
|
||||
protected $model = null;
|
||||
protected $noNeedRight = ['check_schedule', 'get_schedule_future'];
|
||||
|
||||
public function _initialize()
|
||||
{
|
||||
parent::_initialize();
|
||||
$this->model = model('Crontab');
|
||||
$this->view->assign('typedata', \app\common\model\Crontab::getTypeList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
if ($this->request->isAjax())
|
||||
{
|
||||
list($where, $sort, $order, $offset, $limit) = $this->buildparams();
|
||||
$total = $this->model
|
||||
->where($where)
|
||||
->order($sort, $order)
|
||||
->count();
|
||||
|
||||
$list = $this->model
|
||||
->where($where)
|
||||
->order($sort, $order)
|
||||
->limit($offset, $limit)
|
||||
->select();
|
||||
foreach ($list as $k => &$v)
|
||||
{
|
||||
$cron = CronExpression::factory($v['schedule']);
|
||||
$v['nexttime'] = $cron->getNextRunDate()->getTimestamp();
|
||||
}
|
||||
$result = array("total" => $total, "rows" => $list);
|
||||
|
||||
return json($result);
|
||||
}
|
||||
return $this->view->fetch();
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断Crontab格式是否正确
|
||||
* @internal
|
||||
*/
|
||||
public function check_schedule()
|
||||
{
|
||||
$row = $this->request->post("row/a");
|
||||
$schedule = isset($row['schedule']) ? $row['schedule'] : '';
|
||||
if (CronExpression::isValidExpression($schedule))
|
||||
{
|
||||
return json(['ok' => '']);
|
||||
}
|
||||
else
|
||||
{
|
||||
return json(['error' => __('Crontab format invalid')]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据Crontab表达式读取未来七次的时间
|
||||
* @internal
|
||||
*/
|
||||
public function get_schedule_future()
|
||||
{
|
||||
$time = [];
|
||||
$schedule = $this->request->post('schedule');
|
||||
$days = (int) $this->request->post('days');
|
||||
try
|
||||
{
|
||||
$cron = CronExpression::factory($schedule);
|
||||
for ($i = 0; $i < $days; $i++)
|
||||
{
|
||||
$time[] = $cron->getNextRunDate(null, $i)->format('Y-m-d H:i:s');
|
||||
}
|
||||
}
|
||||
catch (\Exception $e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
return json(['futuretime' => $time]);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,211 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace app\admin\controller\general;
|
||||
|
||||
use app\common\controller\Backend;
|
||||
use think\Db;
|
||||
use think\Debug;
|
||||
|
||||
/**
|
||||
* 数据库管理
|
||||
*
|
||||
* @icon fa fa-database
|
||||
* @remark 可在线进行一些简单的数据库表优化或修复,查看表结构和数据。也可以进行SQL语句的操作
|
||||
*/
|
||||
class Database extends Backend
|
||||
{
|
||||
|
||||
/**
|
||||
* 查看
|
||||
*/
|
||||
function index()
|
||||
{
|
||||
$tables_data_length = $tables_index_length = $tables_free_length = $tables_data_count = 0;
|
||||
$tables = $list = [];
|
||||
$list = Db::query("SHOW TABLES");
|
||||
foreach ($list as $key => $row)
|
||||
{
|
||||
$tables[] = ['name' => reset($row), 'rows' => 0];
|
||||
}
|
||||
$data['tables'] = $tables;
|
||||
$data['saved_sql'] = [];
|
||||
$this->view->assign($data);
|
||||
return $this->view->fetch();
|
||||
}
|
||||
|
||||
/**
|
||||
* SQL查询
|
||||
*/
|
||||
public function query()
|
||||
{
|
||||
$do_action = $this->request->post('do_action');
|
||||
|
||||
echo '<style type="text/css">
|
||||
xmp,body{margin:0;padding:0;line-height:18px;font-size:12px;font-family:"Helvetica Neue", Helvetica, Microsoft Yahei, Hiragino Sans GB, WenQuanYi Micro Hei, sans-serif;}
|
||||
hr{height:1px;margin:5px 1px;background:#e3e3e3;border:none;}
|
||||
</style>';
|
||||
if ($do_action == '')
|
||||
exit(__('Invalid parameters'));
|
||||
|
||||
$tablename = $this->request->post("tablename/a");
|
||||
|
||||
if (in_array($do_action, array('doquery', 'optimizeall', 'repairall')))
|
||||
{
|
||||
$this->$do_action();
|
||||
}
|
||||
else if (count($tablename) == 0)
|
||||
{
|
||||
exit(__('Invalid parameters'));
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach ($tablename as $table)
|
||||
{
|
||||
$this->$do_action($table);
|
||||
echo "<br />";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function viewinfo($name)
|
||||
{
|
||||
$row = Db::query("SHOW CREATE TABLE `{$name}`");
|
||||
$row = array_values($row[0]);
|
||||
$info = $row[1];
|
||||
echo "<xmp>{$info};</xmp>";
|
||||
}
|
||||
|
||||
private function viewdata($name = '')
|
||||
{
|
||||
$sqlquery = "SELECT * FROM `{$name}`";
|
||||
$this->doquery($sqlquery);
|
||||
}
|
||||
|
||||
private function optimize($name = '')
|
||||
{
|
||||
if (Db::execute("OPTIMIZE TABLE `{$name}`"))
|
||||
{
|
||||
echo __('Optimize table %s done', $name);
|
||||
}
|
||||
else
|
||||
{
|
||||
echo __('Optimize table %s fail', $name);
|
||||
}
|
||||
}
|
||||
|
||||
private function optimizeall($name = '')
|
||||
{
|
||||
$list = Db::query("SHOW TABLES");
|
||||
foreach ($list as $key => $row)
|
||||
{
|
||||
$name = reset($row);
|
||||
if (Db::execute("OPTIMIZE TABLE {$name}"))
|
||||
{
|
||||
echo __('Optimize table %s done', $name);
|
||||
}
|
||||
else
|
||||
{
|
||||
echo __('Optimize table %s fail', $name);
|
||||
}
|
||||
echo "<br />";
|
||||
}
|
||||
}
|
||||
|
||||
private function repair($name = '')
|
||||
{
|
||||
if (Db::execute("REPAIR TABLE `{$name}`"))
|
||||
{
|
||||
echo __('Repair table %s done', $name);
|
||||
}
|
||||
else
|
||||
{
|
||||
echo __('Repair table %s fail', $name);
|
||||
}
|
||||
}
|
||||
|
||||
private function repairall($name = '')
|
||||
{
|
||||
$list = Db::query("SHOW TABLES");
|
||||
foreach ($list as $key => $row)
|
||||
{
|
||||
$name = reset($row);
|
||||
if (Db::execute("REPAIR TABLE {$name}"))
|
||||
{
|
||||
echo __('Repair table %s done', $name);
|
||||
}
|
||||
else
|
||||
{
|
||||
echo __('Repair table %s fail', $name);
|
||||
}
|
||||
echo "<br />";
|
||||
}
|
||||
}
|
||||
|
||||
private function doquery($sql = null)
|
||||
{
|
||||
$sqlquery = $sql ? $sql : $this->request->post('sqlquery');
|
||||
if ($sqlquery == '')
|
||||
exit(__('SQL can not be empty'));
|
||||
$sqlquery = str_replace("\r", "", $sqlquery);
|
||||
$sqls = preg_split("/;[ \t]{0,}\n/i", $sqlquery);
|
||||
$maxreturn = 100;
|
||||
$r = '';
|
||||
foreach ($sqls as $key => $val)
|
||||
{
|
||||
if (trim($val) == '')
|
||||
continue;
|
||||
$val = rtrim($val, ';');
|
||||
$r .= "SQL:<span style='color:green;'>{$val}</span> ";
|
||||
if (preg_match("/^(select|explain)(.*)/i ", $val))
|
||||
{
|
||||
Debug::remark("begin");
|
||||
$limit = stripos(strtolower($val), "limit") !== false ? true : false;
|
||||
$count = Db::execute($val);
|
||||
if ($count > 0)
|
||||
{
|
||||
$resultlist = Db::query($val . (!$limit && $count > $maxreturn ? ' LIMIT ' . $maxreturn : ''));
|
||||
}
|
||||
else
|
||||
{
|
||||
$resultlist = [];
|
||||
}
|
||||
Debug::remark("end");
|
||||
$time = Debug::getRangeTime('begin', 'end', 4);
|
||||
|
||||
$usedseconds = __('Query took %s seconds', $time) . "<br />";
|
||||
if ($count <= 0)
|
||||
{
|
||||
$r .= __('Query returned an empty result');
|
||||
}
|
||||
else
|
||||
{
|
||||
$r .= (__('Total:%s', $count) . (!$limit && $count > $maxreturn ? ',' . __('Max output:%s', $maxreturn) : ""));
|
||||
}
|
||||
$r = $r . ',' . $usedseconds;
|
||||
$j = 0;
|
||||
foreach ($resultlist as $m => $n)
|
||||
{
|
||||
$j++;
|
||||
if (!$limit && $j > $maxreturn)
|
||||
break;
|
||||
$r .= "<hr/>";
|
||||
$r .= "<font color='red'>" . __('Row:%s', $j) . "</font><br />";
|
||||
foreach ($n as $k => $v)
|
||||
{
|
||||
$r .= "<font color='blue'>{$k}:</font>{$v}<br/>\r\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug::remark("begin");
|
||||
$count = Db::execute($val);
|
||||
Debug::remark("end");
|
||||
$time = Debug::getRangeTime('begin', 'end', 4);
|
||||
$r .= __('Query affected %s rows and took %s seconds', $count, $time) . "<br />";
|
||||
}
|
||||
}
|
||||
echo $r;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -52,7 +52,6 @@ class Profile extends Backend
|
|||
{
|
||||
if ($this->request->isPost())
|
||||
{
|
||||
$this->code = -1;
|
||||
$params = $this->request->post("row/a");
|
||||
$params = array_filter(array_intersect_key($params, array_flip(array('email', 'nickname', 'password', 'avatar'))));
|
||||
unset($v);
|
||||
|
|
@ -71,8 +70,9 @@ class Profile extends Backend
|
|||
$admin = model('admin')->get(['id' => $admin_id]);
|
||||
Session::set("admin", $admin);
|
||||
}
|
||||
$this->code = 1;
|
||||
$this->success();
|
||||
}
|
||||
$this->error();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,74 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace app\admin\controller\wechat;
|
||||
|
||||
use app\common\controller\Backend;
|
||||
use app\common\model\WechatResponse;
|
||||
|
||||
/**
|
||||
* 微信自动回复管理
|
||||
*
|
||||
* @icon fa fa-circle-o
|
||||
*/
|
||||
class Autoreply extends Backend
|
||||
{
|
||||
|
||||
protected $model = null;
|
||||
protected $noNeedRight = ['check_text_unique'];
|
||||
|
||||
public function _initialize()
|
||||
{
|
||||
parent::_initialize();
|
||||
$this->model = model('WechatAutoreply');
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑
|
||||
*/
|
||||
public function edit($ids = NULL)
|
||||
{
|
||||
$row = $this->model->get(['id' => $ids]);
|
||||
if (!$row)
|
||||
$this->error(__('No Results were found'));
|
||||
if ($this->request->isPost())
|
||||
{
|
||||
$this->code = -1;
|
||||
$params = $this->request->post("row/a");
|
||||
if ($params)
|
||||
{
|
||||
$row->save($params);
|
||||
$this->code = 1;
|
||||
}
|
||||
return;
|
||||
}
|
||||
$response = WechatResponse::get(['eventkey' => $row['eventkey']]);
|
||||
$this->view->assign("response", $response);
|
||||
$this->view->assign("row", $row);
|
||||
return $this->view->fetch();
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断文本是否唯一
|
||||
* @internal
|
||||
*/
|
||||
public function check_text_unique()
|
||||
{
|
||||
$row = $this->request->post("row/a");
|
||||
$except = $this->request->post("except");
|
||||
$text = isset($row['text']) ? $row['text'] : '';
|
||||
if ($this->model->where('text', $text)->where(function($query) use($except) {
|
||||
if ($except)
|
||||
{
|
||||
$query->where('text', '<>', $except);
|
||||
}
|
||||
})->count() == 0)
|
||||
{
|
||||
return json(['ok' => '']);
|
||||
}
|
||||
else
|
||||
{
|
||||
return json(['error' => __('Text already exists')]);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,164 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace app\admin\controller\wechat;
|
||||
|
||||
use app\common\controller\Backend;
|
||||
use think\Controller;
|
||||
use think\Request;
|
||||
|
||||
/**
|
||||
* 微信配置管理
|
||||
*
|
||||
* @icon fa fa-circle-o
|
||||
*/
|
||||
class Config extends Backend
|
||||
{
|
||||
|
||||
protected $model = null;
|
||||
|
||||
public function _initialize()
|
||||
{
|
||||
parent::_initialize();
|
||||
$this->model = model('WechatConfig');
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加
|
||||
*/
|
||||
public function add()
|
||||
{
|
||||
if ($this->request->isPost())
|
||||
{
|
||||
$this->code = -1;
|
||||
$params = $this->request->post("row/a");
|
||||
if ($params)
|
||||
{
|
||||
foreach ($params as $k => &$v)
|
||||
{
|
||||
$v = is_array($v) ? implode(',', $v) : $v;
|
||||
}
|
||||
|
||||
if ($params['mode'] == 'json')
|
||||
{
|
||||
//JSON字段
|
||||
$fieldarr = $valuearr = [];
|
||||
$field = $this->request->post('field/a');
|
||||
$value = $this->request->post('value/a');
|
||||
foreach ($field as $k => $v)
|
||||
{
|
||||
if ($v != '')
|
||||
{
|
||||
$fieldarr[] = $field[$k];
|
||||
$valuearr[] = $value[$k];
|
||||
}
|
||||
}
|
||||
$params['value'] = json_encode(array_combine($fieldarr, $valuearr), JSON_UNESCAPED_UNICODE);
|
||||
}
|
||||
unset($params['mode']);
|
||||
try
|
||||
{
|
||||
//是否采用模型验证
|
||||
if ($this->modelValidate)
|
||||
{
|
||||
$name = basename(str_replace('\\', '/', get_class($this->model)));
|
||||
$validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.add' : true) : $this->modelValidate;
|
||||
$this->model->validate($validate);
|
||||
}
|
||||
$result = $this->model->save($params);
|
||||
if ($result !== false)
|
||||
{
|
||||
$this->code = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->msg = $this->model->getError();
|
||||
}
|
||||
}
|
||||
catch (\think\exception\PDOException $e)
|
||||
{
|
||||
$this->msg = $e->getMessage();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->msg = __('Parameter %s can not be empty', '');
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
return $this->view->fetch();
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑
|
||||
*/
|
||||
public function edit($ids = NULL)
|
||||
{
|
||||
$row = $this->model->get($ids);
|
||||
if (!$row)
|
||||
$this->error(__('No Results were found'));
|
||||
if ($this->request->isPost())
|
||||
{
|
||||
$this->code = -1;
|
||||
$params = $this->request->post("row/a");
|
||||
if ($params)
|
||||
{
|
||||
foreach ($params as $k => &$v)
|
||||
{
|
||||
$v = is_array($v) ? implode(',', $v) : $v;
|
||||
}
|
||||
|
||||
if ($params['mode'] == 'json')
|
||||
{
|
||||
//JSON字段
|
||||
$fieldarr = $valuearr = [];
|
||||
$field = $this->request->post('field/a');
|
||||
$value = $this->request->post('value/a');
|
||||
foreach ($field as $k => $v)
|
||||
{
|
||||
if ($v != '')
|
||||
{
|
||||
$fieldarr[] = $field[$k];
|
||||
$valuearr[] = $value[$k];
|
||||
}
|
||||
}
|
||||
$params['value'] = json_encode(array_combine($fieldarr, $valuearr), JSON_UNESCAPED_UNICODE);
|
||||
}
|
||||
unset($params['mode']);
|
||||
try
|
||||
{
|
||||
//是否采用模型验证
|
||||
if ($this->modelValidate)
|
||||
{
|
||||
$name = basename(str_replace('\\', '/', get_class($this->model)));
|
||||
$validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.add' : true) : $this->modelValidate;
|
||||
$row->validate($validate);
|
||||
}
|
||||
$result = $row->save($params);
|
||||
if ($result !== false)
|
||||
{
|
||||
$this->code = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->msg = $row->getError();
|
||||
}
|
||||
}
|
||||
catch (think\exception\PDOException $e)
|
||||
{
|
||||
$this->msg = $e->getMessage();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->msg = __('Parameter %s can not be empty', '');
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
$this->view->assign("row", $row);
|
||||
$this->view->assign("value", (array) json_decode($row->value, true));
|
||||
return $this->view->fetch();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,111 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace app\admin\controller\wechat;
|
||||
|
||||
use app\common\controller\Backend;
|
||||
use app\common\model\WechatResponse;
|
||||
use EasyWeChat\Foundation\Application;
|
||||
use think\Config;
|
||||
use think\Exception;
|
||||
|
||||
/**
|
||||
* 菜单管理
|
||||
*
|
||||
* @icon fa fa-list-alt
|
||||
*/
|
||||
class Menu extends Backend
|
||||
{
|
||||
|
||||
protected $wechatcfg = NULL;
|
||||
|
||||
public function _initialize()
|
||||
{
|
||||
parent::_initialize();
|
||||
$this->wechatcfg = \app\common\model\WechatConfig::get(['name' => 'menu']);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$responselist = array();
|
||||
$all = WechatResponse::all();
|
||||
foreach ($all as $k => $v)
|
||||
{
|
||||
$responselist[$v['eventkey']] = $v['title'];
|
||||
}
|
||||
$this->view->assign('responselist', $responselist);
|
||||
$this->view->assign('menu', (array) json_decode($this->wechatcfg->value, TRUE));
|
||||
return $this->view->fetch();
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改
|
||||
*/
|
||||
public function edit($ids = NULL)
|
||||
{
|
||||
$menu = $this->request->post("menu");
|
||||
$menu = (array) json_decode($menu, TRUE);
|
||||
$this->wechatcfg->value = json_encode($menu, JSON_UNESCAPED_UNICODE);
|
||||
$this->wechatcfg->save();
|
||||
$this->code = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* 同步
|
||||
*/
|
||||
public function sync($ids = NULL)
|
||||
{
|
||||
$this->code = -1;
|
||||
$app = new Application(Config::get('wechat'));
|
||||
|
||||
try
|
||||
{
|
||||
$hasError = false;
|
||||
$menu = json_decode($this->wechatcfg->value, TRUE);
|
||||
foreach ($menu as $k => $v)
|
||||
{
|
||||
if (isset($v['sub_button']))
|
||||
{
|
||||
foreach ($v['sub_button'] as $m => $n)
|
||||
{
|
||||
if (isset($n['key']) && !$n['key'])
|
||||
{
|
||||
$hasError = true;
|
||||
break 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (isset($v['key']) && !$v['key'])
|
||||
{
|
||||
$hasError = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!$hasError)
|
||||
{
|
||||
$ret = $app->menu->add($menu);
|
||||
if ($ret->errcode == 0)
|
||||
{
|
||||
$this->code = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->msg = $ret->errmsg;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->msg = __('Invalid parameters');
|
||||
}
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
$this->msg = $e->getMessage();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,86 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace app\admin\controller\wechat;
|
||||
|
||||
use app\common\controller\Backend;
|
||||
use fast\service\Wechat;
|
||||
|
||||
/**
|
||||
* 资源管理
|
||||
*
|
||||
* @icon fa fa-list-alt
|
||||
*/
|
||||
class Response extends Backend
|
||||
{
|
||||
|
||||
protected $model = null;
|
||||
protected $searchFields = 'id,title';
|
||||
|
||||
public function _initialize()
|
||||
{
|
||||
parent::_initialize();
|
||||
$this->model = model('WechatResponse');
|
||||
}
|
||||
|
||||
/**
|
||||
* 选择素材
|
||||
*/
|
||||
public function select()
|
||||
{
|
||||
return $this->view->fetch();
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加
|
||||
*/
|
||||
public function add()
|
||||
{
|
||||
if ($this->request->isPost())
|
||||
{
|
||||
$this->code = -1;
|
||||
$params = $this->request->post("row/a");
|
||||
$params['eventkey'] = isset($params['eventkey']) && $params['eventkey'] ? $params['eventkey'] : uniqid();
|
||||
$params['content'] = json_encode($params['content']);
|
||||
$params['createtime'] = time();
|
||||
if ($params)
|
||||
{
|
||||
$this->model->save($params);
|
||||
$this->code = 1;
|
||||
$this->content = $params;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
$appConfig = Wechat::appConfig();
|
||||
$this->view->applist = $appConfig;
|
||||
return $this->view->fetch();
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑
|
||||
*/
|
||||
public function edit($ids = NULL)
|
||||
{
|
||||
$row = $this->model->get($ids);
|
||||
if (!$row)
|
||||
$this->error(__('No Results were found'));
|
||||
if ($this->request->isPost())
|
||||
{
|
||||
$this->code = -1;
|
||||
$params = $this->request->post("row/a");
|
||||
$params['eventkey'] = isset($params['eventkey']) && $params['eventkey'] ? $params['eventkey'] : uniqid();
|
||||
$params['content'] = json_encode($params['content']);
|
||||
if ($params)
|
||||
{
|
||||
$row->save($params);
|
||||
$this->code = 1;
|
||||
}
|
||||
return;
|
||||
}
|
||||
$this->view->assign("row", $row);
|
||||
$appConfig = Wechat::appConfig();
|
||||
$this->view->applist = $appConfig;
|
||||
return $this->view->fetch();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'Id' => 'ID',
|
||||
'Title' => '标题',
|
||||
'Value' => '配置值',
|
||||
'Array key' => '键',
|
||||
'Array value' => '值',
|
||||
];
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'Title' => '任务标题',
|
||||
'Maximums' => '最多执行',
|
||||
'Sleep' => '延迟秒数',
|
||||
'Schedule' => '执行周期',
|
||||
'Executes' => '执行次数',
|
||||
'Execute time' => '最后执行时间',
|
||||
'Request Url' => '请求URL',
|
||||
'Execute Sql Script' => '执行SQL',
|
||||
'Execute Shell' => '执行Shell',
|
||||
'Crontab format invalid' => 'Crontab格式错误',
|
||||
'Next execute time' => '下次预计时间',
|
||||
'The next %s times the execution time' => '接下来 %s 次的执行时间',
|
||||
];
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'SQL Result' => '查询结果',
|
||||
'Basic query' => '基础查询',
|
||||
'View structure' => '查看表结构',
|
||||
'View data' => '查看表数据',
|
||||
'Optimize' => '优化表',
|
||||
'Repair' => '修复表',
|
||||
'Optimize all' => '优化全部表',
|
||||
'Repair all' => '修复全部表',
|
||||
'Table:%s' => '总计:%s个表',
|
||||
'Record:%s' => '记录:%s条',
|
||||
'Data:%s' => '占用:%s',
|
||||
'Index:%s' => '索引:%s',
|
||||
'SQL Result:' => '查询结果:',
|
||||
'SQL can not be empty' => 'SQL语句不能为空',
|
||||
'Max output:%s' => '最大返回%s条',
|
||||
'Total:%s' => '共有%s条记录! ',
|
||||
'Row:%s' => '记录:%s',
|
||||
'Executes one or multiple queries which are concatenated by a semicolon' => '请输入SQL语句,支持批量查询,多条SQL以分号(;)分格',
|
||||
'Query affected %s rows and took %s seconds' => '共影响%s条记录! 耗时:%s秒!',
|
||||
'Query returned an empty result' => '返回结果为空!',
|
||||
'Query took %s seconds' => '耗时%s秒!',
|
||||
'Optimize table %s done' => '优化表[%s]成功',
|
||||
'Repair table %s done' => '修复表[%s]成功',
|
||||
'Optimize table %s fail' => '优化表[%s]失败',
|
||||
'Repair table %s fail' => '修复表[%s]失败'
|
||||
];
|
||||
|
||||
|
|
@ -31,4 +31,8 @@ return [
|
|||
'Verification code is incorrect' => '验证码不正确',
|
||||
'Wipe cache completed' => '清除缓存成功',
|
||||
'Wipe cache failed' => '清除缓存失败',
|
||||
'Wipe cache' => '清空缓存',
|
||||
'Check for updates' => '检测更新',
|
||||
'Latest news' => '最新消息',
|
||||
'View more' => '查看更多',
|
||||
];
|
||||
|
|
|
|||
|
|
@ -1,17 +0,0 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'id' => 'ID',
|
||||
'category_id' => '分类ID',
|
||||
'category' => '分类',
|
||||
'title' => '标题',
|
||||
'keywords' => '关键字',
|
||||
'flag' => '标志',
|
||||
'image' => '头像',
|
||||
'content' => '内容',
|
||||
'icon' => '图标',
|
||||
'views' => '点击',
|
||||
'comments' => '评论',
|
||||
'weigh' => '权重',
|
||||
'status' => '状态'
|
||||
];
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'id' => 'ID',
|
||||
'oldversion' => '旧版本号',
|
||||
'newversion' => '新版本号',
|
||||
'packagesize' => '包大小',
|
||||
'content' => '升级内容',
|
||||
'downloadurl' => '下载地址',
|
||||
'enforce' => '强制更新',
|
||||
'createtime' => '创建时间',
|
||||
'updatetime' => '更新时间',
|
||||
'weigh' => '权重',
|
||||
'status' => '状态'
|
||||
];
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'Text' => '文本',
|
||||
'Event key' => '响应标识',
|
||||
'Remark' => '备注',
|
||||
'Text already exists' => '文本已经存在',
|
||||
];
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'name' => '配置名称',
|
||||
'value' => '配置值',
|
||||
'Json key' => '键',
|
||||
'Json value' => '值',
|
||||
'createtime' => '创建时间',
|
||||
'updatetime' => '更新时间'
|
||||
];
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'Resource title' => '资源标题',
|
||||
'Event key' => '事件标识',
|
||||
'Text' => '文本',
|
||||
'App' => '应用',
|
||||
];
|
||||
|
|
@ -244,14 +244,8 @@ class Auth extends \fast\Auth
|
|||
// 生成菜单的badge
|
||||
foreach ($params as $k => $v)
|
||||
{
|
||||
if (stripos($k, '/') === false)
|
||||
{
|
||||
$url = '/' . $module . '/' . $k;
|
||||
}
|
||||
else
|
||||
{
|
||||
$url = url($k);
|
||||
}
|
||||
|
||||
$url = $k;
|
||||
|
||||
if (is_array($v))
|
||||
{
|
||||
|
|
@ -275,7 +269,6 @@ class Auth extends \fast\Auth
|
|||
// 读取管理员当前拥有的权限节点
|
||||
$userRule = $this->getRuleList();
|
||||
$select_id = 0;
|
||||
$activeUrl = '/' . $module . '/' . $fixedPage;
|
||||
// 必须将结果集转换为数组
|
||||
$ruleList = collection(model('AuthRule')->where('ismenu', 1)->order('weigh', 'desc')->cache("__menu__")->select())->toArray();
|
||||
foreach ($ruleList as $k => &$v)
|
||||
|
|
@ -285,8 +278,8 @@ class Auth extends \fast\Auth
|
|||
unset($ruleList[$k]);
|
||||
continue;
|
||||
}
|
||||
$select_id = $v['name'] == $activeUrl ? $v['id'] : $select_id;
|
||||
$v['url'] = $v['name'];
|
||||
$select_id = $v['name'] == $fixedPage ? $v['id'] : $select_id;
|
||||
$v['url'] = '/' . $module . '/' . $v['name'];
|
||||
$v['badge'] = isset($badgeList[$v['name']]) ? $badgeList[$v['name']] : '';
|
||||
$v['py'] = \fast\Pinyin::get($v['title'], true);
|
||||
$v['pinyin'] = \fast\Pinyin::get($v['title']);
|
||||
|
|
|
|||
|
|
@ -1,55 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace app\admin\model;
|
||||
|
||||
use think\Model;
|
||||
|
||||
class Config extends Model
|
||||
{
|
||||
|
||||
// 表名,不含前缀
|
||||
protected $name = 'config';
|
||||
// 自动写入时间戳字段
|
||||
protected $autoWriteTimestamp = false;
|
||||
// 定义时间戳字段名
|
||||
protected $createTime = false;
|
||||
protected $updateTime = false;
|
||||
// 追加属性
|
||||
protected $append = [
|
||||
];
|
||||
|
||||
/**
|
||||
* 读取配置类型
|
||||
* @return array
|
||||
*/
|
||||
public static function getTypeList()
|
||||
{
|
||||
$typeList = [
|
||||
'string' => __('String'),
|
||||
'text' => __('Text'),
|
||||
'number' => __('Number'),
|
||||
'datetime' => __('Datetime'),
|
||||
'select' => __('Select'),
|
||||
'selects' => __('Selects'),
|
||||
'image' => __('Image'),
|
||||
'images' => __('Images'),
|
||||
'file' => __('File'),
|
||||
'files' => __('Files'),
|
||||
'checkbox' => __('Checkbox'),
|
||||
'radio' => __('Radio'),
|
||||
'array' => __('Array'),
|
||||
];
|
||||
return $typeList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 读取分类分组列表
|
||||
* @return array
|
||||
*/
|
||||
public static function getGroupList()
|
||||
{
|
||||
$groupList = config('site.configgroup');
|
||||
return $groupList;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,203 +0,0 @@
|
|||
<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
|
||||
|
||||
<div class="form-group">
|
||||
<label for="c-category_id" class="control-label col-xs-12 col-sm-2">{:__('Category_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-category_id" data-rule="required" data-source="category/selectpage" data-params='{"custom[type]":""}' class="form-control selectpage" name="row[category_id]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-category_ids" class="control-label col-xs-12 col-sm-2">{:__('Category_ids')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-category_ids" data-rule="required" data-source="category/selectpage" data-params='{"custom[type]":""}' data-multiple="true" class="form-control selectpage" name="row[category_ids]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-user_id" class="control-label col-xs-12 col-sm-2">{:__('User_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-user_id" data-rule="required" data-source="user/index" data-field="nickname" class="form-control selectpage" name="row[user_id]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-user_ids" class="control-label col-xs-12 col-sm-2">{:__('User_ids')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-user_ids" data-rule="required" data-source="user/index" data-multiple="true" data-field="nickname" class="form-control selectpage" name="row[user_ids]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-week" class="control-label col-xs-12 col-sm-2">{:__('Week')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
<select id="c-week" data-rule="required" class="form-control selectpicker" name="row[week]">
|
||||
{foreach name="weekList" item="vo"}
|
||||
<option value="{$key}" {in name="key" value=""}selected{/in}>{$vo}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-flag" class="control-label col-xs-12 col-sm-2">{:__('Flag')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
<select id="c-flag" data-rule="required" class="form-control selectpicker" multiple="" name="row[flag][]">
|
||||
{foreach name="flagList" item="vo"}
|
||||
<option value="{$key}" {in name="key" value=""}selected{/in}>{$vo}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-genderdata" class="control-label col-xs-12 col-sm-2">{:__('Genderdata')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
{foreach name="genderdataList" item="vo"}
|
||||
<label for="row[genderdata]-{$key}"><input id="row[genderdata]-{$key}" name="row[genderdata]" type="radio" value="{$key}" {in name="key" value="male"}checked{/in} /> {$vo}</label>
|
||||
{/foreach}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-hobbydata" class="control-label col-xs-12 col-sm-2">{:__('Hobbydata')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
{foreach name="hobbydataList" item="vo"}
|
||||
<label for="row[hobbydata][]-{$key}"><input id="row[hobbydata][]-{$key}" name="row[hobbydata][]" type="checkbox" value="{$key}" {in name="key" value=""}checked{/in} /> {$vo}</label>
|
||||
{/foreach}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-title" class="control-label col-xs-12 col-sm-2">{:__('Title')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-title" data-rule="required" class="form-control" name="row[title]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-content" class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<textarea id="c-content" data-rule="required" class="form-control summernote" rows="5" name="row[content]" cols="50"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-image" class="control-label col-xs-12 col-sm-2">{:__('Image')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<div class="form-inline">
|
||||
<input id="c-image" data-rule="required" class="form-control" size="50" name="row[image]" type="text" value="">
|
||||
<span><button type="button" id="plupload-image" class="btn btn-danger plupload" data-input-id="c-image" data-mimetype="image/*" data-multiple="false" data-preview-id="p-image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
||||
<span><button type="button" id="fachoose-image" class="btn btn-primary fachoose" data-input-id="c-image" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
||||
<ul class="row list-inline plupload-preview" id="p-image"></ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-images" class="control-label col-xs-12 col-sm-2">{:__('Images')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<div class="form-inline">
|
||||
<input id="c-images" data-rule="required" class="form-control" size="50" name="row[images]" type="text" value="">
|
||||
<span><button type="button" id="plupload-images" class="btn btn-danger plupload" data-input-id="c-images" data-mimetype="image/*" data-multiple="true" data-preview-id="p-images"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
||||
<span><button type="button" id="fachoose-images" class="btn btn-primary fachoose" data-input-id="c-images" data-mimetype="image/*" data-multiple="true"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
||||
<ul class="row list-inline plupload-preview" id="p-images"></ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-attachfile" class="control-label col-xs-12 col-sm-2">{:__('Attachfile')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<div class="form-inline">
|
||||
<input id="c-attachfile" data-rule="required" class="form-control" size="50" name="row[attachfile]" type="text" value="">
|
||||
<span><button type="button" id="plupload-attachfile" class="btn btn-danger plupload" data-input-id="c-attachfile" data-multiple="false"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
||||
<span><button type="button" id="fachoose-attachfile" class="btn btn-primary fachoose" data-input-id="c-attachfile" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-keywords" class="control-label col-xs-12 col-sm-2">{:__('Keywords')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-keywords" data-rule="required" class="form-control" name="row[keywords]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-description" class="control-label col-xs-12 col-sm-2">{:__('Description')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-description" data-rule="required" class="form-control" name="row[description]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-price" class="control-label col-xs-12 col-sm-2">{:__('Price')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-price" class="form-control" step="0.01" name="row[price]" type="number" value="0.00">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-views" class="control-label col-xs-12 col-sm-2">{:__('Views')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-views" class="form-control" name="row[views]" type="number" value="0">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-startdate" class="control-label col-xs-12 col-sm-2">{:__('Startdate')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-startdate" data-rule="required" class="form-control datetimepicker" data-date-format="YYYY-MM-DD" data-use-current="true" name="row[startdate]" type="text" value="{:date('Y-m-d')}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-activitytime" class="control-label col-xs-12 col-sm-2">{:__('Activitytime')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-activitytime" data-rule="required" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[activitytime]" type="text" value="{:date('Y-m-d H:i:s')}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-year" class="control-label col-xs-12 col-sm-2">{:__('Year')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-year" data-rule="required" class="form-control datetimepicker" data-date-format="YYYY" data-use-current="true" name="row[year]" type="text" value="{:date('Y')}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-times" class="control-label col-xs-12 col-sm-2">{:__('Times')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-times" data-rule="required" class="form-control datetimepicker" data-date-format="HH:mm:ss" data-use-current="true" name="row[times]" type="text" value="{:date('H:i:s')}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-refreshtime" class="control-label col-xs-12 col-sm-2">{:__('Refreshtime')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-refreshtime" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[refreshtime]" type="text" value="{:date('Y-m-d H:i:s')}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-weigh" class="control-label col-xs-12 col-sm-2">{:__('Weigh')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-weigh" class="form-control" name="row[weigh]" type="number" value="0">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-status" class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
{foreach name="statusList" item="vo"}
|
||||
<label for="row[status]-{$key}"><input id="row[status]-{$key}" name="row[status]" type="radio" value="{$key}" {in name="key" value="normal"}checked{/in} /> {$vo}</label>
|
||||
{/foreach}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-state" class="control-label col-xs-12 col-sm-2">{:__('State')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
{foreach name="stateList" item="vo"}
|
||||
<label for="row[state]-{$key}"><input id="row[state]-{$key}" name="row[state]" type="radio" value="{$key}" {in name="key" value="1"}checked{/in} /> {$vo}</label>
|
||||
{/foreach}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group layer-footer">
|
||||
<label class="control-label col-xs-12 col-sm-2"></label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
|
||||
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
|
||||
|
||||
<div class="form-group">
|
||||
<label for="c-name" class="control-label col-xs-12 col-sm-2">{:__('Name')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<button type="button" id="plupload-addon" class="btn btn-danger plupload" data-url="addon/local" data-mimetype="application/zip" data-multiple="false"><i class="fa fa-upload"></i> {:__('请选择一个安装包')}</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-nickname" class="control-label col-xs-12 col-sm-2">{:__('Nickname')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-nickname" data-rule="required" class="form-control" name="row[nickname]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group layer-footer">
|
||||
<label class="control-label col-xs-12 col-sm-2"></label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
|
||||
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
|
@ -0,0 +1,102 @@
|
|||
<form id="config-form" class="edit-form form-horizontal" role="form" data-toggle="validator" method="POST" action="">
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th width="15%">{:__('Title')}</th>
|
||||
<th width="85%">{:__('Value')}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{foreach $addon.config as $item}
|
||||
<tr>
|
||||
<td>{$item.title}</td>
|
||||
<td>
|
||||
<div class="row">
|
||||
<div class="col-sm-8 col-xs-12">
|
||||
{switch $item.type}
|
||||
{case string}
|
||||
<input type="text" name="row[{$item.name}]" value="{$item.value}" class="form-control" data-rule="{$item.rule}" data-tip="{$item.tip}" {$item.extend} />
|
||||
{/case}
|
||||
{case text}
|
||||
<textarea name="row[{$item.name}]" class="form-control" data-rule="{$item.rule}" rows="5" data-tip="{$item.tip}" {$item.extend}>{$item.value}</textarea>
|
||||
{/case}
|
||||
{case array}
|
||||
<dl class="fieldlist" rel="{$item.value|count}" data-name="row[{$item.name}]">
|
||||
<dd>
|
||||
<ins>{:__('Array key')}</ins>
|
||||
<ins>{:__('Array value')}</ins>
|
||||
</dd>
|
||||
{foreach $item.value as $key => $vo}
|
||||
<dd class="form-inline">
|
||||
<input type="text" name="row[{$item.name}][field][{$key}]" class="form-control" value="{$key}" size="10" />
|
||||
<input type="text" name="row[{$item.name}][value][{$key}]" class="form-control" value="{$vo}" 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>
|
||||
{/foreach}
|
||||
<dd><a href="javascript:;" class="append btn btn-sm btn-success"><i class="fa fa-plus"></i> {:__('Append')}</a></dd>
|
||||
</dl>
|
||||
{/case}
|
||||
{case datetime}
|
||||
<input type="text" name="row[{$item.name}]" value="{$item.value}" class="form-control datetimepicker" data-tip="{$item.tip}" data-rule="{$item.rule}" {$item.extend} />
|
||||
{/case}
|
||||
{case number}
|
||||
<input type="number" name="row[{$item.name}]" value="{$item.value}" class="form-control" data-tip="{$item.tip}" data-rule="{$item.rule}" {$item.extend} />
|
||||
{/case}
|
||||
{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 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"}
|
||||
<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 class="col-sm-4"></div>
|
||||
</div>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="form-group layer-footer">
|
||||
<label class="control-label col-xs-12 col-sm-2"></label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
|
||||
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
|
@ -0,0 +1,120 @@
|
|||
<style type="text/css">
|
||||
.addon {
|
||||
height:100%;position: relative;
|
||||
}
|
||||
.addon > span {
|
||||
position:absolute;left:15px;top:15px;
|
||||
}
|
||||
.layui-layer-pay .layui-layer-content {
|
||||
padding:0;height:600px!important;
|
||||
}
|
||||
.layui-layer-pay {border:none;}
|
||||
</style>
|
||||
<div class="panel panel-default panel-intro">
|
||||
{:build_heading()}
|
||||
|
||||
<div class="panel-body">
|
||||
<div id="myTabContent" class="tab-content">
|
||||
<div class="tab-pane fade active in" id="one">
|
||||
<div class="widget-body no-padding">
|
||||
<div id="toolbar" class="toolbar">
|
||||
{:build_toolbar('refresh')}
|
||||
<button type="button" id="plupload-addon" class="btn btn-danger plupload" data-url="addon/local" data-mimetype="application/zip" data-multiple="false"><i class="fa fa-upload"></i> {:__('本地安装')}</button>
|
||||
<a class="btn btn-success btn-ajax" href="addon/refresh"><i class="fa fa-refresh"></i> {:__('刷新插件缓存')}</a>
|
||||
</div>
|
||||
<table id="table" class="table table-striped table-hover" width="100%">
|
||||
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script id="paytpl" type="text/html">
|
||||
<div style="position:relative;width:800px;height:600px;background:url('<%=payimg%>') 0 0 no-repeat;">
|
||||
<div style="position:absolute;left:265px;top:442px;">
|
||||
<%=paycode%>
|
||||
</div>
|
||||
<div style="position:absolute;left:660px;top:442px;">
|
||||
<%=paycode%>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
<script id="conflicttpl" type="text/html">
|
||||
<div class="alert alert-dismissable alert-danger">
|
||||
<button type="button" class="close" data-dismiss="alert">×</button>
|
||||
<strong>警告!</strong> 此插件中发现和现有系统中部分文件发现冲突!以下文件将会被影响,请备份好相关文件后再继续操作
|
||||
</div>
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>#</th>
|
||||
<th>文件</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<%for(var i=0;i < conflictlist.length;i++){%>
|
||||
<tr>
|
||||
<th scope="row"><%=i+1%></th>
|
||||
<td><%=conflictlist[i]%></td>
|
||||
</tr>
|
||||
<%}%>
|
||||
</tbody>
|
||||
</table>
|
||||
</script>
|
||||
<script id="itemtpl" type="text/html">
|
||||
<div class="col-sm-4 col-md-3">
|
||||
<% var labelarr = ['primary', 'success', 'info', 'danger', 'warning']; %>
|
||||
<% var label = labelarr[item.id % 5]; %>
|
||||
<% var addon = typeof addons[item.name]!= 'undefined' ? addons[item.name] : null; %>
|
||||
<div class="thumbnail addon">
|
||||
<!--<span class="btn btn-<%=label%>">ID:<%=item.id%></span>-->
|
||||
<a href="<%=addon?addon.url:'javascript:;'%>" target="_blank"><img src="<%=item.image%>" class="img-responsive" alt="<%=item.title%>"></a>
|
||||
<div class="caption">
|
||||
<h4><%=item.title?item.title:'无'%>
|
||||
<% if(item.flag.indexOf("recommend")>-1){%>
|
||||
<span class="label label-success">推荐</span>
|
||||
<% } %>
|
||||
<% if(item.flag.indexOf("hot")>-1){%>
|
||||
<span class="label label-danger">热门</span>
|
||||
<% } %>
|
||||
<% if(item.flag.indexOf("free")>-1){%>
|
||||
<span class="label label-info">免费</span>
|
||||
<% } %>
|
||||
<% if(item.flag.indexOf("sale")>-1){%>
|
||||
<span class="label label-warning">折扣</span>
|
||||
<% } %>
|
||||
</h4>
|
||||
<p class="text-<%=item.price>0?'danger':'success'%>"><b>¥<%=item.price%></b></p>
|
||||
<p class="text-muted">作者: <a href="<%=item.url?item.url:'javascript:;'%>" target="_blank"><%=item.author%></a></p>
|
||||
<p class="text-muted">描述: <%=item.intro%></p>
|
||||
<p class="text-muted">版本: <%=# addon && item && addon.version!=item.version?'<span class="label label-danger">'+addon.version+'</span> -> <span class="label label-success">'+item.version+'</span>':item.version%></p>
|
||||
<p class="text-muted">添加时间: <%=Moment(item.createtime*1000).format("YYYY-MM-DD HH:mm:ss")%></p>
|
||||
<!--<p class="text-muted">最后时间: <%=Moment(item.updatetime*1000).format("YYYY-MM-DD HH:mm:ss")%></p>-->
|
||||
<p class="operate" data-id="<%=item.id%>" data-name="<%=item.name%>">
|
||||
<% if(!addon){ %>
|
||||
<a href="javascript:;" class="btn btn-primary btn-success btn-install"><i class="fa fa-cloud-download"></i> 安装</a>
|
||||
<% } %>
|
||||
<% if(addon){ %>
|
||||
<% if(addon.config){ %>
|
||||
<a href="javascript:;" class="btn btn-primary btn-config"><i class="fa fa-pencil"></i> 配置</a>
|
||||
<% } %>
|
||||
<% if(addon.state == "1"){ %>
|
||||
<a href="javascript:;" class="btn btn-warning btn-disable" data-action="disable"><i class="fa fa-times"></i> 点击禁用</a>
|
||||
<% }else{ %>
|
||||
<a href="javascript:;" class="btn btn-success btn-enable" data-action="enable"><i class="fa fa-check"></i> 点击启用</a>
|
||||
<a href="javascript:;" class="btn btn-danger btn-uninstall"><i class="fa fa-times"></i> 卸载</a>
|
||||
<% } %>
|
||||
<% } %>
|
||||
<!--
|
||||
<span class="pull-right" style="margin-top:10px;">
|
||||
<input name="checkbox" data-id="<%=item.id%>" type="checkbox" />
|
||||
</span>
|
||||
-->
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
|
@ -6,7 +6,7 @@
|
|||
<div class="tab-pane fade active in" id="one">
|
||||
<div class="widget-body no-padding">
|
||||
<div id="toolbar" class="toolbar">
|
||||
{:build_toolbar()}
|
||||
{:build_toolbar('refresh,add,delete')}
|
||||
</div>
|
||||
<table id="table" class="table table-striped table-bordered table-hover" width="100%">
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<form id="add-form" class="form-horizontal form-ajax" role="form" data-toggle="validator" method="POST" data-before-submit="refreshrules" action="">
|
||||
<form id="add-form" class="form-horizontal form-ajax" role="form" data-toggle="validator" method="POST" action="">
|
||||
<input type="hidden" name="row[rules]" value="" />
|
||||
<div class="form-group">
|
||||
<label for="pid" class="control-label col-xs-12 col-sm-2">{:__('Parent')}:</label>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<form id="edit-form" class="form-horizontal form-ajax" role="form" method="POST" data-before-submit="refreshrules" action="">
|
||||
<form id="edit-form" class="form-horizontal form-ajax" role="form" method="POST" action="">
|
||||
<input type="hidden" name="row[rules]" value="" />
|
||||
<div class="form-group">
|
||||
<label for="pid" class="control-label col-xs-12 col-sm-2">{:__('Parent')}:</label>
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
<div class="tab-pane fade active in" id="one">
|
||||
<div class="widget-body no-padding">
|
||||
<div id="toolbar" class="toolbar">
|
||||
{:build_toolbar()}
|
||||
{:build_toolbar('refresh,add,delete')}
|
||||
</div>
|
||||
<table id="table" class="table table-striped table-bordered table-hover" width="100%">
|
||||
|
||||
|
|
|
|||
|
|
@ -3,10 +3,10 @@
|
|||
<div class="form-group">
|
||||
<label for="c-type" class="control-label col-xs-12 col-sm-2">{:__('Type')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
<select id="c-type" data-rule="required" class="form-control selectpicker" name="row[type]">
|
||||
|
||||
<select id="c-type" data-rule="required" class="form-control selectpicker" name="row[type]">
|
||||
{foreach name="typeList" item="vo"}
|
||||
<option value="{$key}" {in name="key" value=""}selected{/in}>{$vo}</option>
|
||||
<option value="{$key}" {in name="key" value=""}selected{/in}>{$vo}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
|
||||
|
|
@ -15,10 +15,10 @@
|
|||
<div class="form-group">
|
||||
<label for="c-pid" class="control-label col-xs-12 col-sm-2">{:__('Pid')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
<select id="c-flag" data-rule="required" class="form-control selectpicker" name="row[pid]">
|
||||
|
||||
<select id="c-pid" data-rule="required" class="form-control selectpicker" name="row[pid]">
|
||||
{foreach name="parentList" item="vo"}
|
||||
<option value="{$key}" {in name="key" value=""}selected{/in}>{$vo}</option>
|
||||
<option data-type="{$vo.type}" value="{$key}" {in name="key" value=""}selected{/in}>{$vo.name}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
|
||||
|
|
@ -39,10 +39,10 @@
|
|||
<div class="form-group">
|
||||
<label for="c-flag" class="control-label col-xs-12 col-sm-2">{:__('Flag')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
|
||||
<select id="c-flag" class="form-control selectpicker" multiple="" name="row[flag][]">
|
||||
{foreach name="flagList" item="vo"}
|
||||
<option value="{$key}" {in name="key" value=""}selected{/in}>{$vo}</option>
|
||||
<option value="{$key}" {in name="key" value=""}selected{/in}>{$vo}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
|
||||
|
|
|
|||
|
|
@ -3,10 +3,10 @@
|
|||
<div class="form-group">
|
||||
<label for="c-type" class="control-label col-xs-12 col-sm-2">{:__('Type')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
<select id="c-type" data-rule="required" class="form-control selectpicker" name="row[type]">
|
||||
|
||||
<select id="c-type" data-rule="required" class="form-control selectpicker" name="row[type]">
|
||||
{foreach name="typeList" item="vo"}
|
||||
<option value="{$key}" {in name="key" value="$row.type"}selected{/in}>{$vo}</option>
|
||||
<option value="{$key}" {in name="key" value="$row.type"}selected{/in}>{$vo}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
|
||||
|
|
@ -15,10 +15,10 @@
|
|||
<div class="form-group">
|
||||
<label for="c-pid" class="control-label col-xs-12 col-sm-2">{:__('Pid')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
<select id="c-flag" data-rule="required" class="form-control selectpicker" name="row[pid]">
|
||||
|
||||
<select id="c-pid" data-rule="required" class="form-control selectpicker" name="row[pid]">
|
||||
{foreach name="parentList" item="vo"}
|
||||
<option value="{$key}" {in name="key" value="$row.pid"}selected{/in}>{$vo}</option>
|
||||
<option data-type="{$vo.type}" class="{:$vo.type==$row.type||$vo.type=='all'?'':'hide'}" value="{$key}" {in name="key" value="$row.pid"}selected{/in}>{$vo.name}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
|
||||
|
|
@ -39,10 +39,10 @@
|
|||
<div class="form-group">
|
||||
<label for="c-flag" class="control-label col-xs-12 col-sm-2">{:__('Flag')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
|
||||
<select id="c-flag" class="form-control selectpicker" multiple="" name="row[flag][]">
|
||||
{foreach name="flagList" item="vo"}
|
||||
<option value="{$key}" {in name="key" value="$row.flag"}selected{/in}>{$vo}</option>
|
||||
<option value="{$key}" {in name="key" value="$row.flag"}selected{/in}>{$vo}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
|
||||
|
|
|
|||
|
|
@ -38,28 +38,18 @@
|
|||
|
||||
</ul>
|
||||
</li>
|
||||
<li class="footer"><a href="#" target="_blank">{:__('View all')}</a></li>
|
||||
<li class="footer"><a href="#" target="_blank">{:__('View more')}</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li class="dropdown messages-menu github-commits">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
|
||||
<i class="fa fa-github"></i>
|
||||
<span class="label label-info"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li class="header">{:__('Recent commits')}</li>
|
||||
<li>
|
||||
<ul class="menu">
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
<li class="footer"><a href="#" target="_blank">{:__('View all')}</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
|
||||
<li>
|
||||
<a href="javascript:;" data-toggle="wipecache" title="清空缓存">
|
||||
<a href="javascript:;" data-toggle="checkupdate" title="{:__('Check for updates')}">
|
||||
<i class="fa fa-refresh"></i>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="javascript:;" data-toggle="wipecache" title="{:__('Wipe cache')}">
|
||||
<i class="fa fa-trash"></i>
|
||||
</a>
|
||||
</li>
|
||||
|
|
@ -113,10 +103,10 @@
|
|||
<!-- Menu Footer-->
|
||||
<li class="user-footer">
|
||||
<div class="pull-left">
|
||||
<a href="general/profile" class="btn btn-default btn-flat addtabsit">{:__('Profile')}</a>
|
||||
<a href="general/profile" class="btn btn-primary addtabsit"><i class="fa fa-user"></i> {:__('Profile')}</a>
|
||||
</div>
|
||||
<div class="pull-right">
|
||||
<a href="{:url('index/logout')}" class="btn btn-default btn-flat">{:__('Logout')}</a>
|
||||
<a href="{:url('index/logout')}" class="btn btn-danger"><i class="fa fa-sign-out"></i> {:__('Logout')}</a>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
|
|
|
|||
|
|
@ -29,6 +29,10 @@
|
|||
<!--如果想始终显示子菜单,则给ul加上show-submenu类即可-->
|
||||
<ul class="sidebar-menu">
|
||||
{$menulist}
|
||||
<li class="header">相关链接</li>
|
||||
<li><a href="http://doc.fastadmin.net"><i class="fa fa-list text-red"></i> <span>官方文档</span></a></li>
|
||||
<li><a href="http://forum.fastadmin.net"><i class="fa fa-comment text-yellow"></i> <span>社区交流</span></a></li>
|
||||
<li><a href="https://jq.qq.com/?_wv=1027&k=487PNBb"><i class="fa fa-qq text-aqua"></i> <span>QQ交流群</span></a></li>
|
||||
</ul>
|
||||
</section>
|
||||
<!-- /.sidebar -->
|
||||
|
|
@ -1,203 +0,0 @@
|
|||
<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
|
||||
|
||||
<div class="form-group">
|
||||
<label for="c-category_id" class="control-label col-xs-12 col-sm-2">{:__('Category_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-category_id" data-rule="required" data-source="category/selectpage" data-params='{"custom[type]":""}' class="form-control selectpage" name="row[category_id]" type="text" value="{$row.category_id}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-category_ids" class="control-label col-xs-12 col-sm-2">{:__('Category_ids')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-category_ids" data-rule="required" data-source="category/selectpage" data-params='{"custom[type]":""}' data-multiple="true" class="form-control selectpage" name="row[category_ids]" type="text" value="{$row.category_ids}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-user_id" class="control-label col-xs-12 col-sm-2">{:__('User_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-user_id" data-rule="required" data-source="user/index" data-field="nickname" class="form-control selectpage" name="row[user_id]" type="text" value="{$row.user_id}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-user_ids" class="control-label col-xs-12 col-sm-2">{:__('User_ids')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-user_ids" data-rule="required" data-source="user/index" data-multiple="true" data-field="nickname" class="form-control selectpage" name="row[user_ids]" type="text" value="{$row.user_ids}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-week" class="control-label col-xs-12 col-sm-2">{:__('Week')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
<select id="c-week" data-rule="required" class="form-control selectpicker" name="row[week]">
|
||||
{foreach name="weekList" item="vo"}
|
||||
<option value="{$key}" {in name="key" value="$row.week"}selected{/in}>{$vo}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-flag" class="control-label col-xs-12 col-sm-2">{:__('Flag')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
<select id="c-flag" data-rule="required" class="form-control selectpicker" multiple="" name="row[flag][]">
|
||||
{foreach name="flagList" item="vo"}
|
||||
<option value="{$key}" {in name="key" value="$row.flag"}selected{/in}>{$vo}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-genderdata" class="control-label col-xs-12 col-sm-2">{:__('Genderdata')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
{foreach name="genderdataList" item="vo"}
|
||||
<label for="row[genderdata]-{$key}"><input id="row[genderdata]-{$key}" name="row[genderdata]" type="radio" value="{$key}" {in name="key" value="$row.genderdata"}checked{/in} /> {$vo}</label>
|
||||
{/foreach}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-hobbydata" class="control-label col-xs-12 col-sm-2">{:__('Hobbydata')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
{foreach name="hobbydataList" item="vo"}
|
||||
<label for="row[hobbydata][]-{$key}"><input id="row[hobbydata][]-{$key}" name="row[hobbydata][]" type="checkbox" value="{$key}" {in name="key" value="$row.hobbydata"}checked{/in} /> {$vo}</label>
|
||||
{/foreach}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-title" class="control-label col-xs-12 col-sm-2">{:__('Title')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-title" data-rule="required" class="form-control" name="row[title]" type="text" value="{$row.title}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-content" class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<textarea id="c-content" data-rule="required" class="form-control summernote" rows="5" name="row[content]" cols="50">{$row.content}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-image" class="control-label col-xs-12 col-sm-2">{:__('Image')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<div class="form-inline">
|
||||
<input id="c-image" data-rule="required" class="form-control" size="50" name="row[image]" type="text" value="{$row.image}">
|
||||
<span><button type="button" id="plupload-image" class="btn btn-danger plupload" data-input-id="c-image" data-mimetype="image/*" data-multiple="false" data-preview-id="p-image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
||||
<span><button type="button" id="fachoose-image" class="btn btn-primary fachoose" data-input-id="c-image" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
||||
<ul class="row list-inline plupload-preview" id="p-image"></ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-images" class="control-label col-xs-12 col-sm-2">{:__('Images')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<div class="form-inline">
|
||||
<input id="c-images" data-rule="required" class="form-control" size="50" name="row[images]" type="text" value="{$row.images}">
|
||||
<span><button type="button" id="plupload-images" class="btn btn-danger plupload" data-input-id="c-images" data-mimetype="image/*" data-multiple="true" data-preview-id="p-images"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
||||
<span><button type="button" id="fachoose-images" class="btn btn-primary fachoose" data-input-id="c-images" data-mimetype="image/*" data-multiple="true"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
||||
<ul class="row list-inline plupload-preview" id="p-images"></ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-attachfile" class="control-label col-xs-12 col-sm-2">{:__('Attachfile')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<div class="form-inline">
|
||||
<input id="c-attachfile" data-rule="required" class="form-control" size="50" name="row[attachfile]" type="text" value="{$row.attachfile}">
|
||||
<span><button type="button" id="plupload-attachfile" class="btn btn-danger plupload" data-input-id="c-attachfile" data-multiple="false"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
||||
<span><button type="button" id="fachoose-attachfile" class="btn btn-primary fachoose" data-input-id="c-attachfile" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-keywords" class="control-label col-xs-12 col-sm-2">{:__('Keywords')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-keywords" data-rule="required" class="form-control" name="row[keywords]" type="text" value="{$row.keywords}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-description" class="control-label col-xs-12 col-sm-2">{:__('Description')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-description" data-rule="required" class="form-control" name="row[description]" type="text" value="{$row.description}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-price" class="control-label col-xs-12 col-sm-2">{:__('Price')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-price" class="form-control" step="0.01" name="row[price]" type="number" value="{$row.price}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-views" class="control-label col-xs-12 col-sm-2">{:__('Views')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-views" class="form-control" name="row[views]" type="number" value="{$row.views}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-startdate" class="control-label col-xs-12 col-sm-2">{:__('Startdate')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-startdate" data-rule="required" class="form-control datetimepicker" data-date-format="YYYY-MM-DD" data-use-current="true" name="row[startdate]" type="text" value="{$row.startdate}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-activitytime" class="control-label col-xs-12 col-sm-2">{:__('Activitytime')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-activitytime" data-rule="required" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[activitytime]" type="text" value="{$row.activitytime}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-year" class="control-label col-xs-12 col-sm-2">{:__('Year')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-year" data-rule="required" class="form-control datetimepicker" data-date-format="YYYY" data-use-current="true" name="row[year]" type="text" value="{$row.year}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-times" class="control-label col-xs-12 col-sm-2">{:__('Times')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-times" data-rule="required" class="form-control datetimepicker" data-date-format="HH:mm:ss" data-use-current="true" name="row[times]" type="text" value="{$row.times}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-refreshtime" class="control-label col-xs-12 col-sm-2">{:__('Refreshtime')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-refreshtime" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[refreshtime]" type="text" value="{$row.refreshtime|datetime}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-weigh" class="control-label col-xs-12 col-sm-2">{:__('Weigh')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-weigh" class="form-control" name="row[weigh]" type="number" value="{$row.weigh}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-status" class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
{foreach name="statusList" item="vo"}
|
||||
<label for="row[status]-{$key}"><input id="row[status]-{$key}" name="row[status]" type="radio" value="{$key}" {in name="key" value="$row.status"}checked{/in} /> {$vo}</label>
|
||||
{/foreach}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-state" class="control-label col-xs-12 col-sm-2">{:__('State')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
{foreach name="stateList" item="vo"}
|
||||
<label for="row[state]-{$key}"><input id="row[state]-{$key}" name="row[state]" type="radio" value="{$key}" {in name="key" value="$row.state"}checked{/in} /> {$vo}</label>
|
||||
{/foreach}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group layer-footer">
|
||||
<label class="control-label col-xs-12 col-sm-2"></label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
|
||||
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
<table class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{:__('Title')}</th>
|
||||
<th>{:__('Content')}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{volist name="row" id="vo" }
|
||||
<tr>
|
||||
<td>{$key}</td>
|
||||
<td>{$vo}</td>
|
||||
</tr>
|
||||
{/volist}
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="hide layer-footer">
|
||||
<label class="control-label col-xs-12 col-sm-2"></label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<button type="reset" class="btn btn-primary btn-embossed btn-close" onclick="Layer.closeAll();">{:__('Close')}</button>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -1,31 +0,0 @@
|
|||
<div class="panel panel-default panel-intro">
|
||||
{:build_heading()}
|
||||
|
||||
<div class="panel-body">
|
||||
<div id="myTabContent" class="tab-content">
|
||||
<div class="tab-pane fade active in" id="one">
|
||||
<div class="widget-body no-padding">
|
||||
<div id="toolbar" class="toolbar">
|
||||
{:build_toolbar('refresh,delete')}
|
||||
<a class="btn btn-info btn-disabled disabled btn-selected" href="javascript:;"><i class="fa fa-leaf"></i> 获取选中项</a>
|
||||
<div class="dropdown btn-group">
|
||||
<a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> <?= __('More') ?></a>
|
||||
<ul class="dropdown-menu text-left" role="menu">
|
||||
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=normal"><i class="fa fa-eye"></i> {:__('Set to normal')}</a></li>
|
||||
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<a class="btn btn-success btn-singlesearch" href="javascript:;"><i class="fa fa-user"></i> 自定义搜索</a>
|
||||
<a class="btn btn-success btn-change btn-start" data-params="action=start" data-url="example/bootstraptable/change" href="javascript:;"><i class="fa fa-play"></i> 启动</a>
|
||||
<a class="btn btn-danger btn-change btn-pause" data-params="action=pause" data-url="example/bootstraptable/change" href="javascript:;"><i class="fa fa-pause"></i> 暂停</a>
|
||||
</div>
|
||||
<table id="table" class="table table-striped table-bordered table-hover" width="100%">
|
||||
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
<div class="panel panel-default panel-intro">
|
||||
{:build_heading()}
|
||||
|
||||
<div class="panel-body">
|
||||
<div id="myTabContent" class="tab-content">
|
||||
<div class="tab-pane fade active in" id="one">
|
||||
<div class="widget-body no-padding">
|
||||
<div id="toolbar" class="toolbar">
|
||||
{:build_toolbar('refresh,delete')}
|
||||
</div>
|
||||
<table id="table" class="table table-striped table-bordered table-hover" width="100%">
|
||||
|
||||
</table>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
<div class="panel panel-default panel-intro">
|
||||
{:build_heading()}
|
||||
|
||||
<div class="panel-body">
|
||||
<div id="myTabContent" class="tab-content">
|
||||
<div class="tab-pane fade active in" id="one">
|
||||
<div class="widget-body no-padding">
|
||||
<div id="toolbar" class="toolbar">
|
||||
{:build_toolbar('refresh,delete')}
|
||||
</div>
|
||||
<table id="table" class="table table-striped table-bordered table-hover" width="100%">
|
||||
|
||||
</table>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -1,160 +0,0 @@
|
|||
<style>#cxselect-example textarea{margin:10px 0;}</style>
|
||||
<div class="panel panel-default panel-intro">
|
||||
{:build_heading()}
|
||||
|
||||
<div class="panel-body">
|
||||
<div id="myTabContent" class="tab-content">
|
||||
<div class="tab-pane fade active in" id="one">
|
||||
<div class="widget-body no-padding" id="cxselect-example">
|
||||
<form id="cxselectform" action="">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading"><b>省市区联动</b>(通过AJAX读取数据)</div>
|
||||
<div class="panel-body">
|
||||
<div class="row">
|
||||
<div class="col-xs-9">
|
||||
<div class="form-inline" data-toggle="cxselect" data-selects="province,city,area">
|
||||
<select class="province form-control" name="province" data-url="ajax/area"></select>
|
||||
<select class="city form-control" name="city" data-url="ajax/area"></select>
|
||||
<select class="area form-control" name="area" data-url="ajax/area"></select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-3 text-right">
|
||||
<h6><label class="label label-primary"><i class="fa fa-pencil"></i> 增加</label></h6>
|
||||
</div>
|
||||
<div class="col-xs-12">
|
||||
<textarea class="form-control" rows="8">
|
||||
</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xs-9">
|
||||
<div class="form-inline" data-toggle="cxselect" data-selects="province,city,area">
|
||||
<select class="province form-control" name="province" data-url="ajax/area">
|
||||
<option value="1964" selected>广东省</option>
|
||||
</select>
|
||||
<select class="city form-control" name="city" data-url="ajax/area">
|
||||
<option value="1988" selected>深圳市</option>
|
||||
</select>
|
||||
<select class="area form-control" name="area" data-url="ajax/area">
|
||||
<option value="1991" selected>南山区</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-3 text-right">
|
||||
<h6><label class="label label-success"><i class="fa fa-edit"></i> 修改</label></h6>
|
||||
</div>
|
||||
<div class="col-xs-12">
|
||||
<textarea class="form-control" rows="8">
|
||||
</textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading"><b>类别联动</b>(Ajax读取数据)</div>
|
||||
<div class="panel-body">
|
||||
<div class="row">
|
||||
<div class="col-xs-9">
|
||||
<div class="form-inline" data-toggle="cxselect" data-selects="first,second">
|
||||
<select class="first form-control" name="first" data-url="ajax/category?type=page&pid=5"></select>
|
||||
<select class="second form-control" name="second" data-url="ajax/category" data-query-name="pid"></select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-3 text-right">
|
||||
<h6><label class="label label-primary"><i class="fa fa-pencil"></i> 增加</label></h6>
|
||||
</div>
|
||||
<div class="col-xs-12">
|
||||
<textarea class="form-control" rows="8">
|
||||
</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xs-9">
|
||||
<div class="form-inline" data-toggle="cxselect" data-selects="first,second">
|
||||
<select class="first form-control" name="first" data-url="ajax/category?type=page&pid=5">
|
||||
<option value="6" selected>网站建站</option>
|
||||
</select>
|
||||
<select class="second form-control" name="second" data-url="ajax/category" data-query-name="pid">
|
||||
<option value="9" selected>移动端</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-3 text-right">
|
||||
<h6><label class="label label-success"><i class="fa fa-edit"></i> 修改</label></h6>
|
||||
</div>
|
||||
<div class="col-xs-12">
|
||||
<textarea class="form-control" rows="8">
|
||||
</textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading"><b>省市区联动</b>(通过JSON渲染数据)</div>
|
||||
<div class="panel-body">
|
||||
<div class="row">
|
||||
<div class="col-xs-9">
|
||||
<!--由于在初始化中修改了默认值,所以这里需要修改-jsonSpace/jsonValue/jsonName的值-->
|
||||
<div class="form-inline" data-toggle="cxselect" data-url="__CDN__/assets/libs/jquery-cxselect/js/cityData.min.json"
|
||||
data-selects="province,city,area" data-json-space="" data-json-name="n" data-json-value="">
|
||||
<select class="province form-control" name="province"></select>
|
||||
<select class="city form-control" name="city"></select>
|
||||
<select class="area form-control" name="area"></select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-3 text-right">
|
||||
<h6><label class="label label-primary"><i class="fa fa-pencil"></i> 增加</label></h6>
|
||||
</div>
|
||||
<div class="col-xs-12">
|
||||
<textarea class="form-control" rows="8">
|
||||
</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xs-9">
|
||||
<!--由于在初始化中修改了默认值,所以这里需要修改-jsonSpace/jsonValue/jsonName的值-->
|
||||
<div class="form-inline" data-toggle="cxselect" data-url="__CDN__/assets/libs/jquery-cxselect/js/cityData.min.json"
|
||||
data-selects="province,city,area" data-json-space="" data-json-name="n" data-json-value="">
|
||||
<select class="province form-control" data-first-title="选择省">
|
||||
<option value="">请选择</option>
|
||||
<option value="浙江省" selected>浙江省</option>
|
||||
</select>
|
||||
<select class="city form-control" data-first-title="选择市">
|
||||
<option value="">请选择</option>
|
||||
<option value="杭州市" selected>杭州市</option>
|
||||
</select>
|
||||
<select class="area form-control" data-first-title="选择地区">
|
||||
<option value="">请选择</option>
|
||||
<option value="西湖区" selected>西湖区</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-3 text-right">
|
||||
<h6><label class="label label-success"><i class="fa fa-edit"></i> 修改</label></h6>
|
||||
</div>
|
||||
<div class="col-xs-12">
|
||||
<textarea class="form-control" rows="8">
|
||||
</textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
<div class="panel panel-default panel-intro">
|
||||
{:build_heading()}
|
||||
|
||||
<div class="panel-body">
|
||||
<div id="myTabContent" class="tab-content">
|
||||
<div class="tab-pane fade active in" id="one">
|
||||
<div class="widget-body no-padding">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div id="toolbar1" class="toolbar">
|
||||
{:build_toolbar()}
|
||||
<div class="dropdown btn-group">
|
||||
<a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> {:__('More')}</a>
|
||||
<ul class="dropdown-menu text-left" role="menu">
|
||||
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=normal"><i class="fa fa-eye"></i> {:__('Set to normal')}</a></li>
|
||||
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<table id="table1" class="table table-striped table-bordered table-hover" width="100%">
|
||||
</table>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div id="toolbar2" class="toolbar">
|
||||
{:build_toolbar()}
|
||||
<div class="dropdown btn-group">
|
||||
<a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> {:__('More')}</a>
|
||||
<ul class="dropdown-menu text-left" role="menu">
|
||||
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=normal"><i class="fa fa-eye"></i> {:__('Set to normal')}</a></li>
|
||||
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<table id="table2" class="table table-striped table-bordered table-hover" width="100%">
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
<div class="panel panel-default panel-intro">
|
||||
{:build_heading()}
|
||||
|
||||
<div class="panel-body">
|
||||
<div id="myTabContent" class="tab-content">
|
||||
<div class="tab-pane fade active in" id="one">
|
||||
<div class="widget-body no-padding">
|
||||
<div id="toolbar" class="toolbar">
|
||||
{:build_toolbar('delete')}
|
||||
</div>
|
||||
<table id="table" class="table table-striped table-bordered table-hover" width="100%">
|
||||
|
||||
</table>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -1,67 +0,0 @@
|
|||
<div class="panel panel-default panel-intro">
|
||||
{:build_heading()}
|
||||
|
||||
<div class="panel-body">
|
||||
<div id="myTabContent" class="tab-content">
|
||||
<div class="tab-pane fade active in" id="one">
|
||||
<div class="widget-body no-padding">
|
||||
<div id="toolbar" class="toolbar">
|
||||
{:build_toolbar('refresh,delete')}
|
||||
<a class="btn btn-info btn-disabled disabled btn-selected" href="javascript:;"><i class="fa fa-leaf"></i> 获取选中项</a>
|
||||
<a class="btn btn-success btn-toggle-view" href="javascript:;"><i class="fa fa-leaf"></i> 切换视图</a>
|
||||
</div>
|
||||
<table id="table" class="table table-striped table-hover" width="100%">
|
||||
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<style type="text/css">
|
||||
.example {
|
||||
height:100%;position: relative;
|
||||
}
|
||||
.example > span {
|
||||
position:absolute;left:15px;top:15px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script id="itemtpl" type="text/html">
|
||||
<!--
|
||||
如果启用了templateView,默认调用的是itemtpl这个模板,可以通过设置templateFormatter来修改
|
||||
在当前模板中可以使用三个变量(item:行数据,i:当前第几行,data:所有的行数据)
|
||||
此模板引擎使用的是art-template的native,可参考官方文档
|
||||
-->
|
||||
|
||||
<div class="col-sm-4 col-md-3">
|
||||
<!--下面四行是为了展示随机图片和标签,可移除-->
|
||||
<% var imagearr = ['https://ws2.sinaimg.cn/large/006tNc79gy1fgphwokqt9j30dw0990tb.jpg', 'https://ws2.sinaimg.cn/large/006tNc79gy1fgphwt8nq8j30e609f3z4.jpg', 'https://ws1.sinaimg.cn/large/006tNc79gy1fgphwn44hvj30go0b5myb.jpg', 'https://ws1.sinaimg.cn/large/006tNc79gy1fgphwnl37mj30dw09agmg.jpg', 'https://ws3.sinaimg.cn/large/006tNc79gy1fgphwqsvh6j30go0b576c.jpg']; %>
|
||||
<% var image = imagearr[item.id % 5]; %>
|
||||
<% var labelarr = ['primary', 'success', 'info', 'danger', 'warning']; %>
|
||||
<% var label = labelarr[item.id % 5]; %>
|
||||
<div class="thumbnail example">
|
||||
<span class="btn btn-<%=label%>">ID:<%=item.id%></span>
|
||||
<img src="<%=image%>" class="img-responsive" alt="<%=item.title%>">
|
||||
<div class="caption">
|
||||
<h4><%=item.title?item.title:'无'%></h4>
|
||||
<p class="text-muted">操作者IP:<%=item.ip%></p>
|
||||
<p class="text-muted">操作时间:<%=Moment(item.createtime*1000).format("YYYY-MM-DD HH:mm:ss")%></p>
|
||||
<p>
|
||||
<!--详情的事件需要在JS中手动绑定-->
|
||||
<a href="#" class="btn btn-primary btn-success btn-detail" data-id="<%=item.id%>"><i class="fa fa-camera"></i> 详情</a>
|
||||
|
||||
<!--如果需要响应编辑或删除事件,可以给元素添加 btn-edit或btn-del的类和data-id这个属性值-->
|
||||
<a href="#" class="btn btn-primary btn-edit" data-id="<%=item.id%>"><i class="fa fa-pencil"></i> 编辑</a>
|
||||
<a href="#" class="btn btn-danger btn-del" data-id="<%=item.id%>"><i class="fa fa-times"></i> 删除</a>
|
||||
<span class="pull-right" style="margin-top:10px;">
|
||||
<!--如果需要多选操作,请确保有下面的checkbox元素存在,可移除-->
|
||||
<input name="checkbox" data-id="<%=item.id%>" type="checkbox" />
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
|
@ -1,52 +0,0 @@
|
|||
<form id="add-form" class="form-horizontal form-ajax" role="form" data-toggle="validator" method="POST" action="">
|
||||
<div class="form-group">
|
||||
<label for="name" class="control-label col-xs-12 col-sm-2">ID:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" class="form-control" id="id" name="row[id]" value="" data-rule="required" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="name" class="control-label col-xs-12 col-sm-2">{:__('Name')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" class="form-control" id="name" name="row[name]" value="" data-rule="required" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="content" class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<dl class="fieldlist" rel="1">
|
||||
<dd>
|
||||
<ins>{:__('Key')}</ins>
|
||||
<ins>{:__('Value')}</ins>
|
||||
</dd>
|
||||
<dd>
|
||||
<input type="text" name="field[0]" class="form-control" id="field-0" value="" size="10" required />
|
||||
<input type="text" name="value[0]" class="form-control" id="value-0" value="" size="40" required />
|
||||
<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>
|
||||
<dd><a href="javascript:;" class="append btn btn-sm btn-success"><i class="fa fa-plus"></i> {:__('Append')}</a></dd>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="weigh" class="control-label col-xs-12 col-sm-2">{:__('Weigh')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" class="form-control" id="weigh" name="row[weigh]" value="0" data-rule="required" size="6" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="content" class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
{:build_radios('row[status]', ['normal'=>__('Normal'), 'hidden'=>__('Hidden')])}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group hidden layer-footer">
|
||||
<label class="control-label col-xs-12 col-sm-2"></label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
|
||||
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
|
@ -1,53 +0,0 @@
|
|||
<form id="edit-form" class="form-horizontal form-ajax" role="form" data-toggle="validator" method="POST" action="">
|
||||
<div class="form-group">
|
||||
<label for="name" class="control-label col-xs-12 col-sm-2">ID:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" class="form-control" id="id" name="row[id]" value="{$row.id}" data-rule="required" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="name" class="control-label col-xs-12 col-sm-2">{:__('Name')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" class="form-control" id="name" name="row[name]" value="{$row.name}" data-rule="required" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="content" class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<dl class="fieldlist" rel="{$row.content|count}">
|
||||
<dd>
|
||||
<ins>{:__('Key')}</ins>
|
||||
<ins>{:__('Value')}</ins>
|
||||
</dd>
|
||||
{foreach $row.content as $key => $vo}
|
||||
<dd class="form-inline">
|
||||
<input type="text" name="field[{$key}]" class="form-control" id="field-{$key}" value="{$key}" size="10" />
|
||||
<input type="text" name="value[{$key}]" class="form-control" id="value-{$key}" value="{$vo}" 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>
|
||||
{/foreach}
|
||||
<dd><a href="javascript:;" class="append btn btn-sm btn-success"><i class="fa fa-plus"></i> {:__('Append')}</a></dd>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="weigh" class="control-label col-xs-12 col-sm-2">{:__('Weigh')}:</label>
|
||||
<div class="col-xs-2">
|
||||
<input type="text" class="form-control" id="weigh" name="row[weigh]" value="{$row.weigh}" data-rule="required" size="6" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="content" class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
{:build_radios('row[status]', ['normal'=>__('Normal'), 'hidden'=>__('Hidden')], $row['status'])}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group hidden layer-footer">
|
||||
<div class="col-xs-2"></div>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
|
||||
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
<div class="panel panel-default panel-intro">
|
||||
{:build_heading()}
|
||||
|
||||
<div class="panel-body">
|
||||
<div id="myTabContent" class="tab-content">
|
||||
<div class="tab-pane fade active in" id="one">
|
||||
<div class="widget-body no-padding">
|
||||
<div id="toolbar" class="toolbar">
|
||||
{:build_toolbar()}
|
||||
<div class="dropdown btn-group">
|
||||
<a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> {:__('More')}</a>
|
||||
<ul class="dropdown-menu text-left" role="menu">
|
||||
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=normal"><i class="fa fa-eye"></i> {:__('Set to normal')}</a></li>
|
||||
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<table id="table" class="table table-striped table-bordered table-hover" width="100%">
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -1,81 +0,0 @@
|
|||
<style type="text/css">
|
||||
#schedulepicker {
|
||||
padding-top:7px;
|
||||
}
|
||||
</style>
|
||||
<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
|
||||
<div class="form-group">
|
||||
<label for="name" class="control-label col-xs-12 col-sm-2">{:__('Title')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" class="form-control" id="title" name="row[title]" value="" data-rule="required" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="name" class="control-label col-xs-12 col-sm-2">{:__('Type')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
{:build_select('row[type]', $typedata, null, ['class'=>'form-control', 'data-rule'=>'required'])}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="content" class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<textarea name="row[content]" id="conent" cols="30" rows="5" class="form-control" data-rule="required"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="schedule" class="control-label col-xs-12 col-sm-2">{:__('Schedule')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" class="form-control" id="schedule" style="font-size:12px;font-family: Verdana;word-spacing:23px;" name="row[schedule]" value="* * * * *" data-rule="required; remote(general/crontab/check_schedule)" />
|
||||
<div id="schedulepicker">
|
||||
<pre><code>* * * * *
|
||||
- - - - -
|
||||
| | | | +--- day of week (0 - 7) (Sunday=0 or 7)
|
||||
| | | +-------- month (1 - 12)
|
||||
| | +------------- day of month (1 - 31)
|
||||
| +------------------ hour (0 - 23)
|
||||
+----------------------- min (0 - 59)</code></pre>
|
||||
<h5>{:__('The next %s times the execution time', '<input type="number" id="pickdays" class="form-control text-center" value="7" style="display: inline-block;width:80px;">')}</h5>
|
||||
<ol id="scheduleresult" class="list-group">
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="maximums" class="control-label col-xs-12 col-sm-2">{:__('Maximums')}:</label>
|
||||
<div class="col-xs-12 col-sm-4">
|
||||
<input type="number" class="form-control" id="maximums" name="row[maximums]" value="0" data-rule="required" size="6" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="begintime" class="control-label col-xs-12 col-sm-2">{:__('Begin time')}:</label>
|
||||
<div class="col-xs-12 col-sm-4">
|
||||
<input type="text" class="form-control datetimepicker" id="begintime" name="row[begintime]" value="" data-rule="{:__('Begin time')}:required" size="6" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="endtime" class="control-label col-xs-12 col-sm-2">{:__('End time')}:</label>
|
||||
<div class="col-xs-12 col-sm-4">
|
||||
<input type="text" class="form-control datetimepicker" id="endtime" name="row[endtime]" value="" data-rule="{:__('End time')}:required;match(gte, row[begintime], datetime)" size="6" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="weigh" class="control-label col-xs-12 col-sm-2">{:__('Weigh')}:</label>
|
||||
<div class="col-xs-12 col-sm-4">
|
||||
<input type="text" class="form-control" id="weigh" name="row[weigh]" value="0" data-rule="required" size="6" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
{:build_radios('row[status]', ['normal'=>__('Normal'), 'hidden'=>__('Hidden')])}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group hide layer-footer">
|
||||
<label class="control-label col-xs-12 col-sm-2"></label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
|
||||
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
|
@ -1,81 +0,0 @@
|
|||
<style type="text/css">
|
||||
#schedulepicker {
|
||||
padding-top:7px;
|
||||
}
|
||||
</style>
|
||||
<form id="edit-form" class="form-horizontal form-ajax" role="form" data-toggle="validator" method="POST" action="">
|
||||
<div class="form-group">
|
||||
<label for="name" class="control-label col-xs-12 col-sm-2">{:__('Title')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" class="form-control" id="title" name="row[title]" value="{$row.title}" data-rule="required" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="name" class="control-label col-xs-12 col-sm-2">{:__('Type')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
{:build_select('row[type]', $typedata, $row['type'], ['class'=>'form-control', 'data-rule'=>'required'])}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="content" class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<textarea name="row[content]" id="conent" cols="30" rows="5" class="form-control" data-rule="required">{$row.content}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="schedule" class="control-label col-xs-12 col-sm-2">{:__('Schedule')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" class="form-control" id="schedule" style="font-size:12px;font-family: Verdana;word-spacing:23px;" name="row[schedule]" value="{$row.schedule}" data-rule="required; remote(general/crontab/check_schedule)" />
|
||||
<div id="schedulepicker">
|
||||
<pre><code>* * * * *
|
||||
- - - - -
|
||||
| | | | +--- day of week (0 - 7) (Sunday=0 or 7)
|
||||
| | | +-------- month (1 - 12)
|
||||
| | +------------- day of month (1 - 31)
|
||||
| +------------------ hour (0 - 23)
|
||||
+----------------------- min (0 - 59)</code></pre>
|
||||
<h5>{:__('The next %s times the execution time', '<input type="number" id="pickdays" class="form-control text-center" value="7" style="display: inline-block;width:80px;">')}</h5>
|
||||
<ol id="scheduleresult" class="list-group">
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="maximums" class="control-label col-xs-12 col-sm-2">{:__('Maximums')}:</label>
|
||||
<div class="col-xs-12 col-sm-4">
|
||||
<input type="number" class="form-control" id="maximums" name="row[maximums]" value="{$row.maximums}" data-rule="required" size="6" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="begintime" class="control-label col-xs-12 col-sm-2">{:__('Begin time')}:</label>
|
||||
<div class="col-xs-12 col-sm-4">
|
||||
<input type="text" class="form-control datetimepicker" id="begintime" name="row[begintime]" value="{$row.begintime|datetime}" data-rule="{:__('Begin time')}:required" size="6" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="endtime" class="control-label col-xs-12 col-sm-2">{:__('End time')}:</label>
|
||||
<div class="col-xs-12 col-sm-4">
|
||||
<input type="text" class="form-control datetimepicker" id="endtime" name="row[endtime]" value="{$row.endtime|datetime}" data-rule="{:__('End time')}:required;match(gte, row[begintime], datetime)" size="6" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="weigh" class="control-label col-xs-12 col-sm-2">{:__('Weigh')}:</label>
|
||||
<div class="col-xs-12 col-sm-4">
|
||||
<input type="text" class="form-control" id="weigh" name="row[weigh]" value="{$row.weigh}" data-rule="required" size="6" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
{:build_radios('row[status]', ['normal'=>__('Normal'), 'hidden'=>__('Hidden')], $row['status'])}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group hide layer-footer">
|
||||
<label class="control-label col-xs-12 col-sm-2"></label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
|
||||
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
<div class="panel panel-default panel-intro">
|
||||
{:build_heading()}
|
||||
|
||||
<div class="panel-body">
|
||||
<div id="myTabContent" class="tab-content">
|
||||
<div class="tab-pane fade active in" id="one">
|
||||
<div class="widget-body no-padding">
|
||||
<div id="toolbar" class="toolbar">
|
||||
{:build_toolbar()}
|
||||
<div class="dropdown btn-group">
|
||||
<a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> {:__('More')}</a>
|
||||
<ul class="dropdown-menu text-left" role="menu">
|
||||
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=normal"><i class="fa fa-eye"></i> {:__('Set to normal')}</a></li>
|
||||
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<table id="table" class="table table-striped table-bordered table-hover" width="100%">
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -1,81 +0,0 @@
|
|||
<style type="text/css">
|
||||
#searchfloat {position:absolute;top:40px;right:20px;background:#F7F0A0;padding:10px;}
|
||||
#saved {position: relative;}
|
||||
#saved_sql {position:absolute;bottom:0;height:300px;background:#F7F0A0;width:100%;overflow:auto;display:none;}
|
||||
#saved_sql li {display:block;clear:both;width:100%;float:left;line-height:18px;padding:1px 0}
|
||||
#saved_sql li a{float:left;text-decoration: none;display:block;padding:0 5px;}
|
||||
#saved_sql li i{display:none;float:left;color:#06f;font-size: 14px;font-style: normal;margin-left:2px;line-height:18px;}
|
||||
#saved_sql li:hover{background:#fff;}
|
||||
#saved_sql li:hover i{display:block;cursor:pointer;}
|
||||
#database #tablename {height:205px;width:100%;padding:5px;}
|
||||
#database #tablename option{height:18px;}
|
||||
#database #subaction {height:210px;width:100%;}
|
||||
#database .select-striped > option:nth-of-type(odd) {background-color: #f9f9f9;}
|
||||
#database .dropdown-menu ul {margin:-3px 0;}
|
||||
#database .dropdown-menu ul li{margin:3px 0;}
|
||||
#database .dropdown-menu.row .col-xs-6{padding:0 5px;}
|
||||
#sqlquery {font-size:12px;color:#444;}
|
||||
#resultparent {padding:5px;}
|
||||
</style>
|
||||
<div class="panel panel-default panel-intro">
|
||||
{:build_heading()}
|
||||
|
||||
<div class="panel-body">
|
||||
<div id="database" class="tab-content">
|
||||
<div class="tab-pane fade active in" id="one">
|
||||
<div class="widget-body no-padding">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-4">
|
||||
<h4>{:__('SQL Result')}:</h4>
|
||||
</div>
|
||||
<div class="col-xs-8 text-right">
|
||||
<form action="{:url('general.database/query')}" method="post" name="infoform" target="resultframe">
|
||||
<input type="hidden" name="do_action" id="topaction" />
|
||||
|
||||
<div class="btn-group">
|
||||
<button data-toggle="dropdown" class="btn btn-primary btn-embossed dropdown-toggle" type="button">{:__('Basic query')} <span class="caret"></span></button>
|
||||
<div class="row dropdown-menu pull-right" style="width:300px;">
|
||||
<div class="col-xs-6">
|
||||
<select class="form-control select-striped" id="tablename" name="tablename[]" multiple="multiple">
|
||||
{foreach $tables as $table}
|
||||
<option value="{$table.name}" title="">{$table.name}<!--({$table.rows})--></option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-xs-6">
|
||||
<ul id="subaction" class="list-unstyled">
|
||||
<li><input type="submit" name="submit1" value="{:__('View structure')}" rel="viewinfo" class="btn btn-primary btn-embossed btn-sm btn-block"/></li>
|
||||
<li><input type="submit" name="submit2" value="{:__('View data')}" rel="viewdata" class="btn btn-primary btn-embossed btn-sm btn-block"/></li>
|
||||
<li><input type="submit" name="submit3" value="{:__('Optimize')}" rel="optimize" class="btn btn-primary btn-embossed btn-sm btn-block" /></li>
|
||||
<li><input type="submit" name="submit4" value="{:__('Repair')}" rel="repair" class="btn btn-primary btn-embossed btn-sm btn-block"/></li>
|
||||
<li><input type="submit" name="submit5" value="{:__('Optimize all')}" rel="optimizeall" class="btn btn-primary btn-embossed btn-sm btn-block" /></li>
|
||||
<li><input type="submit" name="submit6" value="{:__('Repair all')}" rel="repairall" class="btn btn-primary btn-embossed btn-sm btn-block" /></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="well" id="resultparent">
|
||||
<iframe name="resultframe" frameborder="0" id="resultframe" style="height:100%;" width="100%" height="100%"></iframe>
|
||||
</div>
|
||||
<form action="{:url('general.database/query')}" method="post" id="sqlexecute" name="form1" target="resultframe">
|
||||
<input type="hidden" name="do_action" value="doquery" />
|
||||
<div class="form-group">
|
||||
<textarea name="sqlquery" placeholder="{:__('Executes one or multiple queries which are concatenated by a semicolon')}" cols="60" rows="5" class="form-control" id="sqlquery"></textarea>
|
||||
</div>
|
||||
|
||||
<input type="submit" class="btn btn-success btn-embossed" value="{:__('Execute')}" />
|
||||
<input type="reset" class="btn btn-default btn-embossed" value="{:__('Reset')}" />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
<div class="panel panel-default panel-intro">
|
||||
{:build_heading()}
|
||||
|
||||
<div class="panel-body">
|
||||
<div id="myTabContent" class="tab-content">
|
||||
<div class="tab-pane fade active in" id="one">
|
||||
<div class="widget-body no-padding">
|
||||
<div id="toolbar" class="toolbar">
|
||||
{:build_toolbar()}
|
||||
<div class="dropdown btn-group">
|
||||
<a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> {:__('More')}</a>
|
||||
<ul class="dropdown-menu text-left" role="menu">
|
||||
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=normal"><i class="fa fa-eye"></i> {:__('Set to normal')}</a></li>
|
||||
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<table id="table" class="table table-striped table-bordered table-hover" width="100%">
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -6,7 +6,7 @@
|
|||
<style type="text/css">
|
||||
body {
|
||||
color:#999;
|
||||
background:url('http://img.infinitynewtab.com/wallpaper/{:date("Ymd")%4000}.jpg');
|
||||
background:url('{$background}');
|
||||
background-size:cover;
|
||||
}
|
||||
a {
|
||||
|
|
@ -54,16 +54,6 @@
|
|||
}
|
||||
|
||||
</style>
|
||||
<script>
|
||||
//此处为FastAdmin的统计代码,正式使用请移除
|
||||
var _hmt = _hmt || [];
|
||||
(function () {
|
||||
var hm = document.createElement("script");
|
||||
hm.src = "https://hm.baidu.com/hm.js?58347d769d009bcf6074e9a0ab7ba05e";
|
||||
var s = document.getElementsByTagName("script")[0];
|
||||
s.parentNode.insertBefore(hm, s);
|
||||
})();
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
|
|
|
|||
|
|
@ -1,80 +0,0 @@
|
|||
<form id="add-form" class="form-horizontal form-ajax" role="form" data-toggle="validator" method="POST" action="">
|
||||
<div class="form-group">
|
||||
<label for="c-category_id" class="control-label col-xs-12 col-sm-2">{:__('Category')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-category_id" class="form-control selectpage" data-source="category/selectpage" data-params='{"custom[type]":"page"}' name="row[category_id]" type="text" value="" data-rule="required">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-title" class="control-label col-xs-12 col-sm-2">{:__('Title')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-title" class="form-control" name="row[title]" type="text" value="" data-rule="required" >
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-keywords" class="control-label col-xs-12 col-sm-2">{:__('Keywords')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-keywords" class="form-control" name="row[keywords]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-flag" class="control-label col-xs-12 col-sm-2">{:__('Flag')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
{:build_select('row[flag]', ['recommend'=>__('Recommend'), 'index'=>__('Index'), 'hot'=>__('Hot')], null, ['id'=>'c-flag','class'=>'form-control selectpicker','data-rule'=>'required'])}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-image" class="control-label col-xs-12 col-sm-2">{:__('Image')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<div class="form-inline">
|
||||
<input id="c-image" class="form-control" size="50" name="row[image]" type="text" value="" data-rule="required">
|
||||
<span><button id="plupload-image" class="btn btn-danger plupload" data-input-id="c-image" data-preview-id="p-image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
||||
<span><button type="button" id="fachoose-image" class="btn btn-primary fachoose" data-multiple="false" data-input-id="c-image"><i class="fa fa-list-ul"></i> {:__('Choose')}</button></span>
|
||||
<ul class="row list-inline plupload-preview" id="p-image"></ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-content" class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<textarea id="c-content" class="form-control summernote" name="row[content]" cols="50" rows="10"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-icon" class="control-label col-xs-12 col-sm-2">{:__('Icon')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-icon" class="form-control" name="row[icon]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-views" class="control-label col-xs-12 col-sm-2">{:__('Views')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-views" class="form-control" name="row[views]" type="text" value="0">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-comments" class="control-label col-xs-12 col-sm-2">{:__('Comments')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-comments" class="form-control" name="row[comments]" type="number" value="0">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-weigh" class="control-label col-xs-12 col-sm-2">{:__('Weigh')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-weigh" class="form-control" name="row[weigh]" type="number" value="0">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-status" class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
{:build_radios('row[status]', ['normal'=>__('Normal'), 'hidden'=>__('Hidden')])}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group layer-footer">
|
||||
<label class="control-label col-xs-12 col-sm-2"></label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
|
||||
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
|
@ -1,81 +0,0 @@
|
|||
<form id="edit-form" class="form-horizontal form-ajax" role="form" data-toggle="validator" method="POST" action="">
|
||||
|
||||
<div class="form-group">
|
||||
<label for="c-category_id" class="control-label col-xs-12 col-sm-2">{:__('Category')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-category_id" class="form-control selectpage" data-source="category/selectpage" data-params='{"custom[type]":"page"}' name="row[category_id]" type="text" value="{$row.category_id}" data-rule="required">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-title" class="control-label col-xs-12 col-sm-2">{:__('Title')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-title" class="form-control" name="row[title]" type="text" value="{$row.title}" data-rule="required" >
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-keywords" class="control-label col-xs-12 col-sm-2">{:__('Keywords')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-keywords" class="form-control" name="row[keywords]" type="text" value="{$row.keywords}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-flag" class="control-label col-xs-12 col-sm-2">{:__('Flag')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
{:build_select('row[flag]', ['recommend'=>__('Recommend'), 'index'=>__('Index'), 'hot'=>__('Hot')], $row['flag'], ['id'=>'c-flag','class'=>'form-control selectpicker','data-rule'=>'required'])}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-image" class="control-label col-xs-12 col-sm-2">{:__('Image')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<div class="form-inline">
|
||||
<input id="c-image" class="form-control" size="50" name="row[image]" type="text" value="{$row.image}">
|
||||
<span><button type="button" id="plupload-image" class="btn btn-danger plupload" data-multiple="false" data-input-id="c-image" data-preview-id="p-image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
||||
<span><button type="button" id="fachoose-image" class="btn btn-primary fachoose" data-multiple="false" data-input-id="c-image"><i class="fa fa-list-ul"></i> {:__('Choose')}</button></span>
|
||||
<ul class="row list-inline plupload-preview" id="p-image"></ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-content" class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<textarea id="c-content" class="form-control summernote" name="row[content]" cols="50" rows="10">{$row.content}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-icon" class="control-label col-xs-12 col-sm-2">{:__('Icon')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-icon" class="form-control" name="row[icon]" type="text" value="{$row.icon}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-views" class="control-label col-xs-12 col-sm-2">{:__('Views')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-views" class="form-control" name="row[views]" type="number" value="{$row.views}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-comments" class="control-label col-xs-12 col-sm-2">{:__('Comments')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-comments" class="form-control" name="row[comments]" type="number" value="{$row.comments}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-weigh" class="control-label col-xs-12 col-sm-2">{:__('Weigh')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-weigh" class="form-control" name="row[weigh]" type="number" value="{$row.weigh}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-status" class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
{:build_radios('row[status]', ['normal'=>__('Normal'), 'hidden'=>__('Hidden')], $row['status'])}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group hide layer-footer">
|
||||
<label class="control-label col-xs-12 col-sm-2"></label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
|
||||
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
<div class="panel panel-default panel-intro">
|
||||
{:build_heading()}
|
||||
|
||||
<div class="panel-body">
|
||||
<div id="myTabContent" class="tab-content">
|
||||
<div class="tab-pane fade active in" id="one">
|
||||
<div class="widget-body no-padding">
|
||||
<div id="toolbar" class="toolbar">
|
||||
{:build_toolbar()}
|
||||
<div class="dropdown btn-group">
|
||||
<a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> {:__('More')}</a>
|
||||
<ul class="dropdown-menu text-left" role="menu">
|
||||
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=normal"><i class="fa fa-eye"></i> {:__('Set to normal')}</a></li>
|
||||
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<table id="table" class="table table-striped table-bordered table-hover" width="100%">
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -1,64 +0,0 @@
|
|||
<form id="add-form" class="form-horizontal form-ajax" role="form" data-toggle="validator" method="POST" action="">
|
||||
<div class="form-group">
|
||||
<label for="c-user_id" class="control-label col-xs-12 col-sm-2">{:__('User_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[user_id]" value="0" id="c-user_id" class="form-control" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-platform" class="control-label col-xs-12 col-sm-2">{:__('Platform')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
{:build_select("row[{'platform'}]", 'weibo,wechat,qq', "", ['id' => 'c-platform', 'class' => 'form-control selectpicker', 'multiple', 'required'])}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-openid" class="control-label col-xs-12 col-sm-2">{:__('Openid')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[openid]" value="" id="c-openid" class="form-control" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-openname" class="control-label col-xs-12 col-sm-2">{:__('Openname')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[openname]" value="" id="c-openname" class="form-control" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-access_token" class="control-label col-xs-12 col-sm-2">{:__('Access_token')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[access_token]" value="" id="c-access_token" class="form-control" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-refresh_token" class="control-label col-xs-12 col-sm-2">{:__('Refresh_token')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[refresh_token]" value="" id="c-refresh_token" class="form-control" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-expires_in" class="control-label col-xs-12 col-sm-2">{:__('Expires_in')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="number" name="row[expires_in]" value="0" id="c-expires_in" class="form-control " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-logintime" class="control-label col-xs-12 col-sm-2">{:__('Logintime')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="datetime" name="row[logintime]" value="0" id="c-logintime" class="form-control datetimepicker " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-expiretime" class="control-label col-xs-12 col-sm-2">{:__('Expiretime')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="datetime" name="row[expiretime]" value="0" id="c-expiretime" class="form-control datetimepicker " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group hide layer-footer">
|
||||
<label class="control-label col-xs-12 col-sm-2"></label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
|
||||
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
|
@ -1,64 +0,0 @@
|
|||
<form id="edit-form" class="form-horizontal form-ajax" role="form" data-toggle="validator" method="POST" action="">
|
||||
|
||||
<div class="form-group">
|
||||
<label for="c-user_id" class="control-label col-xs-12 col-sm-2">{:__('User_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[user_id]" value="{$row.user_id}" id="c-user_id" class="form-control" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-platform" class="control-label col-xs-12 col-sm-2">{:__('Platform')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
{:build_select("row[platform]", 'weibo,wechat,qq', $row['platform'], ['id' => 'c-platform', 'class' => 'form-control selectpicker', 'multiple', 'required']);}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-openid" class="control-label col-xs-12 col-sm-2">{:__('Openid')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[openid]" value="{$row.openid}" id="c-openid" class="form-control "required />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-openname" class="control-label col-xs-12 col-sm-2">{:__('Openname')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[openname]" value="{$row.openname}" id="c-openname" class="form-control "required />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-access_token" class="control-label col-xs-12 col-sm-2">{:__('Access_token')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[access_token]" value="{$row.access_token}" id="c-access_token" class="form-control "required />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-refresh_token" class="control-label col-xs-12 col-sm-2">{:__('Refresh_token')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[refresh_token]" value="{$row.refresh_token}" id="c-refresh_token" class="form-control "required />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-expires_in" class="control-label col-xs-12 col-sm-2">{:__('Expires_in')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="number" name="row[expires_in]" value="{$row.expires_in}" id="c-expires_in" class="form-control " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-logintime" class="control-label col-xs-12 col-sm-2">{:__('Logintime')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="datetime" name="row[logintime]" value="{$row.logintime|datetime}" id="c-logintime" class="form-control datetimepicker " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-expiretime" class="control-label col-xs-12 col-sm-2">{:__('Expiretime')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="datetime" name="row[expiretime]" value="{$row.expiretime|datetime}" id="c-expiretime" class="form-control datetimepicker " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group hide layer-footer">
|
||||
<label class="control-label col-xs-12 col-sm-2"></label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
|
||||
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
<div class="panel panel-default panel-intro">
|
||||
{:build_heading()}
|
||||
|
||||
<div class="panel-body">
|
||||
<div id="myTabContent" class="tab-content">
|
||||
<div class="tab-pane fade active in" id="one">
|
||||
<div class="widget-body no-padding">
|
||||
<div id="toolbar" class="toolbar">
|
||||
{:build_toolbar()}
|
||||
<div class="dropdown btn-group">
|
||||
<a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> {:__('More')}</a>
|
||||
<ul class="dropdown-menu text-left" role="menu">
|
||||
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=normal"><i class="fa fa-eye"></i> {:__('Set to normal')}</a></li>
|
||||
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<table id="table" class="table table-striped table-bordered table-hover" width="100%">
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -1,193 +0,0 @@
|
|||
<form id="add-form" class="form-horizontal form-ajax" role="form" data-toggle="validator" method="POST" action="">
|
||||
<div class="form-group">
|
||||
<label for="c-partner_id" class="control-label col-xs-12 col-sm-2">{:__('Partner_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[partner_id]" value="" id="c-partner_id" class="form-control "required />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-role_id" class="control-label col-xs-12 col-sm-2">{:__('Role_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[role_id]" value="0" id="c-role_id" class="form-control " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-area_id" class="control-label col-xs-12 col-sm-2">{:__('Area_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[area_id]" value="0" id="c-area_id" class="form-control " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-editor_id" class="control-label col-xs-12 col-sm-2">{:__('Editor_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[editor_id]" value="0" id="c-editor_id" class="form-control " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-editor_id" class="control-label col-xs-12 col-sm-2">{:__('Wx_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[wx_id]" value="" id="c-wx_id" class="form-control" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-level" class="control-label col-xs-12 col-sm-2">{:__('Level')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="number" name="row[level]" value="0" id="c-level" class="form-control " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-star" class="control-label col-xs-12 col-sm-2">{:__('Star')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="number" name="row[star]" value="0" id="c-star" class="form-control " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-username" class="control-label col-xs-12 col-sm-2">{:__('Username')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[username]" value="" id="c-username" class="form-control "required />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-nickname" class="control-label col-xs-12 col-sm-2">{:__('Nickname')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[nickname]" value="" id="c-nickname" class="form-control "required />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-password" class="control-label col-xs-12 col-sm-2">{:__('Password')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[password]" value="" id="c-password" class="form-control "required />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-salt" class="control-label col-xs-12 col-sm-2">{:__('Salt')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[salt]" value="" id="c-salt" class="form-control "required />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-email" class="control-label col-xs-12 col-sm-2">{:__('Email')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[email]" value="" id="c-email" class="form-control " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-mobile" class="control-label col-xs-12 col-sm-2">{:__('Mobile')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[mobile]" value="" id="c-mobile" class="form-control " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-avatar" class="control-label col-xs-12 col-sm-2">{:__('Avatar')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<div class="form-inline">
|
||||
<input type="text" name="row[avatar]" value="" id="c-avatar" class="form-control" required size="50" />
|
||||
<span><button id="plupload-avatar" class="btn btn-danger plupload" data-input-id="c-avatar"><i class="fa fa-upload"></i> {:__("Upload")}</button></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-gender" class="control-label col-xs-12 col-sm-2">{:__('Gender')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="number" name="row[gender]" value="0" id="c-gender" class="form-control " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-birthday" class="control-label col-xs-12 col-sm-2">{:__('Birthday')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[birthday]" value="" id="c-birthday" class="form-control "required />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-score" class="control-label col-xs-12 col-sm-2">{:__('Score')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="number" name="row[score]" value="0" id="c-score" class="form-control " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-feeds" class="control-label col-xs-12 col-sm-2">{:__('Feeds')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="number" name="row[feeds]" value="0" id="c-feeds" class="form-control " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-follows" class="control-label col-xs-12 col-sm-2">{:__('Follows')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="number" name="row[follows]" value="0" id="c-follows" class="form-control " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-fans" class="control-label col-xs-12 col-sm-2">{:__('Fans')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="number" name="row[fans]" value="0" id="c-fans" class="form-control " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-prevtime" class="control-label col-xs-12 col-sm-2">{:__('Prevtime')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="datetime" name="row[prevtime]" value="0" id="c-prevtime" class="form-control datetimepicker " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-loginfailure" class="control-label col-xs-12 col-sm-2">{:__('Loginfailure')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="number" name="row[loginfailure]" value="0" id="c-loginfailure" class="form-control " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-logintime" class="control-label col-xs-12 col-sm-2">{:__('Logintime')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="datetime" name="row[logintime]" value="0" id="c-logintime" class="form-control datetimepicker " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-loginip" class="control-label col-xs-12 col-sm-2">{:__('Loginip')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[loginip]" value="" id="c-loginip" class="form-control "required />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-joinip" class="control-label col-xs-12 col-sm-2">{:__('Joinip')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[joinip]" value="" id="c-joinip" class="form-control "required />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-jointime" class="control-label col-xs-12 col-sm-2">{:__('Jointime')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="datetime" name="row[jointime]" value="0" id="c-jointime" class="form-control datetimepicker " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-address" class="control-label col-xs-12 col-sm-2">{:__('Address')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[address]" value="" id="c-address" class="form-control " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-receiver" class="control-label col-xs-12 col-sm-2">{:__('Receiver')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[receiver]" value="" id="c-receiver" class="form-control " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-token" class="control-label col-xs-12 col-sm-2">{:__('Token')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[token]" value="" id="c-token" class="form-control "required />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
{:build_radios('row[status]', ['normal'=>__('Normal'), 'hidden'=>__('Hidden')])}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group hide layer-footer">
|
||||
<label class="control-label col-xs-12 col-sm-2"></label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
|
||||
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
|
@ -1,187 +0,0 @@
|
|||
<form id="edit-form" class="form-horizontal form-ajax" role="form" data-toggle="validator" method="POST" action="">
|
||||
|
||||
<div class="form-group">
|
||||
<label for="c-partner_id" class="control-label col-xs-12 col-sm-2">{:__('Partner_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[partner_id]" value="{$row.partner_id}" id="c-partner_id" class="form-control "required />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-role_id" class="control-label col-xs-12 col-sm-2">{:__('Role_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[role_id]" value="{$row.role_id}" id="c-role_id" class="form-control " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-area_id" class="control-label col-xs-12 col-sm-2">{:__('Area_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[area_id]" value="{$row.area_id}" id="c-area_id" class="form-control " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-editor_id" class="control-label col-xs-12 col-sm-2">{:__('Editor_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[editor_id]" value="{$row.editor_id}" id="c-editor_id" class="form-control " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-editor_id" class="control-label col-xs-12 col-sm-2">{:__('Wx_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[wx_id]" value="{$row.wx_id}" id="c-wx_id" class="form-control" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-level" class="control-label col-xs-12 col-sm-2">{:__('Level')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="number" name="row[level]" value="{$row.level}" id="c-level" class="form-control " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-star" class="control-label col-xs-12 col-sm-2">{:__('Star')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="number" name="row[star]" value="{$row.star}" id="c-star" class="form-control " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-username" class="control-label col-xs-12 col-sm-2">{:__('Username')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[username]" value="{$row.username}" id="c-username" class="form-control" required />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-nickname" class="control-label col-xs-12 col-sm-2">{:__('Nickname')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[nickname]" value="{$row.nickname}" id="c-nickname" class="form-control" required />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-password" class="control-label col-xs-12 col-sm-2">{:__('Password')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[password]" value="{$row.password}" id="c-password" class="form-control" required />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-salt" class="control-label col-xs-12 col-sm-2">{:__('Salt')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[salt]" value="{$row.salt}" id="c-salt" class="form-control" required />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-email" class="control-label col-xs-12 col-sm-2">{:__('Email')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[email]" value="{$row.email}" id="c-email" class="form-control" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-mobile" class="control-label col-xs-12 col-sm-2">{:__('Mobile')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[mobile]" value="{$row.mobile}" id="c-mobile" class="form-control" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-avatar" class="control-label col-xs-12 col-sm-2">{:__('Avatar')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<div class="form-inline">
|
||||
<input type="text" name="row[avatar]" value="{$row.avatar}" id="c-avatar" class="form-control" required size="50" />
|
||||
<span><button id="plupload-avatar" class="btn btn-danger plupload" data-input-id="c-avatar"><i class="fa fa-upload"></i> {:__("Upload")}</button></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-gender" class="control-label col-xs-12 col-sm-2">{:__('Gender')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="number" name="row[gender]" value="{$row.gender}" id="c-gender" class="form-control " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-birthday" class="control-label col-xs-12 col-sm-2">{:__('Birthday')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[birthday]" value="{$row.birthday}" id="c-birthday" class="form-control" required />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-score" class="control-label col-xs-12 col-sm-2">{:__('Score')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="number" name="row[score]" value="{$row.score}" id="c-score" class="form-control " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-feeds" class="control-label col-xs-12 col-sm-2">{:__('Feeds')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="number" name="row[feeds]" value="{$row.feeds}" id="c-feeds" class="form-control " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-follows" class="control-label col-xs-12 col-sm-2">{:__('Follows')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="number" name="row[follows]" value="{$row.follows}" id="c-follows" class="form-control " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-fans" class="control-label col-xs-12 col-sm-2">{:__('Fans')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="number" name="row[fans]" value="{$row.fans}" id="c-fans" class="form-control " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-loginfailure" class="control-label col-xs-12 col-sm-2">{:__('Loginfailure')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="number" name="row[loginfailure]" value="{$row.loginfailure}" id="c-loginfailure" class="form-control " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-logintime" class="control-label col-xs-12 col-sm-2">{:__('Logintime')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="datetime" name="row[logintime]" value="{$row.logintime|datetime}" id="c-logintime" class="form-control datetimepicker " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-loginip" class="control-label col-xs-12 col-sm-2">{:__('Loginip')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[loginip]" value="{$row.loginip}" id="c-loginip" class="form-control" required />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-joinip" class="control-label col-xs-12 col-sm-2">{:__('Joinip')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[joinip]" value="{$row.joinip}" id="c-joinip" class="form-control" required />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-jointime" class="control-label col-xs-12 col-sm-2">{:__('Jointime')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="datetime" name="row[jointime]" value="{$row.jointime|datetime}" id="c-jointime" class="form-control datetimepicker " />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-address" class="control-label col-xs-12 col-sm-2">{:__('Address')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[address]" value="{$row.address}" id="c-address" class="form-control" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-receiver" class="control-label col-xs-12 col-sm-2">{:__('Receiver')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[receiver]" value="{$row.receiver}" id="c-receiver" class="form-control" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-token" class="control-label col-xs-12 col-sm-2">{:__('Token')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[token]" value="{$row.token}" id="c-token" class="form-control" required />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
{:build_radios('row[status]', ['normal'=>__('Normal'), 'hidden'=>__('Hidden')], $row['status'])}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group hide layer-footer">
|
||||
<label class="control-label col-xs-12 col-sm-2"></label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
|
||||
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
<div class="panel panel-default panel-intro">
|
||||
{:build_heading()}
|
||||
|
||||
<div class="panel-body">
|
||||
<div id="myTabContent" class="tab-content">
|
||||
<div class="tab-pane fade active in" id="one">
|
||||
<div class="widget-body no-padding">
|
||||
<div id="toolbar" class="toolbar">
|
||||
{build_toolbar()}
|
||||
<div class="dropdown btn-group">
|
||||
<a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> {:__('More')}</a>
|
||||
<ul class="dropdown-menu text-left" role="menu">
|
||||
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=normal"><i class="fa fa-eye"></i> {:__('Set to normal')}</a></li>
|
||||
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<table id="table" class="table table-striped table-bordered table-hover" width="100%">
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -1,64 +0,0 @@
|
|||
<style>
|
||||
.content {
|
||||
padding-bottom:50px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<form id="add-form" class="form-horizontal form-ajax" role="form" data-toggle="validator" method="POST" action="">
|
||||
|
||||
<div class="form-group">
|
||||
<label for="c-oldversion" class="control-label col-xs-12 col-sm-2">{:__('Oldversion')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-oldversion" class="form-control" name="row[oldversion]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-newversion" class="control-label col-xs-12 col-sm-2">{:__('Newversion')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-newversion" class="form-control" name="row[newversion]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-packagesize" class="control-label col-xs-12 col-sm-2">{:__('Packagesize')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-packagesize" class="form-control" name="row[packagesize]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-content" class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<textarea id="c-content" class="form-control" name="row[content]"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-downloadurl" class="control-label col-xs-12 col-sm-2">{:__('Downloadurl')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-downloadurl" class="form-control" name="row[downloadurl]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-enforce" class="control-label col-xs-12 col-sm-2">{:__('Enforce')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
{:build_radios('row[enforce]', [1=>__('Yes'), 0=>__('No')], 1)}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-weigh" class="control-label col-xs-12 col-sm-2">{:__('Weigh')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-weigh" class="form-control" name="row[weigh]" type="number" value="0">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-status" class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
{:build_radios('row[status]', ['normal'=>__('Normal'), 'hidden'=>__('Hidden')])}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group layer-footer">
|
||||
<label class="control-label col-xs-12 col-sm-2"></label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
|
||||
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
|
@ -1,58 +0,0 @@
|
|||
<form id="edit-form" class="form-horizontal form-ajax" role="form" data-toggle="validator" method="POST" action="">
|
||||
|
||||
<div class="form-group">
|
||||
<label for="c-oldversion" class="control-label col-xs-12 col-sm-2">{:__('Oldversion')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-oldversion" class="form-control" name="row[oldversion]" type="text" value="{$row.oldversion}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-newversion" class="control-label col-xs-12 col-sm-2">{:__('Newversion')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-newversion" class="form-control" name="row[newversion]" type="text" value="{$row.newversion}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-packagesize" class="control-label col-xs-12 col-sm-2">{:__('Packagesize')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-packagesize" class="form-control" name="row[packagesize]" type="text" value="{$row.packagesize}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-content" class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<textarea id="c-content" class="form-control" name="row[content]">{$row.content}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-downloadurl" class="control-label col-xs-12 col-sm-2">{:__('Downloadurl')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-downloadurl" class="form-control" name="row[downloadurl]" type="text" value="{$row.downloadurl}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-enforce" class="control-label col-xs-12 col-sm-2">{:__('Enforce')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
{:build_radios('row[enforce]', [1=>__('Yes'), 0=>__('No')], $row['enforce'])}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-weigh" class="control-label col-xs-12 col-sm-2">{:__('Weigh')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-weigh" class="form-control" name="row[weigh]" type="number" value="{$row.weigh}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-status" class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
{:build_radios('row[status]', ['normal'=>__('Normal'), 'hidden'=>__('Hidden')], $row['status'])}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group hide layer-footer">
|
||||
<label class="control-label col-xs-12 col-sm-2"></label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
|
||||
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
<div class="panel panel-default panel-intro">
|
||||
{:build_heading()}
|
||||
|
||||
<div class="panel-body">
|
||||
<div id="myTabContent" class="tab-content">
|
||||
<div class="tab-pane fade active in" id="one">
|
||||
<div class="widget-body no-padding">
|
||||
<div id="toolbar" class="toolbar">
|
||||
{:build_toolbar()}
|
||||
<div class="dropdown btn-group">
|
||||
<a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> {:__('More')}</a>
|
||||
<ul class="dropdown-menu text-left" role="menu">
|
||||
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=normal"><i class="fa fa-eye"></i> {:__('Set to normal')}</a></li>
|
||||
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<table id="table" class="table table-striped table-bordered table-hover" width="100%">
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -1,51 +0,0 @@
|
|||
<link href="{:$site['cdnurl']}/assets/css/wechat/menu.css?v={:$site['version']}" rel="stylesheet">
|
||||
<style>
|
||||
.clickbox {margin:0;text-align: left;}
|
||||
.create-click {
|
||||
margin-left:0;
|
||||
}
|
||||
</style>
|
||||
<form id="add-form" class="form-horizontal form-ajax" role="form" data-toggle="validator" method="POST" action="">
|
||||
<div class="form-group">
|
||||
<label for="c-title" class="control-label col-xs-12 col-sm-2">{:__('Title')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[title]" value="" id="c-title" class="form-control" data-rule="required" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-text" class="control-label col-xs-12 col-sm-2">{:__('Text')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[text]" value="" id="c-text" class="form-control" data-rule="required; remote(wechat/autoreply/check_text_unique)" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-content" class="control-label col-xs-12 col-sm-2">{:__('Event key')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="hidden" name="row[eventkey]" id="c-eventkey" class="form-control" value="" data-rule="required" readonly />
|
||||
<div class="clickbox">
|
||||
<span class="create-click"><a href="{:url('wechat.response/select')}" id="select-resources"><i class="weixin-icon big-add-gray"></i><strong>选择现有资源</strong></a></span>
|
||||
<span class="create-click"><a href="{:url('wechat.response/add')}" id="add-resources"><i class="weixin-icon big-add-gray"></i><strong>添加新资源</strong></a></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-remark" class="control-label col-xs-12 col-sm-2">{:__('Remark')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[remark]" value="" id="c-remark" class="form-control" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
{:build_radios('row[status]', ['normal'=>__('Normal'), 'hidden'=>__('Hidden')])}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group hide layer-footer">
|
||||
<label class="control-label col-xs-12 col-sm-2"></label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
|
||||
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
|
@ -1,51 +0,0 @@
|
|||
<link href="{:$site['cdnurl'] ?>/assets/css/wechat/menu.css?v={$site.version}" rel="stylesheet">
|
||||
<style>
|
||||
.clickbox {margin:0;text-align: left;}
|
||||
.create-click {
|
||||
margin-left:0;
|
||||
}
|
||||
</style>
|
||||
<form id="edit-form" class="form-horizontal form-ajax" role="form" data-toggle="validator" method="POST" action="">
|
||||
|
||||
<div class="form-group">
|
||||
<label for="c-title" class="control-label col-xs-12 col-sm-2">{:__('Title')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[title]" value="{$row.title}" id="c-title" class="form-control" data-rule="required" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-text" class="control-label col-xs-12 col-sm-2">{:__('Text')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[text]" value="{$row.text}" id="c-text" class="form-control" data-rule="required; remote(wechat/autoreply/check_text_unique, except={$row.text})" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-content" class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<div class="clickbox">
|
||||
<input type="hidden" name="row[eventkey]" id="c-eventkey" class="form-control" value="{$row.eventkey}" data-rule="required" readonly />
|
||||
<span class="create-click"><a href="{:url('wechat.response/select')}" id="select-resources"><i class="weixin-icon big-add-gray"></i><strong>选择现有资源</strong></a><div class="keytitle">资源名:{:$response['title'] ?></div></span>
|
||||
<span class="create-click"><a href="{:url('wechat.response/add')}" id="add-resources"><i class="weixin-icon big-add-gray"></i><strong>添加新资源</strong></a></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-remark" class="control-label col-xs-12 col-sm-2">{:__('Remark')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" name="row[remark]" value="{$row.remark}" id="c-remark" class="form-control" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
{:build_radios('row[status]', ['normal'=>__('Normal'), 'hidden'=>__('Hidden')], $row['status'])}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group hide layer-footer">
|
||||
<label class="control-label col-xs-12 col-sm-2"></label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
|
||||
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
<div class="panel panel-default panel-intro">
|
||||
{:build_heading()}
|
||||
|
||||
<div class="panel-body">
|
||||
<div id="myTabContent" class="tab-content">
|
||||
<div class="tab-pane fade active in" id="one">
|
||||
<div class="widget-body no-padding">
|
||||
<div id="toolbar" class="toolbar">
|
||||
{:build_toolbar()}
|
||||
<div class="dropdown btn-group">
|
||||
<a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> <?= __('More') ?></a>
|
||||
<ul class="dropdown-menu text-left" role="menu">
|
||||
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=normal"><i class="fa fa-eye"></i> {:__('Set to normal')}</a></li>
|
||||
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<table id="table" class="table table-striped table-bordered table-hover" width="100%">
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -1,45 +0,0 @@
|
|||
<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
|
||||
<input type="hidden" name="row[mode]" value="textarea" />
|
||||
<div class="form-group">
|
||||
<label for="c-name" class="control-label col-xs-12 col-sm-2">{:__('Name')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-name" data-rule="required" class="form-control" name="row[name]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-title" class="control-label col-xs-12 col-sm-2">{:__('Title')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-title" data-rule="required" class="form-control" name="row[title]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-value" class="control-label col-xs-12 col-sm-2">{:__('Value')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<p>
|
||||
<a href="javascript:;" class="btn btn-info btn-jsoneditor"><i class="fa fa-pencil"></i> {:__('Json editor')}</a>
|
||||
<a href="javascript:;" class="btn btn-primary btn-insertlink"><i class="fa fa-link"></i> {:__('Insert link')}</a>
|
||||
</p>
|
||||
<textarea id="c-value" class="form-control " rows="15" name="row[value]"></textarea>
|
||||
<dl class="fieldlist hide" rel="1">
|
||||
<dd>
|
||||
<ins>{:__('Json key')}</ins>
|
||||
<ins>{:__('Json value')}</ins>
|
||||
</dd>
|
||||
<dd>
|
||||
<input type="text" name="field[0]" class="form-control" id="field-0" value="" size="10" required />
|
||||
<input type="text" name="value[0]" class="form-control" id="value-0" value="" size="40" required />
|
||||
<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>
|
||||
<dd><a href="javascript:;" class="append btn btn-sm btn-success"><i class="fa fa-plus"></i> {:__('Append')}</a></dd>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group hide layer-footer">
|
||||
<label class="control-label col-xs-12 col-sm-2"></label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
|
||||
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
|
@ -1,47 +0,0 @@
|
|||
<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
|
||||
<input type="hidden" name="row[mode]" value="textarea" />
|
||||
<div class="form-group">
|
||||
<label for="c-name" class="control-label col-xs-12 col-sm-2">{:__('Name')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-name" data-rule="required" class="form-control" name="row[name]" type="text" value="{$row.name}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-title" class="control-label col-xs-12 col-sm-2">{:__('Title')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-title" data-rule="required" class="form-control" name="row[title]" type="text" value="{$row.title}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-value" class="control-label col-xs-12 col-sm-2">{:__('Value')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<p>
|
||||
<a href="javascript:;" class="btn btn-info btn-jsoneditor"><i class="fa fa-pencil"></i> {:__('Json editor')}</a>
|
||||
<a href="javascript:;" class="btn btn-primary btn-insertlink"><i class="fa fa-link"></i> {:__('Insert link')}</a>
|
||||
</p>
|
||||
<textarea id="c-value" class="form-control " rows="15" name="row[value]">{$row.value}</textarea>
|
||||
<dl class="fieldlist hide" rel="{$value|count}">
|
||||
<dd>
|
||||
<ins>{:__('Json key')}</ins>
|
||||
<ins>{:__('Json value')}</ins>
|
||||
</dd>
|
||||
{foreach $value as $key => $vo}
|
||||
<dd class="form-inline">
|
||||
<input type="text" name="field[{$key}]" class="form-control" id="field-{$key}" value="{$key}" size="10" />
|
||||
<input type="text" name="value[{$key}]" class="form-control" id="value-{$key}" value="{:is_array($vo)?'':$vo}" 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>
|
||||
{/foreach}
|
||||
<dd><a href="javascript:;" class="append btn btn-sm btn-success"><i class="fa fa-plus"></i> {:__('Append')}</a></dd>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group hide layer-footer">
|
||||
<label class="control-label col-xs-12 col-sm-2"></label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
|
||||
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
<div class="panel panel-default panel-intro">
|
||||
{:build_heading()}
|
||||
|
||||
<div class="panel-body">
|
||||
<div id="myTabContent" class="tab-content">
|
||||
<div class="tab-pane fade active in" id="one">
|
||||
<div class="widget-body no-padding">
|
||||
<div id="toolbar" class="toolbar">
|
||||
{:build_toolbar()}
|
||||
<div class="dropdown btn-group">
|
||||
<a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> {:__('More')}</a>
|
||||
<ul class="dropdown-menu text-left" role="menu">
|
||||
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=normal"><i class="fa fa-eye"></i> {:__('Set to normal')}</a></li>
|
||||
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<table id="table" class="table table-striped table-bordered table-hover" width="100%">
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -1,84 +0,0 @@
|
|||
<link href="__CDN__/assets/css/wechat/menu.css?v={$site['version']}" rel="stylesheet">
|
||||
<div class="panel panel-default panel-intro">
|
||||
{:build_heading()}
|
||||
|
||||
<div class="panel-body">
|
||||
<div id="myTabContent" class="tab-content">
|
||||
<div class="tab-pane fade active in" id="one">
|
||||
<div class="widget-body no-padding">
|
||||
<div class="weixin-menu-setting clearfix">
|
||||
<div class="mobile-menu-preview">
|
||||
<div class="mobile-head-title">{$site.name}</div>
|
||||
<ul class="menu-list" id="menu-list">
|
||||
<li class="add-item extra" id="add-item">
|
||||
<a href="javascript:;" class="menu-link" title="添加菜单"><i class="weixin-icon add-gray"></i></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="weixin-body">
|
||||
<div class="weixin-content" style="display:none">
|
||||
<div class="item-info">
|
||||
<form id="form-item" class="form-item" data-value="" >
|
||||
<div class="item-head">
|
||||
<h4 id="current-item-name">添加子菜单</h4>
|
||||
<div class="item-delete"><a href="javascript:;" id="item_delete">删除菜单</a></div>
|
||||
</div>
|
||||
<div style="margin-top: 20px;">
|
||||
<dl>
|
||||
<dt id="current-item-option"><span class="is-sub-item">子</span>菜单标题:</dt>
|
||||
<dd><div class="input-box"><input id="item_title" name="item-title" type="text" value=""></div></dd>
|
||||
</dl>
|
||||
<dl class="is-item">
|
||||
<dt id="current-item-type"><span class="is-sub-item">子</span>菜单内容:</dt>
|
||||
<dd>
|
||||
<input id="type1" type="radio" name="type" value="click"><label for="type1" data-editing="1"><span class="lbl_content">发送消息</span></label>
|
||||
<input id="type2" type="radio" name="type" value="view" ><label for="type2" data-editing="1"><span class="lbl_content">跳转网页</span></label>
|
||||
<input id="type3" type="radio" name="type" value="scancode_push"><label for="type3" data-editing="1"><span class="lbl_content">扫码推</span></label>
|
||||
<input id="type4" type="radio" name="type" value="scancode_waitmsg"><label for="type4" data-editing="1"><span class="lbl_content">扫码推提示框</span></label>
|
||||
<input id="type5" type="radio" name="type" value="pic_sysphoto"><label for="type5" data-editing="1"><span class="lbl_content">拍照发图</span></label>
|
||||
<input id="type6" type="radio" name="type" value="pic_photo_or_album"><label for="type6" data-editing="1"><span class="lbl_content">拍照相册发图</span></label>
|
||||
<input id="type7" type="radio" name="type" value="pic_weixin"><label for="type7" data-editing="1"><span class="lbl_content">相册发图</span></label>
|
||||
<input id="type8" type="radio" name="type" value="location_select"><label for="type8" data-editing="1"><span class="lbl_content">地理位置选择</span></label>
|
||||
</dd>
|
||||
</dl>
|
||||
<div id="menu-content" class="is-item">
|
||||
<div class="viewbox is-view">
|
||||
<p class="menu-content-tips">点击该<span class="is-sub-item">子</span>菜单会跳到以下链接</p>
|
||||
<dl>
|
||||
<dt>页面地址:</dt>
|
||||
<dd><div class="input-box"><input type="text" id="url" name="url"></div>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
<div class="clickbox is-click" style="display: none;">
|
||||
<input type="hidden" name="key" id="key" value="" />
|
||||
<span class="create-click"><a href="{:url('wechat.response/select')}" id="select-resources"><i class="weixin-icon big-add-gray"></i><strong>选择现有资源</strong></a></span>
|
||||
<span class="create-click"><a href="{:url('wechat.response/add')}" id="add-resources"><i class="weixin-icon big-add-gray"></i><strong>添加新资源</strong></a></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="no-weixin-content">
|
||||
点击左侧菜单进行编辑操作
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xs-4 text-center text-danger">
|
||||
<i class="fa fa-lightbulb-o"></i> <small>可直接拖动菜单排序</small>
|
||||
</div>
|
||||
<div class="col-xs-8 text-center"><a href="javascript:;" id="menuSyn" class="btn btn-danger">保存并发布</a></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var menu = {:json_encode($menu, JSON_UNESCAPED_UNICODE)};
|
||||
var responselist = {:json_encode($responselist, JSON_UNESCAPED_UNICODE)};
|
||||
</script>
|
||||
|
|
@ -1,48 +0,0 @@
|
|||
<form id="add-form" class="form-horizontal form-ajax" role="form" data-toggle="validator" method="POST" action="">
|
||||
<div class="form-group">
|
||||
<label for="module" class="control-label col-xs-12 col-sm-2">{:__('Resource title')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" class="form-control" id="title" name="row[title]" value="" data-rule="required" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="remark" class="control-label col-xs-12 col-sm-2">{:__('Memo')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<textarea class="form-control" id="remark" name="row[remark]"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="content" class="control-label col-xs-12 col-sm-2">{:__('Type')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="radio" name="row[type]" value="text" id="type-text" checked />
|
||||
<label for="type-text">{:__('Text')}</label>
|
||||
<input type="radio" name="row[type]" value="app" id="type-app" />
|
||||
<label for="type-app">{:__('App')}</label>
|
||||
</div>
|
||||
</div>
|
||||
<div id="expand">
|
||||
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="status" class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
{:build_radios('row[status]', ['normal'=>__('Normal'), 'hidden'=>__('Hidden')])}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group {:input('get.callback')?'':'hidden layer-footer'}">
|
||||
<div class="col-xs-2"></div>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
|
||||
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
|
||||
</div>
|
||||
</div>
|
||||
<select name="applist" disabled="true" class="hidden">
|
||||
{foreach $applist as $k => $v}
|
||||
<option value="{$k}">{$v.name}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</form>
|
||||
<script>
|
||||
var apps = {:json_encode($applist)};
|
||||
var datas = {};
|
||||
</script>
|
||||
|
|
@ -1,52 +0,0 @@
|
|||
<form id="edit-form" class="form-horizontal form-ajax" role="form" data-toggle="validator" method="POST" action="">
|
||||
|
||||
<div class="form-group">
|
||||
<label for="module" class="control-label col-xs-12 col-sm-2">{:__('Resource title')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" class="form-control" id="title" name="row[title]" value="{$row.title}" data-rule="required" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="controller" class="control-label col-xs-12 col-sm-2">{:__('Event key')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type='text' class="form-control" id="eventkey" name="row[eventkey]" value="{$row.eventkey}" data-rule="required" readonly />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="remark" class="control-label col-xs-12 col-sm-2">{:__('Memo')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<textarea class="form-control" id="remark" name="row[remark]">{$row.remark}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="content" class="control-label col-xs-12 col-sm-2">{:__('Type')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
{:build_radios('row[type]', ['text' => __('Text'), 'app' => __('App')], $row['type'])}
|
||||
</div>
|
||||
</div>
|
||||
<div id="expand">
|
||||
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-xs-2"></div>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
{:build_radios('row[status]', ['normal'=>__('Normal'), 'hidden'=>__('Hidden')], $row['status'])}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group hidden layer-footer">
|
||||
<div class="col-xs-2"></div>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
|
||||
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
|
||||
</div>
|
||||
</div>
|
||||
<select name="applist" disabled="true" class="hidden">
|
||||
{foreach $applist as $k => $v}
|
||||
<option value="{$k}">{$v.name}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</form>
|
||||
<script>
|
||||
var apps = {:json_encode($applist)};
|
||||
var datas = {$row.content};
|
||||
</script>
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
<div class="panel panel-default panel-intro">
|
||||
{:build_heading()}
|
||||
|
||||
<div class="panel-body">
|
||||
<div id="myTabContent" class="tab-content">
|
||||
<div class="tab-pane fade active in" id="one">
|
||||
<div class="widget-body no-padding">
|
||||
<div id="toolbar" class="toolbar">
|
||||
{:build_toolbar();}
|
||||
</div>
|
||||
<table id="table" class="table table-bordered table-hover" width="100%">
|
||||
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue