FastAdmin 初次使用

FastAdmin是一款基于ThinkPHP5+Bootstrap的极速后台开发框架。

安装

命令行安装

  1. 克隆FastAdmin到你本地
1
git clone https://gitee.com/karson/fastadmin.git
  1. 进入目录
1
cd fastadmin
  1. 下载前端插件依赖包
1
bower install
  1. 下载PHP依赖包
1
composer install
  1. 一键创建数据库并导入数据
1
php think install -u 数据库用户名 -p 数据库密码
  1. 添加虚拟主机并绑定到fastadmin/public目录

命令行

一键生成CRUD

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//生成fa_test表的CRUD
php think crud -t test

//生成fa_test表的CRUD且一键生成菜单
php think crud -t test -u 1

//删除fa_test表生成的CRUD
php think crud -t test -d 1

//生成fa_test表的CRUD且控制器生成在二级目录下
php think crud -t test -c mydir/test

//生成fa_test_log表的CRUD且生成对应的控制器为testlog
php think crud -t test_log -c testlog

//生成fa_test表的CRUD且对应的模型名为testmodel
php think crud -t test -m testmodel

//生成fa_test表的CRUD且生成关联模型category,外链为category_id,关联表主键为id
php think crud -t test -r category -k category_id -p id

//生成fa_test表的CRUD且所有以list或data结尾的字段都生成复选框
php think crud -t test --setcheckboxsuffix=list --setcheckboxsuffix=data

//生成fa_test表的CRUD且所有以image和img结尾的字段都生成图片上传组件
php think crud -t test --imagefield=image --setcheckboxsuffix=img

//关联多个表,参数传递时请按顺序依次传递,支持以下几个参数relation/relationmodel/relationforeignkey/relationprimarykey/relationfields/relationmode
php think crud -t test --relation=category --relation=admin --relationforeignkey=category_id --relationforeignkey=admin_id

一键生成菜单

1
2
3
4
5
6
7
8
9
10
11
//一键生成test控制器的权限菜单
php think menu -c test

//一键生成mydir/test控制器的权限菜单
php think menu -c mydir/test

//删除test控制器生成的菜单
php think menu -c test -d 1

//一键全部重新所有控制器的权限菜单
php think menu -c all-controller

一键压缩打包

1
2
3
4
5
6
7
8
9
10
11
//一键压缩打包前后台的JS和CSS
php think min -m all -r all

//一键压缩打包后台的JS和CSS
php think min -m backend -r all

//一键压缩打包前后台的JS
php think min -m all -r js

//一键压缩打包后台的CSS
php think min -m backend -r css

一键生成API文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//一键生成API文档
php think api --force=true

//指定https://www.example.com为API接口请求域名,默认为空
php think api -u https://www.example.com --force=true

//输出自定义文件为myapi.html,默认为api.html
php think api -o myapi.html --force=true

//修改API模板为mytemplate.html,默认为index.html
php think api -e mytemplate.html --force=true

//修改标题为FastAdmin,作者为作者
php think api -t FastAdmin -a Karson --force=true

//查看API接口命令行帮助
php think api -h

一键管理插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//创建一个myaddon本地插件,常用于开发自己的插件时使用
php think addon -a myaddon -c create

//刷新插件缓存,如果禁用启用了插件,部分文件需要刷新才会生效
php think addon -a example -c refresh

//远程安装example插件
php think addon -a example -c install

//卸载本地的example插件
php think addon -a example -c uninstall

//启用本地的example插件
php think addon -a example -c enable

//禁用本地的example插件
php think addon -a example -c disable

//升级本地的example插件
php think addon -a example -c upgrade

//将本地的example插件打包成zip文件
php think addon -a example -c package

一键安装FastAdmin

1
2
3
4
5
6
7
8
9
10
11
12
//一键安装FastAdmin
php think install
//配置数据库连接地址为127.0.0.1
php think install -a 127.0.0.1
//配置数据库用户名密码
php think install -u root -p 123456
//配置数据库表名为dbname
php think install -d dbname
//配置数据库表前缀为ff_
php think install -p ff_
//强制重新安装FastAdmin
php think install -f 1

插件

插件市场

https://www.fastadmin.net/store.html

多语言

在FastAdmin中可以在任何位置(控制器、视图、JS)使用__('语言标识');调用语言包,如果语言标识不存在,则直接输出该语言标识.

使用方法

FastAdmin中的__函数ThinkPHP中的lang函数在传参上有些许区别

比如:

1
__('My name is %s', "FastAdmin");

