dcat-admin

dcat-admin


JS组件

<h1>JS组件</h1> <p><code>Dcat Admin</code>内置了一些常用的JS功能组件,通过全局变量<code>Dcat</code>可以访问到这些功能方法。</p> <h2>监听JS脚本加载完毕事件 (ready)</h2> <p>通过<code>Dcat.ready</code>方法设置的回调函数会在所有的<code>JS</code>脚本都加载完毕后执行。</p> <p>&gt; {tip} 只有在模板文件中写<code>JS</code>代码才需要使用<code>Dcat.ready</code>,当在<code>php</code>代码中使用<code>Dcat\Admin\Admin::script</code>方法添加<code>JS</code>代码时是不需要使用<code>Dcat.ready</code>方法的。因为在构建页面的时候系统会自动把代码放在<code>Dcat.ready</code>事件内执行。</p> <pre><code class="language-html">&amp;lt;div&amp;gt;...&amp;lt;/div&amp;gt; &amp;lt;script&amp;gt; Dcat.ready(function () { // 写你的逻辑 console.log('所有JS脚本都加载完了'); }); &amp;lt;/script&amp;gt;</code></pre> <p>&lt;a name=&quot;init&quot;&gt;&lt;/a&gt;</p> <h2>动态监听元素生成 (init)</h2> <p>通过<code>Dcat.init</code>可以监听动态生成的页面元素并设置一个回调,下面来举一个简单的例子来演示用法:</p> <p>假如一个元素是<code>JS</code>动态生成的,如果我们需要对这个元素绑定一个点击事件的话,那么我们通常需要这么做</p> <pre><code class="language-html">&amp;lt;div class=&amp;quot;selector&amp;quot;&amp;gt;test&amp;lt;/div&amp;gt; &amp;lt;script&amp;gt; Dcat.ready(function () { // 需要先 off 再 on 否则页面刷新后会造成重复绑定问题 $(document).off('click', '.selector').on('click', '.selector', function () { ... }) }); &amp;lt;/script&amp;gt;</code></pre> <p>上面这种做法一来比较麻烦,需要先<code>off</code>再<code>on</code>;二来无法对动态生成的元素做一些特殊处理,例如你想在<code>.selector</code>生成后改变背景颜色,这个操作就没办法做到。</p> <p>在<code>Dcat Admin</code>中我们可以使用<code>Dcat.init</code>方法来监听元素动态生成,可以很方便的解决上面两个问题</p> <pre><code class="language-html">&amp;lt;div class=&amp;quot;selector&amp;quot;&amp;gt;test&amp;lt;/div&amp;gt; &amp;lt;script&amp;gt; Dcat.ready(function () { // $this 是当前元素的jquery dom对象 // id 是当前元素的id属性,如果当前元素没有id则会自动生成一个随机id Dcat.init('.selector', function ($this, id) { // 修改元素的背景色 $this.css({background: &amp;quot;#fff&amp;quot;}); // 这里不需要 off 再重新 on,因为这个匿名函数只会执行一次 $this.on('click', function () { ... }); }); }); &amp;lt;/script&amp;gt;</code></pre> <p><code>Dcat.init</code> 接受两个参数</p> <ol> <li><code>selector</code> 需要监听的元素的<code>css选择器</code></li> <li><code>callback</code> 事件回调,当元素生成时触发,且只触发一次</li> </ol> <p>其中<code>callback</code>回调接收两个参数如下</p> <ul> <li><code>$this</code> 是当前元素的jquery dom对象</li> <li><code>id</code> 是当前元素的id属性,如果当前元素没有id则会自动生成一个随机id</li> </ul> <h2>手动触发JS脚本加载完毕事件</h2> <p>通过<code>Dcat.triggerReady</code>方法可以手动触发<code>JS</code>脚本加载完毕事件,这就意味着会自动执行在此之前所有通过<code>Dcat.ready</code>方法设置的回调函数。</p> <p>&gt; {tip} 这个功能普通开发很少会用到,只有一些比较深度的组件定制会用到,比如<a href="model-form-modal.md">表单弹窗</a>功能就用到了此方法。</p> <pre><code class="language-js">Dcat.triggerReady();</code></pre> <h2>Pjax刷新页面</h2> <p>通过<code>Dcat.reload</code>方法可以调用<code>Pjax.reload</code>方法实现页面刷新和跳转功能。</p> <p>刷新当前页面</p> <pre><code class="language-php">Admin::script( &amp;lt;&amp;lt;&amp;lt;JS // 3秒后刷新当前页面 setTimeout(function () { Dcat.reload(); }, 3000); JS );</code></pre> <p>跳转页面</p> <pre><code class="language-php">$url = admin_url('auth/users'); Admin::script( &amp;lt;&amp;lt;&amp;lt;JS // 3秒后跳转到 admin/auth/users 页面 setTimeout(function () { Dcat.reload('{$url}'); }, 3000); JS );</code></pre> <h2>Toastr提示框</h2> <p><code>Dcat Admin</code>集成了<a href="https://github.com/CodeSeven/toastr">Toastr</a>插件,下面是使用方法</p> <h3>success</h3> <pre><code class="language-js">Dcat.success('更新成功'); // 使用标题 Dcat.success('更新成功', '我是标题'); // 传递参数 Dcat.success('更新成功', null, { timeOut: 5000, // 5秒后自动消失 });</code></pre> <p><img src="https://cdn.learnku.com/uploads/images/202004/26/38389/zmB4EPhS3u.png!large" alt="" /></p> <h3>error</h3> <pre><code class="language-js">Dcat.error('服务器出现未知错误'); // 使用标题 Dcat.error('服务器出现未知错误', '我是标题'); // 传递参数 Dcat.error('服务器出现未知错误', null, { timeOut: 5000, // 5秒后自动消失 });</code></pre> <h3>warning</h3> <pre><code class="language-js">Dcat.warning('警告'); // 使用标题 Dcat.warning('警告', '我是标题'); // 传递参数 Dcat.warning('警告', null, { timeOut: 5000, // 5秒后自动消失 });</code></pre> <h3>info</h3> <pre><code class="language-js">Dcat.info('提示信息'); // 使用标题 Dcat.info('提示信息', '我是标题'); // 传递参数 Dcat.info('提示信息', null, { timeOut: 5000, // 5秒后自动消失 });</code></pre> <p>更多用法请参考<a href="https://github.com/CodeSeven/toastr">toastr官方文档</a></p> <h2>sweetalert2弹窗</h2> <p><code>Dcat Admin</code>集成了<a href="https://github.com/sweetalert2/sweetalert2">sweetalert2</a>插件,下面是使用方法</p> <h3>confirm</h3> <p>通过<code>Dcat.confirm</code>方法可以弹出确认弹窗,此方法接收5个参数</p> <ul> <li><code>title</code> <code>string</code> 确认信息标题</li> <li><code>message</code> <code>string</code> 确认信息内容,此参数可以不传</li> <li><code>success</code> <code>function</code> 点击确认按钮触发的回调函数</li> <li><code>fail</code> <code>function</code> 点击取消按钮触发的回调函数,此参数可以不传</li> <li><code>options</code> <code>object</code> 配置参数,可参考<a href="https://github.com/sweetalert2/sweetalert2">sweetalert2官方文档</a></li> </ul> <pre><code class="language-js">Dcat.confirm('确认要删除这行数据吗?', null, function () { console.log('确认删除'); $.post(...); });</code></pre> <p><img src="https://cdn.learnku.com/uploads/images/202004/26/38389/lp40C74OtV.png!large" alt="" /></p> <h3>success</h3> <pre><code class="language-js">Dcat.swal.success('标题'); Dcat.swal.success('标题', '内容'); Dcat.swal.success('标题', '内容', { ... });</code></pre> <p><img src="https://cdn.learnku.com/uploads/images/202004/26/38389/OrhZ4dvA5R.png!large" alt="" /></p> <h3>error</h3> <pre><code class="language-js">Dcat.swal.error('标题'); Dcat.swal.error('标题', '内容'); Dcat.swal.error('标题', '内容', { ... });</code></pre> <p><img src="https://cdn.learnku.com/uploads/images/202004/26/38389/lnp47PDecK.png!large" alt="" /></p> <h3>warning</h3> <pre><code class="language-js">Dcat.swal.warning('标题'); Dcat.swal.warning('标题', '内容'); Dcat.swal.warning('标题', '内容', { ... });</code></pre> <h3>info</h3> <pre><code class="language-js">Dcat.swal.info('标题'); Dcat.swal.info('标题', '内容'); Dcat.swal.info('标题', '内容', { ... });</code></pre> <p>更多用法请参考<a href="https://github.com/sweetalert2/sweetalert2">sweetalert2官方文档</a></p> <h2>layer弹出层</h2> <p><code>Dcat Admin</code>集成了<a href="http://layer.layui.com/">layer弹出层</a>,用法请参考官方文档</p> <pre><code class="language-js">layer.open({ ... })</code></pre> <h2>Loading效果</h2> <p><code>Dcat Admin</code>集成了三种常见的loading效果,<a href="http://103.39.211.179:8080/admin/components/loading">在线体验点我</a></p> <h3>全屏</h3> <p>通过<code>Dcat.loading</code>方法可以设置一个占满全屏幕的遮罩层,并在中间位置显示<code>loading</code>图标。</p> <p>此方法接收一个<code>object</code>类型的参数:</p> <table> <thead> <tr> <th>参数</th> <th>类型</th> <th>默认值</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td>zIndex</td> <td><code>int</code></td> <td>999991014</td> <td>设置css的z-index(层重叠顺序)样式</td> </tr> <tr> <td>width</td> <td><code>string</code></td> <td>58px</td> <td>设置loading图标宽度</td> </tr> <tr> <td>color</td> <td><code>string</code></td> <td>#bacad6</td> <td>设置loading图标的颜色</td> </tr> <tr> <td>background</td> <td><code>string</code></td> <td>transparent</td> <td>设置遮罩层背景颜色</td> </tr> <tr> <td>style</td> <td><code>string</code></td> <td></td> <td>设置loading图标的css样式</td> </tr> </tbody> </table> <pre><code class="language-js">// 开启loading效果 Dcat.loading(); // 3秒后自动移除loading效果 setTimeout(function () { Dcat.loading(false); })</code></pre> <p>效果</p> <p><img src="https://cdn.learnku.com/uploads/images/202004/26/38389/FIWAUFg1qn.png!large" alt="" /></p> <p>更改loading图标的颜色</p> <pre><code class="language-js">// 更改颜色 Dcat.loading({ color: Dcat.color.primary, });</code></pre> <p><img src="https://cdn.learnku.com/uploads/images/202004/26/38389/WPIC4wwq5Q.png!large" alt="" /></p> <h3>附着于指定元素</h3> <p>通过<code>$.fn.loading</code>方法可以把loading效果附着于当前元素,此方法同样接收一个<code>object</code>类型参数:</p> <table> <thead> <tr> <th>参数</th> <th>类型</th> <th>默认值</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td>zIndex</td> <td><code>int</code></td> <td>100</td> <td>设置css的z-index(层重叠顺序)样式</td> </tr> <tr> <td>width</td> <td><code>string</code></td> <td>52px</td> <td>设置loading图标宽度</td> </tr> <tr> <td>color</td> <td><code>string</code></td> <td>#bacad6</td> <td>设置loading图标的颜色</td> </tr> <tr> <td>background</td> <td><code>string</code></td> <td>#fff</td> <td>设置遮罩层背景颜色</td> </tr> <tr> <td>style</td> <td><code>string</code></td> <td></td> <td>设置loading图标的css样式</td> </tr> </tbody> </table> <pre><code class="language-js">// 开启loading效果 $('#card').loading(); // 关闭loading效果 $('#card').loading(false); // 更改loading图标颜色 $('#card').loading({ color: Dcat.color.primary, }); // 更改遮罩层颜色 $('#card').loading({ background: '#f3f3f3', });</code></pre> <p>效果</p> <p><img src="https://cdn.learnku.com/uploads/images/202004/26/38389/ziHL5feEAV.png!large" alt="" /></p> <h3>按钮</h3> <pre><code class="language-js">// 开启loading效果 $('#submit-button').buttonLoading(); // 关闭loading效果 $('#submit-button').buttonLoading(false);</code></pre> <p>效果 <img src="https://cdn.learnku.com/uploads/images/202004/26/38389/rNMFWAHPqJ.png!large" alt="" /></p> <h3>a标签</h3> <p>点击<code>a</code>标签同样支持loading效果</p> <pre><code class="language-js">// 开启loading效果 $('a').buttonLoading(); // 关闭loading效果 $('a').buttonLoading(false);</code></pre> <p>效果 <img src="https://cdn.learnku.com/uploads/images/202004/26/38389/IE8kGdupKW.png!large" alt="" /></p> <h2>Ajax表单提交</h2> <p><code>Dcat Admin</code>集成了<a href="https://github.com/jquery-form/form">jquery-form</a>组件用于实现<code>ajax</code>提交表单功能。</p> <p>通过<code>Dcat.Form</code>方法可以当即发起<code>ajax</code>提交表单请求,此方法接受一个<code>object</code>类型参数:</p> <table> <thead> <tr> <th>参数</th> <th>类型</th> <th>默认值</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td>form</td> <td><code>string</code></td> <td><code>object</code></td> <td>表单的 jquery 对象或者css选择器</td> </tr> <tr> <td>validate</td> <td><code>bool</code></td> <td><code>false</code></td> <td>是否开启表单验证,可参考<a href="#validate">表单验证</a></td> </tr> <tr> <td>errorClass</td> <td><code>string</code></td> <td>has-error</td> <td>字段验证出错时添加的样式,一般使用默认值即可</td> </tr> <tr> <td>errorContainerSelector</td> <td><code>string</code></td> <td>.with-errors</td> <td>表单错误信息容器css选择器,一般使用默认值即可</td> </tr> <tr> <td>groupSelector</td> <td><code>string</code></td> <td>.form-group,.form-label-group,.form-field</td> <td>表单组css选择器,一般使用默认值即可</td> </tr> <tr> <td>errorTemplate</td> <td><code>string</code></td> <td></td> <td>错误信息模板,使用默认值即可</td> </tr> <tr> <td>autoRedirect</td> <td><code>bool</code></td> <td><code>false</code></td> <td>保存成功后自动跳转</td> </tr> <tr> <td>autoRemoveError</td> <td><code>bool</code></td> <td>true</td> <td>当表单值发生变化时自动移除表单错误信息</td> </tr> <tr> <td>before</td> <td><code>function</code></td> <td></td> <td>表单提交之前事件,返回<code>false</code>可以阻止表单继续提交</td> </tr> <tr> <td>after</td> <td><code>function</code></td> <td></td> <td>单提交之后事件(不论成功还是失败都会触发),返回<code>false</code>可以中止后续逻辑</td> </tr> <tr> <td>success</td> <td><code>function</code></td> <td></td> <td>成功事件(接口返回状态码为<code>200</code>则判断为成功),返回<code>false</code>可以中止后续逻辑</td> </tr> <tr> <td>error</td> <td><code>function</code></td> <td></td> <td>失败事件(接口返回状态码非<code>200</code>则判断为失败),返回<code>false</code>可以中止后续逻辑</td> </tr> </tbody> </table> <h3>基本用法</h3> <pre><code class="language-html">&amp;lt;script&amp;gt; Dcat.ready(function () { // ajax表单提交 $('#login-form').form({ validate: true, //开启表单验证 before: function (fields, form, opt) { // fields 为表单内容 console.log('所有表单字段的值', fields); if (...) { // 返回 false 可以阻止表单继续提交 return false; } }, success: function (response) { // data 为接口返回数据 if (! response.status) { Dcat.error(response.data.message); return false; } Dcat.success(response.data.message); if (data.redirect) { Dcat.reload(response.data.value) } // 中止后续逻辑(默认逻辑) return false; }, error: function (response) { // 当提交表单失败的时候会有默认的处理方法,通常使用默认的方式处理即可 var errorData = JSON.parse(response.responseText); if (errorData) { Dcat.error(errorData.message); } else { console.log('提交出错', response.responseText); } // 终止后续逻辑执行 return false; }, }); }); &amp;lt;/script&amp;gt;</code></pre> <h3>高阶用法</h3> <p>如果你想要实现更细粒度的控制,可以通过类似下面这种方式自己绑定提交按钮,然后提交表单</p> <pre><code class="language-js">var $form = $('#login-form'); // 禁用默认提交 $form.on('submit', function () { return false; }); // ajax表单提交 function submit() { Dcat.Form({ form: $form, success: function (response) { if (! response.status) { Dcat.error(response.data.message); return false; } Dcat.success(response.data.message); location.href = response.data.value; return false; }, error: function () { // 非200状态码响应错误 } }); } // h5表单验证 function validateForm() { $form.validator('validate'); // 如果出现错误,则返回false if ($form.find('.has-error').length &amp;gt; 0) { return false; } return true; } // 绑定登陆按钮点击事件 $form.find('[type=&amp;quot;submit&amp;quot;],.submit').click(function (e) { // 表单验证 if (validateForm() === false) { return false; } // 提交表单 submit(); return false; });</code></pre> <p>&lt;a name=&quot;validate&quot;&gt;&lt;/a&gt;</p> <h3>表单验证</h3> <p><code>Dcat Admin</code>集成了<a href="https://github.com/1000hz/bootstrap-validator">bootstrap-validator</a>组件用于表单前端验证的功能, <a href="https://github.com/1000hz/bootstrap-validator">bootstrap-validator</a>是一款支持H5表单验证的验证器,只需把验证规则写在表单元素的属性上即可自动开启验证,非常方便。</p> <h4>添加验证规则</h4> <pre><code class="language-html">&amp;lt;fieldset class=&amp;quot;form-label-group form-group position-relative has-icon-left&amp;quot;&amp;gt; &amp;lt;input minlength=&amp;quot;5&amp;quot; &amp;lt;!-- 加上验证规则 --&amp;gt; maxlength=&amp;quot;20&amp;quot; &amp;lt;!-- 加上验证规则 --&amp;gt; required &amp;lt;!-- 加上验证规则 --&amp;gt; type=&amp;quot;password&amp;quot; class=&amp;quot;form-control&amp;quot; name=&amp;quot;password&amp;quot; &amp;gt; &amp;lt;div class=&amp;quot;form-control-position&amp;quot;&amp;gt; &amp;lt;i class=&amp;quot;feather icon-lock&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;label for=&amp;quot;password&amp;quot;&amp;gt;{{ trans('admin.password') }}&amp;lt;/label&amp;gt; &amp;lt;!-- 这个加了 .with-errors 样式的 div 即是表单错误信息显示的位置,非常重要 --&amp;gt; &amp;lt;div class=&amp;quot;help-block with-errors&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;/fieldset&amp;gt;</code></pre> <h4>开启表单验证</h4> <pre><code class="language-js">$('#xx-form').form({ validate: true });</code></pre> <p>效果</p> <p><img src="https://cdn.learnku.com/uploads/images/202004/26/38389/wJxcYaC9GP.png!large" alt="" /> <img src="https://cdn.learnku.com/uploads/images/202004/26/38389/qdXUaNEMSQ.png!large" alt="" /></p> <p>&lt;a name=&quot;extend-validator&quot;&gt;&lt;/a&gt;</p> <h4>扩展验证规则</h4> <p>通过<code>Dcat.validator.extend</code>方法可以扩展表单验证规则</p> <pre><code class="language-js">Dcat.validator.extend('maxlength', function ($el) { return $el.val().length &amp;gt; $el.attr('data-maxlength'); });</code></pre> <p>使用自定义规则验证表单</p> <pre><code class="language-html">&amp;lt;input type=&amp;quot;input&amp;quot; class=&amp;quot;form-control&amp;quot; name=&amp;quot;username&amp;quot; data-maxlength=&amp;quot;20&amp;quot; &amp;lt;!-- 使用刚刚自定义的验证规则 --&amp;gt; data-maxlength-error=&amp;quot;已超出输入字符长度限制,请输入20个或以下的字符&amp;quot; &amp;lt;!-- 定义错误信息 --&amp;gt; /&amp;gt;</code></pre> <h4>内置验证规则</h4> <p>更多内置验证规则请参考<a href="http://1000hz.github.io/bootstrap-validator/">bootstrap-validator官方文档</a></p>

页面列表

ITEM_HTML