文件
fenleixinxi/application/admin/controller/fc/Post.php
linda 1ae3109058 feat(admin): 补齐后台管理端全量业务模块(FastAdmin 原生)
一、问题
35 个后台接口此前无任何可用界面:FastAdmin PC 后台 110 条菜单里 0 条业务菜单,
小程序端仅有 1 个 LOGO/图标设置页 → 后台功能实际上无处可操作。

二、方案(FastAdmin 原生机制)
- 用 `php think crud` 为 17 张业务表生成管理模块:
  控制器 application/admin/controller/fc/*.php(继承 Backend)
  模型 application/admin/model/Fc*.php
  视图 application/admin/view/fc/*/{index,add,edit}.html
  后台 JS public/assets/js/backend/fc/*.js
  语言包 application/admin/lang/zh-cn/fc/*.php
- 菜单结构固化进安装器 application/admin/command/FcInstall.php 的 menu()(幂等):
  同城业务 ├─ 内容管理   分类管理/轮播管理/信息管理/评价管理/举报处理
          ├─ 用户与商家 商家管理/会员管理/消息管理
          ├─ 交易管理   订单管理/会员套餐/资金流水/佣金明细/付费查看记录
          ├─ 分销管理   分销关系/提现审核
          └─ 基础数据   服务区域/草稿箱

三、业务动作(一键操作,含列表页按钮)
- fc/post:    audit(审核通过/驳回 + 分类信息量 + 站内信) / offline(下架)
- fc/merchant: audit(资质审核 + 同步用户身份 + 店铺状态)
- fc/withdraw: pay(打款/驳回 + 资金流水 + 拒绝须填原因)
- fc/order:   refund(退款) / supplement(按订单号补单 + 流水)
- fc/comment: reply(回复) / top(置顶)
- fc/report:  handle(标记已处理)

四、验证
- 后台登录后业务页 HTTP 200,controllername/jsname 正确解析
- 列表数据真实加载:分类 8 / 信息 6 / 订单 4 / 提现 3 / 商家 4
- 侧边栏 5 个中文分组菜单正常渲染
2026-10-15 15:20:44 +08:00

115 行
3.6 KiB
PHP

<?php
namespace app\admin\controller\fc;
use app\common\controller\Backend;
use think\Db;
/**
* 同城-信息
*
* @icon fa fa-circle-o
*/
class Post extends Backend
{
/**
* FcPost模型对象
* @var \app\admin\model\FcPost
*/
protected $model = null;
public function _initialize()
{
parent::_initialize();
$this->model = new \app\admin\model\FcPost;
}
/**
* 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
* 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
* 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
*/
/**
* 审核信息
*/
public function audit()
{
$ids = $this->request->post('ids');
$auditStatus = (int)$this->request->post('auditStatus');
$reason = $this->request->post('reason', '');
if (!in_array($auditStatus, [1, 2])) {
$this->error('审核状态仅支持通过(1)/驳回(2)');
}
$ids = is_array($ids) ? $ids : explode(',', (string)$ids);
$ids = array_filter($ids);
if (!$ids) {
$this->error('请选择要审核的信息');
}
$posts = Db::name('fc_post')->where('id', 'in', $ids)->select();
if (!$posts) {
$this->error('信息不存在');
}
foreach ($posts as $post) {
Db::name('fc_post')->where('id', $post['id'])->update([
'audit_status' => $auditStatus,
'audit_reason' => $reason,
'updatetime' => time(),
]);
if ($auditStatus === 1 && !empty($post['category_id'])) {
Db::name('fc_category')->where('id', $post['category_id'])->setInc('post_count');
}
Db::name('fc_message')->insert([
'user_id' => $post['user_id'],
'type' => 'system',
'title' => $auditStatus === 1 ? '审核通过' : '审核驳回',
'content' => $auditStatus === 1
? '您发布的信息「' . $post['title'] . '」已审核通过'
: '您发布的信息「' . $post['title'] . '」审核未通过' . ($reason ? ',原因:' . $reason : ''),
'isread' => 0,
'createtime' => time(),
]);
}
$this->success('审核成功');
}
/**
* 下架信息
*/
public function offline()
{
$ids = $this->request->post('ids');
$ids = is_array($ids) ? $ids : explode(',', (string)$ids);
$ids = array_filter($ids);
if (!$ids) {
$this->error('请选择要下架的信息');
}
$posts = Db::name('fc_post')->where('id', 'in', $ids)->select();
if (!$posts) {
$this->error('信息不存在');
}
foreach ($posts as $post) {
Db::name('fc_post')->where('id', $post['id'])->update([
'status' => 0,
'updatetime' => time(),
]);
Db::name('fc_message')->insert([
'user_id' => $post['user_id'],
'type' => 'system',
'title' => '信息已下架',
'content' => '您发布的信息「' . $post['title'] . '」已被下架',
'isread' => 0,
'createtime' => time(),
]);
}
$this->success('下架成功');
}
}