|
|
<?php
|
|
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
|
|
use App\Http\Requests\VisitAreaRequest;
|
|
|
use App\Models\VisitArea;
|
|
|
use App\Models\Admin;
|
|
|
use App\Helpers\ResponseCode;
|
|
|
use Illuminate\Http\Request;
|
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
|
|
/**
|
|
|
* @OA\Tag(
|
|
|
* name="拜访区域管理",
|
|
|
* description="拜访区域相关接口"
|
|
|
* )
|
|
|
*/
|
|
|
class VisitAreaController extends BaseController
|
|
|
{
|
|
|
public function __construct()
|
|
|
{
|
|
|
parent::__construct(new VisitArea());
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @OA\Get(
|
|
|
* path="/api/admin/visit-areas/index",
|
|
|
* tags={"拜访区域管理"},
|
|
|
* summary="拜访区域列表",
|
|
|
* description="获取拜访区域列表",
|
|
|
* @OA\Parameter(name="is_export", in="query", @OA\Schema(type="string"), required=false, description="是否导出0否1是"),
|
|
|
* @OA\Parameter(name="export_fields", in="query", @OA\Schema(type="string"), required=false, description="需要导出的字段数组"),
|
|
|
* @OA\Parameter(name="filter", in="query", @OA\Schema(type="string"), required=false, description="查询条件。数组"),
|
|
|
* @OA\Parameter(name="show_relation", in="query", @OA\Schema(type="string"), required=false, description="需要输出的关联关系数组,填写输出指定数据"),
|
|
|
* @OA\Parameter(name="page_size", in="query", @OA\Schema(type="string"), required=false, description="每页显示的条数"),
|
|
|
* @OA\Parameter(name="page", in="query", @OA\Schema(type="string"), required=false, description="页码"),
|
|
|
* @OA\Parameter(name="sort_name", in="query", @OA\Schema(type="string"), required=false, description="排序字段名字"),
|
|
|
* @OA\Parameter(name="sort_type", in="query", @OA\Schema(type="string"), required=false, description="排序类型"),
|
|
|
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
|
|
|
* @OA\Response(
|
|
|
* response="200",
|
|
|
* description="成功获取拜访区域列表"
|
|
|
* )
|
|
|
* )
|
|
|
*/
|
|
|
public function index()
|
|
|
{
|
|
|
$all = request()->all();
|
|
|
$filter = $all['filter'] ?? [];
|
|
|
$show_relation = $all['show_relation'] ?? [];
|
|
|
$page_size = $all['page_size'] ?? 10;
|
|
|
$page = $all['page'] ?? 1;
|
|
|
$sort_name = $all['sort_name'] ?? 'id';
|
|
|
$sort_type = $all['sort_type'] ?? 'desc';
|
|
|
|
|
|
$query = $this->model->query();
|
|
|
|
|
|
// 应用过滤条件
|
|
|
if (!empty($filter)) {
|
|
|
$query = $this->applyFilters($query, $filter);
|
|
|
}
|
|
|
|
|
|
// 应用排序
|
|
|
$query->orderBy($sort_name, $sort_type);
|
|
|
|
|
|
// 加载关联关系
|
|
|
if (!empty($show_relation)) {
|
|
|
$query->with($show_relation);
|
|
|
}
|
|
|
|
|
|
// 分页
|
|
|
$result = $query->paginate($page_size, ['*'], 'page', $page);
|
|
|
|
|
|
return $this->success($result);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @OA\Get(
|
|
|
* path="/api/admin/visit-areas/show",
|
|
|
* tags={"拜访区域管理"},
|
|
|
* summary="拜访区域详情",
|
|
|
* description="获取指定的拜访区域详情",
|
|
|
* @OA\Parameter(name="id", in="query", @OA\Schema(type="string"), required=true, description="拜访区域ID"),
|
|
|
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
|
|
|
* @OA\Response(
|
|
|
* response="200",
|
|
|
* description="成功获取拜访区域详情"
|
|
|
* )
|
|
|
* )
|
|
|
*/
|
|
|
public function show()
|
|
|
{
|
|
|
$all = request()->all();
|
|
|
$detail = $this->model->with(['auditAdmins'])->find($all['id']);
|
|
|
|
|
|
return $this->success($detail);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @OA\Post(
|
|
|
* path="/api/admin/visit-areas/save",
|
|
|
* tags={"拜访区域管理"},
|
|
|
* summary="新增/更新拜访区域",
|
|
|
* description="创建或更新拜访区域",
|
|
|
* @OA\Parameter(name="id", in="query", @OA\Schema(type="string"), required=false, description="拜访区域ID,更新时必填"),
|
|
|
* @OA\Parameter(name="name", in="query", @OA\Schema(type="string"), required=true, description="区域名称"),
|
|
|
* @OA\Parameter(name="description", in="query", @OA\Schema(type="string"), required=false, description="区域描述"),
|
|
|
* @OA\Parameter(name="is_enabled", in="query", @OA\Schema(type="string"), required=false, description="是否启用"),
|
|
|
* @OA\Parameter(name="audit_admin_ids", in="query", @OA\Schema(type="string"), required=false, description="审核管理员ID数组"),
|
|
|
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
|
|
|
* @OA\Response(
|
|
|
* response="200",
|
|
|
* description="成功保存拜访区域"
|
|
|
* )
|
|
|
* )
|
|
|
*/
|
|
|
public function save()
|
|
|
{
|
|
|
$request = new VisitAreaRequest();
|
|
|
$request->setContainer(app());
|
|
|
$request->setRedirector(app('redirect'));
|
|
|
|
|
|
DB::beginTransaction();
|
|
|
try {
|
|
|
$data = $request->validated();
|
|
|
$all = request()->all();
|
|
|
|
|
|
if (isset($all['id'])) {
|
|
|
// 更新
|
|
|
$visitArea = $this->model->find($all['id']);
|
|
|
if (!$visitArea) {
|
|
|
return $this->fail([ResponseCode::ERROR_BUSINESS, __('visit_area.not_found')]);
|
|
|
}
|
|
|
$visitArea->update($data);
|
|
|
$message = __('visit_area.updated_successfully');
|
|
|
} else {
|
|
|
// 新增
|
|
|
$visitArea = $this->model->create($data);
|
|
|
$message = __('visit_area.created_successfully');
|
|
|
}
|
|
|
|
|
|
DB::commit();
|
|
|
return $this->success($visitArea);
|
|
|
} catch (\Exception $exception) {
|
|
|
DB::rollBack();
|
|
|
return $this->fail([$exception->getCode(), $exception->getMessage()]);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @OA\Get(
|
|
|
* path="/api/admin/visit-areas/destroy",
|
|
|
* tags={"拜访区域管理"},
|
|
|
* summary="删除拜访区域",
|
|
|
* description="删除指定的拜访区域",
|
|
|
* @OA\Parameter(name="id", in="query", @OA\Schema(type="string"), required=true, description="拜访区域ID"),
|
|
|
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
|
|
|
* @OA\Response(
|
|
|
* response="200",
|
|
|
* description="成功删除拜访区域"
|
|
|
* )
|
|
|
* )
|
|
|
*/
|
|
|
public function destroy()
|
|
|
{
|
|
|
$all = request()->all();
|
|
|
$visitArea = $this->model->find($all['id']);
|
|
|
if (!$visitArea) {
|
|
|
return $this->fail([ResponseCode::ERROR_BUSINESS, __('visit_area.not_found')]);
|
|
|
}
|
|
|
|
|
|
DB::beginTransaction();
|
|
|
try {
|
|
|
$visitArea->delete();
|
|
|
|
|
|
DB::commit();
|
|
|
return $this->success(__('visit_area.deleted_successfully'));
|
|
|
} catch (\Exception $exception) {
|
|
|
DB::rollBack();
|
|
|
return $this->fail([$exception->getCode(), $exception->getMessage()]);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 应用过滤条件
|
|
|
*/
|
|
|
private function applyFilters($query, $filter)
|
|
|
{
|
|
|
foreach ($filter as $key => $value) {
|
|
|
if (is_array($value)) {
|
|
|
$query->whereIn($key, $value);
|
|
|
} else {
|
|
|
$query->where($key, $value);
|
|
|
}
|
|
|
}
|
|
|
return $query;
|
|
|
}
|
|
|
} |