将会返回:

1
My name is FastAdmin

而如果采用ThinkPHP中的lang中的写法则是

1
lang('My name is %s', ["FastAdmin"]);

可以看到ThinkPHP中的第二个参数必须传入数组,而FastAdmin中的__则没有这个要求,其实在多个参数时FastAdmin会忽略掉第三个参数$lang

如果需要在HTML视图文件中使用多语言,则需要使用{:__('Home')}的方式调用,而在PHP和JS中均可以使用__('Home')的方式发起调用。

加载方式

FastAdmin当中,框架会自动按照当前请求的控制器进行加载对应的语言包。例如当前我们是中文环境,如果我们请求的是

1
https://demo.fastadmin.net/admin/dashboard/index

FastAdmin会自动加载

1
2
application/admin/lang/zh-cn.php
application/admin/lang/zh-cn/Dashboard.php

这两个语言包。

如果我们请求的路径是

1
https://demo.fastadmin.net/admin/general/config/index

FastAdmin会自动加载

1
2
application/admin/lang/zh-cn.php
application/admin/lang/zh-cn/general/Config.php

可以看到FastAdmin会默认加载zh-cn.php这个全局语言包。

如果我们需要跨模块引入其它模块的语言包,则可以在 控制器中使用loadlang方法来引入,如

1
$this->loadlang('模块名');

如果需要在JS中跨模块引入语言包,则需要修改Ajax.php中的lang这个方法。

数据库

这里提供的是数据库表字段规则在你创建表时使用,当按如下的规则进行字段命名、类型设置和备注时
使用php think crud -t 表名生成CRUD时会自动生成对应的HTML元素和组件

根据字段类型

类型: 备注 – 类型说明

  • int: 整形 – 自动生成type为number的文本框,步长为1
  • enum: 枚举型 – 自动生成单选下拉列表框
  • set: set型 – 自动生成多选下拉列表框
  • float: 浮点型 – 自动生成type为number的文本框,步长根据小数点位数生成
  • text: 文本型 – 自动生成textarea文本框
  • datetime: 日期时间 – 自动生成日期时间的组件
  • date: 日期型 – 自动生成日期型的组件
  • timestamp: 时间戳 – 自动生成日期时间的组件

控制器

基类控制器

1
2
3
application/common/controller/Api.php //API接口基类控制器
application/common/controller/Backend.php //后台基类控制器
application/common/controller/Frontend.php //前台基类控制器

基础结构

在后台中我们的控制器都必须继承自\app\common\controller\Backend这个基类,其中控制器的index/add/edit/del/multi/recyclebin/destroy/restore/import/selectpage全都是可选的方法,基类的这些方法使用traits进行引入,具体位置在application/admin/library/traits/Backend.php中,CRUD生成的标准控制器如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php

namespace app\admin\controller;

/**
* 文章管理
*
* @icon fa fa-list
* @remark 用于统一管理网站的所有文章
*/
class Article extends Backend
{

protected $model = null;
protected $noNeedLogin = [];
protected $noNeedRight = ['selectpage'];

public function _initialize()
{
parent::_initialize();
}

/**
* 默认生成的控制器所继承的父类中有index/add/edit/del/multi/destroy/restore/recyclebin八个方法
* 因此在当前控制器中可不用编写增删改查的代码,如果需要自己控制这部分逻辑
* 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
*/
}

基类中所定义的方法如下,以下方法都是通过application/admin/library/traits/Backend.php引入的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
class Backend extends Controller
{
/**
* 查看
*/
public function index(){}

/**
* 添加
*/
public function add($ids = ""){}

/**
* 编辑
*/
public function edit($ids = ""){}

/**
* 删除
*/
public function del($ids = ""){}

/**
* 批量更新
*/
public function multi($ids = ""){}

/**
* 回收站
*/
public function recyclebin(){}

/**
* 真实删除
*/
public function destroy($ids = ""){}

/**
* 还原
*/
public function restore($ids = ""){}

/**
* 导入
*/
protected function import(){}

/**
* 下拉筛选
*/
public function selectpage()
{
return parent::selectpage();
}
}

属性和方法

当我们的控制器继承自app\common\controller\Backend以后,我们就可以使用以下属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/**
* 无需登录的方法,同时也就不需要鉴权了
* @var array
*/
protected $noNeedLogin = [];

/**
* 无需鉴权的方法,但需要登录
* @var array
*/
protected $noNeedRight = [];

/**
* 布局模板
* @var string
*/
protected $layout = 'default';

