JS组件

Dcat Admin内置了一些常用的JS功能组件,通过全局变量Dcat可以访问到这些功能方法。

监听JS脚本加载完毕事件

通过Dcat.ready方法设置的回调函数会在所有的JS脚本都加载完毕后执行。

{tip} 只有在模板文件中写JS代码才需要使用Dcat.ready,当在php代码中使用Dcat\Admin\Admin::script方法添加JS代码时是不需要使用Dcat.ready方法的。因为在构建页面的时候系统会自动把代码放在Dcat.ready事件内执行。

  1. <div>...</div>
  2. <script>
  3. Dcat.ready(function () {
  4. // 写你的逻辑
  5. console.log('所有JS脚本都加载完了');
  6. });
  7. </script>

手动触发JS脚本加载完毕事件

通过Dcat.triggerReady方法可以手动触发JS脚本加载完毕事件,这就意味着会自动执行在此之前所有通过Dcat.ready方法设置的回调函数。

{tip} 这个功能普通开发很少会用到,只有一些比较深度的组件定制会用到,比如表单弹窗功能就用到了此方法。

  1. Dcat.triggerReady();

Pjax刷新页面

通过Dcat.reload方法可以调用Pjax.reload方法实现页面刷新和跳转功能。

刷新当前页面

  1. Admin::script(
  2. <<<JS
  3. // 3秒后刷新当前页面
  4. setTimeout(function () {
  5. Dcat.reload();
  6. }, 3000);
  7. JS
  8. );

跳转页面

  1. $url = admin_url('auth/users');
  2. Admin::script(
  3. <<<JS
  4. // 3秒后跳转到 admin/auth/users 页面
  5. setTimeout(function () {
  6. Dcat.reload('{$url}');
  7. }, 3000);
  8. JS
  9. );

Toastr提示框

Dcat Admin集成了Toastr插件,下面是使用方法

success

  1. Dcat.success('更新成功');
  2. // 使用标题
  3. Dcat.success('更新成功', '我是标题');
  4. // 传递参数
  5. Dcat.success('更新成功', null, {
  6. timeOut: 5000, // 5秒后自动消失
  7. });

JS组件 - 图1

error

  1. Dcat.error('服务器出现未知错误');
  2. // 使用标题
  3. Dcat.error('服务器出现未知错误', '我是标题');
  4. // 传递参数
  5. Dcat.error('服务器出现未知错误', null, {
  6. timeOut: 5000, // 5秒后自动消失
  7. });

warning

  1. Dcat.error('警告');
  2. // 使用标题
  3. Dcat.error('警告', '我是标题');
  4. // 传递参数
  5. Dcat.error('警告', null, {
  6. timeOut: 5000, // 5秒后自动消失
  7. });

info

  1. Dcat.error('提示信息');
  2. // 使用标题
  3. Dcat.error('提示信息', '我是标题');
  4. // 传递参数
  5. Dcat.error('提示信息', null, {
  6. timeOut: 5000, // 5秒后自动消失
  7. });

更多用法请参考toastr官方文档

sweetalert2弹窗

Dcat Admin集成了sweetalert2插件,下面是使用方法

confirm

通过Dcat.confirm方法可以弹出确认弹窗,此方法接收5个参数

  • title string 确认信息标题
  • message string 确认信息内容,此参数可以不传
  • success function 点击确认按钮触发的回调函数
  • fail function 点击取消按钮触发的回调函数,此参数可以不传
  • options object 配置参数,可参考sweetalert2官方文档
  1. Dcat.confirm('确认要删除这行数据吗?', null, function () {
  2. console.log('确认删除');
  3. $.post(...);
  4. });

JS组件 - 图2

success

  1. Dcat.swal.success('标题');
  2. Dcat.swal.success('标题', '内容');
  3. Dcat.swal.success('标题', '内容', {
  4. ...
  5. });

JS组件 - 图3

error

  1. Dcat.swal.error('标题');
  2. Dcat.swal.error('标题', '内容');
  3. Dcat.swal.error('标题', '内容', {
  4. ...
  5. });

