model = new CardModel(); } public function index() { $page = $this->request->param('page/d', 1); $limit = $this->request->param('limit/d', 15); $cardno = $this->request->param('cardno', ''); $status = $this->request->param('status', ''); if ($this->request->isAjax()) { $query = $this->model->newQuery(); if ($cardno !== '') { $query->where('cardno', 'like', '%' . $cardno . '%'); } if ($status !== '') { $query->where('status', (int)$status); } $list = $query->order('sort', 'desc') ->paginate(['page' => $page, 'list_rows' => $limit]); $items = $list->items(); // 关联兑换会员昵称 $uids = array_filter(array_column($items, 'uid')); $users = []; if (!empty($uids)) { $users = Db::name('member')->whereIn('uid', array_unique($uids)) ->column('nickname,username', 'uid'); } foreach ($items as &$row) { $row['user_name'] = ($row['uid'] > 0 && isset($users[$row['uid']])) ? ($users[$row['uid']]['nickname'] ?: $users[$row['uid']]['username']) : ''; $row['use_time_text'] = $row['use_time'] > 0 ? date('Y-m-d H:i:s', $row['use_time']) : ''; } unset($row); $this->result->setCount($list->total())->success($items); } return $this->fetch(); } /** * 批量生成卡密 */ public function generate() { if (!($this->request->isAjax() && $this->request->isPost())) { $this->result->error('请求方式错误', 405); } $count = (int)$this->request->param('count', 0); $amount = (float)$this->request->param('amount', 0); $prefix = (string)$this->request->param('prefix', ''); if ($count < 1 || $count > 200) { $this->result->error('生成数量需在 1-200 之间'); } if ($amount <= 0) { $this->result->error('面值必须大于 0'); } try { $list = CardModel::generateBatch($count, $amount, $prefix); $this->result->success(['list' => $list], '成功生成 ' . count($list) . ' 张卡密'); } catch (\Throwable $e) { $this->result->error('生成失败:' . $e->getMessage()); } } public function save() { if (! $this->request->isPost()) { $this->result->error('请求方式错误', 405); } $params = $this->request->only(['cardno', 'password', 'amount', 'status', 'use_time', 'sort'], 'post'); try { validate(CardValidate::class)->check($params); $this->model->create($params); $this->result->success('', '添加成功'); } catch (ValidateException $e) { $this->result->error($e->getMessage()); } catch (DbException $e) { $this->result->error('添加失败: ' . $e->getMessage(), 2); } } public function edit($id = null) { $id = $id ?: $this->request->param('id'); $info = $this->model->find($id); if (! $info) { $this->result->error('记录不存在', 404); } $this->result->success(['info' => $info]); } public function update() { if (! ($this->request->isAjax() && $this->request->isPut())) { $this->result->error('请求方式错误', 405); } $params = $this->request->param(); $id = $params['id'] ?? null; $info = $this->model->find($id); if (! $info) { $this->result->error('记录不存在', 404); } $statusOnly = isset($params['status']) && count(array_diff(array_keys($params), ['id', 'status'])) === 0; if (! $statusOnly) { try { validate(CardValidate::class)->check($params); } catch (ValidateException $e) { $this->result->error($e->getMessage()); } } $info->save($params); $this->result->success($info, '更新成功'); } public function recyclebin() { $page = $this->request->param('page/d', 1); $limit = $this->request->param('limit/d', 15); if ($this->request->isAjax()) { $list = $this->model->onlyTrashed() ->order('sort', 'desc') ->paginate(['page' => $page, 'list_rows' => $limit]); $this->result->setCount($list->total())->success($list->items()); } return $this->fetch('card/index'); } public function delete() { if ($this->request->isAjax() && $this->request->isDelete()) { $ids = $this->request->param('ids', ''); $force = $this->request->param('force', false); if (empty($ids)) { $this->result->error('请选择要删除的数据'); } $idsArray = array_filter(explode(',', $ids), 'is_numeric'); if (empty($idsArray)) { $this->result->error('参数错误'); } try { Db::transaction(function () use ($idsArray, $force) { if ($force) { $this->model->onlyTrashed()->whereIn('id', $idsArray)->select() ->each(function ($item) { $item->force()->delete(); }); } else { $this->model->destroy($idsArray); } }); $this->result->success(); } catch (\think\exception\HttpResponseException $e) { throw $e; } catch (\Exception $e) { $this->result->error('删除失败: ' . ($e->getMessage() ?: $e->__toString()), 500); } } } public function restore($ids = '') { if ($this->request->isAjax() && $this->request->isPost()) { $ids = $this->request->param('ids', ''); if (empty($ids)) { $this->result->error('请选择要恢复的数据'); } $idsArray = array_filter(explode(',', $ids), 'is_numeric'); Db::startTrans(); try { $this->model->withTrashed()->where('id', 'in', $idsArray)->select() ->each(function ($item) { $item->restore(); }); Db::commit(); $this->result->success('恢复成功'); } catch (DbException $e) { Db::rollback(); $this->result->error('恢复失败: ' . $e->getMessage()); } } } }