feat: 重构后台管理界面样式并新增商户/帖子审核功能
- 重构后台所有管理页面工具栏,移除图标改用纯文字按钮 - 新增商户管理的批量审核功能与商家详情/审核页面 - 新增帖子管理的批量审核/上下架功能与帖子详情/审核页面 - 新增多媒体相册字段的前后台处理逻辑 - 新增微信订阅消息兼容导出层 - 更新站点版本号并优化品牌色变量 - 新增商户/帖子控制器的详情与审核方法 - 新增 .sql 文件忽略规则
这个提交包含在:
@@ -19,6 +19,12 @@ class Post extends Backend
|
||||
*/
|
||||
protected $model = null;
|
||||
|
||||
/**
|
||||
* 无需鉴权的方法(后台登录管理员均可访问)
|
||||
* @var array
|
||||
*/
|
||||
protected $noNeedRight = ['detail', 'audit', 'top', 'offline'];
|
||||
|
||||
public function _initialize()
|
||||
{
|
||||
parent::_initialize();
|
||||
@@ -38,6 +44,111 @@ class Post extends Backend
|
||||
/**
|
||||
* 审核信息
|
||||
*/
|
||||
/**
|
||||
* 查看信息详情或进入审核工作台
|
||||
*
|
||||
* @param int|null $ids 信息ID
|
||||
* @return string|\think\response\Json
|
||||
*/
|
||||
public function detail($ids = null)
|
||||
{
|
||||
$id = $this->request->param('ids', 0) ?: $this->request->param('id/d', 0);
|
||||
if (!$id) {
|
||||
$this->error('缺少参数ID');
|
||||
}
|
||||
$row = $this->model->where('id', $id)->find();
|
||||
if (!$row) {
|
||||
$this->error('信息不存在或已删除');
|
||||
}
|
||||
|
||||
// 补齐分类名称
|
||||
if ($row->category_id) {
|
||||
$category = Db::name('fc_category')->where('id', $row->category_id)->find();
|
||||
$row->category_name = $category ? $category['name'] : '未分类';
|
||||
} else {
|
||||
$row->category_name = '未分类';
|
||||
}
|
||||
|
||||
// 解析多图相册
|
||||
$mediaList = [];
|
||||
$rawMedia = $row->getData('media');
|
||||
if (!empty($rawMedia)) {
|
||||
$decoded = is_string($rawMedia) ? json_decode($rawMedia, true) : $rawMedia;
|
||||
if (is_array($decoded)) {
|
||||
$mediaList = array_values(array_filter($decoded));
|
||||
} else {
|
||||
$mediaList = array_values(array_filter(explode(',', (string)$rawMedia)));
|
||||
}
|
||||
}
|
||||
if (empty($mediaList) && !empty($row->cover)) {
|
||||
$mediaList[] = $row->cover;
|
||||
}
|
||||
|
||||
// 获取用户画像
|
||||
$userInfo = [
|
||||
'id' => $row->user_id,
|
||||
'nickname' => $row->user_name ?: '未知用户',
|
||||
'mobile' => '',
|
||||
'avatar' => '/assets/img/avatar.png',
|
||||
'post_count' => 0
|
||||
];
|
||||
$user = Db::name('user')->where('id', $row->user_id)->field('id,nickname,mobile,avatar')->find();
|
||||
if ($user) {
|
||||
$userInfo['nickname'] = $user['nickname'] ?: $userInfo['nickname'];
|
||||
$userInfo['mobile'] = $user['mobile'] ?: '';
|
||||
$userInfo['avatar'] = $user['avatar'] ?: $userInfo['avatar'];
|
||||
$userInfo['post_count'] = Db::name('fc_post')->where('user_id', $user['id'])->count();
|
||||
}
|
||||
|
||||
// 支持请求 JSON 详情
|
||||
if ($this->request->param('format') === 'json') {
|
||||
$data = [
|
||||
'id' => $row->id,
|
||||
'title' => $row->title,
|
||||
'content' => $row->content,
|
||||
'category_name' => $row->category_name,
|
||||
'price' => $row->price,
|
||||
'price_unit' => $row->price_unit,
|
||||
'area' => $row->area,
|
||||
'address' => $row->address,
|
||||
'contact' => $row->contact,
|
||||
'phone' => $row->phone,
|
||||
'wechat' => $row->wechat,
|
||||
'tags' => $row->tags ? explode(',', $row->tags) : [],
|
||||
'is_paid' => $row->is_paid,
|
||||
'amount' => $row->amount,
|
||||
'pay_type' => $row->pay_type,
|
||||
'audit_status' => $row->audit_status,
|
||||
'audit_reason' => $row->audit_reason,
|
||||
'status' => $row->status,
|
||||
'is_top' => $row->is_top,
|
||||
'views' => $row->views,
|
||||
'likes' => $row->likes,
|
||||
'createtime_text' => date('Y-m-d H:i:s', $row->createtime),
|
||||
'media_list' => $mediaList,
|
||||
'user' => $userInfo
|
||||
];
|
||||
$this->success('获取成功', null, $data);
|
||||
}
|
||||
|
||||
// 区分模式:audit=专属审核界面,view=纯净详情档案界面
|
||||
$mode = $this->request->param('mode', '');
|
||||
if (!$mode) {
|
||||
$mode = ((int)$row->audit_status === 0) ? 'audit' : 'view';
|
||||
}
|
||||
|
||||
$this->view->assign('mode', $mode);
|
||||
$this->view->assign('row', $row);
|
||||
$this->view->assign('userInfo', $userInfo);
|
||||
$this->view->assign('mediaList', $mediaList);
|
||||
|
||||
// 如果是审核模式渲染 audit.html,详情模式渲染 detail.html
|
||||
if ($mode === 'audit') {
|
||||
return $this->view->fetch('audit');
|
||||
}
|
||||
return $this->view->fetch('detail');
|
||||
}
|
||||
|
||||
public function audit()
|
||||
{
|
||||
$ids = $this->request->post('ids');
|
||||
|
||||
在新工单中引用
屏蔽一个用户