JS组件 - 图4

warning

  1. Dcat.swal.warning('标题');
  2. Dcat.swal.warning('标题', '内容');
  3. Dcat.swal.warning('标题', '内容', {
  4. ...
  5. });

JS组件 - 图5

info

  1. Dcat.swal.info('标题');
  2. Dcat.swal.info('标题', '内容');
  3. Dcat.swal.info('标题', '内容', {
  4. ...
  5. });

更多用法请参考sweetalert2官方文档

layer弹出层

Dcat Admin集成了layer弹出层,用法请参考官方文档

  1. layer.open({
  2. ...
  3. })

Loading效果

Dcat Admin集成了三种常见的loading效果,在线体验点我

全屏

通过Dcat.loading方法可以设置一个占满全屏幕的遮罩层,并在中间位置显示loading图标。

此方法接收一个object类型的参数:

参数 类型 默认值 描述
zIndex int 999991014 设置css的z-index(层重叠顺序)样式
width string 58px 设置loading图标宽度
color string #bacad6 设置loading图标的颜色
background string transparent 设置遮罩层背景颜色
style string 设置loading图标的css样式
  1. // 开启loading效果
  2. Dcat.loading();
  3. // 3秒后自动移除loading效果
  4. setTimeout(function () {
  5. Dcat.loading(false);
  6. })

效果

JS组件 - 图6

更改loading图标的颜色

  1. // 更改颜色
  2. Dcat.loading({
  3. color: Dcat.color.primary,
  4. });

JS组件 - 图7

附着于指定元素

通过$.fn.loading方法可以把loading效果附着于当前元素,此方法同样接收一个object类型参数:

参数 类型 默认值 描述
zIndex int 100 设置css的z-index(层重叠顺序)样式
width string 52px 设置loading图标宽度
color string #bacad6 设置loading图标的颜色
background string #fff 设置遮罩层背景颜色
style string 设置loading图标的css样式
  1. // 开启loading效果
  2. $('#card').loading();
  3. // 关闭loading效果
  4. $('#card').loading(false);
  5. // 更改loading图标颜色
  6. $('#card').loading({
  7. color: Dcat.color.primary,
  8. });
  9. // 更改遮罩层颜色
  10. $('#card').loading({
  11. background: '#f3f3f3',
  12. });

效果

JS组件 - 图8

按钮

  1. // 开启loading效果
  2. $('#submit-button').buttonLoading();
  3. // 关闭loading效果
  4. $('#submit-button').buttonLoading(false);

效果 JS组件 - 图9

a标签

点击a标签同样支持loading效果

  1. // 开启loading效果
  2. $('a').buttonLoading();
  3. // 关闭loading效果
  4. $('a').buttonLoading(false);

效果 JS组件 - 图10

Ajax表单提交

Dcat Admin集成了jquery-form组件用于实现ajax提交表单功能。

通过Dcat.Form方法可以当即发起ajax提交表单请求,此方法接受一个object类型参数:

参数 类型 默认值 描述
form string object 表单的 jquery 对象或者css选择器
validate bool false 是否开启表单验证,可参考表单验证
errorClass string has-error 字段验证出错时添加的样式,一般使用默认值即可
errorContainerSelector string .with-errors 表单错误信息容器css选择器,一般使用默认值即可
groupSelector string .form-group,.form-label-group,.form-field 表单组css选择器,一般使用默认值即可
errorTemplate string 错误信息模板,使用默认值即可
autoRedirect bool false 保存成功后自动跳转
autoRemoveError bool true 当表单值发生变化时自动移除表单错误信息
before function 表单提交之前事件,返回false可以阻止表单继续提交
after function 单提交之后事件(不论成功还是失败都会触发),返回false可以中止后续逻辑
success function 成功事件(接口返回状态码为200则判断为成功),返回false可以中止后续逻辑
error function 失败事件(接口返回状态码非200则判断为失败),返回false可以中止后续逻辑

