@since2006/pages 2026.3.2 → 2026.3.3

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 (97) hide show
  1. package/dist/es/index.js +25 -22
  2. package/dist/es/src/app/attachment/AttachmentIndex.vue.js +15 -15
  3. package/dist/es/src/app/attachment/index.js +2 -3
  4. package/dist/es/src/app/dict/DictEdit.vue.js +6 -6
  5. package/dist/es/src/app/dict/DictIndex.vue2.js +17 -17
  6. package/dist/es/src/app/dict/DictPanel.vue2.js +15 -15
  7. package/dist/es/src/app/dict/index.js +3 -4
  8. package/dist/es/src/app/log/components/AccessLogList.vue2.js +43 -43
  9. package/dist/es/src/app/log/components/AuditLogList.vue2.js +23 -23
  10. package/dist/es/src/app/log/components/ErrorLogList.vue2.js +16 -16
  11. package/dist/es/src/app/log/components/LoginLogDetail.vue2.js +2 -2
  12. package/dist/es/src/app/log/components/LoginLogList.vue2.js +21 -21
  13. package/dist/es/src/app/log/components/OperationLogDetail.vue2.js +2 -2
  14. package/dist/es/src/app/log/components/OperationLogList.vue2.js +21 -21
  15. package/dist/es/src/app/metadata/MetadataIndex.vue.js +15 -15
  16. package/dist/es/src/app/metadata/index.js +3 -4
  17. package/dist/es/src/app/module/ModuleAdd.vue2.js +6 -6
  18. package/dist/es/src/app/module/ModuleDetail.vue.js +53 -53
  19. package/dist/es/src/app/module/ModuleEdit.vue2.js +6 -6
  20. package/dist/es/src/app/module/ModuleIndex.vue2.js +5 -5
  21. package/dist/es/src/app/module/index.js +2 -3
  22. package/dist/es/src/app/openapi/OpenApiAppEdit.vue.js +320 -0
  23. package/dist/es/src/app/openapi/OpenApiAppEdit.vue2.js +4 -0
  24. package/dist/es/src/app/openapi/OpenApiAppIndex.vue.js +7 -0
  25. package/dist/es/src/app/openapi/OpenApiAppIndex.vue2.js +398 -0
  26. package/dist/es/src/app/openapi/OpenApiCredentialModal.vue.js +105 -0
  27. package/dist/es/src/app/openapi/OpenApiCredentialModal.vue2.js +4 -0
  28. package/dist/es/src/app/openapi/OpenApiLogDetail.vue.js +224 -0
  29. package/dist/es/src/app/openapi/OpenApiLogDetail.vue2.js +4 -0
  30. package/dist/es/src/app/openapi/OpenApiLogIndex.vue.js +266 -0
  31. package/dist/es/src/app/openapi/OpenApiLogIndex.vue2.js +4 -0
  32. package/dist/es/src/app/openapi/OpenApiPermissionEdit.vue.js +169 -0
  33. package/dist/es/src/app/openapi/OpenApiPermissionEdit.vue2.js +4 -0
  34. package/dist/es/src/app/openapi/OpenApiPermissionList.vue.js +156 -0
  35. package/dist/es/src/app/openapi/OpenApiPermissionList.vue2.js +4 -0
  36. package/dist/es/src/app/openapi/api.js +52 -0
  37. package/dist/es/src/app/openapi/index.js +8 -0
  38. package/dist/es/src/app/schedule/CronTypeSelect.vue.js +92 -92
  39. package/dist/es/src/app/schedule/ScheduleAdd.vue2.js +7 -7
  40. package/dist/es/src/app/schedule/ScheduleEdit.vue2.js +7 -7
  41. package/dist/es/src/app/schedule/ScheduleIndex.vue.js +35 -35
  42. package/dist/es/src/app/schedule/ScheduleLogList.vue.js +7 -7
  43. package/dist/es/src/app/schedule/ScheduleLogView.vue2.js +9 -9
  44. package/dist/es/src/app/schedule/index.js +4 -5
  45. package/dist/es/src/app/system/StatusIndex.vue2.js +8 -8
  46. package/dist/es/src/app/system/index.js +2 -3
  47. package/dist/es/src/index.js +19 -16
  48. package/dist/es/style.css +1 -1
  49. package/dist/lib/index.js +1 -1
  50. package/dist/lib/src/app/attachment/AttachmentIndex.vue.js +1 -1
  51. package/dist/lib/src/app/attachment/index.js +1 -1
  52. package/dist/lib/src/app/dict/DictEdit.vue.js +1 -1
  53. package/dist/lib/src/app/dict/DictIndex.vue2.js +1 -1
  54. package/dist/lib/src/app/dict/DictPanel.vue2.js +1 -1
  55. package/dist/lib/src/app/dict/index.js +1 -1
  56. package/dist/lib/src/app/log/components/AccessLogList.vue2.js +1 -1
  57. package/dist/lib/src/app/log/components/AuditLogList.vue2.js +1 -1
  58. package/dist/lib/src/app/log/components/ErrorLogList.vue2.js +1 -1
  59. package/dist/lib/src/app/log/components/LoginLogDetail.vue2.js +1 -1
  60. package/dist/lib/src/app/log/components/LoginLogList.vue2.js +1 -1
  61. package/dist/lib/src/app/log/components/OperationLogDetail.vue2.js +1 -1
  62. package/dist/lib/src/app/log/components/OperationLogList.vue2.js +1 -1
  63. package/dist/lib/src/app/metadata/MetadataIndex.vue.js +1 -1
  64. package/dist/lib/src/app/metadata/index.js +1 -1
  65. package/dist/lib/src/app/module/ModuleAdd.vue2.js +1 -1
  66. package/dist/lib/src/app/module/ModuleDetail.vue.js +1 -1
  67. package/dist/lib/src/app/module/ModuleEdit.vue2.js +1 -1
  68. package/dist/lib/src/app/module/ModuleIndex.vue2.js +1 -1
  69. package/dist/lib/src/app/module/index.js +1 -1
  70. package/dist/lib/src/app/openapi/OpenApiAppEdit.vue.js +1 -0
  71. package/dist/lib/src/app/openapi/OpenApiAppEdit.vue2.js +1 -0
  72. package/dist/lib/src/app/openapi/OpenApiAppIndex.vue.js +1 -0
  73. package/dist/lib/src/app/openapi/OpenApiAppIndex.vue2.js +19 -0
  74. package/dist/lib/src/app/openapi/OpenApiCredentialModal.vue.js +1 -0
  75. package/dist/lib/src/app/openapi/OpenApiCredentialModal.vue2.js +1 -0
  76. package/dist/lib/src/app/openapi/OpenApiLogDetail.vue.js +1 -0
  77. package/dist/lib/src/app/openapi/OpenApiLogDetail.vue2.js +1 -0
  78. package/dist/lib/src/app/openapi/OpenApiLogIndex.vue.js +1 -0
  79. package/dist/lib/src/app/openapi/OpenApiLogIndex.vue2.js +1 -0
  80. package/dist/lib/src/app/openapi/OpenApiPermissionEdit.vue.js +1 -0
  81. package/dist/lib/src/app/openapi/OpenApiPermissionEdit.vue2.js +1 -0
  82. package/dist/lib/src/app/openapi/OpenApiPermissionList.vue.js +1 -0
  83. package/dist/lib/src/app/openapi/OpenApiPermissionList.vue2.js +1 -0
  84. package/dist/lib/src/app/openapi/api.js +1 -0
  85. package/dist/lib/src/app/openapi/index.js +1 -0
  86. package/dist/lib/src/app/schedule/CronTypeSelect.vue.js +1 -1
  87. package/dist/lib/src/app/schedule/ScheduleAdd.vue2.js +1 -1
  88. package/dist/lib/src/app/schedule/ScheduleEdit.vue2.js +1 -1
  89. package/dist/lib/src/app/schedule/ScheduleIndex.vue.js +1 -1
  90. package/dist/lib/src/app/schedule/ScheduleLogList.vue.js +1 -1
  91. package/dist/lib/src/app/schedule/ScheduleLogView.vue2.js +1 -1
  92. package/dist/lib/src/app/schedule/index.js +1 -1
  93. package/dist/lib/src/app/system/StatusIndex.vue2.js +1 -1
  94. package/dist/lib/src/app/system/index.js +1 -1
  95. package/dist/lib/src/index.js +1 -1
  96. package/dist/lib/style.css +1 -1
  97. package/package.json +1 -1
