Просмотр исходного кода

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

sugar1569 7 лет назад
Родитель
Сommit
0884b466c8

+ 1 - 1
application/admin/controller/setting/SystemAdmin.php

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

+ 34 - 3
application/admin/controller/setting/SystemGroup.php

@@ -57,6 +57,7 @@ class SystemGroup extends AuthController
     public function save(Request $request)
     {
         $params = Util::postMore([
+            ['id',''],
             ['name',''],
             ['config_name',''],
             ['info',''],
@@ -66,7 +67,10 @@ class SystemGroup extends AuthController
         //数据组名称判断
         if(!$params['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["config_name"] = $params['config_name'];
         $data["info"] = $params['info'];
@@ -85,9 +89,36 @@ class SystemGroup extends AuthController
             }
         }
         $data["fields"] = json_encode($data["fields"]);
-        GroupModel::set($data);
-        return Json::successful('添加数据组成功!');
+        //判断ID是否存在,存在就是编辑,不存在就是添加
+        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();
     }
+
     /**
      * 删除指定资源
      *

+ 89 - 46
application/admin/controller/setting/SystemGroupData.php

@@ -46,32 +46,52 @@ class SystemGroupData extends AuthController
         $Fields = GroupModel::getField($gid);
         $f = array();
         foreach ($Fields["fields"] as $key => $value) {
-            if($value["type"] == "input")
-                $f[] = Form::input($value["title"],$value["name"]);
-            else if($value["type"] == "textarea")
-                $f[] = Form::input($value["title"],$value["name"])->type('textarea')->placeholder($value['param']);
-            else if($value["type"] == "radio") {
-                $params = explode("-", $value["param"]);
-                foreach ($params as $index => $param) {
-                    $info[$index]["value"] = $param;
-                    $info[$index]["label"] = $param;
-                }
-                $f[] = Form::radio($value["title"],$value["name"],$info[0]["value"])->options($info);
-            }else if($value["type"] == "checkbox"){
-                $params = explode("-",$value["param"]);
-                foreach ($params as $index => $param) {
-                    $info[$index]["value"] = $param;
-                    $info[$index]["label"] = $param;
+            $info = [];
+            if(!empty($value["param"])){
+                $value["param"] = str_replace("\r\n","\n",$value["param"]);//防止不兼容
+                $params = explode("\n",$value["param"]);
+                if(is_array($params) && !empty($params)){
+                    foreach ($params as $index => $v) {
+                        $vl = explode('=',$v);
+                        if(!empty($vl[0]) && !empty($vl[1])){
+                            $info[$index]["value"] = $vl[0];
+                            $info[$index]["label"] = $vl[1];
+                        }
+                    }
                 }
-                $f[] = Form::checkbox($value["title"],$value["name"],$info[0])->options($info);
-            }else if($value["type"] == "upload")
-                $f[] = Form::frameImageOne($value["title"],$value["name"],Url::build('admin/widget.images/index',array('fodder'=>$value["title"])))->icon('image');
-            else if($value['type'] == '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);
+            }
+
+            switch ($value["type"]){
+                case 'input':
+                    $f[] = Form::input($value["title"],$value["name"]);
+                    break;
+                case 'textarea':
+                    $f[] = Form::input($value["title"],$value["name"])->type('textarea')->placeholder($value['param']);
+                    break;
+                case 'radio':
+                    $f[] = Form::radio($value["title"],$value["name"],$info[0]["value"])->options($info);
+                    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::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'));
         return $this->fetch('public/form-builder');
     }
@@ -127,36 +147,59 @@ class SystemGroupData extends AuthController
         $GroupDataValue = json_decode($GroupData["value"],true);
         $Fields = GroupModel::getField($gid);
         $f = array();
-        foreach ($Fields["fields"] as $key => $value) {
-            if($value["type"] == "input") $f[] = Form::input($value["title"],$value["name"],$GroupDataValue[$value["title"]]["value"]);
-            if($value["type"] == "textarea") $f[] = Form::input($value["title"],$value["name"],$GroupDataValue[$value["title"]]["value"])->type('textarea');
-            if($value["type"] == "radio"){
-                $params = explode("-",$value["param"]);
-                foreach ($params as $index => $param) {
-                    $info[$index]["value"] = $param;
-                    $info[$index]["label"] = $param;
-                }
-                $f[] = Form::radio($value["title"],$value["name"],$GroupDataValue[$value["title"]]["value"])->options($info);
-            }
-            if($value["type"] == "checkbox"){
-                $params = explode("-",$value["param"]);
-                foreach ($params as $index => $param) {
-                    $info[$index]["value"] = $param;
-                    $info[$index]["label"] = $param;
+        foreach ($Fields['fields'] as $key => $value) {
+            $info = [];
+            if(!empty($value["param"])){
+                $value["param"] = str_replace("\r\n","\n",$value["param"]);//防止不兼容
+                $params = explode("\n",$value["param"]);
+                if(is_array($params) && !empty($params)){
+                    foreach ($params as $index => $v) {
+                        $vl = explode('=',$v);
+                        if(!empty($vl[0]) && !empty($vl[1])){
+                            $info[$index]["value"] = $vl[0];
+                            $info[$index]["label"] = $vl[1];
+                        }
+                    }
                 }
-                $f[] = Form::checkbox($value["title"],$value["name"],$GroupDataValue[$value["title"]]["value"])->options($info);
             }
-            if($value["type"] == "upload"){
-               $image = is_string($GroupDataValue[$value["title"]]["value"])?$GroupDataValue[$value["title"]]["value"]:$GroupDataValue[$value["title"]]["value"][0];
-                $f[] = Form::frameImageOne($value["title"],$value["name"],Url::build('admin/widget.images/index',array('fodder'=>$value["title"])),$image)->icon('image');
-            }
-            else if($value['type'] == 'uploads') {
-                $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);
+            switch ($value['type']){
+                case 'input':
+                    $f[] = Form::input($value['title'],$value['name'],$GroupDataValue[$value['title']]['value']);
+                    break;
+                case 'textarea':
+                    $f[] = Form::input($value['title'],$value['name'],$GroupDataValue[$value['title']]['value'])->type('textarea');
+                    break;
+                case 'radio':
+
+                    $f[] = Form::radio($value['title'],$value['name'],$GroupDataValue[$value['title']]['value'])->options($info);
+                    break;
+                 case 'checkbox':
+                     $f[] = Form::checkbox($value['title'],$value['name'],$GroupDataValue[$value['title']]['value'])->options($info);
+                    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::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'));
         return $this->fetch('public/form-builder');
     }

+ 35 - 25
application/admin/view/setting/system_group/create.php

@@ -17,38 +17,48 @@
             <i-input v-model="formData.info" placeholder="请输入数据组简介"></i-input>
         </Form-Item>
         <Form-Item v-for="(item, index) in formData.typelist" :label="'字段' + (index+1)">
-            <row ref="typelist">
-                <i-col span="5">
-                    <Form-Item>
-                        <i-input :placeholder="item.name.placeholder" v-model="item.name.value"></i-input>
-                    </Form-Item>
-                </i-col>
-                <i-col span="5">
-                    <Form-Item>
-                        <i-input :placeholder="item.title.placeholder" v-model="item.title.value"></i-input>
-                    </Form-Item>
+            <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="5">
+                <i-col span="12">
                     <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>
+                        <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'">
@@ -85,7 +95,7 @@
                             value: ''
                         },
                         param: {
-                            placeholder: "字段参数男-女",
+                            placeholder: "参数方式例如:\n1=白色\n2=红色\n3=黑色",
                             value: ''
                         }
                     })

+ 126 - 0
application/admin/view/setting/system_group/edit.php

@@ -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>

+ 1 - 0
application/admin/view/setting/system_group/index.php

@@ -60,6 +60,7 @@
 							</td>
 							<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>
+								<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>
 							</td>
 						</tr>

+ 2 - 0
application/admin/view/setting/system_group_data/index.php

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