smart-admin-web 10.10.1 → 10.12.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.
Files changed (43) hide show
  1. package/dist/api/index.d.ts +52 -1
  2. package/dist/api/index.js +151 -84
  3. package/dist/api/index.js.map +1 -1
  4. package/dist/api/schema.d.ts +936 -15
  5. package/dist/assets/icons/ph-subset.json.js +7 -7
  6. package/dist/index.js +278 -274
  7. package/dist/lib/runtime.js +1 -1
  8. package/dist/locales/en-US.d.ts +144 -0
  9. package/dist/locales/en-US.js +146 -0
  10. package/dist/locales/en-US.js.map +1 -1
  11. package/dist/locales/zh-CN.d.ts +144 -0
  12. package/dist/locales/zh-CN.js +146 -0
  13. package/dist/locales/zh-CN.js.map +1 -1
  14. package/dist/router/viewRegistry.js +1 -1
  15. package/dist/router/viewRegistry.js.map +1 -1
  16. package/dist/style.css +1 -1
  17. package/dist/types/api.d.ts +166 -0
  18. package/dist/types/api.js +12 -9
  19. package/dist/types/api.js.map +1 -1
  20. package/dist/views/system/ai-model/components/ProviderCard.vue.d.ts +13 -0
  21. package/dist/views/system/ai-model/components/ProviderCard.vue.js +8 -0
  22. package/dist/views/system/ai-model/components/ProviderCard.vue.js.map +1 -0
  23. package/dist/views/system/ai-model/components/ProviderCard2.vue.js +230 -0
  24. package/dist/views/system/ai-model/components/ProviderCard2.vue.js.map +1 -0
  25. package/dist/views/system/ai-model/components/ProviderForm.vue.d.ts +18 -0
  26. package/dist/views/system/ai-model/components/ProviderForm.vue.js +8 -0
  27. package/dist/views/system/ai-model/components/ProviderForm.vue.js.map +1 -0
  28. package/dist/views/system/ai-model/components/ProviderForm2.vue.js +507 -0
  29. package/dist/views/system/ai-model/components/ProviderForm2.vue.js.map +1 -0
  30. package/dist/views/system/ai-model/index.vue.d.ts +3 -0
  31. package/dist/views/system/ai-model/index.vue.js +8 -0
  32. package/dist/views/system/ai-model/index.vue.js.map +1 -0
  33. package/dist/views/system/ai-model/index2.vue.js +134 -0
  34. package/dist/views/system/ai-model/index2.vue.js.map +1 -0
  35. package/dist/views/system/ai-model/presets.d.ts +14 -0
  36. package/dist/views/system/ai-model/presets.js +22 -0
  37. package/dist/views/system/ai-model/presets.js.map +1 -0
  38. package/dist/views/system/ai-usage/index.vue.d.ts +3 -0
  39. package/dist/views/system/ai-usage/index.vue.js +8 -0
  40. package/dist/views/system/ai-usage/index.vue.js.map +1 -0
  41. package/dist/views/system/ai-usage/index2.vue.js +423 -0
  42. package/dist/views/system/ai-usage/index2.vue.js.map +1 -0
  43. package/package.json +2 -2
@@ -4,6 +4,161 @@
4
4
  */
5
5
 
