diff --git a/application/admin/command/Crud.php b/application/admin/command/Crud.php
index 7558630..d6828e7 100755
--- a/application/admin/command/Crud.php
+++ b/application/admin/command/Crud.php
@@ -46,6 +46,11 @@ class Crud extends Command
     protected $switchSuffix = ['switch'];
 
     /**
+     * 富文本后缀
+     */
+    protected $editorSuffix = ['content'];
+
+    /**
      * 城市后缀
      */
     protected $citySuffix = ['city'];
@@ -64,12 +69,13 @@ class Crud extends Command
      * 以指定字符结尾的字段格式化函数
      */
     protected $fieldFormatterSuffix = [
-        'status' => ['type' => ['varchar'], 'name' => 'status'],
+        'status' => ['type' => ['varchar', 'enum'], 'name' => 'status'],
         'icon'   => 'icon',
         'flag'   => 'flag',
         'url'    => 'url',
         'image'  => 'image',
         'images' => 'images',
+        'switch' => 'toggle',
         'time'   => ['type' => ['int', 'timestamp'], 'name' => 'datetime']
     ];
 
@@ -145,6 +151,8 @@ class Crud extends Command
         $controller = $input->getOption('controller');
         //自定义模型
         $model = $input->getOption('model');
+        //验证器类
+        $validate = $model;
         //自定义显示字段
         $fields = $input->getOption('fields');
         //强制覆盖
@@ -220,6 +228,11 @@ class Crud extends Command
         $dbname = Config::get('database.database');
         $prefix = Config::get('database.prefix');
 
+        //模块
+        $moduleName = 'admin';
+        $modelModuleName = $local ? $moduleName : 'common';
+        $validateModuleName = $local ? $moduleName : 'common';
+
         //检查主表
         $modelName = $table = stripos($table, $prefix) === 0 ? substr($table, strlen($prefix)) : $table;
         $modelTableType = 'table';
@@ -257,9 +270,7 @@ class Crud extends Command
                 $relationTableInfo = $relationTableInfo[0];
                 $relationModel = isset($relationModel[$index]) ? $relationModel[$index] : '';
 
