新增组合数据编辑和添加select,修复之前多个选择冲突

This commit is contained in:
sugar1569 2018-10-09 09:28:59 +08:00
parent 89d74a3ca6
commit 0884b466c8
7 changed files with 288 additions and 75 deletions

View File

@ -174,7 +174,7 @@ class SystemAdmin extends AuthController
/** /**
* 个人资料 展示 * 个人资料 展示
* */ * */
public function adminInfo(){ public function admininfo(){
$adminInfo = $this->adminInfo;//获取当前登录的管理员 $adminInfo = $this->adminInfo;//获取当前登录的管理员
$this->assign('adminInfo',$adminInfo); $this->assign('adminInfo',$adminInfo);
return $this->fetch(); return $this->fetch();

View File

@ -57,6 +57,7 @@ class SystemGroup extends AuthController
public function save(Request $request) public function save(Request $request)
{ {
$params = Util::postMore([ $params = Util::postMore([
['id',''],
['name',''], ['name',''],
['config_name',''], ['config_name',''],
['info',''], ['info',''],
@ -66,7 +67,10 @@ class SystemGroup extends AuthController
//数据组名称判断 //数据组名称判断
if(!$params['name'])return Json::fail('请输入数据组名称!'); if(!$params['name'])return Json::fail('请输入数据组名称!');
if(!$params['config_name'])return Json::fail('请输入配置名称!'); if(!$params['config_name'])return Json::fail('请输入配置名称!');
if(GroupModel::be($params['config_name'],'config_name')) return Json::fail('数据关键字已存在!'); //判断ID是否存在存在就是编辑不存在就是添加
if(!$params['id']){
if(GroupModel::be($params['config_name'],'config_name')) return Json::fail('数据关键字已存在!');
}
$data["name"] = $params['name']; $data["name"] = $params['name'];
$data["config_name"] = $params['config_name']; $data["config_name"] = $params['config_name'];
$data["info"] = $params['info']; $data["info"] = $params['info'];
@ -85,9 +89,36 @@ class SystemGroup extends AuthController
} }
} }
$data["fields"] = json_encode($data["fields"]); $data["fields"] = json_encode($data["fields"]);
GroupModel::set($data); //判断ID是否存在存在就是编辑不存在就是添加
return Json::successful('添加数据组成功!'); if(!$params['id']) {
GroupModel::set($data);
return Json::successful('添加数据组成功!');
}else{
GroupModel::edit($data,$params['id']);
return Json::successful('编辑数据组成功!');
}
} }
/**编辑数组
* @param $id
*/
public function edit($id)
{
$Groupinfo = GroupModel::get($id);
$fields = json_decode($Groupinfo['fields'],true);
$typelist = [];
foreach ($fields as $key => $v){
$typelist[$key]['name']['value'] = $v['name'];
$typelist[$key]['title']['value'] = $v['title'];
$typelist[$key]['type']['value'] = $v['type'];
$typelist[$key]['param']['value'] = $v['param'];
}
$Groupinfo['fields'] = json_encode($typelist);
$this->assign(compact('Groupinfo'));
$this->assign(['title'=>'添加数据组','save'=>Url::build('save')]);
return $this->fetch();
}
/** /**
* 删除指定资源 * 删除指定资源
* *

View File

@ -46,32 +46,52 @@ class SystemGroupData extends AuthController
$Fields = GroupModel::getField($gid); $Fields = GroupModel::getField($gid);
$f = array(); $f = array();
foreach ($Fields["fields"] as $key => $value) { foreach ($Fields["fields"] as $key => $value) {
if($value["type"] == "input") $info = [];
$f[] = Form::input($value["title"],$value["name"]); if(!empty($value["param"])){
else if($value["type"] == "textarea") $value["param"] = str_replace("\r\n","\n",$value["param"]);//防止不兼容
$f[] = Form::input($value["title"],$value["name"])->type('textarea')->placeholder($value['param']); $params = explode("\n",$value["param"]);
else if($value["type"] == "radio") { if(is_array($params) && !empty($params)){
$params = explode("-", $value["param"]); foreach ($params as $index => $v) {
foreach ($params as $index => $param) { $vl = explode('=',$v);
$info[$index]["value"] = $param; if(!empty($vl[0]) && !empty($vl[1])){
$info[$index]["label"] = $param; $info[$index]["value"] = $vl[0];
$info[$index]["label"] = $vl[1];
}
}
} }
$f[] = Form::radio($value["title"],$value["name"],$info[0]["value"])->options($info); }
}else if($value["type"] == "checkbox"){
$params = explode("-",$value["param"]); switch ($value["type"]){
foreach ($params as $index => $param) { case 'input':
$info[$index]["value"] = $param; $f[] = Form::input($value["title"],$value["name"]);
$info[$index]["label"] = $param; break;
} case 'textarea':
$f[] = Form::checkbox($value["title"],$value["name"],$info[0])->options($info); $f[] = Form::input($value["title"],$value["name"])->type('textarea')->placeholder($value['param']);
}else if($value["type"] == "upload") break;
$f[] = Form::frameImageOne($value["title"],$value["name"],Url::build('admin/widget.images/index',array('fodder'=>$value["title"])))->icon('image'); case 'radio':
else if($value['type'] == 'uploads') $f[] = Form::radio($value["title"],$value["name"],$info[0]["value"])->options($info);
$f[] = Form::frameImages($value["title"],$value["name"],Url::build('admin/widget.images/index',array('fodder'=>$value["title"])))->maxLength(5)->icon('images')->width('100%')->height('550px')->spin(0); break;
case 'checkbox':
$f[] = Form::checkbox($value["title"],$value["name"],$info[0])->options($info);
break;
case 'select':
$f[] = Form::select($value["title"],$value["name"],$info[0])->options($info)->multiple(false);
break;
case 'upload':
$f[] = Form::frameImageOne($value["title"],$value["name"],Url::build('admin/widget.images/index',array('fodder'=>$value["title"])))->icon('image');
break;
case 'uploads':
$f[] = Form::frameImages($value["title"],$value["name"],Url::build('admin/widget.images/index',array('fodder'=>$value["title"])))->maxLength(5)->icon('images')->width('100%')->height('550px')->spin(0);
break;
default:
$f[] = Form::input($value["title"],$value["name"]);
break;
}
} }
$f[] = Form::number('sort','排序',1); $f[] = Form::number('sort','排序',1);
$f[] = Form::radio('status','状态',1)->options([['value'=>1,'label'=>'显示'],['value'=>2,'label'=>'隐藏']]); $f[] = Form::radio('status','状态',1)->options([['value'=>1,'label'=>'显示'],['value'=>2,'label'=>'隐藏']]);
$form = Form::make_post_form('添加数据',$f,Url::build('save',compact('gid'))); $form = Form::make_post_form('添加数据',$f,Url::build('save',compact('gid')),2);
$this->assign(compact('form')); $this->assign(compact('form'));
return $this->fetch('public/form-builder'); return $this->fetch('public/form-builder');
} }
@ -127,36 +147,59 @@ class SystemGroupData extends AuthController
$GroupDataValue = json_decode($GroupData["value"],true); $GroupDataValue = json_decode($GroupData["value"],true);
$Fields = GroupModel::getField($gid); $Fields = GroupModel::getField($gid);
$f = array(); $f = array();
foreach ($Fields["fields"] as $key => $value) { foreach ($Fields['fields'] as $key => $value) {
if($value["type"] == "input") $f[] = Form::input($value["title"],$value["name"],$GroupDataValue[$value["title"]]["value"]); $info = [];
if($value["type"] == "textarea") $f[] = Form::input($value["title"],$value["name"],$GroupDataValue[$value["title"]]["value"])->type('textarea'); if(!empty($value["param"])){
if($value["type"] == "radio"){ $value["param"] = str_replace("\r\n","\n",$value["param"]);//防止不兼容
$params = explode("-",$value["param"]); $params = explode("\n",$value["param"]);
foreach ($params as $index => $param) { if(is_array($params) && !empty($params)){
$info[$index]["value"] = $param; foreach ($params as $index => $v) {
$info[$index]["label"] = $param; $vl = explode('=',$v);
if(!empty($vl[0]) && !empty($vl[1])){
$info[$index]["value"] = $vl[0];
$info[$index]["label"] = $vl[1];
}
}
} }
$f[] = Form::radio($value["title"],$value["name"],$GroupDataValue[$value["title"]]["value"])->options($info);
} }
if($value["type"] == "checkbox"){ switch ($value['type']){
$params = explode("-",$value["param"]); case 'input':
foreach ($params as $index => $param) { $f[] = Form::input($value['title'],$value['name'],$GroupDataValue[$value['title']]['value']);
$info[$index]["value"] = $param; break;
$info[$index]["label"] = $param; case 'textarea':
} $f[] = Form::input($value['title'],$value['name'],$GroupDataValue[$value['title']]['value'])->type('textarea');
$f[] = Form::checkbox($value["title"],$value["name"],$GroupDataValue[$value["title"]]["value"])->options($info); break;
} case 'radio':
if($value["type"] == "upload"){
$image = is_string($GroupDataValue[$value["title"]]["value"])?$GroupDataValue[$value["title"]]["value"]:$GroupDataValue[$value["title"]]["value"][0]; $f[] = Form::radio($value['title'],$value['name'],$GroupDataValue[$value['title']]['value'])->options($info);
$f[] = Form::frameImageOne($value["title"],$value["name"],Url::build('admin/widget.images/index',array('fodder'=>$value["title"])),$image)->icon('image'); break;
} case 'checkbox':
else if($value['type'] == 'uploads') { $f[] = Form::checkbox($value['title'],$value['name'],$GroupDataValue[$value['title']]['value'])->options($info);
$f[] = Form::frameImages($value["title"], $value["name"], Url::build('admin/widget.images/index', array('fodder' => $value["title"])), $GroupDataValue[$value["title"]]["value"])->maxLength(5)->icon('images')->width('100%')->height('550px')->spin(0); break;
case 'upload':
if(!empty($GroupDataValue[$value['title']]['value'])){
$image = is_string($GroupDataValue[$value['title']]['value']) ? $GroupDataValue[$value['title']]['value'] : $GroupDataValue[$value['title']]['value'][0];
}else{
$image = '';
}
$f[] = Form::frameImageOne($value['title'],$value['name'],Url::build('admin/widget.images/index',array('fodder'=>$value['title'])),$image)->icon('image');
break;
case 'uploads':
$images = !empty($GroupDataValue[$value['title']]['value']) ? $GroupDataValue[$value['title']]['value']:[];
$f[] = Form::frameImages($value['title'],$value['name'],Url::build('admin/widget.images/index', array('fodder' => $value['title'])),$images)->maxLength(5)->icon('images')->width('100%')->height('550px')->spin(0);
break;
case 'select':
$f[] = Form::select($value['title'],$value['name'],$GroupDataValue[$value['title']]['value'])->setOptions($info);
break;
default:
$f[] = Form::input($value['title'],$value['name'],$GroupDataValue[$value['title']]['value']);
break;
} }
} }
$f[] = Form::input('sort','排序',$GroupData["sort"]); $f[] = Form::input('sort','排序',$GroupData["sort"]);
$f[] = Form::radio('status','状态',$GroupData["status"])->options([['value'=>1,'label'=>'显示'],['value'=>2,'label'=>'隐藏']]); $f[] = Form::radio('status','状态',$GroupData["status"])->options([['value'=>1,'label'=>'显示'],['value'=>2,'label'=>'隐藏']]);
$form = Form::make_post_form('添加用户通知',$f,Url::build('update',compact('id'))); $form = Form::make_post_form('添加用户通知',$f,Url::build('update',compact('id')),2);
$this->assign(compact('form')); $this->assign(compact('form'));
return $this->fetch('public/form-builder'); return $this->fetch('public/form-builder');
} }

View File

@ -17,38 +17,48 @@
<i-input v-model="formData.info" placeholder="请输入数据组简介"></i-input> <i-input v-model="formData.info" placeholder="请输入数据组简介"></i-input>
</Form-Item> </Form-Item>
<Form-Item v-for="(item, index) in formData.typelist" :label="'字段' + (index+1)"> <Form-Item v-for="(item, index) in formData.typelist" :label="'字段' + (index+1)">
<row ref="typelist"> <row type="flex" ref="typelist" align="middle">
<i-col span="5"> <i-col span="10">
<Form-Item> <row>
<i-input :placeholder="item.name.placeholder" v-model="item.name.value"></i-input> <i-col span="23">
</Form-Item> <Form-Item>
<i-input :placeholder="item.name.placeholder" v-model="item.name.value"></i-input>
</Form-Item>
</i-col>
</row>
<row>
<i-col span="23">
<Form-Item>
<i-input :placeholder="item.title.placeholder" v-model="item.title.value"></i-input>
</Form-Item>
</i-col>
</row>
<row>
<i-col span="23">
<Form-Item>
<i-select :placeholder="item.type.placeholder" v-model="item.type.value">
<i-option value="input">文本框</i-option>
<i-option value="textarea">多行文本框</i-option>
<i-option value="radio">单选框</i-option>
<i-option value="checkbox">多选框</i-option>
<i-option value="select">下拉选择</i-option>
<i-option value="upload">单文件上传</i-option>
<i-option value="uploads">多文件上传</i-option>
</i-select>
</Form-Item>
</i-col>
</row>
</i-col> </i-col>
<i-col span="5"> <i-col span="12">
<Form-Item> <Form-Item>
<i-input :placeholder="item.title.placeholder" v-model="item.title.value"></i-input> <i-input type="textarea" rows="4" :placeholder="item.param.placeholder" v-model="item.param.value"></i-input>
</Form-Item>
</i-col>
<i-col span="5">
<Form-Item>
<i-select :placeholder="item.type.placeholder" v-model="item.type.value">
<i-option value="input">文本框</i-option>
<i-option value="textarea">多行文本框</i-option>
<i-option value="radio">单选框</i-option>
<i-option value="checkbox">多选框</i-option>
<i-option value="upload">单文件上传</i-option>
<i-option value="uploads">多文件上传</i-option>
</i-select>
</Form-Item>
</i-col>
<i-col span="7">
<Form-Item>
<i-input :placeholder="item.param.placeholder" v-model="item.param.value"></i-input>
</Form-Item> </Form-Item>
</i-col> </i-col>
<i-col span="2" style="display:inline-block; text-align:right;"> <i-col span="2" style="display:inline-block; text-align:right;">
<i-button type="primary" icon="close-round" @click="removeType(index)"></i-button> <i-button type="primary" icon="close-round" @click="removeType(index)"></i-button>
</i-col> </i-col>
</row> </row>
</row>
</Form-Item> </Form-Item>
<Form-Item><i-button type="primary" @click="addType">添加字段</i-button></Form-Item> <Form-Item><i-button type="primary" @click="addType">添加字段</i-button></Form-Item>
<Form-Item :class="'add-submit-item'"> <Form-Item :class="'add-submit-item'">
@ -85,7 +95,7 @@
value: '' value: ''
}, },
param: { param: {
placeholder: "字段参数男-女", placeholder: "参数方式例如:\n1=白色\n2=红色\n3=黑色",
value: '' value: ''
} }
}) })

View File

@ -0,0 +1,126 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
{include file="public/head"}
<title>{$title}</title>
</head>
<body>
<div id="form-add" class="mp-form" v-cloak="">
<i-Form :model="formData" :label-width="80" >
<i-input v-model="formData.id" type="hidden" placeholder="请输入数据组名称"></i-input>
<Form-Item label="数据组名称">
<i-input v-model="formData.name" placeholder="请输入数据组名称"></i-input>
</Form-Item>
<Form-Item label="数据字段">
<i-input v-model="formData.config_name" placeholder="请输入数据字段例如site_url"></i-input>
</Form-Item>
<Form-Item label="数据组简介">
<i-input v-model="formData.info" placeholder="请输入数据组简介"></i-input>
</Form-Item>
<Form-Item v-for="(item, index) in formData.typelist" :label="'字段' + (index+1)">
<row type="flex" ref="typelist" align="middle">
<i-col span="10">
<row>
<i-col span="23">
<Form-Item>
<i-input :placeholder="item.name.placeholder" v-model="item.name.value"></i-input>
</Form-Item>
</i-col>
</row>
<row>
<i-col span="23">
<Form-Item>
<i-input :placeholder="item.title.placeholder" v-model="item.title.value"></i-input>
</Form-Item>
</i-col>
</row>
<row>
<i-col span="23">
<Form-Item>
<i-select :placeholder="item.type.placeholder" v-model="item.type.value">
<i-option value="input">文本框</i-option>
<i-option value="textarea">多行文本框</i-option>
<i-option value="radio">单选框</i-option>
<i-option value="checkbox">多选框</i-option>
<i-option value="select">下拉选择</i-option>
<i-option value="upload">单文件上传</i-option>
<i-option value="uploads">多文件上传</i-option>
</i-select>
</Form-Item>
</i-col>
</row>
</i-col>
<i-col span="12">
<Form-Item>
<i-input type="textarea" rows="4" :placeholder="item.param.placeholder" v-model="item.param.value"></i-input>
</Form-Item>
</i-col>
<i-col span="2" style="display:inline-block; text-align:right;">
<i-button type="primary" icon="close-round" @click="removeType(index)"></i-button>
</i-col>
</row>
</row>
</Form-Item>
<Form-Item><i-button type="primary" @click="addType">添加字段</i-button></Form-Item>
<Form-Item :class="'add-submit-item'">
<i-Button :type="'primary'" :html-type="'submit'" :size="'large'" :long="true" @click.prevent="submit">提交</i-Button>
</Form-Item>
</i-Form>
</div>
<script>
$eb = parent._mpApi;
mpFrame.start(function(Vue){
new Vue({
el:"#form-add",
data:{
formData:{
id: '{$Groupinfo.id}',
name: '{$Groupinfo.name}',
config_name: '{$Groupinfo.config_name}',
typelist: {$Groupinfo.fields},
info:'{$Groupinfo.info}'
}
},
methods:{
addType: function(){
this.formData.typelist.push({
name: {
placeholder: "字段名称:姓名",
value: ''
},
title: {
placeholder: "字段配置名name",
value: ''
},
type: {
placeholder: "字段类型",
value: ''
},
param: {
placeholder: "参数方式例如:\n1=白色\n2=红色\n3=黑色",
value: ''
}
})
},
removeType: function(index){
this.formData.typelist.splice(index,1);
},
submit: function(){
$eb.axios.post("{$save}",this.formData).then((res)=>{
if(res.status && res.data.code == 200)
return Promise.resolve(res.data);
else
return Promise.reject(res.data.msg || '添加失败,请稍候再试!');
}).then((res)=>{
$eb.message('success',res.msg || '操作成功!');
$eb.closeModalFrame(window.name);
}).catch((err)=>{
this.loading=false;
$eb.message('error',err);
});
}
}
});
});
</script>
</body>

View File

@ -60,6 +60,7 @@
</td> </td>
<td class="text-center"> <td class="text-center">
<a class="btn btn-info btn-xs" href="{:Url('setting.systemGroupData/index',array('gid'=>$vo['id']))}"><i class="fa fa-paste"></i> 数据列表</a> <a class="btn btn-info btn-xs" href="{:Url('setting.systemGroupData/index',array('gid'=>$vo['id']))}"><i class="fa fa-paste"></i> 数据列表</a>
<button class="btn btn-info btn-xs" onclick="$eb.createModalFrame(this.innerText,'{:Url('edit',array('id'=>$vo['id']))}')" ><i class="fa fa-paste"></i> 编辑</button>
<button class="btn btn-warning btn-xs" data-url="{:Url('delete',array('id'=>$vo['id']))}" type="button"><i class="fa fa-warning"></i> 删除</button> <button class="btn btn-warning btn-xs" data-url="{:Url('delete',array('id'=>$vo['id']))}" type="button"><i class="fa fa-warning"></i> 删除</button>
</td> </td>
</tr> </tr>

View File

@ -60,7 +60,9 @@
</td> </td>
{volist name="fields" id="item"} {volist name="fields" id="item"}
<td class="text-center"> <td class="text-center">
{notempty name="$vo.value[$item['title']]['value']"}
{$vo.value[$item['title']]['value']} {$vo.value[$item['title']]['value']}
{/notempty}
</td> </td>
{/volist} {/volist}
<td class="text-center"> <td class="text-center">