/**
* 权限控制类
* @var Auth
*/
protected $auth = null;

/**
* 快速搜索时执行查找的字段
*/
protected $searchFields = 'id';

/**
* 是否是关联查询
*/
protected $relationSearch = false;

/**
* 是否开启数据限制
* 支持auth/personal
* 表示按权限判断/仅限个人
* 默认为禁用,若启用请务必保证表中存在admin_id字段
*/
protected $dataLimit = false;

/**
* 数据限制字段
*/
protected $dataLimitField = 'admin_id';

/**
* 是否开启Validate验证
*/
protected $modelValidate = false;

/**
* 是否开启模型场景验证
*/
protected $modelSceneValidate = false;

/**
* Multi方法可批量修改的字段
*/
protected $multiFields = 'status';

我们可以直接在当前控制器使用$this->属性名来调用所支持的属性,也支持直接在当前控制器定义相关属性来覆盖父类的属性,同时TP5\think\Controller所支持的属性也全部支持。

基类app\common\controller\Backend中所支持的方法如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/**
* 加载语言文件
* @param string $name
*/
protected function loadlang($name)
{
}

/**
* 渲染配置信息
* @param mixed $name 键名或数组
* @param mixed $value 值
*/
protected function assignconfig($name, $value = '')
{
}

/**
* 生成查询所需要的条件,排序方式
* @param mixed $searchfields 快速查询的字段
* @param boolean $relationSearch 是否关联查询
* @return array
*/
protected function buildparams($searchfields = null, $relationSearch = null)
{
}

/**
* 获取数据限制的管理员ID
* 禁用数据限制时返回的是null
* @return mixed
*/
protected function getDataLimitAdminIds()
{
}

/**
* Selectpage的实现方法
*
* 当前方法只是一个比较通用的搜索匹配,请按需重载此方法来编写自己的搜索逻辑,$where按自己的需求写即可
* 这里示例了所有的参数,所以比较复杂,实现上自己实现只需简单的几行即可
*
*/
protected function selectpage()
{
}

关联查询

目前FastAdmin后台index方法支持一对一关联查询,比如我们一篇文章有归属分类,我们在列出数据时需要同时列表文章分类名称。

首先我们需要在当前控制器中添加以下属性

1
protected $relationSearch = true;

然后我们修改控制器的index方法,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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();
}

然后在控制器对应的model(非关联model)中添加以下代码:

1
2
3
4
public function category()
{
return $this->belongsTo('Category', 'category_id')->setEagerlyType(0);
}

视图渲染

1
2
3
4
5
6
7
8
//渲染站点配置
$this->assign('site', $site);
//渲染配置信息
$this->assign('config', $config);
//渲染权限对象
$this->assign('auth', $this->auth);
//渲染管理员对象
$this->assign('admin', Session::get('admin'));

模块

前台

基类控制器

前台的所有功能模块的控制器都是继承于application/common/controller/Frontend.php这个基类控制器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
* 布局模板
* @var string
*/
protected $layout = '';

/**
* 无需登录的方法,同时也就不需要鉴权了
* @var array
*/
protected $noNeedLogin = [];

/**
* 无需鉴权的方法,但需要登录
* @var array
*/
protected $noNeedRight = [];

/**
* 权限Auth
* @var Auth
*/
protected $auth = null;

其次我们来看下基类的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* 加载语言文件
* @param string $name
*/
protected function loadlang($name)
{
}

/**
* 渲染配置信息
* @param mixed $name 键名或数组
* @param mixed $value 值
*/
protected function assignconfig($name, $value = '')
{
}

API

基类解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
* @var array 前置操作方法列表
*/
protected $beforeActionList = [];

/**
* 无需登录的方法,同时也就不需要鉴权了
* @var array
*/
protected $noNeedLogin = [];

/**
* 无需鉴权的方法,但需要登录
* @var array
*/
protected $noNeedRight = [];

/**
* 权限Auth
* @var Auth
*/
protected $auth = null;

其次我们来看下基类的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/**
* 加载语言文件
* @param string $name
*/
protected function loadlang($name)
{
}

/**
* 操作成功返回的数据
* @param string $msg 提示信息
* @param mixed $data 要返回的数据
* @param int $code 错误码,默认为1
* @param string $type 输出类型
* @param array $header 发送的 Header 信息
*/
protected function success($msg = '', $data = null, $code = 1, $type = null, array $header = [])
{
}

