| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311 |
- <?php
- namespace app\admin\controller\user;
- use app\admin\controller\AuthController;
- use think\facade\Route as Url;
- use crmeb\traits\CurdControllerTrait;
- use app\admin\model\system\SystemUserAgentLevel; // 代理等级配置模型
- use crmeb\services\{UtilService, JsonService, FormBuilder as Form};
- /**
- * 代理等级管理
- * Class AgentLevel
- * @package app\admin\controller\agent
- */
- class UserAgentLevel 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));
- // 间接返利比例
- $field[] = Form::number('indirect_rebates', '间接返利比例(%)', $agentLevel ? $agentLevel->indirect_rebates : 0)
- ->min(0)->max(100)
- ->col(Form::col(8));
- // 伞下返利比例
- $field[] = Form::number('umbrella_rebates', '伞下返利比例(%)', $agentLevel ? $agentLevel->umbrella_rebates : 0)
- ->min(0)->max(100)
- ->col(Form::col(8));
- // 代理进货折扣
- // $field[] = Form::number('discount', '代理进货折扣(%)', $agentLevel ? $agentLevel->discount : 0)
- // ->min(0)->max(100)
- // ->col(Form::col(8));
- // 是否永久有效
- // $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));
- // // 等级图标
- // $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'];
- 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(),
- ]);
- }
- }
|