from django.contrib import admin from basic_info.services import CustomerVisibilityService from . import models class AdminBase(admin.ModelAdmin): """管理员基础类,定义通用配置""" def get_readonly_fields(self, request, obj = ...): readonly_fields = list(super().get_readonly_fields(request, obj)) if request.user.is_superuser: readonly_fields.append('merchant') return readonly_fields def get_list_display(self, request): result = super().get_list_display(request) result = list(result) if 'id' not in result: result = ['id'] + result if request.user.is_superuser and 'merchant' not in result: result = result + ['merchant'] return result def save_model(self, request, obj, form, change): if not change: if not obj.merchant_id: obj.merchant_id = request.user.employee.merchant.id return super().save_model(request, obj, form, change) @admin.register(models.QuickInput) class QuickInputAdmin(admin.ModelAdmin): list_display = ('name', 'value', 'group') list_filter = ('group',) @admin.register(models.Merchant) class MerchantAdmin(admin.ModelAdmin): list_display = ('name', 'type', 'email', 'mobile', 'auto_complete_stock_change') search_fields = ('name', 'mobile') list_filter = ('type', 'auto_complete_stock_change') @admin.register(models.Supplier) class SupplierAdmin(AdminBase): list_display = ('name', 'area', 'email', 'mobile') search_fields = ('name', 'area', 'email', 'mobile') @admin.register(models.ProductCategory) class ProductCategoryAdmin(AdminBase): list_display = ('name', 'product_prefix', 'description') search_fields = ('name',) @admin.register(models.Product) class ProductAdmin(AdminBase): list_display = ( 'name', 'category', 'human_id', 'color', 'width_size', 'transform_rate', 'single_price_in', 'single_price_out', ) search_fields = ('name', 'human_id') list_filter = ('category',) @admin.register(models.BankAccount) class BankAccountAdmin(AdminBase): list_display = ('name', 'auto_number') search_fields = ('name', 'auto_number') @admin.register(models.WareHouse) class WareHouseAdmin(AdminBase): list_display = ('name', 'location', 'area', 'mobile', 'mode') list_filter = ('area', 'mode') search_fields = ('name', 'location', 'mobile') @admin.register(models.Customer) class CustomerAdmin(AdminBase): list_display = ('name', 'area', 'email', 'mobile', 'created_by', 'total_debt') search_fields = ('name', 'area', 'email', 'mobile') def get_queryset(self, request): qs = super().get_queryset(request) qs = CustomerVisibilityService.filter_customers_for_employee(qs, request.user) return qs @admin.display(boolean=False, description='累欠金额') def total_debt(self, obj): return '0 (动态逻辑字段待实现)' @admin.register(models.Employee) class EmployeeAdmin(AdminBase): list_display = ('name', 'mobile', 'status', 'job_type', 'sys_user') search_fields = ('name', 'mobile') list_filter = ( 'job_type', 'status', ) @admin.register(models.DeviceInfo) class DeviceInfoAdmin(AdminBase): list_display = ('name', 'type', 'is_occupied', 'status') search_fields = ('name', 'start_working_at', 'stop_working_at') list_filter = ('type', 'status') @admin.register(models.VehicleType) class VehicleTypeAdmin(AdminBase): list_display = ('name', 'description') search_fields = ('name',) @admin.register(models.VehicleTransportRecord) class VehicleTransportRecordAdmin(AdminBase): list_display = ('driver_name', 'contact_number', 'delivery_date') search_fields = ('driver_name', 'contact_number') list_filter = ('vehicle_type',)