Browse Source

【Add】 新增社区管理功能

- 增加帖子类型管理、社区内容管理和社区规范管理模块
- 实现帖子类型列表、新增、编辑和状态设置功能
- 实现社区内容列表、新增、编辑和状态设置功能
- 实现社区规范内容的查看和修改功能
- 添加相关路由和模板文件
liuxiangxin 5 months ago
parent
commit
175dcefca8

+ 119 - 0
app/Http/Controllers/Admin/Topic.php

@@ -0,0 +1,119 @@
+<?php namespace App\Http\Controllers\Admin;
+
+use App\Http\Requests\Admin\Topic\Type as Request;
+use App\Models\Topic\Type as Model;
+
+/**
+ * 帖子管理
+ *
+ * @author    刘相欣
+ *
+ */
+class Topic extends Auth{
+	
+	protected function _initialize(){
+		parent::_initialize();
+		$this->assign('breadcrumb1','社区管理');
+		$this->assign('breadcrumb2','社区内容');
+	}
+
+	/**
+	 * 列表页
+	 * 
+	 * */
+    public function index(Model $Model){
+		// 查询条件
+		$map 					= [];
+		// 编码ID
+		// 查询数据
+		$list					= $Model->query()->where($map)->orderByDesc('id')->paginate(config('page_num',10));
+		// 分配数据
+		$this->assign('empty', '<tr><td colspan="20">~~暂无数据</td></tr>');
+		$this->assign('list',$list);
+		// 加载模板
+		return 					$this->fetch();
+    }
+
+	/**
+	 * 添加
+	 * 
+	 * */
+	public function add(Request $request,Model $Model){
+		if( request()->isMethod('post') ){
+			// 验证参数
+			$request->scene('add')->validate();
+			// 接收数据
+			$data['name']			= request('name','');
+			// 写入数据表
+			$id						= $Model->add($data);
+			// 如果操作失败
+			if( !$id ) 				return json_send(['code'=>'error','msg'=>'新增失败']);
+			// 记录行为
+			$this->addAdminHistory(admin('uid'),$Model->getTable(),$id,1,[],$data);
+			// 告知结果
+			return					json_send(['code'=>'success','msg'=>'新增成功','action'=>'add']);
+		}
+		// 分配数据
+		$this->assign('crumbs','新增');
+		// 加载模板
+		return						$this->fetch(); 
+	}
+
+	/**
+	 * 修改
+	 * 
+	 * */
+	public function edit(Request $request,Model $Model){
+		// 接收参数
+		$id							= request('id',0);
+		// 查询用户
+		$oldData					= $Model->where(['id'=>$id])->first();
+		// 修改
+		if(request()->isMethod('post')){
+			// 验证参数
+			$request->scene('edit')->validate();
+			// 接收数据
+			$data['name']			= request('name','');
+			// 写入数据表
+			$result					= $Model->edit($id,$data);
+			// 如果操作失败
+			if( !$result ) 			return json_send(['code'=>'error','msg'=>'新增失败']);
+			// 记录行为
+			$this->addAdminHistory(admin('uid'),$Model->getTable(),$id,2,$oldData,$data);
+			// 告知结果
+			return					json_send(['code'=>'success','msg'=>'修改成功','action'=>'edit']);
+		}
+		// 错误告知
+		if( !$oldData )				return $this->error('查无数据');
+		// 分配数据
+		$this->assign('oldData',$oldData);
+		$this->assign('crumbs','修改');
+		// 加载模板
+		return						$this->fetch();
+	}
+
+	/**
+	 * 修改状态
+	 * 
+	 * */
+	public function set_status(Request $request,Model $Model){
+		// 验证参数
+		$request->scene('set_status')->validate();
+		// 设置状态
+		$id				= request('id',0);
+		$status			= request('status',0);
+		// 查询用户
+		$oldData		= $Model->where(['id'=>$id])->first();
+		// 如果用户不存在
+		if( !$oldData )	return json_send(['code'=>'error','msg'=>'用户不存在']);
+		// 执行修改
+		$result			= $Model->edit($id,['status'=>$status]);		
+		// 提示新增失败
+		if( !$result )	return json_send(['code'=>'error','msg'=>'设置失败']);
+		// 记录行为
+		$this->addAdminHistory(admin('uid'),$Model->getTable(),$id,2,$oldData,['status'=>$status]);
+		// 告知结果
+		return 			json_send(['code'=>'success','msg'=>'设置成功','path'=>'']);
+	}
+
+}

