Fastadmin 日常项目常见用法整理

ps:自己使用笔记备用,不间断更新,常见功能点

一,数据库后缀

结尾字符示例类型要求字段说明
timerefreshtimebigint/datetime识别为日期时间型数据,自动创建选择时间的组件
imagesmallimagevarchar识别为图片文件,自动生成可上传图片的组件,单图
imagessmallimagesvarchar识别为图片文件,自动生成可上传图片的组件,多图
fileattachfilevarchar识别为普通文件,自动生成可上传文件的组件,单文件
filesattachfilesvarchar识别为普通文件,自动生成可上传文件的组件,多文件
avatarminiavatarvarchar识别为头像,自动生成可上传图片的组件,单图
avatarsminiavatarsvarchar识别为头像,自动生成可上传图片的组件,多图
contentmaincontenttext/mediumtext/longtext识别为内容,自动生成富文本编辑器(需安装富文本插件)
_iduser_idint/varchar识别为关联字段,自动生成可自动完成的文本框,单选
_idsuser_idsvarchar识别为关联字段,自动生成可自动完成的文本框,多选
listtimelistenum识别为列表字段,自动生成单选下拉列表
listtimelistset识别为列表字段,自动生成多选下拉列表
datahobbydataenum识别为选项字段,自动生成单选框
datahobbydataset识别为选项字段,自动生成复选框
jsonconfigjsonvarchar识别为键值组件,自动生成键值录入组件,仅支持1.2.0+
switchsiteswitchtinyint识别为开关字段,自动生成开关组件,默认值10,仅支持FastAdmin 1.2.0+
rangedaterangevarchar识别为时间区间组件,自动生成时间区间组件,仅支持FastAdmin 1.3.0+
tagarticletagvarchar识别为Tagsinput,自动生成标签输入组件,仅支持FastAdmin 1.3.0+
tagsarticletagsvarchar识别为Tagsinput,自动生成标签输入组件,仅支持FastAdmin 1.3.0+

二,下拉联动

<div class="form-group">
    <label class="control-label col-xs-12 col-sm-2">{:__('所属品牌')}:</label>
    <div class="col-xs-12 col-sm-8">
        <input id="c-brand_type_id" data-rule="required" data-source="goods/brandlist/index" data-field="brand_name" class="form-control selectpage" name="row[brand_type_id]" type="text" value="" data-field="brand_name">
    </div>
</div>
<div class="form-group">
    <label class="control-label col-xs-12 col-sm-2">{:__('型号')}:</label>
    <div class="col-xs-12 col-sm-8">
        <input id="c-model_id" data-rule="required" data-source="goods/modellist/index" class="form-control selectpage" name="row[model_id]" type="text" value="" data-field="model_name">
    </div>
</div>

js 部分:

add: function () {
    //每次选择的时候重置下型号选择框为空
    $(document).on("change", "#c-brand_type_id", function(){
        $("#c-model_id").selectPageClear();
    });

    //选择产品品牌后给产品信号新增一个brand_id参数
    $("#c-model_id").data("params", function (obj) {
        return {custom: {brand_id: $("#c-brand_type_id").val()}};
    });

    //需放在系统api之前
    Controller.api.bindevent();
},

三,tab选项卡切换

<div class="panel-heading">
    <ul class="nav nav-tabs">
        <li class="active">
            <a href="#base" data-toggle="tab">基础设置</a>
        </li>
        <li data-toggle="tooltip"">
            <a href="#set_cn" data-toggle="tab">中文说明</a>
        </li>
        <li data-toggle="tooltip"">
            <a href="#set_en" data-toggle="tab">英文说明</a>
        </li>
    </ul>
</div>
<div class="tab-pane fade active in" id="base">
</div>
<div class="tab-pane fade" id="set_cn">
</div>
<div class="tab-pane fade" id="set_en">
</div>

四,后台table去除不必要的字段关联查询输出(前端同样适用)

项目说明:关联查询品牌模型和型号模型,不需要输出品牌表的诸如createtime这些字段,则直接在foreach里面指明要输出的字段即可

