Browse Source

新增插件功能
新增后台版本检测功能
新增插件命令行操作
新增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功能
移除前台冗余的控制器和类

Karson 7 years ago
parent
commit
0cb5862736
100 changed files with 1132 additions and 4283 deletions
  1. 2 1
      README.md
  2. 226 0
      application/admin/command/Addon.php
  3. 45 0
      application/admin/command/Addon/stubs/addon.stub
  4. 40 0
      application/admin/command/Addon/stubs/config.stub
  5. 7 0
      application/admin/command/Addon/stubs/info.stub
  6. 29 6
      application/admin/command/Crud.php
  7. 15 233
      application/admin/command/Install/fastadmin.sql
  8. 6 6
      application/admin/command/Menu.php
  9. 4 4
      application/admin/command/Min.php
  10. 84 0
      application/admin/common.php
  11. 293 0
      application/admin/controller/Addon.php
  12. 15 39
      application/admin/controller/Ajax.php
  13. 2 2
      application/admin/controller/Category.php
  14. 5 9
      application/admin/controller/Index.php
  15. 0 51
      application/admin/controller/Page.php
  16. 0 27
      application/admin/controller/User.php
  17. 0 26
      application/admin/controller/Version.php
  18. 7 13
      application/admin/controller/auth/Admin.php
  19. 6 8
      application/admin/controller/auth/Adminlog.php
  20. 16 30
      application/admin/controller/auth/Group.php
  21. 8 16
      application/admin/controller/auth/Rule.php
  22. 0 70
      application/admin/controller/example/Bootstraptable.php
  23. 0 24
      application/admin/controller/example/Colorbadge.php
  24. 0 24
      application/admin/controller/example/Controllerjump.php
  25. 0 23
      application/admin/controller/example/Cxselect.php
  26. 0 33
      application/admin/controller/example/Multitable.php
  27. 0 52
      application/admin/controller/example/Relationmodel.php
  28. 0 60
      application/admin/controller/example/Tabletemplate.php
  29. 15 1
      application/admin/controller/general/Attachment.php
  30. 10 23
      application/admin/controller/general/Config.php
  31. 0 100
      application/admin/controller/general/Crontab.php
  32. 0 211
      application/admin/controller/general/Database.php
  33. 2 2
      application/admin/controller/general/Profile.php
  34. 0 74
      application/admin/controller/wechat/Autoreply.php
  35. 0 164
      application/admin/controller/wechat/Config.php
  36. 0 111
      application/admin/controller/wechat/Menu.php
  37. 0 86
      application/admin/controller/wechat/Response.php
  38. 9 0
      application/admin/lang/zh-cn/addon.php
  39. 0 16
      application/admin/lang/zh-cn/general/crontab.php
  40. 0 30
      application/admin/lang/zh-cn/general/database.php
  41. 4 0
      application/admin/lang/zh-cn/index.php
  42. 0 17
      application/admin/lang/zh-cn/page.php
  43. 0 15
      application/admin/lang/zh-cn/version.php
  44. 0 8
      application/admin/lang/zh-cn/wechat/autoreply.php
  45. 0 10
      application/admin/lang/zh-cn/wechat/config.php
  46. 0 8
      application/admin/lang/zh-cn/wechat/response.php
  47. 4 11
      application/admin/library/Auth.php
  48. 0 55
      application/admin/model/Config.php
  49. 0 203
      application/admin/view/add.html
  50. 22 0
      application/admin/view/addon/add.html
  51. 102 0
      application/admin/view/addon/config.html
  52. 120 0
      application/admin/view/addon/index.html
  53. 1 1
      application/admin/view/auth/admin/index.html
  54. 1 1
      application/admin/view/auth/group/add.html
  55. 1 1
      application/admin/view/auth/group/edit.html
  56. 1 1
      application/admin/view/auth/group/index.html
  57. 8 8
      application/admin/view/category/add.html
  58. 8 8
      application/admin/view/category/edit.html
  59. 9 19
      application/admin/view/common/header.html
  60. 4 0
      application/admin/view/common/menu.html
  61. 0 203
      application/admin/view/edit.html
  62. 0 22
      application/admin/view/example/bootstraptable/detail.html
  63. 0 31
      application/admin/view/example/bootstraptable/index.html
  64. 0 21
      application/admin/view/example/colorbadge/index.html
  65. 0 21
      application/admin/view/example/controllerjump/index.html
  66. 0 160
      application/admin/view/example/cxselect/index.html
  67. 0 43
      application/admin/view/example/multitable/index.html
  68. 0 21
      application/admin/view/example/relationmodel/index.html
  69. 0 67
      application/admin/view/example/tabletemplate/index.html
  70. 0 52
      application/admin/view/general/configvalue/add.html
  71. 0 53
      application/admin/view/general/configvalue/edit.html
  72. 0 25
      application/admin/view/general/configvalue/index.html
  73. 0 81
      application/admin/view/general/crontab/add.html
  74. 0 81
      application/admin/view/general/crontab/edit.html
  75. 0 25
      application/admin/view/general/crontab/index.html
  76. 0 81
      application/admin/view/general/database/index.html
  77. 0 25
      application/admin/view/index.html
  78. 1 11
      application/admin/view/index/login.html
  79. 0 80
      application/admin/view/page/add.html
  80. 0 81
      application/admin/view/page/edit.html
  81. 0 25
      application/admin/view/page/index.html
  82. 0 64
      application/admin/view/user/third/add.phtml
  83. 0 64
      application/admin/view/user/third/edit.phtml
  84. 0 25
      application/admin/view/user/third/index.phtml
  85. 0 193
      application/admin/view/user/user/add.phtml
  86. 0 187
      application/admin/view/user/user/edit.phtml
  87. 0 25
      application/admin/view/user/user/index.phtml
  88. 0 64
      application/admin/view/version/add.html
  89. 0 58
      application/admin/view/version/edit.html
  90. 0 25
      application/admin/view/version/index.html
  91. 0 51
      application/admin/view/wechat/autoreply/add.html
  92. 0 51
      application/admin/view/wechat/autoreply/edit.html
  93. 0 25
      application/admin/view/wechat/autoreply/index.html
  94. 0 45
      application/admin/view/wechat/config/add.html
  95. 0 47
      application/admin/view/wechat/config/edit.html
  96. 0 25
      application/admin/view/wechat/config/index.html
  97. 0 84
      application/admin/view/wechat/menu/index.html
  98. 0 48
      application/admin/view/wechat/response/add.html
  99. 0 52
      application/admin/view/wechat/response/edit.html
  100. 0 0
      application/admin/view/wechat/response/index.html