+ 79 - 0
app/Http/Controllers/Admin/TopicRule.php

@@ -0,0 +1,79 @@
+<?php namespace App\Http\Controllers\Admin;
+
+/**
+ * 帖子类型管理
+ *
+ * @author    刘相欣
+ *
+ */
+class TopicRule extends Auth{
+	
+	protected function _initialize(){
+		parent::_initialize();
+		$this->assign('breadcrumb1','社区管理');
+		$this->assign('breadcrumb2','帖子类型');
+	}
+
+	/**
+     * 规则文件
+     * 
+     */
+    private function updateDesc($id,$content)
+    {
+        // 路径
+        $path                               = public_path('uploads/topic/rule/detail/');
+        // 如果路径不存在
+        if( !is_dir($path) )                mkdir($path,0755,true);
+        // 写入文件
+        $result                             = file_put_contents($path.$id.'.html',$content);
+        // 返回结果
+        return                              $result;
+    }
+
+	/**
+     * 获取规则文件内容
+     * 
+     */
+    private function getDesc($id)
+    {
+        // 路径
+        $path                               = public_path('uploads/topic/rule/detail/');
+        // 如果路径不存在
+        if( !is_dir($path) )                 mkdir($path,0755,true);
+        // 不存在文件
+        if( !file_exists($path.$id.'.html') ) file_put_contents($path.$id.'.html','');
+        // 写入文件
+        $result                             = (string) file_get_contents($path.$id.'.html');
+        // 返回结果
+        return                              $result;
+    }
+
+	/**
+	 * 列表页
+	 * 
+	 * */
+    public function index( )				{
+		// 固定ID
+		$id									= 1;
+		// 修改
+		if( request()->isMethod('post') )	{
+			// 接收数据
+			$content						= request('content','');
+			// 写入数据表
+			$id								= $this->updateDesc($id,$content);
+			// 如果操作失败
+			if( !$id ) 						return json_send(['code'=>'error','msg'=>'更新失败']);
+			// 告知结果
+			return							json_send(['code'=>'success','msg'=>'更新失败','action'=>'add']);
+		}
+		// 查询数据
+		$oldData['id']						= $id;
+		// 查询数据
+		$oldData['content']					= $this->getDesc($id);
+		// 分配数据
+		$this->assign('oldData',$oldData);
+		// 加载模板
+		return 								$this->fetch();
+    }
+
+}

+ 119 - 0
app/Http/Controllers/Admin/TopicType.php