基本用法

  1. <script>
  2. Dcat.ready(function () {
  3. // ajax表单提交
  4. $('#login-form').form({
  5. validate: true, //开启表单验证
  6. before: function (fields, form, opt) {
  7. // fields 为表单内容
  8. console.log('所有表单字段的值', fields);
  9. if (...) {
  10. // 返回 false 可以阻止表单继续提交
  11. return false;
  12. }
  13. },
  14. success: function (data) {
  15. // data 为接口返回数据
  16. if (! data.status) {
  17. Dcat.error(data.message);
  18. return false;
  19. }
  20. Dcat.success(data.message);
  21. if (data.redirect) {
  22. Dcat.reload(data.redirect)
  23. }
  24. // 中止后续逻辑(默认逻辑)
  25. return false;
  26. },
  27. error: function (response) {
  28. // 当提交表单失败的时候会有默认的处理方法,通常使用默认的方式处理即可
  29. var errorData = JSON.parse(response.responseText);
  30. if (errorData) {
  31. Dcat.error(errorData.message);
  32. } else {
  33. console.log('提交出错', response.responseText);
  34. }
  35. // 终止后续逻辑执行
  36. return false;
  37. },
  38. });
  39. });
  40. </script>

高阶用法

如果你想要实现更细粒度的控制,可以通过类似下面这种方式自己绑定提交按钮,然后提交表单

  1. var $form = $('#login-form');
  2. // 禁用默认提交
  3. $form.on('submit', function () {
  4. return false;
  5. });
  6. // ajax表单提交
  7. function submit() {
  8. Dcat.Form({
  9. form: $form,
  10. success: function (data) {
  11. if (! data.status) {
  12. Dcat.error(data.message);
  13. return false;
  14. }
  15. Dcat.success(data.message);
  16. location.href = data.redirect;
  17. return false;
  18. },
  19. error: function () {
  20. // 非200状态码响应错误
  21. }
  22. });
  23. }
  24. // h5表单验证
  25. function validateForm() {
  26. $form.validator('validate');
  27. // 如果出现错误,则返回false
  28. if ($form.find('.has-error').length > 0) {
  29. return false;
  30. }
  31. return true;
  32. }
  33. // 绑定登陆按钮点击事件
  34. $form.find('[type="submit"],.submit').click(function (e) {
  35. // 表单验证
  36. if (validateForm() === false) {
  37. return false;
  38. }
  39. // 提交表单
  40. submit();
  41. return false;
  42. });

表单验证

Dcat Admin集成了bootstrap-validator组件用于表单前端验证的功能, bootstrap-validator是一款支持H5表单验证的验证器,只需把验证规则写在表单元素的属性上即可自动开启验证,非常方便。

添加验证规则

  1. <fieldset class="form-label-group form-group position-relative has-icon-left">
  2. <input
  3. minlength="5" <!-- 加上验证规则 -->
  4. maxlength="20" <!-- 加上验证规则 -->
  5. required <!-- 加上验证规则 -->
  6. type="password"
  7. class="form-control"
  8. name="password"
  9. >
  10. <div class="form-control-position">
  11. <i class="feather icon-lock"></i>
  12. </div>
  13. <label for="password">{{ trans('admin.password') }}</label>
  14. <!-- 这个加了 .with-errors 样式的 div 即是表单错误信息显示的位置,非常重要 -->
  15. <div class="help-block with-errors"></div>
  16. </fieldset>

开启表单验证

  1. $('#xx-form').form({
  2. validate: true
  3. });

效果

JS组件 - 图11 JS组件 - 图12

扩展验证规则

通过Dcat.validator.extend方法可以扩展表单验证规则

  1. Dcat.validator.extend('maxlength', function ($el) {
  2. return $el.val().length > $el.attr('data-maxlength');
  3. });

使用自定义规则验证表单

  1. <input
  2. type="input"
  3. class="form-control"
  4. name="username"
  5. data-maxlength="20" <!-- 使用刚刚自定义的验证规则 -->
  6. data-maxlength-error="已超出输入字符长度限制,请输入20个或以下的字符" <!-- 定义错误信息 -->
  7. />

内置验证规则

更多内置验证规则请参考bootstrap-validator官方文档