UserAgentLevel.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. <?php
  2. namespace app\admin\controller\agent;
  3. use app\admin\controller\AuthController;
  4. use think\facade\Route as Url;
  5. use crmeb\traits\CurdControllerTrait;
  6. use app\admin\model\system\SystemUserAgentLevel; // 代理等级配置模型
  7. use app\admin\model\user\UserAgentLevel; // 用户代理等级记录模型
  8. use crmeb\services\{UtilService, JsonService, FormBuilder as Form};
  9. /**
  10. * 代理等级管理
  11. * Class AgentLevel
  12. * @package app\admin\controller\agent
  13. */
  14. class AgentLevel extends AuthController
  15. {
  16. use CurdControllerTrait;
  17. /**
  18. * 代理等级列表页面
  19. * @return \think\response\View
  20. */
  21. public function index()
  22. {
  23. return $this->fetch();
  24. }
  25. /**
  26. * 创建/编辑代理等级表单
  27. * @param int $id 代理等级ID(编辑时传递)
  28. * @return \think\response\View
  29. */
  30. public function create($id = 0)
  31. {
  32. $agentLevel = $id ? SystemUserAgentLevel::get($id) : null;
  33. if ($id && !$agentLevel) {
  34. return JsonService::fail('代理等级不存在');
  35. }
  36. $field = [];
  37. // 等级名称
  38. $field[] = Form::input('name', '代理等级名称', $agentLevel ? $agentLevel->name : '')
  39. ->col(Form::col(24))
  40. ->required('请输入代理等级名称');
  41. // 直推返利比例
  42. $field[] = Form::number('direct_rebates', '直推返利比例(%)', $agentLevel ? $agentLevel->direct_rebates : 0)
  43. ->min(0)->max(100)
  44. ->col(Form::col(8))
  45. ->required('请输入直推返利比例');
  46. // 间接返利比例
  47. $field[] = Form::number('indirect_rebates', '间接返利比例(%)', $agentLevel ? $agentLevel->indirect_rebates : 0)
  48. ->min(0)->max(100)
  49. ->col(Form::col(8))
  50. ->required('请输入间接返利比例');
  51. // 伞下返利比例
  52. $field[] = Form::number('umbrella_rebates', '伞下返利比例(%)', $agentLevel ? $agentLevel->umbrella_rebates : 0)
  53. ->min(0)->max(100)
  54. ->col(Form::col(8))
  55. ->required('请输入伞下返利比例');
  56. // 代理进货折扣
  57. $field[] = Form::number('discount', '代理进货折扣(%)', $agentLevel ? $agentLevel->discount : 0)
  58. ->min(0)->max(100)
  59. ->col(Form::col(8))
  60. ->required('请输入代理进货折扣');
  61. // 是否永久有效
  62. $field[] = Form::radio('is_forever', '是否永久有效', $agentLevel ? $agentLevel->is_forever : 0)
  63. ->options([
  64. ['label' => '永久', 'value' => 1],
  65. ['label' => '非永久', 'value' => 0]
  66. ])
  67. ->col(Form::col(24));
  68. // 有效天数(非永久时必填)
  69. $field[] = Form::number('valid_days', '有效天数', $agentLevel ? $agentLevel->valid_days : 0)
  70. ->min(0)
  71. ->col(Form::col(8))
  72. ->when($agentLevel && $agentLevel->is_forever == 0, function ($form) {
  73. return $form->required('非永久有效时请输入有效天数');
  74. })
  75. ->when(!$agentLevel, function ($form) {
  76. return $form->requiredIf('is_forever', 0, '非永久有效时请输入有效天数');
  77. });
  78. // 等级排序
  79. $field[] = Form::number('grade', '等级排序', $agentLevel ? $agentLevel->grade : 0)
  80. ->min(0)
  81. ->col(Form::col(8))
  82. ->required('请输入等级排序');
  83. // 是否显示
  84. $field[] = Form::radio('is_show', '是否显示', $agentLevel ? $agentLevel->is_show : 1)
  85. ->options([
  86. ['label' => '显示', 'value' => 1],
  87. ['label' => '隐藏', 'value' => 0]
  88. ])
  89. ->col(Form::col(8));
  90. // 返利规则说明
  91. $field[] = Form::textarea('rule_explain', '返利规则说明', $agentLevel ? $agentLevel->rule_explain : '')
  92. ->col(Form::col(24))
  93. ->required('请输入返利规则说明');
  94. // 等级图标
  95. $field[] = Form::frameImageOne('icon', '等级图标', Url::buildUrl('admin/widget.images/index', ['fodder' => 'icon']), $agentLevel ? $agentLevel->icon : '')
  96. ->icon('image')
  97. ->width('100%')
  98. ->height('500px')
  99. ->required('请上传等级图标');
  100. $formTitle = $id ? '编辑代理等级' : '添加代理等级';
  101. $formUrl = Url::buildUrl('save', ['id' => $id]);
  102. $form = Form::make_post_form($formTitle, $field, $formUrl, 2);
  103. $this->assign(compact('form'));
  104. return $this->fetch('public/form-builder');
  105. }
  106. /**
  107. * 保存/编辑代理等级
  108. * @param int $id 代理等级ID(编辑时传递)
  109. * @return \crmeb\services\JsonService
  110. */
  111. public function save($id = 0)
  112. {
  113. $data = UtilService::postMore([
  114. ['name', ''],
  115. ['direct_rebates', 0],
  116. ['indirect_rebates', 0],
  117. ['umbrella_rebates', 0],
  118. ['discount', 0],
  119. ['is_forever', 0],
  120. ['valid_days', 0],
  121. ['grade', 0],
  122. ['is_show', 0],
  123. ['rule_explain', ''],
  124. ['icon', ''],
  125. ]);
  126. // 参数验证
  127. if (empty($data['name'])) return JsonService::fail('请输入代理等级名称');
  128. if ($data['direct_rebates'] < 0 || $data['direct_rebates'] > 100) return JsonService::fail('直推返利比例请输入0-100之间的数值');
  129. if ($data['indirect_rebates'] < 0 || $data['indirect_rebates'] > 100) return JsonService::fail('间接返利比例请输入0-100之间的数值');
  130. if ($data['umbrella_rebates'] < 0 || $data['umbrella_rebates'] > 100) return JsonService::fail('伞下返利比例请输入0-100之间的数值');
  131. if ($data['discount'] < 0 || $data['discount'] > 100) return JsonService::fail('代理进货折扣请输入0-100之间的数值');
  132. if (empty($data['grade'])) return JsonService::fail('请输入等级排序');
  133. if (empty($data['rule_explain'])) return JsonService::fail('请输入返利规则说明');
  134. if (empty($data['icon'])) return JsonService::fail('请上传等级图标');
  135. if ($data['is_forever'] == 0 && empty($data['valid_days'])) return JsonService::fail('非永久有效时,请输入有效天数');
  136. // 等级排序唯一性校验
  137. $exists = SystemUserAgentLevel::where('is_del', 0)
  138. ->where('grade', $data['grade'])
  139. ->when($id, function ($query) use ($id) {
  140. $query->where('id', '<>', $id);
  141. })
  142. ->find();
  143. if ($exists) return JsonService::fail('该等级排序已存在,请更换');
  144. SystemUserAgentLevel::startTrans();
  145. try {
  146. if ($id) {
  147. // 编辑操作
  148. $result = SystemUserAgentLevel::update($data, ['id' => $id]);
  149. } else {
  150. // 新增操作
  151. $data['add_time'] = time();
  152. $result = SystemUserAgentLevel::create($data);
  153. }
  154. if ($result) {
  155. SystemUserAgentLevel::commit();
  156. return JsonService::successful($id ? '修改成功' : '添加成功');
  157. } else {
  158. SystemUserAgentLevel::rollback();
  159. return JsonService::fail($id ? '修改失败' : '添加失败');
  160. }
  161. } catch (\Exception $e) {
  162. SystemUserAgentLevel::rollback();
  163. return JsonService::fail($e->getMessage());
  164. }
  165. }
  166. /**
  167. * 获取代理等级列表(分页+搜索)
  168. * @return \crmeb\services\JsonService
  169. */
  170. public function get_system_agent_list()
  171. {
  172. $where = UtilService::getMore([
  173. ['page', 1],
  174. ['limit', 10],
  175. ['name', ''],
  176. ['is_show', ''],
  177. ]);
  178. $query = SystemUserAgentLevel::where('is_del', 0);
  179. // 名称搜索
  180. if ($where['name']) $query->where('name', 'like', "%{$where['name']}%");
  181. // 显示状态筛选
  182. if ($where['is_show'] !== '') $query->where('is_show', $where['is_show']);
  183. $list = $query->order('grade asc')
  184. ->paginate([
  185. 'page' => $where['page'],
  186. 'list_rows' => $where['limit'],
  187. ]);
  188. return JsonService::successlayui([
  189. 'count' => $list->total(),
  190. 'data' => $list->items(),
  191. ]);
  192. }
  193. /**
  194. * 删除代理等级(软删除)
  195. * @param int $id 代理等级ID
  196. * @return \crmeb\services\JsonService
  197. */
  198. public function delete($id = 0)
  199. {
  200. if (empty($id)) return JsonService::fail('缺少参数ID');
  201. if (SystemUserAgentLevel::update(['is_del' => 1], ['id' => $id])) {
  202. return JsonService::successful('删除成功');
  203. } else {
  204. return JsonService::fail('删除失败');
  205. }
  206. }
  207. /**
  208. * 设置代理等级显示状态
  209. * @param int $is_show 显示状态(1=显示,0=隐藏)
  210. * @param int $id 代理等级ID
  211. * @return \crmeb\services\JsonService
  212. */
  213. public function set_show($is_show = '', $id = '')
  214. {
  215. if (empty($is_show) || empty($id)) return JsonService::fail('缺少参数');
  216. $result = SystemUserAgentLevel::where('id', $id)->update(['is_show' => (int)$is_show]);
  217. return $result ?
  218. JsonService::successful($is_show == 1 ? '显示成功' : '隐藏成功') :
  219. JsonService::fail($is_show == 1 ? '显示失败' : '隐藏失败');
  220. }
  221. /**
  222. * 快速编辑代理等级字段
  223. * @param string $field 字段名
  224. * @param int $id 代理等级ID
  225. * @param mixed $value 字段值
  226. * @return \crmeb\services\JsonService
  227. */
  228. public function set_value($field = '', $id = '', $value = '')
  229. {
  230. if (empty($field) || empty($id) || $value === '') return JsonService::fail('缺少参数');
  231. // 允许编辑的字段白名单
  232. $allowFields = ['grade', 'direct_rebates', 'indirect_rebates', 'umbrella_rebates', 'discount', 'valid_days'];
  233. if (!in_array($field, $allowFields)) return JsonService::fail('不允许修改的字段');
  234. if (SystemUserAgentLevel::where('id', $id)->update([$field => $value])) {
  235. return JsonService::successful('保存成功');
  236. } else {
  237. return JsonService::fail('保存失败');
  238. }
  239. }
  240. /**
  241. * 用户代理等级列表页面
  242. * @return \think\response\View
  243. */
  244. public function user_agent_level_list()
  245. {
  246. $agentLevels = SystemUserAgentLevel::where('is_del', 0)
  247. ->where('is_show', 1)
  248. ->order('grade asc')
  249. ->field('id, name')
  250. ->select();
  251. $this->assign('agentLevels', $agentLevels);
  252. return $this->fetch();
  253. }
  254. /**
  255. * 获取用户代理等级列表(分页+关联用户信息)
  256. * @return \crmeb\services\JsonService
  257. */
  258. public function get_user_agent_list()
  259. {
  260. $where = UtilService::getMore([
  261. ['page', 1],
  262. ['limit', 10],
  263. ['nickname', ''],
  264. ['level_id', ''],
  265. ]);
  266. $list = SystemUserAgentLevel::alias('ual')
  267. ->join('eb_user u', 'ual.uid = u.uid')
  268. ->join('eb_agent_level al', 'ual.level_id = al.id')
  269. ->where('ual.is_del', 0)
  270. ->when($where['nickname'], function ($query) use ($where) {
  271. $query->where('u.nickname', 'like', "%{$where['nickname']}%");
  272. })
  273. ->when($where['level_id'], function ($query) use ($where) {
  274. $query->where('ual.level_id', $where['level_id']);
  275. })
  276. ->field('ual.*, u.nickname, al.name as level_name')
  277. ->order('ual.add_time desc')
  278. ->paginate([
  279. 'page' => $where['page'],
  280. 'list_rows' => $where['limit'],
  281. ]);
  282. return JsonService::successlayui([
  283. 'count' => $list->total(),
  284. 'data' => $list->items(),
  285. ]);
  286. }
  287. }