100 lines
3.8 KiB
Python
100 lines
3.8 KiB
Python
from copy import deepcopy
|
|
|
|
|
|
class DemoStore:
|
|
def __init__(self) -> None:
|
|
self.users = {
|
|
("sales01", "salesman"): {
|
|
"user_id": 1,
|
|
"username": "sales01",
|
|
"real_name": "张三",
|
|
"mobile": "13800000000",
|
|
"role_id": 2,
|
|
"role_name": "业务员",
|
|
"role_code": "salesman",
|
|
"token": "demo-sales-token",
|
|
"menus": [{"menu_name": "我的订单", "menu_path": "/orders"}],
|
|
"permissions": ["order:create", "order:list", "order:submit"],
|
|
},
|
|
("admin01", "admin"): {
|
|
"user_id": 99,
|
|
"username": "admin01",
|
|
"real_name": "管理员",
|
|
"mobile": "13900000001",
|
|
"role_id": 1,
|
|
"role_name": "管理员",
|
|
"role_code": "admin",
|
|
"token": "demo-admin-token",
|
|
"menus": [{"menu_name": "后台首页", "menu_path": "/dashboard"}],
|
|
"permissions": ["system:user:list", "system:role:list", "order:list"],
|
|
},
|
|
}
|
|
self.orders = [
|
|
{
|
|
"order_id": 9001,
|
|
"order_no": "SO202605140001",
|
|
"customer_name": "李四",
|
|
"customer_mobile": "13900000000",
|
|
"salesman_name": "张三",
|
|
"order_status": "draft",
|
|
"sale_price_total": 100.0,
|
|
"profit_total": 20.0,
|
|
"commission_amount": 50.0,
|
|
"created_at": "2026-05-14 10:00:00",
|
|
"items": [],
|
|
"approve_logs": [],
|
|
"attachments": [],
|
|
"remark": "演示订单",
|
|
}
|
|
]
|
|
|
|
def login(self, username: str, role_type: str) -> dict | None:
|
|
user = self.users.get((username, role_type))
|
|
return deepcopy(user) if user else None
|
|
|
|
def get_me(self, token: str) -> dict | None:
|
|
for user in self.users.values():
|
|
if user["token"] == token:
|
|
data = deepcopy(user)
|
|
return data
|
|
return None
|
|
|
|
def list_orders(self) -> list[dict]:
|
|
return deepcopy(self.orders)
|
|
|
|
def get_order(self, order_id: int) -> dict | None:
|
|
for order in self.orders:
|
|
if order["order_id"] == order_id:
|
|
return deepcopy(order)
|
|
return None
|
|
|
|
def create_order(self, payload: dict) -> dict:
|
|
next_id = max(order["order_id"] for order in self.orders) + 1 if self.orders else 9001
|
|
sale_total = sum(item["quantity"] * item["sale_price"] for item in payload["items"])
|
|
cost_total = sum(item["quantity"] * item["cost_price"] for item in payload["items"])
|
|
profit_total = sale_total - cost_total - payload["rebate_total"] - payload["freight_total"] - payload["tax_total"] - payload["other_fee_total"]
|
|
profit_rate = round((profit_total / sale_total) * 100, 2) if sale_total else 0
|
|
order = {
|
|
"order_id": next_id,
|
|
"order_no": f"SO{next_id}",
|
|
"customer_name": payload["customer_name"],
|
|
"customer_mobile": payload["customer_mobile"],
|
|
"salesman_name": "张三",
|
|
"order_status": "draft",
|
|
"sale_price_total": round(sale_total, 2),
|
|
"cost_price_total": round(cost_total, 2),
|
|
"profit_total": round(profit_total, 2),
|
|
"profit_rate": profit_rate,
|
|
"commission_amount": payload["commission_amount"],
|
|
"created_at": "2026-05-14 12:00:00",
|
|
"items": payload["items"],
|
|
"approve_logs": [],
|
|
"attachments": [],
|
|
"remark": payload.get("remark"),
|
|
}
|
|
self.orders.append(order)
|
|
return deepcopy(order)
|
|
|
|
|
|
demo_store = DemoStore()
|