mini
This commit is contained in:
@@ -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')
|
||||
}),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user