@quantabit/mentor-sdk 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../src/services/mentorApi.js","../src/i18n/index.js","../src/context/MentorContext.jsx","../src/components/MentorCard.jsx","../src/components/BindMentorForm.jsx","../src/types/index.js"],"sourcesContent":["/**\n * Mentor SDK - API 客户端\n * 导师系统后端接口封装\n * \n * 使用 BaseApiClient 基类简化代码\n */\n\nimport { BaseApiClient } from '@quantabit/sdk-config';\n\n/**\n * 导师 API 客户端\n */\nexport class MentorApiClient extends BaseApiClient {\n constructor(config = {}) {\n super('/mentor', config);\n }\n\n // ============ 导师查询 ============\n\n /**\n * 获取导师列表\n * @param {Object} params - 查询参数\n */\n async getMentors(params = {}) {\n return this.get('/list', params);\n }\n\n /**\n * 获取导师详情\n * @param {string} mentorId - 导师 ID\n */\n async getMentor(mentorId) {\n return this.get(`/${mentorId}`);\n }\n\n /**\n * 搜索导师\n * @param {string} keyword - 关键词\n * @param {Object} params - 查询参数\n */\n async searchMentors(keyword, params = {}) {\n return this.get('/search', { keyword, ...params });\n }\n\n /**\n * 获取推荐导师\n * @param {number} limit - 数量\n */\n async getRecommendedMentors(limit = 10) {\n return this.get('/recommended', { limit });\n }\n\n // ============ 导师关系 ============\n\n /**\n * 申请成为学员\n * @param {string} mentorId - 导师 ID\n * @param {Object} application - 申请信息\n */\n async applyAsMentee(mentorId, application = {}) {\n return this.post(`/${mentorId}/apply`, application);\n }\n\n /**\n * 获取我的导师\n */\n async getMyMentor() {\n return this.get('/my/mentor');\n }\n\n /**\n * 获取我的学员\n * @param {Object} params - 查询参数\n */\n async getMyMentees(params = {}) {\n return this.get('/my/mentees', params);\n }\n\n /**\n * 解除导师关系\n * @param {string} relationshipId - 关系 ID\n * @param {string} reason - 原因\n */\n async endRelationship(relationshipId, reason = '') {\n return this.post(`/relationships/${relationshipId}/end`, { reason });\n }\n\n // ============ 导师申请管理 ============\n\n /**\n * 申请成为导师\n * @param {Object} application - 申请数据\n */\n async applyAsMentor(application) {\n return this.post('/apply', application);\n }\n\n /**\n * 获取学员申请\n * @param {Object} params - 查询参数\n */\n async getMenteeApplications(params = {}) {\n return this.get('/applications', params);\n }\n\n /**\n * 处理学员申请\n * @param {string} applicationId - 申请 ID\n * @param {boolean} approved - 是否批准\n * @param {string} message - 消息\n */\n async handleApplication(applicationId, approved, message = '') {\n return this.post(`/applications/${applicationId}`, { approved, message });\n }\n\n // ============ 辅导管理 ============\n\n /**\n * 创建辅导计划\n * @param {string} menteeId - 学员 ID\n * @param {Object} plan - 计划数据\n */\n async createPlan(menteeId, plan) {\n return this.post(`/mentees/${menteeId}/plans`, plan);\n }\n\n /**\n * 获取辅导计划\n * @param {string} menteeId - 学员 ID\n */\n async getPlans(menteeId) {\n return this.get(`/mentees/${menteeId}/plans`);\n }\n\n /**\n * 更新计划进度\n * @param {string} planId - 计划 ID\n * @param {Object} progress - 进度数据\n */\n async updatePlanProgress(planId, progress) {\n return this.put(`/plans/${planId}/progress`, progress);\n }\n\n // ============ 辅导记录 ============\n\n /**\n * 添加辅导记录\n * @param {string} menteeId - 学员 ID\n * @param {Object} record - 记录数据\n */\n async addRecord(menteeId, record) {\n return this.post(`/mentees/${menteeId}/records`, record);\n }\n\n /**\n * 获取辅导记录\n * @param {string} menteeId - 学员 ID\n * @param {Object} params - 查询参数\n */\n async getRecords(menteeId, params = {}) {\n return this.get(`/mentees/${menteeId}/records`, params);\n }\n\n // ============ 评价反馈 ============\n\n /**\n * 评价导师\n * @param {string} mentorId - 导师 ID\n * @param {Object} review - 评价数据\n */\n async reviewMentor(mentorId, review) {\n return this.post(`/${mentorId}/review`, review);\n }\n\n /**\n * 获取导师评价\n * @param {string} mentorId - 导师 ID\n * @param {Object} params - 查询参数\n */\n async getMentorReviews(mentorId, params = {}) {\n return this.get(`/${mentorId}/reviews`, params);\n }\n\n // ============ 导师资料 ============\n\n /**\n * 更新导师资料\n * @param {Object} profile - 资料数据\n */\n async updateMentorProfile(profile) {\n return this.put('/my/profile', profile);\n }\n\n /**\n * 设置可用时间\n * @param {Object} availability - 可用时间配置\n */\n async setAvailability(availability) {\n return this.put('/my/availability', availability);\n }\n\n /**\n * 获取导师统计\n */\n async getMentorStats() {\n return this.get('/my/stats');\n }\n}\n\n// 创建默认实例\nexport const mentorApi = new MentorApiClient();\n\n\n\nexport default mentorApi;\n","/**\n * Mentor SDK - 国际化 i18n\n */\n\nexport const SUPPORTED_LANGUAGES = ['en', 'zh', 'ja', 'ko'];\n\nexport const messages = {\n zh: {\n loading: '加载中...',\n mentor: '师傅',\n apprentice: '徒弟',\n mentorSystem: '师徒系统',\n \n // 关系\n myMentor: '我的师傅',\n myApprentices: '我的徒弟',\n noMentor: '暂无师傅',\n noApprentices: '暂无徒弟',\n \n // 操作\n bindMentor: '拜师',\n unbind: '解除关系',\n inviteApprentice: '收徒',\n viewProfile: '查看主页',\n \n // 状态\n statusActive: '正常',\n statusExpired: '已失效',\n bindTime: '绑定时间',\n apprenticeCount: '徒弟数量',\n \n // 奖励\n rewards: '传承奖励',\n rewardHistory: '奖励记录',\n noRewards: '暂无奖励',\n totalReward: '累计奖励',\n pendingReward: '待领取',\n claimReward: '领取奖励',\n \n // 奖励类型\n rewardBind: '拜师奖励',\n rewardFirstCharge: '首充分成',\n rewardTask: '任务传承',\n rewardDaily: '日常活跃',\n \n // 表单\n enterMentorCode: '输入师傅邀请码',\n codePlaceholder: '请输入师傅的邀请码',\n myCode: '我的收徒码',\n copyCode: '复制邀请码',\n shareCode: '分享邀请码',\n \n // 提示\n bindSuccess: '拜师成功',\n unbindConfirm: '确定解除师徒关系?',\n unbindSuccess: '已解除关系',\n copySuccess: '已复制到剪贴板',\n \n // 规则\n rules: '师徒规则',\n rule1: '每人只能拜一位师傅',\n rule2: '徒弟完成任务,师傅获得传承奖励',\n rule3: '徒弟首充,师傅获得分成',\n },\n ja: {\n loading: '読み込み中...',\n mentor: '師匠',\n apprentice: '弟子',\n mentorSystem: '師弟システム',\n \n // 关系\n myMentor: '自分の師匠',\n myApprentices: '自分の弟子',\n noMentor: '師匠なし',\n noApprentices: '弟子なし',\n \n // 操作\n bindMentor: '弟子入り',\n unbind: '関係解除',\n inviteApprentice: '弟子を取る',\n viewProfile: 'プロフィールを見る',\n \n // 状态\n statusActive: '正常',\n statusExpired: '無効',\n bindTime: '紐付け日時',\n apprenticeCount: '弟子数',\n \n // 奖励\n rewards: '伝承報酬',\n rewardHistory: '報酬履歴',\n noRewards: '報酬なし',\n totalReward: '累計報酬',\n pendingReward: '受け取り待ち',\n claimReward: '報酬を受け取る',\n \n // 奖励类型\n rewardBind: '弟子入り報酬',\n rewardFirstCharge: '初回チャージ配分',\n rewardTask: 'タスク伝承',\n rewardDaily: 'デイリーアクティブ',\n \n // 表单\n enterMentorCode: '師匠の招待コードを入力',\n codePlaceholder: '師匠の招待コードを入力してください',\n myCode: '自分の弟子入りコード',\n copyCode: '招待コードをコピー',\n shareCode: '招待コードをシェア',\n \n // 提示\n bindSuccess: '弟子入り成功',\n unbindConfirm: '師弟関係を解除しますか?',\n unbindSuccess: '関係を解除しました',\n copySuccess: 'クリップボードにコピーしました',\n \n // 规则\n rules: '師弟ルール',\n rule1: '弟子入りできる師匠は1人だけです',\n rule2: '弟子がタスクを完了すると、師匠に伝承報酬が与えられます',\n rule3: '弟子の初回チャージで、師匠に配分が与えられます',\n },\n ko: {\n loading: '로딩 중...',\n mentor: '스승',\n apprentice: '제자',\n mentorSystem: '사제 시스템',\n \n // 关系\n myMentor: '내 스승',\n myApprentices: '내 제자',\n noMentor: '스승 없음',\n noApprentices: '제자 없음',\n \n // 操作\n bindMentor: '스승 모시기',\n unbind: '관계 해제',\n inviteApprentice: '제자 받기',\n viewProfile: '프로필 보기',\n \n // 状态\n statusActive: '정상',\n statusExpired: '무효화됨',\n bindTime: '연결 시간',\n apprenticeCount: '제자 수',\n \n // 奖励\n rewards: '전승 보상',\n rewardHistory: '보상 기록',\n noRewards: '보상 없음',\n totalReward: '누적 보상',\n pendingReward: '수령 대기',\n claimReward: '보상 수령',\n \n // 奖励类型\n rewardBind: '스승 모시기 보상',\n rewardFirstCharge: '첫 충전 보상',\n rewardTask: '과제 전승',\n rewardDaily: '일일 활성',\n \n // 表单\n enterMentorCode: '스승의 초대 코드 입력',\n codePlaceholder: '스승의 초대 코드를 입력하세요',\n myCode: '내 제자 코드',\n copyCode: '초대 코드 복사',\n shareCode: '초대 코드 공유',\n \n // 提示\n bindSuccess: '스승 모시기 성공',\n unbindConfirm: '사제 관계를 해제하시겠습니까?',\n unbindSuccess: '관계가 해제되었습니다',\n copySuccess: '클립보드에 복사되었습니다',\n \n // 规则\n rules: '사제 규칙',\n rule1: '스승은 한 명만 모실 수 있습니다',\n rule2: '제자가 과제를 완료하면 스승에게 전승 보상이 주어집니다',\n rule3: '제자의 첫 충전 시 스승이 보상을 받습니다',\n },\n \n en: {\n loading: 'Loading...',\n mentor: 'Mentor',\n apprentice: 'Apprentice',\n mentorSystem: 'Mentor System',\n \n myMentor: 'My Mentor',\n myApprentices: 'My Apprentices',\n noMentor: 'No mentor yet',\n noApprentices: 'No apprentices yet',\n \n bindMentor: 'Find a Mentor',\n unbind: 'Remove',\n inviteApprentice: 'Invite',\n viewProfile: 'View Profile',\n \n statusActive: 'Active',\n statusExpired: 'Expired',\n bindTime: 'Bound on',\n apprenticeCount: 'Apprentices',\n \n rewards: 'Rewards',\n rewardHistory: 'Reward History',\n noRewards: 'No rewards',\n totalReward: 'Total Rewards',\n pendingReward: 'Pending',\n claimReward: 'Claim',\n \n rewardBind: 'Binding Bonus',\n rewardFirstCharge: 'First Purchase',\n rewardTask: 'Task Reward',\n rewardDaily: 'Daily Active',\n \n enterMentorCode: 'Enter Mentor Code',\n codePlaceholder: 'Enter mentor invitation code',\n myCode: 'My Invite Code',\n copyCode: 'Copy Code',\n shareCode: 'Share Code',\n \n bindSuccess: 'Successfully bound',\n unbindConfirm: 'Remove this relationship?',\n unbindSuccess: 'Relationship removed',\n copySuccess: 'Copied to clipboard',\n \n rules: 'Rules',\n rule1: 'You can only have one mentor',\n rule2: 'Earn rewards when apprentices complete tasks',\n rule3: 'Earn commission from apprentice purchases',\n },\n};\n\nlet currentLanguage = 'zh';\n\nexport function setLanguage(lang) {\n if (SUPPORTED_LANGUAGES.includes(lang)) {\n currentLanguage = lang;\n }\n}\n\nexport function getLanguage() {\n return currentLanguage;\n}\n\nexport function t(key, params) {\n const msgs = messages[getLanguage()] || messages.zh;\n let text = msgs[key] || key;\n if (params) {\n Object.keys(params).forEach(k => {\n text = text.replace(new RegExp(`\\\\{${k}\\\\}`, 'g'), params[k]);\n });\n }\n return text;\n}\n\nexport default { messages, SUPPORTED_LANGUAGES, setLanguage, getLanguage, t };\n","/**\n * Mentor SDK - Context Provider\n */\n\nimport React, { createContext, useContext, useState, useCallback, useEffect } from 'react';\nimport { mentorApi } from '../services/mentorApi';\nimport { setLanguage } from '../i18n';\n\nconst MentorContext = createContext(null);\n\nexport function MentorProvider({\n children,\n apiUrl,\n token,\n language = 'zh',\n onBind,\n onReward,\n}) {\n const [myMentor, setMyMentor] = useState(null);\n const [myApprentices, setMyApprentices] = useState([]);\n const [rewards, setRewards] = useState([]);\n const [stats, setStats] = useState(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(null);\n\n useEffect(() => {\n setLanguage(language);\n }, [language]);\n\n const handleError = useCallback((err) => {\n setError(err);\n onError?.(err);\n }, [onError]);\n\n const bindMentor = useCallback(async (mentorId) => {\n setLoading(true);\n try {\n const result = await mentorApi.bind(mentorId);\n onBind?.(result);\n return result;\n } catch (err) {\n handleError(err);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [handleError, onBind]);\n\n // 加载我的师傅\n const loadMyMentor = useCallback(async () => {\n setLoading(true);\n try {\n const result = await mentorApi.getMyMentor();\n setMyMentor(result);\n return result;\n } catch (err) {\n handleError(err);\n } finally {\n setLoading(false);\n }\n }, [handleError]);\n\n // 加载我的徒弟\n const loadMyApprentices = useCallback(async (params = {}) => {\n setLoading(true);\n try {\n const result = await mentorApi.getMyApprentices(params);\n const items = result.items || result.data || result || [];\n setMyApprentices(items);\n return items;\n } catch (err) {\n handleError(err);\n } finally {\n setLoading(false);\n }\n }, [handleError]);\n\n // 解除关系\n const unbind = useCallback(async (relationId) => {\n setLoading(true);\n try {\n await mentorApi.unbind(relationId);\n await loadMyMentor();\n await loadMyApprentices();\n } catch (err) {\n handleError(err);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [handleError, loadMyMentor, loadMyApprentices]);\n\n // 加载奖励记录\n const loadRewards = useCallback(async (params = {}) => {\n try {\n const result = await mentorApi.getRewards(params);\n const items = result.items || result.data || result || [];\n setRewards(items);\n return items;\n } catch (err) {\n handleError(err);\n }\n }, [handleError]);\n\n // 加载统计\n const loadStats = useCallback(async () => {\n try {\n const result = await mentorApi.getStats();\n setStats(result);\n return result;\n } catch (err) {\n handleError(err);\n }\n }, [handleError]);\n\n const value = {\n myMentor,\n myApprentices,\n rewards,\n stats,\n loading,\n error,\n bindMentor,\n loadMyMentor,\n loadMyApprentices,\n unbind,\n loadRewards,\n loadStats,\n api: mentorApi,\n };\n\n return (\n <MentorContext.Provider value={value}>\n {children}\n </MentorContext.Provider>\n );\n}\n\nexport function useMentor() {\n const context = useContext(MentorContext);\n if (!context) {\n throw new Error('useMentor must be used within a MentorProvider');\n }\n return context;\n}\n\nexport default MentorContext;\n","import React from 'react';\n\nexport function MentorCard() { return null; }\nexport default MentorCard;\n","import React from 'react';\n\nexport function BindMentorForm() { return null; }\nexport default BindMentorForm;\n","/**\n * Mentor SDK - 类型定义\n */\n\n// 师徒关系状态\nexport const MentorshipStatus = {\n PENDING: 'pending',\n ACTIVE: 'active',\n GRADUATED: 'graduated',\n CANCELLED: 'cancelled',\n};\n\n// 角色\nexport const MentorRole = {\n MENTOR: 'mentor',\n APPRENTICE: 'apprentice',\n};\n\n// 奖励类型\nexport const MentorRewardType = {\n BIND: 'bind', // 绑定奖励\n TASK: 'task', // 任务奖励\n LEVEL_UP: 'level_up', // 升级奖励\n GRADUATE: 'graduate', // 出师奖励\n DAILY: 'daily', // 每日奖励\n};\n\nexport default { MentorshipStatus, MentorRole, MentorRewardType };\n\nexport const createDefaultRelation = {};\n\nexport const createDefaultReward = {};\n\nexport const MentorStatus = {};\n\nexport const RewardType = {};\n"],"names":["MentorApiClient","BaseApiClient","constructor","config","getMentors","params","get","getMentor","mentorId","searchMentors","keyword","getRecommendedMentors","limit","applyAsMentee","application","post","getMyMentor","getMyMentees","endRelationship","relationshipId","reason","applyAsMentor","getMenteeApplications","handleApplication","applicationId","approved","message","createPlan","menteeId","plan","getPlans","updatePlanProgress","planId","progress","put","addRecord","record","getRecords","reviewMentor","review","getMentorReviews","updateMentorProfile","profile","setAvailability","availability","getMentorStats","mentorApi","SUPPORTED_LANGUAGES","messages","zh","loading","mentor","apprentice","mentorSystem","myMentor","myApprentices","noMentor","noApprentices","bindMentor","unbind","inviteApprentice","viewProfile","statusActive","statusExpired","bindTime","apprenticeCount","rewards","rewardHistory","noRewards","totalReward","pendingReward","claimReward","rewardBind","rewardFirstCharge","rewardTask","rewardDaily","enterMentorCode","codePlaceholder","myCode","copyCode","shareCode","bindSuccess","unbindConfirm","unbindSuccess","copySuccess","rules","rule1","rule2","rule3","ja","ko","en","currentLanguage","setLanguage","lang","includes","getLanguage","t","key","msgs","text","Object","keys","forEach","k","replace","RegExp","MentorContext","createContext","MentorProvider","children","apiUrl","token","language","onBind","onReward","setMyMentor","useState","setMyApprentices","setRewards","stats","setStats","setLoading","error","setError","useEffect","handleError","useCallback","err","onError","result","bind","loadMyMentor","loadMyApprentices","getMyApprentices","items","data","relationId","loadRewards","getRewards","loadStats","getStats","value","api","React","createElement","Provider","useMentor","context","useContext","Error","MentorCard","BindMentorForm","createDefaultRelation","createDefaultReward","MentorStatus","RewardType"],"mappings":"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"}
@@ -0,0 +1,591 @@
1
+ import React, { useState, useEffect, useCallback, useContext, createContext } from 'react';
2
+ import { BaseApiClient } from '@quantabit/sdk-config';
3
+
4
+ /**
5
+ * Mentor SDK - API 客户端
6
+ * 导师系统后端接口封装
7
+ *
8
+ * 使用 BaseApiClient 基类简化代码
9
+ */
10
+
11
+
12
+ /**
13
+ * 导师 API 客户端
14
+ */
15
+ class MentorApiClient extends BaseApiClient {
16
+ constructor(config = {}) {
17
+ super('/mentor', config);
18
+ }
19
+
20
+ // ============ 导师查询 ============
21
+
22
+ /**
23
+ * 获取导师列表
24
+ * @param {Object} params - 查询参数
25
+ */
26
+ async getMentors(params = {}) {
27
+ return this.get('/list', params);
28
+ }
29
+
30
+ /**
31
+ * 获取导师详情
32
+ * @param {string} mentorId - 导师 ID
33
+ */
34
+ async getMentor(mentorId) {
35
+ return this.get(`/${mentorId}`);
36
+ }
37
+
38
+ /**
39
+ * 搜索导师
40
+ * @param {string} keyword - 关键词
41
+ * @param {Object} params - 查询参数
42
+ */
43
+ async searchMentors(keyword, params = {}) {
44
+ return this.get('/search', {
45
+ keyword,
46
+ ...params
47
+ });
48
+ }
49
+
50
+ /**
51
+ * 获取推荐导师
52
+ * @param {number} limit - 数量
53
+ */
54
+ async getRecommendedMentors(limit = 10) {
55
+ return this.get('/recommended', {
56
+ limit
57
+ });
58
+ }
59
+
60
+ // ============ 导师关系 ============
61
+
62
+ /**
63
+ * 申请成为学员
64
+ * @param {string} mentorId - 导师 ID
65
+ * @param {Object} application - 申请信息
66
+ */
67
+ async applyAsMentee(mentorId, application = {}) {
68
+ return this.post(`/${mentorId}/apply`, application);
69
+ }
70
+
71
+ /**
72
+ * 获取我的导师
73
+ */
74
+ async getMyMentor() {
75
+ return this.get('/my/mentor');
76
+ }
77
+
78
+ /**
79
+ * 获取我的学员
80
+ * @param {Object} params - 查询参数
81
+ */
82
+ async getMyMentees(params = {}) {
83
+ return this.get('/my/mentees', params);
84
+ }
85
+
86
+ /**
87
+ * 解除导师关系
88
+ * @param {string} relationshipId - 关系 ID
89
+ * @param {string} reason - 原因
90
+ */
91
+ async endRelationship(relationshipId, reason = '') {
92
+ return this.post(`/relationships/${relationshipId}/end`, {
93
+ reason
94
+ });
95
+ }
96
+
97
+ // ============ 导师申请管理 ============
98
+
99
+ /**
100
+ * 申请成为导师
101
+ * @param {Object} application - 申请数据
102
+ */
103
+ async applyAsMentor(application) {
104
+ return this.post('/apply', application);
105
+ }
106
+
107
+ /**
108
+ * 获取学员申请
109
+ * @param {Object} params - 查询参数
110
+ */
111
+ async getMenteeApplications(params = {}) {
112
+ return this.get('/applications', params);
113
+ }
114
+
115
+ /**
116
+ * 处理学员申请
117
+ * @param {string} applicationId - 申请 ID
118
+ * @param {boolean} approved - 是否批准
119
+ * @param {string} message - 消息
120
+ */
121
+ async handleApplication(applicationId, approved, message = '') {
122
+ return this.post(`/applications/${applicationId}`, {
123
+ approved,
124
+ message
125
+ });
126
+ }
127
+
128
+ // ============ 辅导管理 ============
129
+
130
+ /**
131
+ * 创建辅导计划
132
+ * @param {string} menteeId - 学员 ID
133
+ * @param {Object} plan - 计划数据
134
+ */
135
+ async createPlan(menteeId, plan) {
136
+ return this.post(`/mentees/${menteeId}/plans`, plan);
137
+ }
138
+
139
+ /**
140
+ * 获取辅导计划
141
+ * @param {string} menteeId - 学员 ID
142
+ */
143
+ async getPlans(menteeId) {
144
+ return this.get(`/mentees/${menteeId}/plans`);
145
+ }
146
+
147
+ /**
148
+ * 更新计划进度
149
+ * @param {string} planId - 计划 ID
150
+ * @param {Object} progress - 进度数据
151
+ */
152
+ async updatePlanProgress(planId, progress) {
153
+ return this.put(`/plans/${planId}/progress`, progress);
154
+ }
155
+
156
+ // ============ 辅导记录 ============
157
+
158
+ /**
159
+ * 添加辅导记录
160
+ * @param {string} menteeId - 学员 ID
161
+ * @param {Object} record - 记录数据
162
+ */
163
+ async addRecord(menteeId, record) {
164
+ return this.post(`/mentees/${menteeId}/records`, record);
165
+ }
166
+
167
+ /**
168
+ * 获取辅导记录
169
+ * @param {string} menteeId - 学员 ID
170
+ * @param {Object} params - 查询参数
171
+ */
172
+ async getRecords(menteeId, params = {}) {
173
+ return this.get(`/mentees/${menteeId}/records`, params);
174
+ }
175
+
176
+ // ============ 评价反馈 ============
177
+
178
+ /**
179
+ * 评价导师
180
+ * @param {string} mentorId - 导师 ID
181
+ * @param {Object} review - 评价数据
182
+ */
183
+ async reviewMentor(mentorId, review) {
184
+ return this.post(`/${mentorId}/review`, review);
185
+ }
186
+
187
+ /**
188
+ * 获取导师评价
189
+ * @param {string} mentorId - 导师 ID
190
+ * @param {Object} params - 查询参数
191
+ */
192
+ async getMentorReviews(mentorId, params = {}) {
193
+ return this.get(`/${mentorId}/reviews`, params);
194
+ }
195
+
196
+ // ============ 导师资料 ============
197
+
198
+ /**
199
+ * 更新导师资料
200
+ * @param {Object} profile - 资料数据
201
+ */
202
+ async updateMentorProfile(profile) {
203
+ return this.put('/my/profile', profile);
204
+ }
205
+
206
+ /**
207
+ * 设置可用时间
208
+ * @param {Object} availability - 可用时间配置
209
+ */
210
+ async setAvailability(availability) {
211
+ return this.put('/my/availability', availability);
212
+ }
213
+
214
+ /**
215
+ * 获取导师统计
216
+ */
217
+ async getMentorStats() {
218
+ return this.get('/my/stats');
219
+ }
220
+ }
221
+
222
+ // 创建默认实例
223
+ const mentorApi = new MentorApiClient();
224
+
225
+ /**
226
+ * Mentor SDK - 国际化 i18n
227
+ */
228
+
229
+ const SUPPORTED_LANGUAGES = ['en', 'zh', 'ja', 'ko'];
230
+ const messages = {
231
+ zh: {
232
+ loading: '加载中...',
233
+ mentor: '师傅',
234
+ apprentice: '徒弟',
235
+ mentorSystem: '师徒系统',
236
+ // 关系
237
+ myMentor: '我的师傅',
238
+ myApprentices: '我的徒弟',
239
+ noMentor: '暂无师傅',
240
+ noApprentices: '暂无徒弟',
241
+ // 操作
242
+ bindMentor: '拜师',
243
+ unbind: '解除关系',
244
+ inviteApprentice: '收徒',
245
+ viewProfile: '查看主页',
246
+ // 状态
247
+ statusActive: '正常',
248
+ statusExpired: '已失效',
249
+ bindTime: '绑定时间',
250
+ apprenticeCount: '徒弟数量',
251
+ // 奖励
252
+ rewards: '传承奖励',
253
+ rewardHistory: '奖励记录',
254
+ noRewards: '暂无奖励',
255
+ totalReward: '累计奖励',
256
+ pendingReward: '待领取',
257
+ claimReward: '领取奖励',
258
+ // 奖励类型
259
+ rewardBind: '拜师奖励',
260
+ rewardFirstCharge: '首充分成',
261
+ rewardTask: '任务传承',
262
+ rewardDaily: '日常活跃',
263
+ // 表单
264
+ enterMentorCode: '输入师傅邀请码',
265
+ codePlaceholder: '请输入师傅的邀请码',
266
+ myCode: '我的收徒码',
267
+ copyCode: '复制邀请码',
268
+ shareCode: '分享邀请码',
269
+ // 提示
270
+ bindSuccess: '拜师成功',
271
+ unbindConfirm: '确定解除师徒关系?',
272
+ unbindSuccess: '已解除关系',
273
+ copySuccess: '已复制到剪贴板',
274
+ // 规则
275
+ rules: '师徒规则',
276
+ rule1: '每人只能拜一位师傅',
277
+ rule2: '徒弟完成任务,师傅获得传承奖励',
278
+ rule3: '徒弟首充,师傅获得分成'
279
+ },
280
+ ja: {
281
+ loading: '読み込み中...',
282
+ mentor: '師匠',
283
+ apprentice: '弟子',
284
+ mentorSystem: '師弟システム',
285
+ // 关系
286
+ myMentor: '自分の師匠',
287
+ myApprentices: '自分の弟子',
288
+ noMentor: '師匠なし',
289
+ noApprentices: '弟子なし',
290
+ // 操作
291
+ bindMentor: '弟子入り',
292
+ unbind: '関係解除',
293
+ inviteApprentice: '弟子を取る',
294
+ viewProfile: 'プロフィールを見る',
295
+ // 状态
296
+ statusActive: '正常',
297
+ statusExpired: '無効',
298
+ bindTime: '紐付け日時',
299
+ apprenticeCount: '弟子数',
300
+ // 奖励
301
+ rewards: '伝承報酬',
302
+ rewardHistory: '報酬履歴',
303
+ noRewards: '報酬なし',
304
+ totalReward: '累計報酬',
305
+ pendingReward: '受け取り待ち',
306
+ claimReward: '報酬を受け取る',
307
+ // 奖励类型
308
+ rewardBind: '弟子入り報酬',
309
+ rewardFirstCharge: '初回チャージ配分',
310
+ rewardTask: 'タスク伝承',
311
+ rewardDaily: 'デイリーアクティブ',
312
+ // 表单
313
+ enterMentorCode: '師匠の招待コードを入力',
314
+ codePlaceholder: '師匠の招待コードを入力してください',
315
+ myCode: '自分の弟子入りコード',
316
+ copyCode: '招待コードをコピー',
317
+ shareCode: '招待コードをシェア',
318
+ // 提示
319
+ bindSuccess: '弟子入り成功',
320
+ unbindConfirm: '師弟関係を解除しますか?',
321
+ unbindSuccess: '関係を解除しました',
322
+ copySuccess: 'クリップボードにコピーしました',
323
+ // 规则
324
+ rules: '師弟ルール',
325
+ rule1: '弟子入りできる師匠は1人だけです',
326
+ rule2: '弟子がタスクを完了すると、師匠に伝承報酬が与えられます',
327
+ rule3: '弟子の初回チャージで、師匠に配分が与えられます'
328
+ },
329
+ ko: {
330
+ loading: '로딩 중...',
331
+ mentor: '스승',
332
+ apprentice: '제자',
333
+ mentorSystem: '사제 시스템',
334
+ // 关系
335
+ myMentor: '내 스승',
336
+ myApprentices: '내 제자',
337
+ noMentor: '스승 없음',
338
+ noApprentices: '제자 없음',
339
+ // 操作
340
+ bindMentor: '스승 모시기',
341
+ unbind: '관계 해제',
342
+ inviteApprentice: '제자 받기',
343
+ viewProfile: '프로필 보기',
344
+ // 状态
345
+ statusActive: '정상',
346
+ statusExpired: '무효화됨',
347
+ bindTime: '연결 시간',
348
+ apprenticeCount: '제자 수',
349
+ // 奖励
350
+ rewards: '전승 보상',
351
+ rewardHistory: '보상 기록',
352
+ noRewards: '보상 없음',
353
+ totalReward: '누적 보상',
354
+ pendingReward: '수령 대기',
355
+ claimReward: '보상 수령',
356
+ // 奖励类型
357
+ rewardBind: '스승 모시기 보상',
358
+ rewardFirstCharge: '첫 충전 보상',
359
+ rewardTask: '과제 전승',
360
+ rewardDaily: '일일 활성',
361
+ // 表单
362
+ enterMentorCode: '스승의 초대 코드 입력',
363
+ codePlaceholder: '스승의 초대 코드를 입력하세요',
364
+ myCode: '내 제자 코드',
365
+ copyCode: '초대 코드 복사',
366
+ shareCode: '초대 코드 공유',
367
+ // 提示
368
+ bindSuccess: '스승 모시기 성공',
369
+ unbindConfirm: '사제 관계를 해제하시겠습니까?',
370
+ unbindSuccess: '관계가 해제되었습니다',
371
+ copySuccess: '클립보드에 복사되었습니다',
372
+ // 规则
373
+ rules: '사제 규칙',
374
+ rule1: '스승은 한 명만 모실 수 있습니다',
375
+ rule2: '제자가 과제를 완료하면 스승에게 전승 보상이 주어집니다',
376
+ rule3: '제자의 첫 충전 시 스승이 보상을 받습니다'
377
+ },
378
+ en: {
379
+ loading: 'Loading...',
380
+ mentor: 'Mentor',
381
+ apprentice: 'Apprentice',
382
+ mentorSystem: 'Mentor System',
383
+ myMentor: 'My Mentor',
384
+ myApprentices: 'My Apprentices',
385
+ noMentor: 'No mentor yet',
386
+ noApprentices: 'No apprentices yet',
387
+ bindMentor: 'Find a Mentor',
388
+ unbind: 'Remove',
389
+ inviteApprentice: 'Invite',
390
+ viewProfile: 'View Profile',
391
+ statusActive: 'Active',
392
+ statusExpired: 'Expired',
393
+ bindTime: 'Bound on',
394
+ apprenticeCount: 'Apprentices',
395
+ rewards: 'Rewards',
396
+ rewardHistory: 'Reward History',
397
+ noRewards: 'No rewards',
398
+ totalReward: 'Total Rewards',
399
+ pendingReward: 'Pending',
400
+ claimReward: 'Claim',
401
+ rewardBind: 'Binding Bonus',
402
+ rewardFirstCharge: 'First Purchase',
403
+ rewardTask: 'Task Reward',
404
+ rewardDaily: 'Daily Active',
405
+ enterMentorCode: 'Enter Mentor Code',
406
+ codePlaceholder: 'Enter mentor invitation code',
407
+ myCode: 'My Invite Code',
408
+ copyCode: 'Copy Code',
409
+ shareCode: 'Share Code',
410
+ bindSuccess: 'Successfully bound',
411
+ unbindConfirm: 'Remove this relationship?',
412
+ unbindSuccess: 'Relationship removed',
413
+ copySuccess: 'Copied to clipboard',
414
+ rules: 'Rules',
415
+ rule1: 'You can only have one mentor',
416
+ rule2: 'Earn rewards when apprentices complete tasks',
417
+ rule3: 'Earn commission from apprentice purchases'
418
+ }
419
+ };
420
+ let currentLanguage = 'zh';
421
+ function setLanguage(lang) {
422
+ if (SUPPORTED_LANGUAGES.includes(lang)) {
423
+ currentLanguage = lang;
424
+ }
425
+ }
426
+ function getLanguage() {
427
+ return currentLanguage;
428
+ }
429
+ function t(key, params) {
430
+ const msgs = messages[getLanguage()] || messages.zh;
431
+ let text = msgs[key] || key;
432
+ if (params) {
433
+ Object.keys(params).forEach(k => {
434
+ text = text.replace(new RegExp(`\\{${k}\\}`, 'g'), params[k]);
435
+ });
436
+ }
437
+ return text;
438
+ }
439
+
440
+ /**
441
+ * Mentor SDK - Context Provider
442
+ */
443
+
444
+ const MentorContext = /*#__PURE__*/createContext(null);
445
+ function MentorProvider({
446
+ children,
447
+ apiUrl,
448
+ token,
449
+ language = 'zh',
450
+ onBind,
451
+ onReward
452
+ }) {
453
+ const [myMentor, setMyMentor] = useState(null);
454
+ const [myApprentices, setMyApprentices] = useState([]);
455
+ const [rewards, setRewards] = useState([]);
456
+ const [stats, setStats] = useState(null);
457
+ const [loading, setLoading] = useState(false);
458
+ const [error, setError] = useState(null);
459
+ useEffect(() => {
460
+ setLanguage(language);
461
+ }, [language]);
462
+ const handleError = useCallback(err => {
463
+ setError(err);
464
+ onError?.(err);
465
+ }, [onError]);
466
+ const bindMentor = useCallback(async mentorId => {
467
+ setLoading(true);
468
+ try {
469
+ const result = await mentorApi.bind(mentorId);
470
+ onBind?.(result);
471
+ return result;
472
+ } catch (err) {
473
+ handleError(err);
474
+ throw err;
475
+ } finally {
476
+ setLoading(false);
477
+ }
478
+ }, [handleError, onBind]);
479
+
480
+ // 加载我的师傅
481
+ const loadMyMentor = useCallback(async () => {
482
+ setLoading(true);
483
+ try {
484
+ const result = await mentorApi.getMyMentor();
485
+ setMyMentor(result);
486
+ return result;
487
+ } catch (err) {
488
+ handleError(err);
489
+ } finally {
490
+ setLoading(false);
491
+ }
492
+ }, [handleError]);
493
+
494
+ // 加载我的徒弟
495
+ const loadMyApprentices = useCallback(async (params = {}) => {
496
+ setLoading(true);
497
+ try {
498
+ const result = await mentorApi.getMyApprentices(params);
499
+ const items = result.items || result.data || result || [];
500
+ setMyApprentices(items);
501
+ return items;
502
+ } catch (err) {
503
+ handleError(err);
504
+ } finally {
505
+ setLoading(false);
506
+ }
507
+ }, [handleError]);
508
+
509
+ // 解除关系
510
+ const unbind = useCallback(async relationId => {
511
+ setLoading(true);
512
+ try {
513
+ await mentorApi.unbind(relationId);
514
+ await loadMyMentor();
515
+ await loadMyApprentices();
516
+ } catch (err) {
517
+ handleError(err);
518
+ throw err;
519
+ } finally {
520
+ setLoading(false);
521
+ }
522
+ }, [handleError, loadMyMentor, loadMyApprentices]);
523
+
524
+ // 加载奖励记录
525
+ const loadRewards = useCallback(async (params = {}) => {
526
+ try {
527
+ const result = await mentorApi.getRewards(params);
528
+ const items = result.items || result.data || result || [];
529
+ setRewards(items);
530
+ return items;
531
+ } catch (err) {
532
+ handleError(err);
533
+ }
534
+ }, [handleError]);
535
+
536
+ // 加载统计
537
+ const loadStats = useCallback(async () => {
538
+ try {
539
+ const result = await mentorApi.getStats();
540
+ setStats(result);
541
+ return result;
542
+ } catch (err) {
543
+ handleError(err);
544
+ }
545
+ }, [handleError]);
546
+ const value = {
547
+ myMentor,
548
+ myApprentices,
549
+ rewards,
550
+ stats,
551
+ loading,
552
+ error,
553
+ bindMentor,
554
+ loadMyMentor,
555
+ loadMyApprentices,
556
+ unbind,
557
+ loadRewards,
558
+ loadStats,
559
+ api: mentorApi
560
+ };
561
+ return /*#__PURE__*/React.createElement(MentorContext.Provider, {
562
+ value: value
563
+ }, children);
564
+ }
565
+ function useMentor() {
566
+ const context = useContext(MentorContext);
567
+ if (!context) {
568
+ throw new Error('useMentor must be used within a MentorProvider');
569
+ }
570
+ return context;
571
+ }
572
+
573
+ function MentorCard() {
574
+ return null;
575
+ }
576
+
577
+ function BindMentorForm() {
578
+ return null;
579
+ }
580
+
581
+ /**
582
+ * Mentor SDK - 类型定义
583
+ */
584
+
585
+ const createDefaultRelation = {};
586
+ const createDefaultReward = {};
587
+ const MentorStatus = {};
588
+ const RewardType = {};
589
+
590
+ export { BindMentorForm, MentorApiClient, MentorCard, MentorProvider, MentorStatus, RewardType, SUPPORTED_LANGUAGES, createDefaultRelation, createDefaultReward, getLanguage, mentorApi, messages, setLanguage, t, useMentor };
591
+ //# sourceMappingURL=index.esm.js.map