<?php namespace taoler\com; use think\helper\Str; class FormHlp { public function token($name = '__token__', $type = 'md5') { if (function_exists('token')) { return token($name, $type); } return ''; } /** * 生成文本框(按类型) password .text * @param string $name * @param string $type * @param array $options * @return string */ public function input($name = '', $type = 'text', $options = [], $value = '') { $label = $options['label'] ?? $name; $tips = $options['tips'] ?? $label; $placeholder = $options['placeholder'] ?? $tips; $value = !is_null($value) ? 'value="' . $value . '"' : ''; $disorread = $this->readonlyOrdisabled($options) ? $this->readonlyOrdisabled($options) : $this->readonlyOrdisabled($options); $disorread = $disorread ? 'layui-disabled' : ''; if ($type == 'hidden') { return '<input type="' . $type . '" name="' . $name . '" ' . $this->verify($options) . $this->filter($options) . $this->readonlyOrdisabled($options) . ' autocomplete="off" placeholder="' . $placeholder . '" class="layui-input ' . $this->addClass($options) . ' ' . $disorread . '" ' . $value . '/>'; } $str = '<div class="layui-form-item ">'.$this->label($label,$options). '<div class="layui-input-block"> <input ' . $this->addextend($options) . ' type="' . $type . '" name="' . $name . '" required ' . $this->verify($options) . $this->filter($options) . $this->readonlyOrdisabled($options) . ' autocomplete="off" placeholder="' . lang($placeholder) . '" ' . $this->addstyle($options) . ' class="layui-input ' . $this->addClass($options) . ' ' . $disorread . '"' . $value . '/> ' . $this->tips($options) . ' </div></div>'; return $str; } /** * @param string $name * @param array $options * @param mixed|null $value * @return string */ public function text(string $name,array $options = [], mixed $value = null) { return $this->input( $name,'text',$options, $value); } /** * 创建一个密码输入字段 * * @param string $name * @param array $options * * @return string */ public function password(string $name, array $options = []) { $options['verify'] = isset($options['verify'])?$options['verify']:'pass'; return $this->input($name, 'password', $options); } /** * 创建一个范围输入选择器 * * @param string $name * @param null $value * @param array $options * * @return string */ public function range($name, $options = [], $value = null) { $label = $options['label'] ?? $name; $tips = $options['tips'] ?? $label; $placeholder = $options['placeholder'] ?? $tips; $value = !is_null($value) ? 'value="' . $value . '"' : ''; $disorread = $this->readonlyOrdisabled($options) ? $this->readonlyOrdisabled($options) : $this->readonlyOrdisabled($options); $disorread = $disorread ? 'layui-disabled' : ''; return ' <div class="layui-form-item"> '.$this->label($label, $options).' <div class="layui-input-block"> <div class="layui-input-inline" style="width: 100px;"> <input '. $this->verify($options) . $this->filter($options) . $this->readonlyOrdisabled($options) .' type="text" name="'.$name.'_min" placeholder="'.lang($placeholder).'" autocomplete="off" class="layui-input ' . $this->addClass($options) . ' ' . $disorread . '" ' . $value . '/> </div> <div class="layui-form-mid">-</div> <div class="layui-input-inline" style="width: 100px;"> <input '. $this->verify($options) . $this->filter($options) . $this->readonlyOrdisabled($options) .' type="text" name="'.$name.'_max" placeholder="'.lang($placeholder).'" autocomplete="off" class="layui-input ' . $this->addClass($options) . ' ' . $disorread . '" ' . $value . '/> </div> </div> </div>'; } /** * 创建一个隐藏的输入字段 * * @param string $name * @param null $value * @param array $options * * @return string */ public function hidden($name, $options = [],$value = null) { return $this->input( $name,'hidden', $options, $value); } /** * 创建一个电子邮件输入字段 * * @param string $name * @param null $value * @param array $options * * @return string */ public function email($name, $options = [],$value = null) { $options['verify'] = isset($options['verify'])?$options['verify']:'email'; return $this->input( $name,'email', $options, $value); } /** * 创建一个tel输入字段 * * @param string $name * @param null $value * @param array $options * * @return string */ public function tel($name, $options = [],$value = null) { $options['verify'] = isset($options['verify'])?$options['verify']:'phone'; return $this->input( $name,'tel', $options, $value); } /** * 创建一个数字输入字段 * * @param string $name * @param null $value * @param array $options * * @return string */ public function number($name, $options = [],$value = null) { $options['verify'] = isset($options['verify'])?$options['verify']:'number'; return $this->input( $name,'number', $options, $value); } /** * 创建一个url输入字段 * * @param string $name * @param null $value * @param array $options * * @return string */ public function url($name, $options = [],$value = null) { $options['verify'] = isset($options['verify'])?$options['verify']:'url'; return $this->input( $name,'url', $options, $value); } /** * 评分 * @param $name * @param $options * @param $value * @return string */ public function rate($name = '', $options = [], $value = '') { $label = $options['label'] ?? $name; $id = ($options['id']) ?? $name; $value = !is_null($value) ? $value : ''; $data_value = ''; foreach ($options as $key => $val) { $data_value .= ' data-'.$key.'="'.$val.'" '; } $disorread = $this->readonlyOrdisabled($options) ? $this->readonlyOrdisabled($options) : $this->readonlyOrdisabled($options); $disorread = $disorread ? 'layui-disabled' : ''; $op = json_encode($options,JSON_UNESCAPED_UNICODE); $str = "<div class='layui-form-item " . $this->addClass($options) . "'> " .$this->label($label,$options) . " <div class='layui-input-block'> <input type='hidden' name='" . $name . "' class='layui-input' value='" . $value . "'> <div ". $data_value . $this->addextend($options) . $this->addstyle($options) ." data-name='" . $name . "' data-value ='" . $value . "' id='" . $id . "' lay-filter='rate' class='" . $this->addClass($options) . "' data-options='" . $op . "'> " . $this->tips($options) . "</div></div></div>"; return $str; } /** * 滑块 * @param $name * @param $options * @param $value * @return string */ public function slider($name = '', $options = [], $value = '') { $label = $options['label'] ?? $name; $id = ($options['id']) ?? $name; $value = !is_null($value) ? $value : ''; $data_value = ''; foreach ($options as $key => $val) { $data_value .= ' data-'.$key.'="'.$val.'" '; } $disorread = $this->readonlyOrdisabled($options) ? $this->readonlyOrdisabled($options) : $this->readonlyOrdisabled($options); $disorread = $disorread ? 'layui-disabled' : ''; $op = json_encode($options,JSON_UNESCAPED_UNICODE); $str = "<div class='layui-form-item " . $this->addClass($options) . "'> ". $this->label($label, $options)." <div class='layui-input-block' > <input type='hidden' name='" . $name . "' class='layui-input layui-input-inline' value='" . $value . "'> <div " .$data_value . $this->addextend($options) ." style='top:16px' data-name='" . $name . "' data-value ='" . $value . "' id='" . $id . "' lay-filter='slider' class='" . $this->addClass($options) . "' data-options='" . $op . "'> " . $this->tips($options) . " </div></div></div>"; return $str; } /** * @param $name * @param $radiolist * @param array $options * @param string $value * @return string */ public function radio($name = '', $radiolist=[], $options = [], $value = '') { if (is_null($radiolist)) { $radiolist = $name; } $label = $options['label'] ?? $name; $input = ''; if (is_string($radiolist) && strpos($radiolist, "\n") !== false) $radiolist = explode("\n", $radiolist); if (is_array($radiolist)) { foreach ($radiolist as $k => $v) { if (is_string($v) && strpos($v, ':') !== false) { $v = explode(":", $v); $input .= '<input ' . $this->addextend($options) . ' ' . $this->addstyle($options) . ' class="' . $this->addClass($options) . '" type="radio"' . $this->selectedOrchecked($value, $v[0], 2) . ' name="' . $name . '" ' . $this->verify($options) . $this->filter($options) . $this->readonlyOrdisabled($options) . ' value="' . $v[0] . '" title="' . lang($v[1]) . '" />'; } else { $input .= '<input ' . $this->addextend($options) . ' ' . $this->addstyle($options) . ' class="' . $this->addClass($options) . '" type="radio"' . $this->selectedOrchecked($value, $k, 2) . ' name="' . $name . '" ' . $this->verify($options) . $this->filter($options) . $this->readonlyOrdisabled($options) . ' value="' . $k . '" title="' . lang($v) . '" />'; } } } else { $input .= '<input ' . $this->addextend($options) . ' ' . $this->addstyle($options) . ' class="' . $this->addClass($options) . '" type="radio" name="' . $name . '" ' . $this->verify($options) . $this->filter($options) . ' value="' . $radiolist . '" title="' . lang($radiolist) . '" />'; } $str = ' <div class="layui-form-item">' .$this->label($label,$options) . ' <div class="layui-input-block"> ' . $input . ' ' . $this->tips($options) . ' </div> </div>'; return $str; } /** * 生成开关 * @param $name * @param $value * @param array $options * @return string * switch是关键字不能用 */ public function switchs($name = '', $switch=[], $options = [], $value = '') { $label = $options['label'] ?? $name; $switchArr = $switch; if (is_string($switch) && strpos($switch, '|')) { $switchArr = implode('|', $switch); } $checked = $value ? 'checked' : ''; $switchStr = $switchArr ? lang($switchArr[1]) . '|' . lang($switchArr[0]) : lang('open') . '|' . 'close'; $str = '<div class="layui-form-item">' .$this->label($label,$options) . ' <div class="layui-input-block"> <input ' . $this->addextend($options) . ' ' . $this->addstyle($options) . ' class="' . $this->addClass($options) . '" type="checkbox" value="' . $value . '" checked="" name="' . $name . '" ' . $this->verify($options) . $this->filter($options) . $this->readonlyOrdisabled($options) . ' lay-skin="switch" lay-text="' . $switchStr . '" data-text="' . lang($value) . '"/> ' . $this->tips($options) . ' </div> </div>'; return $str; } /** * 多选 * @param null $name * @param array $list * @param array $options * @param $value * @return string */ public function checkbox($name = '', $list = [], $options = [], $value = '') { if (empty($value)) $value = $name; if (is_string($value) && strpos($value, "\n") !== false) $value = explode("\n", $value); if (is_string($value) && strpos($value, ",") !== false) $value = explode(",", $value); if (is_string($value) && strpos($value, "|") !== false) $value = explode("|", $value); if (is_string($list) && strpos($list, "\n") !== false) $list = explode("\n", $list); if (is_string($list) && strpos($list, ",") !== false) $list = explode(",", $list); if (is_string($list) && strpos($list, "|") !== false) $list = explode("|", $list); if ( is_string($value) && strpos($value, "\n") === false && strpos($value, ",") === false && strpos($value, "|") === false ) $value = explode(",", $value); $input = '';$skin = ''; if (isset($options['skin'])) $skin = 'lay-skin="' . $options['skin'] . '"'; if (is_array($list) && $list) { foreach ($list as $k => $v) { if (is_string($v) && strpos($v, ':') !== false) { $v = explode(":", $v); $check = ''; if (is_array($value) && in_array($v[0], $value) || $value == $v[0]) { $check = 'checked'; } $input .= '<input ' . $this->addextend($options) . ' ' . $this->addstyle($options) . ' class="' . $this->addClass($options) . '" type="checkbox" ' . $check . ' value="' . $k . '" name="' . $name . '[' . $v[0] . ']" ' . $skin . $this->verify($options) . $this->filter($options) . $this->readonlyOrdisabled($options) . ' title="' . lang($v[1]) . '"/>'; } else { $check = ''; if ((is_array($value) && is_array($v) && in_array($v[0], $value)) || $value == $v) { $check = 'checked'; } elseif ((is_array($value) && is_string($v) && in_array($k, $value)) || $value == $v) { $check = 'checked'; } $input .= '<input ' . $this->addextend($options) . ' ' . $this->addstyle($options) . ' class="' . $this->addClass($options) . '" type="checkbox" ' . $check . ' value="' . $k . '" name="' . $name . '[' . $k . ']" ' . $skin . $this->verify($options) . $this->filter($options) . $this->readonlyOrdisabled($options) . ' title="' . lang($v) . '"/>'; } } } else { $input .= '<input ' . $this->addextend($options) . ' ' . $this->addstyle($options) . ' class="' . $this->addClass($options) . '" type="checkbox" name="' . $name . '[]" ' . $skin . $this->verify($options) . $this->filter($options) . $this->readonlyOrdisabled($options) . ' title="' . lang($value) . '"/>'; } $label = $options['label'] ?? $name; $str = '<div class="layui-form-item">' .$this->label($label,$options) . ' <div class="layui-input-block"> ' . $input . $this->tips($options) . ' </div></div>'; return $str; } /** * 数组表单 * @param null $name * @param array $options * @param array $list * @return string */ public function arrays($name = '', $list = [], $options = []) { $label = $options['label'] ?? $name; $arr = ''; $i = 0; if (empty($list)) { $arr .= '<div class="layui-form-item" >' .$this->label($label,$options) . '<div class="layui-input-inline"> <input '. $this->verify($options) . ' type="text" name="' . $name . '[key][]" value="" placeholder="' . lang('key') . '" autocomplete="off" class="layui-input input-double-width"> </div> <div class="layui-input-inline"> <input '. $this->verify($options) . ' type="text" name="' . $name . '[value][]" value="" placeholder="' . lang('value') . '" autocomplete="off" class="layui-input input-double-width"> </div><div class="layui-input-inline" > <button data-name="' . $name . '" type="button" class="layui-btn layui-btn-warm layui-btn-sm addInput" lay-event="addInput"> <i class="layui-icon"></i> </button> </div></div>'; } foreach ($list as $key => $value) { if ($i == 0) { $arr .= '<div class="layui-form-item" >' .$this->label($label,$options) . '<div class="layui-input-inline"> <input '. $this->verify($options) . ' type="text" name="' . $name . '[key][]" value="' . $key . '" placeholder="' . lang('key') . '" autocomplete="off" class="layui-input input-double-width"> </div> <div class="layui-input-inline"> <input '. $this->verify($options) . ' type="text" name="' . $name . '[value][]" value="' . $value . '" placeholder="' . lang('value') . '" autocomplete="off" class="layui-input input-double-width"> </div><div class="layui-input-inline" > <button data-name="' . $name . '" type="button" class="layui-btn layui-btn-warm layui-btn-sm addInput" lay-event="addInput"> <i class="layui-icon"></i> </button> </div></div>';; } else { $arr .= '<div class="layui-form-item"><label class="layui-form-label ' . $this->labelRequire($options) . '"></label><div class="layui-input-inline"> <input '. $this->verify($options) . ' type="text" name="' . $name . '[key][]" value="' . $key . '" placeholder="' . lang('key') . '" autocomplete="off" class="layui-input input-double-width"> </div><div class="layui-input-inline"> <input '. $this->verify($options) . ' type="text" name="' . $name . '[value][]" value="' . $value . '" placeholder="' . lang('value') . '" autocomplete="off" class="layui-input input-double-width"> </div><div class="layui-input-inline"> <button data-name="' . $name . '" type="button" class="layui-btn layui-btn-danger layui-btn-sm removeInupt" lay-event="removeInupt"> <i class="layui-icon"></i> </button> </div></div>'; } $i++; } $str = '<div id="' . $name . '">' . $arr . '</div>'; return $str; } /** * 文本 * @param null $name * @param array $options * @param $value * @return string */ public function textarea($name = '', $options = [], $value = '') { $label = $options['label'] ?? $name; $tips = $options['tips'] ?? $name; $placeholder = $options['placeholder'] ?? $tips; $str = ' <div class="layui-form-item layui-form-text">' .$this->label($label,$options) . ' <div class="layui-input-block"> <textarea '. $this->addextend($options) . ' ' . $this->addstyle($options) . ' placeholder="' . lang($placeholder) . '" class="layui-textarea ' . $this->addClass($options) . '" ' . $this->filter($options) . $this->verify($options) . ' name="' . $name . '" value="' . $value . '">' . $value . '</textarea> ' . $this->tips($options) . ' </div></div>'; return $str; } /** * @param $name * @param $select * @param $options * @param $attr * @param $value * @return string */ public function selectn($name = '', $select= [], $options=[], $attr=[], $value='') { $label = $options['label'] ?? $name; $options['url'] = $options['url'] ?? ''; $options['delimiter'] = $options['delimiter'] ?? ''; $options['search']= isset($options['search']) ? true : ''; $options['num'] = $options['num'] ?? 3; $options['last'] = $options['last'] ?? ''; if ($attr) { $attr = is_array($attr) ? implode(',', $attr) : $attr; } $op = ''; foreach ($options as $key => $val) { $op .= ' data-'.$key.'="'.$val.'" '; } $op .='data-value="' . $value . '" data-attr="' . $attr . '"'; if (is_array($select)) { $op .= ' data-data="' . json_encode($select, JSON_UNESCAPED_UNICODE) . '"'; } if (is_object($select)) { $op .= ' data-data="' . json_encode((array)$select, JSON_UNESCAPED_UNICODE) .'"'; } $str = '<div class="layui-form-item layui-form" lay-filter="' . $name . '">' .$this->label($label,$options) . ' <div class="layui-input-block"> <div data-verify ="'.$this->labelRequire($options).'"' . $this->addextend($options) . ' id="' . $name . '"' . $op . ' lay-filter="selectN" ' . $this->addClass($options) . ' name="' . $name . '" ' . ' ' . $this->search($options) . ' ' . $this->readonlyOrdisabled($options) . ' > </div> ' . $this->tips($options) . ' </div> </div>'; return $str; } /** * @param $name * @param $select * @param $options * @param $attr * @param $value * @return string */ public function selectplus($name = '', $select= [], $options=[], $attr=[], $value='') { $options['url'] = $options['url'] ?? ''; $id = $options['id'] ?? $name; $label = $options['label'] ?? $name; $options['delimiter'] = $options['delimiter'] ?? ''; $options['fielddelimiter'] = $options['fielddelimiter'] ?? ''; $multiple = isset($options['multiple']) ? 'multiple="multiple"' : ''; $options['multiple'] = $multiple?1:''; if ($attr) { $attr = is_array($attr) ? implode(',', $attr) : $attr; } $op = ''; foreach ($options as $key => $val) { $op .= ' data-'.$key.'="'.$val.'" '; } $op .= ' data-value="' . $value . '" data-attr="' . $attr . '" '; if (is_array($select)) { $op .= " data-data='" . json_encode($select, JSON_UNESCAPED_UNICODE) . "'"; } if (is_object($select)) { $op .= ' data-data="' . json_encode((array)$select, JSON_UNESCAPED_UNICODE) . '"'; } $str = '<div class="layui-form-item">' .$this->label($label,$options) . ' <div class="layui-input-block"> <div id="' . $id . '" data-verify ="'.$this->labelRequire($options).'"' . $this->addextend($options) . $op . ' lay-filter="selectPlus" ' . $this->addClass($options) . ' name="' . $name . '" ' . $multiple . ' ' . $this->search($options) . ' ' . $this->readonlyOrdisabled($options) . ' > </div> ' . $this->tips($options) . ' </div> </div>'; return $str; } /** * @param $name * @param $select * @param $options * @param $attr * @param $value * @return string */ public function multiselect($name = '', $select=[], $options=[], $attr=[], $value='') { $op = ''; if ($select) { foreach ($select as $k => $v) { $selected = ''; if (is_array($value) && is_array($attr) && !empty($attr) && in_array($v[$attr[0]], $value) || (is_array($attr) && !empty($attr) && $v[$attr[0]] == $value)) { $selected = 'selected'; } if ($value != null && $value && in_array($k, $value) && !$attr) { $selected = 'selected'; } if (!empty($attr)) { $op .= '<option ' . $selected . ' value="' . $v[$attr[0]] . '">' . lang($v[$attr[1]]) . '</option>'; } else { $op .= '<option ' . $selected . ' value="' . $k . '">' . lang($v) . '</option>'; } } } $id = $options['id']??$name; $label = $options['label'] ?? $name; $url = $options['url'] ?? ''; $multiple = ''; if (isset($options['multiple'])) { $multiple = 'multiple="multiple"'; } if (isset($options['default'])) { $default = lang($options['default']); } else { $default = lang('Default'); } $attr = is_array($attr) ? implode(',', $attr) : $attr; $str = '<div class="layui-form-item">' .$this->label($label,$options) . ' <div class="layui-input-block"> <select data-id="'.$id.'" data-attr="' . $attr . '" data-url="' . $url . '" ' . $this->addextend($options) . ' ' . $this->addstyle($options) . ' class="layui-select-url layui-select' . $this->addClass($options) . '" name="' . $name . '" ' . $multiple . ' ' . $this->filter($options) . ' ' . $this->verify($options) . ' ' . $this->search($options) . ' ' . $this->readonlyOrdisabled($options) . ' > <option value="">' . lang($default) . '</option> ' . $op . ' </select> ' . $this->tips($options) . ' </div> </div>'; return $str; } /** * @param $name * @param $select * @param $options * @param $attr * @param $value * @return string */ public function xmselect($name = '', $select=[], $options=[], $attr=[], $value='') { $op = ''; if (is_array($select)) { $op .= " data-data='" . json_encode($select, JSON_UNESCAPED_UNICODE) . "'"; } if (is_object($select)) { $op .= " data-data='" . json_encode((array)$select, JSON_UNESCAPED_UNICODE) . "'"; } $attr = is_array($attr) ? implode(',', $attr):$attr; $attr ? $op .= ' data-attr="' . $attr . '"' : ""; $value = is_array($value) ? implode($value) : $value; $value ? $op .= ' data-value="' . $value . '"' : ""; $options['lang'] = $options['lang'] ?? ''; $options['tips'] = $options['tips']?? ''; $options['empty'] = $options['empty'] ?? ''; $options['repeat'] = $options['repeat'] ??''; $options['content'] = $options['content'] ?? ''; $options['searchTips'] = $options['searchTips'] ?? ''; $options['style'] = $options['style'] ?? ''; $options['filterable'] = $options['filterable'] ?? ''; $options['remoteSearch'] = $options['remoteSearch'] ?? ''; $options['remoteMethod'] = $options['remoteMethod'] ?? ''; $options['height'] = $options['height'] ??''; $options['paging'] = $options['paging'] ??''; $options['size'] = $options['size'] ??''; $options['pageSize'] = $options['pageSize'] ??''; $options['pageRemote'] = $options['pageRemote'] ??''; $options['clickClose'] = $options['clickClose'] ??''; $options['reqext'] = $options['reqtext'] ??''; $options['radio'] = $options['radio'] ?? ''; $options['url'] = $options['url'] ??''; $options['tree'] = $options['tree'] ??''; $options['prop'] = $options['prop'] ??''; $options['parentField'] = $options['parentField'] ??'pid'; $options['max'] = $options['max'] ??''; $options['verify'] = $options['verify'] ??''; $options['disabled'] = $options['disabled'] ??''; $options['create'] = $options['create'] ??''; $options['theme'] = $options['theme'] ??''; $options['value'] = $options['value'] ??''; $options['autorow'] = $options['autorow'] ??''; $options['toolbar'] = isset($options['toolbar'])?json_encode($options['toolbar'],JSON_UNESCAPED_UNICODE) : ''; foreach($options as $key=>$val){ $op .= ' data-'.$key.'="'.$val.'" '; } $label = $options['label'] ?? $name; $str = '<div class="layui-form-item">' .$this->label($label,$options) . ' <div ' . $this->addextend($options) . ' ' . $this->addstyle($options) . ' id="' . $name . '" name="' . $name . '" class="layui-input-block ' . $this->addClass($options) . '" ' . $op . ' lay-filter="xmSelect"> ' . $this->tips($options) . ' </div> </div>'; return $str; } /** * 创建动态下拉列表字段 * @param $name * @param $options * @param $value * @return string */ public function selectpage(string $name,array $lists= [],array $options = [],mixed $value=null) { $url = $options['url']??''; foreach ($options as $k => $v) { $op['extend']['data-'.$k] = $v; } $op['extend']['lay-filter'] = 'selectPage'; $op['extend']['data-data'] = empty($lists)?'':json_encode($lists); $op['extend']['data-field'] = $options['field']??'title'; $op['extend']['data-primarykey'] = $options['field']??'id'; $op['extend']['data-multiple'] = $options['multiple']??''; $op['extend']['data-init'] = $value; $options = array_merge($options,$op); return $this->input($name,'text',$options, $value); } /** * @param $name * @param $value * @param array $options * @return string * tag */ public function tags($name = '', $options = [], $value = '') { $label = $options['label'] ?? $name; $id = $options['id'] ?? $name; $str = '<div class="layui-form-item">' .$this->label($label,$options) . ' <div class="layui-input-block"> <div class="tags" > <input type="hidden" name="' . $name . '" value="' . $value . '" /> <input ' . $this->verify($options) . $this->addextend($options) . ' ' . $this->addstyle($options) . ' class="' . $this->addClass($options) . '" id="' . $id . '" lay-filter="tags" type="text" placeholder="' . lang("Space To Generate Tags") . '" ' . $this->filter($options) . $this->readonlyOrdisabled($options) . '/> </div> </div> </div>'; return $str; } /** * @param $name * @param $value * @param array $options * @return string * 颜色选择 */ public function color($name = '', $options = [], $value = '') { $id = $options['id'] ?? $name;$label = $options['label'] ?? $name;$format = $options['format'] ?? 'hex'; $str = '<div class="layui-form-item">' .$this->label($label,$options) . ' <div class="layui-input-block"> <input ' . $this->verify($options) . $this->addstyle($options) . ' class="layui-input layui-input-inline' . $this->addClass($options) . '" type="text" name="' . $name . '" value="' . $value . '"' . $this->filter($options) . $this->readonlyOrdisabled($options) . '/> <div ' . $this->addextend($options) . ' id="' . $id . '" lay-filter="colorPicker" data-name="' . $name . '" data-format = "' . $format . '" ></div> </div> </div>'; return $str; } /** * @param $name * @param $value * @param array $options * @return string * 图标,有点小问题 */ public function icon($name = '', $options = [], $value = '') { $name = $name ? $name : 'icon'; $label = $options['label'] ?? $name; $value = $value ? $value : 'layui-icon-rate'; $id = $options['id'] ?? $name; $str = '<div class="layui-form-item">' .$this->label($label,$options) . ' <div class="layui-input-block"> <input ' . $this->verify($options) . $this->addextend($options) . ' type="hidden" name="' . $name . '" id="' . $id . '" value="' . $value . '" lay-filter="iconPickers" class="hide ' . $this->addClass($options) . '" /> </div> </div>'; return $str; } /** * @param null $name * @param array $options * @return string * 日期 */ public function date($name='', $options=[], $value='') { $op = ''; if (isset($options['range'])) { $op .= 'data-range="' . $options['range'] . '"'; } if (isset($options['type'])) { $op .= 'data-type="' . $options['type'] . '"'; } if (isset($options['format'])) { $op .= 'data-format="' . $options['format'] . '"'; } $label = $options['label'] ?? $name; $str = '<div class="layui-form-item">' .$this->label($label,$options) . ' <div class="layui-input-block"> <input ' . $this->verify($options) . $this->addextend($options) . ' ' . $this->addstyle($options) . ' class="layui-input ' . $this->addClass($options) . '" type="text" name="' . $name . '" value="' . $value . '" lay-filter="date" ' . $op . ' placeholder="yyyy-MM-dd HH:mm:ss"/> <i class="layui-icon layui-icon-date"></i></div> </div>'; return $str; } /** * 城市选择 * @param string $name * @param $options * @return string */ public function city($name = 'cityPicker', $options = []) { $id = $options['id'] ?? $name; $options['provinceId'] = $options['provinceId'] ?? 'province_id'; $options['cityId'] = $options['cityId'] ?? 'city_id'; $options['districtId'] = $options['districtId'] ?? 'area_id'; $attr = 'data-districtid="' . $options['districtId'] . '" data-cityid="' . $options['cityId'] . '" data-provinceid="' . $options['provinceId'] . '"'; $str = ' <div class="layui-form-item"> <label class="layui-form-label width_auto text-r" style="margin-top:2px">省市县:</label> <div class="layui-input-block"> <input ' . $this->verify($options) . $this->addextend($options) . ' type="hidden" autocomplete="on" class="layui-input ' . $this->addClass($options) . '" ' . $attr . ' lay-filter="cityPicker" id="' . $id . '" name="' . $name . '" readonly="readonly" data-toggle="city-picker" placeholder="请选择"/> </div> </div>'; return $str; } /** * 城市选择 * @param string $name * @param $options * @return string */ public function region($name = 'regionCheck', $options = []) { $label = $options['label'] ?? $name; $id = $options['id'] ?? $name; $str = ' <div class="layui-form-item">' .$this->label($label,$options) . ' <div class="layui-input-block"> <input type="hidden" name="' . $name . '" value="" /> <div ' . $this->verify($options) . $this->addextend($options) . ' ' . $this->addstyle($options) . ' class="' . $this->addClass($options) . '" id="' . $id . '" name="' . $name . '" lay-filter="regionCheck"> </div> </div> </div>'; return $str; } /** * @param string $name * @param $id * @param int $type * @param array $options * @return string * 编辑器 */ public function editor($name = 'container', $type = 1, $options = [], $value = '') { $id = $options['id'] ?? $name; $height = $options['height'] ?? '400px'; $path = $options['path'] ?? 'upload'; $label = $options['label'] ?? $name; $str = '<div class="layui-form-item">' .$this->label($label,$options) . ' <div class="layui-input-block">'; if ($type == 1) { //百度。quill wangeditor ckeditor,editormd $textarea = ''; if (!empty($options['textarea'])) { $textarea = '<textarea ' . $this->addextend($options) . ' name="' . $name . '" data-path="' . $path . '" >' . $value . '</textarea>'; } //百度。quill wangeditor ckeditor $str .= '<div ' . $this->addextend($options) . ' data-value="' . htmlentities($value) . '" id="' . $id . '" name="' . $name . '" data-editor="' . $type . '" lay-filter="editor" lay-editor data-path="' . $path . '" data-height="' . $height . '" type="text/plain" > ' . $textarea . ' </div>'; } else { //LAYEDIT tinyedit $str .= '<textarea ' . $this->addextend($options) . ' id="' . $id . '" name="' . $name . '" data-path="' . $path . '" data-editor="' . $type . '" lay-filter="editor" lay-editor type="text/plain">' . $value . '</textarea>'; } $str .= '</div></div>'; return $str; } /** * 上传 * @param string $name * @param string $formData * @param array $options * @return string */ public function upload($name = 'avatar', $formData = '', $options = [], $value = '') { if (!isset($options['type'])) $options['type'] = 'radio'; if (!isset($options['mime'])) $options['mime'] = 'images'; if (!isset($options['num'])) $options['num'] = 1; if (isset($options['num']) && $options['num'] == '*') $options['num'] = 100; if (!isset($options['path'])) $options['path'] = 'upload'; //上传路劲 $id = $options['id']??$name; $css = isset($options['css']) ? $options['css'] : 'display:inline-block;'; $label = $options['label'] ?? $name; $li = ''; $croper_container = ''; if (isset($options['cropper'])) { $width = $options['width'] ?? '300'; $height = $options['height'] ?? '300'; $mark = $options['mark'] ?? '1'; $area = $options['area'] ?? '800px'; $cops = ['name'=>$name,'path' => $options['path'], 'width' => $width, 'height' => $height, 'mark' => $mark, 'area' => $area]; $crpperops = 'data-value="' . json_encode($cops, true) . '"'; $data_value = ''; foreach ($cops as $key => $val) { $data_value .= ' data-'.$key.'="'.$val.'" '; } $croper_container = '<button type="button" '. $data_value . $crpperops . ' class="layui-btn" lay-filter="cropper" id="' .$id .'"><i class="layui-icon layui-icon-upload"></i>' . lang('Cropper') . '</button>'; $options['type'] = 'radio'; $css .= 'width:53%!important;'; } $values = []; $formData = is_object($formData) ? ($formData->toArray()) : $formData; if ($formData && is_array($formData) && array_key_exists($name, $formData)) { $values = explode(',', $formData[$name]); } elseif ($formData && is_string($formData)) { $values = explode(',', $formData); } $values = $value ? explode(',', $value) : $values; if ($value) $values = explode(',', $value); if (!empty(array_filter($values))) { foreach ($values as $k => $v) { if ($k + 1 <= $options['num']) { switch ($options['mime']) { case 'video': $li .= '<li><video lay-event="" class="layui-upload-img fl" width="150" src="' . $v . '"></video> <i class="layui-icon layui-icon-close" lay-event="upfileDelete" data-fileurl="' . $v . '"></i></li>'; break; case 'audio': $li .= '<li><audio lay-event="" class="layui-upload-img fl" width="150" src="' . $v . '"></audio> <i class="layui-icon layui-icon-close" lay-event="upfileDelete" data-fileurl="' . $v . '"></i></li>'; break; case 'images': $li .= '<li><img lay-event="photos" class="layui-upload-img fl" width="150" src="' . $v . '"></img> <i class="layui-icon layui-icon-close" lay-event="upfileDelete" data-fileurl="' . $v . '"></i></li>'; break; case 'image': $li .= '<li><img lay-event="photos" class="layui-upload-img fl" width="150" src="' . $v . '"></img> <i class="layui-icon layui-icon-close" lay-event="upfileDelete" data-fileurl="' . $v . '"></i></li>'; break; case 'zip': $li .= '<li><img lay-event="" class="layui-upload-img fl" width="150" src="/static//backend/images/filetype/zip.jpg"></img> <i class="layui-icon layui-icon-close" lay-event="upfileDelete" data-fileurl="' . $v . '"></i></li>'; break; case 'office': $li .= '<li><img lay-event="" class="layui-upload-img fl" width="150" src="/static/backend/images/filetype/office.jpg"></img> <i class="layui-icon layui-icon-close" lay-event="upfileDelete" data-fileurl="' . $v . '"></i></li>'; break; default: $li .= '<li><img lay-event="photos" class="layui-upload-img fl" width="150" src="/static/backend/images/filetype/file.jpg"> <i class="layui-icon layui-icon-close" lay-event="upfileDelete" data-fileurl="' . $v . '"></i></li>'; break; } } } $value = implode(',', $values); } $op = [ 'name' => $name, 'path' => $options['path'] ?? 'upload', 'mime' => $options['mime'] ?? '*', 'num' => $options['num'] ?? '', 'type' => $options['type'] ?? '', 'size' => $options['size'] ?? '', 'exts' => $options['exts'] ?? '*', 'accept' => $options['accept'] ?? 'file', 'multiple' => $options['multiple'] ?? '', 'selecturl' => $options['selecturl'] ?? '', 'tableurl' => $options['tableurl'] ?? '', ]; $data_value = ''; foreach ($op as $key => $val) { $data_value .= ' data-'.$key.'="'.$val.'" '; } $op = " data-value='" . json_encode($op, true) . "'"; $select_container = ''; if ((isset($options['select']) && $options['select']) || !isset($options['select'])) { $options['select'] = $options['select'] ?? 'upload-select'; //可选upload-choose $select_container = '<button id="' . $name . '" type="button" class="layui-btn layui-btn-danger ' . $options['select'] . '" ' .$data_value . $op . ' lay-filter="' . $options['select'] . '"><i class="layui-icon layui-icon-radio"></i>' . lang('Choose') . '</button>'; } $str = ' <div class="layui-form-item">' .$this->label($label,$options) . ' <div class="layui-input-block"> <div class="layui-upload"> <input ' . $this->addextend($options) . ' ' . $this->addstyle($options) . ' value="' . $value . '" style="' . $css . ' ;width:65% " type="text" name="' . $name . '" class="layui-input attach ' . $this->addClass($options) . '"' . $this->verify($options) . '/> ' . $croper_container . ' <button type="button" ' .$data_value .' style="margin-left:0px" class="layui-btn layui-btn-normal" ' . $op . ' lay-filter="upload"><i class="layui-icon layui-icon-upload-drag"></i>' . lang('Uploads') . '</button> ' . $select_container . ' <div class="layui-upload-list">' . $li . ' </div> </div> ' . $this->tips($options) . ' </div> </div>'; return $str; } /** * @param bool $reset * @param array $options * @return string */ public function closebtn($reset = true, $options = []) { $show = ''; if (!isset($options['show'])) { $show = 'layui-hide'; } $str = '<div class="layui-form-item layui-btn-center ' . $show . '"> <button ' . $this->addstyle($options) . ' type="close" class="layui-btn layui-btn-sm ' . $this->addClass($options) . '" onclick="parent.layui.layer.closeAll();">' . lang('Close') . '</button> </div>'; return $str; } /** * @param bool $reset * @param array $options * @return string */ public function submitbtn($reset=true, $options=[]) { $show = ''; if (!isset($options['show'])) { $show = 'layui-hide'; } $str = '<input type="hidden" name="__token__" value="' . $this->token() . '"><div class=" layui-btn-submit layui-form-item layui-btn-center ' . $show . '" /> <button type="submit" class="layui-btn layui-btn-sm submit" lay-fitler="submit" lay-submit>' . lang('Submit') . '</button>'; if ($reset) { $str .= '<button type="reset" class="layui-btn layui-btn-sm layui-btn-primary reset">' . lang('Reset') . '</button>'; } $str .= '</div>'; return $str; } /** * @param $label * @param $options * @return string */ public function label($label,$options= [],$escape_html = true){ if ($escape_html) { $label = $this->entities($label); } return '<label class="layui-form-label ' . $this->labelRequire($options) . '">' . lang(Str::title($label)) . '</label>'; } /** * 将HTML字符串转换为实体 * * @param string $value * * @return string */ protected function entities($value) { return htmlentities($value, ENT_QUOTES, 'UTF-8', false); } /** * @param $options * @return string * 提示 */ protected function tips($options = []) { $tips = ''; if (isset($options['tips'])) { $tips = '<div class="layui-form-mid layui-word-aux">' . lang($options['tips']) . '</div>'; } return $tips; } /** * @ 验证 * @return string */ protected function verify($options = []) { $verify = ''; if (isset($options['verify'])) { $verify .= ' lay-verify="' . $options['verify'] . '"'; } $type ='tips'; if (isset($options['verType']) && $options['verType']) { $type = $options['verType']; } $verify.= ' lay-verType="' . $type . '" '; if (isset($options['reqText']) && $options['reqText']) { $verify.= ' lay-reqText="' . $options['reqText'] . '" '; } return $verify; } /** 过滤 * @param $options * @return string */ protected function filter($options = []) { $filter = ''; if (isset($options['filter'])) { $filter = 'lay-filter="' . $options['filter'] . '"'; } return $filter; } /**搜索 * @return string */ protected function search($options = []) { $search = ''; if (!isset($options['search']) || $options['search'] == true) { $search = 'lay-search'; } return $search; } /** * @param $ops * @param $val * @param int $type * @return string * 是否选中 */ protected function selectedOrchecked($select=[], $val='', $type = 1) { if ($select == $val) { if ($type == 1) return 'selected'; return 'checked'; } else { return ''; } } protected function labelRequire($options=[]) { if (isset($options['verify']) && ($options['verify'] == 'required' || strpos($options['verify'], 'required') !== false)) { return 'required'; } return ''; } protected function readonlyOrdisabled($options=[]) { if (isset($options['readonly']) && $options['readonly']) { return 'readonly'; } if (isset($options['disabled']) && $options['disabled']) { return 'disabled'; } return ''; } //自定义class属性 protected function addClass($options=[]) { if (isset($options['class']) && $options['class']) { $classArr = is_array($options['class']) ? $options['class'] : explode(',', $options['class']); return ' ' .implode(' ', $classArr).' '; } return ''; } protected function addstyle( $options=[]) { if (isset($options['style']) && $options['style']) { return ' style="' . $options['style'] . '" '; } return ' '; } protected function addextend($options=[]) { if (isset($options['extend']) && $options['extend']) { if(is_array($options['extend'])) { $attr = ' '; foreach($options['extend'] as $key => $value) { $attr.= $key .'="'.$value . '"'; } return $attr; }else{ return ' ' . $options['extend'].' '; } } if (isset($options['extend']) && $options['extend']) { return ' ' . $options['extend'].' '; } return ' '; } }