@@ -0,0 +1,119 @@
+<?php namespace App\Http\Controllers\Admin;
+
+use App\Http\Requests\Admin\Topic\Type as Request;
+use App\Models\Topic\Type as Model;
+
+/**
+ * 帖子类型管理
+ *
+ * @author    刘相欣
+ *
+ */
+class TopicType extends Auth{
+	
+	protected function _initialize(){
+		parent::_initialize();
+		$this->assign('breadcrumb1','社区管理');
+		$this->assign('breadcrumb2','帖子类型');
+	}
+
+	/**
+	 * 列表页
+	 * 
+	 * */
+    public function index(Model $Model){
+		// 查询条件
+		$map 					= [];
+		// 编码ID
+		// 查询数据
+		$list					= $Model->query()->where($map)->orderByDesc('id')->paginate(config('page_num',10));
+		// 分配数据
+		$this->assign('empty', '<tr><td colspan="20">~~暂无数据</td></tr>');
+		$this->assign('list',$list);
+		// 加载模板
+		return 					$this->fetch();
+    }
+
+	/**
+	 * 添加
+	 * 
+	 * */
+	public function add(Request $request,Model $Model){
+		if( request()->isMethod('post') ){
+			// 验证参数
+			$request->scene('add')->validate();
+			// 接收数据
+			$data['name']			= request('name','');
+			// 写入数据表
+			$id						= $Model->add($data);
+			// 如果操作失败
+			if( !$id ) 				return json_send(['code'=>'error','msg'=>'新增失败']);
+			// 记录行为
+			$this->addAdminHistory(admin('uid'),$Model->getTable(),$id,1,[],$data);
+			// 告知结果
+			return					json_send(['code'=>'success','msg'=>'新增成功','action'=>'add']);
+		}
+		// 分配数据
+		$this->assign('crumbs','新增');
+		// 加载模板
+		return						$this->fetch(); 
+	}
+
+	/**
+	 * 修改
+	 * 
+	 * */
+	public function edit(Request $request,Model $Model){
+		// 接收参数
+		$id							= request('id',0);
+		// 查询用户
+		$oldData					= $Model->where(['id'=>$id])->first();
+		// 修改
+		if(request()->isMethod('post')){
+			// 验证参数
+			$request->scene('edit')->validate();
+			// 接收数据
+			$data['name']			= request('name','');
+			// 写入数据表
+			$result					= $Model->edit($id,$data);
+			// 如果操作失败
+			if( !$result ) 			return json_send(['code'=>'error','msg'=>'新增失败']);
+			// 记录行为
+			$this->addAdminHistory(admin('uid'),$Model->getTable(),$id,2,$oldData,$data);
+			// 告知结果
+			return					json_send(['code'=>'success','msg'=>'修改成功','action'=>'edit']);
+		}
+		// 错误告知
+		if( !$oldData )				return $this->error('查无数据');
+		// 分配数据
+		$this->assign('oldData',$oldData);
+		$this->assign('crumbs','修改');
+		// 加载模板
+		return						$this->fetch();
+	}
+
+	/**
+	 * 修改状态
+	 * 
+	 * */
+	public function set_status(Request $request,Model $Model){
+		// 验证参数
+		$request->scene('set_status')->validate();
+		// 设置状态
+		$id				= request('id',0);
+		$status			= request('status',0);
+		// 查询用户
+		$oldData		= $Model->where(['id'=>$id])->first();
+		// 如果用户不存在
+		if( !$oldData )	return json_send(['code'=>'error','msg'=>'用户不存在']);
+		// 执行修改
+		$result			= $Model->edit($id,['status'=>$status]);		
+		// 提示新增失败
+		if( !$result )	return json_send(['code'=>'error','msg'=>'设置失败']);
+		// 记录行为
+		$this->addAdminHistory(admin('uid'),$Model->getTable(),$id,2,$oldData,['status'=>$status]);
+		// 告知结果
+		return 			json_send(['code'=>'success','msg'=>'设置成功','path'=>'']);
+	}
+
+}

+ 51 - 0
app/Http/Requests/Admin/Topic/Type.php

@@ -0,0 +1,51 @@
+<?php namespace App\Http\Requests\Admin\Topic;
+
+use App\Http\Requests\BaseRequest;
+
+/**
+ * 商业公司验证器
+ * 
+ */
+class Type extends BaseRequest
+{
+    /**
+     * 获取应用于请求的规则
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        // 返回结果
+        return      [
+            // 有时候我们希望某个字段在第一次验证失败后就停止运行验证规则,只需要将 bail 添加到规则中:
+            // 验证字段,验证规则,提示信息
+	        'name' 			    => 'required|unique:topic_type,name,'.request('id',0),
+	        'id'                => 'required|integer|gt:0',
+        ];
+    }
+
+    
+    // 场景列表
+    protected   $scenes         = [
+		'add'  		            => ['name'],
+        'edit'  		        => ['id','name'],
+        'set_status'  		    => ['id'],
+	];
+
+    /**
+     * 获取已定义验证规则的错误消息
+     *
+     * @return array
+     */
+    public function messages()
+    {
+        return [
+            'name.required'     => '类型名称必填',
+            'name.unique'	    => '类型名称已经存在',
+            'id.required'       => 'ID未知',
+            'id.integer'        => 'ID格式错误',
+            'id.gt'   		    => 'ID格式错误',
+        ];
+    }
+    
+}

+ 106 - 0
app/Models/Topic/Type.php