/**
* 操作失败返回的数据
* @param string $msg 提示信息
* @param mixed $data 要返回的数据
* @param int $code 错误码,默认为0
* @param string $type 输出类型
* @param array $header 发送的 Header 信息
*/
protected function error($msg = '', $data = null, $code = 0, $type = null, array $header = [])
{
}

/**
* 返回封装后的 API 数据到客户端
* @access protected
* @param mixed $msg 提示信息
* @param mixed $data 要返回的数据
* @param int $code 错误码,默认为0
* @param string $type 输出类型,支持json/xml/jsonp
* @param array $header 发送的 Header 信息
* @return void
* @throws HttpResponseException
*/
protected function result($msg, $data = null, $code = 0, $type = null, array $header = [])
{
}

/**
* 前置操作
* @access protected
* @param string $method 前置操作方法名
* @param array $options 调用参数 ['only'=>[...]] 或者 ['except'=>[...]]
* @return void
*/
protected function beforeAction($method, $options = [])
{
}

/**
* 验证数据
* @access protected
* @param array $data 数据
* @param string|array $validate 验证器名或者验证规则数组
* @param array $message 提示信息
* @param bool $batch 是否批量验证
* @param mixed $callback 回调方法(闭包)
* @return array|string|true
* @throws ValidateException
*/
protected function validate($data, $validate, $message = [], $batch = false, $callback = null)
{
}

后台

流程介绍

首先需要知道FastAdmin的后台模块是 禁用了路由功能 的,因此后台的操作都是根据URL进行分段解析,例如我们请求的是

1
https://demo.fastadmin.net/admin/

则调用的是默认控制器Index.php中的默认方法index

如果我们请求的是

1
https://demo.fastadmin.net/admin/dashboard/index

则调用的是Dashboard.php中的index方法

基类解析

后台的所有功能模块的控制器都是继承于application/common/controller/Backend.php这个基类控制器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/**
* 无需登录的方法,同时也就不需要鉴权了
* @var array
*/
protected $noNeedLogin = [];

/**
* 无需鉴权的方法,但需要登录
* @var array
*/
protected $noNeedRight = [];

/**
* 布局模板
* @var string
*/
protected $layout = 'default';

/**
* 权限控制类
* @var Auth
*/
protected $auth = null;

/**
* 快速搜索时执行查找的字段
*/
protected $searchFields = 'id';

/**
* 是否是关联查询
*/
protected $relationSearch = false;

/**
* 是否开启数据限制
* 支持auth/personal
* 表示按权限判断/仅限个人
* 默认为禁用,若启用请务必保证表中存在admin_id字段
*/
protected $dataLimit = false;

/**
* 数据限制字段
*/
protected $dataLimitField = 'admin_id';

/**
* 数据限制开启时自动填充限制字段值
*/
protected $dataLimitFieldAutoFill = true;

/**
* 是否开启Validate验证
*/
protected $modelValidate = false;

/**
* 是否开启模型场景验证
*/
protected $modelSceneValidate = false;

/**
* Multi方法可批量修改的字段
*/
protected $multiFields = 'status';

/**
* 导入文件首行类型
* 支持comment/name
* 表示注释或字段名
*/
protected $importHeadType = 'comment';

其次我们来看下通用的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/**
* 加载语言文件
* @param string $name
*/
protected function loadlang($name)
{

}

/**
* 渲染配置信息
* @param mixed $name 键名或数组
* @param mixed $value 值
*/
protected function assignconfig($name, $value = '')
{

}

/**
* 生成查询所需要的条件,排序方式
* @param mixed $searchfields 快速查询的字段
* @param boolean $relationSearch 是否关联查询
* @return array
*/
protected function buildparams($searchfields = null, $relationSearch = null)
{

}

/**
* 获取数据限制的管理员ID
* 禁用数据限制时返回的是null
* @return mixed
*/
protected function getDataLimitAdminIds()
{

}

/**
* Selectpage的实现方法
*
* 当前方法只是一个比较通用的搜索匹配,请按需重载此方法来编写自己的搜索逻辑,$where按自己的需求写即可
* 这里示例了所有的参数,所以比较复杂,实现上自己实现只需简单的几行即可
*
*/
protected function selectpage()
{
}

公共

Token验证

  • 获取Token信息
1
Token::get('c2259a37-5fee-4c4b-93b0-1d7313e1d1ac');
  • 设置会员的Token信息
1
Token::set('c2259a37-5fee-4c4b-93b0-1d7313e1d1ac', 1, 3600);
  • 判断会员Token是否可用
1
Token::check('c2259a37-5fee-4c4b-93b0-1d7313e1d1ac', 1);
  • 删除单个会员Token
