sophhub 0.2.3 → 0.2.4

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.
Files changed (107) hide show
  1. package/package.json +1 -1
  2. package/skills/consensus/skill.json +20 -0
  3. package/skills/consensus/src/SKILL.md +93 -0
  4. package/skills/deepwiki/skill.json +20 -0
  5. package/skills/deepwiki/src/SKILL.md +45 -0
  6. package/skills/deepwiki/src/_meta.json +6 -0
  7. package/skills/deepwiki/src/scripts/deepwiki.js +135 -0
  8. package/skills/feishu-bitable/skill.json +20 -0
  9. package/skills/feishu-bitable/src/CHECKLIST.md +150 -0
  10. package/skills/feishu-bitable/src/README.md +178 -0
  11. package/skills/feishu-bitable/src/SKILL.md +113 -0
  12. package/skills/feishu-bitable/src/_meta.json +6 -0
  13. package/skills/feishu-bitable/src/api.js +381 -0
  14. package/skills/feishu-bitable/src/bin/cli.js +284 -0
  15. package/skills/feishu-bitable/src/description.md +143 -0
  16. package/skills/feishu-bitable/src/examples/create-records.json +52 -0
  17. package/skills/feishu-bitable/src/examples/create-table.json +64 -0
  18. package/skills/feishu-bitable/src/package-lock.json +324 -0
  19. package/skills/feishu-bitable/src/package.json +33 -0
  20. package/skills/feishu-bitable/src/publish-config.json +14 -0
  21. package/skills/feishu-bitable/src/test-simple.js +61 -0
  22. package/skills/feishu-bitable/src/utils.js +261 -0
  23. package/skills/google-maps/skill.json +20 -0
  24. package/skills/google-maps/src/SKILL.md +237 -0
  25. package/skills/google-maps/src/_meta.json +6 -0
  26. package/skills/google-maps/src/lib/map_helper.py +912 -0
  27. package/skills/large-task-router/skill.json +20 -0
  28. package/skills/large-task-router/src/SKILL.md +79 -0
  29. package/skills/large-task-router/src/templates/plan.md +74 -0
  30. package/skills/skillhub/skill.json +11 -4
  31. package/skills/skillhub/src/SKILL.md +11 -1
  32. package/skills/sophnet-dailynews/skill.json +20 -0
  33. package/skills/sophnet-dailynews/src/SKILL.md +179 -0
  34. package/skills/sophnet-dailynews/src/cache.json +151 -0
  35. package/skills/sophnet-dailynews/src/sources.json +230 -0
  36. package/skills/sophnet-schedule/skill.json +20 -0
  37. package/skills/sophnet-schedule/src/ARCHITECTURE.md +321 -0
  38. package/skills/sophnet-schedule/src/IMPROVEMENTS.md +145 -0
  39. package/skills/sophnet-schedule/src/SKILL.md +1050 -0
  40. package/skills/sophnet-schedule/src/_meta.json +6 -0
  41. package/skills/sophnet-schedule/src/api/__init__.py +0 -0
  42. package/skills/sophnet-schedule/src/api/models.py +245 -0
  43. package/skills/sophnet-schedule/src/apps/add_event.py +237 -0
  44. package/skills/sophnet-schedule/src/apps/check_reminders.py +112 -0
  45. package/skills/sophnet-schedule/src/apps/check_roc.py +246 -0
  46. package/skills/sophnet-schedule/src/apps/generate_daily_plan.py +342 -0
  47. package/skills/sophnet-schedule/src/apps/import_events.py +216 -0
  48. package/skills/sophnet-schedule/src/apps/monitor_calendar_changes.py +140 -0
  49. package/skills/sophnet-schedule/src/apps/register_tasks.py +169 -0
  50. package/skills/sophnet-schedule/src/apps/sync_roc_to_gcal.py +174 -0
  51. package/skills/sophnet-schedule/src/compat.py +66 -0
  52. package/skills/sophnet-schedule/src/config/__init__.py +0 -0
  53. package/skills/sophnet-schedule/src/config/reminder_rules.yaml +96 -0
  54. package/skills/sophnet-schedule/src/config/roc_events.yaml +44 -0
  55. package/skills/sophnet-schedule/src/config/settings.py +133 -0
  56. package/skills/sophnet-schedule/src/config/task_registry.yaml +92 -0
  57. package/skills/sophnet-schedule/src/docs/FRONTEND_INTEGRATION_GUIDE.md +437 -0
  58. package/skills/sophnet-schedule/src/gcal/__init__.py +0 -0
  59. package/skills/sophnet-schedule/src/gcal/client.py +374 -0
  60. package/skills/sophnet-schedule/src/gcal/models.py +91 -0
  61. package/skills/sophnet-schedule/src/requirements.txt +6 -0
  62. package/skills/sophnet-schedule/src/scripts/setup_gcal_token.py +85 -0
  63. package/skills/sophnet-schedule/src/server.py +669 -0
  64. package/skills/sophnet-schedule/src/services/__init__.py +0 -0
  65. package/skills/sophnet-schedule/src/services/calendar_backend.py +139 -0
  66. package/skills/sophnet-schedule/src/services/conflict_detector.py +96 -0
  67. package/skills/sophnet-schedule/src/services/datetime_utils.py +117 -0
  68. package/skills/sophnet-schedule/src/services/event_classifier.py +100 -0
  69. package/skills/sophnet-schedule/src/services/event_diff.py +160 -0
  70. package/skills/sophnet-schedule/src/services/google_integration.py +500 -0
  71. package/skills/sophnet-schedule/src/services/job_store.py +100 -0
  72. package/skills/sophnet-schedule/src/services/local_event_store.py +266 -0
  73. package/skills/sophnet-schedule/src/services/reminder_planner.py +116 -0
  74. package/skills/sophnet-schedule/src/services/runtime_utils.py +31 -0
  75. package/skills/sophnet-schedule/src/services/table_parser.py +286 -0
  76. package/skills/sophnet-schedule/src/services/task_builder.py +167 -0
  77. package/skills/sophnet-schedule/src/services/time_window.py +72 -0
  78. package/skills/sophnet-stock/skill.json +20 -0
  79. package/skills/sophnet-stock/src/App-Plan.md +442 -0
  80. package/skills/sophnet-stock/src/README.md +214 -0
  81. package/skills/sophnet-stock/src/SKILL.md +236 -0
  82. package/skills/sophnet-stock/src/TODO.md +394 -0
  83. package/skills/sophnet-stock/src/_meta.json +6 -0
  84. package/skills/sophnet-stock/src/docs/ARCHITECTURE.md +408 -0
  85. package/skills/sophnet-stock/src/docs/CONCEPT.md +233 -0
  86. package/skills/sophnet-stock/src/docs/HOT_SCANNER.md +288 -0
  87. package/skills/sophnet-stock/src/docs/README.md +95 -0
  88. package/skills/sophnet-stock/src/docs/USAGE.md +465 -0
  89. package/skills/sophnet-stock/src/scripts/analyze_stock.py +2565 -0
  90. package/skills/sophnet-stock/src/scripts/dividends.py +365 -0
  91. package/skills/sophnet-stock/src/scripts/hot_scanner.py +582 -0
  92. package/skills/sophnet-stock/src/scripts/portfolio.py +548 -0
  93. package/skills/sophnet-stock/src/scripts/rumor_scanner.py +342 -0
  94. package/skills/sophnet-stock/src/scripts/test_stock_analysis.py +409 -0
  95. package/skills/sophnet-stock/src/scripts/watchlist.py +336 -0
  96. package/skills/xiaohongshu/skill.json +20 -0
  97. package/skills/xiaohongshu/src/SKILL.md +91 -0
  98. package/skills/xiaohongshu/src/_meta.json +6 -0
  99. package/skills/xiaohongshu/src/assets/card.html +216 -0
  100. package/skills/xiaohongshu/src/assets/cover.html +82 -0
  101. package/skills/xiaohongshu/src/assets/example.md +84 -0
  102. package/skills/xiaohongshu/src/assets/styles.css +318 -0
  103. package/skills/xiaohongshu/src/scripts/render_xhs_v2.py +737 -0
  104. package/skills/xiaohongshu/src/scripts/sign_server.py +158 -0
  105. package/skills/xiaohongshu/src/scripts/stealth.min.js +7 -0
  106. package/skills/xiaohongshu/src/scripts/xhs_tool.py +186 -0
  107. package/skills/xiaohongshu/src/workflow.py +185 -0