@@ -0,0 +1,106 @@
+<?php namespace App\Models\Topic;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * 商业公司模型
+ * 
+ */
+class Type extends Model
+{
+    use HasFactory;
+
+    // 与模型关联的表名
+    protected $table = 'topic_type';
+    // 是否主动维护时间戳
+    public $timestamps = false;
+    // 定义时间戳字段名
+    // const CREATED_AT = 'insert_time';
+    // const UPDATED_AT = 'update_time';
+
+    /**
+     * 添加数据
+     * 
+     */
+    public function add($data)
+    {
+        // 时间
+        $data['insert_time']				= time();
+        $data['update_time']				= time();
+        // 写入数据表
+        $id						            = $this->query()->insertGetId($data);
+        // 如果操作失败
+        if( !$id )                          return $id;
+        // 更新缓存
+        $this->getList(true);
+        // 返回结果
+        return                              $id;
+    }
+
+    /**
+     * 添加数据
+     * 
+     */
+    public function edit($id,$data)
+    {
+        // 更新时间
+        $data['update_time']                = time();
+        // 写入数据表
+        $result						        = $this->query()->where(['id'=>$id])->update($data);
+        // 如果操作失败
+        if( !$result )                      return $result;
+        // 更新缓存
+        $this->getList(true);
+        // 返回结果
+        return                              $result;
+    }
+
+    /**
+     * 获取列表
+     * @param   Bool    $force  是否强制更新
+     * 
+     */
+    public function getList($force = false)
+    {
+        // 结果数据
+        $list                  = $force ? [] : cache('admin:topic:type:list');
+        // 不存在数据
+        if ( !$list ) {
+            // 从数据库获取数据
+            $data              = $this->query()->where(['status'=>0])->get(['id','name']);
+            // 是否有数据
+            $data              = $data ? $data->toArray() : [];
+            // 循环处理数据
+            $list              = [];
+            // 进行更新
+            foreach ($data as $value) {
+                // 重组数据
+                $list[$value['id']] = $value;
+            }
+            // 存起来
+            cache(['admin:topic:type:list'=>$list]);
+        }
+        // 返回结果
+        return                  $list;
+    }
+
+    /**
+     * 获取配置平台对应的应用数据
+     * 
+     * @param   Array      用户ID
+     * @param   String     指定字段
+     * 
+     */
+    public function getOne($id,$field='')
+    {
+        // 获取列表数据
+        $list                   = $this->getList();
+        // 获取数据
+        $one                    = isset($list[$id]) ? $list[$id] : [];
+        // 返回值
+        return                  empty($field) ? $one : ( isset($one[$field]) ? $one[$field] : null);
+    }
+
+
+}

+ 26 - 0
resources/views/admin/topic_rule/index.blade.php

@@ -0,0 +1,26 @@
+@extends('admin.public.base')
+@section('body_class')
+style="margin: 0 auto;width: 96%;padding: 30px 0px;"
+@endsection
+@section('content')
+<form class="post-form" action="" method="post">
+	<div class="form-group col-sm-12">
+		<label class="control-label">社区规范</label>
+		<!-- id="container" -->
+		<textarea  class="form-control" required="required" rows="10"  placeholder="社区规范" maxlength="1500" name="content">{{$oldData['content']}}</textarea>
+	</div>
+	<div class="form-group col-sm-12">
+		@csrf
+		<input type="hidden" name="id" id="id" value="{{$oldData['id']}}" />
+		<input id="send" type="submit" value="提交" class="btn btn-primary btn-block" />
+	</div>
+</form>
+@endsection
+@section('javascript')
+<!-- <script src="/static/ueditor/ueditor.config.js"></script>  
+<script src="/static/ueditor/ueditor.all.js"></script>
+<script type="text/javascript">
+	var editor = new UE.ui.Editor();
+	editor.render("container");
+</script> -->
+@endsection

+ 16 - 0
resources/views/admin/topic_type/add.blade.php

@@ -0,0 +1,16 @@
+@extends('admin.public.base')
+@section('body_class')
+style="margin: 0 auto;width: 96%;padding: 30px 0px;"
+@endsection
+@section('content')
+<form class="post-form" action="" method="post">
+	<div class="form-group col-sm-12">
+		<label class="control-label">类型名称</label>
+		<input class="form-control" required="required" type="text" placeholder="类型名称" name="name" maxlength="10" value="" />
+	</div>
+	<div class="form-group col-sm-12">
+		@csrf
+		<input id="send" type="submit" value="提交" class="btn btn-primary btn-block" />
+	</div>
+</form>
+@endsection

+ 17 - 0
resources/views/admin/topic_type/edit.blade.php