@@ -0,0 +1,398 @@
1
+ import { defineComponent as J, ref as H, reactive as S, resolveComponent as d, openBlock as s, createElementBlock as y, createElementVNode as n, createVNode as t, withCtx as l, createTextVNode as o, unref as v, toDisplayString as W, Fragment as P, createBlock as b, createCommentVNode as N } from "vue";
2
+ import { message as Z } from "ant-design-vue";
3
+ import { PlusOutlined as h, QuestionCircleOutlined as ee, ApiTwoTone as ne } from "@ant-design/icons-vue";
4
+ import { FxCardTable as te } from "@since2006/components";
5
+ import { queryApps as oe, deleteApp as le } from "./api.js";
6
+ import ie from "./OpenApiAppEdit.vue.js";
7
+ import de from "./OpenApiPermissionList.vue.js";
8
+ const se = { class: "ant-pro-table" }, ae = { class: "ant-pro-table-search" }, re = ["onClick"], pe = ["onClick"], be = /* @__PURE__ */ J({
9
+ name: "OpenApiAppIndex",
10
+ __name: "OpenApiAppIndex",
11
+ setup(ue) {
12
+ const g = H(), U = [
13
+ { title: "应用名称", dataIndex: "appName" },
14
+ { title: "认证模式", dataIndex: "authMode", width: 140, align: "center" },
15
+ { title: "状态", dataIndex: "status", width: 100, align: "center" },
16
+ { title: "QPS 限制", dataIndex: "rateLimit", width: 120, align: "center" },
17
+ {
18
+ title: "创建时间",
19
+ dataIndex: "createdAt",
20
+ width: 200,
21
+ sorter: !0,
22
+ sortDirections: ["descend", "ascend"],
23
+ sortField: "created_at"
24
+ },
25
+ { title: "操作", dataIndex: "action", width: 150, align: "center" }
26
+ ], a = S({
27
+ query: void 0,
28
+ status: void 0
29
+ }), r = S({
30
+ open: !1,
31
+ appId: ""
32
+ }), E = H(!1), c = [
33
+ { title: "对比项", dataIndex: "item", width: 140 },
34
+ { title: "SIMPLE 模式", dataIndex: "simple" },
35
+ { title: "SECURE 模式", dataIndex: "secure" }
36
+ ], q = [
37
+ { item: "适用场景", simple: "查询类接口、低风险接口", secure: "写操作、审批、财务等核心接口" },
38
+ { item: "请求头", simple: "X-Api-Key", secure: "X-Client-Id + X-Timestamp + X-Nonce + X-Sign" },
39
+ { item: "安全特性", simple: "API Key 验证", secure: "HMAC-SHA256 签名 + 防重放" },
40
+ { item: "接入成本", simple: "低,无需签名", secure: "中,需实现签名逻辑" }
41
+ ], X = [
42
+ { title: "字段", dataIndex: "field", width: 120 },
43
+ { title: "说明", dataIndex: "desc" }
44
+ ], D = [
45
+ { field: "METHOD", desc: "大写 HTTP 方法:GET、POST、PUT、DELETE" },
46
+ { field: "PATH", desc: "请求路径(不含 query string)" },
47
+ { field: "QUERY", desc: "query string 按 key 字典序排列拼接,无参数时为空字符串" },
48
+ { field: "TIMESTAMP", desc: "与 X-Timestamp 一致" },
49
+ { field: "NONCE", desc: "与 X-Nonce 一致" },
50
+ { field: "BODY", desc: "请求体原文(raw body),无 body 时为空字符串" }
51
+ ], u = S({
52
+ open: !1,
53
+ appId: ""
54
+ }), T = () => {
55
+ g.value.refresh();
56
+ }, F = () => {
57
+ a.query = void 0, a.status = void 0, g.value.refresh();
58
+ }, L = () => {
59
+ r.appId = "", r.open = !0;
60
+ }, _ = (p) => {
61
+ r.appId = p.id, r.open = !0;
62
+ }, $ = () => {
63
+ k();
64
+ }, B = (p) => {
65
+ u.appId = p.id, u.open = !0;
66
+ }, K = (p) => {
67
+ le(p.id).then((e) => {
68
+ e.code === 200 && (Z.success("删除成功"), k());
69
+ });
70
+ }, k = () => {
71
+ g.value.refresh();
72
+ };
73
+ return (p, e) => {
74
+ const V = d("a-input"), w = d("a-form-item"), A = d("a-col"), M = d("a-select-option"), Y = d("a-select"), C = d("a-button"), Q = d("a-row"), j = d("a-form"), m = d("a-tag"), f = d("a-divider"), z = d("a-popconfirm"), O = d("a-table"), G = d("a-modal");
75
+ return s(), y("div", null, [
76
+ n("div", se, [
77
+ n("div", ae, [
78
+ t(j, { layout: "horizontal" }, {
79
+ default: l(() => [
80
+ t(Q, {
81
+ gutter: 16,
82
+ type: "flex",
83
+ justify: "start"
84
+ }, {
85
+ default: l(() => [
86
+ t(A, {
87
+ xs: 24,
88
+ sm: 24,
89
+ md: 12,
90
+ lg: 7
91
+ }, {
92
+ default: l(() => [
93
+ t(w, { label: "搜索" }, {
94
+ default: l(() => [
95
+ t(V, {
96
+ value: a.query,
97
+ "onUpdate:value": e[0] || (e[0] = (i) => a.query = i),
98
+ placeholder: "应用名称 / Client ID",
99
+ onPressEnter: T
100
+ }, null, 8, ["value"])
101
+ ]),
102
+ _: 1
103
+ })
104
+ ]),
105
+ _: 1
106
+ }),
107
+ t(A, {
108
+ xs: 24,
109
+ sm: 24,
110
+ md: 12,
111
+ lg: 5
112
+ }, {
113
+ default: l(() => [
114
+ t(w, { label: "状态" }, {
115
+ default: l(() => [
116
+ t(Y, {
117
+ value: a.status,
118
+ "onUpdate:value": e[1] || (e[1] = (i) => a.status = i),
119
+ placeholder: "全部",
120
+ "allow-clear": "",
121
+ onChange: T
122
+ }, {
123
+ default: l(() => [
124
+ t(M, { value: 1 }, {
125
+ default: l(() => [...e[6] || (e[6] = [
126
+ o("启用", -1)
127
+ ])]),
128
+ _: 1
129
+ }),
130
+ t(M, { value: 0 }, {
131
+ default: l(() => [...e[7] || (e[7] = [
132
+ o("禁用", -1)
133
+ ])]),
134
+ _: 1
135
+ })
136
+ ]),
137
+ _: 1
138
+ }, 8, ["value"])
139
+ ]),
140
+ _: 1
141
+ })
142
+ ]),
143
+ _: 1
144
+ }),
145
+ t(A, null, {
146
+ default: l(() => [
147
+ t(C, {
148
+ type: "primary",
149
+ onClick: T
150
+ }, {
151
+ default: l(() => [...e[8] || (e[8] = [
152
+ o("搜索", -1)
153
+ ])]),
154
+ _: 1
155
+ }),
156
+ t(C, {
157
+ style: { "margin-left": "16px" },
158
+ onClick: F
159
+ }, {
160
+ default: l(() => [...e[9] || (e[9] = [
161
+ o("重置", -1)
162
+ ])]),
163
+ _: 1
164
+ })
165
+ ]),
166
+ _: 1
167
+ })
168
+ ]),
169
+ _: 1
170
+ })
171
+ ]),
172
+ _: 1
173
+ })
174
+ ]),
175
+ t(v(te), {
176
+ columns: U,
177
+ "load-data": v(oe),
178
+ params: a,
179
+ ref_key: "tableRef",
180
+ ref: g
181
+ }, {
182
+ title: l(() => [
183
+ t(v(ne)),
184
+ e[10] || (e[10] = o(" 开放平台应用 ", -1))
185
+ ]),
186
+ toolbar: l(() => [
187
+ t(C, {
188
+ type: "primary",
189
+ onClick: L
190
+ }, {
191
+ default: l(() => [
192
+ t(v(h)),
193
+ e[11] || (e[11] = o(" 新建 ", -1))
194
+ ]),
195
+ _: 1
196
+ }),
197
+ t(C, {
198
+ onClick: e[2] || (e[2] = (i) => E.value = !0)
199
+ }, {
200
+ default: l(() => [
201
+ t(v(ee)),
202
+ e[12] || (e[12] = o(" 使用说明 ", -1))
203
+ ]),
204
+ _: 1
205
+ })
206
+ ]),
207
+ bodyCell: l(({ column: i, record: x, text: I }) => [
208
+ i.dataIndex === "appName" ? (s(), y("a", {
209
+ key: 0,
210
+ onClick: (R) => _(x)
211
+ }, W(I), 9, re)) : i.dataIndex === "authMode" ? (s(), y(P, { key: 1 }, [
212
+ I === "SIMPLE" ? (s(), b(m, {
213
+ key: 0,
214
+ color: "blue"
215
+ }, {
216
+ default: l(() => [...e[13] || (e[13] = [
217
+ o("SIMPLE", -1)
218
+ ])]),
219
+ _: 1
220
+ })) : I === "SECURE" ? (s(), b(m, {
221
+ key: 1,
222
+ color: "orange"
223
+ }, {
224
+ default: l(() => [...e[14] || (e[14] = [
225
+ o("SECURE", -1)
226
+ ])]),
227
+ _: 1
228
+ })) : N("", !0)
229
+ ], 64)) : i.dataIndex === "status" ? (s(), y(P, { key: 2 }, [
230
+ I === 1 ? (s(), b(m, {
231
+ key: 0,
232
+ color: "success"
233
+ }, {
234
+ default: l(() => [...e[15] || (e[15] = [
235
+ o("启用", -1)
236
+ ])]),
237
+ _: 1
238
+ })) : (s(), b(m, {
239
+ key: 1,
240
+ color: "error"
241
+ }, {
242
+ default: l(() => [...e[16] || (e[16] = [
243
+ o("禁用", -1)
244
+ ])]),
245
+ _: 1
246
+ }))
247
+ ], 64)) : i.dataIndex === "action" ? (s(), y(P, { key: 3 }, [
248
+ n("a", {
249
+ onClick: (R) => B(x)
250
+ }, "权限", 8, pe),
251
+ t(f, { type: "vertical" }),
252
+ t(z, {
253
+ title: "确定要删除吗?",
254
+ onConfirm: (R) => K(x)
255
+ }, {
256
+ default: l(() => [...e[17] || (e[17] = [
257
+ n("a", null, "删除", -1)
258
+ ])]),
259
+ _: 1
260
+ }, 8, ["onConfirm"])
261
+ ], 64)) : N("", !0)
262
+ ]),
263
+ _: 1
264
+ }, 8, ["load-data", "params"])
265
+ ]),
266
+ t(ie, {
267
+ open: r.open,
268
+ "onUpdate:open": e[3] || (e[3] = (i) => r.open = i),
269
+ "app-id": r.appId,
270
+ onSuccess: $
271
+ }, null, 8, ["open", "app-id"]),
272
+ t(de, {
273
+ open: u.open,
274
+ "onUpdate:open": e[4] || (e[4] = (i) => u.open = i),
275
+ "app-id": u.appId
276
+ }, null, 8, ["open", "app-id"]),
277
+ t(G, {
278
+ title: "开放平台使用说明",
279
+ open: E.value,
280
+ footer: null,
281
+ width: 720,
282
+ "body-style": { maxHeight: "70vh", overflowY: "auto" },
283
+ onCancel: e[5] || (e[5] = (i) => E.value = !1)
284
+ }, {
285
+ default: l(() => [
286
+ e[21] || (e[21] = n("h3", null, "认证模式对比", -1)),
287
+ t(O, {
288
+ columns: c,
289
+ "data-source": q,
290
+ pagination: !1,
291
+ size: "small",
292
+ bordered: "",
293
+ "row-key": "item"
294
+ }),
295
+ t(f),
296
+ e[22] || (e[22] = n("h3", null, "SIMPLE 模式调用示例", -1)),
297
+ n("p", null, [
298
+ e[19] || (e[19] = o("在请求头中携带 ", -1)),
299
+ t(m, null, {
300
+ default: l(() => [...e[18] || (e[18] = [
301
+ o("X-Api-Key", -1)
302
+ ])]),
303
+ _: 1
304
+ }),
305
+ e[20] || (e[20] = o(" 即可,适合查询类接口,接入成本低。", -1))
306
+ ]),
307
+ e[23] || (e[23] = n("pre", { class: "guide-code" }, `GET /api/v1/user/query?name=test HTTP/1.1
308
+ Host: your-server.com
309
+ X-Api-Key: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4`, -1)),
310
+ t(f),
311
+ e[24] || (e[24] = n("h3", null, "SECURE 模式调用示例", -1)),
312
+ e[25] || (e[25] = n("p", null, "需要在请求头中携带签名信息,适合写操作等核心接口,防篡改、防重放。", -1)),
313
+ e[26] || (e[26] = n("pre", { class: "guide-code" }, `POST /api/v1/reimburse/save HTTP/1.1
314
+ Host: your-server.com
315
+ X-Client-Id: oa_finance
316
+ X-Timestamp: 1710839200
317
+ X-Nonce: a3f8b91d2c4e6f07150abc12
318
+ X-Sign: 6e0f2d8a...
319
+ Content-Type: application/json
320
+
321
+ {"id":1,"amount":200}`, -1)),
322
+ e[27] || (e[27] = n("h4", null, "签名规则", -1)),
323
+ e[28] || (e[28] = n("p", null, [
324
+ o("签名原文由以下字段以换行符 "),
325
+ n("code", null, "\\n"),
326
+ o(" 拼接:")
327
+ ], -1)),
328
+ e[29] || (e[29] = n("pre", { class: "guide-code" }, "METHOD\\nPATH\\nQUERY\\nTIMESTAMP\\nNONCE\\nBODY", -1)),
329
+ t(O, {
330
+ columns: X,
331
+ "data-source": D,
332
+ pagination: !1,
333
+ size: "small",
334
+ bordered: "",
335
+ "row-key": "field",
336
+ style: { margin: "12px 0" }
337
+ }),
338
+ e[30] || (e[30] = n("p", null, [
339
+ o("签名算法:"),
340
+ n("code", null, "sign = HexLowerCase(HMAC-SHA256(canonicalString, client_secret))")
341
+ ], -1)),
342
+ e[31] || (e[31] = n("h4", null, "上述请求对应的签名原文:", -1)),
343
+ e[32] || (e[32] = n("pre", { class: "guide-code" }, 'POST\\n/api/v1/reimburse/save\\n\\n1710839200\\na3f8b91d2c4e6f07150abc12\\n{"id":1,"amount":200}', -1)),
344
+ t(f),
345
+ e[33] || (e[33] = n("h3", null, "服务端接口接入", -1)),
346
+ e[34] || (e[34] = n("p", null, [
347
+ o("在 Controller 方法上添加 "),
348
+ n("code", null, "@OpenApiAuth"),
349
+ o(" 注解,即可声明该接口为开放接口:")
350
+ ], -1)),
351
+ e[35] || (e[35] = n("pre", { class: "guide-code" }, `// 不指定 code,认证通过即可访问,不校验具体接口权限
352
+ @OpenApiAuth
353
+ @GetMapping("/api/user/query")
354
+ public FxResponse<?> queryUser(@RequestParam String name) { ... }
355
+
356
+ // 指定 code,需在权限管理中为应用授权该编码才可访问
357
+ @OpenApiAuth(code = "reimburse.save")
358
+ @PostMapping("/api/reimburse/save")
359
+ public FxResponse<?> saveReimburse(@RequestBody ReimburseDTO dto) { ... }`, -1)),
360
+ e[36] || (e[36] = n("p", { style: { "margin-top": "8px" } }, "说明:", -1)),
361
+ e[37] || (e[37] = n("ul", null, [
362
+ n("li", null, [
363
+ o("未加 "),
364
+ n("code", null, "@OpenApiAuth"),
365
+ o(" 的接口不会被开放平台拦截器处理")
366
+ ]),
367
+ n("li", null, "认证模式不在注解中声明,由调用方应用的认证模式决定"),
368
+ n("li", null, [
369
+ n("code", null, "code"),
370
+ o(" 为空时,认证通过即可访问,不校验具体接口权限;指定 "),
371
+ n("code", null, "code"),
372
+ o(" 后,需在权限管理中为应用授权该编码才可访问")
373
+ ]),
374
+ n("li", null, "拦截器自动完成身份校验、IP 白名单、权限检查和调用日志记录")
375
+ ], -1)),
376
+ t(f),
377
+ e[38] || (e[38] = n("h3", null, "注意事项", -1)),
378
+ e[39] || (e[39] = n("ul", null, [
379
+ n("li", null, "API Key / Client Secret 仅在创建时显示一次,请妥善保存"),
380
+ n("li", null, "建议配置 IP 白名单以提高安全性"),
381
+ n("li", null, "SECURE 模式的 Timestamp 与服务器时差不得超过 300 秒"),
382
+ n("li", null, "SECURE 模式的 Nonce 不可重复使用(300 秒内去重)"),
383
+ n("li", null, [
384
+ o("强制要求 "),
385
+ n("code", null, "Content-Type: application/json"),
386
+ o(",不支持 form-urlencoded")
387
+ ])
388
+ ], -1))
389
+ ]),
390
+ _: 1
391
+ }, 8, ["open"])
392
+ ]);
393
+ };
394
+ }
395
+ });
396
+ export {
397
+ be as default
398
+ };
@@ -0,0 +1,105 @@
1
+ import { defineComponent as _, resolveComponent as a, openBlock as l, createBlock as o, withCtx as t, createVNode as n, createTextVNode as r, toDisplayString as d, createCommentVNode as s } from "vue";
2
+ const x = /* @__PURE__ */ _({
3
+ __name: "OpenApiCredentialModal",
4
+ props: {
5
+ open: {
6
+ type: Boolean,
7
+ default: !1
8
+ },
9
+ credentials: {
10
+ type: Object,
11
+ default: () => ({})
12
+ }
13
+ },
14
+ emits: ["update:open"],
15
+ setup(e, { emit: m }) {
16
+ const p = m, y = () => {
17
+ p("update:open", !1);
18
+ };
19
+ return (g, C) => {
20
+ const u = a("a-alert"), c = a("a-typography-paragraph"), i = a("a-descriptions-item"), f = a("a-descriptions"), b = a("a-modal");
21
+ return l(), o(b, {
22
+ title: "凭证信息",
23
+ open: e.open,
24
+ footer: null,
25
+ "mask-closable": !1,
26
+ keyboard: !1,
27
+ width: 560,
28
+ onCancel: y
29
+ }, {
30
+ default: t(() => [
31
+ n(u, {
32
+ message: "凭证仅显示一次,请立即复制保存!关闭弹窗后将无法再次获取。",
33
+ type: "warning",
34
+ "show-icon": "",
35
+ style: { "margin-bottom": "16px" }
36
+ }),
37
+ n(f, {
38
+ column: 1,
39
+ bordered: "",
40
+ size: "small"
41
+ }, {
42
+ default: t(() => [
43
+ e.credentials.clientId ? (l(), o(i, {
44
+ key: 0,
45
+ label: "Client ID"
46
+ }, {
47
+ default: t(() => [
48
+ n(c, {
49
+ copyable: { text: e.credentials.clientId },
50
+ style: { "margin-bottom": "0" }
51
+ }, {
52
+ default: t(() => [
53
+ r(d(e.credentials.clientId), 1)
54
+ ]),
55
+ _: 1
56
+ }, 8, ["copyable"])
57
+ ]),
58
+ _: 1
59
+ })) : s("", !0),
60
+ e.credentials.apiKey ? (l(), o(i, {
61
+ key: 1,
62
+ label: "API Key"
63
+ }, {
64
+ default: t(() => [
65
+ n(c, {
66
+ copyable: { text: e.credentials.apiKey },
67
+ style: { "margin-bottom": "0" }
68
+ }, {
69
+ default: t(() => [
70
+ r(d(e.credentials.apiKey), 1)
71
+ ]),
72
+ _: 1
73
+ }, 8, ["copyable"])
74
+ ]),
75
+ _: 1
76
+ })) : s("", !0),
77
+ e.credentials.clientSecret ? (l(), o(i, {
78
+ key: 2,
79
+ label: "Client Secret"
80
+ }, {
81
+ default: t(() => [
82
+ n(c, {
83
+ copyable: { text: e.credentials.clientSecret },
84
+ style: { "margin-bottom": "0" }
85
+ }, {
86
+ default: t(() => [
87
+ r(d(e.credentials.clientSecret), 1)
88
+ ]),
89
+ _: 1
90
+ }, 8, ["copyable"])
91
+ ]),
92
+ _: 1
93
+ })) : s("", !0)
94
+ ]),
95
+ _: 1
96
+ })
97
+ ]),
98
+ _: 1
99
+ }, 8, ["open"]);
100
+ };
101
+ }
102
+ });
103
+ export {
104
+ x as default
105
+ };
@@ -0,0 +1,4 @@
1
+ import f from "./OpenApiCredentialModal.vue.js";
2
+ export {
3
+ f as default
4
+ };