@@ -0,0 +1,284 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * 飞书多维表格命令行工具
5
+ */
6
+
7
+ const { program } = require('commander');
8
+ const FeishuBitableAPI = require('../src/api');
9
+ const { parseJsonInput, validateRequired } = require('../src/utils');
10
+
11
+ // 加载环境变量
12
+ require('dotenv').config();
13
+
14
+ program
15
+ .name('feishu-bitable')
16
+ .description('飞书多维表格命令行工具')
17
+ .version('1.0.0');
18
+
19
+ // 测试连接命令
20
+ program
21
+ .command('test')
22
+ .description('测试飞书连接')
23
+ .action(async () => {
24
+ try {
25
+ const api = new FeishuBitableAPI();
26
+ const result = await api.testConnection();
27
+
28
+ if (result.success) {
29
+ console.log('✅ 连接测试成功');
30
+ console.log(`应用ID: ${result.appId}`);
31
+ console.log(`令牌有效: ${result.tokenValid ? '是' : '否'}`);
32
+ } else {
33
+ console.error('❌ 连接测试失败:', result.message);
34
+ process.exit(1);
35
+ }
36
+ } catch (error) {
37
+ console.error('❌ 连接测试失败:', error.message);
38
+ process.exit(1);
39
+ }
40
+ });
41
+
42
+ // 获取应用信息
43
+ program
44
+ .command('get-app')
45
+ .description('获取应用信息')
46
+ .requiredOption('--app-token <token>', '应用token')
47
+ .action(async (options) => {
48
+ try {
49
+ validateRequired(options, ['appToken']);
50
+ const api = new FeishuBitableAPI();
51
+ const result = await api.getApp(options.appToken);
52
+
53
+ console.log(JSON.stringify(result, null, 2));
54
+ } catch (error) {
55
+ console.error('❌ 获取应用信息失败:', error.message);
56
+ process.exit(1);
57
+ }
58
+ });
59
+
60
+ // 列出数据表
61
+ program
62
+ .command('list-tables')
63
+ .description('列出所有数据表')
64
+ .requiredOption('--app-token <token>', '应用token')
65
+ .option('--page-size <number>', '每页大小', '100')
66
+ .option('--page-token <token>', '分页token')
67
+ .action(async (options) => {
68
+ try {
69
+ validateRequired(options, ['appToken']);
70
+ const api = new FeishuBitableAPI();
71
+
72
+ const params = {};
73
+ if (options.pageSize) params.page_size = parseInt(options.pageSize);
74
+ if (options.pageToken) params.page_token = options.pageToken;
75
+
76
+ const result = await api.listTables(options.appToken, params);
77
+ console.log(JSON.stringify(result, null, 2));
78
+ } catch (error) {
79
+ console.error('❌ 列出数据表失败:', error.message);
80
+ process.exit(1);
81
+ }
82
+ });
83
+
84
+ // 创建数据表
85
+ program
86
+ .command('create-table')
87
+ .description('创建数据表')
88
+ .requiredOption('--app-token <token>', '应用token')
89
+ .requiredOption('--name <name>', '表名')
90
+ .option('--fields <json>', '字段定义JSON或@文件路径')
91
+ .action(async (options) => {
92
+ try {
93
+ validateRequired(options, ['appToken', 'name']);
94
+ const api = new FeishuBitableAPI();
95
+
96
+ const tableData = {
97
+ name: options.name
98
+ };
99
+
100
+ if (options.fields) {
101
+ tableData.fields = parseJsonInput(options.fields);
102
+ }
103
+
104
+ const result = await api.createTable(options.appToken, tableData);
105
+ console.log(JSON.stringify(result, null, 2));
106
+ } catch (error) {
107
+ console.error('❌ 创建数据表失败:', error.message);
108
+ process.exit(1);
109
+ }
110
+ });
111
+
112
+ // 列出记录
113
+ program
114
+ .command('list-records')
115
+ .description('列出记录')
116
+ .requiredOption('--app-token <token>', '应用token')
117
+ .requiredOption('--table-id <id>', '表ID')
118
+ .option('--page-size <number>', '每页大小', '100')
119
+ .option('--page-token <token>', '分页token')
120
+ .option('--filter <json>', '过滤条件JSON')
121
+ .option('--sort <json>', '排序条件JSON')
122
+ .action(async (options) => {
123
+ try {
124
+ validateRequired(options, ['appToken', 'tableId']);
125
+ const api = new FeishuBitableAPI();
126
+
127
+ const params = {};
128
+ if (options.pageSize) params.page_size = parseInt(options.pageSize);
129
+ if (options.pageToken) params.page_token = options.pageToken;
130
+ if (options.filter) params.filter = parseJsonInput(options.filter);
131
+ if (options.sort) params.sort = parseJsonInput(options.sort);
132
+
133
+ const result = await api.listRecords(options.appToken, options.tableId, params);
134
+ console.log(JSON.stringify(result, null, 2));
135
+ } catch (error) {
136
+ console.error('❌ 列出记录失败:', error.message);
137
+ process.exit(1);
138
+ }
139
+ });
140
+
141
+ // 创建记录
142
+ program
143
+ .command('create-record')
144
+ .description('创建记录')
145
+ .requiredOption('--app-token <token>', '应用token')
146
+ .requiredOption('--table-id <id>', '表ID')
147
+ .requiredOption('--data <json>', '记录数据JSON或@文件路径')
148
+ .action(async (options) => {
149
+ try {
150
+ validateRequired(options, ['appToken', 'tableId', 'data']);
151
+ const api = new FeishuBitableAPI();
152
+
153
+ const recordData = parseJsonInput(options.data);
154
+ const result = await api.createRecord(options.appToken, options.tableId, recordData);
155
+ console.log(JSON.stringify(result, null, 2));
156
+ } catch (error) {
157
+ console.error('❌ 创建记录失败:', error.message);
158
+ process.exit(1);
159
+ }
160
+ });
161
+
162
+ // 批量创建记录
163
+ program
164
+ .command('batch-create')
165
+ .description('批量创建记录')
166
+ .requiredOption('--app-token <token>', '应用token')
167
+ .requiredOption('--table-id <id>', '表ID')
168
+ .requiredOption('--data <json>', '记录数据数组JSON或@文件路径')
169
+ .action(async (options) => {
170
+ try {
171
+ validateRequired(options, ['appToken', 'tableId', 'data']);
172
+ const api = new FeishuBitableAPI();
173
+
174
+ const records = parseJsonInput(options.data);
175
+ if (!Array.isArray(records)) {
176
+ throw new Error('数据必须是数组格式');
177
+ }
178
+
179
+ const result = await api.batchCreateRecords(options.appToken, options.tableId, records);
180
+ console.log(JSON.stringify(result, null, 2));
181
+ } catch (error) {
182
+ console.error('❌ 批量创建记录失败:', error.message);
183
+ process.exit(1);
184
+ }
185
+ });
186
+
187
+ // 更新记录
188
+ program
189
+ .command('update-record')
190
+ .description('更新记录')
191
+ .requiredOption('--app-token <token>', '应用token')
192
+ .requiredOption('--table-id <id>', '表ID')
193
+ .requiredOption('--record-id <id>', '记录ID')
194
+ .requiredOption('--data <json>', '更新数据JSON或@文件路径')
195
+ .action(async (options) => {
196
+ try {
197
+ validateRequired(options, ['appToken', 'tableId', 'recordId', 'data']);
198
+ const api = new FeishuBitableAPI();
199
+
200
+ const recordData = parseJsonInput(options.data);
201
+ const result = await api.updateRecord(options.appToken, options.tableId, options.recordId, recordData);
202
+ console.log(JSON.stringify(result, null, 2));
203
+ } catch (error) {
204
+ console.error('❌ 更新记录失败:', error.message);
205
+ process.exit(1);
206
+ }
207
+ });
208
+
209
+ // 删除记录
210
+ program
211
+ .command('delete-record')
212
+ .description('删除记录')
213
+ .requiredOption('--app-token <token>', '应用token')
214
+ .requiredOption('--table-id <id>', '表ID')
215
+ .requiredOption('--record-id <id>', '记录ID')
216
+ .action(async (options) => {
217
+ try {
218
+ validateRequired(options, ['appToken', 'tableId', 'recordId']);
219
+ const api = new FeishuBitableAPI();
220
+
221
+ const result = await api.deleteRecord(options.appToken, options.tableId, options.recordId);
222
+ console.log(JSON.stringify(result, null, 2));
223
+ } catch (error) {
224
+ console.error('❌ 删除记录失败:', error.message);
225
+ process.exit(1);
226
+ }
227
+ });
228
+
229
+ // 列出字段
230
+ program
231
+ .command('list-fields')
232
+ .description('列出字段')
233
+ .requiredOption('--app-token <token>', '应用token')
234
+ .requiredOption('--table-id <id>', '表ID')
235
+ .option('--page-size <number>', '每页大小', '100')
236
+ .option('--page-token <token>', '分页token')
237
+ .action(async (options) => {
238
+ try {
239
+ validateRequired(options, ['appToken', 'tableId']);
240
+ const api = new FeishuBitableAPI();
241
+
242
+ const params = {};
243
+ if (options.pageSize) params.page_size = parseInt(options.pageSize);
244
+ if (options.pageToken) params.page_token = options.pageToken;
245
+
246
+ const result = await api.listFields(options.appToken, options.tableId, params);
247
+ console.log(JSON.stringify(result, null, 2));
248
+ } catch (error) {
249
+ console.error('❌ 列出字段失败:', error.message);
250
+ process.exit(1);
251
+ }
252
+ });
253
+
254
+ // 列出视图
255
+ program
256
+ .command('list-views')
257
+ .description('列出视图')
258
+ .requiredOption('--app-token <token>', '应用token')
259
+ .requiredOption('--table-id <id>', '表ID')
260
+ .option('--page-size <number>', '每页大小', '100')
261
+ .option('--page-token <token>', '分页token')
262
+ .action(async (options) => {
263
+ try {
264
+ validateRequired(options, ['appToken', 'tableId']);
265
+ const api = new FeishuBitableAPI();
266
+
267
+ const params = {};
268
+ if (options.pageSize) params.page_size = parseInt(options.pageSize);
269
+ if (options.pageToken) params.page_token = options.pageToken;
270
+
271
+ const result = await api.listViews(options.appToken, options.tableId, params);
272
+ console.log(JSON.stringify(result, null, 2));
273
+ } catch (error) {
274
+ console.error('❌ 列出视图失败:', error.message);
275
+ process.exit(1);
276
+ }
277
+ });
278
+
279
+ // 如果没有命令,显示帮助
280
+ if (!process.argv.slice(2).length) {
281
+ program.outputHelp();
282
+ } else {
283
+ program.parse(process.argv);
284
+ }
@@ -0,0 +1,143 @@
1
+ # 飞书多维表格技能 (Feishu Bitable)
2
+
3
+ 一个功能完整的飞书多维表格(Bitable)API技能,为Clawdbot提供强大的飞书多维表格操作能力。
4
+
5
+ ## 功能亮点
6
+
7
+ ### 📊 完整的数据表管理
8
+ - **列出数据表**:获取应用中的所有数据表
9
+ - **创建数据表**:支持自定义字段和属性
10
+ - **数据表详情**:获取表结构和元数据
11
+ - **删除数据表**:安全删除不需要的表
12
+
13
+ ### 📝 强大的记录操作
14
+ - **CRUD操作**:完整的创建、读取、更新、删除功能
15
+ - **批量操作**:支持批量创建、更新、删除记录
16
+ - **高级查询**:支持过滤、排序、分页
17
+ - **字段映射**:自动处理不同字段类型的值转换
18
+
19
+ ### 🔧 专业功能
20
+ - **字段管理**:查看和操作表字段
21
+ - **视图管理**:获取多维表格视图信息
22
+ - **自动Token刷新**:无需手动处理认证过期
23
+ - **错误处理**:完善的错误处理和重试机制
24
+
25
+ ## 技术特性
26
+
27
+ ### 🚀 高性能
28
+ - **异步操作**:所有API调用都是异步的
29
+ - **连接池**:复用HTTP连接提高性能
30
+ - **批量处理**:优化批量操作减少API调用次数
31
+
32
+ ### 🛡️ 可靠性
33
+ - **自动重试**:网络错误时自动重试
34
+ - **Token刷新**:自动处理飞书token过期
35
+ - **参数验证**:严格的输入参数验证
36
+ - **错误处理**:友好的错误消息和诊断信息
37
+
38
+ ### 🔌 易用性
39
+ - **命令行工具**:完整的CLI接口
40
+ - **JSON支持**:支持直接JSON或文件输入
41
+ - **环境变量**:灵活的配置方式
42
+ - **详细文档**:完整的示例和使用说明
43
+
44
+ ## 使用场景
45
+
46
+ ### 🏢 企业自动化
47
+ - **任务管理**:自动同步任务状态到飞书
48
+ - **数据同步**:从其他系统导入数据到飞书
49
+ - **报表生成**:自动生成业务报表
50
+ - **审批流程**:集成飞书审批和工作流
51
+
52
+ ### 👥 团队协作
53
+ - **项目管理**:团队任务跟踪和分配
54
+ - **客户管理**:CRM数据管理和分析
55
+ - **库存管理**:商品库存跟踪和预警
56
+ - **日程安排**:团队日程和会议管理
57
+
58
+ ### 🔄 系统集成
59
+ - **API集成**:与其他系统API集成
60
+ - **数据管道**:构建数据ETL管道
61
+ - **实时同步**:实时数据同步和更新
62
+ - **监控告警**:系统监控和自动告警
63
+
64
+ ## 安装和使用
65
+
66
+ ### 快速开始
67
+ ```bash
68
+ # 通过ClawdHub安装
69
+ clawdhub install feishu-bitable
70
+
71
+ # 进入技能目录
72
+ cd skills/feishu-bitable
73
+
74
+ # 安装依赖
75
+ npm install
76
+
77
+ # 配置环境变量
78
+ cp .env.example .env
79
+ # 编辑.env文件,填入你的飞书应用凭证
80
+
81
+ # 测试连接
82
+ node bin/cli.js test
83
+ ```
84
+
85
+ ### 基本示例
86
+ ```bash
87
+ # 列出所有数据表
88
+ node bin/cli.js list-tables --app-token basxxxxxx
89
+
90
+ # 创建新表
91
+ node bin/cli.js create-table --app-token basxxxxxx --name "项目任务"
92
+
93
+ # 添加任务
94
+ node bin/cli.js create-record --app-token basxxxxxx --table-id tblxxxxxx \
95
+ --data '{"任务名称": "开发API", "状态": "进行中", "优先级": "高"}'
96
+
97
+ # 批量导入数据
98
+ node bin/cli.js batch-create --app-token basxxxxxx --table-id tblxxxxxx \
99
+ --data @examples/create-records.json
100
+ ```
101
+
102
+ ## 与其他技能集成
103
+
104
+ ### 🤝 飞书生态
105
+ - **feishu-bridge**:通过飞书机器人接收指令
106
+ - **feishu-docx-powerwrite**:将表格数据生成精美文档
107
+ - **feishu-card**:发送表格更新通知卡片
108
+ - **feishu-calendar**:同步日程和截止日期
109
+
110
+ ### 🔗 数据工具
111
+ - **google-sheet-api**:与Google Sheets数据同步
112
+ - **notion**:与Notion数据库双向同步
113
+ - **database**:与传统数据库集成
114
+ - **csv-export**:导出数据为CSV格式
115
+
116
+ ## 开发指南
117
+
118
+ ### 扩展功能
119
+ 技能采用模块化设计,易于扩展:
120
+ - `src/api.js` - 核心API客户端
121
+ - `src/utils.js` - 工具函数库
122
+ - `bin/cli.js` - 命令行接口
123
+
124
+ ### 贡献
125
+ 欢迎贡献代码和功能:
126
+ 1. Fork项目
127
+ 2. 创建功能分支
128
+ 3. 提交更改
129
+ 4. 创建Pull Request
130
+
131
+ ## 许可证
132
+
133
+ MIT License - 免费用于商业和个人项目。
134
+
135
+ ## 支持
136
+
137
+ - 文档:查看SKILL.md获取详细API文档
138
+ - 问题:在GitHub Issues报告问题
139
+ - 社区:加入Clawdbot Discord社区获取帮助
140
+
141
+ ---
142
+
143
+ **让飞书多维表格成为你的数据中枢,释放自动化潜能!**
@@ -0,0 +1,52 @@
1
+ [
2
+ {
3
+ "任务名称": "开发用户登录功能",
4
+ "状态": "进行中",
5
+ "优先级": "高",
6
+ "截止日期": "2024-12-15",
7
+ "负责人": "user_id_1",
8
+ "描述": "实现用户登录、注册、忘记密码功能",
9
+ "完成百分比": 70,
10
+ "是否完成": false
11
+ },
12
+ {
13
+ "任务名称": "设计数据库架构",
14
+ "状态": "已完成",
15
+ "优先级": "中",
16
+ "截止日期": "2024-11-30",
17
+ "负责人": "user_id_2",
18
+ "描述": "设计系统数据库表结构和关系",
19
+ "完成百分比": 100,
20
+ "是否完成": true
21
+ },
22
+ {
23
+ "任务名称": "编写API文档",
24
+ "状态": "待办",
25
+ "优先级": "中",
26
+ "截止日期": "2024-12-20",
27
+ "负责人": "user_id_3",
28
+ "描述": "编写完整的API接口文档",
29
+ "完成百分比": 0,
30
+ "是否完成": false
31
+ },
32
+ {
33
+ "任务名称": "测试支付功能",
34
+ "状态": "进行中",
35
+ "优先级": "紧急",
36
+ "截止日期": "2024-12-10",
37
+ "负责人": "user_id_4",
38
+ "描述": "测试支付流程和异常处理",
39
+ "完成百分比": 50,
40
+ "是否完成": false
41
+ },
42
+ {
43
+ "任务名称": "部署生产环境",
44
+ "状态": "待办",
45
+ "优先级": "高",
46
+ "截止日期": "2024-12-25",
47
+ "负责人": "user_id_5",
48
+ "描述": "部署应用到生产服务器",
49
+ "完成百分比": 0,
50
+ "是否完成": false
51
+ }
52
+ ]
@@ -0,0 +1,64 @@
1
+ {
2
+ "name": "任务管理",
3
+ "fields": [
4
+ {
5
+ "field_name": "任务名称",
6
+ "type": "text",
7
+ "property": {
8
+ "formatter": "text"
9
+ }
10
+ },
11
+ {
12
+ "field_name": "状态",
13
+ "type": "single_select",
14
+ "property": {
15
+ "options": [
16
+ {"name": "待办", "color": "blue"},
17
+ {"name": "进行中", "color": "orange"},
18
+ {"name": "已完成", "color": "green"}
19
+ ]
20
+ }
21
+ },
22
+ {
23
+ "field_name": "优先级",
24
+ "type": "single_select",
25
+ "property": {
26
+ "options": [
27
+ {"name": "低", "color": "gray"},
28
+ {"name": "中", "color": "blue"},
29
+ {"name": "高", "color": "red"},
30
+ {"name": "紧急", "color": "magenta"}
31
+ ]
32
+ }
33
+ },
34
+ {
35
+ "field_name": "截止日期",
36
+ "type": "date",
37
+ "property": {
38
+ "formatter": "yyyy-MM-dd"
39
+ }
40
+ },
41
+ {
42
+ "field_name": "负责人",
43
+ "type": "user"
44
+ },
45
+ {
46
+ "field_name": "描述",
47
+ "type": "text",
48
+ "property": {
49
+ "formatter": "text"
50
+ }
51
+ },
52
+ {
53
+ "field_name": "完成百分比",
54
+ "type": "number",
55
+ "property": {
56
+ "formatter": "0%"
57
+ }
58
+ },
59
+ {
60
+ "field_name": "是否完成",
61
+ "type": "checkbox"
62
+ }
63
+ ]
64
+ }