一些快捷键

1.ctrl+q 打开查询窗口
2.ctrl+/ 注释sql语句
3.ctrl+shift +/ 解除注释
4.ctrl+r 运行查询窗口的sql语句
5.ctrl+shift+r 只运行选中的sql语句
6.F6 打开一个mysql命令行窗口
7.ctrl+l 删除一行
8.ctrl+n 打开一个新的查询窗口
9.ctrl+w 关闭一个查询窗口

phpstrom快捷键

编辑

快捷键 作用
Ctrl + Space 代码自动完成(一般与输入法冲突)
Ctrl + Shift + Enter 智能完善代码(如:if())
Ctrl + P 方法参数提示,显示默认参数
Ctrl + Q 显示注释代码
Ctrl + mouse over code 查看到简短的函数介绍
Ctrl + F1 显示错误或警告信息的描述(需要把光标放到错误或警告位置)
Alt + Insert 生成代码段( 包括函数或类注释,版权信息,构造方法,抽象方法等)
Ctrl + O 插入覆盖父类的方法
Ctrl + I 实现抽象方法
Ctrl + Alt + T 选中的代码放在if..else..、for、foreach里,或者函数里,或者为选中的代码块添加区域解释(可以折叠该段代码,折叠后只显示解释,便于代码管理)
Ctrl + / 以添加“//”的方式添加注释
Ctrl + Shift + / 添加“/**/”的方式添加注释
Ctrl + W 增量式的选中当前块
Ctrl + Shift + W 与Ctrl + W对应,减小选中范围
Alt + Q 显示包含光标所在位置的标签头
Alt + Enter 显示意图行动。 Show Intention Action
Ctrl + Alt + L 格式化代码
Ctrl + Alt + I 自动缩进。
Tab / Shift + Tab 手动缩进/反向缩进
Ctrl + X or Shift + Delete 剪切
Ctrl + C or Ctrl + Insert 复制
Ctrl + V or Shift + Insert 粘贴
Ctrl + Shift + V 从粘贴板中选择内容进行粘贴
Ctrl + D 将当前行或者选择的内容复制到下一行或光标处
Ctrl + Y 删除光标所在的行
Ctrl + Shift + J 合成选中代码到一行。格式化代码的反向动作
Ctrl + Enter 智能线分割
Shift + Enter 另起一新行。无论光标在行的那个位置
Ctrl + Shift + U 字符大小写切换
Ctrl + Shift + ] / [ 以区块为单位,从光标处 向后/向前 选择,再次点击增加选择范围
Ctrl + Delete 删除光标之后的部分单词
Ctrl + Backspace 删除光标之前的部分单词
Ctrl + +/- 折叠/打开代码块,再次点击扩大折叠/打开范围
Ctrl + Shift +  + 打开全部
Ctrl + Shift +  - 折叠全部
Ctrl + F4 关闭当前页面
搜索/替换
快捷键 作用
Ctrl + F 查找
F3 查找下一个,结合查找使用
Shift + F3 查找前一个,结合查找使用
Ctrl + R 替换
Ctrl + Shift + F 在文件中查找
Ctrl + Shift + R 在文件中替换
被使用搜索
快捷键 作用
Alt + F7 / Ctrl + F7 全项目被使用查找/当前文件声明变量处
Ctrl + Shift + F7 在文件中变量或函数被使用处高亮
Ctrl + Alt + F7 显示详细被使用的位置列表

分析bi数据获取流程

一:导入数据

1. bi_etl:通过定时任务脚本将数据从源数据库导出:

(1) 修改配置文件,执行dump_order.sh,导入部分测试数据
(2)其中mysqldump导出数据到文件中
(3)shell无法直接执行source,可以用bash来操作,命令:sudo bash dump_order.sh
(4)sh文件可能是在windows下面编辑的,在vim中使用set fileformat=unix 去除\M字符
(5)运行sh文件可在data目录下生成sql文件
(6)注意事项:
为什么不使用增量:因为有个中间表没有update_at,financial的表不能随意加字段

1-1修改:
(1)第一步导数据,源数据(来自于order_system)已经执行了删除五张表的三个字段,因此导出的数据结构和以前导出的数据结构是不一样的;

2. 通过jump server将bi_etl的数据文件导出到bi_new的upload中(本地无法部署)**

(1)由于本地无法直接部署jump server,直接拷贝刚才生成的文件到bi_new的upload中;
(2)load_new.sh文件读取的是data.tar.gz压缩文件,因此直接压缩整个data文件夹到upload文件夹下

3. bi_dsvcs读取数据并存入bi_new数据库

(1)修改配置文件(不修改可能会覆盖线上数据)
(2)执行脚本并去除\M字符(会读取conf文件,set ff=unix可以去除/r字符)
(2)在load_new.sh脚本中(使用了mysql的source命令)将刚才文件中的数据导入ori_new数据库中
(4)注意事项:sh文件中使用了tar -xvf 解压data文件,但是实际上没有解压成功,文件不存在,可以直接复制所有文件

3-2修改:
(1)执行sql命令直接修改ori_new的结构,命令如下:

1
2
3
4
5
6
7
8
9
10
use ori_new;
alter table `order_product` add `departure_date` date DEFAULT NULL;
alter table `order_product` add `end_date` date DEFAULT NULL;
alter table `order_product` add `product_status` int(11) NOT NULL DEFAULT '10000';
alter table `order_order_product_combine` drop column `departure_date`, drop column `end_date`, drop column `product_status`;
alter table `order_order_product_customize` drop column `departure_date`, drop column `end_date`, drop column `product_status`;
alter table `order_order_product_hotel` drop column `departure_date`, drop column `end_date`, drop column `product_status`;
alter table `order_order_product_oneday` drop column `departure_date`, drop column `end_date`, drop column `product_status`;
alter table `order_order_product_ticket` drop column `departure_date`, drop column `end_date`, drop column `product_status`;
alter table `order_order_product_tour` drop column `departure_date`, drop column `end_date`, drop column `product_status`;

4. bi_dpsvc将数据从ori_new中导入到bi库中并合并部分数据

(1)module/order.py:__get_order_product_line_table:定义了操作的五张表:
order_order_product_oneday、order_order_product_tour,order_order_product_ticket,order_order_product_hotel,order_order_product_combine
order_product_tff表从ori_new就没有导入;order_product_customize单独操作
(2)class OrderProduct

4-2修改:
(1)bi数据库的order_product表不存在end_date,departure_date两个字段;order_product_customize存在这两个字段,修改方法如下:

1
2
3
4
use bi;
alter table `order_product` add `departure_date` date DEFAULT NULL;
alter table `order_product` add `end_date` date DEFAULT NULL;
alter table `order_order_product_customize` drop column `departure_date`, drop column `end_date`, drop column `product_status`;

(2)修改代码

Monthly报表完成步骤

1 计算规则(都在订单产品维度)

1 已收

(1)计算此订单产品所在的订单的所有已收款
(2)计算此订单产品所在的订单有多少订单产品
(3)所有已收款除以订单产品数量,平均得出每个订单产品的已收款

2 基础接口实现

1 注意事项

每次更新代码supervisor都需要重启

2 添加路由和方法

创建finance_monthly controller,并在dsvcs.py中引入

3 导入bill表

需要导入bill和bill_item表进ori_new以及bi表中

vim学习笔记

光标移动

h 或 <- 表示向左
j 下
k 上
l 右

ctrl + f 屏幕向下移动一页
ctrl + b 向上移动一页
ctrl + d 向下移动半页
ctrl + u 向上移动半页
‘+’ 光标移动到非空格符的下一行
‘-‘ 光标移动到非空格符的
n[space] n表示数字,光标向右移动n个字符
0或[Home] 移动到这一行最开始的字符处
$或[End] 移动到这一行的最后面字符处
H 移动到这个屏幕最上方一行的第一个字符
M 移动到这个屏幕中央一行的第一个字符
L 移动到这个屏幕最下方一行的第一个字符
G 移动到这个文件的最后一行
nG(:n) 移动到这个文件的第n行
gg(1G) 移动到第一行
n[Enter] n为数字,表示向下移动n行

查找与替换

/word 光标之下寻找名为word的字符串
?word 光标之上寻找名为word的字符串
n 重复前一个查找的操作
N 反向进行前一个查找操作
:n1,n2s/word1/word2/g n1和n2是数字,在n1和n2行之间查找所有word,替换成word2
:1,$s/word1/word2/g
:1,$s/word1/word2/gc c代表confirm,替换前显示确认信息

删除复制与粘贴

x 向后删除
X 向前删除
nx 向后删除n个字符
dd 删除(剪切)光标所在一整行
ndd 删除向下n行
d1G 删除光标所在到第一行的数据
dG 删除光标所在到最后一行的数据
d$ 删除光标所在处,到该行最后一个字符
d0
yy 复制该行
nyy
y1G
yG
y0
y$
p 将已复制的数据在光标下一行粘贴
P 上一行
J 光标所在行与下一行数据结合成同一行
c 重复删除多个数据(10cj代表向下删除10行)删除后切换到编辑模式
u 回复
ctrl+r 重做
. 重复前一次操作

进入插入或替换的编辑模式

i I i从目前光标所在处插入,I目前所在行的第一个非空格字符处开始插入
a A a 从目前光标所在的下一个字符处开始插入,A从光标所在行的最后一个字符处开始插入
o O o 在目前光标所在行的下一行处插入新行 O上一行
r R r 替换一次 R 一直替换直到按Esc

一般命令模式切换到命令模式

ZZ 若文件没有被修改则不保存退出,修改了则保存后退出
:w [filename] 将编辑的数据保存成另一个新文件
:r [filename] 读入另一个文件的数据,加在光标所在行后面
:n1, n2 w [filename] 将n1到n2的内容保存到文件
:! command 暂时退出vi到命令行模式下执行command的显示结果(:! ls /home)
:set nu
:set nonu
:e! 还原文件内容事实上,可以使用[ :! ls /home ]不过,如果你学过后面的章节之后,你会发现,执行[ ctrl + z ]亦可暂时退出 vi 让你在命令行

##多行添加数据

方法一:块选择模式
(1)v 进入virtual模式
(2)上下键选择需要注释的行数
(3)ctrl+v 进入列模式
(4)大写I进入插入模式,输入要编辑的符号
(5)立即按下两次ESC
方法二:替换命令
:起始行号,结束行号s/^/注释符/g
取消注释:
:起始行号,结束行号s/^注释符//g

####编辑多行

ctrl+v进入visual block模式,按两次j或者2j,将光标移动到要插入的最后一行,按下i进入编辑模式。输入内容,Esc退出

##多文件编辑

:n 编辑下一个文件
:N 编辑上一个文件
:files 列出目前这个vim打开的所有文件
(nyy复制后,使用p粘贴)

##多窗口功能

分区窗口并放入文件
:sp {filename}

按键功能介绍

:sp [filename] 打开一个新窗口,如果加filename表示打开另一个文件,否则打开自身
[ctrl] + w + j 或[ctrl] + w + ↓:先按住ctrl键不放,按下w后放开,之后再按↓或↑
ctrl + w + q 相当于切换到某个窗口,按下:q离开,也可以直接ctrl+w+q

##vim的挑字补全功能

ctrl + x -> ctrl + n 通过正在编辑的这个文件的内容文字作为关键组予以补齐
ctrl + x -> ctrl + f 以当前目录的文件名作为关键字予以补齐
ctrl + x -> ctrl + o 以扩展名作为语法补充,以vim内置的关键字予以补齐

vim 自动补全报错option ‘omnifunc’ is not set

编辑vimrc文件,加入以下内容:

1
2
3
4
5
6
7
autocmd FileType python set omnifunc=pythoncomplete#Complete
autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
autocmd FileType html set omnifunc=htmlcomplete#CompleteTags
autocmd FileType css set omnifunc=csscomplete#CompleteCSS
autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags
autocmd FileType php set omnifunc=phpcomplete#CompletePHP
autocmd FileType c set omnifunc=ccomplete#Complete

##编码转换

iconv list:列出所有的编码
iconv -f 原本编码 -t 新编码 filename [-o newfilw]
##vim的环境设置参数

:set no或者:set number
:set hlsearch 设置高亮度搜寻
:set nohlsearch
:set autoindent 自动缩进
:set noautoindent 设置不自动缩进
:set backup 设置自动储存备份文件,一般设置为nobackup,如果为backup,每次更改一个文件时会自动产生一个filename~文件记录原始文件内容
:set ruler 显示右下角状态列
:set showmode 是否要显示–INSERT–之类的字眼
:set backspace=(012) 某些distribution不允许使用backspace删除字符,当设置值为2可以删除任意值,为0或1时,只能删除刚才输入的
:set all 显示目前所有的环境参数设置值
:set 显示与系统默认值不同的设置参数
:syntax on 程序相关语法显示不同颜色
:syntax off
:set bg=dark 显示不同的颜色色调
:set bg=light 编辑’~/.vimrc’文件,有或没有冒号都可以

##其他相关操作
virtualbox添加共享文件
1 设置-添加共享文件,选择固定分配
2 添加挂载:sudo mount -t vboxsf rezb2b /mnt/rezb2b
3 自启动挂载命令:sudo vim /etc/rc.local 添加命令

Hbase基础命令

Hbase基础命令

启动和停止Hbase

启动
hbase/bin ./start-hbase.sh
关闭
hbase/bin ./stop-hbase.sh

使用Hbase

连接Hbase
bin/hbase shell
创建表
create ‘test’ (创建表需要添加列簇)
create ‘表名’ ‘列簇名1’ ‘列簇名2’ ……
添加数据
put ‘表名’ ‘行名’ ‘列簇名称’ ‘value’(当列簇只有一列)
put ‘表名’ ‘行名’ ‘列簇名称:列名称’ ‘value’
查看表
list: 查看所有表
list ‘tablename’ : 查看表名为tablename的表
删除表
disable ‘表名’(对应enable ‘明白’)
drop ‘表名’

配置

####基础配置
conf/hbase-site.xml

注意事项

(1)表名,行,列都必须用引号括起来

Monthly报表完成心得

1 知识点

添加日志

引入logging包,引入log文件即可

1
logging.basicConfig(filename="/tmp/bi_dsvcs/app.log", level = logging.DEBUG)

有四种级别INFO, DEBUG, WARNING, ERROR, CRITICAL, FATAL

获取月份列表

需求
需要获取月份数据[‘00’, ‘01’, ‘02’, ‘03’, ‘04’, ‘05’, ‘06’, ‘07’, ‘08’, ‘09’, ‘10’, ‘11’]
原本解决办法
直接定义了一个这样的数组
新方法
range()从0到13,再在一位数前补零
实现代码

1
2
theMonth = range(0, 13)
monthKey = map(lambda x:'%02d' % x, theMonth)

新方法2
[“%02d” % x for x in range(1,13)]

数据库导入导出

shell脚本里添加mysqldump导出数据
导入数据为避免更改表结构,直接mysql -u……连接到库,执行insert操作

gunicorn配置

使用supervisor配置gunicorn,我本地虚拟机配置如下

1
2
3
4
5
6
7
8
9
10
11
[program:bi_dsvcs]
command=python /usr/bin/gunicorn -c /spython/bi_dsvcs/gunicorn.cnf dsvcs:app
process_name=%(program_name)s/%(process_num)d
directory=/spython/bi_dsvcs
numprocs=1
autostart=true
autorestart=true
user=developer
redirect_stderr=true
stdout_logfile=/tmp/bi_dsvcs.interface.info_stdout.log
stderr_logfile=/tmpbi_dsvcs.interface.error_stderr.loga

##2 注意事项

group_concat

GROUP_CONCAT()会截断数据,限制长度为1024字节

dict

dict不可以直接添加二维数据,需要判断第一维是否已经存在

1
2
3
4
5
def addtwodimdict(thedict, key_a, key_b, val): 
if key_a in adic:
thedict[key_a].update({key_b: val})
else:
thedict.update({key_a:{key_b: val}})

list的append()和extend()区别

(1)append()
接受任意数据类型添加到list尾部
(2)extend()
只接受list,将这个list每个元素添加到list中

部署后404但是代码确实已部署上去

supervisor可能没有重启,重启supervisor或者直接bi_dsvcs/ ./dsvcs restart

python100例学习笔记

四个数组成不重复三位数

描述
有四个数字,1,2,3,4,能组成多少个不重复的三位数
思考
原文分析:将所有的数字排列组合后去掉不满足条件的列
代码

1
2
3
4
5
6
7
8
num = 1;
for i in range(1,5):
for j in range(1,5):
for k in range(1,5):
if(i != k) and (i != j) and (j != k):
print i,j,k
num = num + 1
print num

扩展
循环三次效率很低,每次循环都是1-5,有没有更好的解决办法

2

各种奇怪的坑

1 strtotime()

描述
获取上个月的时间可以是date(‘Y-m-d’,strtotime(‘-1 month’));如果今天是31号而上个月没有31号,就会直接输出这个月1号;
解决办法
使用last day of -1 month来获取上个月的最后一天

2 php 字符串和数字比较

描述
遇到一个问题,传过来的参数可能是0,可能是字符串,然后与0作比较,但是当传递的参数是字符串时,与0比较,结果是true
解决办法
直接与’0’比较。0===’0’可以返回true,可以直接比较,字符串与’0’比较也不等

3 virtualbox共享文件夹不能执行virtualenv env,只能在其他文件夹下运行,暂时没想到解决办法

virtualbox的共享文件夹有保护机制,不允许直接运行virtualenv env,只能在其他文件夹下运行,解决办法:
硬链接

4 laravel get()->toArray()无法获取数据

fastadmin自定义角色组

之前使用fastadmin,自定义角色组,发现编辑/删除/修改等等权限可以直接权限管理中选择,然后用不同的角色登陆,会显示对应的权限按钮。此时有一个新的需求就是增加审核和批量审核,并且也增加对应的权限。


添加按钮
先不写功能,在对应的位置上加上审核按钮。在顶头位置的批量审核需要得到的样式如下:

clipboard.png

原先的创建按钮方法为:
{:build_toolbar(‘refresh,edit,checkall’)}
有时候不使用buid_toolbar来创建按钮,而是直接使用的

<a href="javascript:;" class="btn btn-danger btn-del btn-disabled disabled {:$auth->check('course/clabelong/del')?'':'hide'}"

title=”{:(‘Delete’)}” >
{:
(‘Delete’)}

这种方式来创建按钮,这样虽然很直观,但是实际上使用却很不方便,因为这里对于权限的判定可能是有问题的。期待的结果是直接使用build_toolbar方法,设置checkall为批量审核,check为审核方法,对于各个权限组可以直接调用。
修改build_toolbar方法到如下结果:

function build_toolbar($btns = NULL, $attr = [])
    {
        $auth = \app\admin\library\Auth::instance();
        $controller = str_replace('.', '/', strtolower(think\Request::instance()->controller()));
        $btns = $btns ? $btns : ['refresh', 'add', 'edit', 'del', 'import','checkall'];
        $btns = is_array($btns) ? $btns : explode(',', $btns);
        $index = array_search('delete', $btns);
        if ($index !== FALSE) {
            $btns[$index] = 'del';
        }
        $btnAttr = [
            'refresh' => ['javascript:;', 'btn btn-primary btn-refresh', 'fa fa-refresh', '', __('Refresh')],
            'checkall'=> ['javascript:;', 'btn btn-success btn-checkall btn-disabled disabled', 'fa fa-flag-checkered', ' 批量审核', '批量审核'],
            'add'     => ['javascript:;', 'btn btn-success btn-add', 'fa fa-plus', __('Add'), __('Add')],
            'edit'    => ['javascript:;', 'btn btn-success btn-edit btn-disabled disabled', 'fa fa-pencil', __('Edit'), __('Edit')],
            'del'     => ['javascript:;', 'btn btn-danger btn-del btn-disabled disabled', 'fa fa-trash', __('Delete'), __('Delete')],
            'import'  => ['javascript:;', 'btn btn-danger btn-import', 'fa fa-upload', __('Import'), __('Import')],
        ];
        $btnAttr = array_merge($btnAttr, $attr);
        $html = [];
        foreach ($btns as $k => $v) {
            //如果未定义或没有权限
            if (!isset($btnAttr[$v]) || ($v !== 'refresh' && !$auth->check("{$controller}/{$v}"))) {
                continue;
            }
            list($href, $class, $icon, $text, $title) = $btnAttr[$v];
            $extend = $v == 'import' ? 'id="btn-import-file" data-url="ajax/upload" data-mimetype="csv,xls,xlsx" data-multiple="false"' : '';
            $html[] = '<a href="' . $href . '" class="' . $class . '" title="' . $title . '" ' . $extend . '><i class="' . $icon . '"></i> ' . $text . '</a>';
        }
        return implode(' ', $html);
    }

具体修改的就是两个地方,第一个是数组$btns,在$btns数组中添加需要的元素,在本例中添加checkall;第二就是修改$btnAttr,根据需要添加一个checkall元素,如下所示:

‘checkall’=> [‘javascript:;’, ‘btn btn-success btn-checkall
btn-disabled disabled’, ‘fa fa-flag-checkered’, ‘ 批量审核’, ‘批量审核’],

这里有需要特别注意的地方是,最好在类中加上btn-disabled disabled两个class,这样可以方便直接获取是否选择。也就是说,在没有选择项的情况下,所有批量操作的按钮都应该是不能点击的。
在修改完buildtoolbar之后在页面上使用应该就是可以直接调用出来了,到此第一步完成。


修改js配置

接下来修改require-table.js文件,因为所有的后台js文件都继承了这个文件,如果用的编辑器或IDE没有历史记录功能那就一定要做好备份。
首先是配置项,extend项代表每个url对应的方法,这里可以设置成缺省为空,然后在需要用到的js文件中再调用。加上checkall和check的URL,最好命名一致,修改完成的extend如下:
extend: {
index_url: ‘’,
add_url: ‘’,
edit_url: ‘’,
del_url: ‘’,
import_url: ‘’,
multi_url: ‘’,
check_url:’’,
checkall_url:’’,
check_classes_url:’’,
dragsort_url: ‘ajax/weigh’,
}
只需要按自己的需求把想加的公共方法加上,在config中添加按钮对应的class,比如这里添加:

checkallbtn: '.btn-checkall',

绑定事件
在bindevent中添加事件如下:

// 批量审核按钮事件
$(toolbar).on('click', Table.config.checkallbtn, function () {
    var that = this;
    var ids = Table.api.selectedids(table);
    layer.msg('您正在批量修改审核状态,请选择结果', {
        time: 20000, //20s后自动关闭
        btn: ['通过', '不通过', '取消']
        ,yes: function(index){
            $(this).data({'check':1,'tablename':'classes'});
            Table.api.multi("checkall", ids, table, $(this));
            Layer.close(index);
              }
        ,btn2: function(index){
            $(this).data({'check':2,'tablename':'classes'});
            Table.api.multi("checkall", ids, table, $(this));
            Layer.close(index);
             }
        ,btn3: function(index){
            Layer.close(index);
        }
    });
});

其中Table.config.checkallbtn即之前在config中添加的按钮,其中绑定的类名必须在之前的buildtollbar的对应按钮上有,根据需求,这里设置一个弹窗,以点击通过为例:
鼠标选择几项结果之后进行批量审核,如果选择通过,对应回调yes,此时设置两个数据,一个是对应的表,一个是审核状态。因为主要是classes表会用到审核,默认值设置为classes表,如果其他方法调用,可以在对应的js文件中重写绑定事件;(还有另一种方法,config中添加一项为tablename,然后直接传tablename,将对应的classes修改为Table.config.tablename,每次页面js调用的时候修改config,但是因为大部分页面用不着重写config,因此这里不这么写)
multi方法即批量操作方法,因此这里应该直接调用,在multi方法中有以下的一句:
var url = typeof data.url !== “undefined” ? data.url : (action == “del” ? options.extend.del_url : options.extend.multi_url);

这里要注意的是,在js调用的时候打印url,可能审核方法不在,因为实际上multi方法是绑定到dek_url或者multi_url的,这里有两种方法,一种是把check_url替换上去,一种是直接把multi_url方法绑定到check上,也可以直接加上,但是这个判断就要改。

具体js
进入到控制器对应的js中调用方法,如果写在trait中,每个控制器都会直接继承,如果使用的地方较少,可以直接使用。地址是admin/library/traits/Backend.php
checkall方法如下:

/**
     *
     * 批量审核
     */
    public function checkall($ids = "")
    {
        $row = $this->model->get($ids);
        if (!$row)
            $this->error(__('No Results were found'));
        $adminIds = $this->getDataLimitAdminIds();
        if (is_array($adminIds)) {
            if (!in_array($row[$this->dataLimitField], $adminIds)) {
                $this->error(__('You have no permission'));
            }
        }
        if ($this->request->isPost()) {
            $values = $this->request->post()['params'];
            if($values)
            {
                $res =Db::name($values['tablename'])->where('id','IN',$ids)->update(['check'=>$values['check']]);
                $this->success();
            }
        }
    }

其中$this->request->post()[‘params’]可以获取到刚才在js中传递的数据,这里是用户选择的审核状态和需要更新的表名;之后对表进行操作返回$this->success()就可以了;

添加权限
以上操作顺利完成之后显示的会是没有操作权限;首先进入规则管理,添加刚才新增的方法对应的规则,例如这里添加的是check:

clipboard.png

只要不以菜单方式显示,然后状态正常就可以了;
之后进入角色组,在角色组对应的权限中勾选,此时就可以加上对应的权限,这是很重要的一步:

**接下来在index页面中加上验证就行,例如这里是:
data-operate-check="{:$auth->check('course/clabelong/check')}"
data-operate-checkall="{:$auth->check('course/clabelong/checkall')}"**

此时再登录不同的用户,例如教师组没有批量审核权限,那么无法显示批量审核按钮。

单个操作权限
除了批量操作,其实还可以单个操作,单个操作和批量操作稍有不同,但是更简单。可以仿照单元格元素事件来写,结果如下:

'click .btn-checkone': function (e, value, row, index) {
                        e.stopPropagation();
                        e.preventDefault();
                        var table = $(this).closest('table');
                        var options = table.bootstrapTable('getOptions');
                        var ids = row[options.pk];
                        row = $.extend({}, row ? row : {}, {ids: ids});
                        var url = options.extend.check_url;
                        Fast.api.open(Table.api.replaceurl(url, row, table), '审核', $(this).data() || {});
                    },

直接绑定到check_url,在对应方法的js文件中的extend写出check_url的位置,添加对应的方法和视图,就可以直接调用。当然,同样涉及到权限的问题,加了方法之后在index中依然要用data-operate-check=”{:$auth->check(‘course/clabelong/check’)}”;同时,不要忘记在require-table.js中添加operate;我添加如下代码:

if (options.extend.check_url !== '') {
                        buttons.push({
                            name: 'check',
                            icon: 'fa fa-flag-checkered',
                            title: '审核',
                            classname: 'btn btn-xs btn-success btn-checkone',
                            url: options.extend.check_url
                        });
                    }

在require-table中可能还有需要修改的地方,但是关键是按照原先的add.del等写好的方法来参照,基本上就不会出错了。