mirror of https://gitee.com/karson/fastadmin.git
新增表格自定义搜索的示例
新增微信菜单编辑在未配置事件时的错误提示 新增renderer的meta 修复模板示例显示时间的BUG 修复多级联动在不选中值时的BUG 修复测试邮件收件人错误的BUG 修复表格筛选按钮禁用时不能选中首列的BUG 修复summernote使用源码模式下的BUG 修复安装时下载链接错误的BUG 修复前端require-frontend.js中的配置问题pull/135/MERGE
parent
a0a9590134
commit
fa6622ee0f
|
|
@ -437,16 +437,20 @@ class Ajax extends Backend
|
|||
$type = $this->request->get('type');
|
||||
$pid = $this->request->get('pid');
|
||||
$where = ['status' => 'normal'];
|
||||
if ($type)
|
||||
$categorylist = null;
|
||||
if ($pid !== '')
|
||||
{
|
||||
$where['type'] = $type;
|
||||
}
|
||||
if ($pid)
|
||||
{
|
||||
$where['pid'] = $pid;
|
||||
}
|
||||
if ($type)
|
||||
{
|
||||
$where['type'] = $type;
|
||||
}
|
||||
if ($pid)
|
||||
{
|
||||
$where['pid'] = $pid;
|
||||
}
|
||||
|
||||
$categorylist = Db::name('category')->where($where)->field('id as value,name')->order('weigh desc,id desc')->select();
|
||||
$categorylist = Db::name('category')->where($where)->field('id as value,name')->order('weigh desc,id desc')->select();
|
||||
}
|
||||
$this->code = 1;
|
||||
$this->data = $categorylist;
|
||||
return;
|
||||
|
|
@ -460,17 +464,24 @@ class Ajax extends Backend
|
|||
$province = $this->request->get('province');
|
||||
$city = $this->request->get('city');
|
||||
$where = ['pid' => 0, 'level' => 1];
|
||||
if ($province)
|
||||
$provincelist = null;
|
||||
if ($province !== '')
|
||||
{
|
||||
$where['pid'] = $province;
|
||||
$where['level'] = 2;
|
||||
if ($province)
|
||||
{
|
||||
$where['pid'] = $province;
|
||||
$where['level'] = 2;
|
||||
}
|
||||
if ($city !== '')
|
||||
{
|
||||
if ($city)
|
||||
{
|
||||
$where['pid'] = $city;
|
||||
$where['level'] = 3;
|
||||
}
|
||||
$provincelist = Db::name('area')->where($where)->field('id as value,name')->select();
|
||||
}
|
||||
}
|
||||
if ($city)
|
||||
{
|
||||
$where['pid'] = $city;
|
||||
$where['level'] = 3;
|
||||
}
|
||||
$provincelist = Db::name('area')->where($where)->field('id as value,name')->select();
|
||||
$this->code = 1;
|
||||
$this->data = $provincelist;
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -24,15 +24,16 @@ class Category extends Backend
|
|||
$this->model = model('Category');
|
||||
|
||||
$tree = Tree::instance();
|
||||
$tree->init(CategoryModel::getCategoryArray(), 'pid');
|
||||
$tree->init($this->model->order('weigh desc,id desc')->select(), 'pid');
|
||||
$this->categorylist = $tree->getTreeList($tree->getTreeArray(0), 'name');
|
||||
$categorydata = [0 => __('None')];
|
||||
foreach ($this->categorylist as $k => $v)
|
||||
{
|
||||
$categorydata[$v['id']] = $v['name'];
|
||||
}
|
||||
$this->view->assign("typelist", CategoryModel::getTypeList());
|
||||
$this->view->assign("parentlist", $categorydata);
|
||||
$this->view->assign("flagList", $this->model->getFlagList());
|
||||
$this->view->assign("typeList", CategoryModel::getTypeList());
|
||||
$this->view->assign("parentList", $categorydata);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@
|
|||
namespace app\admin\controller\wechat;
|
||||
|
||||
use app\common\controller\Backend;
|
||||
use app\common\model\Configvalue;
|
||||
use app\common\model\WechatResponse;
|
||||
use EasyWeChat\Foundation\Application;
|
||||
use think\Config;
|
||||
|
|
@ -64,19 +63,47 @@ class Menu extends Backend
|
|||
|
||||
try
|
||||
{
|
||||
$ret = $app->menu->add(json_decode($this->wechatcfg->value, TRUE));
|
||||
if ($ret->errcode == 0)
|
||||
$hasError = false;
|
||||
$menu = json_decode($this->wechatcfg->value, TRUE);
|
||||
foreach ($menu as $k => $v)
|
||||
{
|
||||
$this->code = 1;
|
||||
if (isset($v['sub_button']))
|
||||
{
|
||||
foreach ($v['sub_button'] as $m => $n)
|
||||
{
|
||||
if (isset($n['key']) && !$n['key'])
|
||||
{
|
||||
$hasError = true;
|
||||
break 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (isset($v['key']) && !$v['key'])
|
||||
{
|
||||
$hasError = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!$hasError)
|
||||
{
|
||||
$ret = $app->menu->add($menu);
|
||||
if ($ret->errcode == 0)
|
||||
{
|
||||
$this->code = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->msg = $ret->errmsg;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->content = $ret->errmsg;
|
||||
$this->msg = __('Invalid parameters');
|
||||
}
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
$this->content = $e->getMessage();
|
||||
$this->msg = $e->getMessage();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,14 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'Diyname' => '自定义别名',
|
||||
'Keywords' => '关键字',
|
||||
'Description' => '描述',
|
||||
'keywords' => '关键字',
|
||||
'Pid' => '父ID',
|
||||
'Type' => '栏目类型',
|
||||
'Image' => '图片',
|
||||
'Keywords' => '关键字',
|
||||
'Description' => '描述',
|
||||
'Diyname' => '自定义名称',
|
||||
'Createtime' => '创建时间',
|
||||
'Updatetime' => '更新时间',
|
||||
'Weigh' => '权重',
|
||||
'Status' => '状态'
|
||||
];
|
||||
|
|
|
|||
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
|
||||
namespace app\admin\validate;
|
||||
|
||||
use think\Validate;
|
||||
|
||||
class Category extends Validate
|
||||
{
|
||||
/**
|
||||
* 验证规则
|
||||
*/
|
||||
protected $rule = [
|
||||
];
|
||||
/**
|
||||
* 提示消息
|
||||
*/
|
||||
protected $message = [
|
||||
];
|
||||
/**
|
||||
* 验证场景
|
||||
*/
|
||||
protected $scene = [
|
||||
'add' => [],
|
||||
'edit' => [],
|
||||
];
|
||||
|
||||
}
|
||||
|
|
@ -1,54 +1,89 @@
|
|||
<form id="add-form" role="form" data-toggle="validator" method="POST" action="">
|
||||
<div class="row">
|
||||
<div class="col-xs-12 col-sm-6">
|
||||
<div class="form-group">
|
||||
<label for="type" class="control-label">{:__('Type')}:</label>
|
||||
{:build_select('row[type]', $typelist, [], ['id'=>'c-type','class'=>'form-control selectpicker','data-rule'=>'required'])}
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="title" class="control-label">{:__('Name')}:</label>
|
||||
<input type="text" class="form-control" id="name" name="row[name]" value="" data-rule="required" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="nickname" class="control-label">{:__('Nickname')}:</label>
|
||||
<input type="text" class="form-control" id="nickname" name="row[nickname]" value="" data-rule="required" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="keywords" class="control-label">{:__('Keywords')}:</label>
|
||||
<input type="text" class="form-control" id="keywords" name="row[keywords]" value="" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="description" class="control-label">{:__('Description')}:</label>
|
||||
<textarea name="row[description]" id="description" class="form-control" cols="30" rows="3"></textarea>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-4">
|
||||
<div class="form-group form-inline">
|
||||
<label for="weigh" class="control-label">{:__('Weigh')}:</label>
|
||||
<input type="text" class="form-control" id="weigh" name="row[weigh]" value="0" data-rule="required" size="3" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-6">
|
||||
<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
|
||||
|
||||
<div class="form-group">
|
||||
<label for="pid" class="control-label">{:__('Parent')}:</label>
|
||||
{:build_select('row[pid]', $parentlist, null, ['id'=>'c-pid','class'=>'form-control selectpicker','data-rule'=>'required'])}
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-flag" class="control-label">{:__('Flag')}:</label>
|
||||
{:build_select('row[flag]', ['recommend'=>__('Recommend'), 'index'=>__('Index'), 'hot'=>__('Hot')], null, ['id'=>'c-flag','class'=>'form-control selectpicker','data-rule'=>'required'])}
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="content" class="control-label">{:__('Status')}:</label>
|
||||
<div>
|
||||
{:build_radios('row[status]', ['normal'=>__('Normal'), 'hidden'=>__('Hidden')])}
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-type" class="control-label col-xs-12 col-sm-2">{:__('Type')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
<select id="c-type" data-rule="required" class="form-control selectpicker" name="row[type]">
|
||||
{foreach name="typeList" item="vo"}
|
||||
<option value="{$key}" {in name="key" value=""}selected{/in}>{$vo}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-pid" class="control-label col-xs-12 col-sm-2">{:__('Pid')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
<select id="c-flag" 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}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-name" class="control-label col-xs-12 col-sm-2">{:__('Name')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-name" data-rule="required" class="form-control" name="row[name]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-nickname" class="control-label col-xs-12 col-sm-2">{:__('Nickname')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-nickname" data-rule="required" class="form-control" name="row[nickname]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-flag" class="control-label col-xs-12 col-sm-2">{:__('Flag')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
<select id="c-flag" class="form-control selectpicker" multiple="" name="row[flag][]">
|
||||
{foreach name="flagList" item="vo"}
|
||||
<option value="{$key}" {in name="key" value=""}selected{/in}>{$vo}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-image" class="control-label col-xs-12 col-sm-2">{:__('Image')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<div class="form-inline">
|
||||
<input id="c-image" class="form-control" size="50" name="row[image]" type="text" value="">
|
||||
<span><button type="button" id="plupload-image" class="btn btn-danger plupload" data-input-id="c-image" data-mimetype="image/*" data-multiple="false" data-preview-id="p-image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
||||
<span><button type="button" id="fachoose-image" class="btn btn-primary fachoose" data-input-id="c-image" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
||||
<ul class="row list-inline plupload-preview" id="p-image"></ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group hidden layer-footer">
|
||||
<div class="form-group">
|
||||
<label for="c-keywords" class="control-label col-xs-12 col-sm-2">{:__('Keywords')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-keywords" class="form-control" name="row[keywords]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-description" class="control-label col-xs-12 col-sm-2">{:__('Description')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<textarea id="c-description" class="form-control" name="row[description]"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-weigh" class="control-label col-xs-12 col-sm-2">{:__('Weigh')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-weigh" class="form-control" name="row[weigh]" type="number" value="0">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-status" class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
{:build_radios('row[status]', ['normal'=>__('Normal'), 'hidden'=>__('Hidden')])}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group layer-footer">
|
||||
<label class="control-label col-xs-12 col-sm-2"></label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
|
||||
|
|
|
|||
|
|
@ -1,54 +1,89 @@
|
|||
<form id="add-form" role="form" data-toggle="validator" method="POST" action="">
|
||||
<div class="row">
|
||||
<div class="col-xs-12 col-sm-6">
|
||||
<div class="form-group">
|
||||
<label for="type" class="control-label">{:__('Type')}:</label>
|
||||
{:build_select('row[type]', $typelist, $row['type'], ['id'=>'c-type','class'=>'form-control selectpicker','data-rule'=>'required'])}
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="title" class="control-label">{:__('Name')}:</label>
|
||||
<input type="text" class="form-control" id="name" name="row[name]" value="{$row.name}" data-rule="required" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="nickname" class="control-label">{:__('Nickname')}:</label>
|
||||
<input type="text" class="form-control" id="nickname" name="row[nickname]" value="{$row.nickname}" data-rule="required" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="keywords" class="control-label">{:__('Keywords')}:</label>
|
||||
<input type="text" class="form-control" id="keywords" name="row[keywords]" value="{$row.keywords}" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="description" class="control-label">{:__('Description')}:</label>
|
||||
<textarea name="row[description]" id="description" class="form-control" cols="30" rows="3">{$row.description}</textarea>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-4">
|
||||
<div class="form-group form-inline">
|
||||
<label for="weigh" class="control-label">{:__('Weigh')}:</label>
|
||||
<input type="text" class="form-control" id="weigh" name="row[weigh]" value="{$row.weigh}" data-rule="required" size="3" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-6">
|
||||
<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
|
||||
|
||||
<div class="form-group">
|
||||
<label for="pid" class="control-label">{:__('Parent')}:</label>
|
||||
{:build_select('row[pid]', $parentlist, $row['pid'], ['id'=>'c-pid','class'=>'form-control selectpicker','data-rule'=>'required'])}
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-flag" class="control-label">{:__('Flag')}:</label>
|
||||
{:build_select('row[flag]', ['recommend'=>__('Recommend'), 'index'=>__('Index'), 'hot'=>__('Hot')], $row['flag'], ['id'=>'c-flag','class'=>'form-control selectpicker','data-rule'=>'required'])}
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="content" class="control-label">{:__('Status')}:</label>
|
||||
<div>
|
||||
{:build_radios('row[status]', ['normal'=>__('Normal'), 'hidden'=>__('Hidden')], $row['status'])}
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-type" class="control-label col-xs-12 col-sm-2">{:__('Type')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
<select id="c-type" data-rule="required" class="form-control selectpicker" name="row[type]">
|
||||
{foreach name="typeList" item="vo"}
|
||||
<option value="{$key}" {in name="key" value="$row.type"}selected{/in}>{$vo}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-pid" class="control-label col-xs-12 col-sm-2">{:__('Pid')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
<select id="c-flag" 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}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-name" class="control-label col-xs-12 col-sm-2">{:__('Name')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-name" data-rule="required" class="form-control" name="row[name]" type="text" value="{$row.name}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-nickname" class="control-label col-xs-12 col-sm-2">{:__('Nickname')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-nickname" data-rule="required" class="form-control" name="row[nickname]" type="text" value="{$row.nickname}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-flag" class="control-label col-xs-12 col-sm-2">{:__('Flag')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
<select id="c-flag" class="form-control selectpicker" multiple="" name="row[flag][]">
|
||||
{foreach name="flagList" item="vo"}
|
||||
<option value="{$key}" {in name="key" value="$row.flag"}selected{/in}>{$vo}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-image" class="control-label col-xs-12 col-sm-2">{:__('Image')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<div class="form-inline">
|
||||
<input id="c-image" class="form-control" size="50" name="row[image]" type="text" value="{$row.image}">
|
||||
<span><button type="button" id="plupload-image" class="btn btn-danger plupload" data-input-id="c-image" data-mimetype="image/*" data-multiple="false" data-preview-id="p-image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
||||
<span><button type="button" id="fachoose-image" class="btn btn-primary fachoose" data-input-id="c-image" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
||||
<ul class="row list-inline plupload-preview" id="p-image"></ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group hidden layer-footer">
|
||||
<div class="form-group">
|
||||
<label for="c-keywords" class="control-label col-xs-12 col-sm-2">{:__('Keywords')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-keywords" class="form-control" name="row[keywords]" type="text" value="{$row.keywords}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-description" class="control-label col-xs-12 col-sm-2">{:__('Description')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<textarea id="c-description" class="form-control" name="row[description]">{$row.description}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-weigh" class="control-label col-xs-12 col-sm-2">{:__('Weigh')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-weigh" class="form-control" name="row[weigh]" type="number" value="{$row.weigh}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="c-status" class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
{:build_radios('row[status]', ['normal'=>__('Normal'), 'hidden'=>__('Hidden')], $row['status'])}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group layer-footer">
|
||||
<label class="control-label col-xs-12 col-sm-2"></label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
<meta charset="utf-8">
|
||||
<title>{$title|default=''}</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="renderer" content="webkit">
|
||||
|
||||
<link rel="shortcut icon" href="__CDN__/assets/img/favicon.ico" />
|
||||
<!-- Loading Bootstrap -->
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@
|
|||
<div id="toolbar" class="toolbar">
|
||||
{:build_toolbar('refresh,delete')}
|
||||
<a class="btn btn-info btn-disabled disabled btn-selected" href="javascript:;"><i class="fa fa-leaf"></i> 获取选中项</a>
|
||||
<a class="btn btn-success btn-singlesearch" href="javascript:;"><i class="fa fa-leaf"></i> 单独设置搜索条件</a>
|
||||
<div class="dropdown btn-group">
|
||||
<a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> <?= __('More') ?></a>
|
||||
<ul class="dropdown-menu text-left" role="menu">
|
||||
|
|
@ -16,6 +15,7 @@
|
|||
<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>
|
||||
</ul>
|
||||
</div>
|
||||
<a class="btn btn-success btn-singlesearch" href="javascript:;"><i class="fa fa-user"></i> 自定义搜索</a>
|
||||
<a class="btn btn-success btn-change btn-start" data-params="action=start" data-url="example/bootstraptable/change" href="javascript:;"><i class="fa fa-play"></i> 启动</a>
|
||||
<a class="btn btn-danger btn-change btn-pause" data-params="action=pause" data-url="example/bootstraptable/change" href="javascript:;"><i class="fa fa-pause"></i> 暂停</a>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@
|
|||
<div class="caption">
|
||||
<h4><%=item.title?item.title:'无'%></h4>
|
||||
<p class="text-muted">操作者IP:<%=item.ip%></p>
|
||||
<p class="text-muted">操作时间:<%=Moment(item.createtime).format("YYYY-MM-DD HH:mm:ss")%></p>
|
||||
<p class="text-muted">操作时间:<%=Moment(item.createtime*1000).format("YYYY-MM-DD HH:mm:ss")%></p>
|
||||
<p>
|
||||
<!--详情的事件需要在JS中手动绑定-->
|
||||
<a href="#" class="btn btn-primary btn-success btn-detail" data-id="<%=item.id%>"><i class="fa fa-camera"></i> 详情</a>
|
||||
|
|
|
|||
|
|
@ -177,7 +177,7 @@ class Email
|
|||
$headers .= "Content-type: text/html; charset=" . $this->options['charset'] . "\r\n";
|
||||
$headers .= "To: {$this->options['to_name']} <{$this->options['to']}>\r\n"; //收件人
|
||||
$headers .= "From: {$this->options['from_name']} <{$this->options['from']}>\r\n"; //发件人
|
||||
$result = mail($this->options['mail_to'], $this->options['subject'], $this->options['body'], $headers);
|
||||
$result = mail($this->options['to'], $this->options['subject'], $this->options['body'], $headers);
|
||||
$this->setError($result ? '' : error_get_last()['message']);
|
||||
break;
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -15,8 +15,11 @@ class Category Extends Model
|
|||
// 定义时间戳字段名
|
||||
protected $createTime = 'createtime';
|
||||
protected $updateTime = 'updatetime';
|
||||
// 定义字段类型
|
||||
protected $type = [
|
||||
|
||||
// 追加属性
|
||||
protected $append = [
|
||||
'type_text',
|
||||
'flag_text',
|
||||
];
|
||||
|
||||
/**
|
||||
|
|
@ -29,6 +32,26 @@ class Category Extends Model
|
|||
return $typelist;
|
||||
}
|
||||
|
||||
public function getTypeTextAttr($value, $data)
|
||||
{
|
||||
$value = $value ? $value : $data['type'];
|
||||
$list = $this->getTypeList();
|
||||
return isset($list[$value]) ? $list[$value] : '';
|
||||
}
|
||||
|
||||
public function getFlagList()
|
||||
{
|
||||
return ['hot' => __('Hot'), 'index' => __('Index'), 'recommend' => __('Recommend')];
|
||||
}
|
||||
|
||||
public function getFlagTextAttr($value, $data)
|
||||
{
|
||||
$value = $value ? $value : $data['flag'];
|
||||
$valueArr = explode(',', $value);
|
||||
$list = $this->getFlagList();
|
||||
return implode(',', array_intersect_key($list, array_flip($valueArr)));
|
||||
}
|
||||
|
||||
/**
|
||||
* 读取分类列表
|
||||
* @param string $type 指定类型
|
||||
|
|
@ -37,8 +60,7 @@ class Category Extends Model
|
|||
*/
|
||||
public static function getCategoryArray($type = NULL, $status = NULL)
|
||||
{
|
||||
$list = collection(self::where(function($query) use($type, $status)
|
||||
{
|
||||
$list = collection(self::where(function($query) use($type, $status) {
|
||||
if (!is_null($type))
|
||||
{
|
||||
$query->where('type', '=', $type);
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
<title>FastAdmin</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description" content="基于ThinkPHP5和Bootstrap的极速后台开发框架">
|
||||
<meta name="renderer" content="webkit">
|
||||
<link rel="shortcut icon" href="__CDN__/assets/img/favicon.ico" />
|
||||
<!-- Loading Bootstrap -->
|
||||
<link href="__CDN__/assets/css/frontend{$Think.config.app_debug?'':'.min'}.css?v={$Think.config.site.version}" rel="stylesheet">
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
<title>会员中心</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="renderer" content="webkit" />
|
||||
<link href="__CDN__/assets/css/bootstrap.min.css" rel="stylesheet" />
|
||||
<link href="__CDN__/assets/css/fastadmin.min.css" rel="stylesheet" />
|
||||
<link href="__CDN__/assets/libs/font-awesome/css/font-awesome.min.css" rel="stylesheet" />
|
||||
|
|
|
|||
|
|
@ -409,9 +409,11 @@ table.table-template {
|
|||
.fixed-table-container {
|
||||
border: none!important;
|
||||
}
|
||||
.note-editor .note-editing-area .note-editable {
|
||||
display: block !important;
|
||||
/*修复nice-validator和summernote的编辑框冲突*/
|
||||
.nice-validator .note-editor .note-editing-area .note-editable {
|
||||
display: inherit;
|
||||
}
|
||||
/*预览区域*/
|
||||
.plupload-preview {
|
||||
padding: 10px;
|
||||
margin-bottom: 0;
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -1,4 +1,4 @@
|
|||
define(['jquery', 'bootstrap', 'backend', 'form', 'table'], function ($, undefined, Backend, Form, Table) {
|
||||
define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
|
||||
|
||||
var Controller = {
|
||||
index: function () {
|
||||
|
|
@ -10,7 +10,7 @@ define(['jquery', 'bootstrap', 'backend', 'form', 'table'], function ($, undefin
|
|||
edit_url: 'category/edit',
|
||||
del_url: 'category/del',
|
||||
multi_url: 'category/multi',
|
||||
table: 'category'
|
||||
table: 'category',
|
||||
}
|
||||
});
|
||||
|
||||
|
|
@ -19,28 +19,25 @@ define(['jquery', 'bootstrap', 'backend', 'form', 'table'], function ($, undefin
|
|||
// 初始化表格
|
||||
table.bootstrapTable({
|
||||
url: $.fn.bootstrapTable.defaults.extend.index_url,
|
||||
pk: 'id',
|
||||
sortName: 'weigh',
|
||||
columns: [
|
||||
[
|
||||
{field: 'state', checkbox: true, },
|
||||
{field: 'id', title: 'ID'},
|
||||
{field: 'name', title: __('Name'), align: 'left'},
|
||||
{field: 'nickname', title: __('Nickname')},
|
||||
{field: 'id', title: __('Id')},
|
||||
{field: 'type', title: __('Type')},
|
||||
{field: 'flag', title: __('Flag'), formatter: Table.api.formatter.flag},
|
||||
{field: 'name', title: __('Name'), align:'left'},
|
||||
{field: 'nickname', title: __('Nickname')},
|
||||
{field: 'flag_text', title: __('Flag'), operate:false, formatter: Table.api.formatter.label},
|
||||
{field: 'image', title: __('Image'), formatter: Table.api.formatter.image},
|
||||
{field: 'weigh', title: __('Weigh')},
|
||||
{field: 'status', title: __('Status'), formatter: Table.api.formatter.status},
|
||||
{field: 'operate', title: __('Operate'), events: Table.api.events.operate, formatter: Table.api.formatter.operate}
|
||||
]
|
||||
],
|
||||
pagination: false,
|
||||
search: false,
|
||||
commonSearch: false,
|
||||
]
|
||||
});
|
||||
|
||||
// 为表格绑定事件
|
||||
Table.api.bindevent(table);
|
||||
|
||||
},
|
||||
add: function () {
|
||||
Controller.api.bindevent();
|
||||
|
|
@ -53,7 +50,6 @@ define(['jquery', 'bootstrap', 'backend', 'form', 'table'], function ($, undefin
|
|||
Form.api.bindevent($("form[role=form]"));
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
return Controller;
|
||||
});
|
||||
|
|
@ -30,7 +30,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|||
//模糊搜索
|
||||
{field: 'title', title: __('Title'), operate: 'LIKE %...%', placeholder: '模糊搜索,*表示任意字符', style: 'width:200px'},
|
||||
//通过Ajax渲染searchList,也可以使用JSON数据
|
||||
{field: 'url', title: __('Url'), align: 'left', defaultValue: 3, searchList: $.getJSON('ajax/typeahead?search=a&field=row[user_id]'), formatter: Controller.api.formatter.url},
|
||||
{field: 'url', title: __('Url'), align: 'left', searchList: $.getJSON('ajax/typeahead?search=a&field=row[user_id]'), formatter: Controller.api.formatter.url},
|
||||
//点击IP时同时执行搜索此IP,同时普通搜索使用下拉列表的形式
|
||||
{field: 'ip', title: __('IP'), searchList: ['127.0.0.1', '127.0.0.2'], events: Controller.api.events.ip, formatter: Controller.api.formatter.ip},
|
||||
//自定义栏位
|
||||
|
|
@ -41,7 +41,9 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|||
//启用时间段搜索
|
||||
{field: 'createtime', title: __('Create time'), formatter: Table.api.formatter.datetime, operate: 'BETWEEN', type: 'datetime', addclass: 'datetimepicker', data: 'data-date-format="YYYY-MM-DD HH:mm:ss"'},
|
||||
//我们向操作栏额外添加上一个详情按钮,并保留已有的编辑和删除控制,同时为这个按钮添加上点击事件
|
||||
{field: 'operate', title: __('Operate'), events: Controller.api.events.operate, formatter: Controller.api.formatter.operate}
|
||||
{field: 'operate', title: __('Operate'), events: Controller.api.events.operate, formatter: function (value, row, index) {
|
||||
return Table.api.formatter.operate.call(this, value, row, index, table);
|
||||
}}
|
||||
],
|
||||
],
|
||||
//禁用默认搜索
|
||||
|
|
@ -51,10 +53,10 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|||
//可以控制是否默认显示搜索单表,false则隐藏,默认为false
|
||||
searchFormVisible: true
|
||||
});
|
||||
|
||||
|
||||
//在表格内容渲染完成后回调的事件
|
||||
table.on('post-body.bs.table', function (e, settings, json, xhr) {
|
||||
|
||||
|
||||
});
|
||||
|
||||
// 为表格绑定事件
|
||||
|
|
@ -62,14 +64,29 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|||
|
||||
//指定搜索条件
|
||||
$(document).on("click", ".btn-singlesearch", function () {
|
||||
table.bootstrapTable('refresh', {query: {filter: JSON.stringify({url: '/admin/index/login.html'}), op: JSON.stringify({url: '='})}});
|
||||
var options = table.bootstrapTable('getOptions');
|
||||
options.pageNumber = 1;
|
||||
options.queryParams = function (params) {
|
||||
return {
|
||||
search: params.search,
|
||||
sort: params.sort,
|
||||
order: params.order,
|
||||
filter: JSON.stringify({admin_id: 1}),
|
||||
op: JSON.stringify({admin_id: '='}),
|
||||
offset: params.offset,
|
||||
limit: params.limit,
|
||||
};
|
||||
};
|
||||
table.bootstrapTable('refresh', {});
|
||||
Toastr.info("当前执行的是自定义搜索");
|
||||
return false;
|
||||
});
|
||||
|
||||
//获取选中项
|
||||
$(document).on("click", ".btn-selected", function () {
|
||||
Layer.alert(JSON.stringify(table.bootstrapTable('getSelections')));
|
||||
});
|
||||
|
||||
|
||||
//启动和暂停按钮
|
||||
$(document).on("click", ".btn-start,.btn-pause", function () {
|
||||
//在table外不可以使用添加.btn-change的方法
|
||||
|
|
@ -116,10 +133,12 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|||
//格式为:方法名+空格+DOM元素
|
||||
'click .btn-ip': function (e, value, row, index) {
|
||||
e.stopPropagation();
|
||||
console.log();
|
||||
var container = $("#table").data("bootstrap.table").$container;
|
||||
var options = $("#table").bootstrapTable('getOptions');
|
||||
//这里我们手动将数据填充到表单然后提交
|
||||
$("#commonSearchContent_" + options.idTable + " form [name='ip']").val(value);
|
||||
$("#commonSearchContent_" + options.idTable + " form").trigger('submit');
|
||||
$("form.form-commonsearch [name='ip']", container).val(value);
|
||||
$("form.form-commonsearch", container).trigger('submit');
|
||||
Toastr.info("执行了自定义搜索操作");
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -254,7 +254,6 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'sortable'], function
|
|||
});
|
||||
$(document).on('click', "#menuSyn", function () {
|
||||
$.post("wechat/menu/sync", {}, function (ret) {
|
||||
|
||||
var msg = ret.hasOwnProperty("msg") && ret.msg != "" ? ret.msg : "";
|
||||
if (ret.code == 1) {
|
||||
Backend.api.toastr.success('菜单同步更新成功,生效时间看微信官网说明,或者你重新关注微信号!');
|
||||
|
|
|
|||
|
|
@ -7800,31 +7800,33 @@ define('table',['jquery', 'bootstrap', 'backend', 'toastr', 'moment', 'bootstrap
|
|||
$(Table.config.refreshbtn, toolbar).find(".fa").removeClass("fa-spin");
|
||||
$(Table.config.disabledbtn, toolbar).toggleClass('disabled', true);
|
||||
|
||||
// 挺拽选择,需要重新绑定事件
|
||||
require(['drag', 'drop'], function () {
|
||||
$(Table.config.firsttd, table).drag("start", function (ev, dd) {
|
||||
return $('<div class="selection" />').css('opacity', .65).appendTo(document.body);
|
||||
}).drag(function (ev, dd) {
|
||||
$(dd.proxy).css({
|
||||
top: Math.min(ev.pageY, dd.startY),
|
||||
left: Math.min(ev.pageX, dd.startX),
|
||||
height: Math.abs(ev.pageY - dd.startY),
|
||||
width: Math.abs(ev.pageX - dd.startX)
|
||||
if ($(Table.config.firsttd, table).find("input[type='checkbox'][data-index]").size() > 0) {
|
||||
// 挺拽选择,需要重新绑定事件
|
||||
require(['drag', 'drop'], function () {
|
||||
$(Table.config.firsttd, table).drag("start", function (ev, dd) {
|
||||
return $('<div class="selection" />').css('opacity', .65).appendTo(document.body);
|
||||
}).drag(function (ev, dd) {
|
||||
$(dd.proxy).css({
|
||||
top: Math.min(ev.pageY, dd.startY),
|
||||
left: Math.min(ev.pageX, dd.startX),
|
||||
height: Math.abs(ev.pageY - dd.startY),
|
||||
width: Math.abs(ev.pageX - dd.startX)
|
||||
});
|
||||
}).drag("end", function (ev, dd) {
|
||||
$(dd.proxy).remove();
|
||||
});
|
||||
$(Table.config.firsttd, table).drop("start", function () {
|
||||
Table.api.toggleattr(this);
|
||||
}).drop(function () {
|
||||
Table.api.toggleattr(this);
|
||||
}).drop("end", function () {
|
||||
Table.api.toggleattr(this);
|
||||
});
|
||||
$.drop({
|
||||
multi: true
|
||||
});
|
||||
}).drag("end", function (ev, dd) {
|
||||
$(dd.proxy).remove();
|
||||
});
|
||||
$(Table.config.firsttd, table).drop("start", function () {
|
||||
Table.api.toggleattr(this);
|
||||
}).drop(function () {
|
||||
Table.api.toggleattr(this);
|
||||
}).drop("end", function () {
|
||||
Table.api.toggleattr(this);
|
||||
});
|
||||
$.drop({
|
||||
multi: true
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// 处理选中筛选框后按钮的状态统一变更
|
||||
|
|
@ -12049,6 +12051,9 @@ define("addtabs", function(){});
|
|||
if ($(elem.combo_input).attr('placeholder'))
|
||||
$(elem.combo_input).attr('placeholder_bak', $(elem.combo_input).attr('placeholder'));
|
||||
}
|
||||
if ($(elem.container).parent().hasClass("input-group")) {
|
||||
$(elem.container).height($(elem.container).parent().height());
|
||||
}
|
||||
|
||||
this.elem = elem;
|
||||
},
|
||||
|
|
@ -12104,16 +12109,30 @@ define("addtabs", function(){});
|
|||
data = null;
|
||||
self._afterInit(self, data);
|
||||
} else {
|
||||
var _paramsFunc = self.option.params;
|
||||
var _params = {};
|
||||
//原始参数
|
||||
var _orgParams = {
|
||||
db_table: self.option.db_table,
|
||||
field: self.option.field,
|
||||
order_by: self.option.order_by,
|
||||
pkey_name: self.option.primary_key,
|
||||
pkey_value: self.option.init_record
|
||||
};
|
||||
if (_paramsFunc) {
|
||||
var result = $.isFunction(_paramsFunc) ? _paramsFunc() : _paramsFunc;
|
||||
if (result && $.isPlainObject(result)) {
|
||||
_params = $.extend({}, _orgParams, result);
|
||||
} else {
|
||||
_params = _orgParams;
|
||||
}
|
||||
} else {
|
||||
_params = _orgParams;
|
||||
}
|
||||
$.ajax({
|
||||
dataType: 'json',
|
||||
url: self.option.source,
|
||||
data: {
|
||||
db_table: self.option.db_table,
|
||||
field: self.option.field,
|
||||
order_by: self.option.order_by,
|
||||
pkey_name: self.option.primary_key,
|
||||
pkey_value: self.option.init_record
|
||||
},
|
||||
data: _params,
|
||||
success: function (json) {
|
||||
if (typeof json.list !== 'undefined' && $.isArray(json.list)) {
|
||||
self._afterInit(self, json.list);
|
||||
|
|
@ -13562,3 +13581,4 @@ define("addtabs", function(){});
|
|||
});
|
||||
return SelectPage;
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -12,12 +12,14 @@ require.config({
|
|||
'form': 'require-form',
|
||||
'table': 'require-table',
|
||||
'upload': 'require-upload',
|
||||
'validator': 'require-validator',
|
||||
'drag': 'jquery.drag.min',
|
||||
'drop': 'jquery.drop.min',
|
||||
'echarts': 'echarts.min',
|
||||
'echarts-theme': 'echarts-theme',
|
||||
'adminlte': 'adminlte',
|
||||
'bootstrap-table-commonsearch': 'bootstrap-table-commonsearch',
|
||||
'bootstrap-table-template': 'bootstrap-table-template',
|
||||
//
|
||||
// 以下的包从bower的libs目录加载
|
||||
'jquery': '../libs/jquery/dist/jquery.min',
|
||||
|
|
@ -39,19 +41,25 @@ require.config({
|
|||
'slimscroll': '../libs/jquery-slimscroll/jquery.slimscroll',
|
||||
'crontab': '../libs/jqcron/src/jqCron.cn',
|
||||
'summernote': '../libs/summernote/dist/lang/summernote-zh-CN.min',
|
||||
'validator': '../libs/nice-validator/dist/jquery.validator.js?local=zh-CN',
|
||||
'validator-core': '../libs/nice-validator/dist/jquery.validator',
|
||||
'validator-lang': '../libs/nice-validator/dist/local/zh-CN',
|
||||
'plupload': '../libs/plupload/js/plupload.min',
|
||||
'toastr': '../libs/toastr/toastr',
|
||||
'jstree': '../libs/jstree/dist/jstree.min',
|
||||
'layer': '../libs/layer/src/layer',
|
||||
'cookie': '../libs/jquery.cookie/jquery.cookie',
|
||||
'cxselect': '../libs/jquery-cxselect/js/jquery.cxselect',
|
||||
'template': '../libs/art-template/dist/template-native',
|
||||
'selectpage': '../libs/selectpage/selectpage',
|
||||
},
|
||||
// shim依赖配置
|
||||
shim: {
|
||||
'bootstrap': ['jquery'],
|
||||
'bootstrap-table': {
|
||||
deps: ['bootstrap', 'css!../libs/bootstrap-table/dist/bootstrap-table.min.css'],
|
||||
deps: [
|
||||
'bootstrap',
|
||||
// 'css!../libs/bootstrap-table/dist/bootstrap-table.min.css'
|
||||
],
|
||||
exports: '$.fn.bootstrapTable'
|
||||
},
|
||||
'bootstrap-table-lang': {
|
||||
|
|
@ -74,6 +82,10 @@ require.config({
|
|||
deps: ['bootstrap-table'],
|
||||
exports: '$.fn.bootstrapTable.defaults'
|
||||
},
|
||||
'bootstrap-table-template': {
|
||||
deps: ['bootstrap-table', 'template'],
|
||||
exports: '$.fn.bootstrapTable.defaults'
|
||||
},
|
||||
'tableexport': {
|
||||
deps: ['jquery'],
|
||||
exports: '$.fn.extend'
|
||||
|
|
@ -92,21 +104,21 @@ require.config({
|
|||
'bootstrap-switch': ['jquery'],
|
||||
'bootstrap-dialog': ['css!../libs/bootstrap3-dialog/dist/css/bootstrap-dialog.min.css'],
|
||||
'bootstrap-datetimepicker': [
|
||||
'css!../libs/eonasdan-bootstrap-datetimepicker/build/css/bootstrap-datetimepicker.min.css',
|
||||
'moment/locale/zh-cn',
|
||||
// 'css!../libs/eonasdan-bootstrap-datetimepicker/build/css/bootstrap-datetimepicker.min.css',
|
||||
],
|
||||
'bootstrap-select': ['css!../libs/bootstrap-select/dist/css/bootstrap-select.min.css', ],
|
||||
'summernote': ['../libs/summernote/dist/summernote.min', 'css!../libs/summernote/dist/summernote.css'],
|
||||
// 'toastr': ['css!../libs/toastr/toastr.min.css'],
|
||||
'jstree': ['css!../libs/jstree/dist/themes/default/style.css', ],
|
||||
'plupload': {
|
||||
deps: [
|
||||
'../libs/plupload/js/moxie.min'
|
||||
],
|
||||
deps: ['../libs/plupload/js/moxie.min'],
|
||||
exports: "plupload"
|
||||
},
|
||||
// 'layer': ['css!../libs/layer/build/skin/default/layer.css'],
|
||||
|
||||
// 'validator-core': ['css!../libs/nice-validator/dist/jquery.validator.css'],
|
||||
'validator-lang': ['validator-core'],
|
||||
// 'selectpage': ['css!../libs/selectpage/selectpage.css'],
|
||||
},
|
||||
baseUrl: requirejs.s.contexts._.config.config.site.cdnurl + '/assets/js/', //资源基础路径
|
||||
map: {
|
||||
|
|
|
|||
|
|
@ -26,12 +26,14 @@ require.config({
|
|||
'form': 'require-form',
|
||||
'table': 'require-table',
|
||||
'upload': 'require-upload',
|
||||
'validator': 'require-validator',
|
||||
'drag': 'jquery.drag.min',
|
||||
'drop': 'jquery.drop.min',
|
||||
'echarts': 'echarts.min',
|
||||
'echarts-theme': 'echarts-theme',
|
||||
'adminlte': 'adminlte',
|
||||
'bootstrap-table-commonsearch': 'bootstrap-table-commonsearch',
|
||||
'bootstrap-table-template': 'bootstrap-table-template',
|
||||
//
|
||||
// 以下的包从bower的libs目录加载
|
||||
'jquery': '../libs/jquery/dist/jquery.min',
|
||||
|
|
@ -53,19 +55,25 @@ require.config({
|
|||
'slimscroll': '../libs/jquery-slimscroll/jquery.slimscroll',
|
||||
'crontab': '../libs/jqcron/src/jqCron.cn',
|
||||
'summernote': '../libs/summernote/dist/lang/summernote-zh-CN.min',
|
||||
'validator': '../libs/nice-validator/dist/jquery.validator.js?local=zh-CN',
|
||||
'validator-core': '../libs/nice-validator/dist/jquery.validator',
|
||||
'validator-lang': '../libs/nice-validator/dist/local/zh-CN',
|
||||
'plupload': '../libs/plupload/js/plupload.min',
|
||||
'toastr': '../libs/toastr/toastr',
|
||||
'jstree': '../libs/jstree/dist/jstree.min',
|
||||
'layer': '../libs/layer/src/layer',
|
||||
'cookie': '../libs/jquery.cookie/jquery.cookie',
|
||||
'cxselect': '../libs/jquery-cxselect/js/jquery.cxselect',
|
||||
'template': '../libs/art-template/dist/template-native',
|
||||
'selectpage': '../libs/selectpage/selectpage',
|
||||
},
|
||||
// shim依赖配置
|
||||
shim: {
|
||||
'bootstrap': ['jquery'],
|
||||
'bootstrap-table': {
|
||||
deps: ['bootstrap', 'css!../libs/bootstrap-table/dist/bootstrap-table.min.css'],
|
||||
deps: [
|
||||
'bootstrap',
|
||||
// 'css!../libs/bootstrap-table/dist/bootstrap-table.min.css'
|
||||
],
|
||||
exports: '$.fn.bootstrapTable'
|
||||
},
|
||||
'bootstrap-table-lang': {
|
||||
|
|
@ -88,6 +96,10 @@ require.config({
|
|||
deps: ['bootstrap-table'],
|
||||
exports: '$.fn.bootstrapTable.defaults'
|
||||
},
|
||||
'bootstrap-table-template': {
|
||||
deps: ['bootstrap-table', 'template'],
|
||||
exports: '$.fn.bootstrapTable.defaults'
|
||||
},
|
||||
'tableexport': {
|
||||
deps: ['jquery'],
|
||||
exports: '$.fn.extend'
|
||||
|
|
@ -106,21 +118,21 @@ require.config({
|
|||
'bootstrap-switch': ['jquery'],
|
||||
'bootstrap-dialog': ['css!../libs/bootstrap3-dialog/dist/css/bootstrap-dialog.min.css'],
|
||||
'bootstrap-datetimepicker': [
|
||||
'css!../libs/eonasdan-bootstrap-datetimepicker/build/css/bootstrap-datetimepicker.min.css',
|
||||
'moment/locale/zh-cn',
|
||||
// 'css!../libs/eonasdan-bootstrap-datetimepicker/build/css/bootstrap-datetimepicker.min.css',
|
||||
],
|
||||
'bootstrap-select': ['css!../libs/bootstrap-select/dist/css/bootstrap-select.min.css', ],
|
||||
'summernote': ['../libs/summernote/dist/summernote.min', 'css!../libs/summernote/dist/summernote.css'],
|
||||
// 'toastr': ['css!../libs/toastr/toastr.min.css'],
|
||||
'jstree': ['css!../libs/jstree/dist/themes/default/style.css', ],
|
||||
'plupload': {
|
||||
deps: [
|
||||
'../libs/plupload/js/moxie.min'
|
||||
],
|
||||
deps: ['../libs/plupload/js/moxie.min'],
|
||||
exports: "plupload"
|
||||
},
|
||||
// 'layer': ['css!../libs/layer/build/skin/default/layer.css'],
|
||||
|
||||
// 'validator-core': ['css!../libs/nice-validator/dist/jquery.validator.css'],
|
||||
'validator-lang': ['validator-core'],
|
||||
// 'selectpage': ['css!../libs/selectpage/selectpage.css'],
|
||||
},
|
||||
baseUrl: requirejs.s.contexts._.config.config.site.cdnurl + '/assets/js/', //资源基础路径
|
||||
map: {
|
||||
|
|
|
|||
|
|
@ -113,31 +113,33 @@ define(['jquery', 'bootstrap', 'backend', 'toastr', 'moment', 'bootstrap-table',
|
|||
$(Table.config.refreshbtn, toolbar).find(".fa").removeClass("fa-spin");
|
||||
$(Table.config.disabledbtn, toolbar).toggleClass('disabled', true);
|
||||
|
||||
// 挺拽选择,需要重新绑定事件
|
||||
require(['drag', 'drop'], function () {
|
||||
$(Table.config.firsttd, table).drag("start", function (ev, dd) {
|
||||
return $('<div class="selection" />').css('opacity', .65).appendTo(document.body);
|
||||
}).drag(function (ev, dd) {
|
||||
$(dd.proxy).css({
|
||||
top: Math.min(ev.pageY, dd.startY),
|
||||
left: Math.min(ev.pageX, dd.startX),
|
||||
height: Math.abs(ev.pageY - dd.startY),
|
||||
width: Math.abs(ev.pageX - dd.startX)
|
||||
if ($(Table.config.firsttd, table).find("input[type='checkbox'][data-index]").size() > 0) {
|
||||
// 挺拽选择,需要重新绑定事件
|
||||
require(['drag', 'drop'], function () {
|
||||
$(Table.config.firsttd, table).drag("start", function (ev, dd) {
|
||||
return $('<div class="selection" />').css('opacity', .65).appendTo(document.body);
|
||||
}).drag(function (ev, dd) {
|
||||
$(dd.proxy).css({
|
||||
top: Math.min(ev.pageY, dd.startY),
|
||||
left: Math.min(ev.pageX, dd.startX),
|
||||
height: Math.abs(ev.pageY - dd.startY),
|
||||
width: Math.abs(ev.pageX - dd.startX)
|
||||
});
|
||||
}).drag("end", function (ev, dd) {
|
||||
$(dd.proxy).remove();
|
||||
});
|
||||
$(Table.config.firsttd, table).drop("start", function () {
|
||||
Table.api.toggleattr(this);
|
||||
}).drop(function () {
|
||||
Table.api.toggleattr(this);
|
||||
}).drop("end", function () {
|
||||
Table.api.toggleattr(this);
|
||||
});
|
||||
$.drop({
|
||||
multi: true
|
||||
});
|
||||
}).drag("end", function (ev, dd) {
|
||||
$(dd.proxy).remove();
|
||||
});
|
||||
$(Table.config.firsttd, table).drop("start", function () {
|
||||
Table.api.toggleattr(this);
|
||||
}).drop(function () {
|
||||
Table.api.toggleattr(this);
|
||||
}).drop("end", function () {
|
||||
Table.api.toggleattr(this);
|
||||
});
|
||||
$.drop({
|
||||
multi: true
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// 处理选中筛选框后按钮的状态统一变更
|
||||
|
|
|
|||
|
|
@ -438,10 +438,12 @@ table.table-template{
|
|||
border:none!important;
|
||||
}
|
||||
|
||||
.note-editor .note-editing-area .note-editable{
|
||||
display: block !important;
|
||||
/*修复nice-validator和summernote的编辑框冲突*/
|
||||
.nice-validator .note-editor .note-editing-area .note-editable{
|
||||
display:inherit;
|
||||
}
|
||||
|
||||
/*预览区域*/
|
||||
.plupload-preview {
|
||||
padding:10px;
|
||||
margin-bottom:0;
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ $sitename = "FastAdmin";
|
|||
|
||||
$link = array(
|
||||
'qqun' => "https://jq.qq.com/?_wv=1027&k=487PNBb",
|
||||
'osc' => 'https://git.oschina.net/karson/fastadmin',
|
||||
'osc' => 'https://git.oschina.net/karson/fastadmin/attach_files',
|
||||
'home' => 'http://www.fastadmin.net?ref=install',
|
||||
'forum' => 'http://forum.fastadmin.net?ref=install',
|
||||
'doc' => 'http://doc.fastadmin.net?ref=install',
|
||||
|
|
|
|||
Loading…
Reference in New Issue