logic = new WechatMiniProgramLogic(); $this->validate = new WechatMiniProgramValidate(); parent::__construct(); } #[Permission('微信小程序列表', 'core:miniProgram:wechat:index')] public function index(Request $request): Response { $where = $request->more([ ['mini_program_name', ''], ['appid', ''], ['partner_account', ''], ]); $query = $this->logic->search($where)->field(self::LIST_FIELDS); if (!$this->isSuperAdmin()) { $query->where('partner_id', '=', $this->adminId); } $data = $this->logic->getList($query); return $this->success($data); } #[Permission('微信小程序详情', 'core:miniProgram:wechat:read')] public function read(Request $request): Response { $id = (int) $request->input('id', 0); if ($id <= 0) { return $this->fail('参数错误'); } return $this->success($this->readAccessibleRecord($id)); } #[Permission('绑定微信小程序', 'core:miniProgram:wechat:save')] public function save(Request $request): Response { $data = $request->post(); $this->validate('save', $data); $username = (string) ($this->adminInfo['username'] ?? ''); $realname = (string) ($this->adminInfo['realname'] ?? ''); $phone = (string) ($this->adminInfo['phone'] ?? ''); $data['partner_id'] = $this->adminId; $data['partner_nickname'] = $realname !== '' ? $realname : $username; $data['partner_account'] = $phone !== '' ? $phone : $username; $data['partner_name'] = $realname !== '' ? $realname : $username; $id = $this->logic->add($data); return $id ? $this->success(['id' => $id], '绑定成功') : $this->fail('绑定失败'); } #[Permission('编辑微信小程序', 'core:miniProgram:wechat:update')] public function update(Request $request): Response { $data = $request->post(); $id = (int) ($data['id'] ?? 0); if ($id <= 0) { return $this->fail('参数错误'); } $this->readAccessibleRecord($id); $this->validate('update', $data); $result = $this->logic->edit($id, $data); return $result !== false ? $this->success('修改成功') : $this->fail('修改失败'); } #[Permission('删除微信小程序', 'core:miniProgram:wechat:destroy')] public function destroy(Request $request): Response { $ids = array_values(array_filter(array_map('intval', (array) $request->post('ids', [])))); if ($ids === []) { return $this->fail('请选择要删除的数据'); } foreach ($ids as $id) { $this->readAccessibleRecord($id); } return $this->logic->destroy($ids) ? $this->success('删除成功') : $this->fail('删除失败'); } private function readAccessibleRecord(int $id): array { $model = $this->logic->read($id); $data = is_array($model) ? $model : $model->toArray(); if (!$this->isSuperAdmin() && (int) ($data['partner_id'] ?? 0) !== $this->adminId) { throw new ApiException('无权访问该小程序配置'); } return $data; } private function isSuperAdmin(): bool { return (int) ($this->adminInfo['is_super'] ?? 0) === 1; } }