This commit is contained in:
jeremygan2021
2026-02-11 01:31:29 +08:00
parent 2d090cd0f4
commit c3b4373c94
18 changed files with 894 additions and 263 deletions

View File

@@ -4,13 +4,13 @@ from django.db.models import Sum
from django import forms
from unfold.admin import ModelAdmin, TabularInline
from unfold.decorators import display
from .models import ESP32Config, Order, Salesperson, WeChatPayConfig, Service, ARService, ProductFeature, CommissionLog
from .models import ESP32Config, Order, Salesperson, WeChatPayConfig, Service, ARService, ProductFeature, CommissionLog, WeChatUser, Distributor, Withdrawal, ServiceOrder
import qrcode
from io import BytesIO
import base64
# 自定义后台标题
admin.site.site_header = "量迹AI硬件销售管理后台"
admin.site.site_header = "量迹AI科技硬件/服务商场后台"
admin.site.site_title = "量迹AI后台"
admin.site.index_title = "欢迎使用量迹AI管理系统"
@@ -122,6 +122,25 @@ class ServiceAdmin(ModelAdmin):
}),
)
@admin.register(ServiceOrder)
class ServiceOrderAdmin(ModelAdmin):
list_display = ('id', 'customer_name', 'service', 'total_price', 'status', 'salesperson', 'created_at')
list_filter = ('status', 'service', 'salesperson', 'created_at')
search_fields = ('id', 'customer_name', 'phone_number', 'email')
readonly_fields = ('total_price', 'created_at', 'updated_at')
fieldsets = (
('订单信息', {
'fields': ('service', 'status', 'total_price', 'created_at')
}),
('客户信息', {
'fields': ('customer_name', 'company_name', 'phone_number', 'email', 'requirements')
}),
('销售归属', {
'fields': ('salesperson',)
}),
)
@admin.register(ARService)
class ARServiceAdmin(ModelAdmin):
list_display = ('title', 'created_at')
@@ -251,3 +270,84 @@ class OrderAdmin(ModelAdmin):
'fields': ('wechat_trade_no',)
}),
)
@admin.register(WeChatUser)
class WeChatUserAdmin(ModelAdmin):
list_display = ('nickname', 'avatar_display', 'gender_display', 'province', 'city', 'created_at')
search_fields = ('nickname', 'openid')
list_filter = ('gender', 'province', 'city', 'created_at')
readonly_fields = ('openid', 'unionid', 'session_key', 'created_at', 'updated_at')
def avatar_display(self, obj):
if obj.avatar_url:
return format_html('<img src="{}" width="50" height="50" style="border-radius: 50%;" />', obj.avatar_url)
return "暂无"
avatar_display.short_description = "头像"
def gender_display(self, obj):
choices = {0: '未知', 1: '', 2: ''}
return choices.get(obj.gender, '未知')
gender_display.short_description = "性别"
fieldsets = (
('基本信息', {
'fields': ('user', 'nickname', 'avatar_url', 'gender')
}),
('位置信息', {
'fields': ('country', 'province', 'city')
}),
('认证信息', {
'fields': ('openid', 'unionid', 'session_key'),
'classes': ('collapse',)
}),
('时间信息', {
'fields': ('created_at', 'updated_at')
}),
)
@admin.register(Distributor)
class DistributorAdmin(ModelAdmin):
list_display = ('get_nickname', 'level', 'status', 'total_earnings', 'withdrawable_balance', 'invite_code', 'created_at')
search_fields = ('user__nickname', 'invite_code')
list_filter = ('status', 'level', 'created_at')
readonly_fields = ('total_earnings', 'withdrawable_balance', 'qr_code_url', 'created_at', 'updated_at')
autocomplete_fields = ['user', 'parent']
def get_nickname(self, obj):
return obj.user.nickname
get_nickname.short_description = "微信昵称"
get_nickname.admin_order_field = 'user__nickname'
fieldsets = (
('分销员信息', {
'fields': ('user', 'parent', 'level', 'status')
}),
('收益概览', {
'fields': ('commission_rate', 'total_earnings', 'withdrawable_balance')
}),
('推广信息', {
'fields': ('invite_code', 'qr_code_url')
}),
('时间信息', {
'fields': ('created_at', 'updated_at')
}),
)
@admin.register(Withdrawal)
class WithdrawalAdmin(ModelAdmin):
list_display = ('get_distributor', 'amount', 'status', 'created_at')
list_filter = ('status', 'created_at')
search_fields = ('distributor__user__nickname',)
def get_distributor(self, obj):
return obj.distributor.user.nickname
get_distributor.short_description = "分销员"
fieldsets = (
('提现详情', {
'fields': ('distributor', 'amount', 'status', 'remark')
}),
('时间信息', {
'fields': ('created_at', 'updated_at')
}),
)