shawnxixi-cli 0.3.1 → 1.1.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/.env.example +8 -2
- package/.github/workflows/ci.yml +9 -22
- package/.github/workflows/release.yml +30 -0
- package/CLAUDE.md +167 -63
- package/README.md +345 -65
- package/commitlint.config.js +10 -0
- package/dist/commands/biz/calendar.d.ts +17 -2
- package/dist/commands/biz/calendar.d.ts.map +1 -1
- package/dist/commands/biz/calendar.js +47 -9
- package/dist/commands/biz/calendar.js.map +1 -1
- package/dist/commands/biz/finance.d.ts +32 -1
- package/dist/commands/biz/finance.d.ts.map +1 -1
- package/dist/commands/biz/finance.js +99 -12
- package/dist/commands/biz/finance.js.map +1 -1
- package/dist/commands/biz/health.d.ts +32 -0
- package/dist/commands/biz/health.d.ts.map +1 -0
- package/dist/commands/biz/health.js +92 -0
- package/dist/commands/biz/health.js.map +1 -0
- package/dist/commands/biz/item.d.ts +41 -0
- package/dist/commands/biz/item.d.ts.map +1 -1
- package/dist/commands/biz/item.js +89 -5
- package/dist/commands/biz/item.js.map +1 -1
- package/dist/commands/biz/record.d.ts +0 -8
- package/dist/commands/biz/record.d.ts.map +1 -1
- package/dist/commands/biz/record.js +29 -8
- package/dist/commands/biz/record.js.map +1 -1
- package/dist/commands/biz/task.d.ts +38 -0
- package/dist/commands/biz/task.d.ts.map +1 -0
- package/dist/commands/biz/task.js +110 -0
- package/dist/commands/biz/task.js.map +1 -0
- package/dist/commands/biz/todo.d.ts +52 -8
- package/dist/commands/biz/todo.d.ts.map +1 -1
- package/dist/commands/biz/todo.js +167 -17
- package/dist/commands/biz/todo.js.map +1 -1
- package/dist/commands/sys/health.d.ts.map +1 -1
- package/dist/commands/sys/health.js +20 -3
- package/dist/commands/sys/health.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +279 -41
- package/dist/index.js.map +1 -1
- package/dist/services/api.d.ts +22 -8
- package/dist/services/api.d.ts.map +1 -1
- package/dist/services/api.js +108 -28
- package/dist/services/api.js.map +1 -1
- package/dist/utils/env.d.ts +16 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +78 -0
- package/dist/utils/env.js.map +1 -0
- package/dist/utils/finance.model.d.ts +80 -0
- package/dist/utils/finance.model.d.ts.map +1 -0
- package/dist/utils/finance.model.js +150 -0
- package/dist/utils/finance.model.js.map +1 -0
- package/dist/utils/output.d.ts +42 -0
- package/dist/utils/output.d.ts.map +1 -0
- package/dist/utils/output.js +124 -0
- package/dist/utils/output.js.map +1 -0
- package/dist/utils/todo.model.d.ts +55 -0
- package/dist/utils/todo.model.d.ts.map +1 -0
- package/dist/utils/todo.model.js +135 -0
- package/dist/utils/todo.model.js.map +1 -0
- package/package.json +18 -2
- package/src/commands/biz/calendar.ts +61 -10
- package/src/commands/biz/finance.ts +112 -13
- package/src/commands/biz/health.ts +96 -0
- package/src/commands/biz/item.ts +113 -6
- package/src/commands/biz/record.ts +32 -8
- package/src/commands/biz/task.ts +115 -0
- package/src/commands/biz/todo.ts +193 -21
- package/src/commands/sys/health.ts +23 -3
- package/src/index.ts +309 -53
- package/src/services/api.ts +111 -30
- package/src/utils/env.ts +85 -0
- package/src/utils/finance.model.ts +182 -0
- package/src/utils/output.ts +126 -0
- package/src/utils/todo.model.ts +167 -0
- package/tests/commands/finance.test.ts +281 -0
- package/tests/commands/item.test.ts +215 -0
- package/tests/commands/todo.test.ts +292 -9
- package/tests/services/api.test.ts +292 -20
- package/tests/utils/finance.model.test.ts +319 -0
- package/tests/utils/todo.model.test.ts +315 -0
package/dist/services/api.js
CHANGED
|
@@ -9,7 +9,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.apiService = void 0;
|
|
11
11
|
const axios_1 = __importDefault(require("axios"));
|
|
12
|
-
const
|
|
12
|
+
const env_1 = require("../utils/env");
|
|
13
|
+
const API_BASE = env_1.envConfig.API_URL;
|
|
13
14
|
/** Normalize date/datetime strings to LocalDateTime format (ISO 8601 without timezone) */
|
|
14
15
|
function toLocalDateTime(value) {
|
|
15
16
|
if (!value)
|
|
@@ -59,24 +60,33 @@ class ApiService {
|
|
|
59
60
|
});
|
|
60
61
|
}
|
|
61
62
|
async getToken() {
|
|
62
|
-
|
|
63
|
-
return process.env.SHAWNXIXI_API_TOKEN || null;
|
|
63
|
+
return env_1.envConfig.API_TOKEN || process.env.SHAWNXIXI_API_TOKEN || null;
|
|
64
64
|
}
|
|
65
65
|
async refreshToken() {
|
|
66
66
|
// TODO: 实现 token 刷新逻辑
|
|
67
67
|
}
|
|
68
68
|
// ============ Todo API ============
|
|
69
|
-
async createTodo(title, dueDate, priority) {
|
|
69
|
+
async createTodo(title, dueDate, priority, tags, repeatRule, repeatEndDate, parentId) {
|
|
70
70
|
const { data } = await this.client.post('/api/v1/todos', {
|
|
71
71
|
title,
|
|
72
72
|
dueDate: toLocalDateTime(dueDate),
|
|
73
73
|
priority: priority || 'medium',
|
|
74
74
|
status: 'pending',
|
|
75
|
+
tags,
|
|
76
|
+
repeatRule,
|
|
77
|
+
repeatEndDate: toLocalDateTime(repeatEndDate),
|
|
78
|
+
parentId,
|
|
75
79
|
});
|
|
76
80
|
return data;
|
|
77
81
|
}
|
|
78
|
-
async listTodos(status) {
|
|
79
|
-
const params =
|
|
82
|
+
async listTodos(status, priority, tags) {
|
|
83
|
+
const params = {};
|
|
84
|
+
if (status)
|
|
85
|
+
params.status = status;
|
|
86
|
+
if (priority)
|
|
87
|
+
params.priority = priority;
|
|
88
|
+
if (tags)
|
|
89
|
+
params.tags = tags;
|
|
80
90
|
const { data } = await this.client.get('/api/v1/todos', { params });
|
|
81
91
|
return data;
|
|
82
92
|
}
|
|
@@ -88,6 +98,17 @@ class ApiService {
|
|
|
88
98
|
const { data } = await this.client.delete(`/api/v1/todos/${id}`);
|
|
89
99
|
return data;
|
|
90
100
|
}
|
|
101
|
+
async repeatTodo(id) {
|
|
102
|
+
const { data } = await this.client.post(`/api/v1/todos/${id}/repeat`);
|
|
103
|
+
return data;
|
|
104
|
+
}
|
|
105
|
+
async listSubtasks(parentId) {
|
|
106
|
+
const params = {};
|
|
107
|
+
if (parentId)
|
|
108
|
+
params.parentId = String(parentId);
|
|
109
|
+
const { data } = await this.client.get('/api/v1/todos', { params });
|
|
110
|
+
return data;
|
|
111
|
+
}
|
|
91
112
|
// ============ Record API ============
|
|
92
113
|
async createRecord(title, content, type = 'diary', tags) {
|
|
93
114
|
const { data } = await this.client.post('/api/v1/records', {
|
|
@@ -108,25 +129,58 @@ class ApiService {
|
|
|
108
129
|
return data;
|
|
109
130
|
}
|
|
110
131
|
// ============ Finance API ============
|
|
111
|
-
async createFinance(amount, type, category, description) {
|
|
132
|
+
async createFinance(amount, type, category, description, account, transactionDate, tags) {
|
|
112
133
|
const { data } = await this.client.post('/api/v1/finances', {
|
|
113
134
|
amount,
|
|
114
135
|
type,
|
|
115
136
|
category,
|
|
116
137
|
description,
|
|
138
|
+
account,
|
|
139
|
+
transactionDate: toLocalDateTime(transactionDate),
|
|
140
|
+
tags,
|
|
117
141
|
});
|
|
118
142
|
return data;
|
|
119
143
|
}
|
|
120
|
-
async listFinances(type, category) {
|
|
144
|
+
async listFinances(type, category, month) {
|
|
121
145
|
const params = {};
|
|
122
146
|
if (type)
|
|
123
147
|
params.type = type;
|
|
124
148
|
if (category)
|
|
125
149
|
params.category = category;
|
|
150
|
+
if (month)
|
|
151
|
+
params.month = month;
|
|
126
152
|
const { data } = await this.client.get('/api/v1/finances', { params });
|
|
127
153
|
return data;
|
|
128
154
|
}
|
|
155
|
+
async getFinanceStats(month) {
|
|
156
|
+
const { data } = await this.client.get('/api/v1/finances/stats', { params: { month } });
|
|
157
|
+
return data;
|
|
158
|
+
}
|
|
159
|
+
async getFinanceReport(month) {
|
|
160
|
+
const { data } = await this.client.get('/api/v1/finances/report', { params: { month } });
|
|
161
|
+
return data;
|
|
162
|
+
}
|
|
129
163
|
// ============ Health API ============
|
|
164
|
+
async logHealthData(dataType, value, unit, date) {
|
|
165
|
+
const { data } = await this.client.post('/api/v1/health-data', {
|
|
166
|
+
dataType,
|
|
167
|
+
value,
|
|
168
|
+
unit,
|
|
169
|
+
date: toLocalDateTime(date),
|
|
170
|
+
});
|
|
171
|
+
return data;
|
|
172
|
+
}
|
|
173
|
+
async listHealthData(dataType, fromDate, toDate) {
|
|
174
|
+
const params = {};
|
|
175
|
+
if (dataType)
|
|
176
|
+
params.dataType = dataType;
|
|
177
|
+
if (fromDate)
|
|
178
|
+
params.fromDate = fromDate;
|
|
179
|
+
if (toDate)
|
|
180
|
+
params.toDate = toDate;
|
|
181
|
+
const { data } = await this.client.get('/api/v1/health-data', { params });
|
|
182
|
+
return data;
|
|
183
|
+
}
|
|
130
184
|
async syncHealthData() {
|
|
131
185
|
const { data } = await this.client.post('/api/v1/health-data/sync');
|
|
132
186
|
return data;
|
|
@@ -143,12 +197,19 @@ class ApiService {
|
|
|
143
197
|
return data;
|
|
144
198
|
}
|
|
145
199
|
// ============ Item API ============
|
|
146
|
-
async createItem(name, category, location, expireDate) {
|
|
200
|
+
async createItem(name, category, location, expireDate, quantity, unit, brand, barcode, price, supplier, purchaseDate) {
|
|
147
201
|
const { data } = await this.client.post('/api/v1/items', {
|
|
148
202
|
name,
|
|
149
203
|
category,
|
|
150
204
|
location,
|
|
151
205
|
expireDate: toLocalDateTime(expireDate),
|
|
206
|
+
quantity,
|
|
207
|
+
unit,
|
|
208
|
+
brand,
|
|
209
|
+
barcode,
|
|
210
|
+
price,
|
|
211
|
+
supplier,
|
|
212
|
+
purchaseDate: toLocalDateTime(purchaseDate),
|
|
152
213
|
});
|
|
153
214
|
return data;
|
|
154
215
|
}
|
|
@@ -161,14 +222,23 @@ class ApiService {
|
|
|
161
222
|
const { data } = await this.client.get('/api/v1/items', { params });
|
|
162
223
|
return data;
|
|
163
224
|
}
|
|
225
|
+
async getExpiringItems(days) {
|
|
226
|
+
const { data } = await this.client.get('/api/v1/items/expiring', { params: { days } });
|
|
227
|
+
return data;
|
|
228
|
+
}
|
|
229
|
+
async getItemStats() {
|
|
230
|
+
const { data } = await this.client.get('/api/v1/items/stats');
|
|
231
|
+
return data;
|
|
232
|
+
}
|
|
164
233
|
// ============ Calendar API ============
|
|
165
|
-
async createCalendarEvent(title, startTime, endTime, description, location) {
|
|
234
|
+
async createCalendarEvent(title, startTime, endTime, description, location, color) {
|
|
166
235
|
const { data } = await this.client.post('/api/v1/calendar-events', {
|
|
167
236
|
title,
|
|
168
237
|
startTime: toLocalDateTime(startTime),
|
|
169
238
|
endTime: toLocalDateTime(endTime),
|
|
170
239
|
description,
|
|
171
240
|
location,
|
|
241
|
+
color,
|
|
172
242
|
});
|
|
173
243
|
return data;
|
|
174
244
|
}
|
|
@@ -181,6 +251,34 @@ class ApiService {
|
|
|
181
251
|
const { data } = await this.client.get('/api/v1/calendar-events', { params });
|
|
182
252
|
return data;
|
|
183
253
|
}
|
|
254
|
+
// ============ Task API ============
|
|
255
|
+
async createTask(title, source, openclawId, priority) {
|
|
256
|
+
const { data } = await this.client.post('/api/v1/tasks', {
|
|
257
|
+
title,
|
|
258
|
+
source: source || 'cli',
|
|
259
|
+
openclawId,
|
|
260
|
+
priority: priority || 'medium',
|
|
261
|
+
status: 'pending',
|
|
262
|
+
});
|
|
263
|
+
return data;
|
|
264
|
+
}
|
|
265
|
+
async listTasks(status, source) {
|
|
266
|
+
const params = {};
|
|
267
|
+
if (status)
|
|
268
|
+
params.status = status;
|
|
269
|
+
if (source)
|
|
270
|
+
params.source = source;
|
|
271
|
+
const { data } = await this.client.get('/api/v1/tasks', { params });
|
|
272
|
+
return data;
|
|
273
|
+
}
|
|
274
|
+
async updateTask(id, updates) {
|
|
275
|
+
const { data } = await this.client.patch(`/api/v1/tasks/${id}`, updates);
|
|
276
|
+
return data;
|
|
277
|
+
}
|
|
278
|
+
async deleteTask(id) {
|
|
279
|
+
const { data } = await this.client.delete(`/api/v1/tasks/${id}`);
|
|
280
|
+
return data;
|
|
281
|
+
}
|
|
184
282
|
// ============ Reminder API ============
|
|
185
283
|
async createReminder(title, triggerTime, type = 'once') {
|
|
186
284
|
const { data } = await this.client.post('/api/v1/reminders', {
|
|
@@ -212,24 +310,6 @@ class ApiService {
|
|
|
212
310
|
const { data } = await this.client.get('/api/v1/audit-logs', { params });
|
|
213
311
|
return data;
|
|
214
312
|
}
|
|
215
|
-
// ============ Task API ============
|
|
216
|
-
async createTask(title, description, priority, source) {
|
|
217
|
-
const { data } = await this.client.post('/api/v1/tasks', {
|
|
218
|
-
title,
|
|
219
|
-
description,
|
|
220
|
-
priority: priority || 'medium',
|
|
221
|
-
source: source || 'cli',
|
|
222
|
-
status: 'pending',
|
|
223
|
-
});
|
|
224
|
-
return data;
|
|
225
|
-
}
|
|
226
|
-
async listTasks(status) {
|
|
227
|
-
const params = {};
|
|
228
|
-
if (status)
|
|
229
|
-
params.status = status;
|
|
230
|
-
const { data } = await this.client.get('/api/v1/tasks', { params });
|
|
231
|
-
return data;
|
|
232
|
-
}
|
|
233
313
|
}
|
|
234
314
|
exports.apiService = new ApiService();
|
|
235
315
|
//# sourceMappingURL=api.js.map
|
package/dist/services/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/services/api.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;AAEH,kDAA6C;
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/services/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* .env 配置文件加载器
|
|
3
|
+
* 支持 SHAWNXIXI_API_URL 等环境变量
|
|
4
|
+
*/
|
|
5
|
+
interface EnvConfig {
|
|
6
|
+
API_URL: string;
|
|
7
|
+
API_TOKEN?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* 加载 .env 文件并返回配置
|
|
11
|
+
* 优先级:process.env > .env 文件 > 默认值
|
|
12
|
+
*/
|
|
13
|
+
export declare function loadEnvConfig(): EnvConfig;
|
|
14
|
+
export declare const envConfig: EnvConfig;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,UAAU,SAAS;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID;;;GAGG;AACH,wBAAgB,aAAa,IAAI,SAAS,CAmCzC;AA8BD,eAAO,MAAM,SAAS,WAAkB,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* .env 配置文件加载器
|
|
4
|
+
* 支持 SHAWNXIXI_API_URL 等环境变量
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.envConfig = void 0;
|
|
11
|
+
exports.loadEnvConfig = loadEnvConfig;
|
|
12
|
+
const fs_1 = __importDefault(require("fs"));
|
|
13
|
+
const path_1 = __importDefault(require("path"));
|
|
14
|
+
let cachedConfig = null;
|
|
15
|
+
/**
|
|
16
|
+
* 加载 .env 文件并返回配置
|
|
17
|
+
* 优先级:process.env > .env 文件 > 默认值
|
|
18
|
+
*/
|
|
19
|
+
function loadEnvConfig() {
|
|
20
|
+
if (cachedConfig)
|
|
21
|
+
return cachedConfig;
|
|
22
|
+
const defaultConfig = {
|
|
23
|
+
API_URL: process.env.SHAWNXIXI_API_URL || 'http://localhost:8080/api/v1',
|
|
24
|
+
API_TOKEN: process.env.SHAWNXIXI_API_TOKEN,
|
|
25
|
+
};
|
|
26
|
+
// 尝试从当前目录和项目根目录加载 .env
|
|
27
|
+
const possiblePaths = [
|
|
28
|
+
path_1.default.join(process.cwd(), '.env'),
|
|
29
|
+
path_1.default.join(__dirname, '../../.env'),
|
|
30
|
+
path_1.default.join(__dirname, '../../../.env'),
|
|
31
|
+
];
|
|
32
|
+
for (const envPath of possiblePaths) {
|
|
33
|
+
try {
|
|
34
|
+
if (fs_1.default.existsSync(envPath)) {
|
|
35
|
+
const content = fs_1.default.readFileSync(envPath, 'utf-8');
|
|
36
|
+
const envVars = parseEnvFile(content);
|
|
37
|
+
// 合并配置,process.env 优先级最高
|
|
38
|
+
cachedConfig = {
|
|
39
|
+
API_URL: process.env.SHAWNXIXI_API_URL || envVars.SHAWNXIXI_API_URL || defaultConfig.API_URL,
|
|
40
|
+
API_TOKEN: process.env.SHAWNXIXI_API_TOKEN || envVars.SHAWNXIXI_API_TOKEN || defaultConfig.API_TOKEN,
|
|
41
|
+
};
|
|
42
|
+
return cachedConfig;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
// 忽略读取错误,继续尝试下一个路径
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
cachedConfig = defaultConfig;
|
|
50
|
+
return cachedConfig;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* 简单 .env 文件解析器
|
|
54
|
+
*/
|
|
55
|
+
function parseEnvFile(content) {
|
|
56
|
+
const result = {};
|
|
57
|
+
const lines = content.split('\n');
|
|
58
|
+
for (const line of lines) {
|
|
59
|
+
const trimmed = line.trim();
|
|
60
|
+
// 跳过空行和注释
|
|
61
|
+
if (!trimmed || trimmed.startsWith('#'))
|
|
62
|
+
continue;
|
|
63
|
+
const eqIndex = trimmed.indexOf('=');
|
|
64
|
+
if (eqIndex > 0) {
|
|
65
|
+
const key = trimmed.substring(0, eqIndex).trim();
|
|
66
|
+
let value = trimmed.substring(eqIndex + 1).trim();
|
|
67
|
+
// 去掉引号
|
|
68
|
+
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
69
|
+
(value.startsWith("'") && value.endsWith("'"))) {
|
|
70
|
+
value = value.slice(1, -1);
|
|
71
|
+
}
|
|
72
|
+
result[key] = value;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
77
|
+
exports.envConfig = loadEnvConfig();
|
|
78
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Finance Model Utilities
|
|
3
|
+
* 包含收支分类、账户余额计算、金额格式化等功能
|
|
4
|
+
*/
|
|
5
|
+
export type FinanceType = 'income' | 'expense';
|
|
6
|
+
export interface FinanceItem {
|
|
7
|
+
id: string;
|
|
8
|
+
amount: number;
|
|
9
|
+
type: FinanceType;
|
|
10
|
+
category: string;
|
|
11
|
+
description?: string;
|
|
12
|
+
createdAt: string;
|
|
13
|
+
}
|
|
14
|
+
export interface Account {
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
balance: number;
|
|
18
|
+
currency: string;
|
|
19
|
+
}
|
|
20
|
+
export interface FinanceStats {
|
|
21
|
+
totalIncome: number;
|
|
22
|
+
totalExpense: number;
|
|
23
|
+
netBalance: number;
|
|
24
|
+
byCategory: Record<string, {
|
|
25
|
+
income: number;
|
|
26
|
+
expense: number;
|
|
27
|
+
}>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 收入分类
|
|
31
|
+
*/
|
|
32
|
+
export declare const INCOME_CATEGORIES: readonly ["salary", "bonus", "investment", "gift", "refund", "other_income"];
|
|
33
|
+
/**
|
|
34
|
+
* 支出分类
|
|
35
|
+
*/
|
|
36
|
+
export declare const EXPENSE_CATEGORIES: readonly ["food", "transport", "shopping", "entertainment", "housing", "healthcare", "education", "travel", "other"];
|
|
37
|
+
/**
|
|
38
|
+
* 判断账单类型
|
|
39
|
+
*/
|
|
40
|
+
export declare function categorizeFinance(amount: number, type?: string): FinanceType;
|
|
41
|
+
/**
|
|
42
|
+
* 获取默认分类
|
|
43
|
+
*/
|
|
44
|
+
export declare function getDefaultCategory(type: FinanceType): string;
|
|
45
|
+
/**
|
|
46
|
+
* 验证分类是否有效
|
|
47
|
+
*/
|
|
48
|
+
export declare function isValidCategory(type: FinanceType, category: string): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* 计算账户余额
|
|
51
|
+
*/
|
|
52
|
+
export declare function calculateBalance(items: FinanceItem[]): number;
|
|
53
|
+
/**
|
|
54
|
+
* 计算账单统计
|
|
55
|
+
*/
|
|
56
|
+
export declare function calculateFinanceStats(items: FinanceItem[]): FinanceStats;
|
|
57
|
+
/**
|
|
58
|
+
* 格式化金额
|
|
59
|
+
* @param amount 金额
|
|
60
|
+
* @param currency 货币符号,默认 ¥
|
|
61
|
+
* @param showSign 是否显示正负号,默认 false
|
|
62
|
+
*/
|
|
63
|
+
export declare function formatAmount(amount: number, currency?: string, showSign?: boolean): string;
|
|
64
|
+
/**
|
|
65
|
+
* 解析金额字符串
|
|
66
|
+
*/
|
|
67
|
+
export declare function parseAmount(amountStr: string): number;
|
|
68
|
+
/**
|
|
69
|
+
* 判断是否为有效金额
|
|
70
|
+
*/
|
|
71
|
+
export declare function isValidAmount(amount: number): boolean;
|
|
72
|
+
/**
|
|
73
|
+
* 计算日均支出
|
|
74
|
+
*/
|
|
75
|
+
export declare function calculateDailyAverage(expense: number, days: number): number;
|
|
76
|
+
/**
|
|
77
|
+
* 计算月度预算剩余
|
|
78
|
+
*/
|
|
79
|
+
export declare function calculateBudgetRemaining(totalBudget: number, spent: number): number;
|
|
80
|
+
//# sourceMappingURL=finance.model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finance.model.d.ts","sourceRoot":"","sources":["../../src/utils/finance.model.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE/C,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjE;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,8EAOpB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,kBAAkB,sHAUrB,CAAC;AAEX;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAM5E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAE5D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAG5E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,CAQ7D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,YAAY,CAwBxE;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,MAAY,EACtB,QAAQ,GAAE,OAAe,GACxB,MAAM,CASR;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAOrD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAErD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAG3E;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,GACZ,MAAM,CAER"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Finance Model Utilities
|
|
4
|
+
* 包含收支分类、账户余额计算、金额格式化等功能
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.EXPENSE_CATEGORIES = exports.INCOME_CATEGORIES = void 0;
|
|
8
|
+
exports.categorizeFinance = categorizeFinance;
|
|
9
|
+
exports.getDefaultCategory = getDefaultCategory;
|
|
10
|
+
exports.isValidCategory = isValidCategory;
|
|
11
|
+
exports.calculateBalance = calculateBalance;
|
|
12
|
+
exports.calculateFinanceStats = calculateFinanceStats;
|
|
13
|
+
exports.formatAmount = formatAmount;
|
|
14
|
+
exports.parseAmount = parseAmount;
|
|
15
|
+
exports.isValidAmount = isValidAmount;
|
|
16
|
+
exports.calculateDailyAverage = calculateDailyAverage;
|
|
17
|
+
exports.calculateBudgetRemaining = calculateBudgetRemaining;
|
|
18
|
+
/**
|
|
19
|
+
* 收入分类
|
|
20
|
+
*/
|
|
21
|
+
exports.INCOME_CATEGORIES = [
|
|
22
|
+
'salary',
|
|
23
|
+
'bonus',
|
|
24
|
+
'investment',
|
|
25
|
+
'gift',
|
|
26
|
+
'refund',
|
|
27
|
+
'other_income',
|
|
28
|
+
];
|
|
29
|
+
/**
|
|
30
|
+
* 支出分类
|
|
31
|
+
*/
|
|
32
|
+
exports.EXPENSE_CATEGORIES = [
|
|
33
|
+
'food',
|
|
34
|
+
'transport',
|
|
35
|
+
'shopping',
|
|
36
|
+
'entertainment',
|
|
37
|
+
'housing',
|
|
38
|
+
'healthcare',
|
|
39
|
+
'education',
|
|
40
|
+
'travel',
|
|
41
|
+
'other',
|
|
42
|
+
];
|
|
43
|
+
/**
|
|
44
|
+
* 判断账单类型
|
|
45
|
+
*/
|
|
46
|
+
function categorizeFinance(amount, type) {
|
|
47
|
+
if (type === 'income' || type === 'expense') {
|
|
48
|
+
return type;
|
|
49
|
+
}
|
|
50
|
+
// 根据金额正负判断
|
|
51
|
+
return amount >= 0 ? 'income' : 'expense';
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* 获取默认分类
|
|
55
|
+
*/
|
|
56
|
+
function getDefaultCategory(type) {
|
|
57
|
+
return type === 'income' ? 'other_income' : 'other';
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* 验证分类是否有效
|
|
61
|
+
*/
|
|
62
|
+
function isValidCategory(type, category) {
|
|
63
|
+
const categories = type === 'income' ? exports.INCOME_CATEGORIES : exports.EXPENSE_CATEGORIES;
|
|
64
|
+
return categories.some(c => c === category);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* 计算账户余额
|
|
68
|
+
*/
|
|
69
|
+
function calculateBalance(items) {
|
|
70
|
+
return items.reduce((balance, item) => {
|
|
71
|
+
if (item.type === 'income') {
|
|
72
|
+
return balance + item.amount;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
return balance - item.amount;
|
|
76
|
+
}
|
|
77
|
+
}, 0);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* 计算账单统计
|
|
81
|
+
*/
|
|
82
|
+
function calculateFinanceStats(items) {
|
|
83
|
+
const stats = {
|
|
84
|
+
totalIncome: 0,
|
|
85
|
+
totalExpense: 0,
|
|
86
|
+
netBalance: 0,
|
|
87
|
+
byCategory: {},
|
|
88
|
+
};
|
|
89
|
+
for (const item of items) {
|
|
90
|
+
if (!stats.byCategory[item.category]) {
|
|
91
|
+
stats.byCategory[item.category] = { income: 0, expense: 0 };
|
|
92
|
+
}
|
|
93
|
+
if (item.type === 'income') {
|
|
94
|
+
stats.totalIncome += item.amount;
|
|
95
|
+
stats.byCategory[item.category].income += item.amount;
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
stats.totalExpense += item.amount;
|
|
99
|
+
stats.byCategory[item.category].expense += item.amount;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
stats.netBalance = stats.totalIncome - stats.totalExpense;
|
|
103
|
+
return stats;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* 格式化金额
|
|
107
|
+
* @param amount 金额
|
|
108
|
+
* @param currency 货币符号,默认 ¥
|
|
109
|
+
* @param showSign 是否显示正负号,默认 false
|
|
110
|
+
*/
|
|
111
|
+
function formatAmount(amount, currency = '¥', showSign = false) {
|
|
112
|
+
const formatted = Math.abs(amount).toFixed(2);
|
|
113
|
+
const sign = showSign ? (amount >= 0 ? '+' : '-') : '';
|
|
114
|
+
// 格式化千分位
|
|
115
|
+
const parts = formatted.split('.');
|
|
116
|
+
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',');
|
|
117
|
+
return `${sign}${currency}${parts.join('.')}`;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* 解析金额字符串
|
|
121
|
+
*/
|
|
122
|
+
function parseAmount(amountStr) {
|
|
123
|
+
// 移除货币符号和千分位逗号
|
|
124
|
+
const cleaned = amountStr
|
|
125
|
+
.replace(/[¥$,]/g, '')
|
|
126
|
+
.trim();
|
|
127
|
+
const num = parseFloat(cleaned);
|
|
128
|
+
return isNaN(num) ? 0 : num;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* 判断是否为有效金额
|
|
132
|
+
*/
|
|
133
|
+
function isValidAmount(amount) {
|
|
134
|
+
return !isNaN(amount) && isFinite(amount) && amount !== 0;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* 计算日均支出
|
|
138
|
+
*/
|
|
139
|
+
function calculateDailyAverage(expense, days) {
|
|
140
|
+
if (days <= 0)
|
|
141
|
+
return 0;
|
|
142
|
+
return expense / days;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* 计算月度预算剩余
|
|
146
|
+
*/
|
|
147
|
+
function calculateBudgetRemaining(totalBudget, spent) {
|
|
148
|
+
return totalBudget - spent;
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=finance.model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finance.model.js","sourceRoot":"","sources":["../../src/utils/finance.model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 全局输出格式化工具
|
|
3
|
+
* 支持 --json / --quiet / --dry-run 全局参数
|
|
4
|
+
*/
|
|
5
|
+
export declare let globalJsonFlag: boolean;
|
|
6
|
+
export declare let globalQuietFlag: boolean;
|
|
7
|
+
export declare let globalDryRunFlag: boolean;
|
|
8
|
+
export declare function setGlobalFlags(args: {
|
|
9
|
+
json?: boolean;
|
|
10
|
+
quiet?: boolean;
|
|
11
|
+
dryRun?: boolean;
|
|
12
|
+
}): void;
|
|
13
|
+
/**
|
|
14
|
+
* 统一输出函数
|
|
15
|
+
*/
|
|
16
|
+
export declare function output(data: any, options?: {
|
|
17
|
+
quiet?: boolean;
|
|
18
|
+
}): void;
|
|
19
|
+
/**
|
|
20
|
+
* 错误输出
|
|
21
|
+
*/
|
|
22
|
+
export declare function outputError(message: string, ...args: any[]): void;
|
|
23
|
+
/**
|
|
24
|
+
* 成功输出
|
|
25
|
+
*/
|
|
26
|
+
export declare function outputSuccess(message: string, ...args: any[]): void;
|
|
27
|
+
export interface LoadingInstance {
|
|
28
|
+
start: () => void;
|
|
29
|
+
succeed: (text?: string) => void;
|
|
30
|
+
fail: (text?: string) => void;
|
|
31
|
+
stop: () => void;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* 创建 Loading 实例(简单实现,兼容 CJS)
|
|
35
|
+
*/
|
|
36
|
+
export declare function createLoading(text: string): LoadingInstance;
|
|
37
|
+
/**
|
|
38
|
+
* Dry-run 检查,如果处于预览模式则输出并返回 true
|
|
39
|
+
*/
|
|
40
|
+
export declare function isDryRun(): boolean;
|
|
41
|
+
export declare function dryRunLog(action: string, details?: any): void;
|
|
42
|
+
//# sourceMappingURL=output.d.ts.map
|