- 从服务器拉取完整代码 - 按框架规范整理项目结构 - 配置 Drone CI 测试环境部署 - 包含后端(FastAPI)、前端(Vue3)、管理端 技术栈: Vue3 + TypeScript + FastAPI + MySQL
77 lines
2.0 KiB
Python
77 lines
2.0 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
为轻医美连锁品牌注入基础“岗位”数据(真落库)。
|
|
|
|
- 场景:前端岗位下拉显示 No data 时,先注入标准岗位,便于联调验证
|
|
- 数据来源:行业通用岗位,后续可按门店组织结构扩展
|
|
"""
|
|
|
|
import asyncio
|
|
from typing import List
|
|
|
|
from sqlalchemy import select
|
|
|
|
try:
|
|
# 覆盖本地数据库连接(如存在)
|
|
import local_config # noqa: F401
|
|
except Exception:
|
|
pass
|
|
|
|
from app.core.database import AsyncSessionLocal
|
|
from app.models.position import Position
|
|
|
|
|
|
async def ensure_positions_exists(session, names: List[str]) -> int:
|
|
"""确保给定岗位名称存在于数据库,已存在则跳过。
|
|
|
|
返回新增的记录数。
|
|
"""
|
|
existing = (await session.execute(select(Position))).scalars().all()
|
|
existing_names = {p.name for p in existing}
|
|
|
|
added = 0
|
|
for name in names:
|
|
if name in existing_names:
|
|
continue
|
|
obj = Position(
|
|
name=name,
|
|
code=name, # 简化:与名称一致,前端无需依赖 code
|
|
description=f"{name} 岗位(系统初始化)",
|
|
status="active",
|
|
level="junior",
|
|
)
|
|
session.add(obj)
|
|
added += 1
|
|
|
|
if added:
|
|
await session.commit()
|
|
return added
|
|
|
|
|
|
async def main() -> None:
|
|
"""脚本入口:写入基础岗位数据并打印结果。"""
|
|
base_positions = [
|
|
"咨询师",
|
|
"治疗师",
|
|
"皮肤管理师",
|
|
"前台接待",
|
|
"门店店长",
|
|
"区域运营经理",
|
|
"市场专员",
|
|
"客服专员",
|
|
]
|
|
|
|
async with AsyncSessionLocal() as session:
|
|
added = await ensure_positions_exists(session, base_positions)
|
|
# 打印结果
|
|
print(f"✅ 岗位数据初始化完成,新增 {added} 条。")
|
|
|
|
rows = (await session.execute(select(Position))).scalars().all()
|
|
print("当前岗位:", ", ".join(p.name for p in rows))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(main())
|
|
|
|
|