+ 2 - 1
README.md

@@ -16,8 +16,9 @@ FastAdmin是一款基于ThinkPHP5+Bootstrap的极速后台开发框架。
     * 基于`Bower`进行前端组件包管理
 * 数据库表一键生成`CRUD`,包括控制器、模型、视图、JS、语言包
 * 一键压缩打包JS和CSS文件
+* 强大的插件扩展功能,在线安装卸载插件
 * 多语言支持,服务端及客户端支持
-* 无缝整合又拍云上传功能
+* 无缝整合又拍云、七牛上传等云存储功能
 * 第三方登录(QQ、微信、微博)整合
 * Ucenter整合
 

+ 226 - 0
application/admin/command/Addon.php

@@ -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';
+    }
+
+}

+ 45 - 0
application/admin/command/Addon/stubs/addon.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');
+    }
+
+}

+ 40 - 0
application/admin/command/Addon/stubs/config.stub

@@ -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'  => ''
+    ],
+];

+ 7 - 0
application/admin/command/Addon/stubs/info.stub

@@ -0,0 +1,7 @@
+name = {%name%}
+title = 插件名称
+intro = FastAdmin插件
+author = yourname
+website = http://www.fastadmin.net
+version = 1.0.0
+state = 1

+ 29 - 6
application/admin/command/Crud.php

@@ -45,6 +45,11 @@ class Crud extends Command
     protected $switchSuffix = ['switch'];
 
     /**
+     * 城市后缀
+     */
+    protected $citySuffix = ['city'];
+
+    /**
      * Selectpage对应的后缀
      */
     protected $selectpageSuffix = ['_id', '_ids'];
@@ -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 it is too large
+ 15 - 233
application/admin/command/Install/fastadmin.sql


+ 6 - 6
application/admin/command/Menu.php

@@ -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)

+ 4 - 4
application/admin/command/Min.php

@@ -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,
                 ];
 

+ 84 - 0
application/admin/common.php

@@ -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());
+        }
+    }
+}

+ 293 - 0
application/admin/controller/Addon.php

@@ -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());
+        }
+    }
+
+}

+ 15 - 39
application/admin/controller/Ajax.php

@@ -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);
     }
 
 }

+ 2 - 2
application/admin/controller/Category.php

@@ -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());

+ 5 - 9
application/admin/controller/Index.php

@@ -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;
     }
 
 }

+ 0 - 51
application/admin/controller/Page.php

@@ -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();
-    }
-
-}

+ 0 - 27
application/admin/controller/User.php

@@ -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');
-    }
-
-}

+ 0 - 26
application/admin/controller/Version.php

@@ -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');
-    }
-    
-}

+ 7 - 13
application/admin/controller/auth/Admin.php

@@ -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();
     }
 
 }

+ 6 - 8
application/admin/controller/auth/Adminlog.php

@@ -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();
     }
 
 }

+ 16 - 30
application/admin/controller/auth/Group.php

