feat(zy): 添加圈子审核功能并优化相关页面

- 在 User 控制器中加入 Club 模型引用,用于获取俱乐部信息
- 在 Circle 控制器中添加 approve 方法,用于审核圈子帖子
- 更新圈子列表查询逻辑,支持按状态筛选
- 修改圈子添加和编辑页面,增加状态选择字段
- 更新圈子列表页面,显示帖子状态并支持状态筛选
This commit is contained in:
2025-05-25 20:10:58 +08:00
parent 185578aa6a
commit d48daea477
6 changed files with 73 additions and 38 deletions

View File

@@ -17,6 +17,7 @@ use app\admin\model\shopro\user\User as UserModel;
use app\admin\model\shopro\order\Order as OrderModel; use app\admin\model\shopro\order\Order as OrderModel;
use app\admin\model\shopro\user\Coupon as UserCouponModel; use app\admin\model\shopro\user\Coupon as UserCouponModel;
use app\admin\model\shopro\order\Aftersale as AftersaleModel; use app\admin\model\shopro\order\Aftersale as AftersaleModel;
use app\admin\model\zy\Club;
use app\admin\model\zy\Menber; use app\admin\model\zy\Menber;
class User extends Common class User extends Common
@@ -90,10 +91,10 @@ class User extends Common
$user->hidden(['password', 'salt', 'createtime', 'updatetime', 'deletetime', 'remember_token', 'login_fail', 'login_ip', 'login_time']); $user->hidden(['password', 'salt', 'createtime', 'updatetime', 'deletetime', 'remember_token', 'login_fail', 'login_ip', 'login_time']);
$user = $user->toArray(); $user = $user->toArray();
$user['msg_num'] = Message::where('user_id', $user['id'])->where('status', 0)->count(); $user['msg_num'] = Message::where('user_id', $user['id'])->where('status', 0)->count();
$user['club_list'] = Menber::where('user_id', $user['id'])->where('role','>', 0)->select(); $user['club_list'] = Menber::alias('m')->join([Club::$tableName => 'c'], 'c.id=m.club_id')->field('m.*,c.name')->where('user_id', $user['id'])->where('role', '>', 0)->select();
$user['club_num'] = count($user['club_list']); $user['club_num'] = count($user['club_list']);
$user['card_num'] = 0; $user['card_num'] = 0;
$this->success('个人详情', $user); $this->success('个人详情', $user);
} }

View File

@@ -44,6 +44,11 @@ class Circle extends Base
'content', m.content, 'content', m.content,
'create_time', m.create_time 'create_time', m.create_time
)) AS comment")->group('c.id'); )) AS comment")->group('c.id');
if (isset($params['status'])) {
$query->where('c.status', $params['status']);
} else {
$query->where('c.status', 1);
}
if (isset($params['club_id'])) { if (isset($params['club_id'])) {
$query->where('c.club_id', $params['club_id']); $query->where('c.club_id', $params['club_id']);
} }
@@ -92,7 +97,7 @@ class Circle extends Base
$params['avatar'] = $user['avatar']; $params['avatar'] = $user['avatar'];
$params['gender'] = $user['gender']; $params['gender'] = $user['gender'];
$params['club_name'] = $club['name']; $params['club_name'] = $club['name'];
$params['status'] = 1; $params['status'] = 0;
Db::startTrans(); Db::startTrans();
try { try {
$result = (new CircleModel)->allowField(true)->save($params); $result = (new CircleModel)->allowField(true)->save($params);
@@ -174,4 +179,26 @@ class Circle extends Base
} }
$this->success('Success'); $this->success('Success');
} }
public function approve()
{
$params = $this->request->param();
$model = CircleModel::get($params['id'] ?? NULL);
if (empty($model)) {
$this->error(__('No rows were found'));
}
$member = Menber::get(['club_id' => $model->club_id, 'user_id' => $this->auth->id]);
if (empty($member) || $member->role < 2) {
$this->error('无权审核');
}
if ($model->status != 0) {
$this->error('已审核');
}
if ($params['status'] != -1 && $params['status'] != 1) {
$this->error('status:参数错误');
}
$model->save(['status' => $params['status']]);
$this->success('Success');
}
} }

View File

@@ -9,12 +9,18 @@ return [
'Club_name' => '俱乐部名称', 'Club_name' => '俱乐部名称',
'Content' => '内容', 'Content' => '内容',
'Imgs' => '图片', 'Imgs' => '图片',
'Status' => '状态',
'Create_time' => '创建时间', 'Create_time' => '创建时间',
'Update_time' => '修改时间', 'Update_time' => '修改时间',
'Club.name' => '俱乐部名称', 'Club.name' => '俱乐部名称',
'User.nickname' => '昵称', 'User.nickname' => '昵称',
'Male' => '男', 'Gender1' => '男',
'Female' => '女', 'Gender0' => '女',
'Status-1' => '审核不通过',
'Status0' => '待审核',
'Status1' => '审核通过',
]; ];

View File

