作者 郭文星

123

正在显示 53 个修改的文件 包含 0 行增加3675 行删除
1 -{"files":["application\\admin\\controller\\example\\Bootstraptable.php","application\\admin\\controller\\example\\Colorbadge.php","application\\admin\\controller\\example\\Controllerjump.php","application\\admin\\controller\\example\\Customform.php","application\\admin\\controller\\example\\Customsearch.php","application\\admin\\controller\\example\\Cxselect.php","application\\admin\\controller\\example\\Echarts.php","application\\admin\\controller\\example\\Multitable.php","application\\admin\\controller\\example\\Relationmodel.php","application\\admin\\controller\\example\\Tablelink.php","application\\admin\\controller\\example\\Tabletemplate.php","application\\admin\\model\\Area.php","application\\admin\\view\\example\\bootstraptable\\detail.html","application\\admin\\view\\example\\bootstraptable\\edit.html","application\\admin\\view\\example\\bootstraptable\\index.html","application\\admin\\view\\example\\colorbadge\\index.html","application\\admin\\view\\example\\controllerjump\\index.html","application\\admin\\view\\example\\customform\\index.html","application\\admin\\view\\example\\customsearch\\index.html","application\\admin\\view\\example\\cxselect\\index.html","application\\admin\\view\\example\\echarts\\index.html","application\\admin\\view\\example\\multitable\\index.html","application\\admin\\view\\example\\relationmodel\\index.html","application\\admin\\view\\example\\tablelink\\index.html","application\\admin\\view\\example\\tabletemplate\\index.html","public\\assets\\js\\backend\\example\\bootstraptable.js","public\\assets\\js\\backend\\example\\colorbadge.js","public\\assets\\js\\backend\\example\\controllerjump.js","public\\assets\\js\\backend\\example\\customform.js","public\\assets\\js\\backend\\example\\customsearch.js","public\\assets\\js\\backend\\example\\cxselect.js","public\\assets\\js\\backend\\example\\echarts.js","public\\assets\\js\\backend\\example\\multitable.js","public\\assets\\js\\backend\\example\\relationmodel.js","public\\assets\\js\\backend\\example\\tablelink.js","public\\assets\\js\\backend\\example\\tabletemplate.js","public\\assets\\addons\\example\\css\\common.css","public\\assets\\addons\\example\\img\\200x200.png","public\\assets\\addons\\example\\img\\plus.png","public\\assets\\addons\\example\\js\\async.js"],"license":"regular","licenseto":"15629","licensekey":"bhPvgCDzwu3MR19F ksNc2PNUvdOFCKHwzx08FQ==","domains":["netcar123.com"],"licensecodes":[],"validations":["04fc4fb96e772ed591aa668d537fdaad"],"menus":["example","example\/bootstraptable","example\/bootstraptable\/index","example\/bootstraptable\/detail","example\/bootstraptable\/change","example\/bootstraptable\/del","example\/bootstraptable\/multi","example\/customsearch","example\/customsearch\/index","example\/customsearch\/del","example\/customsearch\/multi","example\/customform","example\/customform\/index","example\/tablelink","example\/tablelink\/index","example\/colorbadge","example\/colorbadge\/index","example\/colorbadge\/del","example\/colorbadge\/multi","example\/controllerjump","example\/controllerjump\/index","example\/controllerjump\/del","example\/controllerjump\/multi","example\/cxselect","example\/cxselect\/index","example\/cxselect\/del","example\/cxselect\/multi","example\/multitable","example\/multitable\/index","example\/multitable\/del","example\/multitable\/multi","example\/relationmodel","example\/relationmodel\/index","example\/relationmodel\/del","example\/relationmodel\/multi","example\/tabletemplate","example\/tabletemplate\/index","example\/tabletemplate\/detail","example\/tabletemplate\/del","example\/tabletemplate\/multi","example\/echarts","example\/echarts\/index"]}  
1 -<?php  
2 -  
3 -namespace addons\example;  
4 -  
5 -use app\common\library\Menu;  
6 -use think\Addons;  
7 -  
8 -/**  
9 - * Example  
10 - */  
11 -class Example extends Addons  
12 -{  
13 -  
14 - /**  
15 - * 插件安装方法  
16 - * @return bool  
17 - */  
18 - public function install()  
19 - {  
20 - $menu = [  
21 - [  
22 - 'name' => 'example',  
23 - 'title' => '开发示例管理',  
24 - 'icon' => 'fa fa-magic',  
25 - 'sublist' => [  
26 - [  
27 - 'name' => 'example/bootstraptable',  
28 - 'title' => '表格完整示例',  
29 - 'icon' => 'fa fa-table',  
30 - 'sublist' => [  
31 - ['name' => 'example/bootstraptable/index', 'title' => '查看'],  
32 - ['name' => 'example/bootstraptable/detail', 'title' => '详情'],  
33 - ['name' => 'example/bootstraptable/change', 'title' => '变更'],  
34 - ['name' => 'example/bootstraptable/del', 'title' => '删除'],  
35 - ['name' => 'example/bootstraptable/multi', 'title' => '批量更新'],  
36 - ]  
37 - ],  
38 - [  
39 - 'name' => 'example/customsearch',  
40 - 'title' => '自定义搜索',  
41 - 'icon' => 'fa fa-table',  
42 - 'sublist' => [  
43 - ['name' => 'example/customsearch/index', 'title' => '查看'],  
44 - ['name' => 'example/customsearch/del', 'title' => '删除'],  
45 - ['name' => 'example/customsearch/multi', 'title' => '批量更新'],  
46 - ]  
47 - ],  
48 - [  
49 - 'name' => 'example/customform',  
50 - 'title' => '自定义表单示例',  
51 - 'icon' => 'fa fa-edit',  
52 - 'sublist' => [  
53 - ['name' => 'example/customform/index', 'title' => '查看'],  
54 - ]  
55 - ],  
56 - [  
57 - 'name' => 'example/tablelink',  
58 - 'title' => '表格联动示例',  
59 - 'icon' => 'fa fa-table',  
60 - 'remark' => '点击左侧日志列表,右侧的表格数据会显示指定管理员的日志列表',  
61 - 'sublist' => [  
62 - ['name' => 'example/tablelink/index', 'title' => '查看'],  
63 - ]  
64 - ],  
65 - [  
66 - 'name' => 'example/colorbadge',  
67 - 'title' => '彩色角标',  
68 - 'icon' => 'fa fa-table',  
69 - 'remark' => '左侧彩色的角标会根据当前数据量的大小进行更新',  
70 - 'sublist' => [  
71 - ['name' => 'example/colorbadge/index', 'title' => '查看'],  
72 - ['name' => 'example/colorbadge/del', 'title' => '删除'],  
73 - ['name' => 'example/colorbadge/multi', 'title' => '批量更新'],  
74 - ]  
75 - ],  
76 - [  
77 - 'name' => 'example/controllerjump',  
78 - 'title' => '控制器间跳转',  
79 - 'icon' => 'fa fa-table',  
80 - 'remark' => '点击IP地址可以跳转到新的选项卡中查看指定IP的数据',  
81 - 'sublist' => [  
82 - ['name' => 'example/controllerjump/index', 'title' => '查看'],  
83 - ['name' => 'example/controllerjump/del', 'title' => '删除'],  
84 - ['name' => 'example/controllerjump/multi', 'title' => '批量更新'],  
85 - ]  
86 - ],  
87 - [  
88 - 'name' => 'example/cxselect',  
89 - 'title' => '多级联动',  
90 - 'icon' => 'fa fa-table',  
91 - 'remark' => '基于jquery.cxselect实现的多级联动',  
92 - 'sublist' => [  
93 - ['name' => 'example/cxselect/index', 'title' => '查看'],  
94 - ['name' => 'example/cxselect/del', 'title' => '删除'],  
95 - ['name' => 'example/cxselect/multi', 'title' => '批量更新'],  
96 - ]  
97 - ],  
98 - [  
99 - 'name' => 'example/multitable',  
100 - 'title' => '多表格示例',  
101 - 'icon' => 'fa fa-table',  
102 - 'remark' => '展示在一个页面显示多个Bootstrap-table表格',  
103 - 'sublist' => [  
104 - ['name' => 'example/multitable/index', 'title' => '查看'],  
105 - ['name' => 'example/multitable/del', 'title' => '删除'],  
106 - ['name' => 'example/multitable/multi', 'title' => '批量更新'],  
107 - ]  
108 - ],  
109 - [  
110 - 'name' => 'example/relationmodel',  
111 - 'title' => '关联模型示例',  
112 - 'icon' => 'fa fa-table',  
113 - 'remark' => '列表中的头像、用户名和昵称字段均从关联表中取出',  
114 - 'sublist' => [  
115 - ['name' => 'example/relationmodel/index', 'title' => '查看'],  
116 - ['name' => 'example/relationmodel/del', 'title' => '删除'],  
117 - ['name' => 'example/relationmodel/multi', 'title' => '批量更新'],  
118 - ]  
119 - ],  
120 - [  
121 - 'name' => 'example/tabletemplate',  
122 - 'title' => '表格模板示例',  
123 - 'icon' => 'fa fa-table',  
124 - 'remark' => '',  
125 - 'sublist' => [  
126 - ['name' => 'example/tabletemplate/index', 'title' => '查看'],  
127 - ['name' => 'example/tabletemplate/detail', 'title' => '详情'],  
128 - ['name' => 'example/tabletemplate/del', 'title' => '删除'],  
129 - ['name' => 'example/tabletemplate/multi', 'title' => '批量更新'],  
130 - ]  
131 - ],  
132 - [  
133 - 'name' => 'example/echarts',  
134 - 'title' => '统计图表示例',  
135 - 'icon' => 'fa fa-bar-chart',  
136 - 'sublist' => [  
137 - ['name' => 'example/echarts/index', 'title' => '查看'],  
138 - ]  
139 - ],  
140 - ]  
141 - ]  
142 - ];  
143 - Menu::create($menu);  
144 - return true;  
145 - }  
146 -  
147 - /**  
148 - * 插件卸载方法  
149 - * @return bool  
150 - */  
151 - public function uninstall()  
152 - {  
153 - Menu::delete('example');  
154 - return true;  
155 - }  
156 -  
157 - /**  
158 - * 插件启用方法  
159 - */  
160 - public function enable()  
161 - {  
162 - Menu::enable('example');  
163 - }  
164 -  
165 - /**  
166 - * 插件禁用方法  
167 - */  
168 - public function disable()  
169 - {  
170 - Menu::disable('example');  
171 - }  
172 -  
173 -}  
1 -<?php  
2 -  
3 -return [  
4 - [  
5 - 'name' => 'condition1',  
6 - 'title' => '条件1',  
7 - 'type' => 'radio',  
8 - 'group' => '选项组一',  
9 - 'content' => [  
10 - 'value1' => '值1',  
11 - 'value2' => '值2',  
12 - ],  
13 - 'value' => 'value2',  
14 - 'rule' => 'required',  
15 - 'msg' => '',  
16 - 'tip' => '',  
17 - 'ok' => '',  
18 - 'extend' => '',  
19 - ],  
20 - [  
21 - 'name' => 'condition2',  
22 - 'title' => '条件2',  
23 - 'type' => 'checkbox',  
24 - 'group' => '选项组一',  
25 - 'visible' => 'condition1=value1',  
26 - 'content' => [  
27 - 'value1' => '值1',  
28 - 'value2' => '值2',  
29 - 'value3' => '值3',  
30 - ],  
31 - 'value' => 'value1,value2',  
32 - 'rule' => 'required',  
33 - 'msg' => '',  
34 - 'tip' => '',  
35 - 'ok' => '',  
36 - 'extend' => '',  
37 - ],  
38 - [  
39 - 'name' => 'condition3',  
40 - 'title' => '条件3',  
41 - 'type' => 'select',  
42 - 'group' => '选项组一',  
43 - 'visible' => 'condition1=value2',  
44 - 'content' => [  
45 - 'value1' => '值1',  
46 - 'value2' => '值2',  
47 - ],  
48 - 'value' => 'value1',  
49 - 'rule' => 'required',  
50 - 'msg' => '',  
51 - 'tip' => '',  
52 - 'ok' => '',  
53 - 'extend' => '',  
54 - ],  
55 - [  
56 - 'name' => 'condition4',  
57 - 'title' => '条件4',  
58 - 'type' => 'selects',  
59 - 'group' => '选项组一',  
60 - 'content' => [  
61 - 'value1' => '值1',  
62 - 'value2' => '值2',  
63 - 'value3' => '值3',  
64 - ],  
65 - 'value' => 'value1,value2',  
66 - 'rule' => 'required',  
67 - 'msg' => '',  
68 - 'tip' => '',  
69 - 'ok' => '',  
70 - 'extend' => '',  
71 - ],  
72 - [  
73 - 'name' => 'title',  
74 - 'title' => '标题',  
75 - 'type' => 'string',  
76 - 'group' => '选项组一',  
77 - 'visible' => 'condition3=value1',  
78 - 'content' => [],  
79 - 'value' => '3x',  
80 - 'rule' => 'required',  
81 - 'msg' => '',  
82 - 'tip' => '',  
83 - 'ok' => '',  
84 - 'extend' => '',  
85 - ],  
86 - [  
87 - 'name' => 'domain',  
88 - 'title' => '绑定二级域名前缀',  
89 - 'type' => 'string',  
90 - 'group' => '选项组二',  
91 - 'content' => [],  
92 - 'value' => '',  
93 - 'rule' => '',  
94 - 'msg' => '',  
95 - 'tip' => '',  
96 - 'ok' => '',  
97 - 'extend' => '',  
98 - ],  
99 - [  
100 - 'name' => 'rewrite',  
101 - 'title' => '伪静态',  
102 - 'type' => 'array',  
103 - 'group' => '选项组二',  
104 - 'content' => [],  
105 - 'value' => [  
106 - 'index/index' => '/example$',  
107 - 'demo/index' => '/example/d/[:name]',  
108 - 'demo/demo1' => '/example/d1/[:name]',  
109 - 'demo/demo2' => '/example/d2/[:name]',  
110 - ],  
111 - 'rule' => 'required',  
112 - 'msg' => '',  
113 - 'tip' => '',  
114 - 'ok' => '',  
115 - 'extend' => '',  
116 - ],  
117 - [  
118 - 'name' => '__tips__',  
119 - 'title' => '温馨提示',  
120 - 'type' => 'string',  
121 - 'content' => [],  
122 - 'value' => '这里是提示的文本内容',  
123 - 'rule' => '',  
124 - 'msg' => '',  
125 - 'tip' => '',  
126 - 'ok' => '',  
127 - 'extend' => '',  
128 - ],  
129 -];  
1 -<?php  
2 -  
3 -namespace addons\example\controller;  
4 -  
5 -use think\addons\Controller;  
6 -  
7 -/**  
8 - * 测试控制器  
9 - */  
10 -class Demo extends Controller  
11 -{  
12 -  
13 - protected $layout = 'default';  
14 - protected $noNeedLogin = ['index', 'demo1'];  
15 - protected $noNeedRight = ['*'];  
16 -  
17 - public function index()  
18 - {  
19 - return $this->view->fetch();  
20 - }  
21 -  
22 - public function demo1()  
23 - {  
24 - return $this->view->fetch();  
25 - }  
26 -  
27 - public function demo2()  
28 - {  
29 - return $this->view->fetch();  
30 - }  
31 -  
32 -}  
1 -<?php  
2 -  
3 -namespace addons\example\controller;  
4 -  
5 -use think\addons\Controller;  
6 -  
7 -class Index extends Controller  
8 -{  
9 -  
10 - protected $layout = 'default';  
11 -  
12 - public function index()  
13 - {  
14 - return $this->view->fetch();  
15 - }  
16 -  
17 -}  
1 -name = example  
2 -title = 开发示例  
3 -intro = FastAdmin多个开发示例  
4 -author = FastAdmin  
5 -website = https://www.fastadmin.net  
6 -version = 1.1.3  
7 -state = 1  
8 -url = /addons/example  
9 -license = regular  
10 -licenseto = 15629  
此 diff 太大无法显示。
1 -<!-- Page Content -->  
2 - <div class="container">  
3 -  
4 - <!-- Page Heading/Breadcrumbs -->  
5 - <div class="row">  
6 - <div class="col-lg-12">  
7 - <h1 class="page-header">无需登录页面  
8 - <small>开发者示例</small>  
9 - </h1>  
10 - <ol class="breadcrumb">  
11 - <li><a href="{:addon_url('example/index/index')}">插件首页</a>  
12 - </li>  
13 - <li class="active">无需登录页面</li>  
14 - </ol>  
15 - </div>  
16 - </div>  
17 - <!-- /.row -->  
18 -  
19 - <!-- Content Row -->  
20 - <div class="row">  
21 - <div class="col-lg-12">  
22 - <p class="well">当前登录页面无需登录即可查看,当前请求的name值为:{$Request.param.name|htmlentities}</p>  
23 - {if $user}  
24 - <p class="well text-danger">但是如果你登录后可以浏览到这段隐藏的信息</p>  
25 - {/if}  
26 - </div>  
27 - </div>  
28 - <!-- /.row -->  
29 -  
30 - <hr>  
31 -  
32 - </div>  
33 - <!-- /.container -->  
1 -<!-- Page Content -->  
2 -<div class="container">  
3 -  
4 - <!-- Page Heading/Breadcrumbs -->  
5 - <div class="row">  
6 - <div class="col-lg-12">  
7 - <h1 class="page-header">需登录页面  
8 - <small>开发者示例</small>  
9 - </h1>  
10 - <ol class="breadcrumb">  
11 - <li><a href="{:addon_url('example/index/index')}">插件首页</a>  
12 - </li>  
13 - <li class="active">需登录页面</li>  
14 - </ol>  
15 - </div>  
16 - </div>  
17 - <!-- /.row -->  
18 -  
19 - <!-- Content Row -->  
20 - <div class="row">  
21 - <div class="col-lg-12">  
22 - <p class="well">当前登录页面需要登录后才可以查看,你可以退出后再访问此页面,会提醒登录,当前请求的name值为:{$Request.param.name|htmlentities}</p>  
23 - <p class="well">你好!{$user.nickname|htmlentities},<a href="{:url('index/user/logout')}">注销登录</a></p>  
24 - </div>  
25 - </div>  
26 - <!-- /.row -->  
27 -  
28 - <hr>  
29 -  
30 -</div>  
31 -<!-- /.container -->  
1 -<!-- Page Content -->  
2 - <div class="container">  
3 -  
4 - <!-- Page Heading/Breadcrumbs -->  
5 - <div class="row">  
6 - <div class="col-lg-12">  
7 - <h1 class="page-header">使用模板标签和变量  
8 - <small>开发者示例</small>  
9 - </h1>  
10 - <ol class="breadcrumb">  
11 - <li><a href="{:addon_url('example/index/index')}">插件首页</a>  
12 - </li>  
13 - <li class="active">使用模板标签和变量</li>  
14 - </ol>  
15 - </div>  
16 - </div>  
17 - <!-- /.row -->  
18 -  
19 - <!-- Content Row -->  
20 - <div class="row">  
21 - <div class="col-lg-12">  
22 - <p class="well">当前请求的name值为:{$Request.param.name|htmlentities}</p>  
23 - {literal}  
24 - <pre>  
25 -在插件视图中可以使用所有ThinkPHP5内支持的模板标签和变量,如  
26 -  
27 -{$Think.server.script_name} // 输出$_SERVER['SCRIPT_NAME']变量  
28 -{$Think.session.user_id} // 输出$_SESSION['user_id']变量  
29 -{$Think.get.pageNumber} // 输出$_GET['pageNumber']变量  
30 -{$Think.cookie.name} // 输出$_COOKIE['name']变量  
31 -  
32 -// 调用Request对象的get方法 传入参数为id  
33 -{$Request.get.id}  
34 -// 调用Request对象的param方法 传入参数为name  
35 -{$Request.param.name}  
36 -// 调用Request对象的param方法 传入参数为user.nickname  
37 -{$Request.param.user.nickname}  
38 -// 调用Request对象的root方法  
39 -{$Request.root}  
40 -// 调用Request对象的root方法,并且传入参数true  
41 -{$Request.root.true}  
42 -// 调用Request对象的path方法  
43 -{$Request.path}  
44 -// 调用Request对象的module方法  
45 -{$Request.module}  
46 -// 调用Request对象的controller方法  
47 -{$Request.controller}  
48 -// 调用Request对象的action方法  
49 -{$Request.action}  
50 -// 调用Request对象的ext方法  
51 -{$Request.ext}  
52 -// 调用Request对象的host方法  
53 -{$Request.host}  
54 -// 调用Request对象的ip方法  
55 -{$Request.ip}  
56 -// 调用Request对象的header方法  
57 -{$Request.header.accept-encoding}  
58 - </pre>  
59 - {/literal}  
60 - </div>  
61 - </div>  
62 - <!-- /.row -->  
63 -  
64 - <hr>  
65 -  
66 - </div>  
67 - <!-- /.container -->  
1 -<!-- Header Carousel -->  
2 -<header id="myCarousel" class="carousel slide">  
3 - <!-- Indicators -->  
4 - <ol class="carousel-indicators">  
5 - <li data-target="#myCarousel" data-slide-to="0" class="active"></li>  
6 - </ol>  
7 -  
8 - <!-- Wrapper for slides -->  
9 - <div class="carousel-inner">  
10 - <div class="item active">  
11 - <a href="javascript:">  
12 - <div class="fill" style="background-image:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzOTMiIGhlaWdodD0iMjI2Ij48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJyZ2IoNjMsIDE0MywgODUpIi8+PHBvbHlsaW5lIHBvaW50cz0iMCwgMCwgNjUuNTI5MjU1NTUzMDIzLCAzNy44MzMzMzMzMzMzMzMsIDAsIDc1LjY2NjY2NjY2NjY2NywgMCwgMCIgZmlsbD0iI2RkZCIgZmlsbC1vcGFjaXR5PSIwLjE0MTMzMzMzMzMzMzMzIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1vcGFjaXR5PSIwLjAyIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLCAtMzcuODMzMzMzMzMzMzMzKSByb3RhdGUoMTgwLCAzMi43NjQ2Mjc3NzY1MTEsIDM3LjgzMzMzMzMzMzMzMykiLz48cG9seWxpbmUgcG9pbnRzPSIwLCAwLCA2NS41MjkyNTU1NTMwMjMsIDM3LjgzMzMzMzMzMzMzMywgMCwgNzUuNjY2NjY2NjY2NjY3LCAwLCAwIiBmaWxsPSIjZGRkIiBmaWxsLW9wYWNpdHk9IjAuMTQxMzMzMzMzMzMzMzMiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLW9wYWNpdHk9IjAuMDIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsIDE4OS4xNjY2NjY2NjY2Nykgcm90YXRlKDE4MCwgMzIuNzY0NjI3Nzc2NTExLCAzNy44MzMzMzMzMzMzMzMpIi8+PHBvbHlsaW5lIHBvaW50cz0iMCwgMCwgNjUuNTI5MjU1NTUzMDIzLCAzNy44MzMzMzMzMzMzMzMsIDAsIDc1LjY2NjY2NjY2NjY2NywgMCwgMCIgZmlsbD0iIzIyMiIgZmlsbC1vcGFjaXR5PSIwLjA2MzMzMzMzMzMzMzMzMyIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utb3BhY2l0eT0iMC4wMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNjUuNTI5MjU1NTUzMDIzLCAtMzcuODMzMzMzMzMzMzMzKSByb3RhdGUoMCwgMzIuNzY0NjI3Nzc2NTExLCAzNy44MzMzMzMzMzMzMzMpIi8+PHBvbHlsaW5lIHBvaW50cz0iMCwgMCwgNjUuNTI5MjU1NTUzMDIzLCAzNy44MzMzMzMzMzMzMzMsIDAsIDc1LjY2NjY2NjY2NjY2NywgMCwgMCIgZmlsbD0iIzIyMiIgZmlsbC1vcGFjaXR5PSIwLjA2MzMzMzMzMzMzMzMzMyIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utb3BhY2l0eT0iMC4wMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNjUuNTI5MjU1NTUzMDIzLCAxODkuMTY2NjY2NjY2NjcpIHJvdGF0ZSgwLCAzMi43NjQ2Mjc3NzY1MTEsIDM3LjgzMzMzMzMzMzMzMykiLz48cG9seWxpbmUgcG9pbnRzPSIwLCAwLCA2NS41MjkyNTU1NTMwMjMsIDM3LjgzMzMzMzMzMzMzMywgMCwgNzUuNjY2NjY2NjY2NjY3LCAwLCAwIiBmaWxsPSIjMjIyIiBmaWxsLW9wYWNpdHk9IjAuMDgwNjY2NjY2NjY2NjY3IiBzdHJva2U9IiMwMDAiIHN0cm9rZS1vcGFjaXR5PSIwLjAyIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzEuMDU4NTExMTA2MDUsIC0zNy44MzMzMzMzMzMzMzMpIHJvdGF0ZSgxODAsIDMyLjc2NDYyNzc3NjUxMSwgMzcuODMzMzMzMzMzMzMzKSIvPjxwb2x5bGluZSBwb2ludHM9IjAsIDAsIDY1LjUyOTI1NTU1MzAyMywgMzcuODMzMzMzMzMzMzMzLCAwLCA3NS42NjY2NjY2NjY2NjcsIDAsIDAiIGZpbGw9IiMyMjIiIGZpbGwtb3BhY2l0eT0iMC4wODA2NjY2NjY2NjY2NjciIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLW9wYWNpdHk9IjAuMDIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzMS4wNTg1MTExMDYwNSwgMTg5LjE2NjY2NjY2NjY3KSByb3RhdGUoMTgwLCAzMi43NjQ2Mjc3NzY1MTEsIDM3LjgzMzMzMzMzMzMzMykiLz48cG9seWxpbmUgcG9pbnRzPSIwLCAwLCA2NS41MjkyNTU1NTMwMjMsIDM3LjgzMzMzMzMzMzMzMywgMCwgNzUuNjY2NjY2NjY2NjY3LCAwLCAwIiBmaWxsPSIjMjIyIiBmaWxsLW9wYWNpdHk9IjAuMDQ2IiBzdHJva2U9IiMwMDAiIHN0cm9rZS1vcGFjaXR5PSIwLjAyIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxOTYuNTg3NzY2NjU5MDcsIC0zNy44MzMzMzMzMzMzMzMpIHJvdGF0ZSgwLCAzMi43NjQ2Mjc3NzY1MTEsIDM3LjgzMzMzMzMzMzMzMykiLz48cG9seWxpbmUgcG9pbnRzPSIwLCAwLCA2NS41MjkyNTU1NTMwMjMsIDM3LjgzMzMzMzMzMzMzMywgMCwgNzUuNjY2NjY2NjY2NjY3LCAwLCAwIiBmaWxsPSIjMjIyIiBmaWxsLW9wYWNpdHk9IjAuMDQ2IiBzdHJva2U9IiMwMDAiIHN0cm9rZS1vcGFjaXR5PSIwLjAyIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxOTYuNTg3NzY2NjU5MDcsIDE4OS4xNjY2NjY2NjY2Nykgcm90YXRlKDAsIDMyLjc2NDYyNzc3NjUxMSwgMzcuODMzMzMzMzMzMzMzKSIvPjxwb2x5bGluZSBwb2ludHM9IjAsIDAsIDY1LjUyOTI1NTU1MzAyMywgMzcuODMzMzMzMzMzMzMzLCAwLCA3NS42NjY2NjY2NjY2NjcsIDAsIDAiIGZpbGw9IiNkZGQiIGZpbGwtb3BhY2l0eT0iMC4wODkzMzMzMzMzMzMzMzMiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLW9wYWNpdHk9IjAuMDIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI2Mi4xMTcwMjIyMTIwOSwgLTM3LjgzMzMzMzMzMzMzMykgcm90YXRlKDE4MCwgMzIuNzY0NjI3Nzc2NTExLCAzNy44MzMzMzMzMzMzMzMpIi8+PHBvbHlsaW5lIHBvaW50cz0iMCwgMCwgNjUuNTI5MjU1NTUzMDIzLCAzNy44MzMzMzMzMzMzMzMsIDAsIDc1LjY2NjY2NjY2NjY2NywgMCwgMCIgZmlsbD0iI2RkZCIgZmlsbC1vcGFjaXR5PSIwLjA4OTMzMzMzMzMzMzMzMyIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utb3BhY2l0eT0iMC4wMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjYyLjExNzAyMjIxMjA5LCAxODkuMTY2NjY2NjY2NjcpIHJvdGF0ZSgxODAsIDMyLjc2NDYyNzc3NjUxMSwgMzcuODMzMzMzMzMzMzMzKSIvPjxwb2x5bGluZSBwb2ludHM9IjAsIDAsIDY1LjUyOTI1NTU1MzAyMywgMzcuODMzMzMzMzMzMzMzLCAwLCA3NS42NjY2NjY2NjY2NjcsIDAsIDAiIGZpbGw9IiNkZGQiIGZpbGwtb3BhY2l0eT0iMC4xNDEzMzMzMzMzMzMzMyIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utb3BhY2l0eT0iMC4wMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzI3LjY0NjI3Nzc2NTExLCAtMzcuODMzMzMzMzMzMzMzKSByb3RhdGUoMCwgMzIuNzY0NjI3Nzc2NTExLCAzNy44MzMzMzMzMzMzMzMpIi8+PHBvbHlsaW5lIHBvaW50cz0iMCwgMCwgNjUuNTI5MjU1NTUzMDIzLCAzNy44MzMzMzMzMzMzMzMsIDAsIDc1LjY2NjY2NjY2NjY2NywgMCwgMCIgZmlsbD0iI2RkZCIgZmlsbC1vcGFjaXR5PSIwLjE0MTMzMzMzMzMzMzMzIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1vcGFjaXR5PSIwLjAyIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMjcuNjQ2Mjc3NzY1MTEsIDE4OS4xNjY2NjY2NjY2Nykgcm90YXRlKDAsIDMyLjc2NDYyNzc3NjUxMSwgMzcuODMzMzMzMzMzMzMzKSIvPjxwb2x5bGluZSBwb2ludHM9IjAsIDAsIDY1LjUyOTI1NTU1MzAyMywgMzcuODMzMzMzMzMzMzMzLCAwLCA3NS42NjY2NjY2NjY2NjcsIDAsIDAiIGZpbGw9IiNkZGQiIGZpbGwtb3BhY2l0eT0iMC4wMiIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utb3BhY2l0eT0iMC4wMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwgMCkgcm90YXRlKDAsIDMyLjc2NDYyNzc3NjUxMSwgMzcuODMzMzMzMzMzMzMzKSIvPjxwb2x5bGluZSBwb2ludHM9IjAsIDAsIDY1LjUyOTI1NTU1MzAyMywgMzcuODMzMzMzMzMzMzMzLCAwLCA3NS42NjY2NjY2NjY2NjcsIDAsIDAiIGZpbGw9IiMyMjIiIGZpbGwtb3BhY2l0eT0iMC4wMjg2NjY2NjY2NjY2NjciIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLW9wYWNpdHk9IjAuMDIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDY1LjUyOTI1NTU1MzAyMywgMCkgcm90YXRlKDE4MCwgMzIuNzY0NjI3Nzc2NTExLCAzNy44MzMzMzMzMzMzMzMpIi8+PHBvbHlsaW5lIHBvaW50cz0iMCwgMCwgNjUuNTI5MjU1NTUzMDIzLCAzNy44MzMzMzMzMzMzMzMsIDAsIDc1LjY2NjY2NjY2NjY2NywgMCwgMCIgZmlsbD0iIzIyMiIgZmlsbC1vcGFjaXR5PSIwLjExNTMzMzMzMzMzMzMzIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1vcGFjaXR5PSIwLjAyIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzEuMDU4NTExMTA2MDUsIDApIHJvdGF0ZSgwLCAzMi43NjQ2Mjc3NzY1MTEsIDM3LjgzMzMzMzMzMzMzMykiLz48cG9seWxpbmUgcG9pbnRzPSIwLCAwLCA2NS41MjkyNTU1NTMwMjMsIDM3LjgzMzMzMzMzMzMzMywgMCwgNzUuNjY2NjY2NjY2NjY3LCAwLCAwIiBmaWxsPSIjMjIyIiBmaWxsLW9wYWNpdHk9IjAuMDgwNjY2NjY2NjY2NjY3IiBzdHJva2U9IiMwMDAiIHN0cm9rZS1vcGFjaXR5PSIwLjAyIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxOTYuNTg3NzY2NjU5MDcsIDApIHJvdGF0ZSgxODAsIDMyLjc2NDYyNzc3NjUxMSwgMzcuODMzMzMzMzMzMzMzKSIvPjxwb2x5bGluZSBwb2ludHM9IjAsIDAsIDY1LjUyOTI1NTU1MzAyMywgMzcuODMzMzMzMzMzMzMzLCAwLCA3NS42NjY2NjY2NjY2NjcsIDAsIDAiIGZpbGw9IiMyMjIiIGZpbGwtb3BhY2l0eT0iMC4wODA2NjY2NjY2NjY2NjciIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLW9wYWNpdHk9IjAuMDIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI2Mi4xMTcwMjIyMTIwOSwgMCkgcm90YXRlKDAsIDMyLjc2NDYyNzc3NjUxMSwgMzcuODMzMzMzMzMzMzMzKSIvPjxwb2x5bGluZSBwb2ludHM9IjAsIDAsIDY1LjUyOTI1NTU1MzAyMywgMzcuODMzMzMzMzMzMzMzLCAwLCA3NS42NjY2NjY2NjY2NjcsIDAsIDAiIGZpbGw9IiNkZGQiIGZpbGwtb3BhY2l0eT0iMC4wMiIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utb3BhY2l0eT0iMC4wMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzI3LjY0NjI3Nzc2NTExLCAwKSByb3RhdGUoMTgwLCAzMi43NjQ2Mjc3NzY1MTEsIDM3LjgzMzMzMzMzMzMzMykiLz48cG9seWxpbmUgcG9pbnRzPSIwLCAwLCA2NS41MjkyNTU1NTMwMjMsIDM3LjgzMzMzMzMzMzMzMywgMCwgNzUuNjY2NjY2NjY2NjY3LCAwLCAwIiBmaWxsPSIjMjIyIiBmaWxsLW9wYWNpdHk9IjAuMDgwNjY2NjY2NjY2NjY3IiBzdHJva2U9IiMwMDAiIHN0cm9rZS1vcGFjaXR5PSIwLjAyIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLCAzNy44MzMzMzMzMzMzMzMpIHJvdGF0ZSgxODAsIDMyLjc2NDYyNzc3NjUxMSwgMzcuODMzMzMzMzMzMzMzKSIvPjxwb2x5bGluZSBwb2ludHM9IjAsIDAsIDY1LjUyOTI1NTU1MzAyMywgMzcuODMzMzMzMzMzMzMzLCAwLCA3NS42NjY2NjY2NjY2NjcsIDAsIDAiIGZpbGw9IiNkZGQiIGZpbGwtb3BhY2l0eT0iMC4wMiIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utb3BhY2l0eT0iMC4wMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNjUuNTI5MjU1NTUzMDIzLCAzNy44MzMzMzMzMzMzMzMpIHJvdGF0ZSgwLCAzMi43NjQ2Mjc3NzY1MTEsIDM3LjgzMzMzMzMzMzMzMykiLz48cG9seWxpbmUgcG9pbnRzPSIwLCAwLCA2NS41MjkyNTU1NTMwMjMsIDM3LjgzMzMzMzMzMzMzMywgMCwgNzUuNjY2NjY2NjY2NjY3LCAwLCAwIiBmaWxsPSIjMjIyIiBmaWxsLW9wYWNpdHk9IjAuMDk4IiBzdHJva2U9IiMwMDAiIHN0cm9rZS1vcGFjaXR5PSIwLjAyIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzEuMDU4NTExMTA2MDUsIDM3LjgzMzMzMzMzMzMzMykgcm90YXRlKDE4MCwgMzIuNzY0NjI3Nzc2NTExLCAzNy44MzMzMzMzMzMzMzMpIi8+PHBvbHlsaW5lIHBvaW50cz0iMCwgMCwgNjUuNTI5MjU1NTUzMDIzLCAzNy44MzMzMzMzMzMzMzMsIDAsIDc1LjY2NjY2NjY2NjY2NywgMCwgMCIgZmlsbD0iIzIyMiIgZmlsbC1vcGFjaXR5PSIwLjE1IiBzdHJva2U9IiMwMDAiIHN0cm9rZS1vcGFjaXR5PSIwLjAyIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxOTYuNTg3NzY2NjU5MDcsIDM3LjgzMzMzMzMzMzMzMykgcm90YXRlKDAsIDMyLjc2NDYyNzc3NjUxMSwgMzcuODMzMzMzMzMzMzMzKSIvPjxwb2x5bGluZSBwb2ludHM9IjAsIDAsIDY1LjUyOTI1NTU1MzAyMywgMzcuODMzMzMzMzMzMzMzLCAwLCA3NS42NjY2NjY2NjY2NjcsIDAsIDAiIGZpbGw9IiMyMjIiIGZpbGwtb3BhY2l0eT0iMC4wMjg2NjY2NjY2NjY2NjciIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLW9wYWNpdHk9IjAuMDIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI2Mi4xMTcwMjIyMTIwOSwgMzcuODMzMzMzMzMzMzMzKSByb3RhdGUoMTgwLCAzMi43NjQ2Mjc3NzY1MTEsIDM3LjgzMzMzMzMzMzMzMykiLz48cG9seWxpbmUgcG9pbnRzPSIwLCAwLCA2NS41MjkyNTU1NTMwMjMsIDM3LjgzMzMzMzMzMzMzMywgMCwgNzUuNjY2NjY2NjY2NjY3LCAwLCAwIiBmaWxsPSIjMjIyIiBmaWxsLW9wYWNpdHk9IjAuMDQ2IiBzdHJva2U9IiMwMDAiIHN0cm9rZS1vcGFjaXR5PSIwLjAyIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMjcuNjQ2Mjc3NzY1MTEsIDM3LjgzMzMzMzMzMzMzMykgcm90YXRlKDAsIDMyLjc2NDYyNzc3NjUxMSwgMzcuODMzMzMzMzMzMzMzKSIvPjxwb2x5bGluZSBwb2ludHM9IjAsIDAsIDY1LjUyOTI1NTU1MzAyMywgMzcuODMzMzMzMzMzMzMzLCAwLCA3NS42NjY2NjY2NjY2NjcsIDAsIDAiIGZpbGw9IiNkZGQiIGZpbGwtb3BhY2l0eT0iMC4wMzczMzMzMzMzMzMzMzMiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLW9wYWNpdHk9IjAuMDIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsIDc1LjY2NjY2NjY2NjY2Nykgcm90YXRlKDAsIDMyLjc2NDYyNzc3NjUxMSwgMzcuODMzMzMzMzMzMzMzKSIvPjxwb2x5bGluZSBwb2ludHM9IjAsIDAsIDY1LjUyOTI1NTU1MzAyMywgMzcuODMzMzMzMzMzMzMzLCAwLCA3NS42NjY2NjY2NjY2NjcsIDAsIDAiIGZpbGw9IiNkZGQiIGZpbGwtb3BhY2l0eT0iMC4wMiIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utb3BhY2l0eT0iMC4wMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNjUuNTI5MjU1NTUzMDIzLCA3NS42NjY2NjY2NjY2NjcpIHJvdGF0ZSgxODAsIDMyLjc2NDYyNzc3NjUxMSwgMzcuODMzMzMzMzMzMzMzKSIvPjxwb2x5bGluZSBwb2ludHM9IjAsIDAsIDY1LjUyOTI1NTU1MzAyMywgMzcuODMzMzMzMzMzMzMzLCAwLCA3NS42NjY2NjY2NjY2NjcsIDAsIDAiIGZpbGw9IiMyMjIiIGZpbGwtb3BhY2l0eT0iMC4xNSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utb3BhY2l0eT0iMC4wMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMxLjA1ODUxMTEwNjA1LCA3NS42NjY2NjY2NjY2NjcpIHJvdGF0ZSgwLCAzMi43NjQ2Mjc3NzY1MTEsIDM3LjgzMzMzMzMzMzMzMykiLz48cG9seWxpbmUgcG9pbnRzPSIwLCAwLCA2NS41MjkyNTU1NTMwMjMsIDM3LjgzMzMzMzMzMzMzMywgMCwgNzUuNjY2NjY2NjY2NjY3LCAwLCAwIiBmaWxsPSIjZGRkIiBmaWxsLW9wYWNpdHk9IjAuMDIiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLW9wYWNpdHk9IjAuMDIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE5Ni41ODc3NjY2NTkwNywgNzUuNjY2NjY2NjY2NjY3KSByb3RhdGUoMTgwLCAzMi43NjQ2Mjc3NzY1MTEsIDM3LjgzMzMzMzMzMzMzMykiLz48cG9seWxpbmUgcG9pbnRzPSIwLCAwLCA2NS41MjkyNTU1NTMwMjMsIDM3LjgzMzMzMzMzMzMzMywgMCwgNzUuNjY2NjY2NjY2NjY3LCAwLCAwIiBmaWxsPSIjMjIyIiBmaWxsLW9wYWNpdHk9IjAuMDk4IiBzdHJva2U9IiMwMDAiIHN0cm9rZS1vcGFjaXR5PSIwLjAyIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNjIuMTE3MDIyMjEyMDksIDc1LjY2NjY2NjY2NjY2Nykgcm90YXRlKDAsIDMyLjc2NDYyNzc3NjUxMSwgMzcuODMzMzMzMzMzMzMzKSIvPjxwb2x5bGluZSBwb2ludHM9IjAsIDAsIDY1LjUyOTI1NTU1MzAyMywgMzcuODMzMzMzMzMzMzMzLCAwLCA3NS42NjY2NjY2NjY2NjcsIDAsIDAiIGZpbGw9IiMyMjIiIGZpbGwtb3BhY2l0eT0iMC4wNjMzMzMzMzMzMzMzMzMiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLW9wYWNpdHk9IjAuMDIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMyNy42NDYyNzc3NjUxMSwgNzUuNjY2NjY2NjY2NjY3KSByb3RhdGUoMTgwLCAzMi43NjQ2Mjc3NzY1MTEsIDM3LjgzMzMzMzMzMzMzMykiLz48cG9seWxpbmUgcG9pbnRzPSIwLCAwLCA2NS41MjkyNTU1NTMwMjMsIDM3LjgzMzMzMzMzMzMzMywgMCwgNzUuNjY2NjY2NjY2NjY3LCAwLCAwIiBmaWxsPSIjZGRkIiBmaWxsLW9wYWNpdHk9IjAuMTI0IiBzdHJva2U9IiMwMDAiIHN0cm9rZS1vcGFjaXR5PSIwLjAyIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLCAxMTMuNSkgcm90YXRlKDE4MCwgMzIuNzY0NjI3Nzc2NTExLCAzNy44MzMzMzMzMzMzMzMpIi8+PHBvbHlsaW5lIHBvaW50cz0iMCwgMCwgNjUuNTI5MjU1NTUzMDIzLCAzNy44MzMzMzMzMzMzMzMsIDAsIDc1LjY2NjY2NjY2NjY2NywgMCwgMCIgZmlsbD0iIzIyMiIgZmlsbC1vcGFjaXR5PSIwLjE1IiBzdHJva2U9IiMwMDAiIHN0cm9rZS1vcGFjaXR5PSIwLjAyIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2NS41MjkyNTU1NTMwMjMsIDExMy41KSByb3RhdGUoMCwgMzIuNzY0NjI3Nzc2NTExLCAzNy44MzMzMzMzMzMzMzMpIi8+PHBvbHlsaW5lIHBvaW50cz0iMCwgMCwgNjUuNTI5MjU1NTUzMDIzLCAzNy44MzMzMzMzMzMzMzMsIDAsIDc1LjY2NjY2NjY2NjY2NywgMCwgMCIgZmlsbD0iI2RkZCIgZmlsbC1vcGFjaXR5PSIwLjEyNCIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utb3BhY2l0eT0iMC4wMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMxLjA1ODUxMTEwNjA1LCAxMTMuNSkgcm90YXRlKDE4MCwgMzIuNzY0NjI3Nzc2NTExLCAzNy44MzMzMzMzMzMzMzMpIi8+PHBvbHlsaW5lIHBvaW50cz0iMCwgMCwgNjUuNTI5MjU1NTUzMDIzLCAzNy44MzMzMzMzMzMzMzMsIDAsIDc1LjY2NjY2NjY2NjY2NywgMCwgMCIgZmlsbD0iI2RkZCIgZmlsbC1vcGFjaXR5PSIwLjEwNjY2NjY2NjY2NjY3IiBzdHJva2U9IiMwMDAiIHN0cm9rZS1vcGFjaXR5PSIwLjAyIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxOTYuNTg3NzY2NjU5MDcsIDExMy41KSByb3RhdGUoMCwgMzIuNzY0NjI3Nzc2NTExLCAzNy44MzMzMzMzMzMzMzMpIi8+PHBvbHlsaW5lIHBvaW50cz0iMCwgMCwgNjUuNTI5MjU1NTUzMDIzLCAzNy44MzMzMzMzMzMzMzMsIDAsIDc1LjY2NjY2NjY2NjY2NywgMCwgMCIgZmlsbD0iI2RkZCIgZmlsbC1vcGFjaXR5PSIwLjEyNCIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utb3BhY2l0eT0iMC4wMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjYyLjExNzAyMjIxMjA5LCAxMTMuNSkgcm90YXRlKDE4MCwgMzIuNzY0NjI3Nzc2NTExLCAzNy44MzMzMzMzMzMzMzMpIi8+PHBvbHlsaW5lIHBvaW50cz0iMCwgMCwgNjUuNTI5MjU1NTUzMDIzLCAzNy44MzMzMzMzMzMzMzMsIDAsIDc1LjY2NjY2NjY2NjY2NywgMCwgMCIgZmlsbD0iIzIyMiIgZmlsbC1vcGFjaXR5PSIwLjEzMjY2NjY2NjY2NjY3IiBzdHJva2U9IiMwMDAiIHN0cm9rZS1vcGFjaXR5PSIwLjAyIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMjcuNjQ2Mjc3NzY1MTEsIDExMy41KSByb3RhdGUoMCwgMzIuNzY0NjI3Nzc2NTExLCAzNy44MzMzMzMzMzMzMzMpIi8+PHBvbHlsaW5lIHBvaW50cz0iMCwgMCwgNjUuNTI5MjU1NTUzMDIzLCAzNy44MzMzMzMzMzMzMzMsIDAsIDc1LjY2NjY2NjY2NjY2NywgMCwgMCIgZmlsbD0iI2RkZCIgZmlsbC1vcGFjaXR5PSIwLjEwNjY2NjY2NjY2NjY3IiBzdHJva2U9IiMwMDAiIHN0cm9rZS1vcGFjaXR5PSIwLjAyIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLCAxNTEuMzMzMzMzMzMzMzMpIHJvdGF0ZSgwLCAzMi43NjQ2Mjc3NzY1MTEsIDM3LjgzMzMzMzMzMzMzMykiLz48cG9seWxpbmUgcG9pbnRzPSIwLCAwLCA2NS41MjkyNTU1NTMwMjMsIDM3LjgzMzMzMzMzMzMzMywgMCwgNzUuNjY2NjY2NjY2NjY3LCAwLCAwIiBmaWxsPSIjMjIyIiBmaWxsLW9wYWNpdHk9IjAuMDYzMzMzMzMzMzMzMzMzIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1vcGFjaXR5PSIwLjAyIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2NS41MjkyNTU1NTMwMjMsIDE1MS4zMzMzMzMzMzMzMykgcm90YXRlKDE4MCwgMzIuNzY0NjI3Nzc2NTExLCAzNy44MzMzMzMzMzMzMzMpIi8+PHBvbHlsaW5lIHBvaW50cz0iMCwgMCwgNjUuNTI5MjU1NTUzMDIzLCAzNy44MzMzMzMzMzMzMzMsIDAsIDc1LjY2NjY2NjY2NjY2NywgMCwgMCIgZmlsbD0iIzIyMiIgZmlsbC1vcGFjaXR5PSIwLjA4MDY2NjY2NjY2NjY2NyIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utb3BhY2l0eT0iMC4wMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMxLjA1ODUxMTEwNjA1LCAxNTEuMzMzMzMzMzMzMzMpIHJvdGF0ZSgwLCAzMi43NjQ2Mjc3NzY1MTEsIDM3LjgzMzMzMzMzMzMzMykiLz48cG9seWxpbmUgcG9pbnRzPSIwLCAwLCA2NS41MjkyNTU1NTMwMjMsIDM3LjgzMzMzMzMzMzMzMywgMCwgNzUuNjY2NjY2NjY2NjY3LCAwLCAwIiBmaWxsPSIjZGRkIiBmaWxsLW9wYWNpdHk9IjAuMDIiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLW9wYWNpdHk9IjAuMDIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE5Ni41ODc3NjY2NTkwNywgMTUxLjMzMzMzMzMzMzMzKSByb3RhdGUoMTgwLCAzMi43NjQ2Mjc3NzY1MTEsIDM3LjgzMzMzMzMzMzMzMykiLz48cG9seWxpbmUgcG9pbnRzPSIwLCAwLCA2NS41MjkyNTU1NTMwMjMsIDM3LjgzMzMzMzMzMzMzMywgMCwgNzUuNjY2NjY2NjY2NjY3LCAwLCAwIiBmaWxsPSIjMjIyIiBmaWxsLW9wYWNpdHk9IjAuMDk4IiBzdHJva2U9IiMwMDAiIHN0cm9rZS1vcGFjaXR5PSIwLjAyIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNjIuMTE3MDIyMjEyMDksIDE1MS4zMzMzMzMzMzMzMykgcm90YXRlKDAsIDMyLjc2NDYyNzc3NjUxMSwgMzcuODMzMzMzMzMzMzMzKSIvPjxwb2x5bGluZSBwb2ludHM9IjAsIDAsIDY1LjUyOTI1NTU1MzAyMywgMzcuODMzMzMzMzMzMzMzLCAwLCA3NS42NjY2NjY2NjY2NjcsIDAsIDAiIGZpbGw9IiNkZGQiIGZpbGwtb3BhY2l0eT0iMC4xMjQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLW9wYWNpdHk9IjAuMDIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMyNy42NDYyNzc3NjUxMSwgMTUxLjMzMzMzMzMzMzMzKSByb3RhdGUoMTgwLCAzMi43NjQ2Mjc3NzY1MTEsIDM3LjgzMzMzMzMzMzMzMykiLz48L3N2Zz4=');"></div>  
13 - <div class="carousel-body">  
14 - <div class="container">  
15 - <h1 class="display-1 text-white">开发示例</h1>  
16 - <h2 class="display-4 text-white">表格、登录相关示例</h2>  
17 - </div>  
18 - </div>  
19 - </a>  
20 - </div>  
21 - </div>  
22 -</header>  
23 -  
24 -<!-- Page Content -->  
25 -<div class="container">  
26 -  
27 - <!-- Marketing Icons Section -->  
28 - <div class="row">  
29 - <div class="col-lg-12">  
30 - <h2 class="page-header">  
31 - 基础模块  
32 - </h2>  
33 - </div>  
34 - <div class="col-md-4">  
35 - <div class="panel panel-default">  
36 - <div class="panel-heading">  
37 - <h4><i class="fa fa-fw fa-user"></i> 前台模块</h4>  
38 - </div>  
39 - <div class="panel-body">  
40 - <p>前台模块中包含基础的会员模块,前台模块中的会员账号和API模块中的会员账号是同一账号体系</p>  
41 - <a href="{:url('index/index/index')}" target="_blank" class="btn btn-primary">立即访问</a>  
42 - <a href="{:url('index/user/index')}" target="_blank" class="btn btn-default">会员中心</a>  
43 - </div>  
44 - </div>  
45 - </div>  
46 - <div class="col-md-4">  
47 - <div class="panel panel-default">  
48 - <div class="panel-heading">  
49 - <h4><i class="fa fa-fw fa-gift"></i> API模块</h4>  
50 - </div>  
51 - <div class="panel-body">  
52 - <p>API模块中包含基础的会员模块,初始化模块、短信发送模块、验证模块</p>  
53 - <a href="{:url('api/index/index')}" target="_blank" class="btn btn-primary">立即访问</a>  
54 - <a href="{:url('api/common/init')}?version=1.0.0" target="_blank" class="btn btn-default">初始化接口</a>  
55 - </div>  
56 - </div>  
57 - </div>  
58 - <div class="col-md-4">  
59 - <div class="panel panel-default">  
60 - <div class="panel-heading">  
61 - <h4><i class="fa fa-fw fa-compass"></i> API文档</h4>  
62 - </div>  
63 - <div class="panel-body">  
64 - <p>当写完API接口以后,可通过执行php think api一键生成我们所需要的API文档,并且可以直接在线测试</p>  
65 - <a href="{:url('/')}api.html" target="_blank" class="btn btn-primary">立即访问</a>  
66 - </div>  
67 - </div>  
68 - </div>  
69 - </div>  
70 - <div class="row">  
71 - <div class="col-lg-12">  
72 - <h2 class="page-header">  
73 - 功能示例  
74 - </h2>  
75 - </div>  
76 - <div class="col-md-4">  
77 - <div class="panel panel-default">  
78 - <div class="panel-heading">  
79 - <h4><i class="fa fa-fw fa-check"></i> 使用模板标签和变量</h4>  
80 - </div>  
81 - <div class="panel-body">  
82 - <a href="{:addon_url('example/demo/index',[':name'=>'s1'])}" class="btn btn-success">查看示例</a>  
83 - </div>  
84 - </div>  
85 - </div>  
86 - <div class="col-md-4">  
87 - <div class="panel panel-default">  
88 - <div class="panel-heading">  
89 - <h4><i class="fa fa-fw fa-gift"></i> 访问不需要登录的页面</h4>  
90 - </div>  
91 - <div class="panel-body">  
92 - <a href="{:addon_url('example/demo/demo1',[':name'=>'s2'])}" class="btn btn-success">立即访问</a>  
93 - </div>  
94 - </div>  
95 - </div>  
96 - <div class="col-md-4">  
97 - <div class="panel panel-default">  
98 - <div class="panel-heading">  
99 - <h4><i class="fa fa-fw fa-compass"></i> 访问需要登录的页面</h4>  
100 - </div>  
101 - <div class="panel-body">  
102 - <a href="{:addon_url('example/demo/demo2',[':name'=>'s3'])}" class="btn btn-success">立即访问</a>  
103 - </div>  
104 - </div>  
105 - </div>  
106 - </div>  
107 - <!-- /.row -->  
108 -  
109 - <hr>  
110 -  
111 -</div>  
1 -<!DOCTYPE html>  
2 -<html lang="en">  
3 -  
4 - <head>  
5 -  
6 - <meta charset="utf-8">  
7 - <meta http-equiv="X-UA-Compatible" content="IE=edge">  
8 - <meta name="viewport" content="width=device-width, initial-scale=1">  
9 - <meta name="description" content="">  
10 - <meta name="author" content="">  
11 -  
12 - <title>开发示例 - {$site.name|htmlentities}</title>  
13 -  
14 - <!-- Bootstrap Core CSS -->  
15 - <link href="__CDN__/assets/libs/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">  
16 -  
17 - <!-- Custom CSS -->  
18 - <link href="__ADDON__/css/common.css" rel="stylesheet">  
19 -  
20 - <!-- Custom Fonts -->  
21 - <link href="__CDN__/assets/libs/font-awesome/css/font-awesome.min.css" rel="stylesheet">  
22 -  
23 - <!--[if lt IE 9]>  
24 - <script src="__CDN__/assets/js/html5shiv.js"></script>  
25 - <script src="__CDN__/assets/js/respond.min.js"></script>  
26 - <![endif]-->  
27 -  
28 - </head>  
29 -  
30 - <body>  
31 -  
32 - <!-- Navigation -->  
33 - <nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">  
34 - <div class="container">  
35 - <!-- Brand and toggle get grouped for better mobile display -->  
36 - <div class="navbar-header">  
37 - <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">  
38 - <span class="sr-only">Toggle navigation</span>  
39 - <span class="icon-bar"></span>  
40 - <span class="icon-bar"></span>  
41 - <span class="icon-bar"></span>  
42 - </button>  
43 - <a class="navbar-brand" href="{:addon_url('example/index/index')}">{$site.name|htmlentities}</a>  
44 - </div>  
45 - <!-- Collect the nav links, forms, and other content for toggling -->  
46 - <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">  
47 - <ul class="nav navbar-nav navbar-right">  
48 - <li>  
49 - <a href="{:addon_url('example/index/index')}">插件首页</a>  
50 - </li>  
51 - <li>  
52 - <a href="{:addon_url('example/demo/demo1', [':name'=>'s1'])}">无需登录页面</a>  
53 - </li>  
54 - <li>  
55 - <a href="{:addon_url('example/demo/demo2', [':name'=>'s2'])}">需登录页面</a>  
56 - </li>  
57 - {if $user}  
58 - <li class="dropdown">  
59 - <a href="#" class="dropdown-toggle" data-toggle="dropdown">欢迎你! {$user.nickname|htmlentities}<b class="caret"></b></a>  
60 - <ul class="dropdown-menu">  
61 - <li>  
62 - <a href="{:url('index/user/index')}">会员中心</a>  
63 - </li>  
64 - <li>  
65 - <a href="{:url('index/user/profile')}">个人资料</a>  
66 - </li>  
67 - <li>  
68 - <a href="{:url('index/user/logout')}">退出登录</a>  
69 - </li>  
70 - </ul>  
71 - </li>  
72 - {else /}  
73 - <li class="dropdown">  
74 - <a href="#" class="dropdown-toggle" data-toggle="dropdown">会员中心 <b class="caret"></b></a>  
75 - <ul class="dropdown-menu">  
76 - <li>  
77 - <a href="{:url('index/user/login')}">登录</a>  
78 - </li>  
79 - <li>  
80 - <a href="{:url('index/user/register')}">注册</a>  
81 - </li>  
82 - </ul>  
83 - </li>  
84 - {/if}  
85 - </ul>  
86 - </div>  
87 - <!-- /.navbar-collapse -->  
88 - </div>  
89 - <!-- /.container -->  
90 - </nav>  
91 -  
92 - {__CONTENT__}  
93 -  
94 - <div class="container">  
95 - <!-- Footer -->  
96 - <footer>  
97 - <div class="row">  
98 - <div class="col-lg-12">  
99 - <p>Copyright &copy; {$site.name|htmlentities} 2024</p>  
100 - </div>  
101 - </div>  
102 - </footer>  
103 -  
104 - </div>  
105 - <!-- /.container -->  
106 -  
107 - <!-- jQuery -->  
108 - <script src="__CDN__/assets/libs/jquery/dist/jquery.min.js"></script>  
109 -  
110 - <!-- Bootstrap Core JavaScript -->  
111 - <script src="__CDN__/assets/libs/bootstrap/dist/js/bootstrap.min.js"></script>  
112 -  
113 - <!-- Script to Activate the Carousel -->  
114 - <script>  
115 - $('.carousel').carousel({  
116 - interval: 5000 //changes the speed  
117 - })  
118 - </script>  
119 -  
120 - </body>  
121 -  
122 -</html>  
1 -<?php  
2 -  
3 -namespace app\admin\controller\example;  
4 -  
5 -use app\common\controller\Backend;  
6 -  
7 -/**  
8 - * 表格完整示例  
9 - *  
10 - * @icon fa fa-table  
11 - * @remark 在使用Bootstrap-table中的常用方式,更多使用方式可查看:http://bootstrap-table.wenzhixin.net.cn/zh-cn/  
12 - */  
13 -class Bootstraptable extends Backend  
14 -{  
15 - /**  
16 - * @var \app\admin\model\AdminLog  
17 - */  
18 - protected $model = null;  
19 - /**  
20 - * 无需鉴权的方法(需登录)  
21 - * @var array  
22 - */  
23 - protected $noNeedRight = ['start', 'pause', 'change', 'detail', 'cxselect', 'searchlist', 'selectpage'];  
24 -  
25 - /**  
26 - * 快捷搜索的字段  
27 - * @var string  
28 - */  
29 - protected $searchFields = 'id,title,url';  
30 -  
31 - public function _initialize()  
32 - {  
33 - parent::_initialize();  
34 - $this->model = model('AdminLog');  
35 - }  
36 -  
37 - /**  
38 - * 查看  
39 - */  
40 - public function index()  
41 - {  
42 - if ($this->request->isAjax()) {  
43 - list($where, $sort, $order, $offset, $limit) = $this->buildparams(null);  
44 - $list = $this->model  
45 - ->where($where)  
46 - ->order($sort, $order)  
47 - ->limit($offset, $limit)  
48 - ->paginate($limit);  
49 - $result = array("total" => $list->total(), "rows" => $list->items(), "extend" => ['money' => mt_rand(100000, 999999), 'price' => 200]);  
50 -  
51 - return json($result);  
52 - }  
53 - return $this->view->fetch();  
54 - }  
55 -  
56 - /**  
57 - * 详情  
58 - */  
59 - public function detail($ids)  
60 - {  
61 - $row = $this->model->get(['id' => $ids]);  
62 - if (!$row) {  
63 - $this->error(__('No Results were found'));  
64 - }  
65 - if ($this->request->isAjax()) {  
66 - $this->success("Ajax请求成功", null, ['id' => $ids]);  
67 - }  
68 - $this->view->assign("row", $row->toArray());  
69 - return $this->view->fetch();  
70 - }  
71 -  
72 - /**  
73 - * 启用  
74 - */  
75 - public function start($ids = '')  
76 - {  
77 - $this->success("模拟启动成功");  
78 - }  
79 -  
80 - /**  
81 - * 暂停  
82 - */  
83 - public function pause($ids = '')  
84 - {  
85 - $this->success("模拟暂停成功");  
86 - }  
87 -  
88 - /**  
89 - * 切换  
90 - */  
91 - public function change($ids = '')  
92 - {  
93 - //你需要在此做具体的操作逻辑  
94 -  
95 - $this->success("模拟切换成功");  
96 - }  
97 -  
98 - /**  
99 - * 联动搜索  
100 - */  
101 - public function cxselect()  
102 - {  
103 - $type = $this->request->get('type');  
104 - $group_id = $this->request->get('group_id');  
105 - $list = null;  
106 - if ($group_id !== '') {  
107 - if ($type == 'group') {  
108 - $groupIds = $this->auth->getChildrenGroupIds(true);  
109 - $list = \app\admin\model\AuthGroup::where('id', 'in', $groupIds)->field('id as value, name')->select();  
110 - } else {  
111 - $adminIds = \app\admin\model\AuthGroupAccess::where('group_id', 'in', $group_id)->column('uid');  
112 - $list = \app\admin\model\Admin::where('id', 'in', $adminIds)->field('id as value, username AS name')->select();  
113 - }  
114 - }  
115 - $this->success('', null, $list);  
116 - }  
117 -  
118 - /**  
119 - * 搜索下拉列表  
120 - */  
121 - public function searchlist()  
122 - {  
123 - $result = $this->model->limit(10)->select();  
124 - $searchlist = [];  
125 - foreach ($result as $key => $value) {  
126 - $searchlist[] = ['id' => $value['url'], 'name' => $value['url']];  
127 - }  
128 - $data = ['searchlist' => $searchlist];  
129 - $this->success('', null, $data);  
130 - }  
131 -  
132 - public function selectpage()  
133 - {  
134 - $this->model = new \app\admin\model\AdminLog;  
135 - return parent::selectpage();  
136 - }  
137 -}  
1 -<?php  
2 -  
3 -namespace app\admin\controller\example;  
4 -  
5 -use app\common\controller\Backend;  
6 -  
7 -/**  
8 - * 彩色角标  
9 - *  
10 - * @icon fa fa-table  
11 - * @remark 在JS端控制角标的显示与隐藏,请注意左侧菜单栏角标的数值变化  
12 - */  
13 -class Colorbadge extends Backend  
14 -{  
15 - protected $model = null;  
16 -  
17 - public function _initialize()  
18 - {  
19 - parent::_initialize();  
20 - $this->model = model('AdminLog');  
21 - }  
22 -}  
1 -<?php  
2 -  
3 -namespace app\admin\controller\example;  
4 -  
5 -use app\common\controller\Backend;  
6 -  
7 -/**  
8 - * 控制器间跳转  
9 - *  
10 - * @icon fa fa-table  
11 - * @remark FastAdmin支持在控制器间跳转,点击后将切换到另外一个TAB中,无需刷新当前页面  
12 - */  
13 -class Controllerjump extends Backend  
14 -{  
15 - protected $model = null;  
16 -  
17 - public function _initialize()  
18 - {  
19 - parent::_initialize();  
20 - $this->model = model('AdminLog');  
21 - }  
22 -}  
1 -<?php  
2 -  
3 -namespace app\admin\controller\example;  
4 -  
5 -use app\admin\model\AdminLog;  
6 -use app\common\controller\Backend;  
7 -  
8 -/**  
9 - * 自定义表单示例  
10 - *  
11 - * @icon fa fa-table  
12 - * @remark FastAdmin支持在控制器间跳转,点击后将切换到另外一个TAB中,无需刷新当前页面  
13 - */  
14 -class Customform extends Backend  
15 -{  
16 - protected $model = null;  
17 -  
18 - public function _initialize()  
19 - {  
20 - parent::_initialize();  
21 - $this->model = model('AdminLog');  
22 - }  
23 -  
24 - public function index()  
25 - {  
26 - if ($this->request->isPost()) {  
27 - $this->success("提交成功", null, ['data' => json_encode($this->request->post("row/a"), JSON_UNESCAPED_UNICODE)]);  
28 - }  
29 - return $this->view->fetch();  
30 - }  
31 -  
32 - public function get_title_list()  
33 - {  
34 - $query = $this->request->get("query");  
35 - $suggestions = AdminLog::where('title', 'like', '%' . $query . '%')->limit(10)->column("title");  
36 - $result = [  
37 - 'query' => $query,  
38 - 'suggestions' => $suggestions  
39 - ];  
40 - return json($result);  
41 - }  
42 -}  
1 -<?php  
2 -  
3 -namespace app\admin\controller\example;  
4 -  
5 -use app\common\controller\Backend;  
6 -  
7 -/**  
8 - * 自定义搜索  
9 - *  
10 - * @icon fa fa-search  
11 - * @remark 自定义列表的搜索  
12 - */  
13 -class Customsearch extends Backend  
14 -{  
15 - protected $model = null;  
16 -  
17 - public function _initialize()  
18 - {  
19 - parent::_initialize();  
20 - $this->model = model('AdminLog');  
21 - $ipList = $this->model->whereTime('createtime', '-37 days')->group("ip")->column("ip,ip as aa");  
22 - $this->view->assign("ipList", $ipList);  
23 - }  
24 -}  
1 -<?php  
2 -  
3 -namespace app\admin\controller\example;  
4 -  
5 -use app\common\controller\Backend;  
6 -  
7 -/**  
8 - * 多级联动  
9 - *  
10 - * @icon fa fa-table  
11 - * @remark FastAdmin使用了jQuery-cxselect实现多级联动,更多文档请参考https://github.com/karsonzhang/cxSelect  
12 - */  
13 -class Cxselect extends Backend  
14 -{  
15 - protected $model = null;  
16 -  
17 - public function _initialize()  
18 - {  
19 - parent::_initialize();  
20 - }  
21 -}  
1 -<?php  
2 -  
3 -namespace app\admin\controller\example;  
4 -  
5 -use app\common\controller\Backend;  
6 -  
7 -/**  
8 - * 统计图表示例  
9 - *  
10 - * @icon fa fa-charts  
11 - * @remark 展示在FastAdmin中使用Echarts展示丰富多彩的统计图表  
12 - */  
13 -class Echarts extends Backend  
14 -{  
15 - protected $model = null;  
16 -  
17 - public function _initialize()  
18 - {  
19 - parent::_initialize();  
20 - $this->model = model('AdminLog');  
21 - }  
22 -  
23 - /**  
24 - * 查看  
25 - */  
26 - public function index()  
27 - {  
28 -  
29 - return $this->view->fetch();  
30 - }  
31 -  
32 - /**  
33 - * 详情  
34 - */  
35 - public function detail($ids)  
36 - {  
37 - $row = $this->model->get(['id' => $ids]);  
38 - if (!$row) {  
39 - $this->error(__('No Results were found'));  
40 - }  
41 - $this->view->assign("row", $row->toArray());  
42 - return $this->view->fetch();  
43 - }  
44 -}  
1 -<?php  
2 -  
3 -namespace app\admin\controller\example;  
4 -  
5 -use app\common\controller\Backend;  
6 -  
7 -/**  
8 - * 多表格示例  
9 - *  
10 - * @icon fa fa-table  
11 - * @remark 当一个页面上存在多个Bootstrap-table时该如何控制按钮和表格  
12 - */  
13 -class Multitable extends Backend  
14 -{  
15 - protected $model = null;  
16 - protected $noNeedRight = ['table1', 'table2'];  
17 -  
18 - public function _initialize()  
19 - {  
20 - parent::_initialize();  
21 - }  
22 -  
23 - /**  
24 - * 查看  
25 - */  
26 - public function index()  
27 - {  
28 - $this->loadlang('general/attachment');  
29 - $this->loadlang('general/crontab');  
30 - return $this->view->fetch();  
31 - }  
32 -  
33 - public function table1()  
34 - {  
35 - $this->model = model('Attachment');  
36 - //设置过滤方法  
37 - $this->request->filter(['strip_tags']);  
38 - if ($this->request->isAjax()) {  
39 - //如果发送的来源是Selectpage,则转发到Selectpage  
40 - if ($this->request->request('keyField')) {  
41 - return $this->selectpage();  
42 - }  
43 - list($where, $sort, $order, $offset, $limit) = $this->buildparams();  
44 - $total = $this->model  
45 - ->where($where)  
46 - ->field('id,filename,filesize,imagewidth,imageheight,mimetype')  
47 - ->order($sort, $order)  
48 - ->count();  
49 -  
50 - $list = $this->model  
51 - ->where($where)  
52 - ->field('id,filename,filesize,imagewidth,imageheight,mimetype')  
53 - ->order($sort, $order)  
54 - ->limit($offset, $limit)  
55 - ->select();  
56 -  
57 - $result = array("total" => $total, "rows" => $list);  
58 -  
59 - return json($result);  
60 - }  
61 - return $this->view->fetch('index');  
62 - }  
63 -  
64 - public function table2()  
65 - {  
66 - $this->model = model('AdminLog');  
67 - //设置过滤方法  
68 - $this->request->filter(['strip_tags']);  
69 - if ($this->request->isAjax()) {  
70 - //如果发送的来源是Selectpage,则转发到Selectpage  
71 - if ($this->request->request('keyField')) {  
72 - return $this->selectpage();  
73 - }  
74 - list($where, $sort, $order, $offset, $limit) = $this->buildparams();  
75 - $total = $this->model  
76 - ->where($where)  
77 - ->order($sort, $order)  
78 - ->count();  
79 -  
80 - $list = $this->model  
81 - ->where($where)  
82 - ->order($sort, $order)  
83 - ->limit($offset, $limit)  
84 - ->select();  
85 -  
86 - $result = array("total" => $total, "rows" => $list);  
87 -  
88 - return json($result);  
89 - }  
90 - return $this->view->fetch('index');  
91 - }  
92 -}  
1 -<?php  
2 -  
3 -namespace app\admin\controller\example;  
4 -  
5 -use app\common\controller\Backend;  
6 -  
7 -/**  
8 - * 关联模型  
9 - *  
10 - * @icon fa fa-table  
11 - * @remark 当使用到关联模型时需要重载index方法  
12 - */  
13 -class Relationmodel extends Backend  
14 -{  
15 - protected $model = null;  
16 -  
17 - public function _initialize()  
18 - {  
19 - parent::_initialize();  
20 - $this->model = model('AdminLog');  
21 - }  
22 -  
23 - /**  
24 - * 查看  
25 - */  
26 - public function index()  
27 - {  
28 - $this->relationSearch = true;  
29 - $this->searchFields = "admin.username,id";  
30 - if ($this->request->isAjax()) {  
31 - list($where, $sort, $order, $offset, $limit) = $this->buildparams();  
32 - $list = $this->model  
33 - ->with("admin")  
34 - ->where($where)  
35 - ->order($sort, $order)  
36 - ->paginate($limit);  
37 -  
38 - $result = array("total" => $list->total(), "rows" => $list->items());  
39 -  
40 - return json($result);  
41 - }  
42 - return $this->view->fetch();  
43 - }  
44 -}  
1 -<?php  
2 -  
3 -namespace app\admin\controller\example;  
4 -  
5 -use app\common\controller\Backend;  
6 -  
7 -/**  
8 - * 表格联动  
9 - * 点击左侧日志列表,右侧的表格数据会显示指定管理员的日志列表  
10 - * @icon fa fa-table  
11 - */  
12 -class Tablelink extends Backend  
13 -{  
14 - protected $model = null;  
15 - protected $noNeedRight = ['table1', 'table2'];  
16 -  
17 - public function _initialize()  
18 - {  
19 - parent::_initialize();  
20 - $this->model = model('AdminLog');  
21 - }  
22 -  
23 -  
24 - public function table1()  
25 - {  
26 - $this->model = model('Admin');  
27 - //设置过滤方法  
28 - $this->request->filter(['strip_tags']);  
29 - if ($this->request->isAjax()) {  
30 - //如果发送的来源是Selectpage,则转发到Selectpage  
31 - if ($this->request->request('keyField')) {  
32 - return $this->selectpage();  
33 - }  
34 - list($where, $sort, $order, $offset, $limit) = $this->buildparams();  
35 - $total = $this->model  
36 - ->where($where)  
37 - ->field('id,username')  
38 - ->order($sort, $order)  
39 - ->count();  
40 -  
41 - $list = $this->model  
42 - ->where($where)  
43 - ->field('id,username')  
44 - ->order($sort, $order)  
45 - ->limit($offset, $limit)  
46 - ->select();  
47 -  
48 - $result = array("total" => $total, "rows" => $list);  
49 -  
50 - return json($result);  
51 - }  
52 - return $this->view->fetch('index');  
53 - }  
54 -  
55 - public function table2()  
56 - {  
57 - $this->model = model('AdminLog');  
58 - //设置过滤方法  
59 - $this->request->filter(['strip_tags']);  
60 - if ($this->request->isAjax()) {  
61 - //如果发送的来源是Selectpage,则转发到Selectpage  
62 - if ($this->request->request('keyField')) {  
63 - return $this->selectpage();  
64 - }  
65 - list($where, $sort, $order, $offset, $limit) = $this->buildparams();  
66 - $total = $this->model  
67 - ->where($where)  
68 - ->order($sort, $order)  
69 - ->count();  
70 -  
71 - $list = $this->model  
72 - ->where($where)  
73 - ->order($sort, $order)  
74 - ->limit($offset, $limit)  
75 - ->select();  
76 -  
77 - $result = array("total" => $total, "rows" => $list);  
78 -  
79 - return json($result);  
80 - }  
81 - return $this->view->fetch('index');  
82 - }  
83 -}  
1 -<?php  
2 -  
3 -namespace app\admin\controller\example;  
4 -  
5 -use app\common\controller\Backend;  
6 -  
7 -/**  
8 - * 表格模板示例  
9 - *  
10 - * @icon fa fa-table  
11 - * @remark 可以通过使用表格模板将表格中的行渲染成一样的展现方式,基于此功能可以任意定制自己想要的展示列表  
12 - */  
13 -class Tabletemplate extends Backend  
14 -{  
15 - protected $model = null;  
16 -  
17 - public function _initialize()  
18 - {  
19 - parent::_initialize();  
20 - $this->model = model('AdminLog');  
21 - }  
22 -  
23 - /**  
24 - * 查看  
25 - */  
26 - public function index()  
27 - {  
28 - if ($this->request->isAjax()) {  
29 - list($where, $sort, $order, $offset, $limit) = $this->buildparams(null);  
30 - $total = $this->model  
31 - ->where($where)  
32 - ->order($sort, $order)  
33 - ->count();  
34 - $list = $this->model  
35 - ->where($where)  
36 - ->order($sort, $order)  
37 - ->limit($offset, $limit)  
38 - ->select();  
39 - $result = array("total" => $total, "rows" => $list);  
40 -  
41 - return json($result);  
42 - }  
43 - return $this->view->fetch();  
44 - }  
45 -  
46 - /**  
47 - * 详情  
48 - */  
49 - public function detail($ids)  
50 - {  
51 - $row = $this->model->get(['id' => $ids]);  
52 - if (!$row) {  
53 - $this->error(__('No Results were found'));  
54 - }  
55 - $this->view->assign("row", $row->toArray());  
56 - return $this->view->fetch();  
57 - }  
58 -}  
1 -<?php  
2 -  
3 -namespace app\admin\model;  
4 -  
5 -use think\Model;  
6 -  
7 -class Area extends Model  
8 -{  
9 -  
10 - // 开启自动写入时间戳字段  
11 - protected $autoWriteTimestamp = false;  
12 - // 定义时间戳字段名  
13 - protected $createTime = false;  
14 - protected $updateTime = false;  
15 -}  
1 -<table class="table table-striped">  
2 - <thead>  
3 - <tr>  
4 - <th>{:__('Title')}</th>  
5 - <th>{:__('Content')}</th>  
6 - </tr>  
7 - </thead>  
8 - <tbody>  
9 - {volist name="row" id="vo" }  
10 - <tr>  
11 - <td>{$key}</td>  
12 - <td style="word-break: break-all;">{$vo|htmlentities}</td>  
13 - </tr>  
14 - {/volist}  
15 - {if $Think.get.dialog}  
16 - <tr>  
17 - <td>回传数据</td>  
18 - <td>  
19 - <div class="input-group">  
20 - <input name="callback" class="form-control" value="test" />  
21 - <span class="input-group-btn"><a href="javascript:;" class="btn btn-success btn-callback" >回传数据</a></span>  
22 - </div>  
23 - </td>  
24 - </tr>  
25 - {/if}  
26 - </tbody>  
27 -</table>  
28 -<div class="hide layer-footer">  
29 - <label class="control-label col-xs-12 col-sm-2"></label>  
30 - <div class="col-xs-12 col-sm-8">  
31 - <button type="reset" class="btn btn-primary btn-embossed btn-close" onclick="Layer.closeAll();">{:__('Close')}</button>  
32 - </div>  
33 -</div>  
1 -<table class="table table-striped">  
2 - <tbody>  
3 - <tr><td>这里是编辑窗口</td></tr>  
4 - </tbody>  
5 -</table>  
6 -<div class="hide layer-footer">  
7 - <label class="control-label col-xs-12 col-sm-2"></label>  
8 - <div class="col-xs-12 col-sm-8">  
9 - <button type="reset" class="btn btn-primary btn-embossed btn-close" onclick="Layer.closeAll();">{:__('Close')}</button>  
10 - </div>  
11 -</div>  
1 -<div class="panel panel-default panel-intro">  
2 -  
3 - <div class="panel-heading">  
4 - {:build_heading(null,FALSE)}  
5 - <ul class="nav nav-tabs nav-custom-condition">  
6 - <li class="active"><a href="#t-all" data-value="" data-toggle="tab">{:__('All')}</a></li>  
7 - <li class=""><a href="#t-1" data-value='1' data-toggle="tab">自定义搜索条件1</a></li>  
8 - <li class=""><a href="#t-2" data-value='2' data-toggle="tab">自定义搜索条件2</a></li>  
9 - </ul>  
10 - </div>  
11 -  
12 -  
13 - <div class="panel-body">  
14 - <div id="myTabContent" class="tab-content">  
15 - <div class="tab-pane fade active in" id="one">  
16 - <div class="widget-body no-padding">  
17 - <div id="toolbar" class="toolbar">  
18 - {:build_toolbar('refresh,delete')}  
19 - <a class="btn btn-info btn-disabled disabled btn-selected" href="javascript:;"><i class="fa fa-leaf"></i> 获取选中项</a>  
20 - <div class="dropdown btn-group">  
21 - <a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> <?= __('More') ?></a>  
22 - <ul class="dropdown-menu text-left" role="menu">  
23 - <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>  
24 - <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>  
25 - </ul>  
26 - </div>  
27 - <a class="btn btn-success btn-singlesearch" href="javascript:;"><i class="fa fa-user"></i> 自定义搜索</a>  
28 - <a class="btn btn-success btn-change btn-start" data-params="action=start" data-url="example/bootstraptable/start" href="javascript:;"><i class="fa fa-play"></i> 启动</a>  
29 - <a class="btn btn-danger btn-change btn-pause" data-params="action=pause" data-url="example/bootstraptable/pause" href="javascript:;"><i class="fa fa-pause"></i> 暂停</a>  
30 - <a href="javascript:;" class="btn btn-default" style="font-size:14px;color:dodgerblue;">  
31 - <span class="extend">  
32 - 金额:<span id="money">0</span>  
33 - 单价:<span id="price">0</span>  
34 - </span>  
35 - </a>  
36 - </div>  
37 - <table id="table" class="table table-striped table-bordered table-hover table-nowrap" width="100%">  
38 -  
39 - </table>  
40 -  
41 - </div>  
42 - </div>  
43 -  
44 - </div>  
45 - </div>  
46 -</div>  
47 -<script id="categorytpl" type="text/html">  
48 - <div class="row">  
49 - <div class="col-xs-12">  
50 - <div class="form-inline" data-toggle="cxselect" data-selects="group,admin">  
51 - <select class="group form-control" name="group" data-url="example/bootstraptable/cxselect?type=group"></select>  
52 - <select class="admin form-control" name="admin_id" data-url="example/bootstraptable/cxselect?type=admin" data-query-name="group_id"></select>  
53 - <input type="hidden" class="operate" data-name="admin_id" value="=" />  
54 - </div>  
55 - </div>  
56 - </div>  
57 -</script>  
1 -<div class="panel panel-default panel-intro">  
2 - {:build_heading()}  
3 -  
4 - <div class="panel-body">  
5 - <div id="myTabContent" class="tab-content">  
6 - <div class="tab-pane fade active in" id="one">  
7 - <div class="widget-body no-padding">  
8 - <div id="toolbar" class="toolbar">  
9 - {:build_toolbar('refresh,delete')}  
10 - </div>  
11 - <table id="table" class="table table-striped table-bordered table-hover" width="100%">  
12 -  
13 - </table>  
14 -  
15 -  
16 - </div>  
17 - </div>  
18 -  
19 - </div>  
20 - </div>  
21 -</div>  
1 -<div class="panel panel-default panel-intro">  
2 - {:build_heading()}  
3 -  
4 - <div class="panel-body">  
5 - <div id="myTabContent" class="tab-content">  
6 - <div class="tab-pane fade active in" id="one">  
7 - <div class="widget-body no-padding">  
8 - <div id="toolbar" class="toolbar">  
9 - {:build_toolbar('refresh,delete')}  
10 - </div>  
11 - <table id="table" class="table table-striped table-bordered table-hover" width="100%">  
12 -  
13 - </table>  
14 -  
15 -  
16 - </div>  
17 - </div>  
18 -  
19 - </div>  
20 - </div>  
21 -</div>  
1 -<style>  
2 - .upload-image {  
3 - background: url('__CDN__/assets/addons/example/img/plus.png') no-repeat center center;  
4 - background-size: 30px 30px;  
5 - height: 30px;  
6 - width: 30px;  
7 - border: 1px solid #ccc;  
8 - }  
9 -  
10 - textarea.form-control {  
11 - background: #eee;  
12 - }  
13 -</style>  
14 -<div class="row">  
15 - <div class="col-md-6">  
16 - <div class="box box-success">  
17 - <div class="panel-heading">  
18 - {:__('自定义图片描述')}  
19 - </div>  
20 - <div class="panel-body">  
21 - <div class="alert alert-success-light">  
22 - <b>温馨提示</b><br>  
23 - 默认我们的多图是没有图片描述的,如果我们需要自定义描述,可以使用以下的自定义功能<br>  
24 - 特别注意的是图片的url和描述是分开储存的,也就是说图片一个字段,描述一个字段,你在前台使用时需要自己匹配映射关系<br>  
25 - <b>下面的演示textarea为了便于调试,设置为可见的,实际使用中应该添加个hidden的class进行隐藏</b>  
26 - </div>  
27 - <form id="first-form" role="form" data-toggle="validator" method="POST" action="">  
28 - <div class="form-group row">  
29 - <label class="control-label col-xs-12">{:__('一维数组示例')}:</label>  
30 - <div class="col-xs-12">  
31 - <div class="input-group">  
32 - <input id="c-files" data-rule="required" class="form-control" size="50" name="row[files]" type="text" value="https://cdn.fastadmin.net/uploads/addons/blog.png,https://cdn.fastadmin.net/uploads/addons/cms.png,https://cdn.fastadmin.net/uploads/addons/vote.png">  
33 - <div class="input-group-addon no-border no-padding">  
34 - <span><button type="button" id="plupload-files" class="btn btn-danger plupload" data-input-id="c-files" data-mimetype="*" data-multiple="true" data-preview-id="p-files"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>  
35 - <span><button type="button" id="fachoose-files" class="btn btn-primary fachoose" data-input-id="c-files" data-mimetype="*" data-multiple="true"><i class="fa fa-list"></i> {:__('Choose')}</button></span>  
36 - </div>  
37 - <span class="msg-box n-right" for="c-files"></span>  
38 - </div>  
39 -  
40 - <!--ul需要添加 data-template和data-name属性,并一一对应且唯一 -->  
41 - <ul class="row list-inline plupload-preview" id="p-files" data-template="introtpl" data-name="row[intro]"></ul>  
42 -  
43 - <!--请注意 ul和textarea间不能存在其它任何元素,实际开发中textarea应该添加个hidden进行隐藏-->  
44 - <textarea name="row[intro]" class="form-control" style="margin-top:5px;">["简洁响应式博客","CMS内容管理系统","在线投票系统"]</textarea>  
45 -  
46 - <!--这里自定义图片预览的模板 开始-->  
47 - <script type="text/html" id="introtpl">  
48 - <li class="col-xs-3">  
49 - <a href="<%=fullurl%>" data-url="<%=url%>" target="_blank" class="thumbnail">  
50 - <img src="<%=fullurl%>" class="img-responsive">  
51 - </a>  
52 - <input type="text" name="row[intro][<%=index%>]" class="form-control mb-1" placeholder="请输入文件描述" value="<%=value?value:''%>"/>  
53 - <a href="javascript:;" class="btn btn-danger btn-xs btn-trash"><i class="fa fa-trash"></i></a>  
54 - </li>  
55 - </script>  
56 - <!--这里自定义图片预览的模板 结束-->  
57 - </div>  
58 - </div>  
59 - <div class="form-group row">  
60 - <label class="control-label col-xs-12">{:__('二维数组示例')}:</label>  
61 - <div class="col-xs-12">  
62 - <div class="input-group">  
63 - <input id="c-images" data-rule="required" class="form-control" size="50" name="row[images]" type="text" value="https://cdn.fastadmin.net/uploads/addons/example.png,https://cdn.fastadmin.net/uploads/addons/upyun.png,https://cdn.fastadmin.net/uploads/addons/alioss.png">  
64 - <div class="input-group-addon no-border no-padding">  
65 - <span><button type="button" id="plupload-images" class="btn btn-danger plupload" data-input-id="c-images" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp,image/webp" data-multiple="true" data-preview-id="p-images"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>  
66 - <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>  
67 - </div>  
68 - <span class="msg-box n-right" for="c-images"></span>  
69 - </div>  
70 -  
71 - <!--ul需要添加 data-template和data-name属性,并一一对应且唯一 -->  
72 - <ul class="row list-inline plupload-preview" id="p-images" data-template="desctpl" data-name="row[desc]"></ul>  
73 -  
74 - <!--请注意 ul和textarea间不能存在其它任何元素,实际开发中textarea应该添加个hidden进行隐藏-->  
75 - <textarea name="row[desc]" class="form-control" style="margin-top:5px;">[{"info":"开发者示例插件","size":"1M"},{"info":"又拍云储存整合","size":"2M"},{"info":"阿里OSS云储存","size":"1M"}]</textarea>  
76 -  
77 - <!--这里自定义图片预览的模板 开始-->  
78 - <script type="text/html" id="desctpl">  
79 - <li class="col-xs-3">  
80 - <a href="<%=fullurl%>" data-url="<%=url%>" target="_blank" class="thumbnail">  
81 - <img src="<%=fullurl%>" class="img-responsive">  
82 - </a>  
83 - <input type="text" name="row[desc][<%=index%>][info]" class="form-control mb-1" placeholder="请输入插件描述" value="<%=value?value['info']:''%>"/>  
84 - <input type="text" name="row[desc][<%=index%>][size]" class="form-control mb-1" placeholder="请输入插件大小" value="<%=value?value['size']:''%>"/>  
85 - <a href="javascript:;" class="btn btn-danger btn-xs btn-trash"><i class="fa fa-trash"></i></a>  
86 - </li>  
87 - </script>  
88 - <!--这里自定义图片预览的模板 结束-->  
89 - </div>  
90 - </div>  
91 - <div class="form-group row">  
92 - <label class="control-label col-xs-12"></label>  
93 - <div class="col-xs-12">  
94 - <button type="submit" class="btn btn-success btn-embossed">{:__('OK')}</button>  
95 - <button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>  
96 - </div>  
97 - </div>  
98 -  
99 - </form>  
100 - </div>  
101 - </div>  
102 -  
103 - </div>  
104 - <div class="col-md-6">  
105 - <div class="box box-info">  
106 - <div class="panel-heading">  
107 - {:__('自定义Fieldlist示例')}  
108 - </div>  
109 - <div class="panel-body">  
110 - <div class="alert alert-danger-light">  
111 - <b>温馨提示</b><br>  
112 - 默认的fieldlist为键值形式,如果需要一维数组或二维数组,可使用下面的自定义模板来实现<br>  
113 - 默认追加的元素是没有进行事件绑定的,我们需要监听btn-append这个按钮的fa.event.appendfieldlist事件<br>  
114 - <b>下面的演示textarea为了便于调试,设置为可见的,实际使用中应该添加个hidden的class进行隐藏</b>  
115 - </div>  
116 - <form id="second-form" role="form" data-toggle="validator" method="POST" action="">  
117 - <div class="form-group row">  
118 - <label class="control-label col-xs-12">  
119 - {:__('Fieldlist一维示例')}:  
120 - <span style="font-weight: normal"><font color="red">只支持FastAdmin1.5.0+</font> {if version_compare($Think.config.fastadmin.version, '1.5.0')<0}<span class="label label-danger">你当前FastAdmin版本不支持</span>{/if}</span>  
121 - </label>  
122 - <div class="col-xs-12">  
123 - <dl class="list-unstyled fieldlist" data-template="singletpl" data-name="row[single]" id="single-table">  
124 - <dd>  
125 - <ins>{:__('标题')}</ins>  
126 - </dd>  
127 - <dd>  
128 - <ins><a href="javascript:;" class="btn btn-sm btn-success btn-append"><i class="fa fa-plus"></i> {:__('Append')}</a></ins>  
129 - </dd>  
130 - </dl>  
131 -  
132 - <!--请注意实际开发中textarea应该添加个hidden进行隐藏-->  
133 - <textarea name="row[single]" class="form-control" cols="30" rows="5">["你好","世界"]</textarea>  
134 - <script id="singletpl" type="text/html">  
135 - <dd class="form-inline">  
136 - <ins><input type="text" name="<%=name%>[<%=index%>][value]" class="form-control" size="15" value="<%=row%>" placeholder="标题"/></ins>  
137 - <ins>  
138 - <!--下面的两个按钮务必保留-->  
139 - <span class="btn btn-sm btn-danger btn-remove"><i class="fa fa-times"></i></span>  
140 - <span class="btn btn-sm btn-primary btn-dragsort"><i class="fa fa-arrows"></i></span>  
141 - </ins>  
142 - </dd>  
143 - </script>  
144 - </div>  
145 - </div>  
146 - <div class="form-group row">  
147 - <label class="control-label col-xs-12">{:__('Fieldlist一维键值示例')}:</label>  
148 - <div class="col-xs-12">  
149 - <dl class="list-unstyled fieldlist" data-name="row[keyvalue]" id="keyvalue-table">  
150 - <dd>  
151 - <ins>{:__('标题')}</ins>  
152 - </dd>  
153 - <dd>  
154 - <ins><a href="javascript:;" class="btn btn-sm btn-success btn-append"><i class="fa fa-plus"></i> {:__('Append')}</a></ins>  
155 - </dd>  
156 - </dl>  
157 -  
158 - <!--请注意实际开发中textarea应该添加个hidden进行隐藏-->  
159 - <textarea name="row[keyvalue]" class="form-control" cols="30" rows="5">{"2":"Hello", "1":"World"}</textarea>  
160 - </div>  
161 - </div>  
162 - <div class="form-group row">  
163 - <label class="control-label col-xs-12">{:__('Fieldlist二维数组示例')}:</label>  
164 - <div class="col-xs-12">  
165 - <table class="table fieldlist" data-template="basictpl" data-name="row[basic]" id="first-table">  
166 - <tr>  
167 - <td>{:__('标题')}</td>  
168 - <td>{:__('介绍')}</td>  
169 - <td>{:__('大小')}</td>  
170 - <td>{:__('状态')}</td>  
171 - <td width="100"></td>  
172 - </tr>  
173 - <tr>  
174 - <td colspan="5"><a href="javascript:;" class="btn btn-sm btn-success btn-append"><i class="fa fa-plus"></i> {:__('Append')}</a></td>  
175 - </tr>  
176 - </table>  
177 -  
178 - <!--请注意实际开发中textarea应该添加个hidden进行隐藏-->  
179 - <textarea name="row[basic]" class="form-control" cols="30" rows="5">[{"title":"开发者示例插件","intro":"开发者必备","size":"1M","state":1},{"title":"又拍云储存整合","intro":"一款云储存插件","size":"2M","state":0},{"title":"阿里OSS云储存","intro":"一款云储存插件","size":"1M","state":1}]</textarea>  
180 - <script id="basictpl" type="text/html">  
181 - <tr class="form-inline">  
182 - <td><input type="text" name="<%=name%>[<%=index%>][title]" class="form-control" size="15" value="<%=row.title||'fast'%>" placeholder="标题"/></td>  
183 - <td><input type="text" name="<%=name%>[<%=index%>][intro]" class="form-control" size="15" value="<%=row.intro%>" placeholder="介绍"/></td>  
184 - <td><input type="text" name="<%=name%>[<%=index%>][size]" class="form-control" style="width:50px" value="<%=row.size%>" placeholder="大小"/></td>  
185 - <td>  
186 - <input type="hidden" name="<%=name%>[<%=index%>][state]" id="c-state-<%=index%>" class="form-control" style="width:50px" value="<%=row.state%>" placeholder="状态"/>  
187 - <a href="javascript:;" data-toggle="switcher" class="btn-switcher" data-input-id="c-state-<%=index%>" data-yes="1" data-no="0">  
188 - <i class="fa fa-toggle-on text-success <%if(row.state!=1){%>fa-flip-horizontal text-gray<%}%> fa-2x"></i>  
189 - </a>  
190 - </td>  
191 - <td>  
192 - <!--下面的两个按钮务必保留-->  
193 - <span class="btn btn-sm btn-danger btn-remove"><i class="fa fa-times"></i></span>  
194 - <span class="btn btn-sm btn-primary btn-dragsort"><i class="fa fa-arrows"></i></span>  
195 - </td>  
196 - </tr>  
197 - </script>  
198 - </div>  
199 - </div>  
200 - <div class="form-group row">  
201 - <label class="control-label col-xs-12">{:__('Fieldlist绑定事件示例')}:</label>  
202 - <div class="col-xs-12">  
203 - <table class="table fieldlist" data-template="eventtpl" data-name="row[event]" id="second-table">  
204 - <tr>  
205 - <td>{:__('管理员')}</td>  
206 - <td>{:__('图片')}</td>  
207 - <td>{:__('登录时间')}</td>  
208 - <td width="100"></td>  
209 - </tr>  
210 - <tr>  
211 - <td colspan="4"><a href="javascript:;" class="btn btn-sm btn-success btn-append"><i class="fa fa-plus"></i> {:__('Append')}</a></td>  
212 - </tr>  
213 - </table>  
214 -  
215 - <!--请注意实际开发中textarea应该添加个hidden进行隐藏-->  
216 - <textarea name="row[event]" class="form-control" cols="30" rows="5">[{"id":"1","image":"/assets/addons/example/img/200x200.png","time":"2019-06-28 12:05:03"}]</textarea>  
217 - <script id="eventtpl" type="text/html">  
218 - <tr class="form-inline">  
219 - <td><input type="text" name="<%=name%>[<%=index%>][id]" class="form-control selectpage" data-source="auth/admin/selectpage" data-field="username" value="<%=row.id%>" placeholder="管理员"/></td>  
220 - <td>  
221 - <input type="hidden" name="<%=name%>[<%=index%>][image]" id="c-image-<%=index%>" value="<%=row.image%>">  
222 - <!--@formatter:off-->  
223 - <button type="button" id="faupload-image" class="btn btn-danger faupload upload-image" data-input-id="c-image-<%=index%>" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp,image/webp" data-multiple="false" <%if(row.image){%>style="background-image: url('<%=Fast.api.cdnurl(row.image)%>')"<%}%>></button>  
224 - <!--@formatter:on-->  
225 - </td>  
226 - <td><input type="text" name="<%=name%>[<%=index%>][time]" class="form-control datetimepicker" style="width:120px" value="<%=row.time%>" placeholder="时间"/></td>  
227 - <td>  
228 - <!--下面的两个按钮务必保留-->  
229 - <span class="btn btn-sm btn-danger btn-remove"><i class="fa fa-times"></i></span>  
230 - <span class="btn btn-sm btn-primary btn-dragsort"><i class="fa fa-arrows"></i></span>  
231 - </td>  
232 - </tr>  
233 - </script>  
234 - </div>  
235 - </div>  
236 - <div class="form-group row">  
237 - <label class="control-label col-xs-12"></label>  
238 - <div class="col-xs-12">  
239 - <button type="submit" class="btn btn-success btn-embossed">{:__('OK')}</button>  
240 - <button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>  
241 - </div>  
242 - </div>  
243 -  
244 - </form>  
245 - </div>  
246 - </div>  
247 -  
248 - </div>  
249 - <div class="col-md-6">  
250 - <div class="box box-warning">  
251 - <div class="panel-heading">  
252 - 自动完成+标签输入示例,<font color="red">只支持FastAdmin1.3.0+</font> {if version_compare($Think.config.fastadmin.version, '1.3.0')<0}<span class="label label-danger">你当前FastAdmin版本不支持</span>{/if}  
253 - </div>  
254 - <div class="panel-body">  
255 - <div class="alert alert-danger-light">  
256 - <b>温馨提示</b><br>  
257 - </div>  
258 - <form id="third-form" role="form" data-toggle="validator" method="POST" action="">  
259 -  
260 - <div class="form-group row">  
261 - <label class="control-label col-xs-12">自动完成</label>  
262 - <div class="col-xs-12">  
263 - <input type="text" class="form-control" data-role="autocomplete" data-autocomplete-options='{"url":"example/customform/get_title_list", "minChars":1}'/>  
264 - </div>  
265 - </div>  
266 - <div class="form-group row">  
267 - <label class="control-label col-xs-12">标签输入 <span class="text-muted small">输入后<code>回车</code><code>,</code>确认</span></label>  
268 - <div class="col-xs-12">  
269 - <input type="text" class="form-control" data-role="tagsinput"/>  
270 - </div>  
271 - </div>  
272 - <div class="form-group row">  
273 - <label class="control-label col-xs-12">自动完成+标签输入</label>  
274 - <div class="col-xs-12">  
275 - <input type="text" class="form-control" data-role="tagsinput" data-tagsinput-options='{"minChars":1, "autocomplete":{"url":"example/customform/get_title_list"}}'/>  
276 - </div>  
277 - </div>  
278 - </form>  
279 - </div>  
280 - </div>  
281 - </div>  
282 - <div class="col-md-6">  
283 - <div class="box box-danger">  
284 - <div class="panel-heading">  
285 - 动态显示,<font color="red">只支持FastAdmin1.3.3+</font> {if version_compare($Think.config.fastadmin.version, '1.3.3')<0}<span class="label label-danger">你当前FastAdmin版本不支持</span>{/if}  
286 - </div>  
287 - <div class="panel-body">  
288 - <form id="fourth-form" role="form" data-toggle="validator" method="POST" action="">  
289 -  
290 - <div class="form-group row">  
291 - <label class="control-label col-xs-12">常规使用</label>  
292 - <div class="col-xs-12">  
293 - <input type="radio" name="row[type]" value="value1" checked/> 类型1  
294 - <input type="radio" name="row[type]" value="value2"/> 类型2  
295 - <div data-favisible="type=value1" class="p-3">显示内容1</div>  
296 - <div data-favisible="type=value2" class="p-3">显示内容2</div>  
297 - </div>  
298 - </div>  
299 - <hr>  
300 - <div class="form-group row">  
301 - <label class="control-label col-xs-12">使用开关组件</label>  
302 - <div class="col-xs-12">  
303 -  
304 - <input id="c-switch" name="row[switch]" type="hidden" value="0">  
305 - <a href="javascript:;" data-toggle="switcher" class="btn-switcher" data-input-id="c-switch" data-yes="1" data-no="0">  
306 - <i class="fa fa-toggle-on text-success fa-flip-horizontal text-gray fa-2x"></i>  
307 - </a>  
308 -  
309 - <div data-favisible="switch=1" class="p-3">显示内容隐藏的内容</div>  
310 - </div>  
311 - </div>  
312 - <hr>  
313 - <div class="form-group row">  
314 - <label class="control-label col-xs-12">组件嵌套</label>  
315 - <div class="col-xs-12">  
316 - <input type="radio" name="row[mode]" value="value1"/> 模式1  
317 - <input type="radio" name="row[mode]" value="value2"/> 模式2  
318 - <div data-favisible="mode=value1" class="p-3">  
319 - <h4>显示内容1</h4>  
320 - <input id="c-switch1" name="row[switch1]" type="hidden" value="0">  
321 - <a href="javascript:;" data-toggle="switcher" class="btn-switcher" data-input-id="c-switch1" data-yes="1" data-no="0">  
322 - <i class="fa fa-toggle-on text-success fa-flip-horizontal text-gray fa-2x"></i>  
323 - </a>  
324 -  
325 - <div data-favisible="switch1=1" class="p-3">显示内容隐藏的内容1</div>  
326 - </div>  
327 - <div data-favisible="mode=value2" class="p-3">  
328 - <h4>显示内容2</h4>  
329 - <input id="c-switch2" name="row[switch2]" type="hidden" value="0">  
330 - <a href="javascript:;" data-toggle="switcher" class="btn-switcher" data-input-id="c-switch2" data-yes="1" data-no="0">  
331 - <i class="fa fa-toggle-on text-success fa-flip-horizontal text-gray fa-2x"></i>  
332 - </a>  
333 -  
334 - <div data-favisible="switch2=1" class="p-3">显示内容隐藏的内容2</div>  
335 - </div>  
336 - </div>  
337 - </div>  
338 - <hr>  
339 - <div class="form-group row">  
340 - <label class="control-label col-xs-12">使用内容判断 <span class="text-muted small">只有输入指定的内容才显示</span></label>  
341 - <div class="col-xs-12">  
342 - <input type="text" class="form-control" name="row[title]" placeholder="请输入abc三个字母">  
343 - <div data-favisible="title=abc" class="p-3">显示内容隐藏的内容</div>  
344 - </div>  
345 - </div>  
346 - </form>  
347 - </div>  
348 - </div>  
349 - </div>  
350 -</div>  
1 -<div class="panel panel-default panel-intro">  
2 - {:build_heading()}  
3 -  
4 - <div class="panel-body">  
5 - <div id="myTabContent" class="tab-content">  
6 - <div class="tab-pane fade active in" id="one">  
7 - <div class="widget-body no-padding">  
8 - <div id="toolbar" class="toolbar">  
9 - {:build_toolbar('refresh')}  
10 - </div>  
11 - <table id="table" class="table table-striped table-bordered table-hover" width="100%">  
12 -  
13 - </table>  
14 -  
15 - </div>  
16 - </div>  
17 -  
18 - </div>  
19 - </div>  
20 -</div>  
21 -  
22 -<script id="customformtpl" type="text/html">  
23 - <!--form表单必须添加form-commsearch这个类-->  
24 - <form action="" class="form-commonsearch">  
25 - <div style="border-radius:2px;margin-bottom:10px;background:#f5f5f5;padding:15px 20px;">  
26 - <h4>自定义搜索表单</h4>  
27 - <hr>  
28 - <div class="row">  
29 - <div class="col-xs-12 col-sm-6 col-md-3">  
30 - <div class="form-group">  
31 - <label class="control-label">ID</label>  
32 - <!--显式的operate操作符-->  
33 - <div class="input-group">  
34 - <div class="input-group-btn">  
35 - <select class="form-control operate" data-name="id" style="width:60px;">  
36 - <option value="=" selected>等于</option>  
37 - <option value=">">大于</option>  
38 - <option value="<">小于</option>  
39 - </select>  
40 - </div>  
41 - <input class="form-control" type="text" name="id" placeholder="" value=""/>  
42 - </div>  
43 - </div>  
44 - </div>  
45 - <div class="col-xs-12 col-sm-6 col-md-3">  
46 - <div class="form-group">  
47 - <label class="control-label">标题</label>  
48 - <!--隐式的operate操作符,必须携带一个classoperate隐藏的文本框,且它的data-name="字段",值为操作符-->  
49 - <input class="operate" type="hidden" data-name="title" value="="/>  
50 - <div>  
51 - <input class="form-control" type="text" name="title" placeholder="请输入查找的标题" value=""/>  
52 - </div>  
53 - </div>  
54 - </div>  
55 - <div class="col-xs-12 col-sm-6 col-md-3">  
56 - <div class="form-group">  
57 - <label class="control-label">管理员ID</label>  
58 - <div class="row" data-toggle="cxselect" data-selects="group,admin">  
59 - <div class="col-xs-6">  
60 - <select class="group form-control" name="group"  
61 - data-url="example/bootstraptable/cxselect?type=group"></select>  
62 - </div>  
63 - <div class="col-xs-6">  
64 - <select class="admin form-control" name="admin_id"  
65 - data-url="example/bootstraptable/cxselect?type=admin"  
66 - data-query-name="group_id"></select>  
67 - </div>  
68 - <input type="hidden" class="operate" data-name="admin_id" value="="/>  
69 - </div>  
70 - </div>  
71 - </div>  
72 - <div class="col-xs-12 col-sm-6 col-md-3">  
73 - <div class="form-group">  
74 - <label class="control-label">用户名</label>  
75 - <input type="hidden" class="operate" data-name="username" value="="/>  
76 - <div>  
77 - <input id="c-category_id" data-source="auth/admin/index" data-primary-key="username"  
78 - data-field="username" class="form-control selectpage" name="username" type="text"  
79 - value="" style="display:block;">  
80 - </div>  
81 - </div>  
82 - </div>  
83 -  
84 - <div class="col-xs-12 col-sm-6 col-md-3" style="min-height:68px;">  
85 - <!--这里添加68px是为了避免刷新时出现元素错位闪屏-->  
86 - <div class="form-group">  
87 - <label class="control-label">IP</label>  
88 - <input type="hidden" class="operate" data-name="ip" value="in"/>  
89 - <div>  
90 - <!--select一个固定的高度-->  
91 - <!--@formatter:off-->  
92 - <select id="c-flag" class="form-control selectpicker" multiple name="ip" style="height:31px;">  
93 - {foreach name="ipList" item="vo"}  
94 - <option value="{$key}" {in name="key" value="" }selected{/in}>{$vo}</option>  
95 - {/foreach}  
96 - </select>  
97 - <!--@formatter:on-->  
98 - </div>  
99 - </div>  
100 - </div>  
101 - <div class="col-xs-12 col-sm-6 col-md-3">  
102 - <div class="form-group">  
103 - <label class="control-label">创建时间</label>  
104 - <input type="hidden" class="operate" data-name="createtime" value="RANGE"/>  
105 - <div>  
106 - <input type="text" class="form-control datetimerange" name="createtime" value=""/>  
107 - </div>  
108 - </div>  
109 - </div>  
110 - <div class="col-xs-12 col-sm-6 col-md-3">  
111 - <div class="form-group">  
112 - <label class="control-label"></label>  
113 - <div class="row">  
114 - <div class="col-xs-6">  
115 - <input type="submit" class="btn btn-success btn-block" value="提交"/>  
116 - </div>  
117 - <div class="col-xs-6">  
118 - <input type="reset" class="btn btn-primary btn-block" value="重置"/>  
119 - </div>  
120 - </div>  
121 - </div>  
122 - </div>  
123 - </div>  
124 - </div>  
125 - </form>  
126 -</script>  
1 -<style>#cxselect-example textarea{margin:10px 0;}</style>  
2 -<div class="panel panel-default panel-intro">  
3 - {:build_heading()}  
4 -  
5 - <div class="panel-body">  
6 - <div id="myTabContent" class="tab-content">  
7 - <div class="tab-pane fade active in" id="one">  
8 - <div class="widget-body no-padding" id="cxselect-example">  
9 - <form id="cxselectform" action="">  
10 - <div class="row">  
11 - <div class="col-md-6">  
12 -  
13 - <div class="panel panel-default">  
14 - <div class="panel-heading"><b>省市区联动</b>(通过AJAX读取数据)</div>  
15 - <div class="panel-body">  
16 - <div class="row">  
17 - <div class="col-xs-9">  
18 - <div class="form-inline" data-toggle="cxselect" data-selects="province,city,area">  
19 - <select class="province form-control" name="province" data-url="ajax/area"></select>  
20 - <select class="city form-control" name="city" data-url="ajax/area"></select>  
21 - <select class="area form-control" name="area" data-url="ajax/area"></select>  
22 - </div>  
23 - </div>  
24 - <div class="col-xs-3 text-right">  
25 - <h6><label class="label label-primary"><i class="fa fa-pencil"></i> 增加</label></h6>  
26 - </div>  
27 - <div class="col-xs-12">  
28 - <textarea class="form-control" rows="8">  
29 - </textarea>  
30 - </div>  
31 - </div>  
32 - <div class="row">  
33 - <div class="col-xs-9">  
34 - <div class="form-inline" data-toggle="cxselect" data-selects="province,city,area">  
35 - <select class="province form-control" name="province" data-url="ajax/area">  
36 - <option value="1964" selected>广东省</option>  
37 - </select>  
38 - <select class="city form-control" name="city" data-url="ajax/area">  
39 - <option value="1988" selected>深圳市</option>  
40 - </select>  
41 - <select class="area form-control" name="area" data-url="ajax/area">  
42 - <option value="1991" selected>南山区</option>  
43 - </select>  
44 - </div>  
45 - </div>  
46 - <div class="col-xs-3 text-right">  
47 - <h6><label class="label label-success"><i class="fa fa-edit"></i> 修改</label></h6>  
48 - </div>  
49 - <div class="col-xs-12">  
50 - <textarea class="form-control" rows="8">  
51 - </textarea>  
52 - </div>  
53 - </div>  
54 - </div>  
55 -  
56 - </div>  
57 - </div>  
58 - <div class="col-md-6">  
59 - <div class="panel panel-default">  
60 - <div class="panel-heading"><b>类别联动</b>(Ajax读取数据)</div>  
61 - <div class="panel-body">  
62 - <div class="row">  
63 - <div class="col-xs-9">  
64 - <div class="form-inline" data-toggle="cxselect" data-selects="first,second">  
65 - <select class="first form-control" name="first" data-url="ajax/category?type=page&pid=5"></select>  
66 - <select class="second form-control" name="second" data-url="ajax/category" data-query-name="pid"></select>  
67 - </div>  
68 - </div>  
69 - <div class="col-xs-3 text-right">  
70 - <h6><label class="label label-primary"><i class="fa fa-pencil"></i> 增加</label></h6>  
71 - </div>  
72 - <div class="col-xs-12">  
73 - <textarea class="form-control" rows="8">  
74 - </textarea>  
75 - </div>  
76 - </div>  
77 - <div class="row">  
78 - <div class="col-xs-9">  
79 - <div class="form-inline" data-toggle="cxselect" data-selects="first,second">  
80 - <select class="first form-control" name="first" data-url="ajax/category?type=page&pid=5">  
81 - <option value="6" selected>网站建站</option>  
82 - </select>  
83 - <select class="second form-control" name="second" data-url="ajax/category" data-query-name="pid">  
84 - <option value="9" selected>移动端</option>  
85 - </select>  
86 - </div>  
87 - </div>  
88 - <div class="col-xs-3 text-right">  
89 - <h6><label class="label label-success"><i class="fa fa-edit"></i> 修改</label></h6>  
90 - </div>  
91 - <div class="col-xs-12">  
92 - <textarea class="form-control" rows="8">  
93 - </textarea>  
94 - </div>  
95 - </div>  
96 -  
97 - </div>  
98 - </div>  
99 - </div>  
100 - <div class="col-md-6">  
101 - <div class="panel panel-default">  
102 - <div class="panel-heading"><b>省市区联动</b>(通过JSON渲染数据)</div>  
103 - <div class="panel-body">  
104 - <div class="row">  
105 - <div class="col-xs-9">  
106 - <!--由于在初始化中修改了默认值,所以这里需要修改-jsonSpace/jsonValue/jsonName的值-->  
107 - <div class="form-inline" data-toggle="cxselect" data-url="__CDN__/assets/libs/fastadmin-cxselect/js/cityData.min.json"  
108 - data-selects="province,city,area" data-json-space="" data-json-name="n" data-json-value="">  
109 - <select class="province form-control" name="province"></select>  
110 - <select class="city form-control" name="city"></select>  
111 - <select class="area form-control" name="area"></select>  
112 - </div>  
113 - </div>  
114 - <div class="col-xs-3 text-right">  
115 - <h6><label class="label label-primary"><i class="fa fa-pencil"></i> 增加</label></h6>  
116 - </div>  
117 - <div class="col-xs-12">  
118 - <textarea class="form-control" rows="8">  
119 - </textarea>  
120 - </div>  
121 - </div>  
122 - <div class="row">  
123 - <div class="col-xs-9">  
124 - <!--由于在初始化中修改了默认值,所以这里需要修改-jsonSpace/jsonValue/jsonName的值-->  
125 - <div class="form-inline" data-toggle="cxselect" data-url="__CDN__/assets/libs/fastadmin-cxselect/js/cityData.min.json"  
126 - data-selects="province,city,area" data-json-space="" data-json-name="n" data-json-value="">  
127 - <select class="province form-control" data-first-title="选择省">  
128 - <option value="">请选择</option>  
129 - <option value="浙江省" selected>浙江省</option>  
130 - </select>  
131 - <select class="city form-control" data-first-title="选择市">  
132 - <option value="">请选择</option>  
133 - <option value="杭州市" selected>杭州市</option>  
134 - </select>  
135 - <select class="area form-control" data-first-title="选择地区">  
136 - <option value="">请选择</option>  
137 - <option value="西湖区" selected>西湖区</option>  
138 - </select>  
139 - </div>  
140 - </div>  
141 - <div class="col-xs-3 text-right">  
142 - <h6><label class="label label-success"><i class="fa fa-edit"></i> 修改</label></h6>  
143 - </div>  
144 - <div class="col-xs-12">  
145 - <textarea class="form-control" rows="8">  
146 - </textarea>  
147 - </div>  
148 - </div>  
149 - </div>  
150 -  
151 - </div>  
152 - </div>  
153 - </div>  
154 - </form>  
155 - </div>  
156 - </div>  
157 -  
158 - </div>  
159 - </div>  
160 -</div>  
1 -<style>  
2 - .tab-content > .chart {  
3 - padding: 10px;  
4 - }  
5 -</style>  
6 -<div class="row">  
7 - <div class="col-lg-3 col-xs-6">  
8 - <!-- small box -->  
9 - <div class="small-box bg-aqua">  
10 - <div class="inner">  
11 - <h3>150</h3>  
12 -  
13 - <p>今日订单</p>  
14 - </div>  
15 - <div class="icon">  
16 - <i class="fa fa-shopping-cart"></i>  
17 - </div>  
18 - <a href="#" class="small-box-footer">更多 <i class="fa fa-arrow-circle-right"></i></a>  
19 - </div>  
20 - </div>  
21 - <!-- ./col -->  
22 - <div class="col-lg-3 col-xs-6">  
23 - <!-- small box -->  
24 - <div class="small-box bg-green">  
25 - <div class="inner">  
26 - <h3>53<sup style="font-size: 20px">%</sup></h3>  
27 -  
28 - <p>同比增长率</p>  
29 - </div>  
30 - <div class="icon">  
31 - <i class="fa fa-area-chart"></i>  
32 - </div>  
33 - <a href="#" class="small-box-footer">更多 <i class="fa fa-arrow-circle-right"></i></a>  
34 - </div>  
35 - </div>  
36 - <!-- ./col -->  
37 - <div class="col-lg-3 col-xs-6">  
38 - <!-- small box -->  
39 - <div class="small-box bg-yellow">  
40 - <div class="inner">  
41 - <h3>44</h3>  
42 -  
43 - <p>今日注册用户数</p>  
44 - </div>  
45 - <div class="icon">  
46 - <i class="fa fa-users"></i>  
47 - </div>  
48 - <a href="#" class="small-box-footer">更多 <i class="fa fa-arrow-circle-right"></i></a>  
49 - </div>  
50 - </div>  
51 - <!-- ./col -->  
52 - <div class="col-lg-3 col-xs-6">  
53 - <!-- small box -->  
54 - <div class="small-box bg-red">  
55 - <div class="inner">  
56 - <h3>65</h3>  
57 -  
58 - <p>唯一访客用户</p>  
59 - </div>  
60 - <div class="icon">  
61 - <i class="fa fa-user"></i>  
62 - </div>  
63 - <a href="#" class="small-box-footer">更多 <i class="fa fa-arrow-circle-right"></i></a>  
64 - </div>  
65 - </div>  
66 - <!-- ./col -->  
67 -</div>  
68 -<!-- /.row -->  
69 -<!-- Main row -->  
70 -<div class="row" style="margin-bottom:5px;">  
71 - <!-- Left col -->  
72 - <section class="col-lg-7 connectedSortable">  
73 - <!-- Custom tabs (Charts with tabs)-->  
74 - <div class="nav-tabs-custom charts-custom">  
75 - <!-- Tabs within a box -->  
76 - <ul class="nav nav-tabs pull-right">  
77 - <li class="active"><a href="#line-chart" data-toggle="tab">折线图</a></li>  
78 - <li><a href="#area-chart" data-toggle="tab">区域图</a></li>  
79 - <li class="pull-left header"><i class="fa fa-inbox"></i> 销售趋势</li>  
80 - </ul>  
81 - <div class="tab-content no-padding">  
82 - <!-- Morris chart - Sales -->  
83 - <div class="chart tab-pane active" id="line-chart" style="position: relative; height: 300px;"></div>  
84 - <div class="chart tab-pane" id="area-chart" style="position: relative; height: 300px;"></div>  
85 - </div>  
86 - </div>  
87 - <div class="nav-tabs-custom charts-custom">  
88 - <!-- Tabs within a box -->  
89 - <ul class="nav nav-tabs pull-right">  
90 - <li class="active"><a href="#pie-chart" data-toggle="tab">饼图</a></li>  
91 - <li><a href="#bar-chart" data-toggle="tab">柱状图</a></li>  
92 - <li class="pull-left header"><i class="fa fa-inbox"></i> 访问记录</li>  
93 - </ul>  
94 - <div class="tab-content no-padding">  
95 - <!-- Morris chart - Sales -->  
96 - <div class="chart tab-pane active" id="pie-chart" style="position: relative; height: 300px;"></div>  
97 - <div class="chart tab-pane" id="bar-chart" style="position: relative; height: 300px;"></div>  
98 - </div>  
99 - </div>  
100 - <!-- /.nav-tabs-custom -->  
101 -  
102 - </section>  
103 - <!-- /.Left col -->  
104 - <section class="col-lg-5 connectedSortable">  
105 -  
106 - <!-- Map box -->  
107 - <div class="box box-solid bg-light-blue-gradient">  
108 - <div class="box-header">  
109 - <!-- tools box -->  
110 - <div class="pull-right box-tools">  
111 - </div>  
112 - <!-- /. tools -->  
113 -  
114 - <i class="fa fa-map-marker"></i>  
115 -  
116 - <h3 class="box-title">  
117 - 访客分布  
118 - </h3>  
119 - </div>  
120 - <div class="box-body">  
121 - <div id="simplebar-chart" style="height: 250px; width: 100%;"></div>  
122 - </div>  
123 - <!-- /.box-body-->  
124 - <div class="box-footer no-border">  
125 - <div class="row">  
126 - <div class="col-xs-12 text-center">  
127 - <div class="knob-label">统计最近一周访客的记录</div>  
128 - </div>  
129 - <!-- ./col -->  
130 - </div>  
131 - <!-- /.row -->  
132 - </div>  
133 - </div>  
134 - <!-- /.box -->  
135 -  
136 - <!-- solid sales graph -->  
137 - <div class="box box-solid bg-teal-gradient">  
138 - <div class="box-header">  
139 - <i class="fa fa-th"></i>  
140 -  
141 - <h3 class="box-title">订单趋势</h3>  
142 -  
143 - <div class="box-tools pull-right">  
144 - </div>  
145 - </div>  
146 - <div class="box-body border-radius-none">  
147 - <div class="chart" id="smoothline-chart" style="height: 250px;"></div>  
148 - </div>  
149 - <!-- /.box-body-->  
150 - <div class="box-footer no-border">  
151 - <div class="row">  
152 - <div class="col-xs-12 text-center">  
153 - <div class="knob-label">统计最近一周订单的趋势</div>  
154 - </div>  
155 - <!-- ./col -->  
156 - </div>  
157 - <!-- /.row -->  
158 - </div>  
159 - </div>  
160 - <!-- /.box -->  
161 -  
162 - </section>  
163 - <!-- right col -->  
164 -</div>  
165 -<!-- /.row (main row) -->  
1 -<div class="panel panel-default panel-intro">  
2 - <div class="panel-heading">  
3 - <div class="panel-lead"><em>多表格(Multitable)</em>用于展示在一个页面展示多个表格数据,并且每次切换时刷新</div>  
4 - <ul class="nav nav-tabs">  
5 - <li class="active"><a href="#first" data-toggle="tab">表格1</a></li>  
6 - <li><a href="#second" data-toggle="tab">表格2</a></li>  
7 - </ul>  
8 - </div>  
9 - <div class="panel-body">  
10 - <div id="myTabContent" class="tab-content">  
11 - <div class="tab-pane fade active in" id="first">  
12 - <div id="toolbar1" class="toolbar">  
13 - {:build_toolbar('refresh')}  
14 - </div>  
15 - <table id="table1" class="table table-striped table-bordered table-hover" width="100%">  
16 - </table>  
17 - </div>  
18 - <div class="tab-pane fade" id="second">  
19 - <div id="toolbar2" class="toolbar">  
20 - {:build_toolbar('refresh')}  
21 - </div>  
22 - <table id="table2" class="table table-striped table-bordered table-hover" width="100%">  
23 - </table>  
24 - </div>  
25 - </div>  
26 - </div>  
27 -</div>  
1 -<div class="panel panel-default panel-intro">  
2 - {:build_heading()}  
3 -  
4 - <div class="panel-body">  
5 - <div id="myTabContent" class="tab-content">  
6 - <div class="tab-pane fade active in" id="one">  
7 - <div class="widget-body no-padding">  
8 - <div id="toolbar" class="toolbar">  
9 - {:build_toolbar('refresh,delete')}  
10 - </div>  
11 - <table id="table" class="table table-striped table-bordered table-hover" width="100%">  
12 -  
13 - </table>  
14 -  
15 -  
16 - </div>  
17 - </div>  
18 -  
19 - </div>  
20 - </div>  
21 -</div>  
1 -<div class="row">  
2 - <div class="col-xs-12 col-sm-6 col-md-5 col-lg-4">  
3 - <div class="panel panel-default panel-intro">  
4 - <div class="panel-body">  
5 - <div id="1" class="tab-content">  
6 - <div class="tab-pane fade active in" id="one">  
7 - <div class="widget-body no-padding">  
8 - <div id="toolbar1" class="toolbar">  
9 - {:build_toolbar('refresh')}  
10 - </div>  
11 - <table id="table1" class="table table-striped table-bordered table-hover" width="100%">  
12 -  
13 - </table>  
14 -  
15 -  
16 - </div>  
17 - </div>  
18 -  
19 - </div>  
20 - </div>  
21 - </div>  
22 - </div>  
23 - <div class="col-xs-12 col-sm-6 col-md-7 col-lg-8">  
24 - <div class="panel panel-default panel-intro">  
25 - <div class="panel-body">  
26 - <div id="myTabContent2" class="tab-content">  
27 - <div class="tab-pane fade active in" id="two">  
28 - <div class="widget-body no-padding">  
29 - <div id="toolbar2" class="toolbar">  
30 - {:build_toolbar('refresh')}  
31 - </div>  
32 - <table id="table2" class="table table-striped table-bordered table-hover" width="100%">  
33 -  
34 - </table>  
35 -  
36 -  
37 - </div>  
38 - </div>  
39 -  
40 - </div>  
41 - </div>  
42 - </div>  
43 - </div>  
44 -</div>  
1 -<div class="panel panel-default panel-intro">  
2 - {:build_heading()}  
3 -  
4 - <div class="panel-body">  
5 - <div id="myTabContent" class="tab-content">  
6 - <div class="tab-pane fade active in" id="one">  
7 - <div class="widget-body no-padding">  
8 - <div id="toolbar" class="toolbar">  
9 - {:build_toolbar('refresh,delete')}  
10 - <a class="btn btn-info btn-disabled disabled btn-selected" href="javascript:;"><i class="fa fa-leaf"></i> 获取选中项</a>  
11 - <a class="btn btn-success btn-toggle-view" href="javascript:;"><i class="fa fa-leaf"></i> 切换视图</a>  
12 - </div>  
13 - <table id="table" class="table table-striped table-hover" width="100%">  
14 -  
15 - </table>  
16 -  
17 - </div>  
18 - </div>  
19 -  
20 - </div>  
21 - </div>  
22 -</div>  
23 -<style type="text/css">  
24 - .example {  
25 - height:100%;position: relative;  
26 - }  
27 - .example > span {  
28 - position:absolute;left:15px;top:15px;  
29 - }  
30 -</style>  
31 -  
32 -<script id="itemtpl" type="text/html">  
33 - <!--  
34 - 如果启用了templateView,默认调用的是itemtpl这个模板,可以通过设置templateFormatter来修改  
35 - 在当前模板中可以使用三个变量(item:行数据,i:当前第几行,data:所有的行数据)  
36 - 此模板引擎使用的是art-templatenative,可参考官方文档  
37 - -->  
38 -  
39 - <div class="col-sm-4 col-md-3">  
40 - <!--下面四行是为了展示随机图片和标签,可移除-->  
41 - <% var imagearr = ['https://cdn.fastadmin.net/uploads/addons/blog.png', 'https://cdn.fastadmin.net/uploads/addons/cms.png', 'https://cdn.fastadmin.net/uploads/addons/vote.png', 'https://cdn.fastadmin.net/uploads/addons/blog.png', 'https://cdn.fastadmin.net/uploads/addons/alisms.png']; %>  
42 - <% var image = imagearr[item.id % 5]; %>  
43 - <% var labelarr = ['primary', 'success', 'info', 'danger', 'warning']; %>  
44 - <% var label = labelarr[item.id % 5]; %>  
45 - <div class="thumbnail example">  
46 - <span class="btn btn-<%=label%>">ID:<%=item.id%></span>  
47 - <img src="<%=image%>" style="width:100%;" alt="<%=item.title%>">  
48 - <div class="caption">  
49 - <h4><%=item.title?item.title:'无'%></h4>  
50 - <p class="text-muted">操作者IP:<%=item.ip%></p>  
51 - <p class="text-muted">操作时间:<%=Moment(item.createtime*1000).format("YYYY-MM-DD HH:mm:ss")%></p>  
52 - <p>  
53 - <!--详情的事件需要在JS中手动绑定-->  
54 - <a href="#" class="btn btn-primary btn-success btn-detail" data-id="<%=item.id%>"><i class="fa fa-camera"></i> 详情</a>  
55 -  
56 - <!--如果需要响应编辑或删除事件,可以给元素添加 btn-editbtn-del的类和data-id这个属性值-->  
57 - <a href="#" class="btn btn-primary btn-edit" data-id="<%=item.id%>"><i class="fa fa-pencil"></i> 编辑</a>  
58 - <a href="#" class="btn btn-danger btn-del" data-id="<%=item.id%>"><i class="fa fa-times"></i> 删除</a>  
59 - <span class="pull-right" style="margin-top:10px;">  
60 - <!--如果需要多选操作,请确保有下面的checkbox元素存在,可移除-->  
61 - <input name="checkbox" data-id="<%=item.id%>" type="checkbox" />  
62 - </span>  
63 - </p>  
64 - </div>  
65 - </div>  
66 - </div>  
67 -</script>  
@@ -30,10 +30,6 @@ return [ @@ -30,10 +30,6 @@ return [
30 ], 30 ],
31 ], 31 ],
32 'route' => [ 32 'route' => [
33 - '/example$' => 'example/index/index',  
34 - '/example/d/[:name]' => 'example/demo/index',  
35 - '/example/d1/[:name]' => 'example/demo/demo1',  
36 - '/example/d2/[:name]' => 'example/demo/demo2',  
37 '/qrcode$' => 'qrcode/index/index', 33 '/qrcode$' => 'qrcode/index/index',
38 '/qrcode/build$' => 'qrcode/index/build', 34 '/qrcode/build$' => 'qrcode/index/build',
39 ], 35 ],
1 -html,  
2 -body {  
3 - height: 100%;  
4 -}  
5 -  
6 -body {  
7 - padding-top: 50px; /* Required padding for .navbar-fixed-top. Remove if using .navbar-static-top. Change if height of navigation changes. */  
8 - -webkit-font-smoothing: antialiased;  
9 - -moz-osx-font-smoothing: grayscale;  
10 - font-family: 'Source Sans Pro', 'Helvetica Neue', Helvetica, Arial, sans-serif;  
11 -}  
12 -  
13 -.img-addon {  
14 - margin-bottom: 10px;  
15 - width:100%;  
16 -}  
17 -  
18 -.img-hover:hover {  
19 - opacity: 0.8;  
20 -}  
21 -  
22 -.display-1 {  
23 - font-size:44px;  
24 -}  
25 -.display-4 {  
26 - font-size:24px;  
27 - line-height:32px;  
28 -}  
29 -  
30 -/* Home Page Carousel */  
31 -  
32 -header.carousel {  
33 - height: 50%;  
34 -}  
35 -  
36 -header.carousel .item,  
37 -header.carousel .item.active,  
38 -header.carousel .carousel-inner {  
39 - height: 100%;  
40 -}  
41 -  
42 -header.carousel .fill {  
43 - width: 100%;  
44 - height: 100%;  
45 -}  
46 -  
47 -/* 404 Page Styles */  
48 -  
49 -.error-404 {  
50 - font-size: 100px;  
51 -}  
52 -  
53 -/* Pricing Page Styles */  
54 -  
55 -.price {  
56 - display: block;  
57 - font-size: 50px;  
58 - line-height: 50px;  
59 -}  
60 -  
61 -.price sup {  
62 - top: -20px;  
63 - left: 2px;  
64 - font-size: 20px;  
65 -}  
66 -  
67 -.period {  
68 - display: block;  
69 - font-style: italic;  
70 -}  
71 -  
72 -/* Footer Styles */  
73 -  
74 -footer {  
75 - margin: 50px 0;  
76 -}  
77 -  
78 -/* Responsive Styles */  
79 -  
80 -@media(max-width:991px) {  
81 - .customer-img,  
82 - .img-related {  
83 - margin-bottom: 30px;  
84 - }  
85 -}  
86 -  
87 -@media(max-width:767px) {  
88 - .img-addon {  
89 - margin-bottom: 15px;  
90 - }  
91 -  
92 - header.carousel .carousel {  
93 - height: 70%;  
94 - }  
95 -}  
96 -.carousel-body {  
97 - position:absolute;  
98 - width: 100%;  
99 - top:25%;  
100 - text-align:center;  
101 - color:#fff;  
102 -}  
103 -  
104 -.addonlist a > p{  
105 - margin-bottom:15px;  
106 -}  
1 -/** @license  
2 - * RequireJS plugin for async dependency load like JSONP and Google Maps  
3 - * Author: Miller Medeiros  
4 - * Version: 0.1.2 (2014/02/24)  
5 - * Released under the MIT license  
6 - */  
7 -define(function(){  
8 -  
9 - var DEFAULT_PARAM_NAME = 'callback',  
10 - _uid = 0;  
11 -  
12 - function injectScript(src){  
13 - var s, t;  
14 - s = document.createElement('script'); s.type = 'text/javascript'; s.async = true; s.src = src;  
15 - t = document.getElementsByTagName('script')[0]; t.parentNode.insertBefore(s,t);  
16 - }  
17 -  
18 - function formatUrl(name, id){  
19 - var paramRegex = /!(.+)/,  
20 - url = name.replace(paramRegex, ''),  
21 - param = (paramRegex.test(name))? name.replace(/.+!/, '') : DEFAULT_PARAM_NAME;  
22 - url += (url.indexOf('?') < 0)? '?' : '&';  
23 - return url + param +'='+ id;  
24 - }  
25 -  
26 - function uid() {  
27 - _uid += 1;  
28 - return '__async_req_'+ _uid +'__';  
29 - }  
30 -  
31 - return{  
32 - load : function(name, req, onLoad, config){  
33 - if(config.isBuild){  
34 - onLoad(null); //avoid errors on the optimizer  
35 - }else{  
36 - var id = uid();  
37 - //create a global variable that stores onLoad so callback  
38 - //function can define new module after async load  
39 - window[id] = onLoad;  
40 - injectScript(formatUrl(req.toUrl(name), id));  
41 - }  
42 - }  
43 - };  
44 -});  
1 -define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'template'], function ($, undefined, Backend, Table, Form, Template) {  
2 -  
3 - var Controller = {  
4 - index: function () {  
5 - // 初始化表格参数配置  
6 - Table.api.init({  
7 - extend: {  
8 - index_url: 'example/bootstraptable/index',  
9 - add_url: '',  
10 - edit_url: 'example/bootstraptable/edit',  
11 - del_url: 'example/bootstraptable/del',  
12 - multi_url: '',  
13 - }  
14 - });  
15 -  
16 - var table = $("#table");  
17 -  
18 - //在普通搜索提交搜索前  
19 - table.on('common-search.bs.table', function (event, table, query) {  
20 - //这里可以获取到普通搜索表单中字段的查询条件  
21 - console.log(query);  
22 - });  
23 -  
24 - //在普通搜索渲染后  
25 - table.on('post-common-search.bs.table', function (event, table) {  
26 - var form = $("form", table.$commonsearch);  
27 - $("input[name='title']", form).addClass("selectpage").data("source", "example/bootstraptable/selectpage").data("primaryKey", "title").data("field", "title").data("orderBy", "id desc");  
28 - $("input[name='username']", form).addClass("selectpage").data("source", "auth/admin/index").data("primaryKey", "username").data("field", "username").data("orderBy", "id desc");  
29 - Form.events.cxselect(form);  
30 - Form.events.selectpage(form);  
31 - });  
32 -  
33 - //在表格内容渲染完成后回调的事件  
34 - table.on('post-body.bs.table', function (e, settings, json, xhr) {  
35 - console.log(e, settings, json, xhr);  
36 - });  
37 -  
38 - //当表格数据加载完成时  
39 - table.on('load-success.bs.table', function (e, data) {  
40 - //这里可以获取从服务端获取的JSON数据  
41 - console.log(data);  
42 - //这里我们手动设置底部的值  
43 - $("#money").text(data.extend.money);  
44 - $("#price").text(data.extend.price);  
45 - });  
46 -  
47 - // 初始化表格  
48 - // 这里使用的是Bootstrap-table插件渲染表格  
49 - // 相关文档:https://doc.fastadmin.net/doc/table.html  
50 - table.bootstrapTable({  
51 - //表格参数可以参考:https://doc.fastadmin.net/doc/190.html  
52 - url: $.fn.bootstrapTable.defaults.extend.index_url,  
53 - columns: [  
54 - [  
55 - //更多列参数可以参考:https://doc.fastadmin.net/doc/191.html  
56 - //该列为复选框字段,如果后台的返回state值将会默认选中  
57 - {field: 'state', checkbox: true,},  
58 - //sortable为是否排序,operate为搜索时的操作符,visible表示是否可见  
59 - {field: 'id', title: 'ID', sortable: true, operate: false},  
60 - //直接响应搜索  
61 - {field: 'username', title: __('管理员'), formatter: Table.api.formatter.search},  
62 - //模糊搜索  
63 - {field: 'title', title: __('Title'), operate: 'LIKE %...%', placeholder: '模糊搜索,*表示任意字符', width: '280px'},  
64 - //通过Ajax渲染searchList,也可以使用JSON数据  
65 - {  
66 - field: 'url',  
67 - title: __('Url'),  
68 - align: 'left',  
69 - searchList: $.getJSON('example/bootstraptable/searchlist?search=a&field=row[user_id]'),  
70 - formatter: Controller.api.formatter.url,  
71 - addClass: "selectpicker"  
72 - },  
73 - //点击IP时同时执行搜索此IP  
74 - {  
75 - field: 'ip',  
76 - title: __('IP'),  
77 - events: Controller.api.events.ip,  
78 - formatter: Controller.api.formatter.ip  
79 - },  
80 - //自定义栏位,custom是不存在的字段  
81 - {field: 'custom', title: __('切换'), operate: false, formatter: Controller.api.formatter.custom},  
82 - {  
83 - field: 'admin_id', title: __('联动搜索'), searchList: function (column) {  
84 - return Template('categorytpl', {});  
85 - }, formatter: function (value, row, index) {  
86 - return '无';  
87 - }, visible: false  
88 - },  
89 - //启用时间段搜索  
90 - {  
91 - field: 'createtime',  
92 - title: __('Update time'),  
93 - sortable: true,  
94 - formatter: Table.api.formatter.datetime,  
95 - operate: 'RANGE',  
96 - addclass: 'datetimerange'  
97 - },  
98 - //操作栏,默认有编辑、删除或排序按钮,可自定义配置buttons来扩展按钮  
99 - {  
100 - field: 'operate',  
101 - width: "150px",  
102 - title: __('Operate'),  
103 - table: table,  
104 - events: Table.api.events.operate,  
105 - buttons: [  
106 - {  
107 - name: 'click',  
108 - title: __('点击执行事件'),  
109 - classname: 'btn btn-xs btn-info btn-click',  
110 - icon: 'fa fa-leaf',  
111 - // dropdown: '更多',//如果包含dropdown,将会以下拉列表的形式展示  
112 - click: function (data) {  
113 - Layer.alert("点击按钮执行的事件");  
114 - }  
115 - },  
116 - {  
117 - name: 'detail',  
118 - title: __('弹出窗口打开'),  
119 - classname: 'btn btn-xs btn-primary btn-dialog',  
120 - icon: 'fa fa-list',  
121 - url: 'example/bootstraptable/detail',  
122 - callback: function (data) {  
123 - Layer.alert("接收到回传数据:" + JSON.stringify(data), {title: "回传数据"});  
124 - }  
125 - },  
126 - {  
127 - name: 'ajax',  
128 - title: __('发送Ajax'),  
129 - classname: 'btn btn-xs btn-success btn-magic btn-ajax',  
130 - icon: 'fa fa-magic',  
131 - confirm: '确认发送Ajax请求?',  
132 - url: 'example/bootstraptable/detail',  
133 - success: function (data, ret) {  
134 - Layer.alert(ret.msg + ",返回数据:" + JSON.stringify(data));  
135 - //如果需要阻止成功提示,则必须使用return false;  
136 - //return false;  
137 - },  
138 - error: function (data, ret) {  
139 - console.log(data, ret);  
140 - Layer.alert(ret.msg);  
141 - return false;  
142 - }  
143 - },  
144 - {  
145 - name: 'addtabs',  
146 - title: __('新选项卡中打开'),  
147 - classname: 'btn btn-xs btn-warning btn-addtabs',  
148 - icon: 'fa fa-folder-o',  
149 - url: 'example/bootstraptable/detail'  
150 - }  
151 - ],  
152 - formatter: Table.api.formatter.operate  
153 - },  
154 - ],  
155 - ],  
156 - //更多配置参数可参考:https://doc.fastadmin.net/doc/190.html  
157 - //亦可以参考require-table.js中defaults的配置  
158 - //快捷搜索,这里可在控制器定义快捷搜索的字段  
159 - search: true,  
160 - //启用普通表单搜索  
161 - commonSearch: true,  
162 - //显示导出按钮  
163 - showExport: true,  
164 - //启用跨页选择  
165 - maintainSelected: true,  
166 - //启用固定列  
167 - fixedColumns: true,  
168 - //固定左侧列数  
169 - fixedNumber: 3,  
170 - //固定右侧列数  
171 - fixedRightNumber: 1,  
172 - //导出类型  
173 - exportDataType: "all", //共有basic, all, selected三种值 basic当前页 all全部 selected仅选中  
174 - //导出下拉列表选项  
175 - exportTypes: ['json', 'xml', 'csv', 'txt', 'doc', 'excel'],  
176 - //可以控制是否默认显示搜索单表,false则隐藏,默认为false  
177 - searchFormVisible: true,  
178 - queryParams: function (params) {  
179 - //这里可以追加搜索条件  
180 - var filter = JSON.parse(params.filter);  
181 - var op = JSON.parse(params.op);  
182 - //这里可以动态赋值,比如从URL中获取admin_id的值,filter.admin_id=Fast.api.query('admin_id');  
183 - filter.admin_id = 1;  
184 - op.admin_id = "=";  
185 - params.filter = JSON.stringify(filter);  
186 - params.op = JSON.stringify(op);  
187 - return params;  
188 - },  
189 - });  
190 -  
191 - // 为表格绑定事件  
192 - Table.api.bindevent(table);  
193 -  
194 - // 监听下拉列表改变的事件  
195 - $(document).on('change', 'select[name=admin]', function () {  
196 - $("input[name='admin_id']").val($(this).val());  
197 - });  
198 -  
199 - //自定义Tab筛选条件  
200 - $('.panel-heading .nav-custom-condition a[data-toggle="tab"]', table.closest(".panel-intro")).on('shown.bs.tab', function (e) {  
201 - var value = $(this).data("value");  
202 - var options = table.bootstrapTable('getOptions');  
203 - var queryParams = options.queryParams;  
204 - options.pageNumber = 1;  
205 - options.queryParams = function (params) {  
206 - //这一行必须要存在,否则在点击下一页时会丢失搜索栏数据  
207 - params = queryParams(params);  
208 -  
209 - //如果希望追加搜索条件,可使用  
210 - var filter = params.filter ? JSON.parse(params.filter) : {};  
211 - var op = params.op ? JSON.parse(params.op) : {};  
212 - if (value) {  
213 - //这里可以自定义多个筛选条件  
214 - filter.admin_id = value;  
215 - op.admin_id = '=';  
216 - } else {  
217 - //选全部时要移除相应的条件  
218 - delete filter.admin_id;  
219 - delete op.admin_id;  
220 - }  
221 -  
222 - params.filter = JSON.stringify(filter);  
223 - params.op = JSON.stringify(op);  
224 -  
225 - //如果希望忽略搜索栏搜索条件,可使用  
226 - //params.filter = JSON.stringify(value?{admin_id: value}:{});  
227 - //params.op = JSON.stringify(value?{admin_id: '='}:{});  
228 - return params;  
229 - };  
230 -  
231 - table.trigger("uncheckbox");  
232 - table.bootstrapTable('refresh', {pageNumber: 1});  
233 - return false;  
234 - });  
235 -  
236 - // 指定搜索条件  
237 - $(document).on("click", ".btn-singlesearch", function () {  
238 - var options = table.bootstrapTable('getOptions');  
239 - var queryParams = options.queryParams;  
240 - options.pageNumber = 1;  
241 - options.queryParams = function (params) {  
242 - //这一行必须要存在,否则在点击下一页时会丢失搜索栏数据  
243 - params = queryParams(params);  
244 -  
245 - //如果希望追加搜索条件,可使用  
246 - var filter = params.filter ? JSON.parse(params.filter) : {};  
247 - var op = params.op ? JSON.parse(params.op) : {};  
248 - filter.url = 'login';  
249 - op.url = 'like';  
250 -  
251 - params.filter = JSON.stringify(filter);  
252 - params.op = JSON.stringify(op);  
253 -  
254 - //如果希望忽略搜索栏搜索条件,可使用  
255 - //params.filter = JSON.stringify({url: 'login'});  
256 - //params.op = JSON.stringify({url: 'like'});  
257 - return params;  
258 - };  
259 - table.bootstrapTable('refresh', {});  
260 - Toastr.info("当前执行的是自定义搜索,搜索URL中包含login的数据");  
261 - return false;  
262 - });  
263 -  
264 - // 获取选中项  
265 - $(document).on("click", ".btn-selected", function () {  
266 - Layer.alert(JSON.stringify(Table.api.selecteddata(table)));  
267 - });  
268 -  
269 - // 启动和暂停按钮  
270 - $(document).on("click", ".btn-start,.btn-pause", function () {  
271 - //在table外不可以使用添加.btn-change的方法  
272 - //只能自己调用Table.api.multi实现  
273 - //如果操作全部则ids可以置为空  
274 - var ids = Table.api.selectedids(table);  
275 - Table.api.multi("changestatus", ids.join(","), table, this);  
276 - });  
277 -  
278 - },  
279 - add: function () {  
280 - Controller.api.bindevent();  
281 - },  
282 - edit: function () {  
283 - Controller.api.bindevent();  
284 - },  
285 - detail: function () {  
286 - $(document).on('click', '.btn-callback', function () {  
287 - Fast.api.close($("input[name=callback]").val());  
288 - });  
289 - },  
290 - api: {  
291 - bindevent: function () {  
292 - Form.api.bindevent($("form[role=form]"));  
293 - },  
294 - formatter: {//渲染的方法  
295 - url: function (value, row, index) {  
296 - return '<div class="input-group input-group-sm" style="width:250px;"><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>';  
297 - },  
298 - ip: function (value, row, index) {  
299 - return '<a class="btn btn-xs btn-ip bg-success"><i class="fa fa-map-marker"></i> ' + value + '</a>';  
300 - },  
301 - custom: function (value, row, index) {  
302 - //添加上btn-change可以自定义请求的URL进行数据处理  
303 - return '<a class="btn-change text-success" data-url="example/bootstraptable/change" data-confirm="确认切换状态?" data-id="' + row.id + '"><i class="fa ' + (row.title == '' ? 'fa-toggle-on fa-flip-horizontal text-gray' : 'fa-toggle-on') + ' fa-2x"></i></a>';  
304 - },  
305 - },  
306 - events: {//绑定事件的方法  
307 - ip: {  
308 - //格式为:方法名+空格+DOM元素  
309 - 'click .btn-ip': function (e, value, row, index) {  
310 - e.stopPropagation();  
311 - var container = $("#table").data("bootstrap.table").$container;  
312 - var options = $("#table").bootstrapTable('getOptions');  
313 - //这里我们手动将数据填充到表单然后提交  
314 - $("form.form-commonsearch [name='ip']", container).val(value);  
315 - $("form.form-commonsearch", container).trigger('submit');  
316 - Toastr.info("执行了自定义搜索操作");  
317 - }  
318 - },  
319 - }  
320 - }  
321 - };  
322 - return Controller;  
323 -});  
1 -define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {  
2 -  
3 - var Controller = {  
4 - index: function () {  
5 - // 初始化表格参数配置  
6 - Table.api.init({  
7 - extend: {  
8 - index_url: 'example/colorbadge/index',  
9 - add_url: '',  
10 - edit_url: '',  
11 - del_url: 'example/colorbadge/del',  
12 - multi_url: '',  
13 - }  
14 - });  
15 -  
16 - var table = $("#table");  
17 -  
18 - // 初始化表格  
19 - table.bootstrapTable({  
20 - url: $.fn.bootstrapTable.defaults.extend.index_url,  
21 - columns: [  
22 - [  
23 - {field: 'state', checkbox: true, },  
24 - {field: 'id', title: 'ID'},  
25 - {field: 'title', title: __('Title')},  
26 - {field: 'ip', title: __('IP')},  
27 - {field: 'createtime', title: __('Create time'), formatter: Table.api.formatter.datetime, operate: 'RANGE', addclass: 'datetimerange', sortable: true},  
28 - {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}  
29 - ]  
30 - ],  
31 - onLoadSuccess: function (data) {  
32 - // 在表格第次加载成功后,刷新左侧菜单栏彩色小角标,支持一次渲染多个  
33 - // 如果需要在进入后台即显示左侧的彩色小角标,请使用服务端渲染方式,详情修改application/admin/controller/Index.php  
34 - Backend.api.sidebar({  
35 - 'example/colorbadge': data.total  
36 - });  
37 - Toastr.info("左侧角标已经刷新成功");  
38 - }  
39 - });  
40 -  
41 - // 为表格绑定事件  
42 - Table.api.bindevent(table);  
43 - },  
44 - add: function () {  
45 - Form.api.bindevent($("form[role=form]"));  
46 - },  
47 - edit: function () {  
48 - Form.api.bindevent($("form[role=form]"));  
49 - }  
50 - };  
51 - return Controller;  
52 -});  
1 -define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {  
2 -  
3 - var Controller = {  
4 - index: function () {  
5 - // 初始化表格参数配置  
6 - Table.api.init({  
7 - extend: {  
8 - index_url: 'example/controllerjump/index',  
9 - add_url: '',  
10 - edit_url: '',  
11 - del_url: 'example/controllerjump/del',  
12 - multi_url: '',  
13 - }  
14 - });  
15 -  
16 - var table = $("#table");  
17 -  
18 - // 初始化表格  
19 - table.bootstrapTable({  
20 - url: $.fn.bootstrapTable.defaults.extend.index_url,  
21 - columns: [  
22 - [  
23 - {field: 'state', checkbox: true, },  
24 - {field: 'id', title: 'ID'},  
25 - {field: 'admin_id', title: __('Admin_id')},  
26 - {field: 'title', title: __('Title')},  
27 - {field: 'ip', title: __('IP'),formatter: Controller.api.formatter.ip},  
28 - {field: 'createtime', title: __('Create time'), formatter: Table.api.formatter.datetime, operate: 'RANGE', addclass: 'datetimerange', sortable: true},  
29 - {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}  
30 - ]  
31 - ]  
32 - });  
33 -  
34 - // 为表格绑定事件  
35 - Table.api.bindevent(table);  
36 - },  
37 - add: function () {  
38 - Form.api.bindevent($("form[role=form]"));  
39 - },  
40 - edit: function () {  
41 - Form.api.bindevent($("form[role=form]"));  
42 - },  
43 - api: {  
44 - formatter: {  
45 - ip: function (value, row, index) {  
46 - //这里手动构造URL  
47 - url = "example/bootstraptable?" + this.field + "=" + value;  
48 -  
49 - //方式一,直接返回class带有addtabsit的链接,这可以方便自定义显示内容  
50 - //return '<a href="' + url + '" class="label label-success addtabsit" title="' + __("Search %s", value) + '">' + __('Search %s', value) + '</a>';  
51 -  
52 - //方式二,直接调用Table.api.formatter.addtabs  
53 - this.url = url;  
54 - return Table.api.formatter.addtabs.call(this, value, row, index);  
55 - }  
56 - }  
57 - }  
58 - };  
59 - return Controller;  
60 -});  
1 -define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {  
2 -  
3 - var Controller = {  
4 - index: function () {  
5 - Template.helper("Fast", Fast);  
6 -  
7 - //因为日期选择框不会触发change事件,导致无法刷新textarea,所以加上判断  
8 - $(document).on("dp.change", "#second-form .datetimepicker", function () {  
9 - $(this).parent().prev().find("input").trigger("change");  
10 - });  
11 - $(document).on("fa.event.appendfieldlist", "#first-table .btn-append", function (e, obj) {  
12 -  
13 - });  
14 - $(document).on("fa.event.appendfieldlist", "#second-table .btn-append", function (e, obj) {  
15 - //绑定动态下拉组件  
16 - Form.events.selectpage(obj);  
17 - //绑定日期组件  
18 - Form.events.datetimepicker(obj);  
19 - //绑定上传组件  
20 - Form.events.faupload(obj);  
21 -  
22 - //上传成功回调事件,变更按钮的背景  
23 - $(".upload-image", obj).data("upload-success", function (data) {  
24 - $(this).css("background-image", "url('" + Fast.api.cdnurl(data.url) + "')");  
25 - })  
26 - });  
27 - Form.api.bindevent($("form[role=form]"), function (data, ret) {  
28 - Layer.alert(data.data);  
29 - });  
30 - },  
31 - };  
32 - return Controller;  
33 -});  
1 -define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {  
2 - var Controller = {  
3 - index: function () {  
4 - //  
5 - // 初始化表格参数配置  
6 - Table.api.init({  
7 - extend: {  
8 - index_url: 'example/customsearch/index',  
9 - add_url: 'example/customsearch/add',  
10 - edit_url: '',  
11 - del_url: 'example/customsearch/del',  
12 - multi_url: 'example/customsearch/multi',  
13 - table: '',  
14 - }  
15 - });  
16 -  
17 - var table = $("#table");  
18 -  
19 - // 初始化表格  
20 - table.bootstrapTable({  
21 - url: $.fn.bootstrapTable.defaults.extend.index_url,  
22 - pk: 'id',  
23 - sortName: 'id',  
24 - searchFormVisible: true,  
25 - searchFormTemplate: 'customformtpl',  
26 - columns: [  
27 - [  
28 - {checkbox: true},  
29 - {field: 'id', title: 'ID', operate: false},  
30 - {field: 'admin_id', title: __('Admin_id'), visible: false, operate: false},  
31 - {field: 'username', title: __('Username'), formatter: Table.api.formatter.search},  
32 - {field: 'title', title: __('Title')},  
33 - {field: 'url', title: __('Url'), align: 'left'},  
34 - {field: 'ip', title: __('IP')},  
35 - {field: 'createtime', title: __('Create time'), formatter: Table.api.formatter.datetime, operate: 'RANGE', addclass: 'datetimerange', sortable: true},  
36 - {  
37 - field: 'operate',  
38 - title: __('Operate'),  
39 - table: table,  
40 - events: Table.api.events.operate,  
41 - formatter: Table.api.formatter.operate  
42 - }  
43 - ]  
44 - ]  
45 - });  
46 -  
47 - // 为表格绑定事件  
48 - Table.api.bindevent(table);  
49 - },  
50 - add: function () {  
51 - Controller.api.bindevent();  
52 - },  
53 - edit: function () {  
54 - Controller.api.bindevent();  
55 - },  
56 - api: {  
57 - bindevent: function () {  
58 - Form.api.bindevent($("form[role=form]"));  
59 - }  
60 - }  
61 - };  
62 - return Controller;  
63 -});  
1 -define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {  
2 -  
3 - var Controller = {  
4 - index: function () {  
5 - $("#cxselect-example .col-xs-12").each(function () {  
6 - $("textarea", this).val($(this).prev().prev().html().replace(/[ ]{2}/g, ''));  
7 - });  
8 -  
9 - //这里需要手动为Form绑定上元素事件  
10 - Form.api.bindevent($("form#cxselectform"));  
11 - }  
12 - };  
13 - return Controller;  
14 -});  
1 -define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'template', 'echarts', 'echarts-theme'], function ($, undefined, Backend, Table, Form, Template, Echarts) {  
2 -  
3 - var Controller = {  
4 - index: function () {  
5 - //这句话在多选项卡统计表时必须存在,否则会导致影响的图表宽度不正确  
6 - $(document).on("click", ".charts-custom a[data-toggle=\"tab\"]", function () {  
7 - var that = this;  
8 - setTimeout(function () {  
9 - var id = $(that).attr("href");  
10 - var chart = Echarts.getInstanceByDom($(id)[0]);  
11 - chart.resize();  
12 - }, 0);  
13 - });  
14 -  
15 - // 基于准备好的dom,初始化echarts实例  
16 - var lineChart = Echarts.init(document.getElementById('line-chart'), 'walden');  
17 -  
18 - // 指定图表的配置项和数据  
19 - var option = {  
20 - xAxis: {  
21 - type: 'category',  
22 - data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']  
23 - },  
24 - yAxis: {  
25 - type: 'value'  
26 - },  
27 - series: [{  
28 - data: [49, 92, 61, 134, 90, 130, 120],  
29 - type: 'line'  
30 - }]  
31 - };  
32 -  
33 - // 使用刚指定的配置项和数据显示图表。  
34 - lineChart.setOption(option);  
35 - // 基于准备好的dom,初始化echarts实例  
36 - var areaChart = Echarts.init(document.getElementById('area-chart'), 'walden');  
37 -  
38 - // 指定图表的配置项和数据  
39 - var option = {  
40 - xAxis: {  
41 - type: 'category',  
42 - boundaryGap: false,  
43 - data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']  
44 - },  
45 - yAxis: {  
46 - type: 'value'  
47 - },  
48 - series: [{  
49 - data: [820, 932, 901, 934, 1290, 1330, 1320],  
50 - type: 'line',  
51 - areaStyle: {}  
52 - }]  
53 - };  
54 -  
55 - // 使用刚指定的配置项和数据显示图表。  
56 - areaChart.setOption(option);  
57 -  
58 - var pieChart = Echarts.init(document.getElementById('pie-chart'), 'walden');  
59 - var option = {  
60 - tooltip: {  
61 - trigger: 'item',  
62 - formatter: '{a} <br/>{b}: {c} ({d}%)'  
63 - },  
64 - legend: {  
65 - orient: 'vertical',  
66 - left: 10,  
67 - data: ['直接访问', '邮件营销', '联盟广告', '视频广告', '搜索引擎']  
68 - },  
69 - series: [  
70 - {  
71 - name: '访问来源',  
72 - type: 'pie',  
73 - radius: ['50%', '70%'],  
74 - avoidLabelOverlap: false,  
75 - label: {  
76 - normal: {  
77 - show: false,  
78 - position: 'center'  
79 - },  
80 - emphasis: {  
81 - show: true,  
82 - textStyle: {  
83 - fontSize: '30',  
84 - fontWeight: 'bold'  
85 - }  
86 - }  
87 - },  
88 - labelLine: {  
89 - normal: {  
90 - show: false  
91 - }  
92 - },  
93 - data: [  
94 - {value: 335, name: '直接访问'},  
95 - {value: 310, name: '邮件营销'},  
96 - {value: 234, name: '联盟广告'},  
97 - {value: 135, name: '视频广告'},  
98 - {value: 1548, name: '搜索引擎'}  
99 - ]  
100 - }  
101 - ]  
102 - };  
103 - // 使用刚指定的配置项和数据显示图表。  
104 - pieChart.setOption(option);  
105 -  
106 - var barChart = Echarts.init(document.getElementById('bar-chart'), 'walden');  
107 - option = {  
108 - legend: {},  
109 - tooltip: {},  
110 - dataset: {  
111 - source: [  
112 - ['产品销售', '2015', '2016', '2017'],  
113 - ['风扇', 43.3, 85.8, 93.7],  
114 - ['电视机', 83.1, 73.4, 55.1],  
115 - ['空调', 86.4, 65.2, 82.5],  
116 - ['冰箱', 72.4, 53.9, 39.1]  
117 - ]  
118 - },  
119 - xAxis: {type: 'category'},  
120 - yAxis: {},  
121 - // Declare several bar series, each will be mapped  
122 - // to a column of dataset.source by default.  
123 - series: [  
124 - {type: 'bar'},  
125 - {type: 'bar'},  
126 - {type: 'bar'}  
127 - ]  
128 - };  
129 - // 使用刚指定的配置项和数据显示图表。  
130 - barChart.setOption(option);  
131 -  
132 -  
133 - var barChart = Echarts.init(document.getElementById('simplebar-chart'));  
134 - option = {  
135 - xAxis: {  
136 - type: 'category',  
137 - axisLine: {  
138 - lineStyle: {  
139 - color: "#fff"  
140 - }  
141 - },  
142 - data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']  
143 - },  
144 - yAxis: {  
145 - type: 'value',  
146 - axisLine: {  
147 - lineStyle: {  
148 - color: "#fff"  
149 - }  
150 - }  
151 - },  
152 - series: [{  
153 - data: [120, 200, 150, 80, 70, 110, 130],  
154 - type: 'bar',  
155 - itemStyle: {  
156 - color: "#fff",  
157 - opacity: 0.6  
158 - }  
159 - }]  
160 - };  
161 - // 使用刚指定的配置项和数据显示图表。  
162 - barChart.setOption(option);  
163 -  
164 - var barChart = Echarts.init(document.getElementById('smoothline-chart'));  
165 - option = {  
166 - textStyle: {  
167 - color: "#fff"  
168 - },  
169 - color: ['#fff'],  
170 - xAxis: {  
171 - type: 'category',  
172 - boundaryGap: false,  
173 - data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'],  
174 - axisLine: {  
175 - lineStyle: {  
176 - color: "#fff"  
177 - }  
178 - }  
179 - },  
180 - yAxis: {  
181 - type: 'value',  
182 - splitLine: {  
183 - show: false  
184 - },  
185 - axisLine: {  
186 - lineStyle: {  
187 - color: "#fff"  
188 - }  
189 - }  
190 - },  
191 - series: [{  
192 - data: [820, 932, 901, 934, 1290, 1330, 1320],  
193 - type: 'line',  
194 - smooth: true,  
195 - areaStyle: {  
196 - opacity: 0.4  
197 - }  
198 -  
199 - }]  
200 - };  
201 - // 使用刚指定的配置项和数据显示图表。  
202 - barChart.setOption(option);  
203 - }  
204 - };  
205 - return Controller;  
206 -});  
1 -define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {  
2 -  
3 - var Controller = {  
4 - index: function () {  
5 - // 初始化表格参数配置  
6 - Table.api.init();  
7 -  
8 - //绑定事件  
9 - $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {  
10 - var panel = $($(this).attr("href"));  
11 - if (panel.length > 0) {  
12 - Controller.table[panel.attr("id")].call(this);  
13 - $(this).on('click', function (e) {  
14 - $($(this).attr("href")).find(".btn-refresh").trigger("click");  
15 - });  
16 - }  
17 - //移除绑定的事件  
18 - $(this).unbind('shown.bs.tab');  
19 - });  
20 -  
21 - //必须默认触发shown.bs.tab事件  
22 - $('ul.nav-tabs li.active a[data-toggle="tab"]').trigger("shown.bs.tab");  
23 - },  
24 - table: {  
25 - first: function () {  
26 - // 表格1  
27 - var table1 = $("#table1");  
28 - table1.bootstrapTable({  
29 - url: 'example/multitable/table1',  
30 - toolbar: '#toolbar1',  
31 - sortName: 'id',  
32 - search: false,  
33 - columns: [  
34 - [  
35 - {field: 'state', checkbox: true, },  
36 - {field: 'id', title: 'ID'},  
37 - {field: 'filename', title: __('Name')},  
38 - {field: 'imagewidth', title: __('Imagewidth')},  
39 - {field: 'imageheight', title: __('Imageheight')},  
40 - {field: 'mimetype', title: __('Mimetype')},  
41 - {field: 'operate', title: __('Operate'), table: table1, events: Table.api.events.operate, formatter: Table.api.formatter.operate}  
42 - ]  
43 - ]  
44 - });  
45 -  
46 - // 为表格1绑定事件  
47 - Table.api.bindevent(table1);  
48 - },  
49 - second: function () {  
50 - // 表格2  
51 - var table2 = $("#table2");  
52 - table2.bootstrapTable({  
53 - url: 'example/multitable/table2',  
54 - extend: {  
55 - index_url: '',  
56 - add_url: '',  
57 - edit_url: '',  
58 - del_url: '',  
59 - multi_url: '',  
60 - table: '',  
61 - },  
62 - toolbar: '#toolbar2',  
63 - sortName: 'id',  
64 - search: false,  
65 - columns: [  
66 - [  
67 - {field: 'id', title: 'ID'},  
68 - {field: 'title', title: __('Title')},  
69 - {field: 'url', title: __('Url'), align: 'left', formatter: Table.api.formatter.url},  
70 - {field: 'ip', title: __('ip')},  
71 - {field: 'createtime', title: __('Createtime'), formatter: Table.api.formatter.datetime, operate: 'RANGE', addclass: 'datetimerange', sortable: true},  
72 - ]  
73 - ]  
74 - });  
75 -  
76 - // 为表格2绑定事件  
77 - Table.api.bindevent(table2);  
78 - }  
79 - },  
80 - add: function () {  
81 - Controller.api.bindevent();  
82 - },  
83 - edit: function () {  
84 - Controller.api.bindevent();  
85 - },  
86 - api: {  
87 - bindevent: function () {  
88 - Form.api.bindevent($("form[role=form]"));  
89 - },  
90 - }  
91 - };  
92 - return Controller;  
93 -});  
1 -define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {  
2 -  
3 - var Controller = {  
4 - index: function () {  
5 - // 初始化表格参数配置  
6 - Table.api.init({  
7 - extend: {  
8 - index_url: 'example/relationmodel/index',  
9 - add_url: '',  
10 - edit_url: '',  
11 - del_url: 'example/relationmodel/del',  
12 - multi_url: '',  
13 - }  
14 - });  
15 -  
16 - var table = $("#table");  
17 -  
18 - // 初始化表格  
19 - table.bootstrapTable({  
20 - url: $.fn.bootstrapTable.defaults.extend.index_url,  
21 - columns: [  
22 - [  
23 - {field: 'state', checkbox: true, },  
24 - {field: 'id', title: 'ID', operate: '='},  
25 - {field: 'title', title: __('Title'), operate: 'LIKE %...%', placeholder: '关键字,模糊搜索'},  
26 - {field: 'admin.avatar', title: __('Avatar'), operate: false, formatter: Table.api.formatter.image},  
27 - {field: 'admin.username', title: __('Username'), operate: 'FIND_IN_SET'},  
28 - {field: 'admin.nickname', title: __('Nickname'), operate: 'LIKE %...%', placeholder: '关键字,模糊搜索'},  
29 - {field: 'ip', title: __('IP'), operate: '='},  
30 - {field: 'createtime', title: __('Create time'), formatter: Table.api.formatter.datetime, operate: 'RANGE', addclass: 'datetimerange', sortable: true},  
31 - {field: 'admin.createtime', title: __('Create time'), formatter: Table.api.formatter.datetime, operate: 'RANGE', addclass: 'datetimerange', sortable: true},  
32 - {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}  
33 - ]  
34 - ],  
35 - });  
36 -  
37 - // 为表格绑定事件  
38 - Table.api.bindevent(table);  
39 - },  
40 - add: function () {  
41 - Form.api.bindevent($("form[role=form]"));  
42 - },  
43 - edit: function () {  
44 - Form.api.bindevent($("form[role=form]"));  
45 - },  
46 - };  
47 - return Controller;  
48 -});  
1 -define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {  
2 -  
3 - var Controller = {  
4 - index: function () {  
5 - // 初始化表格参数配置  
6 - Table.api.init();  
7 - this.table.first();  
8 - this.table.second();  
9 - },  
10 - table: {  
11 - first: function () {  
12 - // 表格1  
13 - var table1 = $("#table1");  
14 - table1.bootstrapTable({  
15 - url: 'example/tablelink/table1',  
16 - toolbar: '#toolbar1',  
17 - sortName: 'id',  
18 - search: false,  
19 - columns: [  
20 - [  
21 - // {field: 'state', checkbox: true,},  
22 - {field: 'id', title: 'ID'},  
23 - {field: 'username', title: __('Nickname')},  
24 - {  
25 - field: 'operate', title: __('Operate'), table: table1, events: Table.api.events.operate, buttons: [  
26 - {  
27 - name: 'log',  
28 - title: '日志列表',  
29 - text: '日志列表',  
30 - icon: 'fa fa-list',  
31 - classname: 'btn btn-primary btn-xs btn-click',  
32 - click: function (e, data) {  
33 - $("#myTabContent2 .form-commonsearch input[name='username']").val(data.username);  
34 - $("#myTabContent2 .btn-refresh").trigger("click");  
35 - }  
36 - }  
37 - ], formatter: Table.api.formatter.operate  
38 - }  
39 - ]  
40 - ]  
41 - });  
42 -  
43 - // 为表格1绑定事件  
44 - Table.api.bindevent(table1);  
45 - },  
46 - second: function () {  
47 - // 表格2  
48 - var table2 = $("#table2");  
49 - table2.bootstrapTable({  
50 - url: 'example/tablelink/table2',  
51 - extend: {  
52 - index_url: '',  
53 - add_url: '',  
54 - edit_url: '',  
55 - del_url: '',  
56 - multi_url: '',  
57 - table: '',  
58 - },  
59 - toolbar: '#toolbar2',  
60 - sortName: 'id',  
61 - search: false,  
62 - columns: [  
63 - [  
64 - {field: 'state', checkbox: true,},  
65 - {field: 'id', title: 'ID'},  
66 - {field: 'username', title: __('Nickname')},  
67 - {field: 'title', title: __('Title')},  
68 - {field: 'url', title: __('Url'), align: 'left', formatter: Table.api.formatter.url},  
69 - {field: 'ip', title: __('ip')},  
70 - {field: 'createtime', title: __('Createtime'), formatter: Table.api.formatter.datetime, operate: 'RANGE', addclass: 'datetimerange', sortable: true},  
71 - ]  
72 - ]  
73 - });  
74 -  
75 - // 为表格2绑定事件  
76 - Table.api.bindevent(table2);  
77 - }  
78 - },  
79 - };  
80 - return Controller;  
81 -});  
1 -define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'template'], function ($, undefined, Backend, Table, Form, Template) {  
2 -  
3 - var Controller = {  
4 - index: function () {  
5 - // 初始化表格参数配置  
6 - Table.api.init({  
7 - extend: {  
8 - index_url: 'example/tabletemplate/index',  
9 - add_url: '',  
10 - edit_url: '',  
11 - del_url: 'example/tabletemplate/del',  
12 - multi_url: '',  
13 - }  
14 - });  
15 -  
16 - var table = $("#table");  
17 -  
18 - Template.helper("Moment", Moment);  
19 -  
20 - // 初始化表格  
21 - table.bootstrapTable({  
22 - url: $.fn.bootstrapTable.defaults.extend.index_url,  
23 - templateView: true,  
24 - columns: [  
25 - [  
26 - {field: 'state', checkbox: true, },  
27 - {field: 'id', title: 'ID', operate: false},  
28 - //直接响应搜索  
29 - {field: 'username', title: __('Username'), formatter: Table.api.formatter.search},  
30 - //模糊搜索  
31 - {field: 'title', title: __('Title'), operate: 'LIKE %...%', placeholder: '模糊搜索,*表示任意字符', style: 'width:200px'},  
32 - //通过Ajax渲染searchList  
33 - {field: 'url', title: __('Url'), align: 'left', formatter: Controller.api.formatter.url},  
34 - //点击IP时同时执行搜索此IP,同时普通搜索使用下拉列表的形式  
35 - {field: 'ip', title: __('IP'), searchList: ['127.0.0.1', '127.0.0.2'], events: Controller.api.events.ip, formatter: Controller.api.formatter.ip},  
36 - //browser是一个不存在的字段  
37 - //通过formatter来渲染数据,同时为它添加上事件  
38 - {field: 'browser', title: __('Browser'), operate: false, events: Controller.api.events.browser, formatter: Controller.api.formatter.browser},  
39 - //启用时间段搜索  
40 - {field: 'createtime', title: __('Create time'), formatter: Table.api.formatter.datetime, operate: 'RANGE', addclass: 'datetimerange', sortable: true},  
41 - {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}  
42 - ],  
43 - ],  
44 - //禁用默认搜索  
45 - search: false,  
46 - //启用普通表单搜索  
47 - commonSearch: false,  
48 - //可以控制是否默认显示搜索单表,false则隐藏,默认为false  
49 - searchFormVisible: false,  
50 - //分页大小  
51 - pageSize: 12  
52 - });  
53 -  
54 - // 为表格绑定事件  
55 - Table.api.bindevent(table);  
56 -  
57 - //指定搜索条件  
58 - $(document).on("click", ".btn-toggle-view", function () {  
59 - var options = table.bootstrapTable('getOptions');  
60 - table.bootstrapTable('refreshOptions', {templateView: !options.templateView});  
61 - });  
62 -  
63 - //点击详情  
64 - $(document).on("click", ".btn-detail[data-id]", function () {  
65 - Backend.api.open('example/bootstraptable/detail/ids/' + $(this).data('id'), __('Detail'));  
66 - });  
67 -  
68 - //获取选中项  
69 - $(document).on("click", ".btn-selected", function () {  
70 - //在templateView的模式下不能调用table.bootstrapTable('getSelections')来获取选中的ID,只能通过下面的Table.api.selectedids来获取  
71 - Layer.alert(JSON.stringify(Table.api.selectedids(table)));  
72 - });  
73 - },  
74 - add: function () {  
75 - Controller.api.bindevent();  
76 - },  
77 - edit: function () {  
78 - Controller.api.bindevent();  
79 - },  
80 - api: {  
81 - bindevent: function () {  
82 - Form.api.bindevent($("form[role=form]"));  
83 - },  
84 - formatter: {  
85 - url: function (value, row, index) {  
86 - return '<div class="input-group input-group-sm" style="width:250px;"><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>';  
87 - },  
88 - ip: function (value, row, index) {  
89 - return '<a class="btn btn-xs btn-ip bg-success"><i class="fa fa-map-marker"></i> ' + value + '</a>';  
90 - },  
91 - browser: function (value, row, index) {  
92 - //这里我们直接使用row的数据  
93 - return '<a class="btn btn-xs btn-browser">' + row.useragent.split(" ")[0] + '</a>';  
94 - }  
95 - },  
96 - events: {  
97 - ip: {  
98 - 'click .btn-ip': function (e, value, row, index) {  
99 - var options = $("#table").bootstrapTable('getOptions');  
100 - //这里我们手动将数据填充到表单然后提交  
101 - $("#commonSearchContent_" + options.idTable + " form [name='ip']").val(value);  
102 - $("#commonSearchContent_" + options.idTable + " form").trigger('submit');  
103 - Toastr.info("执行了自定义搜索操作");  
104 - }  
105 - },  
106 - browser: {  
107 - 'click .btn-browser': function (e, value, row, index) {  
108 - Layer.alert("该行数据为: <code>" + JSON.stringify(row) + "</code>");  
109 - }  
110 - }  
111 - }  
112 - }  
113 - };  
114 - return Controller;  
115 -});