ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 增加文件 ~~~ application\common\field\images2 ~~~ ## 修改文件1 ~~~ application\common\field\Format.php #16行 ~~~ ~~~ if(in_array($rs['0'], ['select','checkbox','radio','checkboxtree','checkboxsons','checkboxtext','checkmarket','xmselect'])){ ~~~ ![](https://img.kancloud.cn/56/e6/56e67877fe710c702599181ad283973c_2128x992.png) ## 修改文件2 ~~~ application\common\field\Form.php ~~~ ~~~ elseif ($field['type'] == 'checkboxsons') { // 树状多选按钮 $static = config('view_replace_str.__STATIC__'); $_detail = is_array($info[$name])?$info[$name]:explode(',',$info[$name]); $_detail = json_encode($_detail); $detail = is_array($field['options']) ? getArray($field['options']) : str_array($field['options']); $detail=Tree::toLayer($detail); $detail=json_encode($detail); $show = "<div style='min-width:300px;'>$_show <div id='atc_{$name}{$key}' class=\"xm-select-demo\" style='min-width:200px;max-width:40%;'></div><div>"; $show .= fun('field@load_js','xmSelect')?"<script src='$static/oto/js/xm-select.js'></script>":''; $show .="<script> $(function(){ xmSelect.render({ el: '#atc_{$name}{$key}', name:'{$name}', initValue:{$_detail}, toolbar:{ show: false, }, prop:{ value:'id', children:'child', }, on:function(data){ }, autoRow: true, height: '300px', data:{$detail} }) }) </script>"; $field['about'] && $field['about'] = '<br>'.$field['about']; }elseif ($field['type'] == 'checkboxtext') { // 树状多选按钮 $static = config('view_replace_str.__STATIC__'); $_detail = json_decode($info[$name],true); $options = is_array($field['options']) ? getArray($field['options']) : str_array($field['options']); $show=''; foreach ($options as $v){ $show.='<div class="checkboxtext"><div class="checkbox"><input type="checkbox" title="'.$v['name'].'" lay-skin="primary" '.(empty($_detail[$v['key']])?'':' checked').' lay-filter="'.$name.'"></div>'; if($v['type']=='html'){ $attr=!empty($_detail[$v['key']])?'':' readonly="readonly" disabled="disabled"'; $show.=str_replace(['{$name}','{$value}','{$attr}'],[$name.'['.$v['key'].']',$_detail[$v['key']],$attr],$v['html']); }else if($v['type']=='text'){ $show.='<div><input type="text" name="'.$v['key'].'" value="">'.$v['unit'].'</div>'; } $show.='</div>'; } $show .="<script> $(function(){ layui.use(['form'], function(){ var form = layui.form; form.on('checkbox({$name})', function(data){ var item=$(data.othis).parents('.checkboxtext'); if(data.elem.checked==true){ $('input[type=\"text\"]',item).removeAttr('readonly disabled'); }else{ $('input[type=\"text\"]',item).attr({'readonly':true,'disabled':true}); } }); }); }) </script>"; $field['about'] && $field['about'] = '<br>'.$field['about']; }elseif ($field['type'] == 'xmselect') { // 树状多选按钮 $static = config('view_replace_str.__STATIC__'); $_detail = $info[$name]?$info[$name]:''; $detail = is_array($field['options']) ? json_encode($field['options']): $field['options']; $show = "<div style='min-width:300px;'>$_show <div id='atc_{$name}{$key}' class=\"xm-select-demo\" style='min-width:200px;max-width:40%;'></div><div>"; $show .= fun('field@load_js','xmSelect')?"<script src='$static/oto/js/xm-select.js'></script>":''; $show .="<script> $(function(){ var render=$.extend({ el: '#atc_{$name}{$key}', name:'{$name}', initValue:[{$_detail}], autoRow: true, height: '300px', },$detail); xmSelect.render(render); }); </script>"; $field['about'] && $field['about'] = '<br>'.$field['about']; }elseif ($field['type'] == 'checkmarket') { // 树状多选按钮 $static = config('view_replace_str.__STATIC__'); $_detail = json_decode($info[$name],true); $options = is_array($field['options']) ? getArray($field['options']) : str_array($field['options']); $options['key']=$name; $xmselect=[]; $marketModule=[ 'balance'=>'<div class="item checkboxtext"><div class="checkbox"><input type="checkbox" title="余额" {$checked} lay-skin="primary" lay-filter="'.$options['key'].'"></div><div class=""><span class="name">送</span><input type="text" name="{$name}" value="{$value}" data-key="{$key}[balance]" {$readonly}><span class="unit">元</span></div>{$append}</div>', 'integral'=>'<div class="item checkboxtext"><div class="checkbox"><input type="checkbox" title="积分" {$checked} lay-skin="primary" lay-filter="'.$options['key'].'"></div><div class=""><span class="name">送</span><input type="text" name="{$name}" value="{$value}" data-key="{$key}[integral]" {$readonly}><span class="unit">积分</span></div>{$append}</div>', 'growth'=>'<div class="item checkboxtext"><div class="checkbox"><input type="checkbox" title="成长值" {$checked} lay-skin="primary" lay-filter="'.$options['key'].'"></div><div class=""><span class="name">送</span><input type="text" name="{$name}" value="{$value}" data-key="{$key}[growth]" {$readonly}><span class="unit">成长值适用于此会员卡</span></div>{$append}</div>', 'coupon'=>'<div class="item checkboxtext"><div class="checkbox"><input type="checkbox" title="优惠券" {$checked} lay-skin="primary" lay-filter="'.$options['key'].'"></div><div class="">{$html}</div></div>', ]; $show='<div id="checkmarket-'.$options['key'].'" class="checkmarket">'; $si=0; if(!empty($options['limit']) && $options['limit']>1){ $show.='<div class="checkmarket-content">'; if(empty($_detail)){ $show.='<div class="checkmarket-item" id="checkmarket-item-0"><div class="btn-delete">删除</div>'; $oii=0; foreach ($options['option'] as $item){ $name=$options['key'].'['.$si.']['.$item['key'].']'; $attrKey=$options['key'].'[$i]['.$item['key'].']'; if($item['type']=='text'){ $show.='<dl class="checkmarket-dl" data-key="'.$item['key'].'"><dt>'.$item['name'].'</dt><dd><input type="text" name="'.$name.'" data-key="'.$attrKey.'" value=""><span class="unit">'.$item['unit'].'</span></dd></dl>'; }else if($item['type']=='market' && !empty($item['option'])){ $module=''; foreach ($item['option'] as $optionkey=>$optionValue){ if(is_array($optionValue)){ $xmselect[$optionkey][]=[ 'i'=>$oii, 'key'=>$optionkey, 'name'=>$name.'['.$optionkey.']', 'data'=>json_encode($optionValue), 'value'=>'', ]; $html = "<textarea class='xm-select-json' style='display: none'>".json_encode($optionValue)."</textarea><div class=\"xm-select-demo xm-select-{$options['key']}-{$oii}\" data-key=\"".$attrKey.'['.$optionkey.']'."\" style='min-width:200px;max-width:40%;'></div>"; $module.= str_replace(['{$html}'],[$html],$marketModule[$optionkey]); $oii++; unset($ooi); }else{ $module.= str_replace(['{$key}','{$name}','{$value}','{$checked}','{$readonly}','{$append}'],[$attrKey,$name.'['.$optionValue.']','','',''],$marketModule[$optionValue]); } } $show.='<dl class="checkmarket-dl"><dt>'.$item['name'].'</dt><dd>'.$module.'</dd></dl>'; unset($module); $si++; } } $show.='</div>'; }else{ $oii=0; foreach ($_detail as $dk=>$dv){ $show.='<div class="checkmarket-item" id="checkmarket-item-'.$dk.'"><div class="btn-delete">删除</div>'; foreach ($options['option'] as $item){ $name=$options['key'].'['.$si.']['.$item['key'].']'; $attrKey=$options['key'].'[$i]['.$item['key'].']'; if($item['type']=='text'){ $show.='<dl class="checkmarket-dl" data-key="'.$item['key'].'"><dt>'.$item['name'].'</dt><dd><input type="text" name="'.$name.'" data-key="'.$attrKey.'" value="'.(empty($dv[$item['key']])?'':$dv[$item['key']]).'"><span class="unit">'.$item['unit'].'</span></dd></dl>'; }else if($item['type']=='market' && !empty($item['option'])){ $module=''; foreach ($item['option'] as $optionkey=>$optionValue){ if(is_array($optionValue)){ $value=empty($dv[$item['key']][$optionkey])?'':$dv[$item['key']][$optionkey]; $xmselect[$optionkey][]=[ 'i'=>$oii, 'key'=>$optionkey, 'name'=>$name.'['.$optionkey.']', 'data'=>json_encode($optionValue), 'value'=>$value ]; $checked=empty($value)?'':' checked'; $html = "<textarea class='xm-select-json' style='display: none'>".json_encode($optionValue)."</textarea><div class=\"xm-select-demo xm-select-{$options['key']}-{$oii}\" data-key=\"".$attrKey.'['.$optionkey.']'."\" style='min-width:200px;max-width:40%;'></div>"; $module.= str_replace(['{$html}','{$checked}'],[$html,$checked],$marketModule[$optionkey]); $oii++; unset($ooi); }else{ $value=empty($dv[$item['key']][$optionValue])?'':$dv[$item['key']][$optionValue]; $checked=$value?' checked':''; $readonly=$value?'':' readonly="readonly"'; $module.= str_replace(['{$key}','{$name}','{$value}','{$checked}','{$readonly}','{$append}'],[$attrKey,$name.'['.$optionValue.']',$value,$checked,$readonly,''],$marketModule[$optionValue]); } } $show.='<dl class="checkmarket-dl"><dt>'.$item['name'].'</dt><dd>'.$module.'</dd></dl>'; unset($module); } } $show.='</div>'; $si++; } } $show.='</div><div class="checkmarket-title"><span class="checkmarket-add layui-btn">'.$options['title'].'</span></div>'; $show.="\r\n"; $xmSelectRender=''; if(!empty($xmselect)){ foreach ($xmselect as $xmItme){ foreach ($xmItme as $xmKey=>$xmVal){ $xmSelectRender.="xmSelect.render({ el: '.xm-select-{$options['key']}-{$xmVal['i']}', name:'{$xmVal['name']}', initValue:[{$xmVal['value']}], toolbar:{show: false}, prop:{value:'id',children:'child'}, on:function(data){}, clickClose:true, autoRow: true, height: '300px', data:{$xmVal['data']} });"; } } } $show.="<script> function eachCheckmarketName{$options['key']}(){ $('#checkmarket-{$options['key']} .checkmarket-item').each(function (i, item) { $('input[data-key]', item).each(function (j, input) { $(input).attr('name', $(input).attr('data-key').replace('\$i',i)); }); $('.xm-select-demo[data-key]', item).each(function (j, xmselect) { $('input.xm-select-default',xmselect).attr('name', $(xmselect).attr('data-key').replace('\$i',i)); }); }); } $(function(){ layui.use(['form'], function(){ var form = layui.form; form.on('checkbox({$options['key']})', function(data){ var item=$(data.othis).parents('.checkboxtext'); if(data.elem.checked==true){ $('input[type=\"text\"]',item).removeAttr('readonly disabled'); }else{ $('input[type=\"text\"]',item).attr({'readonly':true,'disabled':true}); } }); {$xmSelectRender} //添加 $('#checkmarket-{$options['key']} .checkmarket-add').click(function(){ var size=$('#checkmarket-{$options['key']} .checkmarket-item').size(); if(size>={$options['limit']}){ layer.msg('最多添加{$options['limit']}个'); return false; } var block=$('#checkmarket-{$options['key']} .checkmarket-item:first').clone().attr('id','checkmarket-item-'+size); var xmselectdemo=block.find('.xm-select-demo'); xmselectdemo.attr('id','xm-select-item-'+size); block.appendTo('#checkmarket-{$options['key']} .checkmarket-content'); xmSelect.render({ el: '#xm-select-item-'+size, name:xmselectdemo.attr('data-key'), toolbar:{show: false}, prop:{value:'id',children:'child'}, on:function(data){}, clickClose:true, autoRow: true, height: '300px', data:JSON.parse(block.find('.xm-select-json').val()), }); eachCheckmarketName{$options['key']}(); //重载 form.render('checkbox'); //xmSelect.render(); }); //删除 $('#checkmarket-{$options['key']}').on('click','.btn-delete',function(){ if($('#checkmarket-{$options['key']} .checkmarket-item').size()<=1){ layer.msg('最少保留一个'); }else{ $(this).parent().remove(); eachCheckmarketName{$options['key']}(); } }); }); }) </script>"; }else{ $module=''; $oii=0; $xmselect=[]; if(empty($_detail)){ foreach ($options as $optionkey=>$optionValue){ if(is_numeric($optionkey)){ if(is_array($optionValue)){ $name=$options['key'].'['.$optionValue['key'].']'; $attrKey=$options['key'].'['.$optionValue['key'].']'; if($optionValue['type']=='text'){ $show.='<dl class="checkmarket-dl" data-key="'.$optionValue['key'].'"><dt>'.$optionValue['name'].'</dt><dd><input type="text" name="'.$name.'" data-key="'.$attrKey.'" value=""><span class="unit">'.$optionValue['unit'].'</span></dd></dl>'; }else if($optionValue['type']=='market' && !empty($optionValue['option'])){ $module=''; foreach ($optionValue['option'] as $optionkeyItem=>$optionValueItem){ if(is_numeric($optionkeyItem)){ }else{ if(is_array($optionValueItem)){ $xmselect[$optionkeyItem]=[ 'i'=>$oii, 'key'=>$optionkeyItem, 'name'=>$name.'['.$optionkeyItem.']', 'data'=>json_encode($optionValueItem), 'value'=>'', ]; $html = "<textarea class='xm-select-json' style='display: none'>".json_encode($optionValueItem)."</textarea><div class=\"xm-select-demo xm-select-{$options['key']}-{$oii}\" data-key=\"".$attrKey.'['.$optionkeyItem.']'."\" style='min-width:200px;max-width:40%;'></div>"; $module.= str_replace(['{$html}'],[$html],$marketModule[$optionkeyItem]); $oii++; unset($ooi); }else{ $optionValueItem= str_replace(['{$key}','{$name}','{$value}'],[$options['key'],$name.'['.$optionkeyItem.'][]',''],$optionValueItem); $module.= str_replace(['{$key}','{$name}','{$value}','{$append}'],[$options['key'],$name.'['.$optionkeyItem.'][]','',$optionValueItem],$marketModule[$optionkeyItem]); } } } $show.='<dl class="checkmarket-dl"><dt>'.$optionValue['name'].'</dt><dd>'.$module.'</dd></dl>'; unset($module); $si++; } }else{ $module.= str_replace(['{$key}','{$name}','{$value}','{$append}'],[$options['key'],$options['key'].'['.$optionValue.']','',''],$marketModule[$optionValue]); } }else{ if(is_array($optionValue)){ $xmselect[$optionkey]=[ 'i'=>$oii, 'key'=>$optionkey, 'name'=>$options['key'].'['.$optionkey.']', 'data'=>json_encode($optionValue), 'value'=>'' ]; $html = "<div class=\"xm-select-demo xm-select-{$options['key']}-{$oii}\" style='min-width:200px;max-width:40%;'></div>"; $module.= str_replace(['{$html}'],[$html],$marketModule[$optionkey]); $oii++; unset($ooi); }else{ if(is_numeric($optionkey)){ $module.= str_replace(['{$checked}','{$key}','{$name}','{$value}','{$append}'],[' checked',$options['key'],$options['key'].'['.$optionValue.']','',''],$marketModule[$optionValue]); }else{ $optionValue= str_replace(['{$checked}','{$key}','{$name}','{$value}'],[' checked',$options['key'],$options['key'].'['.$optionkey.'][]',''],$optionValue); $module.= str_replace(['{$checked}','{$key}','{$name}','{$value}','{$append}'],[' checked',$options['key'],$options['key'].'['.$optionkey.'][]','',$optionValue],$marketModule[$optionkey]); } } } } }else{ foreach ($options as $optionkey=>$optionValue){ if(is_numeric($optionkey)){ if(is_array($optionValue)){ $name=$options['key'].'['.$optionValue['key'].']'; $attrKey=$options['key'].'['.$optionValue['key'].']'; if($optionValue['type']=='text'){ $show.='<dl class="checkmarket-dl" data-key="'.$optionValue['key'].'"><dt>'.$optionValue['name'].'</dt><dd><input type="text" name="'.$name.'" data-key="'.$attrKey.'" value="'.$_detail[$optionValue['key']].'"><span class="unit">'.$optionValue['unit'].'</span></dd></dl>'; }else if($optionValue['type']=='market' && !empty($optionValue['option'])){ $module=''; foreach ($optionValue['option'] as $optionkeyItem=>$optionValueItem){ if(is_numeric($optionkeyItem)){ }else{ if(is_array($optionValueItem)){ $xmselect[$optionkeyItem]=[ 'i'=>$oii, 'key'=>$optionkeyItem, 'name'=>$name.'['.$optionkeyItem.']', 'data'=>json_encode($optionValueItem), 'value'=>$_detail[$optionValue['key']][$optionkeyItem], ]; $checked=empty($_detail[$optionValue['key']][$optionkeyItem])?'':' checked'; $html = "<textarea class='xm-select-json' style='display: none'>".json_encode($optionValueItem)."</textarea><div class=\"xm-select-demo xm-select-{$options['key']}-{$oii}\" data-key=\"".$attrKey.'['.$optionkeyItem.']'."\" style='min-width:200px;max-width:40%;'></div>"; $module.= str_replace(['{$html}','{$checked}'],[$html,$checked],$marketModule[$optionkeyItem]); $oii++; unset($ooi); }else{ if(empty($_detail[$optionValue['key']][$optionkeyItem][0]) && empty($_detail[$optionValue['key']][$optionkeyItem][1])){ $checked=''; $readonly=' readonly="readonly"'; }else{ $checked=' checked'; $readonly=''; } $optionValueItem= str_replace(['{$key}','{$name}','{$value}','{$checked}','{$readonly}'],[$options['key'],$name.'['.$optionkeyItem.'][]',$_detail[$optionValue['key']][$optionkeyItem][1],$checked,$readonly],$optionValueItem); $module.= str_replace(['{$key}','{$name}','{$value}','{$append}','{$checked}','{$readonly}'],[$options['key'],$name.'['.$optionkeyItem.'][]',$_detail[$optionValue['key']][$optionkeyItem][0],$optionValueItem,$checked,$readonly],$marketModule[$optionkeyItem]); } } } $show.='<dl class="checkmarket-dl"><dt>'.$optionValue['name'].'</dt><dd>'.$module.'</dd></dl>'; unset($module); $si++; } }else{ if(empty($_detail[$optionValue])){ $checked=''; $readonly=' readonly="readonly"'; }else{ $checked=' checked'; $readonly=''; } $module.= str_replace(['{$key}','{$name}','{$value}','{$append}','{$checked}','{$readonly}'],[$options['key'],$options['key'].'['.$optionValue.']',$_detail[$optionValue],'',$checked,$readonly],$marketModule[$optionValue]); } }else{ if(is_array($optionValue)){ $xmselect[$optionkey]=[ 'i'=>$oii, 'key'=>$optionkey, 'name'=>$options['key'].'['.$optionkey.']', 'data'=>json_encode($optionValue), 'value'=>$_detail[$optionkey] ]; $checked=empty($_detail[$optionkey])?'':' checked'; $html = "<div class=\"xm-select-demo xm-select-{$options['key']}-{$oii}\" style='min-width:200px;max-width:40%;'></div>"; $module.= str_replace(['{$html}','{$checked}'],[$html,$checked],$marketModule[$optionkey]); $oii++; unset($ooi); }else{ if(is_numeric($optionkey)){ $module.= str_replace(['{$key}','{$name}','{$value}','{$append}'],[$options['key'],$options['key'].'['.$optionValue.']','',''],$marketModule[$optionValue]); }else{ $optionValue= str_replace(['{$key}','{$name}','{$value}'],[$options['key'],$options['key'].'['.$optionkey.'][]',''],$optionValue); $module.= str_replace(['{$key}','{$name}','{$value}','{$append}'],[$options['key'],$options['key'].'['.$optionkey.'][]','',$optionValue],$marketModule[$optionkey]); } } } } // foreach ($options['option'] as $optionkey=>$optionValue){ // if(is_array($optionValue)){ // $xmselect[$optionkey]=[ // 'i'=>$oii, // 'key'=>$optionkey, // 'name'=>$options['key'].'['.$optionkey.']', // 'data'=>json_encode($optionValue), // 'value'=>$_detail[$optionkey] // ]; // $checked=empty($_detail[$optionkey])?'':' checked'; // $html = "<textarea class='xm-select-json' style='display: none'>".json_encode($optionValue)."</textarea><div class=\"xm-select-demo xm-select-demo-{$oii}\" data-key=\"".$options['key'].'['.$optionkey.']'."\" style='min-width:200px;max-width:40%;'></div>"; // $module.= str_replace(['{$html}','{$checked}'],[$html,$checked],$marketModule[$optionkey]); // $oii++; // unset($ooi); // }else{ // $value=empty($_detail[$optionValue])?'':$_detail[$optionValue]; // $checked=$value?' checked':''; // $readonly=$value?'':' readonly="readonly"'; // $module.= str_replace(['{$key}','{$name}','{$value}','{$checked}','{$readonly}'],[$optionValue,$name.'['.$optionValue.']',$value,$checked,$readonly],$marketModule[$optionValue]); // } // } } $show.='<dl class="checkmarket-dl"><dd>'.$module.'</dd></dl>'; unset($module); $xmSelectRender=''; if(!empty($xmselect)){ foreach ($xmselect as $xmVal){ $xmSelectRender.="xmSelect.render({ el: '.xm-select-{$options['key']}-{$xmVal['i']}', name:'{$xmVal['name']}', initValue:[{$xmVal['value']}], toolbar:{show: false}, prop:{value:'id',children:'child'}, on:function(data){}, clickClose:true, autoRow: true, height: '300px', data:{$xmVal['data']} });"; } } $show.='<div class="checkmarket-content"></div>'; $show.="<script> $(function(){ layui.use(['form'], function(){ var form = layui.form; form.on('checkbox({$options['key']})', function(data){ var item=$(data.othis).parents('.checkboxtext'); if(data.elem.checked==true){ $('input[type=\"text\"]',item).removeAttr('readonly disabled'); }else{ $('input[type=\"text\"]',item).attr({'readonly':true,'disabled':true}); } }); {$xmSelectRender} }); }) </script>"; } $show .= fun('field@load_js','xmSelect')?"<script src='$static/oto/js/xm-select.js'></script>":''; $show .="</div> <style> .checkmarket-item{ border: 1px solid #ddd; background-color: #fff; padding: 15px; margin-bottom: 15px; position:relative; } .checkmarket-item .btn-delete{ color: #06c; position:absolute; right: 15px; top: 15px; cursor: pointer; } .checkmarket-dl{ display:flex; justify-content: flex-start; margin-top: 15px; } .checkmarket-dl dt{ width: 80px; text-align: right; padding-right: 10px; line-height: 36px; } .checkmarket-dl dd{ width: 100%; } .checkmarket-dl .unit{ padding-left: 8px; color: #888; } </style>"; $field['about'] && $field['about'] = '<br>'.$field['about']; } ~~~