application\common\controller\Backend.php
//重写查询方法
protected function rewriteQuery($params, $op){
foreach ($params as $k => $v) {
$sym = isset($op[$k]) ? $op[$k] : '=';
$v = !is_array($v) ? trim($v) : $v;
$sym = strtoupper(isset($op[$k]) ? $op[$k] : $sym);
switch ($sym) {
case '=':
case '<>':
$where[$k] = [$sym, (string)$v];
break;
case 'LIKE':
case 'NOT LIKE':
case 'LIKE %...%':
case 'NOT LIKE %...%':
$where[$k] = [trim(str_replace('%...%', '', $sym)), "%{$v}%"];
break;
case '>':
case '>=':
case '<':
case '<=':
$where[$k] = [$sym, intval($v)];
break;
case 'FINDIN':
case 'FINDINSET':
case 'FIND_IN_SET':
$where[$k] = "FIND_IN_SET('{$v}', " . ($relationSearch ? $k : '`' . str_replace('.', '`.`', $k) . '`') . ")";
break;
case 'IN':
case 'IN(...)':
case 'NOT IN':
case 'NOT IN(...)':
$where[$k] = [str_replace('(...)', '', $sym), is_array($v) ? $v : explode(',', $v)];
break;
case 'BETWEEN':
case 'NOT BETWEEN':
$arr = array_slice(explode(',', $v), 0, 2);
if (stripos($v, ',') === false || !array_filter($arr)) {
continue 2;
}
//当出现一边为空时改变操作符
if ($arr[0] === '') {
$sym = $sym == 'BETWEEN' ? '<=' : '>';
$arr = $arr[1];
} elseif ($arr[1] === '') {
$sym = $sym == 'BETWEEN' ? '>=' : '<';
$arr = $arr[0];
}
$where[$k] = [$sym, $arr];
break;
case 'RANGE':
$v = str_replace(' - ', ',', $v);
$arr = array_slice(explode(',', $v), 0, 2);
if (stripos($v, ',') === false || !array_filter($arr)) {
continue 2;
}
//当出现一边为空时改变操作符
if ($arr[0] === '') {
$sym = $sym == 'RANGE' ? '<=' : '>';
$arr[1] = strtotime($arr[1]);
} elseif ($arr[1] === '') {
$sym = $sym == 'RANGE' ? '>=' : '<';
$arr[0] = strtotime($arr[0]);
}
$arr[1] = strtotime($arr[1]);
$arr[0] = strtotime($arr[0]);
// var_dump($arr);exit;
$where[$k] = [str_replace('RANGE', 'BETWEEN', $sym) . '', $arr];
break;
case 'NOT RANGE':
$v = str_replace(' - ', ',', $v);
$arr = array_slice(explode(',', $v), 0, 2);
if (stripos($v, ',') === false || !array_filter($arr)) {
continue 2;
}
//当出现一边为空时改变操作符
if ($arr[0] === '') {
$sym = $sym == 'RANGE' ? '<=' : '>';
$arr = $arr[1];
} elseif ($arr[1] === '') {
$sym = $sym == 'RANGE' ? '>=' : '<';
$arr = $arr[0];
}
$where[$k] = [str_replace('RANGE', 'BETWEEN', $sym) . ' time', $arr];
break;
case 'LIKE':
case 'LIKE %...%':
$where[$k] = ['LIKE', "%{$v}%"];
break;
case 'NULL':
case 'IS NULL':
case 'NOT NULL':
case 'IS NOT NULL':
$where[$k] = [strtolower(str_replace('IS ', '', $sym))];
break;
default:
break;
}
}
return $where;
}
crud
model = new \app\admin\model\app\AppGoods;
$this->view->assign("isShowList", $this->model->getIsShowList());
$this->view->assign("recommendList", $this->model->getRecommendList());
}
/**
* 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
* 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
* 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
*/
/**
* 查看
*/
public function index()
{
//设置过滤方法
$this->request->filter(['strip_tags']);
if ($this->request->isAjax())
{
//如果发送的来源是Selectpage,则转发到Selectpage
if ($this->request->request('keyField'))
{
return $this->selectpage();
}
// list($where, $sort, $order, $offset, $limit) = $this->buildparams();
$offset = $this->request->get("offset", 0);
$limit = $this->request->get("limit", 0);
$params = json_decode(input('filter'),true);
$op = json_decode(input('op'),true);
if(count($params) > 0){
$new_params = $new_op = [];
foreach ($params as $key => $value) {
if($key == 'nickname'){
$new_params['u.nickname'] = $value;
$new_op['u.nickname'] = $op[$key];
}elseif($key == 'cat_name'){
$new_params['c.cat_name'] = $value;
$new_op['c.cat_name'] = $op[$key];
}elseif($key == 'store_name'){
$new_params['s.name'] = $value;
$new_op['s.name'] = $op[$key];
}else{
$new_params['aa.'.$key] = $value;
$new_op['aa.'.$key] = $op[$key];
}
}
$w = $this->rewriteQuery($new_params, $new_op);
}else{
$w['aa.id'] = array('>', 0);
}
$total = Db::name('app_goods')
->alias('aa')
->field('aa.*,c.cat_name')
->join('fa_app_goods_category c', 'aa.cat_id = c.id')
// ->join('fa_app_store s', 'aa.store_id = s.id')
// ->with('group')
->where($w)
// ->order($sort, $order)
->count();
$list = Db::name('app_goods')
->alias('aa')
->field('aa.*,c.cat_name')
->join('fa_app_goods_category c', 'aa.cat_id = c.id')
// ->join('fa_app_store s', 'aa.store_id = s.id')
// ->with('group')
->where($w)
->order('aa.id', 'desc')
->limit($offset, $limit)
->select();
// foreach ($list as $k => $v)
// {
// $v->hidden(['password', 'salt']);
// }
$result = array("total" => $total, "rows" => $list);
return json($result);
}
return $this->view->fetch();
}
public function add(){
if ($this->request->isPost())
{
$params = $this->request->post("row/a");
if ($params)
{
$result = $this->model->save($params);
if ($result === false)
{
$this->error($this->model->getError());
}
$this->success();
}
$this->error();
}
return $this->view->fetch();
}
public function edit($ids = null)
{
$row = $this->model->get($ids);
if (!$row) {
$this->error(__('No Results were found'));
}
if ($this->request->isPost()) {
$params = $this->request->post("row/a");
$result = $row->allowField(true)->save($params);
if ($result !== false) {
$this->success();
} else {
$this->error($row->getError());
}
}
$this->view->assign("row", $row);
return $this->view->fetch();
}
//获取商店名称
public function get_store(){
$param = input('param.');
@$param['pageNumber'] = $param['pageNumber'] ? $param['pageNumber'] : 1;
if(@$param['searchValue'] > 0){
$total = Db::table('fa_app_store')->field('id,name')->where('id', $param['searchValue'])->count();
$list = Db::table('fa_app_store')->field('id,name')->where('id', $param['searchValue'])->select();
}elseif(@$param['name']){
$total = Db::table('fa_app_store')->field('id,name')->where('name', 'like', '%'.$param['name'].'%')->count();
$list = Db::table('fa_app_store')->field('id,name')->where('name', 'like', '%'.$param['name'].'%')->select();
}else{
$total = Db::table('fa_app_store')->field('id,name')->count();
$list = Db::table('fa_app_store')->field('id,name')->limit(($param['pageNumber'] - 1)*10, 10)->order('id','desc')->select();
}
$result = array("rows" => $list,"total" => $total);
return json($result);
}
//获取商品分类
public function get_cat(){
$param = input('param.');
@$param['pageNumber'] = $param['pageNumber'] ? $param['pageNumber'] : 1;
if(@$param['searchValue'] > 0){
$total = Db::table('fa_app_goods_category')->field('id,cat_name as name')->where('id', $param['searchValue'])->count();
$list = Db::table('fa_app_goods_category')->field('id,cat_name as name')->where('id', $param['searchValue'])->select();
}elseif(@$param['name']){
$total = Db::table('fa_app_goods_category')->field('id,cat_name as name')->where('cat_name', 'like', '%'.$param['name'].'%')->count();
$list = Db::table('fa_app_goods_category')->field('id,cat_name as name')->where('cat_name', 'like', '%'.$param['name'].'%')->select();
}else{
$total = Db::table('fa_app_goods_category')->field('id,cat_name as name')->count();
$list = Db::table('fa_app_goods_category')->field('id,cat_name as name')->limit(($param['pageNumber'] - 1)*10, 10)->order('id','desc')->select();
}
$result = array("rows" => $list,"total" => $total);
return json($result);
}
}
cmd
fastadmin:
php think crud -t user -c user/User --force=true //user表
php think crud -t app_announcement -c app/appAnnouncement
不含前缀的表某 驼峰命名控制器不要下划线
php think menu -c mydir/test //权限规则
php think crud -t app_task_category -c app/appTaskCategory -d 1 删除文件
//一键压缩打包前后台的JS和CSS
php think min -m all -r all
//一键压缩打包后台的JS和CSS
php think min -m backend -r all
//一键压缩打包前后台的JS
php think min -m all -r js
//一键压缩打包后台的CSS
php think min -m backend -r css
前端:
后端接口:
/**
* 读取分类数据,联动列表
*/
public function category()
{
$pid = $this->request->get('pid');
$where = [];
$categorylist = null;
// if ($pid !== '') {
if ($pid) {
$where['pid'] = $pid;
}else{
$where['pid'] = 0;
}
$categorylist = Db::name('app_requirement_category')->where($where)->field('id as value,name')->order('id desc')->select();
// }
$this->success('', null, $categorylist);
}
PS E:\WWW\a785> php think crud -t user -c user/User --force=true //user表
PS E:\WWW\a785> php think crud -t app_announcement -c app/appAnnouncement
不含前缀的表某 驼峰命名控制器不要下划线
php think menu -c mydir/test //权限规则
// 初始化表格
table.bootstrapTable({
url: $.fn.bootstrapTable.defaults.extend.index_url,
pk: 'id',
sortName: 'id',
columns: [
[
{checkbox: true},
{field: 'id', title: __('Id')},
{field: 'images', title: __('Images'), events: Table.api.events.image, formatter: Table.api.formatter.images},
{field: 'title', title: __('Title')},
{field: 'desc', title: __('Desc'),
cellStyle:function(){return {css:{"max-width":"200px","overflow":"hidden",'text-overflow':'ellipsis'}}},},
{field: 't1', title: __('T1'),
cellStyle:function(){return {css:{"max-width":"200px","overflow":"hidden",'text-overflow':'ellipsis'}}},},
{field: 'd1', title: __('D1'),
cellStyle:function(){return {css:{"max-width":"200px","overflow":"hidden",'text-overflow':'ellipsis'}}},},
{field: 't2', title: __('T2'),
cellStyle:function(){return {css:{"max-width":"200px","overflow":"hidden",'text-overflow':'ellipsis'}}},},
{field: 'd2', title: __('D2'),
cellStyle:function(){return {css:{"max-width":"200px","overflow":"hidden",'text-overflow':'ellipsis'}}},},
{field: 't3', title: __('T3'),
cellStyle:function(){return {css:{"max-width":"200px","overflow":"hidden",'text-overflow':'ellipsis'}}},},
{field: 'd3', title: __('D3'),
cellStyle:function(){return {css:{"max-width":"200px","overflow":"hidden",'text-overflow':'ellipsis'}}},},
{field: 'createtime', title: __('Createtime'),formatter: Table.api.formatter.datetime},
{field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
]
]
});
btn-dialog
: 点击按钮后将会以弹窗的形式打开url这个链接btn-addtabs
: 点击按钮后将会在顶部选项卡中新增一个选项卡并跳转btn-ajax
: 点击按钮后将会发起一个Ajax请求
对应的js文件
{
field: 'operate', title: __('Operate'), table: table,
buttons: [
{name: 'detail', text: '详情', title: '详情', icon: 'fa fa-list', classname: 'btn btn-xs btn-primary btn-dialog', url: 'page/detail'}
],
events: Table.api.events.operate, formatter: Table.api.formatter.operate
}
html
{:build_checkboxs('row[week][]',['1'=>'一','2'=>'二','3'=>'三','4'=>'四','5'=>'五','6'=>'六','7'=>'日'], ['class'=>'form-control'])}
{:build_checkboxs('row[week][]',['1'=>'一','2'=>'二','3'=>'三','4'=>'四','5'=>'五','6'=>'六','7'=>'日'], $row['week'] )}
php
$params['week'] = implode(',', $params['week']);
https://www.cnblogs.com/cyfblogs/p/10481887.html
按钮
https://www.pianshen.com/article/9460588073/
弹窗
https://blog.csdn.net/a898712940/article/details/86692850