UserAgentLevel.php 12 KB

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