6
6
  export interface paths {
7
+ "/api/v1/sys/ai/provider/page": {
8
+ parameters: {
9
+ query?: never;
10
+ header?: never;
11
+ path?: never;
12
+ cookie?: never;
13
+ };
14
+ /** 分页查询 AI 厂商(含模型清单) */
15
+ get: operations["AiProvider_Page"];
16
+ put?: never;
17
+ post?: never;
18
+ delete?: never;
19
+ options?: never;
20
+ head?: never;
21
+ patch?: never;
22
+ trace?: never;
23
+ };
24
+ "/api/v1/sys/ai/provider/{id}": {
25
+ parameters: {
26
+ query?: never;
27
+ header?: never;
28
+ path?: never;
29
+ cookie?: never;
30
+ };
31
+ /** 厂商详情(含模型清单) */
32
+ get: operations["AiProvider_Get"];
33
+ /** 更新 AI 厂商(不含厂商预设/协议,创建后不可改) */
34
+ put: operations["AiProvider_Update"];
35
+ post?: never;
36
+ /** 软删除 AI 厂商(级联软删其下模型) */
37
+ delete: operations["AiProvider_Delete"];
38
+ options?: never;
39
+ head?: never;
40
+ patch?: never;
41
+ trace?: never;
42
+ };
43
+ "/api/v1/sys/ai/provider/presets": {
44
+ parameters: {
45
+ query?: never;
46
+ header?: never;
47
+ path?: never;
48
+ cookie?: never;
49
+ };
50
+ /** 厂商预置清单(协议/BaseUrl/鉴权方式/起步模型),新增页选预设时展示 */
51
+ get: operations["AiProvider_Presets"];
52
+ put?: never;
53
+ post?: never;
54
+ delete?: never;
55
+ options?: never;
56
+ head?: never;
57
+ patch?: never;
58
+ trace?: never;
59
+ };
60
+ "/api/v1/sys/ai/provider/add": {
61
+ parameters: {
62
+ query?: never;
63
+ header?: never;
64
+ path?: never;
65
+ cookie?: never;
66
+ };
67
+ get?: never;
68
+ put?: never;
69
+ /** 新增 AI 厂商,返回新 Id */
70
+ post: operations["AiProvider_Add"];
71
+ delete?: never;
72
+ options?: never;
73
+ head?: never;
74
+ patch?: never;
75
+ trace?: never;
76
+ };
77
+ "/api/v1/sys/ai/provider/{id}/enabled": {
78
+ parameters: {
79
+ query?: never;
80
+ header?: never;
81
+ path?: never;
82
+ cookie?: never;
83
+ };
84
+ get?: never;
85
+ /** 启停 AI 厂商(启用时若未配置 Key 会被拒绝) */
86
+ put: operations["AiProvider_SetEnabled"];
87
+ post?: never;
88
+ delete?: never;
89
+ options?: never;
90
+ head?: never;
91
+ patch?: never;
92
+ trace?: never;
93
+ };
94
+ "/api/v1/sys/ai/provider/{id}/test": {
95
+ parameters: {
96
+ query?: never;
97
+ header?: never;
98
+ path?: never;
99
+ cookie?: never;
100
+ };
101
+ get?: never;
102
+ put?: never;
103
+ /** 测试连接:取该厂商默认/首个可用模型发一条极短对话,失败原因在返回体里展示,不抛异常 */
104
+ post: operations["AiProvider_Test"];
105
+ delete?: never;
106
+ options?: never;
107
+ head?: never;
108
+ patch?: never;
109
+ trace?: never;
110
+ };
111
+ "/api/v1/sys/ai/usage/summary": {
112
+ parameters: {
113
+ query?: never;
114
+ header?: never;
115
+ path?: never;
116
+ cookie?: never;
117
+ };
118
+ /** 用量汇总:时间区间内的总计 + 按厂商/模型/场景/用户维度的分组聚合 */
119
+ get: operations["AiUsage_Summary"];
120
+ put?: never;
121
+ post?: never;
122
+ delete?: never;
123
+ options?: never;
124
+ head?: never;
125
+ patch?: never;
126
+ trace?: never;
127
+ };
128
+ "/api/v1/sys/ai/usage/trend": {
129
+ parameters: {
130
+ query?: never;
131
+ header?: never;
132
+ path?: never;
133
+ cookie?: never;
134
+ };
135
+ /** 用量趋势:按天聚合的 Token/调用数,区间内无数据的日期补 0 */
136
+ get: operations["AiUsage_Trend"];
137
+ put?: never;
138
+ post?: never;
139
+ delete?: never;
140
+ options?: never;
141
+ head?: never;
142
+ patch?: never;
143
+ trace?: never;
144
+ };
145
+ "/api/v1/sys/ai/usage/page": {
146
+ parameters: {
147
+ query?: never;
148
+ header?: never;
149
+ path?: never;
150
+ cookie?: never;
151
+ };
152
+ /** 用量明细分页(不聚合) */
153
+ get: operations["AiUsage_Page"];
154
+ put?: never;
155
+ post?: never;
156
+ delete?: never;
157
+ options?: never;
158
+ head?: never;
159
+ patch?: never;
160
+ trace?: never;
161
+ };
7
162
  "/api/v1/auth/captcha": {
8
163
  parameters: {
9
164
  query?: never;
@@ -2383,6 +2538,188 @@ export interface components {
2383
2538
  /** @description 实际生效的初始口令明文(管理员显式指定的、或系统生成的) */
2384
2539
  initialPassword: string;
2385
2540
  };
2541
+ /**
2542
+ * @description AI 模型入参(厂商新增/编辑时随模型清单整体提交)。long? AiModelInput.Id 为 `null` 表示新增该行;
2543
+ * 有值表示更新该行;厂商原有模型行中不在入参列表里的按软删处理(见 AiProviderService)。
2544
+ */
2545
+ AiModelInput: {
2546
+ /** Format: int64 */
2547
+ id: null | number | string;
2548
+ name: string;
2549
+ displayName: string;
2550
+ enabled: boolean;
2551
+ isDefault: boolean;
2552
+ /** Format: int32 */
2553
+ contextWindow: null | number | string;
2554
+ /** Format: double */
2555
+ inputPrice: null | number | string;
2556
+ /** Format: double */
2557
+ outputPrice: null | number | string;
2558
+ };
2559
+ /** @description AI 厂商预置里的一个起步模型 */
2560
+ AiModelPreset: {
2561
+ name: string;
2562
+ displayName: string;
2563
+ /** Format: int32 */
2564
+ contextWindow?: null | number | string;
2565
+ };
2566
+ /** @description AI 模型出参(挂在某个厂商下)。 */
2567
+ AiModelView: {
2568
+ /** Format: int64 */
2569
+ id: number | string;
2570
+ name: string;
2571
+ displayName: string;
2572
+ enabled: boolean;
2573
+ isDefault: boolean;
2574
+ /** Format: int32 */
2575
+ contextWindow: null | number | string;
2576
+ /** Format: double */
2577
+ inputPrice: null | number | string;
2578
+ /** Format: double */
2579
+ outputPrice: null | number | string;
2580
+ };
2581
+ /** @description AI 厂商新增入参。string? AiProviderAddInput.ApiKey 为空表示不配置 Key(string AiProviderAddInput.AuthScheme != none 时不能启用)。 */
2582
+ AiProviderAddInput: {
2583
+ code: string;
2584
+ name: string;
2585
+ preset: string;
2586
+ baseUrl: string;
2587
+ authScheme: string;
2588
+ apiKey: null | string;
2589
+ /** Format: int32 */
2590
+ sort: number | string;
2591
+ remark: null | string;
2592
+ models: components["schemas"]["AiModelInput"][];
2593
+ };
2594
+ /** @description AI 厂商预置项:协议 / Base URL / 鉴权方式由预设带出,运维只填 Key(见 docs/plans/ai-management.md §6)。 */
2595
+ AiProviderPreset: {
2596
+ code: string;
2597
+ name: string;
2598
+ protocol: string;
2599
+ baseUrl: string;
2600
+ authScheme: string;
2601
+ models: components["schemas"]["AiModelPreset"][];
2602
+ };
2603
+ /**
2604
+ * @description AI 厂商编辑入参。<b>没有</b>`Preset`/`Protocol` 字段——这两项创建后不可改,入参类型层面就不给改的机会。
2605
+ * string? AiProviderUpdateInput.ApiKey 为 `null`/空串表示不改动原有 Key;非空则重新加密覆盖。
2606
+ */
2607
+ AiProviderUpdateInput: {
2608
+ code: string;
2609
+ name: string;
2610
+ baseUrl: string;
2611
+ authScheme: string;
2612
+ apiKey: null | string;
2613
+ /** Format: int32 */
2614
+ sort: number | string;
2615
+ remark: null | string;
2616
+ models: components["schemas"]["AiModelInput"][];
2617
+ };
2618
+ /**
2619
+ * @description AI 厂商出参。<b>不含</b>明文 Key——只有 string? AiProviderView.ApiKeyHint(尾四位)+ bool AiProviderView.HasApiKey,
2620
+ * 明文只在保存那一次经过内存(见 AiProviderService)。
2621
+ */
2622
+ AiProviderView: {
2623
+ /** Format: int64 */
2624
+ id: number | string;
2625
+ code: string;
2626
+ name: string;
2627
+ preset: string;
2628
+ protocol: string;
2629
+ baseUrl: string;
2630
+ authScheme: string;
2631
+ apiKeyHint: null | string;
2632
+ hasApiKey: boolean;
2633
+ enabled: boolean;
2634
+ /** Format: int32 */
2635
+ sort: number | string;
2636
+ remark: null | string;
2637
+ models: components["schemas"]["AiModelView"][];
2638
+ };
2639
+ /**
2640
+ * @description 测试连接结果。bool AiTestResult.Ok 为 `false` 时 string? AiTestResult.Error 携带排障文案——
2641
+ * 这是给运维在「测试连接」按钮下直接展示的诊断信息,不是走 ErrorCode 信封的业务错误,
2642
+ * 所以不受"错误一律用数字 ErrorCode"的约束(Task&lt;AiTestResult&gt; AiProviderService.TestAsync(long id) 从不让异常冒泡出这个方法)。
2643
+ */
2644
+ AiTestResult: {
2645
+ ok: boolean;
2646
+ model: null | string;
2647
+ /** Format: int32 */
2648
+ latencyMs: number | string;
2649
+ usage: null | components["schemas"]["AiUsage"];
2650
+ error: null | string;
2651
+ };
2652
+ /** @description Token 用量 */
2653
+ AiUsage: {
2654
+ /** Format: int32 */
2655
+ inputTokens: number | string;
2656
+ /** Format: int32 */
2657
+ outputTokens: number | string;
2658
+ source: components["schemas"]["AiUsageSource"];
2659
+ /**
2660
+ * Format: int32
2661
+ * @description 输入 + 输出
2662
+ */
2663
+ totalTokens?: number | string;
2664
+ };
2665
+ /** @description 用量汇总的分组维度。 */
2666
+ AiUsageGroupBy: number;
2667
+ /**
2668
+ * @description 某个分组维度下一行聚合数据。`Key` 是分组键的原始值(厂商编码/模型名/场景标签,或用户 Id 的字符串形式;
2669
+ * 用户为空时为 `"0"`);`Label` 是展示名,仅 AiUsageGroupBy.User 分组尝试回填用户名,查不到或其它维度为 null;
2670
+ * `SharePercent` 是该组 (InputTokens+OutputTokens) 占总 Token 的百分比,0~100,总量为 0 时给 0。
2671
+ */
2672
+ AiUsageGroupRow: {
2673
+ key: string;
2674
+ label: null | string;
2675
+ /** Format: int64 */
2676
+ inputTokens: number | string;
2677
+ /** Format: int64 */
2678
+ outputTokens: number | string;
2679
+ /** Format: int64 */
2680
+ callCount: number | string;
2681
+ /** Format: double */
2682
+ sharePercent: number | string;
2683
+ /** Format: double */
2684
+ avgLatencyMs: number | string;
2685
+ };
2686
+ /** @description 用量数据的来源 */
2687
+ AiUsageSource: number;
2688
+ /** @description 用量汇总结果:总计 + 按 AiUsageGroupBy AiUsageSummaryInput.GroupBy 维度的分组列表。 */
2689
+ AiUsageSummary: {
2690
+ totals: components["schemas"]["AiUsageTotals"];
2691
+ groups: components["schemas"]["AiUsageGroupRow"][];
2692
+ };
2693
+ /**
2694
+ * @description 时间区间内的用量总计。`FailuresByErrorCode`:失败按内核错误码分类计数,
2695
+ * int? SysAiUsageLog.ErrorCode 为 null 的失败行归到约定 key `0`。
2696
+ */
2697
+ AiUsageTotals: {
2698
+ /** Format: int64 */
2699
+ totalTokens: number | string;
2700
+ /** Format: int64 */
2701
+ inputTokens: number | string;
2702
+ /** Format: int64 */
2703
+ outputTokens: number | string;
2704
+ /** Format: int64 */
2705
+ callCount: number | string;
2706
+ /** Format: int64 */
2707
+ failureCount: number | string;
2708
+ failuresByErrorCode: {
2709
+ [key: string]: number | string;
2710
+ };
2711
+ };
2712
+ /** @description 按天聚合的一个趋势点。区间内没有数据的日期也会补 0(供前端画连续折线)。 */
2713
+ AiUsageTrendPoint: {
2714
+ /** Format: date */
2715
+ date: string;
2716
+ /** Format: int64 */
2717
+ inputTokens: number | string;
2718
+ /** Format: int64 */
2719
+ outputTokens: number | string;
2720
+ /** Format: int64 */
2721
+ callCount: number | string;
2722
+ };
2386
2723
  /**
2387
2724
  * @description 批量删除入参:目标 Id 集合。各模块的 `POST .../batch-delete` 端点统一收此形状,
2388
2725
  * 服务层 `DeleteBatchAsync` 复用单删的守卫/软删/失效逻辑逐个处理。空集合视为无操作。
@@ -2993,12 +3330,12 @@ export interface components {
2993
3330
  mustChangePassword?: boolean;
2994
3331
  /**
2995
3332
  * @description 会话交付模式。`body`=刷新令牌在 JSON 体(默认);
2996
- * `cookie`=刷新令牌在 HttpOnly Cookie。null 表示未声明(旧客户端可忽略)。
3333
+ * `cookie`=刷新令牌在 HttpOnly Cookie。null 表示未声明(不认该字段的客户端忽略即可)。
2997
3334
  */
2998
3335
  sessionMode?: null | string;
2999
3336
  /**
3000
3337
  * @description 是否要求双提交 CSRF(`X-Smart-CSRF` + `smart_csrf` Cookie)。
3001
- * Cookie 会话模式为 true;默认模式为 null/false。旧客户端可忽略。
3338
+ * Cookie 会话模式为 true;默认模式为 null/false。不认该字段的客户端忽略即可。
3002
3339
  */
3003
3340
  csrfRequired?: null | boolean;
3004
3341
  /** @description 是否超管;前端据此在 profile 接口故障时仍能正确 fail-open v-auth。 */
@@ -3226,6 +3563,34 @@ export interface components {
3226
3563
  /** @description 是否启用 */
3227
3564
  enabled?: boolean;
3228
3565
  };
3566
+ /**
3567
+ * @description 分页结果模型——所有分页查询的统一返回。ORM 中立(放 Core),
3568
+ * SqlSugar 侧的 `ToPagedListAsync` 扩展负责把查询物化成它。
3569
+ */
3570
+ PagedListOfAiProviderView: {
3571
+ /**
3572
+ * Format: int32
3573
+ * @description 当前页码(从 1 起)
3574
+ */
3575
+ current?: number | string;
3576
+ /**
3577
+ * Format: int32
3578
+ * @description 每页条数
3579
+ */
3580
+ size?: number | string;
3581
+ /**
3582
+ * Format: int32
3583
+ * @description 总记录数
3584
+ */
3585
+ total?: number | string;
3586
+ /**
3587
+ * Format: int32
3588
+ * @description 总页数(向上取整;Size 为 0 时为 0)
3589
+ */
3590
+ pages?: number | string;
3591
+ /** @description 当前页数据 */
3592
+ items?: components["schemas"]["AiProviderView"][];
3593
+ };
3229
3594
  /**
3230
3595
  * @description 分页结果模型——所有分页查询的统一返回。ORM 中立(放 Core),
3231
3596
  * SqlSugar 侧的 `ToPagedListAsync` 扩展负责把查询物化成它。
@@ -3310,6 +3675,34 @@ export interface components {
3310
3675
  /** @description 当前页数据 */
3311
3676
  items?: components["schemas"]["RecycleBinItem"][];
3312
3677
  };
3678
+ /**
3679
+ * @description 分页结果模型——所有分页查询的统一返回。ORM 中立(放 Core),
3680
+ * SqlSugar 侧的 `ToPagedListAsync` 扩展负责把查询物化成它。
3681
+ */
3682
+ PagedListOfSysAiUsageLog: {
3683
+ /**
3684
+ * Format: int32
3685
+ * @description 当前页码(从 1 起)
3686
+ */
3687
+ current?: number | string;
3688
+ /**
3689
+ * Format: int32
3690
+ * @description 每页条数
3691
+ */
3692
+ size?: number | string;
3693
+ /**
3694
+ * Format: int32
3695
+ * @description 总记录数
3696
+ */
3697
+ total?: number | string;
3698
+ /**
3699
+ * Format: int32
3700
+ * @description 总页数(向上取整;Size 为 0 时为 0)
3701
+ */
3702
+ pages?: number | string;
3703
+ /** @description 当前页数据 */
3704
+ items?: components["schemas"]["SysAiUsageLog"][];
3705
+ };
3313
3706
  /**
3314
3707
  * @description 分页结果模型——所有分页查询的统一返回。ORM 中立(放 Core),
3315
3708
  * SqlSugar 侧的 `ToPagedListAsync` 扩展负责把查询物化成它。
@@ -3792,7 +4185,7 @@ export interface components {
3792
4185
  * 成功:`{ "code": 0, "msgKey": "common.success", "data": {...} }`<br />
3793
4186
  * 失败:`{ "code": 40001, "msgKey": "error.auth.passwordWrong", "args": {}, "message": "...", "data": null }`</example>
3794
4187
  */
3795
- ResultOfboolean: {
4188
+ ResultOfAiProviderView: {
3796
4189
  /**
3797
4190
  * Format: int32
3798
4191
  * @description 业务码,0 为成功,其余见 ErrorCode 分段
@@ -3804,8 +4197,7 @@ export interface components {
3804
4197
  args?: null | Record<string, never>;
3805
4198
  /** @description 兜底文案(仅降级用途,浏览器端一律走 MsgKey 翻译) */
3806
4199
  message?: null | string;
3807
- /** @description 业务数据载荷 */
3808
- data?: boolean;
4200
+ data?: null | components["schemas"]["AiProviderView"];
3809
4201
  };
3810
4202
  /**
3811
4203
  * @description 统一返回模型——所有接口的响应外壳。
@@ -3814,7 +4206,7 @@ export interface components {
3814
4206
  * 成功:`{ "code": 0, "msgKey": "common.success", "data": {...} }`<br />
3815
4207
  * 失败:`{ "code": 40001, "msgKey": "error.auth.passwordWrong", "args": {}, "message": "...", "data": null }`</example>
3816
4208
  */
3817
- ResultOfCaptchaOutput: {
4209
+ ResultOfAiTestResult: {
3818
4210
  /**
3819
4211
  * Format: int32
3820
4212
  * @description 业务码,0 为成功,其余见 ErrorCode 分段
@@ -3826,7 +4218,7 @@ export interface components {
3826
4218
  args?: null | Record<string, never>;
3827
4219
  /** @description 兜底文案(仅降级用途,浏览器端一律走 MsgKey 翻译) */
3828
4220
  message?: null | string;
3829
- data?: null | components["schemas"]["CaptchaOutput"];
4221
+ data?: null | components["schemas"]["AiTestResult"];
3830
4222
  };
3831
4223
  /**
3832
4224
  * @description 统一返回模型——所有接口的响应外壳。
@@ -3835,7 +4227,7 @@ export interface components {
3835
4227
  * 成功:`{ "code": 0, "msgKey": "common.success", "data": {...} }`<br />
3836
4228
  * 失败:`{ "code": 40001, "msgKey": "error.auth.passwordWrong", "args": {}, "message": "...", "data": null }`</example>
3837
4229
  */
3838
- ResultOfChunkInitOutput: {
4230
+ ResultOfAiUsageSummary: {
3839
4231
  /**
3840
4232
  * Format: int32
3841
4233
  * @description 业务码,0 为成功,其余见 ErrorCode 分段
@@ -3847,7 +4239,7 @@ export interface components {
3847
4239
  args?: null | Record<string, never>;
3848
4240
  /** @description 兜底文案(仅降级用途,浏览器端一律走 MsgKey 翻译) */
3849
4241
  message?: null | string;
3850
- data?: null | components["schemas"]["ChunkInitOutput"];
4242
+ data?: null | components["schemas"]["AiUsageSummary"];
3851
4243
  };
3852
4244
  /**
3853
4245
  * @description 统一返回模型——所有接口的响应外壳。
@@ -3856,7 +4248,71 @@ export interface components {
3856
4248
  * 成功:`{ "code": 0, "msgKey": "common.success", "data": {...} }`<br />
3857
4249
  * 失败:`{ "code": 40001, "msgKey": "error.auth.passwordWrong", "args": {}, "message": "...", "data": null }`</example>
3858
4250
  */
3859
- ResultOfCronPreviewOutput: {
4251
+ ResultOfboolean: {
4252
+ /**
4253
+ * Format: int32
4254
+ * @description 业务码,0 为成功,其余见 ErrorCode 分段
4255
+ */
4256
+ code?: number | string;
4257
+ /** @description 语义键(前端 i18n 语言包的键),如 `error.auth.passwordWrong` */
4258
+ msgKey?: null | string;
4259
+ /** @description 文案插值参数,与语言包模板占位符对应;无参数时为 null(序列化省略) */
4260
+ args?: null | Record<string, never>;
4261
+ /** @description 兜底文案(仅降级用途,浏览器端一律走 MsgKey 翻译) */
4262
+ message?: null | string;
4263
+ /** @description 业务数据载荷 */
4264
+ data?: boolean;
4265
+ };
4266
+ /**
4267
+ * @description 统一返回模型——所有接口的响应外壳。
4268
+ * 字段分工:Code 给机器判断;MsgKey+Args 给前端 i18n 渲染;
4269
+ * Message 是后端兜底文案(非浏览器调用方降级用,浏览器端应忽略它);Data 为业务载荷。<example>
4270
+ * 成功:`{ "code": 0, "msgKey": "common.success", "data": {...} }`<br />
4271
+ * 失败:`{ "code": 40001, "msgKey": "error.auth.passwordWrong", "args": {}, "message": "...", "data": null }`</example>
4272
+ */
4273
+ ResultOfCaptchaOutput: {
4274
+ /**
4275
+ * Format: int32
4276
+ * @description 业务码,0 为成功,其余见 ErrorCode 分段
4277
+ */
4278
+ code?: number | string;
4279
+ /** @description 语义键(前端 i18n 语言包的键),如 `error.auth.passwordWrong` */
4280
+ msgKey?: null | string;
4281
+ /** @description 文案插值参数,与语言包模板占位符对应;无参数时为 null(序列化省略) */
4282
+ args?: null | Record<string, never>;
4283
+ /** @description 兜底文案(仅降级用途,浏览器端一律走 MsgKey 翻译) */
4284
+ message?: null | string;
4285
+ data?: null | components["schemas"]["CaptchaOutput"];
4286
+ };
4287
+ /**
4288
+ * @description 统一返回模型——所有接口的响应外壳。
4289
+ * 字段分工:Code 给机器判断;MsgKey+Args 给前端 i18n 渲染;
4290
+ * Message 是后端兜底文案(非浏览器调用方降级用,浏览器端应忽略它);Data 为业务载荷。<example>
4291
+ * 成功:`{ "code": 0, "msgKey": "common.success", "data": {...} }`<br />
4292
+ * 失败:`{ "code": 40001, "msgKey": "error.auth.passwordWrong", "args": {}, "message": "...", "data": null }`</example>
4293
+ */
4294
+ ResultOfChunkInitOutput: {
4295
+ /**
4296
+ * Format: int32
4297
+ * @description 业务码,0 为成功,其余见 ErrorCode 分段
4298
+ */
4299
+ code?: number | string;
4300
+ /** @description 语义键(前端 i18n 语言包的键),如 `error.auth.passwordWrong` */
4301
+ msgKey?: null | string;
4302
+ /** @description 文案插值参数,与语言包模板占位符对应;无参数时为 null(序列化省略) */
4303
+ args?: null | Record<string, never>;
4304
+ /** @description 兜底文案(仅降级用途,浏览器端一律走 MsgKey 翻译) */
4305
+ message?: null | string;
4306
+ data?: null | components["schemas"]["ChunkInitOutput"];
4307
+ };
4308
+ /**
4309
+ * @description 统一返回模型——所有接口的响应外壳。
4310
+ * 字段分工:Code 给机器判断;MsgKey+Args 给前端 i18n 渲染;
4311
+ * Message 是后端兜底文案(非浏览器调用方降级用,浏览器端应忽略它);Data 为业务载荷。<example>
4312
+ * 成功:`{ "code": 0, "msgKey": "common.success", "data": {...} }`<br />
4313
+ * 失败:`{ "code": 40001, "msgKey": "error.auth.passwordWrong", "args": {}, "message": "...", "data": null }`</example>
4314
+ */
4315
+ ResultOfCronPreviewOutput: {
3860
4316
  /**
3861
4317
  * Format: int32
3862
4318
  * @description 业务码,0 为成功,其余见 ErrorCode 分段
@@ -4044,6 +4500,50 @@ export interface components {
4044
4500
  /** @description 业务数据载荷 */
4045
4501
  data?: null | string[];
4046
4502
  };
4503
+ /**
4504
+ * @description 统一返回模型——所有接口的响应外壳。
4505
+ * 字段分工:Code 给机器判断;MsgKey+Args 给前端 i18n 渲染;
4506
+ * Message 是后端兜底文案(非浏览器调用方降级用,浏览器端应忽略它);Data 为业务载荷。<example>
4507
+ * 成功:`{ "code": 0, "msgKey": "common.success", "data": {...} }`<br />
4508
+ * 失败:`{ "code": 40001, "msgKey": "error.auth.passwordWrong", "args": {}, "message": "...", "data": null }`</example>
4509
+ */
4510
+ ResultOfIReadOnlyListOfAiProviderPreset: {
4511
+ /**
4512
+ * Format: int32
4513
+ * @description 业务码,0 为成功,其余见 ErrorCode 分段
4514
+ */
4515
+ code?: number | string;
4516
+ /** @description 语义键(前端 i18n 语言包的键),如 `error.auth.passwordWrong` */
4517
+ msgKey?: null | string;
4518
+ /** @description 文案插值参数,与语言包模板占位符对应;无参数时为 null(序列化省略) */
4519
+ args?: null | Record<string, never>;
4520
+ /** @description 兜底文案(仅降级用途,浏览器端一律走 MsgKey 翻译) */
4521
+ message?: null | string;
4522
+ /** @description 业务数据载荷 */
4523
+ data?: null | components["schemas"]["AiProviderPreset"][];
4524
+ };
4525
+ /**
4526
+ * @description 统一返回模型——所有接口的响应外壳。
4527
+ * 字段分工:Code 给机器判断;MsgKey+Args 给前端 i18n 渲染;
4528
+ * Message 是后端兜底文案(非浏览器调用方降级用,浏览器端应忽略它);Data 为业务载荷。<example>
4529
+ * 成功:`{ "code": 0, "msgKey": "common.success", "data": {...} }`<br />
4530
+ * 失败:`{ "code": 40001, "msgKey": "error.auth.passwordWrong", "args": {}, "message": "...", "data": null }`</example>
4531
+ */
4532
+ ResultOfIReadOnlyListOfAiUsageTrendPoint: {
4533
+ /**
4534
+ * Format: int32
4535
+ * @description 业务码,0 为成功,其余见 ErrorCode 分段
4536
+ */
4537
+ code?: number | string;
4538
+ /** @description 语义键(前端 i18n 语言包的键),如 `error.auth.passwordWrong` */
4539
+ msgKey?: null | string;
4540
+ /** @description 文案插值参数,与语言包模板占位符对应;无参数时为 null(序列化省略) */
4541
+ args?: null | Record<string, never>;
4542
+ /** @description 兜底文案(仅降级用途,浏览器端一律走 MsgKey 翻译) */
4543
+ message?: null | string;
4544
+ /** @description 业务数据载荷 */
4545
+ data?: null | components["schemas"]["AiUsageTrendPoint"][];
4546
+ };
4047
4547
  /**
4048
4548
  * @description 统一返回模型——所有接口的响应外壳。
4049
4549
  * 字段分工:Code 给机器判断;MsgKey+Args 给前端 i18n 渲染;
@@ -4417,6 +4917,27 @@ export interface components {
4417
4917
  /** @description 业务数据载荷 */
4418
4918
  data?: unknown;
4419
4919
  };
4920
+ /**
4921
+ * @description 统一返回模型——所有接口的响应外壳。
4922
+ * 字段分工:Code 给机器判断;MsgKey+Args 给前端 i18n 渲染;
4923
+ * Message 是后端兜底文案(非浏览器调用方降级用,浏览器端应忽略它);Data 为业务载荷。<example>
4924
+ * 成功:`{ "code": 0, "msgKey": "common.success", "data": {...} }`<br />
4925
+ * 失败:`{ "code": 40001, "msgKey": "error.auth.passwordWrong", "args": {}, "message": "...", "data": null }`</example>
4926
+ */
4927
+ ResultOfPagedListOfAiProviderView: {
4928
+ /**
4929
+ * Format: int32
4930
+ * @description 业务码,0 为成功,其余见 ErrorCode 分段
4931
+ */
4932
+ code?: number | string;
4933
+ /** @description 语义键(前端 i18n 语言包的键),如 `error.auth.passwordWrong` */
4934
+ msgKey?: null | string;
4935
+ /** @description 文案插值参数,与语言包模板占位符对应;无参数时为 null(序列化省略) */
4936
+ args?: null | Record<string, never>;
4937
+ /** @description 兜底文案(仅降级用途,浏览器端一律走 MsgKey 翻译) */
4938
+ message?: null | string;
4939
+ data?: null | components["schemas"]["PagedListOfAiProviderView"];
4940
+ };
4420
4941
  /**
4421
4942
  * @description 统一返回模型——所有接口的响应外壳。
4422
4943
  * 字段分工:Code 给机器判断;MsgKey+Args 给前端 i18n 渲染;
@@ -4480,6 +5001,27 @@ export interface components {
4480
5001
  message?: null | string;
4481
5002
  data?: null | components["schemas"]["PagedListOfRecycleBinItem"];
4482
5003
  };
5004
+ /**
5005
+ * @description 统一返回模型——所有接口的响应外壳。
5006
+ * 字段分工:Code 给机器判断;MsgKey+Args 给前端 i18n 渲染;
5007
+ * Message 是后端兜底文案(非浏览器调用方降级用,浏览器端应忽略它);Data 为业务载荷。<example>
5008
+ * 成功:`{ "code": 0, "msgKey": "common.success", "data": {...} }`<br />
5009
+ * 失败:`{ "code": 40001, "msgKey": "error.auth.passwordWrong", "args": {}, "message": "...", "data": null }`</example>
5010
+ */
5011
+ ResultOfPagedListOfSysAiUsageLog: {
5012
+ /**
5013
+ * Format: int32
5014
+ * @description 业务码,0 为成功,其余见 ErrorCode 分段
5015
+ */
5016
+ code?: number | string;
5017
+ /** @description 语义键(前端 i18n 语言包的键),如 `error.auth.passwordWrong` */
5018
+ msgKey?: null | string;
5019
+ /** @description 文案插值参数,与语言包模板占位符对应;无参数时为 null(序列化省略) */
5020
+ args?: null | Record<string, never>;
5021
+ /** @description 兜底文案(仅降级用途,浏览器端一律走 MsgKey 翻译) */
5022
+ message?: null | string;
5023
+ data?: null | components["schemas"]["PagedListOfSysAiUsageLog"];
5024
+ };
4483
5025
  /**
4484
5026
  * @description 统一返回模型——所有接口的响应外壳。
4485
5027
  * 字段分工:Code 给机器判断;MsgKey+Args 给前端 i18n 渲染;
@@ -5174,7 +5716,7 @@ export interface components {
5174
5716
  copyright?: null | string;
5175
5717
  /** @description 版权链接(版权名的超链接;留空则纯文本) */
5176
5718
  copyrightUrl?: null | string;
5177
- /** @description 站点 Logo 图片地址(登录页品牌 logo;留空则前端回退内置矢量 logo) */
5719
+ /** @description 站点 Logo 图片地址(登录页、侧栏、顶栏、应用选择页统一显示;留空则前端回退内置矢量 logo) */
5178
5720
  logo?: null | string;
5179
5721
  /** @description 是否启用登录验证码(运行时配置驱动;前端据此决定登录页是否展示验证码)。 */
5180
5722
  captchaEnabled?: boolean;
@@ -5206,6 +5748,76 @@ export interface components {
5206
5748
  */
5207
5749
  resendSeconds?: number | string;
5208
5750
  };
5751
+ /**
5752
+ * @description AI 调用记录——只增、物理删(对齐 SysJobLog),按 string AiConfigKeys.KEY_USAGE_RETENTION_DAYS 定期清理。
5753
+ * <b>不记 prompt 与回复正文</b>:审批等业务内容属于业务数据,不进内核日志。
5754
+ */
5755
+ SysAiUsageLog: {
5756
+ /**
5757
+ * Format: int64
5758
+ * @description 厂商 Id
5759
+ */
5760
+ providerId?: number | string;
5761
+ /** @description 厂商编码快照(冗余;厂商删了也能读) */
5762
+ providerCode?: string;
5763
+ model?: string;
5764
+ /** @description 业务场景标签,如 approval.summary;测试连接固定 system.test */
5765
+ scene?: string;
5766
+ /**
5767
+ * Format: int64
5768
+ * @description 发起用户;后台任务里可能为空
5769
+ */
5770
+ userId?: null | number | string;
5771
+ /** Format: int32 */
5772
+ inputTokens?: number | string;
5773
+ /** Format: int32 */
5774
+ outputTokens?: number | string;
5775
+ /** Format: int32 */
5776
+ totalTokens?: number | string;
5777
+ /**
5778
+ * Format: int32
5779
+ * @description 用量来源:1=上游回报,2=上游未回报(流式且厂商不支持 include_usage)
5780
+ */
5781
+ usageSource?: number | string;
5782
+ /** Format: int32 */
5783
+ latencyMs?: number | string;
5784
+ success?: boolean;
5785
+ /**
5786
+ * Format: int32
5787
+ * @description 失败时的内核错误码
5788
+ */
5789
+ errorCode?: null | number | string;
5790
+ /** @description 上游错误摘要,截断;不含请求内容 */
5791
+ errorMessage?: null | string;
5792
+ streamed?: boolean;
5793
+ /** @description 上游返回的请求 id,排障用 */
5794
+ requestId?: null | string;
5795
+ /**
5796
+ * Format: date-time
5797
+ * @description 创建时间;插入时由审计 AOP 自动填充。
5798
+ */
5799
+ createTime?: string;
5800
+ /**
5801
+ * Format: int64
5802
+ * @description 创建人用户 Id;插入时由审计 AOP 从当前登录用户填充,系统写入为 null。
5803
+ */
5804
+ createUserId?: null | number | string;
5805
+ /**
5806
+ * Format: date-time
5807
+ * @description 最后更新时间;每次更新由审计 AOP 自动刷新。
5808
+ */
5809
+ updateTime?: null | string;
5810
+ /**
5811
+ * Format: int64
5812
+ * @description 最后更新人用户 Id;每次更新由审计 AOP 从当前登录用户填充。
5813
+ */
5814
+ updateUserId?: null | number | string;
5815
+ /**
5816
+ * Format: int64
5817
+ * @description 主键(雪花 ID;种子数据可用固定小整数)。插入时为 0 则由审计 AOP 自动生成。
5818
+ */
5819
+ id?: number | string;
5820
+ };
5209
5821
  /**
5210
5822
  * @description 系统配置表——键值对形式的全局配置项(如站点名称、默认密码策略等),支持按 string? SysConfig.GroupCode 分组管理。
5211
5823
  * string SysConfig.ConfigKey 创建后不可修改:程序按键读取配置值,改键等同于换了一个配置项,
@@ -5939,9 +6551,9 @@ export interface components {
5939
6551
  enabled?: boolean;
5940
6552
  remark?: null | string;
5941
6553
  /**
5942
- * @description 是否可被非超管转授给他人(角色委派)。可空以兼容存量库的无损升级:
5943
- * 数据库 NULL(功能上线前的存量角色)与显式 `false` 同判定为"不可转授",只有显式 `true` 才放行——
5944
- * 安全默认(未标注的旧角色一律收紧,不因升级静默放宽)。演进列必须可空:MSSQL 无法对有数据的表
6554
+ * @description 是否可被非超管转授给他人(角色委派)。可空,存量库补列时无损:
6555
+ * 数据库 NULL(存量角色)与显式 `false` 同判定为"不可转授",只有显式 `true` 才放行——
6556
+ * 安全默认(未标注的角色一律收紧,补列不会静默放宽)。演进列必须可空:MSSQL 无法对有数据的表
5945
6557
  * ADD 无 DEFAULT 的 NOT NULL 列(同 bool SysUser.ForceTotp 的成法)。
5946
6558
  */
5947
6559
  isDelegatable?: null | boolean;
@@ -6029,7 +6641,7 @@ export interface components {
6029
6641
  account?: string;
6030
6642
  /** @description 当前密码(必填;缺失/错误一律拒绝写 seed) */
6031
6643
  currentPassword?: string;
6032
- /** @description 历史字段:曾表示邀请/InitGrant token。<b>ADR 0006 后忽略</b>;保留以免旧客户端反序列化失败。 */
6644
+ /** @description 服务端忽略此字段;留着它,是为了仍在请求里带 `token` 的客户端反序列化不失败。 */
6033
6645
  token?: null | string;
6034
6646
  };
6035
6647
  /** @description 绑定启动出参:临时挑战 + otpauth URI(种子暂存缓存,完成前不落库)。 */
@@ -6197,6 +6809,315 @@ export interface components {
6197
6809
  }
6198
6810
  export type $defs = Record<string, never>;
6199
6811
  export interface operations {
6812
+ AiProvider_Page: {
6813
+ parameters: {
6814
+ query?: {
6815
+ /** @description 关键字(模糊匹配 Code 或 Name,可选) */
6816
+ Keyword?: string;
6817
+ /** @description 启用状态精确过滤(可选) */
6818
+ Enabled?: boolean;
6819
+ Current?: number | string;
6820
+ Size?: number | string;
6821
+ SortField?: string;
6822
+ SortOrder?: string;
6823
+ };
6824
+ header?: never;
6825
+ path?: never;
6826
+ cookie?: never;
6827
+ };
6828
+ requestBody?: never;
6829
+ responses: {
6830
+ /** @description OK */
6831
+ 200: {
6832
+ headers: {
6833
+ [name: string]: unknown;
6834
+ };
6835
+ content: {
6836
+ "text/plain": components["schemas"]["ResultOfPagedListOfAiProviderView"];
6837
+ "application/json": components["schemas"]["ResultOfPagedListOfAiProviderView"];
6838
+ "text/json": components["schemas"]["ResultOfPagedListOfAiProviderView"];
6839
+ };
6840
+ };
6841
+ };
6842
+ };
6843
+ AiProvider_Get: {
6844
+ parameters: {
6845
+ query?: never;
6846
+ header?: never;
6847
+ path: {
6848
+ id: number | string;
6849
+ };
6850
+ cookie?: never;
6851
+ };
6852
+ requestBody?: never;
6853
+ responses: {
6854
+ /** @description OK */
6855
+ 200: {
6856
+ headers: {
6857
+ [name: string]: unknown;
6858
+ };
6859
+ content: {
6860
+ "text/plain": components["schemas"]["ResultOfAiProviderView"];
6861
+ "application/json": components["schemas"]["ResultOfAiProviderView"];
6862
+ "text/json": components["schemas"]["ResultOfAiProviderView"];
6863
+ };
6864
+ };
6865
+ };
6866
+ };
6867
+ AiProvider_Update: {
6868
+ parameters: {
6869
+ query?: never;
6870
+ header?: never;
6871
+ path: {
6872
+ id: number | string;
6873
+ };
6874
+ cookie?: never;
6875
+ };
6876
+ requestBody: {
6877
+ content: {
6878
+ "application/json": components["schemas"]["AiProviderUpdateInput"];
6879
+ "text/json": components["schemas"]["AiProviderUpdateInput"];
6880
+ "application/*+json": components["schemas"]["AiProviderUpdateInput"];
6881
+ };
6882
+ };
6883
+ responses: {
6884
+ /** @description OK */
6885
+ 200: {
6886
+ headers: {
6887
+ [name: string]: unknown;
6888
+ };
6889
+ content: {
6890
+ "text/plain": components["schemas"]["ResultOfboolean"];
6891
+ "application/json": components["schemas"]["ResultOfboolean"];
6892
+ "text/json": components["schemas"]["ResultOfboolean"];
6893
+ };
6894
+ };
6895
+ };
6896
+ };
6897
+ AiProvider_Delete: {
6898
+ parameters: {
6899
+ query?: never;
6900
+ header?: never;
6901
+ path: {
6902
+ id: number | string;
6903
+ };
6904
+ cookie?: never;
6905
+ };
6906
+ requestBody?: never;
6907
+ responses: {
6908
+ /** @description OK */
6909
+ 200: {
6910
+ headers: {
6911
+ [name: string]: unknown;
6912
+ };
6913
+ content: {
6914
+ "text/plain": components["schemas"]["ResultOfboolean"];
6915
+ "application/json": components["schemas"]["ResultOfboolean"];
6916
+ "text/json": components["schemas"]["ResultOfboolean"];
6917
+ };
6918
+ };
6919
+ };
6920
+ };
6921
+ AiProvider_Presets: {
6922
+ parameters: {
6923
+ query?: never;
6924
+ header?: never;
6925
+ path?: never;
6926
+ cookie?: never;
6927
+ };
6928
+ requestBody?: never;
6929
+ responses: {
6930
+ /** @description OK */
6931
+ 200: {
6932
+ headers: {
6933
+ [name: string]: unknown;
6934
+ };
6935
+ content: {
6936
+ "text/plain": components["schemas"]["ResultOfIReadOnlyListOfAiProviderPreset"];
6937
+ "application/json": components["schemas"]["ResultOfIReadOnlyListOfAiProviderPreset"];
6938
+ "text/json": components["schemas"]["ResultOfIReadOnlyListOfAiProviderPreset"];
6939
+ };
6940
+ };
6941
+ };
6942
+ };
6943
+ AiProvider_Add: {
6944
+ parameters: {
6945
+ query?: never;
6946
+ header?: never;
6947
+ path?: never;
6948
+ cookie?: never;
6949
+ };
6950
+ requestBody: {
6951
+ content: {
6952
+ "application/json": components["schemas"]["AiProviderAddInput"];
6953
+ "text/json": components["schemas"]["AiProviderAddInput"];
6954
+ "application/*+json": components["schemas"]["AiProviderAddInput"];
6955
+ };
6956
+ };
6957
+ responses: {
6958
+ /** @description OK */
6959
+ 200: {
6960
+ headers: {
6961
+ [name: string]: unknown;
6962
+ };
6963
+ content: {
6964
+ "text/plain": components["schemas"]["ResultOflong"];
6965
+ "application/json": components["schemas"]["ResultOflong"];
6966
+ "text/json": components["schemas"]["ResultOflong"];
6967
+ };
6968
+ };
6969
+ };
6970
+ };
6971
+ AiProvider_SetEnabled: {
6972
+ parameters: {
6973
+ query?: {
6974
+ enabled?: boolean;
6975
+ };
6976
+ header?: never;
6977
+ path: {
6978
+ id: number | string;
6979
+ };
6980
+ cookie?: never;
6981
+ };
6982
+ requestBody?: never;
6983
+ responses: {
6984
+ /** @description OK */
6985
+ 200: {
6986
+ headers: {
6987
+ [name: string]: unknown;
6988
+ };
6989
+ content: {
6990
+ "text/plain": components["schemas"]["ResultOfboolean"];
6991
+ "application/json": components["schemas"]["ResultOfboolean"];
6992
+ "text/json": components["schemas"]["ResultOfboolean"];
6993
+ };
6994
+ };
6995
+ };
6996
+ };
6997
+ AiProvider_Test: {
6998
+ parameters: {
6999
+ query?: never;
7000
+ header?: never;
7001
+ path: {
7002
+ id: number | string;
7003
+ };
7004
+ cookie?: never;
7005
+ };
7006
+ requestBody?: never;
7007
+ responses: {
7008
+ /** @description OK */
7009
+ 200: {
7010
+ headers: {
7011
+ [name: string]: unknown;
7012
+ };
7013
+ content: {
7014
+ "text/plain": components["schemas"]["ResultOfAiTestResult"];
7015
+ "application/json": components["schemas"]["ResultOfAiTestResult"];
7016
+ "text/json": components["schemas"]["ResultOfAiTestResult"];
7017
+ };
7018
+ };
7019
+ };
7020
+ };
7021
+ AiUsage_Summary: {
7022
+ parameters: {
7023
+ query?: {
7024
+ From?: string;
7025
+ To?: string;
7026
+ ProviderCode?: string;
7027
+ Model?: string;
7028
+ Scene?: string;
7029
+ UserId?: number | string;
7030
+ GroupBy?: components["schemas"]["AiUsageGroupBy"];
7031
+ };
7032
+ header?: never;
7033
+ path?: never;
7034
+ cookie?: never;
7035
+ };
7036
+ requestBody?: never;
7037
+ responses: {
7038
+ /** @description OK */
7039
+ 200: {
7040
+ headers: {
7041
+ [name: string]: unknown;
7042
+ };
7043
+ content: {
7044
+ "text/plain": components["schemas"]["ResultOfAiUsageSummary"];
7045
+ "application/json": components["schemas"]["ResultOfAiUsageSummary"];
7046
+ "text/json": components["schemas"]["ResultOfAiUsageSummary"];
7047
+ };
7048
+ };
7049
+ };
7050
+ };
7051
+ AiUsage_Trend: {
7052
+ parameters: {
7053
+ query?: {
7054
+ From?: string;
7055
+ To?: string;
7056
+ ProviderCode?: string;
7057
+ Model?: string;
7058
+ Scene?: string;
7059
+ UserId?: number | string;
7060
+ };
7061
+ header?: never;
7062
+ path?: never;
7063
+ cookie?: never;
7064
+ };
7065
+ requestBody?: never;
7066
+ responses: {
7067
+ /** @description OK */
7068
+ 200: {
7069
+ headers: {
7070
+ [name: string]: unknown;
7071
+ };
7072
+ content: {
7073
+ "text/plain": components["schemas"]["ResultOfIReadOnlyListOfAiUsageTrendPoint"];
7074
+ "application/json": components["schemas"]["ResultOfIReadOnlyListOfAiUsageTrendPoint"];
7075
+ "text/json": components["schemas"]["ResultOfIReadOnlyListOfAiUsageTrendPoint"];
7076
+ };
7077
+ };
7078
+ };
7079
+ };
7080
+ AiUsage_Page: {
7081
+ parameters: {
7082
+ query?: {
7083
+ /** @description 起始时间(含,按 `CreateTime` 过滤;可选) */
7084
+ From?: string;
7085
+ /** @description 截止时间(含,按 `CreateTime` 过滤;可选) */
7086
+ To?: string;
7087
+ /** @description 厂商编码(精确匹配,可选) */
7088
+ ProviderCode?: string;
7089
+ /** @description 模型名(精确匹配,可选) */
7090
+ Model?: string;
7091
+ /** @description 业务场景标签(精确匹配,可选) */
7092
+ Scene?: string;
7093
+ /** @description 发起用户 Id(精确匹配,可选) */
7094
+ UserId?: number | string;
7095
+ /** @description 是否成功(精确匹配,可选) */
7096
+ Success?: boolean;
7097
+ Current?: number | string;
7098
+ Size?: number | string;
7099
+ SortField?: string;
7100
+ SortOrder?: string;
7101
+ };
7102
+ header?: never;
7103
+ path?: never;
7104
+ cookie?: never;
7105
+ };
7106
+ requestBody?: never;
7107
+ responses: {
7108
+ /** @description OK */
7109
+ 200: {
7110
+ headers: {
7111
+ [name: string]: unknown;
7112
+ };
7113
+ content: {
7114
+ "text/plain": components["schemas"]["ResultOfPagedListOfSysAiUsageLog"];
7115
+ "application/json": components["schemas"]["ResultOfPagedListOfSysAiUsageLog"];
7116
+ "text/json": components["schemas"]["ResultOfPagedListOfSysAiUsageLog"];
7117
+ };
7118
+ };
7119
+ };
7120
+ };
6200
7121
  Auth_Captcha: {
6201
7122
  parameters: {
6202
7123
  query?: never;