if ($this->request->request('keyField')) {
    return $this->selectpage();
}
list($where, $sort, $order, $offset, $limit) = $this->buildparams();

$list = $this->model
        ->with(['brand','model'])
        ->where($where)
        ->order($sort, $order)
        ->paginate($limit);

foreach ($list as $row) {
    $row->getRelation('brand')->visible(['brand_name']);
    $row->getRelation('model')->visible(['model_name']);
}

五,后台文件上传提示文件扩展名不对以及上传大小不符

目前需要我们手工去application/extra/upload.php中去手动修改并保存

注意:修改这里仅限于在本框架设置了最大上传大小,像php.ini默认上传上限是8M,如何修改环境上传上限自行处理

六,后台table实现无限级分类

效果图:

数据库结构:

控制器:

use fast\Tree;

public function _initialize()
{
    parent::_initialize();
    $this->model = new \app\admin\model\auth\Department;

    //主要是这里
    $tree = Tree::instance();
    $tree->init(collection($this->model->order('weigh desc,id desc')->select())->toArray(), 'pid');
    $this->categorylist = $tree->getTreeList($tree->getTreeArray(0), 'depart_name');
    $categorydata = [0 => ['id' => '0', 'depart_name' => __('None')]];
    foreach ($this->categorylist as $k => $v) {
        $categorydata[$v['id']] = $v;
    }

    $this->view->assign("parentList", $categorydata);
}

public function index()
{
    //设置过滤方法
    $this->request->filter(['strip_tags']);
    if ($this->request->isAjax()) {
        //构造父类select列表选项数据
        $list = $this->categorylist;;
        $total = count($list);
        $result = array("total" => $total, "rows" => $list);
        return json($result);
    }
    return $this->view->fetch();
}

public function edit($ids = null)
{
    $row = $this->model->get($ids);
    if ($this->request->isAjax()) {
        $this->request->filter(['strip_tags']);
        $params = $this->request->post("row/a");
        if ($params['pid'] != $row['pid']) {
            $childrenIds = Tree::instance()->init(collection(\app\common\model\Category::select())->toArray())->getChildrenIds($row['id'], true);
            if (in_array($params['pid'], $childrenIds)) {
                   $this->error('父组别不能是它的子组别或它自己');
            }
        }
        return parent::edit($ids);
    }

    $this->view->assign("row", $row);
    return $this->view->fetch();
}

视图add_html:

<div class="form-group">
    <label class="control-label col-xs-12 col-sm-2">{:__('Pid')}:</label>
    <div class="col-xs-12 col-sm-8">
        <select id="c-pid" data-rule="required" class="form-control selectpicker" name="row[pid]">
            {foreach name="parentList" item="vo"}
            <option  value="{$key}" {in name="key" value=""}selected{/in}>{$vo.depart_name}</option>
            {/foreach}
        </select>
    </div>
</div>

视图edit_html:

<div class="form-group">
    <label class="control-label col-xs-12 col-sm-2">{:__('Pid')}:</label>
    <div class="col-xs-12 col-sm-8">
        <select id="c-pid" data-rule="required" class="form-control selectpicker" name="row[pid]">
            {foreach name="parentList" item="vo"}
            <option   value="{$key}" {in name="key" value="$row.pid"}selected{/in}>{$vo.depart_name}</option>
            {/foreach}
        </select>
    </div>
</div>

js部分:

// 初始化表格
table.bootstrapTable({
    url: $.fn.bootstrapTable.defaults.extend.index_url,
    pk: 'id',
    sortName: 'weigh',
    escape: false,   //这个主要是把菜单的&nbsp;解析成空格,以达到效果
    columns: [
        [
            {checkbox: true},
            {field: 'id', title: __('Id')},
            {field: 'depart_name', title: __('Depart_name'), operate: 'LIKE',align: 'left'},   //这个地方左对齐,才能显示标准树状
            {field: 'createtime', title: __('Createtime'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
            {field: 'updatetime', title: __('Updatetime'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
            {field: 'weigh', title: __('Weigh'), operate: false},
            {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
        ]
    ]
});

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值