export const sourceCategories = [
  { value: 'enterprise', label: '企业管理系统' },
  { value: 'mall', label: '商城系统' },
  { value: 'office', label: 'OA 办公' },
  { value: 'lowcode', label: '低代码平台' },
  { value: 'microservice', label: '微服务脚手架' }
]

export const sourceProjects = [
  {
    id: 'dms-platform',
    name: '商用车 DMS 管理系统',
    category: 'enterprise',
    coverText: 'DMS',
    summary: '覆盖经销商、维修工单、索赔、配件库存、服务活动和结算的商用车售后管理源码。',
    price: '¥399',
    views: 2860,
    updateTime: '2026-05-18',
    tags: ['Spring Boot', 'Vue2', 'MySQL'],
    modules: ['经销商管理', '维修工单', '配件库存', '索赔结算', '服务活动'],
    scenes: ['汽车后市场', '商用车售后', '经销商协同'],
    descriptionMd: `# 商用车 DMS 管理系统

这套源码面向商用车售后服务场景，提供经销商、车辆档案、维修工单、索赔流程、配件库存和结算对账等核心能力。

## 核心功能

- 经销商档案、服务站和维修技师管理
- 车辆档案、保养提醒和维修历史追踪
- 维修工单、派工、完工质检和费用结算
- 配件入库、出库、调拨和库存预警
- 索赔申请、审核、结算和统计报表

## 技术栈

| 层级 | 技术 |
| --- | --- |
| 后端 | Spring Boot、MyBatis、Spring Security |
| 前端 | Vue2、Element UI |
| 数据库 | MySQL |

## 目录结构

\`\`\`text
dms-platform
├─ backend
├─ admin-web
├─ sql
└─ docs
\`\`\`

## 适合人群

适合需要快速交付售后服务、维修工单、配件库存类系统的开发团队。`
  },
  {
    id: 'mall-order-system',
    name: '商城订单管理系统',
    category: 'mall',
    coverText: 'MALL',
    summary: '包含商品、订单、支付、库存、优惠券、会员和后台统计模块的商城管理源码。',
    price: '¥299',
    views: 1980,
    updateTime: '2026-05-15',
    tags: ['Spring Cloud', 'Redis', 'Vue3'],
    modules: ['商品中心', '订单中心', '支付记录', '会员体系', '营销活动'],
    scenes: ['电商后台', '订单运营', '会员营销'],
    descriptionMd: `# 商城订单管理系统

项目提供从商品上架到订单履约的完整后台管理能力，适合作为中小型商城或订单中台的启动源码。

## 功能模块

- 商品分类、SKU、库存和上下架
- 购物车、订单、支付记录和售后单
- 优惠券、满减活动和会员等级
- 后台统计看板和经营数据导出

## 部署说明

\`\`\`bash
npm install
npm run build
\`\`\`

后端服务默认读取 MySQL 与 Redis 配置，可按环境拆分配置文件。`
  },
  {
    id: 'oa-approval-suite',
    name: 'OA 办公审批系统',
    category: 'office',
    coverText: 'OA',
    summary: '集成用户、角色、菜单、审批流、请假、报销、公告和文件管理的办公源码。',
    price: '¥268',
    views: 1750,
    updateTime: '2026-05-12',
    tags: ['Sa-Token', 'Element UI', '工作流'],
    modules: ['审批流程', '请假报销', '公告通知', '文件管理', '权限菜单'],
    scenes: ['企业内网', '行政审批', '协同办公'],
    descriptionMd: `# OA 办公审批系统

这是一套偏企业内网办公的基础源码，重点覆盖审批、公告、文件与权限管理。

## 亮点

- 可配置审批节点和审批人
- 请假、报销、外出等常见办公流程
- 公告通知、附件上传和文件归档
- 角色、菜单、按钮级权限控制

> 适合二次开发为企业内部管理平台。`
  },
  {
    id: 'erp-warehouse',
    name: 'ERP 仓储管理系统',
    category: 'enterprise',
    coverText: 'ERP',
    summary: '提供采购、销售、入库、出库、盘点、供应商和库存报表模块的仓储源码。',
    price: '¥199',
    views: 1320,
    updateTime: '2026-05-09',
    tags: ['ERP', 'MyBatis-Plus', 'Excel'],
    modules: ['采购入库', '销售出库', '库存盘点', '供应商管理', '报表导出'],
    scenes: ['仓储管理', '进销存', '供应链后台'],
    descriptionMd: `# ERP 仓储管理系统

源码聚焦进销存和仓储管理，适合小型供应链、仓库和贸易公司快速搭建业务后台。

## 模块清单

- 采购订单、采购入库和供应商档案
- 销售订单、销售出库和客户档案
- 库存流水、库存盘点和预警规则
- Excel 导入导出与库存报表`
  },
  {
    id: 'lowcode-form-platform',
    name: '低代码表单平台',
    category: 'lowcode',
    coverText: 'FORM',
    summary: '支持动态表单、拖拽布局、字段配置、数据字典和在线设计的低代码源码。',
    price: '¥499',
    views: 980,
    updateTime: '2026-05-06',
    tags: ['Vue3', 'Element Plus', '拖拽设计'],
    modules: ['表单设计器', '字段配置', '动态校验', '数据字典', '表单预览'],
    scenes: ['低代码平台', '动态表单', '配置化后台'],
    descriptionMd: `# 低代码表单平台

项目用于构建配置化表单和数据采集页面，包含设计器、字段配置、预览和提交数据管理。

## 能力范围

- 拖拽式表单组件编排
- 字段属性、校验规则和选项配置
- 字典数据联动
- 表单预览与数据提交记录`
  },
  {
    id: 'microservice-auth-starter',
    name: '微服务权限脚手架',
    category: 'microservice',
    coverText: 'MS',
    summary: '集成网关、认证中心、系统服务、日志服务、文件服务和监控基础能力的脚手架源码。',
    price: '¥599',
    views: 2560,
    updateTime: '2026-05-03',
    tags: ['Spring Cloud', 'Nacos', 'Gateway'],
    modules: ['网关服务', '认证中心', '系统服务', '日志中心', '文件服务'],
    scenes: ['微服务基础架构', '权限平台', '多服务治理'],
    descriptionMd: `# 微服务权限脚手架

这套源码适合从单体后台升级到微服务架构的团队，预置认证、网关、系统权限和基础监控能力。

## 服务组成

- Gateway 网关统一鉴权和路由
- Auth 认证中心
- System 系统权限服务
- Log 操作日志服务
- File 文件服务

## 推荐用途

可作为企业级微服务后台的基础工程，按业务域继续拆分服务。`
  }
]

export function listSourceCategories() {
  const usedCategories = new Set(sourceProjects.map((project) => project.category))
  return [
    { value: 'all', label: '全部源码' },
    ...sourceCategories.filter((category) => usedCategories.has(category.value))
  ]
}

export function findSourceProject(id) {
  return sourceProjects.find((project) => project.id === id) || null
}

export function filterSourceProjects({ category = 'all', keyword = '' } = {}) {
  const normalizedKeyword = keyword.trim().toLowerCase()
  return sourceProjects.filter((project) => {
    const categoryMatched = category === 'all' || project.category === category
    if (!categoryMatched) return false
    if (!normalizedKeyword) return true

    const searchText = [
      project.name,
      project.summary,
      ...project.tags,
      ...project.modules,
      ...project.scenes
    ].join(' ').toLowerCase()
    return searchText.includes(normalizedKeyword)
  })
}
