@flexem/chat-box 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.
- package/README.md +638 -0
- package/miniprogram_dist/TEST_CASES.md +256 -0
- package/miniprogram_dist/assets/icons/icon-arrow-down.svg +1 -0
- package/miniprogram_dist/assets/icons/icon-arrow-up.svg +1 -0
- package/miniprogram_dist/assets/icons/icon-avatar-default.svg +1 -0
- package/miniprogram_dist/assets/icons/icon-back.svg +1 -0
- package/miniprogram_dist/assets/icons/icon-camera.svg +1 -0
- package/miniprogram_dist/assets/icons/icon-close.svg +1 -0
- package/miniprogram_dist/assets/icons/icon-copy.svg +1 -0
- package/miniprogram_dist/assets/icons/icon-delete.svg +1 -0
- package/miniprogram_dist/assets/icons/icon-edit-msg.svg +1 -0
- package/miniprogram_dist/assets/icons/icon-edit.svg +1 -0
- package/miniprogram_dist/assets/icons/icon-file.svg +1 -0
- package/miniprogram_dist/assets/icons/icon-image.svg +1 -0
- package/miniprogram_dist/assets/icons/icon-keyboard.svg +1 -0
- package/miniprogram_dist/assets/icons/icon-menu.svg +1 -0
- package/miniprogram_dist/assets/icons/icon-play-voice.svg +1 -0
- package/miniprogram_dist/assets/icons/icon-plus.svg +1 -0
- package/miniprogram_dist/assets/icons/icon-regenerate.svg +1 -0
- package/miniprogram_dist/assets/icons/icon-thinking.svg +1 -0
- package/miniprogram_dist/assets/icons/icon-voice.svg +1 -0
- package/miniprogram_dist/components/attachment/index.js +169 -0
- package/miniprogram_dist/components/attachment/index.json +4 -0
- package/miniprogram_dist/components/attachment/index.wxml +40 -0
- package/miniprogram_dist/components/attachment/index.wxss +119 -0
- package/miniprogram_dist/components/input-bar/index.js +934 -0
- package/miniprogram_dist/components/input-bar/index.json +6 -0
- package/miniprogram_dist/components/input-bar/index.wxml +132 -0
- package/miniprogram_dist/components/input-bar/index.wxss +324 -0
- package/miniprogram_dist/components/message/index.js +988 -0
- package/miniprogram_dist/components/message/index.json +4 -0
- package/miniprogram_dist/components/message/index.wxml +285 -0
- package/miniprogram_dist/components/message/index.wxss +575 -0
- package/miniprogram_dist/components/sidebar/index.js +506 -0
- package/miniprogram_dist/components/sidebar/index.json +4 -0
- package/miniprogram_dist/components/sidebar/index.wxml +137 -0
- package/miniprogram_dist/components/sidebar/index.wxss +264 -0
- package/miniprogram_dist/index.js +1316 -0
- package/miniprogram_dist/index.json +8 -0
- package/miniprogram_dist/index.wxml +172 -0
- package/miniprogram_dist/index.wxss +291 -0
- package/miniprogram_dist/package.json +5 -0
- package/miniprogram_dist/utils/api.js +474 -0
- package/miniprogram_dist/utils/audio.js +860 -0
- package/miniprogram_dist/utils/storage.js +168 -0
- package/package.json +27 -0
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 本地存储工具模块
|
|
3
|
+
* 处理对话缓存、设置保存等
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
const STORAGE_KEYS = {
|
|
7
|
+
SESSIONS: 'chat_sessions',
|
|
8
|
+
CURRENT_SESSION: 'current_session',
|
|
9
|
+
SETTINGS: 'chat_settings',
|
|
10
|
+
DRAFT: 'chat_draft'
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* 保存会话列表到本地
|
|
15
|
+
*/
|
|
16
|
+
function saveSessions(sessions) {
|
|
17
|
+
try {
|
|
18
|
+
wx.setStorageSync(STORAGE_KEYS.SESSIONS, JSON.stringify(sessions));
|
|
19
|
+
} catch (e) {
|
|
20
|
+
console.error('保存会话列表失败', e);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* 获取本地会话列表
|
|
26
|
+
*/
|
|
27
|
+
function getSessions() {
|
|
28
|
+
try {
|
|
29
|
+
const data = wx.getStorageSync(STORAGE_KEYS.SESSIONS);
|
|
30
|
+
return data ? JSON.parse(data) : [];
|
|
31
|
+
} catch (e) {
|
|
32
|
+
console.error('获取会话列表失败', e);
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* 保存当前会话ID
|
|
39
|
+
*/
|
|
40
|
+
function saveCurrentSession(sessionId) {
|
|
41
|
+
try {
|
|
42
|
+
wx.setStorageSync(STORAGE_KEYS.CURRENT_SESSION, sessionId);
|
|
43
|
+
} catch (e) {
|
|
44
|
+
console.error('保存当前会话失败', e);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* 获取当前会话ID
|
|
50
|
+
*/
|
|
51
|
+
function getCurrentSession() {
|
|
52
|
+
try {
|
|
53
|
+
return wx.getStorageSync(STORAGE_KEYS.CURRENT_SESSION) || '';
|
|
54
|
+
} catch (e) {
|
|
55
|
+
console.error('获取当前会话失败', e);
|
|
56
|
+
return '';
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* 保存设置
|
|
62
|
+
*/
|
|
63
|
+
function saveSettings(settings) {
|
|
64
|
+
try {
|
|
65
|
+
wx.setStorageSync(STORAGE_KEYS.SETTINGS, JSON.stringify(settings));
|
|
66
|
+
} catch (e) {
|
|
67
|
+
console.error('保存设置失败', e);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* 获取设置
|
|
73
|
+
*/
|
|
74
|
+
function getSettings() {
|
|
75
|
+
try {
|
|
76
|
+
const data = wx.getStorageSync(STORAGE_KEYS.SETTINGS);
|
|
77
|
+
return data ? JSON.parse(data) : {
|
|
78
|
+
voiceAutoPlay: false, // 语音自动播放
|
|
79
|
+
deepThinking: false, // 深度思考
|
|
80
|
+
webSearch: false // 联网搜索
|
|
81
|
+
};
|
|
82
|
+
} catch (e) {
|
|
83
|
+
console.error('获取设置失败', e);
|
|
84
|
+
return {
|
|
85
|
+
voiceAutoPlay: false,
|
|
86
|
+
deepThinking: false,
|
|
87
|
+
webSearch: false
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* 保存草稿
|
|
94
|
+
*/
|
|
95
|
+
function saveDraft(sessionId, content) {
|
|
96
|
+
try {
|
|
97
|
+
const drafts = getDrafts();
|
|
98
|
+
drafts[sessionId] = content;
|
|
99
|
+
wx.setStorageSync(STORAGE_KEYS.DRAFT, JSON.stringify(drafts));
|
|
100
|
+
} catch (e) {
|
|
101
|
+
console.error('保存草稿失败', e);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* 获取草稿
|
|
107
|
+
*/
|
|
108
|
+
function getDraft(sessionId) {
|
|
109
|
+
try {
|
|
110
|
+
const drafts = getDrafts();
|
|
111
|
+
return drafts[sessionId] || '';
|
|
112
|
+
} catch (e) {
|
|
113
|
+
console.error('获取草稿失败', e);
|
|
114
|
+
return '';
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* 获取所有草稿
|
|
120
|
+
*/
|
|
121
|
+
function getDrafts() {
|
|
122
|
+
try {
|
|
123
|
+
const data = wx.getStorageSync(STORAGE_KEYS.DRAFT);
|
|
124
|
+
return data ? JSON.parse(data) : {};
|
|
125
|
+
} catch (e) {
|
|
126
|
+
console.error('获取草稿失败', e);
|
|
127
|
+
return {};
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* 删除草稿
|
|
133
|
+
*/
|
|
134
|
+
function removeDraft(sessionId) {
|
|
135
|
+
try {
|
|
136
|
+
const drafts = getDrafts();
|
|
137
|
+
delete drafts[sessionId];
|
|
138
|
+
wx.setStorageSync(STORAGE_KEYS.DRAFT, JSON.stringify(drafts));
|
|
139
|
+
} catch (e) {
|
|
140
|
+
console.error('删除草稿失败', e);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* 清除所有存储
|
|
146
|
+
*/
|
|
147
|
+
function clearAll() {
|
|
148
|
+
try {
|
|
149
|
+
Object.values(STORAGE_KEYS).forEach(key => {
|
|
150
|
+
wx.removeStorageSync(key);
|
|
151
|
+
});
|
|
152
|
+
} catch (e) {
|
|
153
|
+
console.error('清除存储失败', e);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
module.exports = {
|
|
158
|
+
saveSessions,
|
|
159
|
+
getSessions,
|
|
160
|
+
saveCurrentSession,
|
|
161
|
+
getCurrentSession,
|
|
162
|
+
saveSettings,
|
|
163
|
+
getSettings,
|
|
164
|
+
saveDraft,
|
|
165
|
+
getDraft,
|
|
166
|
+
removeDraft,
|
|
167
|
+
clearAll
|
|
168
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@flexem/chat-box",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "chat box",
|
|
5
|
+
"main": "miniprogram_dist/index.js",
|
|
6
|
+
"miniprogram": "miniprogram_dist",
|
|
7
|
+
"files": [
|
|
8
|
+
"miniprogram_dist"
|
|
9
|
+
],
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "node scripts/build.js"
|
|
12
|
+
},
|
|
13
|
+
"keywords": [
|
|
14
|
+
"miniprogram",
|
|
15
|
+
"wechat",
|
|
16
|
+
"chat",
|
|
17
|
+
"voice",
|
|
18
|
+
"speech-to-text",
|
|
19
|
+
"ai"
|
|
20
|
+
],
|
|
21
|
+
"author": "songkaige",
|
|
22
|
+
"license": "MIT",
|
|
23
|
+
"repository": {
|
|
24
|
+
"type": "git",
|
|
25
|
+
"url": ""
|
|
26
|
+
}
|
|
27
|
+
}
|