| event_payload |
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"89209aba1afe21133399ce0db0a47c2729c9a4b4","after":"a7c22fc0f5e2d113210bb58646dcdbf7381be245","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/89209aba1afe21133399ce0db0a47c2729c9a4b4...a7c22fc0f5e2d113210bb58646dcdbf7381be245","commits":[{"id":"a7c22fc0f5e2d113210bb58646dcdbf7381be245","message":"feat: 完善菜单系统与获客域组件\n\n菜单系统优化:\n- 完善路由配置和菜单定义\n- 优化侧边栏布局组件\n\n获客域改进:\n- 重构 CalendarSidebar 组件\n- 完善 useTodos composable 逻辑\n- 优化 acquisition Index 页面\n\nAPI 适配器优化:\n- 完善订单和报价模块接口\n- 优化类型定义\n\nCo-Authored-By: Claude Opus 4.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/a7c22fc0f5e2d113210bb58646dcdbf7381be245","author":{"name":"laoluojuhai","email":"laoluojuhai@users.noreply.github.com","username":""},"committer":{"name":"laoluojuhai","email":"laoluojuhai@users.noreply.github.com","username":""},"verification":null,"timestamp":"2026-01-24T13:15:57+08:00","added":[],"removed":[],"modified":["backend/src/modules/orders/order.service.ts","backend/src/modules/quotes/quote.service.ts","frontend/src/api/adapters.ts","frontend/src/api/modules/orders.ts","frontend/src/api/modules/quotes.ts","frontend/src/components/layout/SidebarV2.vue","frontend/src/router/index.ts","frontend/src/router/menu.ts","frontend/src/types/enums.ts","frontend/src/views/acquisition/Index.vue","frontend/src/views/acquisition/components/CalendarSidebar.vue","frontend/src/views/acquisition/composables/types.ts","frontend/src/views/acquisition/composables/useTodos.ts"]},{"id":"c33235407144b26da2f8210eafefcb17b16eb681","message":"feat(activity): 完善活动组件功能\n\n- 提取时间格式化工具函数到 utils/date.ts\n - formatMinutesToReadable: 格式化分钟数为可读格式\n - formatTimeOnly: 格式化时间为 HH:mm 格式\n - formatOverdue: 格式化逾期时间描述\n - getDateLabel: 获取日期友好标签(今天、昨天、周几)\n\n- ActivityTodayPanel 新增自动刷新功能\n - 添加 refreshInterval prop 配置刷新间隔\n - 实现定时器自动刷新机制\n - 添加生命周期管理确保定时器正确清理\n\n- ActivityQuickCreate 新增最近使用类型功能\n - 使用 localStorage 持久化最近使用的活动类型\n - 快捷类型列表优先显示最近使用的类型\n - 创建成功后自动保存到最近使用列表\n\n- ActivityTimeline 代码优化\n - 使用共享工具函数替代本地重复代码\n - 简化 groupedActivities 计算逻辑\n\nCo-Authored-By: Claude Opus 4.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/c33235407144b26da2f8210eafefcb17b16eb681","author":{"name":"laoluojuhai","email":"laoluojuhai@users.noreply.github.com","username":""},"committer":{"name":"laoluojuhai","email":"laoluojuhai@users.noreply.github.com","username":""},"verification":null,"timestamp":"2026-01-24T13:15:47+08:00","added":[],"removed":[],"modified":["frontend/src/components/business/ActivityQuickCreate.vue","frontend/src/components/business/ActivityTimeline.vue","frontend/src/components/business/ActivityTodayPanel.vue","frontend/src/components/business/WorkstationCalendarGantt.vue","frontend/src/utils/date.ts"]},{"id":"89aabcffe0caa49473f79ba33ee5a776168823d3","message":"fix(types): 修复 TypeScript 类型错误\n\n- tsconfig.json: 添加 Node.js 类型定义\n- slow-query.middleware.ts: 修复 Express 类型导入\n- encryption.middleware.ts: 修复泛型索引类型错误\n- encryption.service.ts: 修复泛型索引类型错误\n- outbox-processor.service.ts: 添加 Kafka producer 空值检查\n\n剩余类型错误主要为 Prisma 相关,需要执行 prisma generate\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/89aabcffe0caa49473f79ba33ee5a776168823d3","author":{"name":"Claude","email":"noreply@anthropic.com","username":""},"committer":{"name":"Claude","email":"noreply@anthropic.com","username":""},"verification":null,"timestamp":"2026-01-24T04:42:53Z","added":[],"removed":[],"modified":["backend/src/shared/middleware/encryption.middleware.ts","backend/src/shared/middleware/slow-query.middleware.ts","backend/src/shared/services/encryption.service.ts","backend/src/shared/services/outbox-processor.service.ts","backend/tsconfig.json"]},{"id":"abd654ed9ddbab9a988c89074448d591135d7d51","message":"docs(claude): 新增 Claude Code 工具使用规范章节\n\n新增内容:\n- 工具选择决策树(快速判断使用哪个工具)\n- 文件操作工具规范(Read/Glob/Grep/Edit/Write)\n- 命令执行工具规范(Bash 适用场景和禁止操作)\n- Task 工具使用指南(11 种 Agent 类型选择)\n- TodoWrite 任务追踪规范\n- Web 工具使用方法\n- 4 种常用工具组合模式\n- 项目特定规范(多租户/状态机/事件/7层一致性)\n- 工具使用禁忌对照表\n- 效率优化原则\n\n版本更新:v7.2 → v7.3\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/abd654ed9ddbab9a988c89074448d591135d7d51","author":{"name":"laoluojuhai","email":"laoluojuhai@users.noreply.github.com","username":""},"committer":{"name":"laoluojuhai","email":"laoluojuhai@users.noreply.github.com","username":""},"verification":null,"timestamp":"2026-01-24T11:37:19+08:00","added":["frontend/src/views/acquisition/Integrations.vue","frontend/src/views/acquisition/TobTocGateway.vue","frontend/src/views/ad/Accounts.vue","frontend/src/views/ad/Analytics.vue","frontend/src/views/ad/Audiences.vue","frontend/src/views/ad/Biddings.vue","frontend/src/views/ad/Campaigns.vue","frontend/src/views/ad/Creatives.vue","frontend/src/views/ad/Placements.vue","frontend/src/views/ad/Reports.vue","frontend/src/views/admin/ApiMonitor.vue","frontend/src/views/admin/Bom.vue","frontend/src/views/admin/CacheMonitor.vue","frontend/src/views/admin/KafkaMonitor.vue","frontend/src/views/admin/SystemMonitor.vue","frontend/src/views/ai/Copilot.vue","frontend/src/views/alliance/Analytics.vue","frontend/src/views/alliance/Coupons.vue","frontend/src/views/alliance/Merchants.vue","frontend/src/views/alliance/Products.vue","frontend/src/views/alliance/Promotions.vue","frontend/src/views/alliance/Referrals.vue","frontend/src/views/alliance/Settlements.vue","frontend/src/views/analytics/CohortAnalysis.vue","frontend/src/views/analytics/ConsumerBehavior.vue","frontend/src/views/analytics/CrossDomainFunnel.vue","frontend/src/views/analytics/CustomerJourney.vue","frontend/src/views/analytics/DataHub.vue","frontend/src/views/analytics/DimensionTransform.vue","frontend/src/views/analytics/JourneyOrchestration.vue","frontend/src/views/analytics/LifecycleValue.vue","frontend/src/views/analytics/Ltv.vue","frontend/src/views/analytics/MetricTree.vue","frontend/src/views/analytics/NorthStarMetrics.vue","frontend/src/views/analytics/OmnichannelDashboard.vue","frontend/src/views/analytics/ProductAnalytics.vue","frontend/src/views/analytics/RealtimeMarketingAi.vue","frontend/src/views/analytics/RfmAnalysis.vue","frontend/src/views/analytics/SalesFunnel.vue","frontend/src/views/analytics/Segmentation.vue","frontend/src/views/analytics/Segments.vue","frontend/src/views/analytics/Touchpoints.vue","frontend/src/views/approvals/Configs.vue","frontend/src/views/approvals/Templates.vue","frontend/src/views/assets/Maintenance.vue","frontend/src/views/assets/Transfers.vue","frontend/src/views/attribution/ConversionPaths.vue","frontend/src/views/attribution/Models.vue","frontend/src/views/attribution/MultiTouch.vue","frontend/src/views/attribution/Reports.vue","frontend/src/views/campaigns/Analytics.vue","frontend/src/views/campaigns/Drafts.vue","frontend/src/views/campaigns/Tools.vue","frontend/src/views/campaigns/UseCaseTemplates.vue","frontend/src/views/channels/Analytics.vue","frontend/src/views/channels/QrCodes.vue","frontend/src/views/channels/UtmTracking.vue","frontend/src/views/community/Gamification.vue","frontend/src/views/finance/AgingAnalysis.vue","frontend/src/views/finance/ApLedger.vue","frontend/src/views/finance/ArLedger.vue","frontend/src/views/finance/CostAllocation.vue","frontend/src/views/finance/ExpenseClaims.vue","frontend/src/views/finance/InvoiceRequests.vue","frontend/src/views/finance/InvoiceVerification.vue","frontend/src/views/finance/PaymentPlans.vue","frontend/src/views/finance/SupplierPayments.vue","frontend/src/views/geo/Analysis.vue","frontend/src/views/groupbuy/Pricing.vue","frontend/src/views/groupbuy/Rankings.vue","frontend/src/views/groupbuy/Rules.vue","frontend/src/views/groupbuy/Vouchers.vue","frontend/src/views/hr/Payroll.vue","frontend/src/views/im/Channels.vue","frontend/src/views/im/VideoCall.vue","frontend/src/views/knowledge/Tags.vue","frontend/src/views/leads/Import.vue","frontend/src/views/leads/Intelligence.vue","frontend/src/views/leads/Pool.vue","frontend/src/views/leads/Pools.vue","frontend/src/views/leads/Scoring.vue","frontend/src/views/livestream/Replays.vue","frontend/src/views/marketing/AbmMarketing.vue","frontend/src/views/marketing/Attribution.vue","frontend/src/views/marketing/Dashboard.vue","frontend/src/views/marketing/Effectiveness.vue","frontend/src/views/members/Benefits.vue","frontend/src/views/members/Levels.vue","frontend/src/views/members/Points.vue","frontend/src/views/organization/Chart.vue","frontend/src/views/organization/Positions.vue","frontend/src/views/social/Matrix.vue","frontend/src/views/stores/Agency.vue","frontend/src/views/stores/Configs.vue","frontend/src/views/stores/Dashboard.vue","frontend/src/views/stores/LocalEvents.vue","frontend/src/views/stores/LocalPromotion.vue","frontend/src/views/stores/Performance.vue","frontend/src/views/stores/SelfOperated.vue","frontend/src/views/system/AuditLogs.vue","frontend/src/views/system/BizSequences.vue","frontend/src/views/system/Dictionaries.vue","frontend/src/views/system/EmailTemplates.vue","frontend/src/views/system/Events.vue","frontend/src/views/system/Files.vue","frontend/src/views/system/IntegrationServices.vue","frontend/src/views/system/LoginLogs.vue","frontend/src/views/system/Menus.vue","frontend/src/views/system/OperationLogs.vue","frontend/src/views/system/Permissions.vue","frontend/src/views/system/Realtime.vue","frontend/src/views/system/SecuritySettings.vue","frontend/src/views/system/Settings.vue","frontend/src/views/system/WorkflowGenerator.vue","frontend/src/views/tenant/Branding.vue","frontend/src/views/tenant/Settings.vue","frontend/src/views/video/Analytics.vue","frontend/src/views/video/Content.vue","frontend/src/views/video/Publishing.vue"],"removed":[],"modified":["CLAUDE.md","frontend/src/views/dashboard/components/ProfitAnalysis.vue","frontend/src/views/orders/Index.vue","frontend/src/views/quotes/Detail.vue"]},{"id":"0b4942d200d9009d4c6ee1e06674d71f13585a52","message":"feat(menu): 将渠道客户移动到销售中心的渠道管理分组\n\n- 修改 partner-customers 路由的 menuGroup 从 '主数据' 改为 '渠道管理'\n- 在 SALES_ITEMS 中添加 partner-customers 菜单项\n- 调整 menuOrder 为 3(在客户管理和合作伙伴之后)\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/0b4942d200d9009d4c6ee1e06674d71f13585a52","author":{"name":"laoluojuhai","email":"laoluojuhai@users.noreply.github.com","username":""},"committer":{"name":"laoluojuhai","email":"laoluojuhai@users.noreply.github.com","username":""},"verification":null,"timestamp":"2026-01-24T02:33:47+08:00","added":[],"removed":[],"modified":["frontend/src/router/index.ts","frontend/src/router/menu.ts"]}],"total_commits":0,"head_commit":{"id":"a7c22fc0f5e2d113210bb58646dcdbf7381be245","message":"feat: 完善菜单系统与获客域组件\n\n菜单系统优化:\n- 完善路由配置和菜单定义\n- 优化侧边栏布局组件\n\n获客域改进:\n- 重构 CalendarSidebar 组件\n- 完善 useTodos composable 逻辑\n- 优化 acquisition Index 页面\n\nAPI 适配器优化:\n- 完善订单和报价模块接口\n- 优化类型定义\n\nCo-Authored-By: Claude Opus 4.5 \u003cnoreply@anthropic.com\u003e\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/a7c22fc0f5e2d113210bb58646dcdbf7381be245","author":{"name":"laoluojuhai","email":"laoluojuhai@users.noreply.github.com","username":""},"committer":{"name":"laoluojuhai","email":"laoluojuhai@users.noreply.github.com","username":""},"verification":null,"timestamp":"2026-01-24T13:15:57+08:00","added":[],"removed":[],"modified":["backend/src/modules/orders/order.service.ts","backend/src/modules/quotes/quote.service.ts","frontend/src/api/adapters.ts","frontend/src/api/modules/orders.ts","frontend/src/api/modules/quotes.ts","frontend/src/components/layout/SidebarV2.vue","frontend/src/router/index.ts","frontend/src/router/menu.ts","frontend/src/types/enums.ts","frontend/src/views/acquisition/Index.vue","frontend/src/views/acquisition/components/CalendarSidebar.vue","frontend/src/views/acquisition/composables/types.ts","frontend/src/views/acquisition/composables/useTodos.ts"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatars/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":true,"fork":false,"template":false,"parent":null,"mirror":false,"size":14720,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-02-24T00:00:10+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","repo_transfer":null},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatars/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatars/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}... |