@@ -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'));
         }
     }
 

+ 8 - 16
application/admin/controller/auth/Rule.php

@@ -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();
     }
 
 }

+ 0 - 70
application/admin/controller/example/Bootstraptable.php

@@ -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;
-    }
-
-}

+ 0 - 24
application/admin/controller/example/Colorbadge.php

@@ -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');
-    }
-
-}

+ 0 - 24
application/admin/controller/example/Controllerjump.php

@@ -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');
-    }
-
-}

+ 0 - 23
application/admin/controller/example/Cxselect.php

@@ -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();
-    }
-
-}

+ 0 - 33
application/admin/controller/example/Multitable.php

@@ -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();
-    }
-
-}

+ 0 - 52
application/admin/controller/example/Relationmodel.php

@@ -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();
-    }
-
-}

+ 0 - 60
application/admin/controller/example/Tabletemplate.php

@@ -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();
-    }
-
-}

+ 15 - 1
application/admin/controller/general/Attachment.php

@@ -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'));
+    }
+
 }

+ 10 - 23
application/admin/controller/general/Config.php

@@ -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());
         }
     }
 

+ 0 - 100
application/admin/controller/general/Crontab.php

@@ -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]);
-    }
-
-}

+ 0 - 211
application/admin/controller/general/Database.php

@@ -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;
-    }
-
-}

+ 2 - 2
application/admin/controller/general/Profile.php

@@ -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;
     }

+ 0 - 74
application/admin/controller/wechat/Autoreply.php

@@ -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')]);
-        }
-    }
-
-}

+ 0 - 164
application/admin/controller/wechat/Config.php

@@ -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();
-    }
-
-}

+ 0 - 111
application/admin/controller/wechat/Menu.php

@@ -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;
-    }
-
-}

+ 0 - 86
application/admin/controller/wechat/Response.php

@@ -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();
-    }
-
-}

+ 9 - 0
application/admin/lang/zh-cn/addon.php

@@ -0,0 +1,9 @@
+<?php
+
+return [
+    'Id'          => 'ID',
+    'Title'       => '标题',
+    'Value'       => '配置值',
+    'Array key'   => '键',
+    'Array value' => '值',
+];

+ 0 - 16
application/admin/lang/zh-cn/general/crontab.php

@@ -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 次的执行时间',
-];

+ 0 - 30
application/admin/lang/zh-cn/general/database.php

@@ -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]失败'
-];
-

+ 4 - 0
application/admin/lang/zh-cn/index.php

@@ -31,4 +31,8 @@ return [
     'Verification code is incorrect'                             => '验证码不正确',
     'Wipe cache completed'                                       => '清除缓存成功',
     'Wipe cache failed'                                          => '清除缓存失败',
+    'Wipe cache'                                                 => '清空缓存',
+    'Check for updates'                                          => '检测更新',
+    'Latest news'                                                => '最新消息',
+    'View more'                                                  => '查看更多',
 ];

+ 0 - 17
application/admin/lang/zh-cn/page.php

@@ -1,17 +0,0 @@
-<?php
-
-return [
-    'id'          => 'ID',
-    'category_id' => '分类ID',
-    'category'    => '分类',
-    'title'       => '标题',
-    'keywords'    => '关键字',
-    'flag'        => '标志',
-    'image'       => '头像',
-    'content'     => '内容',
-    'icon'        => '图标',
-    'views'       => '点击',
-    'comments'    => '评论',
-    'weigh'       => '权重',
-    'status'      => '状态'
-];

+ 0 - 15
application/admin/lang/zh-cn/version.php

@@ -1,15 +0,0 @@
-<?php
-
-return [
-    'id'          => 'ID',
-    'oldversion'  => '旧版本号',
-    'newversion'  => '新版本号',
-    'packagesize' => '包大小',
-    'content'     => '升级内容',
-    'downloadurl' => '下载地址',
-    'enforce'     => '强制更新',
-    'createtime'  => '创建时间',
-    'updatetime'  => '更新时间',
-    'weigh'       => '权重',
-    'status'      => '状态'
-];

+ 0 - 8
application/admin/lang/zh-cn/wechat/autoreply.php

@@ -1,8 +0,0 @@
-<?php
-
-return [
-    'Text'                => '文本',
-    'Event key'           => '响应标识',
-    'Remark'              => '备注',
-    'Text already exists' => '文本已经存在',
-];

+ 0 - 10
application/admin/lang/zh-cn/wechat/config.php

@@ -1,10 +0,0 @@
-<?php
-
-return [
-    'name'       => '配置名称',
-    'value'      => '配置值',
-    'Json key'   => '键',
-    'Json value' => '值',
-    'createtime' => '创建时间',
-    'updatetime' => '更新时间'
-];

+ 0 - 8
application/admin/lang/zh-cn/wechat/response.php