@@ -12,13 +12,7 @@
<input id="c-user_id" data-rule="required" data-source="user/user/index" data-field="nickname" class="form-control selectpage" name="row[user_id]" type="text" value=""> <input id="c-user_id" data-rule="required" data-source="user/user/index" data-field="nickname" class="form-control selectpage" name="row[user_id]" type="text" value="">
</div> </div>
</div> </div>
<div class="form-group"> <!-- <div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Username')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-username" data-rule="required" class="form-control" name="row[username]" type="text" value="">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Avatar')}:</label> <label class="control-label col-xs-12 col-sm-2">{:__('Avatar')}:</label>
<div class="col-xs-12 col-sm-8"> <div class="col-xs-12 col-sm-8">
<div class="input-group"> <div class="input-group">
@@ -43,11 +37,11 @@
<div class="col-xs-12 col-sm-8"> <div class="col-xs-12 col-sm-8">
<input id="c-club_name" class="form-control" name="row[club_name]" type="text" value=""> <input id="c-club_name" class="form-control" name="row[club_name]" type="text" value="">
</div> </div>
</div> </div> -->
<div class="form-group"> <div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label> <label class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>
<div class="col-xs-12 col-sm-8"> <div class="col-xs-12 col-sm-8">
<textarea id="c-content" class="form-control editor" rows="5" name="row[content]" cols="50">NULL</textarea> <textarea id="c-content" class="form-control" rows="5" name="row[content]" cols="50">NULL</textarea>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
@@ -64,7 +58,13 @@
<ul class="row list-inline faupload-preview" id="p-imgs"></ul> <ul class="row list-inline faupload-preview" id="p-imgs"></ul>
</div> </div>
</div> </div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
<div class="col-xs-12 col-sm-8">
{:build_radios('row[status]', ['-1'=>__('Status-1'),'0'=>__('Status0'), '1'=>__('Status1')],0)}
</div>
</div>
<div class="form-group layer-footer"> <div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label> <label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8"> <div class="col-xs-12 col-sm-8">

View File

@@ -12,13 +12,7 @@
<input id="c-user_id" data-rule="required" data-source="user/user/index" data-field="nickname" class="form-control selectpage" name="row[user_id]" type="text" value="{$row.user_id|htmlentities}"> <input id="c-user_id" data-rule="required" data-source="user/user/index" data-field="nickname" class="form-control selectpage" name="row[user_id]" type="text" value="{$row.user_id|htmlentities}">
</div> </div>
</div> </div>
<div class="form-group"> <!-- <div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Username')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-username" data-rule="required" class="form-control" name="row[username]" type="text" value="{$row.username|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Avatar')}:</label> <label class="control-label col-xs-12 col-sm-2">{:__('Avatar')}:</label>
<div class="col-xs-12 col-sm-8"> <div class="col-xs-12 col-sm-8">
<div class="input-group"> <div class="input-group">
@@ -43,11 +37,11 @@
<div class="col-xs-12 col-sm-8"> <div class="col-xs-12 col-sm-8">
<input id="c-club_name" class="form-control" name="row[club_name]" type="text" value="{$row.club_name|htmlentities}"> <input id="c-club_name" class="form-control" name="row[club_name]" type="text" value="{$row.club_name|htmlentities}">
</div> </div>
</div> </div> -->
<div class="form-group"> <div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label> <label class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>
<div class="col-xs-12 col-sm-8"> <div class="col-xs-12 col-sm-8">
<textarea id="c-content" class="form-control editor" rows="5" name="row[content]" cols="50">{$row.content|htmlentities}</textarea> <textarea id="c-content" class="form-control" rows="5" name="row[content]" cols="50">{$row.content|htmlentities}</textarea>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
@@ -64,7 +58,13 @@
<ul class="row list-inline faupload-preview" id="p-imgs"></ul> <ul class="row list-inline faupload-preview" id="p-imgs"></ul>
</div> </div>
</div> </div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
<div class="col-xs-12 col-sm-8">
{:build_radios('row[status]', ['-1'=>__('Status-1'),'0'=>__('Status0'), '1'=>__('Status1')],$row.status)}
</div>
</div>
<div class="form-group layer-footer"> <div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label> <label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8"> <div class="col-xs-12 col-sm-8">

View File

@@ -26,19 +26,20 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
fixedRightNumber: 1, fixedRightNumber: 1,
columns: [ columns: [
[ [
{checkbox: true}, { checkbox: true },
{field: 'id', title: __('Id')}, { field: 'id', title: __('Id') },
// {field: 'club.name', title: __('Club.name'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content}, // {field: 'club.name', title: __('Club.name'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
// {field: 'user.nickname', title: __('User.nickname'), operate: 'LIKE'}, {field: 'content', title: __('Content')},
{field: 'club_name', title: __('Club_name'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content}, { field: 'club_name', title: __('Club_name'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content },
{field: 'nickname', title: __('Nickname'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content}, { field: 'nickname', title: __('Nickname'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content },
{field: 'avatar', title: __('Avatar'), operate: 'LIKE', events: Table.api.events.image, formatter: Table.api.formatter.image}, { field: 'avatar', title: __('Avatar'), operate: 'LIKE', events: Table.api.events.image, formatter: Table.api.formatter.image },
{field: 'gender', title: __('Gender'),formatter: Table.api.formatter.label, searchList: {1: __('Male'), 0: __('Female')}}, { field: 'gender', title: __('Gender'), formatter: Table.api.formatter.label, searchList: { 1: __('Male'), 0: __('Female') } },
{field: 'club_name', title: __('Club_name'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content}, { field: 'club_name', title: __('Club_name'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content },
{field: 'create_time', title: __('Create_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false}, { field: 'status', title: __('Status'), formatter: Table.api.formatter.label, searchList: { '-1': __('Status-1'), 0: __('Status0'), 1: __('Status1') } },
{field: 'update_time', title: __('Update_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false}, { field: 'create_time', title: __('Create_time'), operate: 'RANGE', addclass: 'datetimerange', autocomplete: false },
{ field: 'update_time', title: __('Update_time'), operate: 'RANGE', addclass: 'datetimerange', autocomplete: false },
{field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate} { field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate }
] ]
] ]
}); });