1
Token::delete('c2259a37-5fee-4c4b-93b0-1d7313e1d1ac');
  • 删除指定会员的所有Token
1
Token::clear(1);

邮件发送

FastAdmin中的邮件发送采用phpmailer进行邮件发送,在使用邮件发送功能前请先在后台常规管理->系统配置中配置好邮件的相关信息。

使用示例

  • 首先我们需要采用单例或实例化一个Email对象
1
$email = new \app\common\library\Email;
  • 其次我们可以设置邮件主题正文、接收者、标题等信息,比如
1
$email->subject('这里是邮件标题')->to('youremail@163.com')->message('这里是邮件正文')->send();
  • 如果我们邮件发送失败,想获取错误的详情,可使用
1
$email->getError();

短信发送

在使用短信发送之前,务必在后台安装好我们短信服务商的插件,如果我们要使用的服务商未提供有FastAdmin的插件,我们则需要自己开发一个,或注册一个sms_sendsms_check的事件用于我们的发送和检测操作。

使用示例

  • 首先最常用的是发送短信,比如我们发送一个注册验证码
1
Sms::send('13888888888', '1234', 'register');
  • 发送以后我们有时需要检测验证码是否正确,则可以使用
1
Sms::check('1388888888', '1234', 'register');
  • 当然有些时候我们还需要发送营销短信或通知,则可以使用
1
Sms::notice('1388888888', '消息内容', 'SMS_10001');
  • 如果我们需要清空指定手机号的验证码,则可以使用
1
Sms::flush('13888888888', 'register');

辅助函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/**
* 获取语言变量值
* @param string $name 语言变量名
* @param array $vars 动态变量值
* @param string $lang 语言
* @return mixed
*/
function __($name, $vars = [], $lang = '')
{
}

/**
* 将字节转换为可读文本
* @param int $size 大小
* @param string $delimiter 分隔符
* @return string
*/
function format_bytes($size, $delimiter = '')
{
}

/**
* 将时间戳转换为日期时间
* @param int $time 时间戳
* @param string $format 日期时间格式
* @return string
*/
function datetime($time, $format = 'Y-m-d H:i:s')
{
}

/**
* 获取语义化时间
* @param int $time 时间
* @param int $local 本地时间
* @return string
*/
function human_date($time, $local = null)
{
}

/**
* 获取上传资源的CDN的地址
* @param string $url 资源相对地址
* @return string
*/
function cdnurl($url)
{
}

/**
* 判断文件或文件夹是否可写
* @param string $file 文件或目录
* @return bool
*/
function is_really_writable($file)
{
}
/**
* 删除文件夹
* @param string $dirname 目录
* @param bool $withself 是否删除自身
* @return boolean
*/
function rmdirs($dirname, $withself = true)
{
}

/**
* 复制文件夹
* @param string $source 源文件夹
* @param string $dest 目标文件夹
*/
function copydirs($source, $dest)
{
}

function mb_ucfirst($string)
{
}

/**
* 附加关联字段数据
* @param array $items 数据列表
* @param mixed $fields 渲染的来源字段
* @return array
*/
function addtion($items, $fields)
{
}

/**
* 返回打印数组结构
* @param string $var 数组
* @param string $indent 缩进字符
* @return string
*/
function var_export_short($var, $indent = "")
{
}

前端

基础介绍

FastAdmin的前端部分使用或涉及到主要是RequireJS,jQuery,AdminLTE,Bower,Less,CSS,其中

  • RequireJS主要是用于JS的模块化加载

  • Bower主要用于管理第三方插件。

  • Less主要是用于我们编写LESS和编译成CSS代码

在阅读接下来的文档之前最好先简单的了解下RequireJSBower,而jQuery是我们必须要掌握的工具库

FastAdmin中前端的最常用的第三方插件有Layer,Toastr,Layer用于弹窗Toastr用于提示

组件

FastAdmin默认集成了多个第三方组合,如表单验证文件上传下拉列表时间选择城市选择Selectpage,所有的组件都必须使用Form.api.bindevent("form[role=form]")来进行初始化,如果不进行初始化是无法对相应组件进行渲染和事件绑定。

https://doc.fastadmin.net/docs/component.html

文件上传

动态下拉列表

富文本编辑器

表单验证

城市选择

日期时间

下拉列表

Powered by Hexo and Hexo-theme-hiker

Copyright © 2017 - 2022 Keep It Simple And Stupid All Rights Reserved.

访客数 : | 访问量 :