@@ -1,8 +0,0 @@
-<?php
-
-return [
-    'Resource title' => '资源标题',
-    'Event key'      => '事件标识',
-    'Text'           => '文本',
-    'App'            => '应用',
-];

+ 4 - 11
application/admin/library/Auth.php

@@ -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']);

+ 0 - 55
application/admin/model/Config.php

@@ -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;
-    }
-
-}

+ 0 - 203
application/admin/view/add.html

@@ -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>

+ 22 - 0
application/admin/view/addon/add.html

@@ -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>

+ 102 - 0
application/admin/view/addon/config.html

@@ -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>

+ 120 - 0
application/admin/view/addon/index.html

@@ -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>

+ 1 - 1
application/admin/view/auth/admin/index.html

@@ -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 - 1
application/admin/view/auth/group/add.html

@@ -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 - 1
application/admin/view/auth/group/edit.html

@@ -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>

+ 1 - 1
application/admin/view/auth/group/index.html

@@ -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%">
 

+ 8 - 8
application/admin/view/category/add.html

@@ -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>
 

+ 8 - 8
application/admin/view/category/edit.html

@@ -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>
 

+ 9 - 19
application/admin/view/common/header.html

@@ -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>
+            
+            <li>
+                <a href="javascript:;" data-toggle="checkupdate" title="{:__('Check for updates')}">
+                    <i class="fa fa-refresh"></i>
                 </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="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>

+ 4 - 0
application/admin/view/common/menu.html

@@ -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 -->

+ 0 - 203
application/admin/view/edit.html

@@ -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>

+ 0 - 22
application/admin/view/example/bootstraptable/detail.html

@@ -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>

+ 0 - 31
application/admin/view/example/bootstraptable/index.html

@@ -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>

+ 0 - 21
application/admin/view/example/colorbadge/index.html

@@ -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>

+ 0 - 21
application/admin/view/example/controllerjump/index.html

@@ -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>

+ 0 - 160
application/admin/view/example/cxselect/index.html

@@ -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>

+ 0 - 43
application/admin/view/example/multitable/index.html

@@ -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>

+ 0 - 21
application/admin/view/example/relationmodel/index.html

@@ -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>

+ 0 - 67
application/admin/view/example/tabletemplate/index.html

@@ -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>

+ 0 - 52
application/admin/view/general/configvalue/add.html

@@ -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>

+ 0 - 53
application/admin/view/general/configvalue/edit.html

@@ -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>

+ 0 - 25
application/admin/view/general/configvalue/index.html

@@ -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>

+ 0 - 81
application/admin/view/general/crontab/add.html

@@ -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>

+ 0 - 81
application/admin/view/general/crontab/edit.html

@@ -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>

+ 0 - 25
application/admin/view/general/crontab/index.html

@@ -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>

+ 0 - 81
application/admin/view/general/database/index.html

@@ -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>

+ 0 - 25
application/admin/view/index.html

@@ -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 - 11
application/admin/view/index/login.html

@@ -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">

+ 0 - 80
application/admin/view/page/add.html

@@ -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>

+ 0 - 81
application/admin/view/page/edit.html

@@ -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>

+ 0 - 25
application/admin/view/page/index.html

@@ -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>

+ 0 - 64
application/admin/view/user/third/add.phtml

@@ -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>

+ 0 - 64
application/admin/view/user/third/edit.phtml

@@ -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>

+ 0 - 25
application/admin/view/user/third/index.phtml

@@ -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>

+ 0 - 193
application/admin/view/user/user/add.phtml

@@ -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>

+ 0 - 187
application/admin/view/user/user/edit.phtml

@@ -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>

+ 0 - 25
application/admin/view/user/user/index.phtml

@@ -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>

+ 0 - 64
application/admin/view/version/add.html

@@ -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>

+ 0 - 58
application/admin/view/version/edit.html

@@ -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>

+ 0 - 25
application/admin/view/version/index.html

@@ -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>

+ 0 - 51
application/admin/view/wechat/autoreply/add.html

@@ -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>

+ 0 - 51
application/admin/view/wechat/autoreply/edit.html

@@ -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>

+ 0 - 25
application/admin/view/wechat/autoreply/index.html

@@ -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>

+ 0 - 45
application/admin/view/wechat/config/add.html

@@ -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>

+ 0 - 47
application/admin/view/wechat/config/edit.html

@@ -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>

+ 0 - 25
application/admin/view/wechat/config/index.html

@@ -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>

+ 0 - 84
application/admin/view/wechat/menu/index.html

@@ -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>

+ 0 - 48
application/admin/view/wechat/response/add.html

@@ -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>

+ 0 - 52
application/admin/view/wechat/response/edit.html

@@ -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>

+ 0 - 0
application/admin/view/wechat/response/index.html


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