fix: 修复列表筛选空参与树数据展示

将后端 status/audit_status 筛选从 has() 改为 filled(),避免空字符串导致列表被误筛空;修复预定 status=0 筛选失效;前端兼容财务分类树形返回与菜单/字典数组返回,解决新增成功但列表空。
This commit is contained in:
li
2026-03-15 00:06:11 +08:00
parent a29faa3b47
commit c778639f05
38 changed files with 99 additions and 40 deletions
+1
View File
@@ -25,3 +25,4 @@ docker/redis/data/
# Logs # Logs
*.log *.log
.ace-tool/
@@ -14,7 +14,7 @@ class CareExceptionController extends Controller
$query = CareException::query()->with(['profile.customer', 'reporter', 'handler']); $query = CareException::query()->with(['profile.customer', 'reporter', 'handler']);
$query->when($request->care_profile_id, fn($q, $v) => $q->where('care_profile_id', $v)); $query->when($request->care_profile_id, fn($q, $v) => $q->where('care_profile_id', $v));
$query->when($request->level, fn($q, $v) => $q->where('level', $v)); $query->when($request->level, fn($q, $v) => $q->where('level', $v));
$query->when($request->has('status'), fn($q) => $q->where('status', $request->status)); $query->when($request->filled('status'), fn($q) => $q->where('status', $request->status));
return $this->paginate($query->latest()->paginate($request->input('per_page', 15))); return $this->paginate($query->latest()->paginate($request->input('per_page', 15)));
} }
@@ -15,7 +15,7 @@ class CarePlanController extends Controller
$query->when($request->care_profile_id, fn($q, $v) => $q->where('care_profile_id', $v)); $query->when($request->care_profile_id, fn($q, $v) => $q->where('care_profile_id', $v));
$query->when($request->plan_date, fn($q, $v) => $q->whereDate('plan_date', $v)); $query->when($request->plan_date, fn($q, $v) => $q->whereDate('plan_date', $v));
$query->when($request->nurse_id, fn($q, $v) => $q->where('nurse_id', $v)); $query->when($request->nurse_id, fn($q, $v) => $q->where('nurse_id', $v));
$query->when($request->has('status'), fn($q) => $q->where('status', $request->status)); $query->when($request->filled('status'), fn($q) => $q->where('status', $request->status));
return $this->paginate($query->latest()->paginate($request->input('per_page', 15))); return $this->paginate($query->latest()->paginate($request->input('per_page', 15)));
} }
@@ -14,7 +14,7 @@ class ChannelController extends Controller
$query = Channel::query(); $query = Channel::query();
$query->when($request->name, fn($q, $v) => $q->where('name', 'like', "%{$v}%")); $query->when($request->name, fn($q, $v) => $q->where('name', 'like', "%{$v}%"));
$query->when($request->type, fn($q, $v) => $q->where('type', $v)); $query->when($request->type, fn($q, $v) => $q->where('type', $v));
$query->when($request->has('status'), fn($q) => $q->where('status', $request->status)); $query->when($request->filled('status'), fn($q) => $q->where('status', $request->status));
return $this->paginate($query->latest()->paginate($request->input('per_page', 15))); return $this->paginate($query->latest()->paginate($request->input('per_page', 15)));
} }
@@ -14,7 +14,7 @@ class ComplaintController extends Controller
$query = Complaint::query()->with(['customer', 'handler']); $query = Complaint::query()->with(['customer', 'handler']);
$query->when($request->customer_id, fn($q, $v) => $q->where('customer_id', $v)); $query->when($request->customer_id, fn($q, $v) => $q->where('customer_id', $v));
$query->when($request->type, fn($q, $v) => $q->where('type', $v)); $query->when($request->type, fn($q, $v) => $q->where('type', $v));
$query->when($request->has('status'), fn($q) => $q->where('status', $request->status)); $query->when($request->filled('status'), fn($q) => $q->where('status', $request->status));
return $this->paginate($query->latest()->paginate($request->input('per_page', 15))); return $this->paginate($query->latest()->paginate($request->input('per_page', 15)));
} }
@@ -14,7 +14,7 @@ class ContractController extends Controller
$query = Contract::query()->with(['customer', 'auditor']); $query = Contract::query()->with(['customer', 'auditor']);
$query->when($request->contract_no, fn($q, $v) => $q->where('contract_no', 'like', "%{$v}%")); $query->when($request->contract_no, fn($q, $v) => $q->where('contract_no', 'like', "%{$v}%"));
$query->when($request->customer_id, fn($q, $v) => $q->where('customer_id', $v)); $query->when($request->customer_id, fn($q, $v) => $q->where('customer_id', $v));
$query->when($request->has('status'), fn($q) => $q->where('status', $request->status)); $query->when($request->filled('status'), fn($q) => $q->where('status', $request->status));
return $this->paginate($query->latest()->paginate($request->input('per_page', 15))); return $this->paginate($query->latest()->paginate($request->input('per_page', 15)));
} }
@@ -15,7 +15,7 @@ class QuestionnaireController extends Controller
$query = QuestionnaireTemplate::query(); $query = QuestionnaireTemplate::query();
$query->when($request->title, fn($q, $v) => $q->where('title', 'like', "%{$v}%")); $query->when($request->title, fn($q, $v) => $q->where('title', 'like', "%{$v}%"));
$query->when($request->type, fn($q, $v) => $q->where('type', $v)); $query->when($request->type, fn($q, $v) => $q->where('type', $v));
$query->when($request->has('status'), fn($q) => $q->where('status', $request->status)); $query->when($request->filled('status'), fn($q) => $q->where('status', $request->status));
return $this->paginate($query->latest()->paginate($request->input('per_page', 15))); return $this->paginate($query->latest()->paginate($request->input('per_page', 15)));
} }
@@ -13,7 +13,7 @@ class FinanceCategoryController extends Controller
{ {
$query = FinanceCategory::query(); $query = FinanceCategory::query();
$query->when($request->type, fn($q, $v) => $q->where('type', $v)); $query->when($request->type, fn($q, $v) => $q->where('type', $v));
$query->when($request->has('status'), fn($q) => $q->where('status', $request->status)); $query->when($request->filled('status'), fn($q) => $q->where('status', $request->status));
$categories = $query->orderBy('sort')->get(); $categories = $query->orderBy('sort')->get();
@@ -14,7 +14,7 @@ class FinanceRecordController extends Controller
$query = FinanceRecord::query()->with(['category']); $query = FinanceRecord::query()->with(['category']);
$query->when($request->type, fn($q, $v) => $q->where('type', $v)); $query->when($request->type, fn($q, $v) => $q->where('type', $v));
$query->when($request->category_id, fn($q, $v) => $q->where('category_id', $v)); $query->when($request->category_id, fn($q, $v) => $q->where('category_id', $v));
$query->when($request->has('audit_status'), fn($q) => $q->where('audit_status', $request->audit_status)); $query->when($request->filled('audit_status'), fn($q) => $q->where('audit_status', $request->audit_status));
$query->when($request->start_date, fn($q, $v) => $q->where('record_date', '>=', $v)); $query->when($request->start_date, fn($q, $v) => $q->where('record_date', '>=', $v));
$query->when($request->end_date, fn($q, $v) => $q->where('record_date', '<=', $v)); $query->when($request->end_date, fn($q, $v) => $q->where('record_date', '<=', $v));
@@ -14,7 +14,7 @@ class InvoiceController extends Controller
$query = Invoice::query()->with(['customer']); $query = Invoice::query()->with(['customer']);
$query->when($request->invoice_no, fn($q, $v) => $q->where('invoice_no', 'like', "%{$v}%")); $query->when($request->invoice_no, fn($q, $v) => $q->where('invoice_no', 'like', "%{$v}%"));
$query->when($request->customer_id, fn($q, $v) => $q->where('customer_id', $v)); $query->when($request->customer_id, fn($q, $v) => $q->where('customer_id', $v));
$query->when($request->has('status'), fn($q) => $q->where('status', $request->status)); $query->when($request->filled('status'), fn($q) => $q->where('status', $request->status));
$query->when($request->type, fn($q, $v) => $q->where('type', $v)); $query->when($request->type, fn($q, $v) => $q->where('type', $v));
return $this->paginate($query->latest()->paginate($request->input('per_page', 15))); return $this->paginate($query->latest()->paginate($request->input('per_page', 15)));
@@ -13,7 +13,7 @@ class PrepaidCardController extends Controller
{ {
$query = PrepaidCard::query(); $query = PrepaidCard::query();
$query->when($request->name, fn($q, $v) => $q->where('name', 'like', "%{$v}%")); $query->when($request->name, fn($q, $v) => $q->where('name', 'like', "%{$v}%"));
$query->when($request->has('status'), fn($q) => $q->where('status', $request->status)); $query->when($request->filled('status'), fn($q) => $q->where('status', $request->status));
return $this->paginate($query->orderBy('sort')->paginate($request->input('per_page', 15))); return $this->paginate($query->orderBy('sort')->paginate($request->input('per_page', 15)));
} }
@@ -15,7 +15,7 @@ class AttendanceRecordController extends Controller
$query->when($request->user_id, fn($q, $v) => $q->where('user_id', $v)); $query->when($request->user_id, fn($q, $v) => $q->where('user_id', $v));
$query->when($request->start_date, fn($q, $v) => $q->where('attendance_date', '>=', $v)); $query->when($request->start_date, fn($q, $v) => $q->where('attendance_date', '>=', $v));
$query->when($request->end_date, fn($q, $v) => $q->where('attendance_date', '<=', $v)); $query->when($request->end_date, fn($q, $v) => $q->where('attendance_date', '<=', $v));
$query->when($request->has('status'), fn($q) => $q->where('status', $request->status)); $query->when($request->filled('status'), fn($q) => $q->where('status', $request->status));
return $this->paginate($query->latest('attendance_date')->paginate($request->input('per_page', 15))); return $this->paginate($query->latest('attendance_date')->paginate($request->input('per_page', 15)));
} }
@@ -13,7 +13,7 @@ class EmployeeProfileController extends Controller
{ {
$query = EmployeeProfile::query()->with('user'); $query = EmployeeProfile::query()->with('user');
$query->when($request->user_id, fn($q, $v) => $q->where('user_id', $v)); $query->when($request->user_id, fn($q, $v) => $q->where('user_id', $v));
$query->when($request->has('status'), fn($q) => $q->where('status', $request->status)); $query->when($request->filled('status'), fn($q) => $q->where('status', $request->status));
return $this->paginate($query->latest()->paginate($request->input('per_page', 15))); return $this->paginate($query->latest()->paginate($request->input('per_page', 15)));
} }
@@ -14,7 +14,7 @@ class LeaveRequestController extends Controller
$query = LeaveRequest::query()->with('user'); $query = LeaveRequest::query()->with('user');
$query->when($request->user_id, fn($q, $v) => $q->where('user_id', $v)); $query->when($request->user_id, fn($q, $v) => $q->where('user_id', $v));
$query->when($request->type, fn($q, $v) => $q->where('type', $v)); $query->when($request->type, fn($q, $v) => $q->where('type', $v));
$query->when($request->has('status'), fn($q) => $q->where('status', $request->status)); $query->when($request->filled('status'), fn($q) => $q->where('status', $request->status));
return $this->paginate($query->latest()->paginate($request->input('per_page', 15))); return $this->paginate($query->latest()->paginate($request->input('per_page', 15)));
} }
@@ -14,7 +14,7 @@ class SalaryRecordController extends Controller
$query = SalaryRecord::query()->with('user'); $query = SalaryRecord::query()->with('user');
$query->when($request->user_id, fn($q, $v) => $q->where('user_id', $v)); $query->when($request->user_id, fn($q, $v) => $q->where('user_id', $v));
$query->when($request->year_month, fn($q, $v) => $q->where('year_month', $v)); $query->when($request->year_month, fn($q, $v) => $q->where('year_month', $v));
$query->when($request->has('status'), fn($q) => $q->where('status', $request->status)); $query->when($request->filled('status'), fn($q) => $q->where('status', $request->status));
return $this->paginate($query->latest()->paginate($request->input('per_page', 15))); return $this->paginate($query->latest()->paginate($request->input('per_page', 15)));
} }
@@ -14,7 +14,7 @@ class InventoryCheckController extends Controller
$query = InventoryCheck::query() $query = InventoryCheck::query()
->with(['warehouse', 'operator']) ->with(['warehouse', 'operator'])
->when($request->warehouse_id, fn($q, $v) => $q->where('warehouse_id', $v)) ->when($request->warehouse_id, fn($q, $v) => $q->where('warehouse_id', $v))
->when($request->has('status'), fn($q) => $q->where('status', $request->status)); ->when($request->filled('status'), fn($q) => $q->where('status', $request->status));
return $this->paginate($query->latest()->paginate($request->input('per_page', 15))); return $this->paginate($query->latest()->paginate($request->input('per_page', 15)));
} }
@@ -12,7 +12,7 @@ class PurchaseOrderController extends Controller
$query = PurchaseOrder::query()->with(['supplier','auditor']); $query = PurchaseOrder::query()->with(['supplier','auditor']);
$query->when($request->order_no, fn($q, $v) => $q->where('order_no', 'like', "%{$v}%")); $query->when($request->order_no, fn($q, $v) => $q->where('order_no', 'like', "%{$v}%"));
$query->when($request->supplier_id, fn($q, $v) => $q->where('supplier_id', $v)); $query->when($request->supplier_id, fn($q, $v) => $q->where('supplier_id', $v));
$query->when($request->has('status'), fn($q) => $q->where('status', $request->status)); $query->when($request->filled('status'), fn($q) => $q->where('status', $request->status));
return $this->paginate($query->latest()->paginate($request->input('per_page', 15))); return $this->paginate($query->latest()->paginate($request->input('per_page', 15)));
} }
public function store(Request $request): JsonResponse public function store(Request $request): JsonResponse
@@ -13,7 +13,7 @@ class StockMovementController extends Controller
$query = StockMovement::query()->with('warehouse'); $query = StockMovement::query()->with('warehouse');
$query->when($request->warehouse_id, fn($q, $v) => $q->where('warehouse_id', $v)); $query->when($request->warehouse_id, fn($q, $v) => $q->where('warehouse_id', $v));
$query->when($request->type, fn($q, $v) => $q->where('type', $v)); $query->when($request->type, fn($q, $v) => $q->where('type', $v));
$query->when($request->has('status'), fn($q) => $q->where('status', $request->status)); $query->when($request->filled('status'), fn($q) => $q->where('status', $request->status));
return $this->paginate($query->latest()->paginate($request->input('per_page', 15))); return $this->paginate($query->latest()->paginate($request->input('per_page', 15)));
} }
public function store(Request $request): JsonResponse public function store(Request $request): JsonResponse
@@ -14,7 +14,7 @@ class TransferOrderController extends Controller
$query = TransferOrder::query() $query = TransferOrder::query()
->with(['fromWarehouse', 'toWarehouse', 'operator']) ->with(['fromWarehouse', 'toWarehouse', 'operator'])
->when($request->transfer_no, fn($q, $v) => $q->where('transfer_no', 'like', "%{$v}%")) ->when($request->transfer_no, fn($q, $v) => $q->where('transfer_no', 'like', "%{$v}%"))
->when($request->has('status'), fn($q) => $q->where('status', $request->status)) ->when($request->filled('status'), fn($q) => $q->where('status', $request->status))
->when($request->from_warehouse_id, fn($q, $v) => $q->where('from_warehouse_id', $v)); ->when($request->from_warehouse_id, fn($q, $v) => $q->where('from_warehouse_id', $v));
return $this->paginate($query->latest()->paginate($request->input('per_page', 15))); return $this->paginate($query->latest()->paginate($request->input('per_page', 15)));
@@ -15,7 +15,7 @@ class DailyMealPlanController extends Controller
$query->when($request->customer_id, fn($q, $v) => $q->where('customer_id', $v)); $query->when($request->customer_id, fn($q, $v) => $q->where('customer_id', $v));
$query->when($request->plan_date, fn($q, $v) => $q->whereDate('plan_date', $v)); $query->when($request->plan_date, fn($q, $v) => $q->whereDate('plan_date', $v));
$query->when($request->meal_type, fn($q, $v) => $q->where('meal_type', $v)); $query->when($request->meal_type, fn($q, $v) => $q->where('meal_type', $v));
$query->when($request->has('status'), fn($q) => $q->where('status', $request->status)); $query->when($request->filled('status'), fn($q) => $q->where('status', $request->status));
return $this->paginate($query->latest()->paginate($request->input('per_page', 30))); return $this->paginate($query->latest()->paginate($request->input('per_page', 30)));
} }
@@ -14,7 +14,7 @@ class DishController extends Controller
$query = Dish::query(); $query = Dish::query();
$query->when($request->name, fn($q, $v) => $q->where('name', 'like', "%{$v}%")); $query->when($request->name, fn($q, $v) => $q->where('name', 'like', "%{$v}%"));
$query->when($request->category, fn($q, $v) => $q->where('category', $v)); $query->when($request->category, fn($q, $v) => $q->where('category', $v));
$query->when($request->has('status'), fn($q) => $q->where('status', $request->status)); $query->when($request->filled('status'), fn($q) => $q->where('status', $request->status));
return $this->paginate($query->latest()->paginate($request->input('per_page', 15))); return $this->paginate($query->latest()->paginate($request->input('per_page', 15)));
} }
@@ -14,7 +14,7 @@ class MealPlanTemplateController extends Controller
$query = MealPlanTemplate::query(); $query = MealPlanTemplate::query();
$query->when($request->name, fn($q, $v) => $q->where('name', 'like', "%{$v}%")); $query->when($request->name, fn($q, $v) => $q->where('name', 'like', "%{$v}%"));
$query->when($request->stage, fn($q, $v) => $q->where('stage', $v)); $query->when($request->stage, fn($q, $v) => $q->where('stage', $v));
$query->when($request->has('status'), fn($q) => $q->where('status', $request->status)); $query->when($request->filled('status'), fn($q) => $q->where('status', $request->status));
return $this->paginate($query->latest()->paginate($request->input('per_page', 15))); return $this->paginate($query->latest()->paginate($request->input('per_page', 15)));
} }
@@ -12,7 +12,7 @@ class NannyOrderController extends Controller
$query = NannyOrder::query()->with(['customer','nanny']); $query = NannyOrder::query()->with(['customer','nanny']);
$query->when($request->customer_id, fn($q, $v) => $q->where('customer_id', $v)); $query->when($request->customer_id, fn($q, $v) => $q->where('customer_id', $v));
$query->when($request->nanny_id, fn($q, $v) => $q->where('nanny_id', $v)); $query->when($request->nanny_id, fn($q, $v) => $q->where('nanny_id', $v));
$query->when($request->has('status'), fn($q) => $q->where('status', $request->status)); $query->when($request->filled('status'), fn($q) => $q->where('status', $request->status));
return $this->paginate($query->latest()->paginate($request->input('per_page', 15))); return $this->paginate($query->latest()->paginate($request->input('per_page', 15)));
} }
@@ -15,7 +15,7 @@ class ApprovalController extends Controller
public function index(Request $request): JsonResponse public function index(Request $request): JsonResponse
{ {
$query = Approval::query()->with(['template', 'applicant']); $query = Approval::query()->with(['template', 'applicant']);
$query->when($request->has('status'), fn($q) => $q->where('status', $request->status)); $query->when($request->filled('status'), fn($q) => $q->where('status', $request->status));
$query->when($request->applicant_id, fn($q, $v) => $q->where('applicant_id', $v)); $query->when($request->applicant_id, fn($q, $v) => $q->where('applicant_id', $v));
return $this->paginate($query->latest()->paginate($request->input('per_page', 15))); return $this->paginate($query->latest()->paginate($request->input('per_page', 15)));
@@ -13,7 +13,7 @@ class ApprovalTemplateController extends Controller
{ {
$query = ApprovalTemplate::query(); $query = ApprovalTemplate::query();
$query->when($request->type, fn($q, $v) => $q->where('type', $v)); $query->when($request->type, fn($q, $v) => $q->where('type', $v));
$query->when($request->has('status'), fn($q) => $q->where('status', $request->status)); $query->when($request->filled('status'), fn($q) => $q->where('status', $request->status));
return $this->paginate($query->orderBy('sort')->latest()->paginate($request->input('per_page', 15))); return $this->paginate($query->orderBy('sort')->latest()->paginate($request->input('per_page', 15)));
} }
@@ -15,7 +15,7 @@ class ReservationController extends Controller
$query = Reservation::query()->with(['customer', 'room.roomType']); $query = Reservation::query()->with(['customer', 'room.roomType']);
$query->when($request->customer_id, fn($q, $v) => $q->where('customer_id', $v)); $query->when($request->customer_id, fn($q, $v) => $q->where('customer_id', $v));
$query->when($request->room_id, fn($q, $v) => $q->where('room_id', $v)); $query->when($request->room_id, fn($q, $v) => $q->where('room_id', $v));
$query->when($request->status, fn($q, $v) => $q->where('status', $v)); $query->when($request->filled('status'), fn($q, $v) => $q->where('status', $v));
$query->when($request->check_in_date, fn($q, $v) => $q->whereDate('check_in_date', $v)); $query->when($request->check_in_date, fn($q, $v) => $q->whereDate('check_in_date', $v));
return $this->paginate($query->latest()->paginate($request->input('per_page', 15))); return $this->paginate($query->latest()->paginate($request->input('per_page', 15)));
@@ -13,7 +13,7 @@ class RoomTypeController extends Controller
{ {
$query = RoomType::query()->withCount('rooms'); $query = RoomType::query()->withCount('rooms');
$query->when($request->name, fn($q, $v) => $q->where('name', 'like', "%{$v}%")); $query->when($request->name, fn($q, $v) => $q->where('name', 'like', "%{$v}%"));
$query->when($request->has('status'), fn($q) => $q->where('status', $request->status)); $query->when($request->filled('status'), fn($q) => $q->where('status', $request->status));
return $this->paginate($query->orderBy('sort')->paginate($request->input('per_page', 15))); return $this->paginate($query->orderBy('sort')->paginate($request->input('per_page', 15)));
} }
@@ -12,7 +12,7 @@ class ServiceExecutionController extends Controller
$query = ServiceExecution::query()->with(['order','serviceItem','customer','technician']); $query = ServiceExecution::query()->with(['order','serviceItem','customer','technician']);
$query->when($request->service_order_id, fn($q, $v) => $q->where('service_order_id', $v)); $query->when($request->service_order_id, fn($q, $v) => $q->where('service_order_id', $v));
$query->when($request->technician_id, fn($q, $v) => $q->where('technician_id', $v)); $query->when($request->technician_id, fn($q, $v) => $q->where('technician_id', $v));
$query->when($request->has('status'), fn($q) => $q->where('status', $request->status)); $query->when($request->filled('status'), fn($q) => $q->where('status', $request->status));
return $this->paginate($query->latest()->paginate($request->input('per_page', 15))); return $this->paginate($query->latest()->paginate($request->input('per_page', 15)));
} }
@@ -12,7 +12,7 @@ class ServiceItemController extends Controller
$query = ServiceItem::query(); $query = ServiceItem::query();
$query->when($request->name, fn($q, $v) => $q->where('name', 'like', "%{$v}%")); $query->when($request->name, fn($q, $v) => $q->where('name', 'like', "%{$v}%"));
$query->when($request->category, fn($q, $v) => $q->where('category', $v)); $query->when($request->category, fn($q, $v) => $q->where('category', $v));
$query->when($request->has('status'), fn($q) => $q->where('status', $request->status)); $query->when($request->filled('status'), fn($q) => $q->where('status', $request->status));
return $this->paginate($query->latest()->paginate($request->input('per_page', 15))); return $this->paginate($query->latest()->paginate($request->input('per_page', 15)));
} }
@@ -13,7 +13,7 @@ class ServiceOrderController extends Controller
$query->when($request->order_no, fn($q, $v) => $q->where('order_no', 'like', "%{$v}%")); $query->when($request->order_no, fn($q, $v) => $q->where('order_no', 'like', "%{$v}%"));
$query->when($request->customer_id, fn($q, $v) => $q->where('customer_id', $v)); $query->when($request->customer_id, fn($q, $v) => $q->where('customer_id', $v));
$query->when($request->type, fn($q, $v) => $q->where('type', $v)); $query->when($request->type, fn($q, $v) => $q->where('type', $v));
$query->when($request->has('status'), fn($q) => $q->where('status', $request->status)); $query->when($request->filled('status'), fn($q) => $q->where('status', $request->status));
return $this->paginate($query->latest()->paginate($request->input('per_page', 15))); return $this->paginate($query->latest()->paginate($request->input('per_page', 15)));
} }
@@ -11,7 +11,7 @@ class ServicePackageController extends Controller
{ {
$query = ServicePackage::query(); $query = ServicePackage::query();
$query->when($request->name, fn($q, $v) => $q->where('name', 'like', "%{$v}%")); $query->when($request->name, fn($q, $v) => $q->where('name', 'like', "%{$v}%"));
$query->when($request->has('status'), fn($q) => $q->where('status', $request->status)); $query->when($request->filled('status'), fn($q) => $q->where('status', $request->status));
return $this->paginate($query->latest()->paginate($request->input('per_page', 15))); return $this->paginate($query->latest()->paginate($request->input('per_page', 15)));
} }
@@ -13,7 +13,7 @@ class RegistrationPackageController extends Controller
{ {
$packages = RegistrationPackage::when($request->keyword, fn($q) => $packages = RegistrationPackage::when($request->keyword, fn($q) =>
$q->where('name', 'like', "%{$request->keyword}%")) $q->where('name', 'like', "%{$request->keyword}%"))
->when($request->has('status'), fn($q) => ->when($request->filled('status'), fn($q) =>
$q->where('status', $request->status)) $q->where('status', $request->status))
->orderBy('sort')->orderByDesc('id') ->orderBy('sort')->orderByDesc('id')
->paginate($request->input('page_size', 20)); ->paginate($request->input('page_size', 20));
@@ -24,7 +24,7 @@ class UserController extends Controller
if ($request->department_id) { if ($request->department_id) {
$query->where('department_id', $request->department_id); $query->where('department_id', $request->department_id);
} }
if ($request->has('status')) { if ($request->filled('status')) {
$query->where('status', $request->status); $query->where('status', $request->status);
} }
+32 -4
View File
@@ -17,7 +17,9 @@ trait BelongsToStore
{ {
// 查询自动过滤门店 // 查询自动过滤门店
static::addGlobalScope('store', function (Builder $builder) { static::addGlobalScope('store', function (Builder $builder) {
if ($storeId = self::getCurrentStoreId()) { // 超管:不带 X-Store-Id 时默认“总览”(不加 store 过滤)
// 普通用户:按自身 store_id 过滤
if ($storeId = self::getQueryStoreId()) {
$builder->where($builder->getModel()->getTable() . '.store_id', $storeId); $builder->where($builder->getModel()->getTable() . '.store_id', $storeId);
} }
}); });
@@ -25,7 +27,10 @@ trait BelongsToStore
// 创建时自动填入 store_id // 创建时自动填入 store_id
static::creating(function ($model) { static::creating(function ($model) {
if (empty($model->store_id)) { if (empty($model->store_id)) {
$model->store_id = self::getCurrentStoreId(); // 创建时:超管若指定 X-Store-Id 则写入该门店;否则落到自身 store_id
if ($storeId = self::getCreateStoreId()) {
$model->store_id = $storeId;
}
} }
}); });
} }
@@ -35,12 +40,35 @@ trait BelongsToStore
return $this->belongsTo(Store::class); return $this->belongsTo(Store::class);
} }
private static function getCurrentStoreId(): ?int private static function getQueryStoreId(): ?int
{ {
$user = auth()->user(); $user = auth()->user();
if ($user && $user->is_super && request()->header('X-Store-Id')) { if (!$user) {
return null;
}
// 超管默认总览:不传 X-Store-Id 则不做门店过滤
if ($user->is_super) {
if (request()->header('X-Store-Id')) {
return (int) request()->header('X-Store-Id');
}
return null;
}
return $user?->store_id;
}
private static function getCreateStoreId(): ?int
{
$user = auth()->user();
if (!$user) {
return null;
}
if ($user->is_super && request()->header('X-Store-Id')) {
return (int) request()->header('X-Store-Id'); return (int) request()->header('X-Store-Id');
} }
return $user?->store_id; return $user?->store_id;
} }
} }
+29
View File
@@ -1,6 +1,30 @@
import axios from 'axios' import axios from 'axios'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
function normalizeParams(params) {
if (!params || typeof params !== 'object') return params
const p = { ...params }
// Normalize pagination params (some endpoints use per_page, some use page_size)
if (p.per_page !== undefined && p.per_page !== null && p.page_size === undefined) {
p.page_size = p.per_page
}
if (p.page_size !== undefined && p.page_size !== null && p.per_page === undefined) {
p.per_page = p.page_size
}
// Remove empty filters to avoid backend `has('status')` treating '' as a real filter
for (const key of Object.keys(p)) {
const v = p[key]
if (v === '' || v === null || v === undefined) {
delete p[key]
}
}
return p
}
const request = axios.create({ const request = axios.create({
baseURL: '/api/v1', baseURL: '/api/v1',
timeout: 15000, timeout: 15000,
@@ -17,6 +41,11 @@ request.interceptors.request.use(
if (token) { if (token) {
config.headers['Authorization'] = `Bearer ${token}` config.headers['Authorization'] = `Bearer ${token}`
} }
if (config.params) {
config.params = normalizeParams(config.params)
}
return config return config
}, },
(error) => { (error) => {
@@ -25,7 +25,7 @@ async function fetchList() {
loading.value = true loading.value = true
try { try {
const res = await financeCategoryApi.getList({ ...searchForm, ...pagination }) const res = await financeCategoryApi.getList({ ...searchForm, ...pagination })
tableData.value = res.data?.list || res.data?.data || [] tableData.value = Array.isArray(res.data) ? res.data : (res.data?.list || res.data?.data || [])
total.value = res.data?.total || 0 total.value = res.data?.total || 0
} finally { loading.value = false } } finally { loading.value = false }
} }
@@ -73,7 +73,8 @@ async function fetchTypeList() {
keyword: typeSearch.keyword, keyword: typeSearch.keyword,
...typePagination ...typePagination
}) })
typeList.value = res.data?.list || [] const types = Array.isArray(res.data) ? res.data : (res.data?.list || res.data?.data || [])
typeList.value = types
typeTotal.value = res.data?.total || 0 typeTotal.value = res.data?.total || 0
// Auto-select first type // Auto-select first type
if (!selectedType.value && typeList.value.length > 0) { if (!selectedType.value && typeList.value.length > 0) {
+2 -2
View File
@@ -64,8 +64,8 @@ async function fetchTree() {
loading.value = true loading.value = true
try { try {
const res = await menuApi.getList({ per_page: 500 }) const res = await menuApi.getList({ per_page: 500 })
const flat = res.data?.list || res.data?.data || [] const raw = Array.isArray(res.data) ? res.data : (res.data?.list || res.data?.data || [])
treeData.value = buildTree(flat) treeData.value = buildTree(raw)
} catch { } catch {
// //
} finally { } finally {