Просмотр исходного кода

feat: 收费记录新增停车场筛选——backend联表查询+前端下拉过滤+列表列

lq 1 месяц назад
Родитель
Сommit
121ed40bd4

+ 17 - 2
frontend/src/view/report/paymentRecord.vue

@@ -19,6 +19,11 @@
       <el-form-item :label="$t.value.LicensePlateNo">
         <el-input v-model="queryForm.plate_number" :placeholder="$t.value.carPlateInput" clearable />
       </el-form-item>
+      <el-form-item label="停车场">
+        <el-select v-model="queryForm.parking_lot_id" clearable placeholder="全部" style="width:160px">
+          <el-option v-for="lot in lotList" :key="lot.ID" :label="lot.lot_name" :value="lot.ID" />
+        </el-select>
+      </el-form-item>
       <el-form-item :label="$t.value.paymentMethod">
         <el-select v-model="queryForm.payment_method" clearable :placeholder="$t.value.pleaseSelect" style="width:140px">
           <el-option label="现金" value="cash" />
@@ -35,6 +40,7 @@
     </el-form>
 
     <el-table :data="list" height="605" border>
+      <el-table-column label="停车场" prop="parking_lot" align="center" width="120" />
       <el-table-column :label="$t.value.licensePlate" prop="plate_number" align="center" width="120" />
       <el-table-column :label="$t.value.VehicleType" prop="vehicle_type" align="center" width="100" />
       <el-table-column :label="$t.value.paymentMethod" align="center" width="100">
@@ -77,14 +83,22 @@
 <script setup>
 import { ref, reactive, onMounted } from 'vue'
 import { getPaymentList, getTodaySummary } from '@/api/payment'
+import { obtainPullOverList } from '@/api/pullOver'
 
-const queryForm = reactive({ plate_number: '', payment_method: '', page: 1, page_size: 10, start_date: '', end_date: '' })
+const queryForm = reactive({ plate_number: '', payment_method: '', parking_lot_id: null, page: 1, page_size: 10, start_date: '', end_date: '' })
 const dateRange = ref([])
 const list = ref([])
 const total = ref(0)
+const lotList = ref([])
 const summary = reactive({ total_amount: 0, cash_amount: 0, free_amount: 0, total_count: 0 })
 
-onMounted(() => { fetchList(); fetchSummary() })
+onMounted(() => { fetchList(); fetchSummary(); loadLotList() })
+
+function loadLotList() {
+  obtainPullOverList({ page: 1, pageSize: 100 }).then(res => {
+    if (res.code === 0) lotList.value = res.data?.list || []
+  })
+}
 
 function fetchSummary() {
   getTodaySummary().then(res => {
@@ -111,6 +125,7 @@ function fetchList() {
 function resetQuery() {
   queryForm.plate_number = ''
   queryForm.payment_method = ''
+  queryForm.parking_lot_id = null
   queryForm.page = 1
   dateRange.value = []
   fetchList()

+ 8 - 2
internal/modules/payment/repository/repo.go

@@ -16,6 +16,7 @@ func (r *PaymentRepository) Create(record *dao.PaymentRecord) error {
 type PaymentListQuery struct {
 	PlateNumber   string `form:"plate_number"`
 	PaymentMethod string `form:"payment_method"`
+	ParkingLotID  uint   `form:"parking_lot_id"`
 	StartDate     string `form:"start_date"`
 	EndDate       string `form:"end_date"`
 	Page          int    `form:"page"`
@@ -33,6 +34,7 @@ type PaymentListResult struct {
 	ChangeAmount  float64 `json:"change_amount"`
 	OperatorID    uint    `json:"operator_id"`
 	OperatorName  string  `json:"operator_name"`
+	ParkingLot    string  `json:"parking_lot"`
 	PaidAt        string  `json:"paid_at"`
 	EntryTime     string  `json:"entry_time"`
 	ExitTime      string  `json:"exit_time"`
@@ -44,16 +46,20 @@ func (r *PaymentRepository) List(q PaymentListQuery) ([]PaymentListResult, int64
 	db := global.GVA_DB.Table("payment_record").
 		Select(`payment_record.id, vehicle_record.plate_number, vehicle_type.name as vehicle_type, payment_record.payment_method,
 			payment_record.amount, payment_record.paid_amount, payment_record.change_amount,
-			payment_record.operator_id, sys_user.nick_name as operator_name, payment_record.paid_at,
+			payment_record.operator_id, sys_user.nick_name as operator_name, vehicle_record.parking_lot_id, parking_lot.lot_name as parking_lot, payment_record.paid_at,
 			vehicle_record.entry_time, vehicle_record.exit_time, vehicle_record.stay_time`).
 		Joins("LEFT JOIN vehicle_record ON vehicle_record.id = payment_record.record_id").
 		Joins("LEFT JOIN vehicle ON vehicle.plate_number = vehicle_record.plate_number").
 		Joins("LEFT JOIN vehicle_type ON vehicle_type.id = vehicle.vehicle_type_id").
-		Joins("LEFT JOIN sys_user ON sys_user.id = payment_record.operator_id")
+		Joins("LEFT JOIN sys_user ON sys_user.id = payment_record.operator_id").
+		Joins("LEFT JOIN parking_lot ON parking_lot.id = vehicle_record.parking_lot_id")
 
 	if q.PlateNumber != "" {
 		db = db.Where("vehicle_record.plate_number LIKE ?", "%"+q.PlateNumber+"%")
 	}
+	if q.ParkingLotID > 0 {
+		db = db.Where("vehicle_record.parking_lot_id = ?", q.ParkingLotID)
+	}
 	if q.PaymentMethod != "" {
 		db = db.Where("payment_record.payment_method = ?", q.PaymentMethod)
 	}