@@ -0,0 +1,17 @@
+@extends('admin.public.base')
+@section('body_class')
+style="margin: 0 auto;width: 96%;padding: 30px 0px;"
+@endsection
+@section('content')
+<form class="post-form" action="" method="post">
+	<div class="form-group col-sm-12">
+		<label class="control-label">类型名称</label>
+		<input class="form-control" required="required" type="text" placeholder="类型名称" name="name" maxlength="10" value="{{$oldData['name']}}" />
+	</div>
+	<div class="form-group col-sm-12">
+		@csrf
+		<input type="hidden" name="id" id="id" value="{{$oldData['id']}}" />
+		<input id="send" type="submit" value="提交" class="btn btn-primary btn-block" />
+	</div>
+</form>
+@endsection

+ 57 - 0
resources/views/admin/topic_type/index.blade.php

@@ -0,0 +1,57 @@
+@extends('admin.public.base')
+@section('body_class')
+style="margin: 0 auto;width: 96%;padding: 30px 0px;"
+@endsection
+@section('content')
+
+@if(check_auth('admin/topic_type/add'))
+	<div class="page-header">
+		<a href="{{url('admin/topic_type/add')}}" class="btn btn-primary">新增</a>
+	</div>
+@endif
+<div class="row">
+	<div class="col-xs-12">	
+		<div class="table-responsive">
+			<table class="table table-striped table-bordered table-hover">
+				<thead>
+					<tr>
+						<th>ID</th>
+						<th>类型名称</th>
+						<th>修改时间</th>
+						<th>操作</th>									
+					</tr>
+				</thead>
+				
+				<tbody>
+						@foreach ($list as $a)
+						<tr>
+							<th>{{$a['id']}}</th>
+							<td>{{$a['name']}}</td>
+							<td> {{date('Y/m/d H:i:s',$a['update_time'])}}</td>
+							<td>
+								@if(check_auth('admin/topic_type/edit'))
+								<a href="{{url('admin/topic_type/edit?'.http_build_query(['id'=>$a['id']]))}}" class="btn btn-sm btn-warning" >编辑</a>
+								@endif
+								@if(check_auth('admin/topic_type/set_status'))
+									@if($a['status'])
+									<a data-url="{{url('admin/topic_type/set_status?'.http_build_query(['id'=>$a['id'],'status'=>0]))}}" class="set_status btn btn-sm btn-success" >启用</a>
+									@else
+									<a data-url="{{url('admin/topic_type/set_status?'.http_build_query(['id'=>$a['id'],'status'=>1]))}}" class="set_status btn btn-sm btn-danger" >停用</a>
+									@endif
+								@endif
+							</td>							
+						</tr>  
+						@endforeach
+						<tr>
+							<td colspan="20" class="page">{{$list->render()}}</td>
+						</tr>
+						<tr>
+							<td colspan="20">总计 {{$list->total()}} 个类型</td>
+						</tr>
+				</tbody>
+				
+			</table>
+		</div>
+	</div>
+</div>
+@endsection

+ 25 - 0
routes/web.php

@@ -509,5 +509,30 @@ Route::middleware('admin')->prefix('admin')->group(function(){
     // 状态
     Route::any('promo_product/set_status',[App\Http\Controllers\Admin\PromoProduct::class,'set_status']);
 
+    /* 社区管理-帖子类型 */
+    // 列表
+    Route::any('topic_type/index',[App\Http\Controllers\Admin\TopicType::class,'index']);
+    // 新增
+    Route::any('topic_type/add',[App\Http\Controllers\Admin\TopicType::class,'add']);
+    // 编辑
+    Route::any('topic_type/edit',[App\Http\Controllers\Admin\TopicType::class,'edit']);
+    // 状态
+    Route::any('topic_type/set_status',[App\Http\Controllers\Admin\TopicType::class,'set_status']);
+
+
+    /* 社区管理-社区内容 */
+    // 列表
+    Route::any('topic/index',[App\Http\Controllers\Admin\Topic::class,'index']);
+    // 新增
+    Route::any('topic/add',[App\Http\Controllers\Admin\Topic::class,'add']);
+    // 编辑
+    Route::any('topic/edit',[App\Http\Controllers\Admin\Topic::class,'edit']);
+    // 状态
+    Route::any('topic/set_status',[App\Http\Controllers\Admin\Topic::class,'set_status']);
+
+    /* 社区管理-社区规范 */
+    // 列表
+    Route::any('topic_rule/index',[App\Http\Controllers\Admin\TopicRule::class,'index']);
+
 
 });