作为一个前后端分离的现代化管理系统,我们采用Vue3+TypeScript作为前端技术栈,Python FastAPI作为后端框架。这种架构选择主要基于以下几个考量:
前端技术选型:
后端技术选型:
数据库方面,MySQL和PostgreSQL都是可靠的选择。对于大多数维修店场景,MySQL已经足够。但如果需要更复杂的数据类型或地理空间查询,PostgreSQL会是更好的选择。
提示:实际项目中建议使用ORM工具(如SQLAlchemy)而非直接写SQL,这能提高代码可维护性并减少SQL注入风险。
采用RBAC(基于角色的访问控制)模型,定义三种角色:
JWT认证流程:
typescript复制// 前端路由守卫示例
router.beforeEach((to, from, next) => {
const token = localStorage.getItem('token')
const requiredRole = to.meta.role
if (!token && to.path !== '/login') {
return next('/login')
}
if (requiredRole && !checkUserRole(token, requiredRole)) {
return next('/403')
}
next()
})
订单状态机设计:
code复制待接单 → 处理中 → 已完成
↘ 已取消
关键数据结构:
python复制class OrderCreate(BaseModel):
device_type: str
fault_description: str
appointment_time: datetime
customer_id: int
address: str
class Order(OrderCreate):
id: int
status: str
repairman_id: Optional[int]
created_at: datetime
updated_at: datetime
实现思路:
python复制# 库存检查伪代码
async def check_inventory():
low_stock_items = await db.execute(
select(Inventory).where(Inventory.quantity < Inventory.threshold)
)
if low_stock_items:
await send_alert_email(low_stock_items)
核心逻辑:
python复制def calculate_distance(loc1, loc2):
# 使用Haversine公式计算两点间距离
lon1, lat1 = loc1
lon2, lat2 = loc2
# ... 距离计算实现 ...
return distance_km
def assign_order(order):
qualified_repairmen = get_repairmen_by_skills(order.required_skills)
ranked_repairmen = []
for r in qualified_repairmen:
score = 100 - calculate_distance(r.location, order.location)
ranked_repairmen.append((r, score))
return sorted(ranked_repairmen, key=lambda x: x[1], reverse=True)[0][0]
技术实现方案:
javascript复制// WebRTC连接建立
async function startCall() {
const stream = await navigator.mediaDevices.getUserMedia({video: true})
localVideo.srcObject = stream
const peer = new RTCPeerConnection(configuration)
stream.getTracks().forEach(track => peer.addTrack(track, stream))
// 处理信令交换...
}
推荐使用Docker Compose编排服务:
yaml复制version: '3'
services:
frontend:
build: ./frontend
ports:
- "80:80"
depends_on:
- backend
backend:
build: ./backend
ports:
- "8000:8000"
environment:
- DB_HOST=db
db:
image: postgres:13
volumes:
- db_data:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=secret
前端:
后端:
数据库:
Vue3响应式问题:
FastAPI异步陷阱:
跨域问题:
前端:
后端:
数据库:
响应式布局:
PWA支持:
维修数据分析:
可视化方案:
python复制# 数据分析示例
async def get_repair_stats():
return {
'avg_repair_time': await calculate_avg_repair_time(),
'common_faults': await get_common_faults(),
'busy_periods': await identify_busy_periods()
}
在实际开发过程中,我发现TypeScript的类型系统能有效减少前端bug,而FastAPI的自动文档生成功能极大方便了前后端协作。对于中小型维修店来说,这套系统完全能满足日常运营需求,且技术栈现代,维护成本低。