|
|
@@ -0,0 +1,315 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace app\admin\controller\agent;
|
|
|
+
|
|
|
+use app\admin\controller\AuthController;
|
|
|
+use think\facade\Route as Url;
|
|
|
+use crmeb\traits\CurdControllerTrait;
|
|
|
+use app\admin\model\system\SystemUserAgentLevel; // 代理等级配置模型
|
|
|
+use app\admin\model\user\UserAgentLevel; // 用户代理等级记录模型
|
|
|
+use crmeb\services\{UtilService, JsonService, FormBuilder as Form};
|
|
|
+
|
|
|
+/**
|
|
|
+ * 代理等级管理
|
|
|
+ * Class AgentLevel
|
|
|
+ * @package app\admin\controller\agent
|
|
|
+ */
|
|
|
+class AgentLevel extends AuthController
|
|
|
+{
|
|
|
+ use CurdControllerTrait;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 代理等级列表页面
|
|
|
+ * @return \think\response\View
|
|
|
+ */
|
|
|
+ public function index()
|
|
|
+ {
|
|
|
+ return $this->fetch();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 创建/编辑代理等级表单
|
|
|
+ * @param int $id 代理等级ID(编辑时传递)
|
|
|
+ * @return \think\response\View
|
|
|
+ */
|
|
|
+ public function create($id = 0)
|
|
|
+ {
|
|
|
+ $agentLevel = $id ? SystemUserAgentLevel::get($id) : null;
|
|
|
+ if ($id && !$agentLevel) {
|
|
|
+ return JsonService::fail('代理等级不存在');
|
|
|
+ }
|
|
|
+
|
|
|
+ $field = [];
|
|
|
+ // 等级名称
|
|
|
+ $field[] = Form::input('name', '代理等级名称', $agentLevel ? $agentLevel->name : '')
|
|
|
+ ->col(Form::col(24))
|
|
|
+ ->required('请输入代理等级名称');
|
|
|
+ // 直推返利比例
|
|
|
+ $field[] = Form::number('direct_rebates', '直推返利比例(%)', $agentLevel ? $agentLevel->direct_rebates : 0)
|
|
|
+ ->min(0)->max(100)
|
|
|
+ ->col(Form::col(8))
|
|
|
+ ->required('请输入直推返利比例');
|
|
|
+ // 间接返利比例
|
|
|
+ $field[] = Form::number('indirect_rebates', '间接返利比例(%)', $agentLevel ? $agentLevel->indirect_rebates : 0)
|
|
|
+ ->min(0)->max(100)
|
|
|
+ ->col(Form::col(8))
|
|
|
+ ->required('请输入间接返利比例');
|
|
|
+ // 伞下返利比例
|
|
|
+ $field[] = Form::number('umbrella_rebates', '伞下返利比例(%)', $agentLevel ? $agentLevel->umbrella_rebates : 0)
|
|
|
+ ->min(0)->max(100)
|
|
|
+ ->col(Form::col(8))
|
|
|
+ ->required('请输入伞下返利比例');
|
|
|
+ // 代理进货折扣
|
|
|
+ $field[] = Form::number('discount', '代理进货折扣(%)', $agentLevel ? $agentLevel->discount : 0)
|
|
|
+ ->min(0)->max(100)
|
|
|
+ ->col(Form::col(8))
|
|
|
+ ->required('请输入代理进货折扣');
|
|
|
+ // 是否永久有效
|
|
|
+ $field[] = Form::radio('is_forever', '是否永久有效', $agentLevel ? $agentLevel->is_forever : 0)
|
|
|
+ ->options([
|
|
|
+ ['label' => '永久', 'value' => 1],
|
|
|
+ ['label' => '非永久', 'value' => 0]
|
|
|
+ ])
|
|
|
+ ->col(Form::col(24));
|
|
|
+ // 有效天数(非永久时必填)
|
|
|
+ $field[] = Form::number('valid_days', '有效天数', $agentLevel ? $agentLevel->valid_days : 0)
|
|
|
+ ->min(0)
|
|
|
+ ->col(Form::col(8))
|
|
|
+ ->when($agentLevel && $agentLevel->is_forever == 0, function ($form) {
|
|
|
+ return $form->required('非永久有效时请输入有效天数');
|
|
|
+ })
|
|
|
+ ->when(!$agentLevel, function ($form) {
|
|
|
+ return $form->requiredIf('is_forever', 0, '非永久有效时请输入有效天数');
|
|
|
+ });
|
|
|
+ // 等级排序
|
|
|
+ $field[] = Form::number('grade', '等级排序', $agentLevel ? $agentLevel->grade : 0)
|
|
|
+ ->min(0)
|
|
|
+ ->col(Form::col(8))
|
|
|
+ ->required('请输入等级排序');
|
|
|
+ // 是否显示
|
|
|
+ $field[] = Form::radio('is_show', '是否显示', $agentLevel ? $agentLevel->is_show : 1)
|
|
|
+ ->options([
|
|
|
+ ['label' => '显示', 'value' => 1],
|
|
|
+ ['label' => '隐藏', 'value' => 0]
|
|
|
+ ])
|
|
|
+ ->col(Form::col(8));
|
|
|
+ // 返利规则说明
|
|
|
+ $field[] = Form::textarea('rule_explain', '返利规则说明', $agentLevel ? $agentLevel->rule_explain : '')
|
|
|
+ ->col(Form::col(24))
|
|
|
+ ->required('请输入返利规则说明');
|
|
|
+ // 等级图标
|
|
|
+ $field[] = Form::frameImageOne('icon', '等级图标', Url::buildUrl('admin/widget.images/index', ['fodder' => 'icon']), $agentLevel ? $agentLevel->icon : '')
|
|
|
+ ->icon('image')
|
|
|
+ ->width('100%')
|
|
|
+ ->height('500px')
|
|
|
+ ->required('请上传等级图标');
|
|
|
+
|
|
|
+ $formTitle = $id ? '编辑代理等级' : '添加代理等级';
|
|
|
+ $formUrl = Url::buildUrl('save', ['id' => $id]);
|
|
|
+ $form = Form::make_post_form($formTitle, $field, $formUrl, 2);
|
|
|
+
|
|
|
+ $this->assign(compact('form'));
|
|
|
+ return $this->fetch('public/form-builder');
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 保存/编辑代理等级
|
|
|
+ * @param int $id 代理等级ID(编辑时传递)
|
|
|
+ * @return \crmeb\services\JsonService
|
|
|
+ */
|
|
|
+ public function save($id = 0)
|
|
|
+ {
|
|
|
+ $data = UtilService::postMore([
|
|
|
+ ['name', ''],
|
|
|
+ ['direct_rebates', 0],
|
|
|
+ ['indirect_rebates', 0],
|
|
|
+ ['umbrella_rebates', 0],
|
|
|
+ ['discount', 0],
|
|
|
+ ['is_forever', 0],
|
|
|
+ ['valid_days', 0],
|
|
|
+ ['grade', 0],
|
|
|
+ ['is_show', 0],
|
|
|
+ ['rule_explain', ''],
|
|
|
+ ['icon', ''],
|
|
|
+ ]);
|
|
|
+
|
|
|
+ // 参数验证
|
|
|
+ if (empty($data['name'])) return JsonService::fail('请输入代理等级名称');
|
|
|
+ if ($data['direct_rebates'] < 0 || $data['direct_rebates'] > 100) return JsonService::fail('直推返利比例请输入0-100之间的数值');
|
|
|
+ if ($data['indirect_rebates'] < 0 || $data['indirect_rebates'] > 100) return JsonService::fail('间接返利比例请输入0-100之间的数值');
|
|
|
+ if ($data['umbrella_rebates'] < 0 || $data['umbrella_rebates'] > 100) return JsonService::fail('伞下返利比例请输入0-100之间的数值');
|
|
|
+ if ($data['discount'] < 0 || $data['discount'] > 100) return JsonService::fail('代理进货折扣请输入0-100之间的数值');
|
|
|
+ if (empty($data['grade'])) return JsonService::fail('请输入等级排序');
|
|
|
+ if (empty($data['rule_explain'])) return JsonService::fail('请输入返利规则说明');
|
|
|
+ if (empty($data['icon'])) return JsonService::fail('请上传等级图标');
|
|
|
+ if ($data['is_forever'] == 0 && empty($data['valid_days'])) return JsonService::fail('非永久有效时,请输入有效天数');
|
|
|
+
|
|
|
+ // 等级排序唯一性校验
|
|
|
+ $exists = SystemUserAgentLevel::where('is_del', 0)
|
|
|
+ ->where('grade', $data['grade'])
|
|
|
+ ->when($id, function ($query) use ($id) {
|
|
|
+ $query->where('id', '<>', $id);
|
|
|
+ })
|
|
|
+ ->find();
|
|
|
+ if ($exists) return JsonService::fail('该等级排序已存在,请更换');
|
|
|
+
|
|
|
+ SystemUserAgentLevel::startTrans();
|
|
|
+ try {
|
|
|
+ if ($id) {
|
|
|
+ // 编辑操作
|
|
|
+ $result = SystemUserAgentLevel::update($data, ['id' => $id]);
|
|
|
+ } else {
|
|
|
+ // 新增操作
|
|
|
+ $data['add_time'] = time();
|
|
|
+ $result = SystemUserAgentLevel::create($data);
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($result) {
|
|
|
+ SystemUserAgentLevel::commit();
|
|
|
+ return JsonService::successful($id ? '修改成功' : '添加成功');
|
|
|
+ } else {
|
|
|
+ SystemUserAgentLevel::rollback();
|
|
|
+ return JsonService::fail($id ? '修改失败' : '添加失败');
|
|
|
+ }
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ SystemUserAgentLevel::rollback();
|
|
|
+ return JsonService::fail($e->getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取代理等级列表(分页+搜索)
|
|
|
+ * @return \crmeb\services\JsonService
|
|
|
+ */
|
|
|
+ public function get_system_agent_list()
|
|
|
+ {
|
|
|
+ $where = UtilService::getMore([
|
|
|
+ ['page', 1],
|
|
|
+ ['limit', 10],
|
|
|
+ ['name', ''],
|
|
|
+ ['is_show', ''],
|
|
|
+ ]);
|
|
|
+
|
|
|
+ $query = SystemUserAgentLevel::where('is_del', 0);
|
|
|
+ // 名称搜索
|
|
|
+ if ($where['name']) $query->where('name', 'like', "%{$where['name']}%");
|
|
|
+ // 显示状态筛选
|
|
|
+ if ($where['is_show'] !== '') $query->where('is_show', $where['is_show']);
|
|
|
+
|
|
|
+ $list = $query->order('grade asc')
|
|
|
+ ->paginate([
|
|
|
+ 'page' => $where['page'],
|
|
|
+ 'list_rows' => $where['limit'],
|
|
|
+ ]);
|
|
|
+
|
|
|
+ return JsonService::successlayui([
|
|
|
+ 'count' => $list->total(),
|
|
|
+ 'data' => $list->items(),
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 删除代理等级(软删除)
|
|
|
+ * @param int $id 代理等级ID
|
|
|
+ * @return \crmeb\services\JsonService
|
|
|
+ */
|
|
|
+ public function delete($id = 0)
|
|
|
+ {
|
|
|
+ if (empty($id)) return JsonService::fail('缺少参数ID');
|
|
|
+
|
|
|
+ if (SystemUserAgentLevel::update(['is_del' => 1], ['id' => $id])) {
|
|
|
+ return JsonService::successful('删除成功');
|
|
|
+ } else {
|
|
|
+ return JsonService::fail('删除失败');
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设置代理等级显示状态
|
|
|
+ * @param int $is_show 显示状态(1=显示,0=隐藏)
|
|
|
+ * @param int $id 代理等级ID
|
|
|
+ * @return \crmeb\services\JsonService
|
|
|
+ */
|
|
|
+ public function set_show($is_show = '', $id = '')
|
|
|
+ {
|
|
|
+ if (empty($is_show) || empty($id)) return JsonService::fail('缺少参数');
|
|
|
+
|
|
|
+ $result = SystemUserAgentLevel::where('id', $id)->update(['is_show' => (int)$is_show]);
|
|
|
+ return $result ?
|
|
|
+ JsonService::successful($is_show == 1 ? '显示成功' : '隐藏成功') :
|
|
|
+ JsonService::fail($is_show == 1 ? '显示失败' : '隐藏失败');
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 快速编辑代理等级字段
|
|
|
+ * @param string $field 字段名
|
|
|
+ * @param int $id 代理等级ID
|
|
|
+ * @param mixed $value 字段值
|
|
|
+ * @return \crmeb\services\JsonService
|
|
|
+ */
|
|
|
+ public function set_value($field = '', $id = '', $value = '')
|
|
|
+ {
|
|
|
+ if (empty($field) || empty($id) || $value === '') return JsonService::fail('缺少参数');
|
|
|
+
|
|
|
+ // 允许编辑的字段白名单
|
|
|
+ $allowFields = ['grade', 'direct_rebates', 'indirect_rebates', 'umbrella_rebates', 'discount', 'valid_days'];
|
|
|
+ if (!in_array($field, $allowFields)) return JsonService::fail('不允许修改的字段');
|
|
|
+
|
|
|
+ if (SystemUserAgentLevel::where('id', $id)->update([$field => $value])) {
|
|
|
+ return JsonService::successful('保存成功');
|
|
|
+ } else {
|
|
|
+ return JsonService::fail('保存失败');
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 用户代理等级列表页面
|
|
|
+ * @return \think\response\View
|
|
|
+ */
|
|
|
+ public function user_agent_level_list()
|
|
|
+ {
|
|
|
+ $agentLevels = SystemUserAgentLevel::where('is_del', 0)
|
|
|
+ ->where('is_show', 1)
|
|
|
+ ->order('grade asc')
|
|
|
+ ->field('id, name')
|
|
|
+ ->select();
|
|
|
+ $this->assign('agentLevels', $agentLevels);
|
|
|
+ return $this->fetch();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取用户代理等级列表(分页+关联用户信息)
|
|
|
+ * @return \crmeb\services\JsonService
|
|
|
+ */
|
|
|
+ public function get_user_agent_list()
|
|
|
+ {
|
|
|
+ $where = UtilService::getMore([
|
|
|
+ ['page', 1],
|
|
|
+ ['limit', 10],
|
|
|
+ ['nickname', ''],
|
|
|
+ ['level_id', ''],
|
|
|
+ ]);
|
|
|
+
|
|
|
+ $list = SystemUserAgentLevel::alias('ual')
|
|
|
+ ->join('eb_user u', 'ual.uid = u.uid')
|
|
|
+ ->join('eb_agent_level al', 'ual.level_id = al.id')
|
|
|
+ ->where('ual.is_del', 0)
|
|
|
+ ->when($where['nickname'], function ($query) use ($where) {
|
|
|
+ $query->where('u.nickname', 'like', "%{$where['nickname']}%");
|
|
|
+ })
|
|
|
+ ->when($where['level_id'], function ($query) use ($where) {
|
|
|
+ $query->where('ual.level_id', $where['level_id']);
|
|
|
+ })
|
|
|
+ ->field('ual.*, u.nickname, al.name as level_name')
|
|
|
+ ->order('ual.add_time desc')
|
|
|
+ ->paginate([
|
|
|
+ 'page' => $where['page'],
|
|
|
+ 'list_rows' => $where['limit'],
|
|
|
+ ]);
|
|
|
+
|
|
|
+ return JsonService::successlayui([
|
|
|
+ 'count' => $list->total(),
|
|
|
+ 'data' => $list->items(),
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+}
|