// +---------------------------------------------------------------------- declare (strict_types = 1); namespace addon\wxchat\controller\backend; use addon\wxchat\model\WxchatTask as WxchatTaskModel; use addon\wxchat\model\WxchatTaskRecord; use think\facade\Db; use think\facade\View; use ywxapp\controller\BackendBase; /** * 任务赚钱 - 后台管理(任务配置 / 参与统计 / 上线开关) */ class WxchatTask extends BackendBase { // 插件后台按框架惯例放宽登录校验(与 mqttbroker 等插件后台一致) protected $noNeedVerify = ['*']; protected function initialize() {} public function index() { if ($this->request->isAjax()) { return $this->lists(); } return View::fetch('wxchattask/index'); } /** * 任务列表(含参与/领取统计) */ public function lists() { $page = (int) $this->request->param('page', 1); $limit = (int) $this->request->param('limit', 15); $kw = trim((string) $this->request->param('keyword', '')); $query = WxchatTaskModel::order('sort', 'asc'); if ($kw !== '') { $query->where('title', 'like', "%{$kw}%"); } $total = $query->count(); $rows = $query->page($page, $limit)->select(); foreach ($rows as $t) { $t->participants = (int) WxchatTaskRecord::where('task_id', $t->id)->count(); $t->claimed = (int) WxchatTaskRecord::where('task_id', $t->id) ->where('status', 2)->count(); } $this->result->setCount($total)->success($rows->toArray()); } /** * 保存(新增/编辑) */ public function save() { $id = (int) $this->request->post('id', 0); $data = $this->request->only( ['title', 'type', 'desc', 'reward_coins', 'target', 'sort', 'status'], 'post' ); $data['reward_coins'] = (int) ($data['reward_coins'] ?? 0); $data['target'] = max(1, (int) ($data['target'] ?? 1)); $data['sort'] = (int) ($data['sort'] ?? 0); $data['status'] = (int) ($data['status'] ?? 1); if ($id) { WxchatTaskModel::where('id', $id)->update($data); } else { $data['create_at'] = time(); (new WxchatTaskModel())->save($data); } $this->result->success([], '保存成功'); } /** * 删除任务(同时清理其进度记录) */ public function del($ids = '') { $ids = $this->request->param('ids', ''); if (! $ids) { $this->result->error('请选择要删除的数据'); } $idArr = array_filter(array_map('intval', explode(',', $ids))); Db::transaction(function () use ($idArr) { WxchatTaskRecord::whereIn('task_id', $idArr)->delete(); WxchatTaskModel::destroy($idArr); }); $this->result->success([], '删除成功'); } }