FeedBackCategoryRepository.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2016~2024 https://www.crmeb.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  8. // +----------------------------------------------------------------------
  9. // | Author: CRMEB Team <admin@crmeb.com>
  10. // +----------------------------------------------------------------------
  11. namespace app\common\repositories\user;
  12. use app\common\dao\user\FeedbackCateoryDao as dao;
  13. use app\common\repositories\BaseRepository;
  14. use crmeb\traits\CategoresRepository;
  15. use FormBuilder\Form;
  16. use think\facade\Route;
  17. use FormBuilder\Factory\Elm;
  18. class FeedBackCategoryRepository extends BaseRepository
  19. {
  20. use CategoresRepository;
  21. /**
  22. * @param FeedbackDao $dao
  23. */
  24. public function __construct(dao $dao)
  25. {
  26. $this->dao = $dao;
  27. }
  28. /**
  29. * 创建或编辑反馈分类表单
  30. *
  31. * 本函数用于生成一个用于创建或编辑反馈分类的表单。表单包含必要的字段和规则,
  32. * 以及根据当前操作是创建还是编辑来设置表单的行为和标题。
  33. *
  34. * @param int $merId 商户ID,当前操作的商户标识
  35. * @param int|null $id 分类ID,如果为null则表示创建新分类,否则表示编辑已存在的分类
  36. * @param array $formData 表单数据数组,用于预填充表单字段的值
  37. * @return Form|\think\form\Form
  38. */
  39. public function form(int $merId, $id = null, array $formData = [])
  40. {
  41. // 根据$id的值决定创建还是编辑表单的提交URL
  42. $url = is_null($id) ? Route::buildUrl('systemUserFeedBackCategoryCreate')->build() : Route::buildUrl('systemUserFeedBackCategoryUpdate', ['id' => $id])->build();
  43. $form = Elm::createForm($url);
  44. // 设置表单验证规则
  45. $form->setRule([
  46. // 选择上级分类,使用级联选择器,动态获取分类选项并排除当前分类
  47. Elm::cascader('pid','上级分类:')->options(function()use($id,$merId){
  48. $menus = $this->dao->getAllOptions(null);
  49. if ($id && isset($menus[$id])) unset($menus[$id]);
  50. $menus = formatCascaderData($menus, 'cate_name');
  51. array_unshift($menus, ['label' => '顶级分类', 'value' => 0]);
  52. return $menus;
  53. })->props(['props' => ['checkStrictly' => true, 'emitPath' => false]]),
  54. // 输入分类名称,必填字段
  55. Elm::input('cate_name', '分类名称:')->placeholder('请输入分类名称')->required(),
  56. // 开关切换,用于设置分类是否显示
  57. Elm::switches('is_show','是否显示:', 1)->activeValue(1)->inactiveValue(0)->inactiveText('关')->activeText('开'),
  58. // 数字输入框,用于设置分类的排序值
  59. Elm::number('sort', '排序:', 0)->precision(0)->max(99999),
  60. ]);
  61. // 设置表单标题,并返回表单对象
  62. return $form->setTitle(is_null($id) ? '添加分类' : '编辑分类')->formData($formData);
  63. }
  64. /**
  65. * 更新表单数据的方法
  66. *
  67. * 本方法用于根据给定的商户ID和表单ID来更新表单数据。它首先通过ID获取现有的表单数据,
  68. * 然后使用这些数据来构建一个新的表单实例,最后返回这个新实例。
  69. * 这种做法允许用户在前端界面直接编辑并更新表单数据,而无需直接操作数据库。
  70. *
  71. * @param int $merId 商户ID,用于确定表单所属的商户。
  72. * @param int $id 表单ID,用于唯一标识待更新的表单。
  73. * @return mixed 返回更新后的表单数据实例,具体类型取决于表单数据的实现。
  74. */
  75. public function updateForm(int $merId,int $id)
  76. {
  77. // 通过ID获取当前表单的数据,并转换为数组格式
  78. // 这里的$this->dao->get($id)用于从数据层获取指定ID的表单数据
  79. // $this->form($merId, $id, ...)则用于构建并返回一个新的表单实例
  80. return $this->form($merId,$id,$this->dao->get($id)->toArray());
  81. }
  82. /**
  83. * 切换实体状态
  84. *
  85. * 本函数用于通过指定的ID和新状态来更新实体的显示状态。它调用DAO层的方法来执行实际的数据库更新操作。
  86. * 主要用于在应用程序中切换各种实体(如文章、产品等)的可见性或激活状态。
  87. *
  88. * @param int $id 实体的唯一标识符。此ID用于在数据库中定位特定的实体记录。
  89. * @param int $status 新的状态值。这通常是一个二进制值(0或1),表示实体的显示状态(如:0表示隐藏,1表示显示)。
  90. */
  91. public function switchStatus(int $id,int $status)
  92. {
  93. // 调用DAO对象的update方法,更新指定ID的实体记录的状态字段
  94. $this->dao->update($id,['is_show' => $status]);
  95. }
  96. }