-                //关联模型默认以表名进行处理,以下划线进行分隔,如果需要自定义则需要传入relationmodel,不支持目录层级
-                $relationName = $this->getModelName($relationModel, $relationName);
-                $relationFile = ($local ? $adminPath : APP_PATH . 'common' . DS) . 'model' . DS . $relationName . '.php';
+                list($relationNamespace, $relationName, $relationFile) = $this->getModelData($modelModuleName, $relationModel, $relationName);
 
                 $relations[] = [
                     //关联表基础名
@@ -292,28 +303,25 @@ class Crud extends Command
         $iconPath = ROOT_PATH . str_replace('/', DS, '/public/assets/libs/font-awesome/less/variables.less');
         $iconName = is_file($iconPath) && stripos(file_get_contents($iconPath), '@fa-var-' . $table . ':') ? 'fa fa-' . $table : 'fa fa-circle-o';
 
-        //控制器默认以表名进行处理,以下划线进行分隔,如果需要自定义则需要传入controller,格式为目录层级
-        $controller = str_replace('_', '', $controller);
-        $controllerArr = !$controller ? explode('_', strtolower($table)) : explode('/', strtolower($controller));
-        $controllerUrl = implode('/', $controllerArr);
-        $controllerName = ucfirst(array_pop($controllerArr));
-        $controllerDir = implode(DS, $controllerArr);
-        $controllerFile = ($controllerDir ? $controllerDir . DS : '') . $controllerName . '.php';
-        $viewDir = $adminPath . 'view' . DS . $controllerUrl . DS;
+        //控制器
+        list($controllerNamespace, $controllerName, $controllerFile, $controllerArr) = $this->getControllerData($moduleName, $controller, $table);
+        //模型
+        list($modelNamespace, $modelName, $modelFile, $modelArr) = $this->getModelData($modelModuleName, $model, $table);
+        //验证器
+        list($validateNamespace, $validateName, $validateFile, $validateArr) = $this->getValidateData($validateModuleName, $validate, $table);
+
+        $controllerUrl = strtolower(implode('/', $controllerArr));
+        $controllerBaseName = strtolower(implode(DS, $controllerArr));
+
+        //视图文件
+        $viewDir = $adminPath . 'view' . DS . $controllerBaseName . DS;
 
         //最终将生成的文件路径
-        $controllerFile = $adminPath . 'controller' . DS . $controllerFile;
-        $javascriptFile = ROOT_PATH . 'public' . DS . 'assets' . DS . 'js' . DS . 'backend' . DS . $controllerUrl . '.js';
+        $javascriptFile = ROOT_PATH . 'public' . DS . 'assets' . DS . 'js' . DS . 'backend' . DS . $controllerBaseName . '.js';
         $addFile = $viewDir . 'add.html';
         $editFile = $viewDir . 'edit.html';
         $indexFile = $viewDir . 'index.html';
-        $langFile = $adminPath . 'lang' . DS . Lang::detect() . DS . $controllerUrl . '.php';
-
-        //模型默认以表名进行处理,以下划线进行分隔,如果需要自定义则需要传入model,不支持目录层级
-        $modelName = $this->getModelName($model, $table);
-        $modelFile = ($local ? $adminPath : APP_PATH . 'common' . DS) . 'model' . DS . $modelName . '.php';
-
-        $validateFile = $adminPath . 'validate' . DS . $modelName . '.php';
+        $langFile = $adminPath . 'lang' . DS . Lang::detect() . DS . $controllerBaseName . '.php';
 
         //是否为删除模式
         $delete = $input->getOption('delete');
@@ -332,6 +340,14 @@ class Crud extends Command
             foreach ($readyFiles as $k => $v) {
                 if (file_exists($v))
                     unlink($v);
+                //删除空文件夹
+                if ($v == $modelFile) {
+                    $this->removeEmptyBaseDir($v, $modelArr);
+                } else if ($v == $validateFile) {
+                    $this->removeEmptyBaseDir($v, $validateArr);
+                } else {
+                    $this->removeEmptyBaseDir($v, $controllerArr);
+                }
             }
 
             $output->info("Delete Successed");
@@ -457,8 +473,10 @@ class Crud extends Command
                 $itemArr = [];
                 // 这里构建Enum和Set类型的列表数据
                 if (in_array($v['DATA_TYPE'], ['enum', 'set', 'tinyint'])) {
-                    $itemArr = substr($v['COLUMN_TYPE'], strlen($v['DATA_TYPE']) + 1, -1);
-                    $itemArr = explode(',', str_replace("'", '', $itemArr));
+                    if ($v['DATA_TYPE'] !== 'tinyint') {
+                        $itemArr = substr($v['COLUMN_TYPE'], strlen($v['DATA_TYPE']) + 1, -1);
+                        $itemArr = explode(',', str_replace("'", '', $itemArr));
+                    }
                     $itemArr = $this->getItemArray($itemArr, $field, $v['COLUMN_COMMENT']);
                     //如果类型为tinyint且有使用备注数据
                     if ($itemArr && $v['DATA_TYPE'] == 'tinyint') {
@@ -563,7 +581,7 @@ class Crud extends Command
                         $formAddElement = $this->getReplacedStub('html/' . $inputType, ['field' => $field, 'fieldName' => $fieldName, 'fieldList' => $this->getFieldListName($field), 'attrStr' => Form::attributes($attrArr), 'selectedValue' => $defaultValue]);
                         $formEditElement = $this->getReplacedStub('html/' . $inputType, ['field' => $field, 'fieldName' => $fieldName, 'fieldList' => $this->getFieldListName($field), 'attrStr' => Form::attributes($attrArr), 'selectedValue' => "\$row.{$field}"]);
                     } else if ($inputType == 'textarea') {
-                        $cssClassArr[] = substr($field, -7) == 'content' ? $this->editorClass : '';
+                        $cssClassArr[] = $this->isMatchSuffix($field, $this->editorSuffix) ? $this->editorClass : '';
                         $attrArr['class'] = implode(' ', $cssClassArr);
                         $attrArr['rows'] = 5;
                         $formAddElement = Form::textarea($fieldName, $defaultValue, $attrArr);
@@ -577,6 +595,9 @@ class Crud extends Command
                             $no = $defaultValue;
                             $yes = $defaultValue === '0' ? '1' : 'Y';
                         }
+                        if (!$itemArr) {
+                            $itemArr = [$yes => 'Yes', $no => 'No'];
+                        }
                         $formAddElement = $formEditElement = Form::hidden($fieldName, $no, array_merge(['checked' => ''], $attrArr));
                         $attrArr['id'] = $fieldName . "-switch";
                         $formAddElement .= sprintf(Form::label("{$attrArr['id']}", "%s {:__('Yes')}", ['class' => 'control-label']), Form::checkbox($fieldName, $yes, $defaultValue === $yes, $attrArr));
@@ -603,6 +624,10 @@ class Crud extends Command
                                 $attrArr['data-params'] = '##replacetext##';
                                 $search = '"##replacetext##"';
                                 $replace = '\'{"custom[type]":"' . $table . '"}\'';
+                            } elseif ($selectpageController == 'admin') {
+                                $attrArr['data-source'] = 'auth/admin/selectpage';
+                            } elseif ($selectpageController == 'user') {
+                                $attrArr['data-source'] = 'user/user/index';
                             }
                             if ($this->isMatchSuffix($field, $this->selectpagesSuffix)) {
                                 $attrArr['data-multiple'] = 'true';
@@ -696,13 +721,6 @@ class Crud extends Command
             $tableComment = $modelTableInfo['Comment'];
             $tableComment = mb_substr($tableComment, -1) == '表' ? mb_substr($tableComment, 0, -1) . '管理' : $tableComment;
 
-            $appNamespace = Config::get('app_namespace');
-            $moduleName = 'admin';
-            $controllerNamespace = "{$appNamespace}\\{$moduleName}\\controller" . ($controllerDir ? "\\" : "") . str_replace('/', "\\", $controllerDir);
-            $modelNamespace = "{$appNamespace}\\" . ($local ? $moduleName : "common") . "\\model";
-            $validateNamespace = "{$appNamespace}\\" . $moduleName . "\\validate";
-            $validateName = $modelName;
-
             $modelInit = '';
             if ($priKey != $order) {
                 $modelInit = $this->getReplacedStub('mixins' . DS . 'modelinit', ['order' => $order]);
@@ -713,7 +731,6 @@ class Crud extends Command
                 'modelNamespace'          => $modelNamespace,
                 'validateNamespace'       => $validateNamespace,
                 'controllerUrl'           => $controllerUrl,
-                'controllerDir'           => $controllerDir,
                 'controllerName'          => $controllerName,
                 'controllerAssignList'    => implode("\n", $controllerAssignList),
                 'modelName'               => $modelName,
@@ -890,18 +907,91 @@ EOD;
 EOD;
     }
 
-    protected function getModelName($model, $table)
+    /**
+     * 移除相对的空目录
+     * @param $parseFile
+     * @param $parseArr
+     * @return bool
+     */
+    protected function removeEmptyBaseDir($parseFile, $parseArr)
+    {
+        if (count($parseArr) > 1) {
+            $parentDir = dirname($parseFile);
+            for ($i = 0; $i < count($parseArr); $i++) {
+                $iterator = new \FilesystemIterator($parentDir);
+                $isDirEmpty = !$iterator->valid();
+                if ($isDirEmpty) {
+                    rmdir($parentDir);
+                    $parentDir = dirname($parentDir);
+                } else {
+                    return true;
+                }
+            }
+        }
+        return true;
+    }
+
+    /**
+     * 获取控制器相关信息
+     * @param $module
+     * @param $controller
+     * @param $table
+     * @return array
+     */
+    protected function getControllerData($module, $controller, $table)
+    {
+        return $this->getParseNameData($module, $controller, $table, 'controller');
+    }
+
+    /**
+     * 获取模型相关信息
+     * @param $module
+     * @param $model
+     * @param $table
+     * @return array
+     */
+    protected function getModelData($module, $model, $table)
     {
-        if (!$model) {
-            $modelarr = explode('_', strtolower($table));
-            foreach ($modelarr as $k => &$v)
-                $v = ucfirst($v);
-            unset($v);
-            $modelName = implode('', $modelarr);
+        return $this->getParseNameData($module, $model, $table, 'model');
+    }
+
+    /**
+     * 获取验证器相关信息
+     * @param $module
+     * @param $validate
+     * @param $table
+     * @return array
+     */
+    protected function getValidateData($module, $validate, $table)
+    {
+        return $this->getParseNameData($module, $validate, $table, 'validate');
+    }
+
+    /**
+     * 获取已解析相关信息
+     * @param $module
+     * @param $name
+     * @param $table
+     * @param $type
+     * @return array
+     */
+    protected function getParseNameData($module, $name, $table, $type)
+    {
+        $arr = [];
+        if (!$name) {
+            $arr = explode('_', strtolower($table));
         } else {
-            $modelName = ucfirst($model);
+            $name = str_replace(['.', '/', '\\'], '/', $name);
+            $arr = explode('/', $name);
         }
-        return $modelName;
+        $parseName = ucfirst(array_pop($arr));
+        $appNamespace = Config::get('app_namespace');
+        $parseNamespace = "{$appNamespace}\\{$module}\\{$type}" . ($arr ? "\\" . implode("\\", $arr) : "");
+        $moduleDir = APP_PATH . $module . DS;
+        $parseFile = $moduleDir . $type . DS . ($arr ? implode(DS, $arr) . DS : '') . $parseName . '.php';
+        $parseArr = $arr;
+        $parseArr[] = $parseName;
+        return [$parseNamespace, $parseName, $parseFile, $parseArr];
     }
 
     /**
@@ -1199,25 +1289,19 @@ EOD;
                 }
             }
         }
-        if ($formatter) {
-            $extend = '';
-        }
-        $html = str_repeat(" ", 24) . "{field: '{$field}{$extend}', title: __('{$lang}')";
-        //$formatter = $extend ? '' : $formatter;
-        if ($extend) {
-            $html .= ", operate:false";
-            if ($datatype == 'set') {
-                $formatter = 'label';
-            }
+        $html = str_repeat(" ", 24) . "{field: '{$field}', title: __('{$lang}')";
+
+        if ($datatype == 'set') {
+            $formatter = 'label';
         }
         foreach ($itemArr as $k => &$v) {
             if (substr($v, 0, 3) !== '__(')
-                $v = "__('" . $v . "')";
+                $v = "__('" . mb_ucfirst($v) . "')";
         }
         unset($v);
         $searchList = json_encode($itemArr, JSON_FORCE_OBJECT | JSON_UNESCAPED_UNICODE);
         $searchList = str_replace(['":"', '"}', ')","'], ['":', '}', '),"'], $searchList);
-        if ($itemArr && !$extend) {
+        if ($itemArr) {
             $html .= ", searchList: " . $searchList;
         }
         if (in_array($datatype, ['date', 'datetime']) || $formatter === 'datetime') {
@@ -1225,18 +1309,16 @@ EOD;
         } else if (in_array($datatype, ['float', 'double', 'decimal'])) {
             $html .= ", operate:'BETWEEN'";
         }
+        if (in_array($datatype, ['set'])) {
+            $html .= ", operate:'FIND_IN_SET'";
+        }
+        if ($itemArr && !$formatter) {
+            $formatter = 'normal';
+        }
         if ($formatter)
             $html .= ", formatter: Table.api.formatter." . $formatter . "}";
         else
             $html .= "}";
-        if ($extend) {
-            $origin = str_repeat(" ", 24) . "{field: '{$field}', title: __('{$lang}'), visible:false";
-            if ($searchList) {
-                $origin .= ", searchList: " . $searchList;
-            }
-            $origin .= "}";
-            $html = $origin . ",\n" . $html;
-        }
         return $html;
     }
 
diff --git a/application/admin/command/Crud/stubs/controller.stub b/application/admin/command/Crud/stubs/controller.stub
index e61ece2..70b07a1 100644
--- a/application/admin/command/Crud/stubs/controller.stub
+++ b/application/admin/command/Crud/stubs/controller.stub
@@ -21,7 +21,7 @@ class {%controllerName%} extends Backend
     public function _initialize()
     {
         parent::_initialize();
-        $this->model = model('{%modelName%}');
+        $this->model = new \{%modelNamespace%}\{%modelName%};
 {%controllerAssignList%}
     }
     
diff --git a/application/admin/library/traits/Backend.php b/application/admin/library/traits/Backend.php
index cf171a9..187a722 100755
--- a/application/admin/library/traits/Backend.php
+++ b/application/admin/library/traits/Backend.php
@@ -80,7 +80,7 @@ trait Backend
                 try {
                     //是否采用模型验证
                     if ($this->modelValidate) {
-                        $name = basename(str_replace('\\', '/', get_class($this->model)));
+                        $name = str_replace("\\model\\", "\\validate\\", get_class($this->model));
                         $validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.add' : true) : $this->modelValidate;
                         $this->model->validate($validate);
                     }
diff --git a/public/assets/js/bootstrap-table-commonsearch.js b/public/assets/js/bootstrap-table-commonsearch.js
index 5d4cf6c..a4dd0a7 100644
--- a/public/assets/js/bootstrap-table-commonsearch.js
+++ b/public/assets/js/bootstrap-table-commonsearch.js
@@ -326,7 +326,6 @@
             if (obj.size() > 0) {
                 var value = $(this).data("value");
                 if (obj.is("select")) {
-                    console.log($("option[value='" + value + "']", obj));
                     $("option[value='" + value + "']", obj).prop("selected", true);
                 } else if (obj.size() > 1) {
                     $("form [name='" + $(this).data("field") + "'][value='" + value + "']", that.$commonsearch).prop("checked", true);
diff --git a/public/assets/js/require-backend.min.js b/public/assets/js/require-backend.min.js
index 5a0d94b..616a52d 100644
--- a/public/assets/js/require-backend.min.js
+++ b/public/assets/js/require-backend.min.js
@@ -9192,7 +9192,6 @@ define('form',['jquery', 'bootstrap', 'upload', 'validator'], function ($, undef
             if (obj.size() > 0) {
                 var value = $(this).data("value");
                 if (obj.is("select")) {
-                    console.log($("option[value='" + value + "']", obj));
                     $("option[value='" + value + "']", obj).prop("selected", true);
                 } else if (obj.size() > 1) {
                     $("form [name='" + $(this).data("field") + "'][value='" + value + "']", that.$commonsearch).prop("checked", true);
@@ -9732,19 +9731,35 @@ define('table',['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstr
                     return html.join(' ');
                 },
                 status: function (value, row, index) {
-                    //颜色状态数组,可使用red/yellow/aqua/blue/navy/teal/olive/lime/fuchsia/purple/maroon
-                    var colorArr = {normal: 'success', hidden: 'grey', deleted: 'danger', locked: 'info'};
-                    //如果字段列有定义custom
+                    var custom = {normal: 'success', hidden: 'gray', deleted: 'danger', locked: 'info'};
                     if (typeof this.custom !== 'undefined') {
-                        colorArr = $.extend(colorArr, this.custom);
+                        custom = $.extend(custom, this.custom);
                     }
+                    this.custom = custom;
+                    this.icon = 'fa fa-circle';
+                    return Table.api.formatter.normal.call(this, value, row, index);
+                },
+                normal: function (value, row, index) {
+                    var colorArr = ["primary", "success", "danger", "warning", "info", "gray", "red", "yellow", "aqua", "blue", "navy", "teal", "olive", "lime", "fuchsia", "purple", "maroon"];
+                    var custom = {};
+                    if (typeof this.custom !== 'undefined') {
+                        custom = $.extend(custom, this.custom);
+                    }
+                    var keys = typeof this.searchList === 'object' ? Object.keys(this.searchList) : [];
+                    var index = keys.indexOf(value);
                     value = value === null ? '' : value.toString();
-                    var color = value && typeof colorArr[value] !== 'undefined' ? colorArr[value] : 'primary';
-                    var newValue = value.charAt(0).toUpperCase() + value.slice(1);
-                    //渲染状态
-                    var html = '<span class="text-' + color + '"><i class="fa fa-circle"></i> ' + __(newValue) + '</span>';
+                    var color = value && typeof custom[value] !== 'undefined' ? custom[value] : null;
+                    var display = index > -1 ? this.searchList[value] : null;
+                    var icon = typeof this.icon !== 'undefined' ? this.icon : null;
+                    if (!color) {
+                        color = index > -1 && typeof colorArr[index] !== 'undefined' ? colorArr[index] : 'primary';
+                    }
+                    if (!display) {
+                        display = value.charAt(0).toUpperCase() + value.slice(1);
+                    }
+                    var html = '<span class="text-' + color + '">' + (icon ? '<i class="' + icon + '"></i> ' : '') + display + '</span>';
                     if (this.operate != false) {
-                        html = '<a href="javascript:;" class="searchit" data-toggle="tooltip" title="' + __('Click to search %s', __(newValue)) + '" data-field="' + this.field + '" data-value="' + value + '">' + html + '</a>';
+                        html = '<a href="javascript:;" class="searchit" data-toggle="tooltip" title="' + __('Click to search %s', display) + '" data-field="' + this.field + '" data-value="' + value + '">' + html + '</a>';
                     }
                     return html;
                 },
@@ -9754,7 +9769,8 @@ define('table',['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstr
                     var no = typeof this.no !== 'undefined' ? this.no : 0;
                     return "<a href='javascript:;' data-toggle='tooltip' title='" + __('Click to toggle') + "' class='btn-change' data-id='"
                         + row.id + "' data-params='" + this.field + "=" + (value ? no : yes) + "'><i class='fa fa-toggle-on " + (value == yes ? 'text-' + color : 'fa-flip-horizontal text-gray') + " fa-2x'></i></a>";
-                },
+                }
+                ,
                 url: function (value, row, index) {
                     return '<div class="input-group input-group-sm" style="width:250px;margin:0 auto;"><input type="text" class="form-control input-sm" value="' + value + '"><span class="input-group-btn input-group-sm"><a href="' + value + '" target="_blank" class="btn btn-default btn-sm"><i class="fa fa-link"></i></a></span></div>';
                 },
@@ -9772,15 +9788,19 @@ define('table',['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstr
                     return '<a href="' + Fast.api.fixurl(url) + '" class="dialogit" data-value="' + value + '" title="' + title + '">' + value + '</a>';
                 },
                 flag: function (value, row, index) {
+                    var that = this;
                     value = value === null ? '' : value.toString();
                     var colorArr = {index: 'success', hot: 'warning', recommend: 'danger', 'new': 'info'};
                     //如果字段列有定义custom
                     if (typeof this.custom !== 'undefined') {
                         colorArr = $.extend(colorArr, this.custom);
                     }
+                    var field = this.field;
                     if (typeof this.customField !== 'undefined' && typeof row[this.customField] !== 'undefined') {
                         value = row[this.customField];
+                        field = this.customField;
                     }
+
                     //渲染Flag
                     var html = [];
                     var arr = value.split(',');
@@ -9789,8 +9809,8 @@ define('table',['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstr
                         if (value == '')
                             return true;
                         var color = value && typeof colorArr[value] !== 'undefined' ? colorArr[value] : 'primary';
-                        value = value.charAt(0).toUpperCase() + value.slice(1);
-                        html.push('<span class="label label-' + color + '">' + __(value) + '</span>');
+                        var display = typeof that.searchList !== 'undefined' && typeof that.searchList[value] !== 'undefined' ? that.searchList[value] : value.charAt(0).toUpperCase() + value.slice(1);
+                        html.push('<a href="javascript:;" class="searchit" data-toggle="tooltip" title="' + __('Click to search %s', display) + '" data-field="' + field + '" data-value="' + value + '"><span class="label label-' + color + '">' + display + '</span></a>');
                     });
                     return html.join(' ');
                 },
@@ -9841,7 +9861,8 @@ define('table',['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstr
                         });
                     }
                     return Table.api.buttonlink(this, buttons, value, row, index, 'operate');
-                },
+                }
+                ,
                 buttons: function (value, row, index) {
                     // 默认按钮组
                     var buttons = $.extend([], this.buttons || []);
diff --git a/public/assets/js/require-table.js b/public/assets/js/require-table.js
index 9fcb096..9fb7f72 100644
--- a/public/assets/js/require-table.js
+++ b/public/assets/js/require-table.js
@@ -386,19 +386,35 @@ define(['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstrap-table
                     return html.join(' ');
                 },
                 status: function (value, row, index) {
-                    //颜色状态数组,可使用red/yellow/aqua/blue/navy/teal/olive/lime/fuchsia/purple/maroon
-                    var colorArr = {normal: 'success', hidden: 'grey', deleted: 'danger', locked: 'info'};
-                    //如果字段列有定义custom
+                    var custom = {normal: 'success', hidden: 'gray', deleted: 'danger', locked: 'info'};
                     if (typeof this.custom !== 'undefined') {
-                        colorArr = $.extend(colorArr, this.custom);
+                        custom = $.extend(custom, this.custom);
                     }
+                    this.custom = custom;
+                    this.icon = 'fa fa-circle';
+                    return Table.api.formatter.normal.call(this, value, row, index);
+                },
+                normal: function (value, row, index) {
+                    var colorArr = ["primary", "success", "danger", "warning", "info", "gray", "red", "yellow", "aqua", "blue", "navy", "teal", "olive", "lime", "fuchsia", "purple", "maroon"];
+                    var custom = {};
+                    if (typeof this.custom !== 'undefined') {
+                        custom = $.extend(custom, this.custom);
+                    }
+                    var keys = typeof this.searchList === 'object' ? Object.keys(this.searchList) : [];
+                    var index = keys.indexOf(value);
                     value = value === null ? '' : value.toString();
-                    var color = value && typeof colorArr[value] !== 'undefined' ? colorArr[value] : 'primary';
-                    var newValue = value.charAt(0).toUpperCase() + value.slice(1);
-                    //渲染状态
-                    var html = '<span class="text-' + color + '"><i class="fa fa-circle"></i> ' + __(newValue) + '</span>';
+                    var color = value && typeof custom[value] !== 'undefined' ? custom[value] : null;
+                    var display = index > -1 ? this.searchList[value] : null;
+                    var icon = typeof this.icon !== 'undefined' ? this.icon : null;
+                    if (!color) {
+                        color = index > -1 && typeof colorArr[index] !== 'undefined' ? colorArr[index] : 'primary';
+                    }
+                    if (!display) {
+                        display = value.charAt(0).toUpperCase() + value.slice(1);
+                    }
+                    var html = '<span class="text-' + color + '">' + (icon ? '<i class="' + icon + '"></i> ' : '') + display + '</span>';
                     if (this.operate != false) {
-                        html = '<a href="javascript:;" class="searchit" data-toggle="tooltip" title="' + __('Click to search %s', __(newValue)) + '" data-field="' + this.field + '" data-value="' + value + '">' + html + '</a>';
+                        html = '<a href="javascript:;" class="searchit" data-toggle="tooltip" title="' + __('Click to search %s', display) + '" data-field="' + this.field + '" data-value="' + value + '">' + html + '</a>';
                     }
                     return html;
                 },
@@ -408,7 +424,8 @@ define(['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstrap-table
                     var no = typeof this.no !== 'undefined' ? this.no : 0;
                     return "<a href='javascript:;' data-toggle='tooltip' title='" + __('Click to toggle') + "' class='btn-change' data-id='"
                         + row.id + "' data-params='" + this.field + "=" + (value ? no : yes) + "'><i class='fa fa-toggle-on " + (value == yes ? 'text-' + color : 'fa-flip-horizontal text-gray') + " fa-2x'></i></a>";
-                },
+                }
+                ,
                 url: function (value, row, index) {
                     return '<div class="input-group input-group-sm" style="width:250px;margin:0 auto;"><input type="text" class="form-control input-sm" value="' + value + '"><span class="input-group-btn input-group-sm"><a href="' + value + '" target="_blank" class="btn btn-default btn-sm"><i class="fa fa-link"></i></a></span></div>';
                 },
@@ -426,15 +443,19 @@ define(['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstrap-table
                     return '<a href="' + Fast.api.fixurl(url) + '" class="dialogit" data-value="' + value + '" title="' + title + '">' + value + '</a>';
                 },
                 flag: function (value, row, index) {
+                    var that = this;
                     value = value === null ? '' : value.toString();
                     var colorArr = {index: 'success', hot: 'warning', recommend: 'danger', 'new': 'info'};
                     //如果字段列有定义custom
                     if (typeof this.custom !== 'undefined') {
                         colorArr = $.extend(colorArr, this.custom);
                     }
+                    var field = this.field;
                     if (typeof this.customField !== 'undefined' && typeof row[this.customField] !== 'undefined') {
                         value = row[this.customField];
+                        field = this.customField;
                     }
+
                     //渲染Flag
                     var html = [];
                     var arr = value.split(',');
@@ -443,8 +464,8 @@ define(['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstrap-table
                         if (value == '')
                             return true;
                         var color = value && typeof colorArr[value] !== 'undefined' ? colorArr[value] : 'primary';
-                        value = value.charAt(0).toUpperCase() + value.slice(1);
-                        html.push('<span class="label label-' + color + '">' + __(value) + '</span>');
+                        var display = typeof that.searchList !== 'undefined' && typeof that.searchList[value] !== 'undefined' ? that.searchList[value] : value.charAt(0).toUpperCase() + value.slice(1);
+                        html.push('<a href="javascript:;" class="searchit" data-toggle="tooltip" title="' + __('Click to search %s', display) + '" data-field="' + field + '" data-value="' + value + '"><span class="label label-' + color + '">' + display + '</span></a>');
                     });
                     return html.join(' ');
                 },
@@ -495,7 +516,8 @@ define(['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstrap-table
                         });
                     }
                     return Table.api.buttonlink(this, buttons, value, row, index, 'operate');
-                },
+                }
+                ,
                 buttons: function (value, row, index) {
                     // 默认按钮组
                     var buttons = $.extend([], this.buttons || []);