Merge remote-tracking branch 'origin/master'

This commit is contained in:
zhaoxiang 2016-11-10 11:30:22 +08:00
commit 21cfecc76c
4 changed files with 204 additions and 84 deletions

View File

@ -1,5 +1,6 @@
<?php
namespace app\admin\controller;
use think\Validate;
/**
* 菜单管理控制器
@ -21,14 +22,26 @@ class Menu extends Base {
'field' => 'url',
'info' => '菜单URL'
],
[
'field' => 'type',
'info' => '菜单类型'
],
[
'field' => 'level',
'info' => '等级'
],
[
'field' => 'post',
'info' => 'Post'
],
[
'field' => 'get',
'info' => 'Get'
],
[
'field' => 'put',
'info' => 'Put'
],
[
'field' => 'delete',
'info' => 'Delete'
],
[
'field' => 'hide',
'info' => '隐藏'
@ -81,6 +94,7 @@ class Menu extends Base {
'info' => '',
'href' => url('Menu/add'),
'param'=> [$this->primaryKey],
'class' => 'refresh'
]
],
'hide' => [
@ -96,21 +110,60 @@ class Menu extends Base {
]
]
],
'type' => [
'module' => 'label',
'post' => [
'module' => 'icon',
'rule' => [
[
'info' => '方法类功能',
'class' => 'label label-info'
'info' => '',
'class' => 'fa fa-close'
],
[
'info' => '模块类功能',
'class' => 'label label-primary'
'info' => '',
'class' => 'fa fa-check'
]
]
],
'get' => [
'module' => 'icon',
'rule' => [
[
'info' => '',
'class' => 'fa fa-close'
],
[
'info' => '',
'class' => 'fa fa-check'
]
]
],
'put' => [
'module' => 'icon',
'rule' => [
[
'info' => '',
'class' => 'fa fa-close'
],
[
'info' => '',
'class' => 'fa fa-check'
]
]
],
'delete' => [
'module' => 'icon',
'rule' => [
[
'info' => '',
'class' => 'fa fa-close'
],
[
'info' => '',
'class' => 'fa fa-check'
]
]
]
],
'data' => $data //这个数据应该是从数据库中查出来
'data' => $data
];
$this->result($table, ReturnCode::GET_TEMPLATE_SUCCESS);
}
@ -122,7 +175,7 @@ class Menu extends Base {
[
'name' => 'require',
],[
'name.require' => '名称必须',
'name.require' => '菜单名称不能为空',
]
)->save($this->request->post());
if(false === $result){
@ -132,6 +185,7 @@ class Menu extends Base {
}
}else{
$data = \app\admin\model\Menu::where([])->column('name',$this->primaryKey);
$defaultFather = $this->request->get($this->primaryKey);
$form = [
'tempType' => 'add',
'formAttr' => [
@ -156,7 +210,7 @@ class Menu extends Base {
'info' => '父级菜单:',
'attr' => [
'name' => 'fid',
'value' => '',
'value' => $defaultFather,
'options' => $data
]
],
@ -174,15 +228,29 @@ class Menu extends Base {
]
],
[
'module' => 'radio',
'module' => 'checkbox',
'description' => '',
'info' => '菜单类型',
'info' => '访客权限',
'attr' => [
'name' => 'type',
'value' => '',
'options' => [
'模块类功能',
'方法类功能'
[
'name' => 'auth[get]',
'desc' => 'GET',
'value' => ''
],
[
'name' => 'auth[put]',
'desc' => 'PUT',
'value' => ''
],
[
'name' => 'auth[post]',
'desc' => 'POST',
'value' => ''
],
[
'name' => 'auth[delete]',
'desc' => 'DELETE',
'value' => ''
]
]
],
@ -199,19 +267,6 @@ class Menu extends Base {
]
]
],
[
'module' => 'radio',
'description' => '',
'info' => '是否推荐:「该配置只对模块类功能生效」',
'attr' => [
'name' => 'recommend',
'value' => '',
'options' => [
'普通模块',
'推荐模块'
]
]
],
[
'module' => 'text',
'description' => '',
@ -250,17 +305,17 @@ class Menu extends Base {
public function edit(){
if( $this->request->isPut() ){
$menuModel = new \app\admin\model\Menu();
$result = $menuModel->allowField(true)->validate(
[
'name' => 'require',
],[
'name.require' => '名称必须',
]
)->update($this->request->put());
if(false === $result){
$this->error($menuModel->getError());
$data = $this->request->put();
$validate = new Validate([
'name' => 'require',
],[
'name.require' => '菜单名称不能为空',
]);
if(!$validate->check($data)){
$this->error($validate->getError());
}else{
$menuModel = new \app\admin\model\Menu();
$menuModel->allowField(true)->update($data);
$this->success('操作成功!', url('Menu/index'));
}
}else{
@ -269,8 +324,8 @@ class Menu extends Base {
$form = [
'tempType' => 'edit',
'formAttr' => [
'target' => url('Menu/add'),
'formId' => 'add-menu-form',
'target' => url('Menu/edit'),
'formId' => 'edit-menu-form',
'backUrl' => url('Menu/index'),
],
'formList' => [
@ -284,6 +339,16 @@ class Menu extends Base {
'placeholder' => ''
]
],
[
'module' => 'hidden',
'description' => '',
'info' => '',
'attr' => [
'name' => 'id',
'value' => $detail['id'],
'placeholder' => ''
]
],
[
'module' => 'select',
'description' => '',
@ -308,15 +373,29 @@ class Menu extends Base {
]
],
[
'module' => 'radio',
'module' => 'checkbox',
'description' => '',
'info' => '菜单类型',
'info' => '访客权限',
'attr' => [
'name' => 'type',
'value' => $detail['type'],
'options' => [
'模块类功能',
'方法类功能'
[
'name' => 'auth[get]',
'desc' => 'GET',
'value' => ''
],
[
'name' => 'auth[put]',
'desc' => 'PUT',
'value' => ''
],
[
'name' => 'auth[post]',
'desc' => 'POST',
'value' => ''
],
[
'name' => 'auth[delete]',
'desc' => 'DELETE',
'value' => ''
]
]
],
@ -333,19 +412,6 @@ class Menu extends Base {
]
]
],
[
'module' => 'radio',
'description' => '',
'info' => '是否推荐:「该配置只对模块类功能生效」',
'attr' => [
'name' => 'recommend',
'value' => $detail['recommend'],
'options' => [
'普通模块',
'推荐模块'
]
]
],
[
'module' => 'text',
'description' => '',
@ -383,7 +449,18 @@ class Menu extends Base {
}
public function del(){
$this->error('失败');
if( $this->request->isDelete() ){
$key = $this->request->delete($this->primaryKey);
$childNum = \app\admin\model\Menu::where(['fid' => $key])->count();
if( $childNum ){
$this->error('当前菜单存在子菜单,删除失败!');
}
$delNum = \app\admin\model\Menu::destroy($key);
if( $delNum ){
$this->success('操作成功!', url('Menu/index'));
}
}
$this->error('操作失败!');
}
}

View File

@ -30,7 +30,8 @@
* @param msg
* @param wait 等待时间毫秒
*/
$.alertMsg = function( msg, wait = 2800 ){
$.alertMsg = function( msg, wait ){
wait = wait ? wait : 2800;
var dialog = bootbox.dialog({
message: '<p class="text-center">'+msg+'</p>',
closeButton: false
@ -45,7 +46,8 @@
* @param url
* @param urlData
*/
$.refresh = function ( url, urlData = '' ) {
$.refresh = function ( url, urlData ) {
urlData = urlData ? urlData : '';
$.ajax({
type: "GET",
url: url,
@ -98,7 +100,7 @@
};
/**
* Ajax Post 表单提交()
* Ajax Post 表单提交() *
*/
bodyDom.on('click', '.ajax-post', function() {
var message,query,form,target;
@ -139,7 +141,7 @@
});
/**
* Ajax Put 表单提交()
* Ajax Put 表单提交() *
*/
bodyDom.on('click', '.ajax-put', function() {
var message,query,form,target;
@ -162,18 +164,11 @@
$.alertMsg(message);
setTimeout(function() {
if (data.url) {
location.href = data.url;
} else {
location.reload();
$.refresh(data.url);
}
}, wait);
} else {
$.alertMsg(data.msg);
setTimeout(function() {
if (data.url) {
location.href = data.url;
}
}, wait);
}
});
return false;

View File

@ -8,7 +8,7 @@
* @returns {string}
*/
$.buildAddForm = function ( formObj ) {
return buildForm(formObj, 'box-success');
return buildForm(formObj, 'box-success', 'ajax-post');
};
/**
@ -17,16 +17,17 @@
* @returns {string}
*/
$.buildEditForm = function ( formObj ) {
return buildForm(formObj, 'box-warning');
return buildForm(formObj, 'box-warning', 'ajax-put');
};
/**
* 根据规则创建表单
* @param formObj 表单数据对象
* @param boxType box样式
* @param method 数据提交方式
* @returns {string}
*/
function buildForm( formObj, boxType ) {
function buildForm( formObj, boxType, method ) {
var formHtml = '<div class="box '+ boxType +'" id="formBox"><div class="box-body">';
formHtml += '<div class="box-header with-border"><h3 class="box-title">新增菜单</h3></div>';
formHtml += '<form id="'+ formObj.formAttr.formId +'" action="'+ formObj.formAttr.target +'"><div class="box-body">';
@ -41,14 +42,41 @@
case 'radio':
formHtml += buildRadio(value);
break;
case 'hidden':
formHtml += buildHidden(value);
break;
case 'checkbox':
formHtml += buildCheckbox(value);
break;
}
});
formHtml += '</div><div class="box-footer">';
formHtml += '<button type="submit" target-form="'+ formObj.formAttr.formId +'" class="btn btn-primary ajax-post">确认提交</button>';
formHtml += '<button type="submit" target-form="'+ formObj.formAttr.formId +'" class="btn btn-primary '+ method +'">确认提交</button>';
formHtml += ' <a class="btn btn-default refresh" url="'+ formObj.formAttr.backUrl +'" >放弃返回</a></div></form></div></div>';
return formHtml;
}
function buildCheckbox( checkboxObj ) {
var formHtml = '<div>';
formHtml += '<div class="col-xs-8 form-group"><label>'+ checkboxObj.info +'</label>';
formHtml += '<div class="input-group radio">';
if( checkboxObj.attr ){
$.each(checkboxObj.attr, function (index, value) {
if( value.value ){
formHtml += '<input type="checkbox" checked name="'+ value.name +'"> '+ value.desc +' ';
}else{
formHtml += '<input type="checkbox" name="'+ value.name +'"> '+ value.desc +' ';
}
});
}
formHtml += '</div>';
if( checkboxObj.description ){
formHtml += ' <div class="col-xs-4 form-group" style="margin-top: 30px"><span class="label label-info">'+ checkboxObj.description +'</span></div>';
}
formHtml += '</div></div>';
return formHtml;
}
/**
* 创建文本框
* @param inputObj
@ -96,6 +124,15 @@
formHtml += '</div></div>';
return formHtml;
}
/**
* 创建隐藏表单
* @param hiddenObj
* @returns {string}
*/
function buildHidden( hiddenObj ) {
return '<input type="hidden" class="form-control" value="'+ hiddenObj.attr.value +'" name="'+ hiddenObj.attr.name +'">';
}
function buildTextarea( textareaObj ) {

View File

@ -81,7 +81,7 @@
}else{
if( tableObj.typeRule[fieldName] ){
var rule = tableObj.typeRule[fieldName];
var styleList ,detailInfo;
var styleList ,detailInfo, classAttr = '';
switch (rule.module){
case 'label':
if( rule.rule[dataValue[fieldName]] ){
@ -96,11 +96,22 @@
styleList = rule.rule;
detailInfo = prepareInfo( styleList, dataValue, fieldName);
paramStr = prepareParamStr( styleList, dataValue );
dataListHtml += '<td><a url="'+styleList['href']+'" data="'+paramStr+'">' + detailInfo + '</a></td>';
if( styleList['class'] ){
classAttr = 'class="'+ styleList['class'] +'"';
}
dataListHtml += '<td><a '+ classAttr +' url="'+styleList['href']+'" data="'+paramStr+'">' + detailInfo + '</a></td>';
break;
case 'date':
dataListHtml += '<td>' + $.formatDate(dataValue[fieldName]) + '</td>';
break;
case 'icon':
if( rule.rule[dataValue[fieldName]] ){
styleList = rule.rule[dataValue[fieldName]];
dataListHtml += '<td><i class="'+styleList['class']+'"></i></td>';
}else{
dataListHtml += '<td style="color:red;">' + dataValue[fieldName] + '</td>';
}
break;
}
}else{
dataListHtml += '<td>' + dataValue[fieldName] + '</td>';