vue2server7 2.3.7 → 2.3.9
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/package.json +1 -1
- package/test/111.txt +44 -0
- package/test/12.js +115 -0
- package/test/atommaterial.a-file-icon-vscode-2.0.1.vsix +0 -0
- package/test/eamodio.gitlens-17.10.2.vsix +0 -0
- package/test/esbenp.prettier-vscode-12.3.0.vsix +0 -0
- package/test/pkief.material-icon-theme-5.31.0.vsix +0 -0
package/package.json
CHANGED
package/test/111.txt
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import axios from "axios";
|
|
2
|
+
|
|
3
|
+
const service = axios.create({
|
|
4
|
+
baseURL: import.meta.env.VITE_API_BASE,
|
|
5
|
+
timeout: 15000,
|
|
6
|
+
headers: {
|
|
7
|
+
"Content-Type": "application/json",
|
|
8
|
+
},
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
// 分页字段
|
|
12
|
+
const PAGE_KEYS = ["pageIndex", "pageSize"];
|
|
13
|
+
|
|
14
|
+
// 拆分函数
|
|
15
|
+
function splitHeadBody(params = {}, tranCode) {
|
|
16
|
+
const head = {
|
|
17
|
+
tranCode, // 关键:接口地址放进 head.tranCode
|
|
18
|
+
};
|
|
19
|
+
const body = {};
|
|
20
|
+
|
|
21
|
+
Object.keys(params).forEach((key) => {
|
|
22
|
+
if (PAGE_KEYS.includes(key)) {
|
|
23
|
+
head[key] = params[key];
|
|
24
|
+
} else {
|
|
25
|
+
body[key] = params[key];
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
return { head, body };
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const request = {
|
|
33
|
+
post(tranCode, params = {}, config = {}) {
|
|
34
|
+
const { head, body } = splitHeadBody(params, tranCode);
|
|
35
|
+
|
|
36
|
+
return service.post(
|
|
37
|
+
"/gateway", // 实际统一请求地址
|
|
38
|
+
{ head, body },
|
|
39
|
+
config
|
|
40
|
+
);
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export default request;
|
package/test/12.js
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
const fs = require("fs");
|
|
2
|
+
|
|
3
|
+
const content = fs.readFileSync("input.txt", "utf8");
|
|
4
|
+
|
|
5
|
+
// Java → TS 类型
|
|
6
|
+
function javaToTsType(javaType) {
|
|
7
|
+
const map = {
|
|
8
|
+
String: "string",
|
|
9
|
+
Integer: "number",
|
|
10
|
+
Long: "number",
|
|
11
|
+
Double: "number",
|
|
12
|
+
Float: "number",
|
|
13
|
+
BigDecimal: "number",
|
|
14
|
+
Boolean: "boolean",
|
|
15
|
+
Date: "string",
|
|
16
|
+
LocalDate: "string",
|
|
17
|
+
LocalDateTime: "string",
|
|
18
|
+
};
|
|
19
|
+
return map[javaType] || "any";
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// TS 类型默认值
|
|
23
|
+
function defaultValue(tsType) {
|
|
24
|
+
switch (tsType) {
|
|
25
|
+
case "string":
|
|
26
|
+
return `""`;
|
|
27
|
+
case "number":
|
|
28
|
+
return `0`;
|
|
29
|
+
case "boolean":
|
|
30
|
+
return `false`;
|
|
31
|
+
default:
|
|
32
|
+
return `null`;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* 解析策略:
|
|
38
|
+
* - 按“字段声明”逐个找:private Type field;
|
|
39
|
+
* - 然后回看它前面一段文本(最多回看 10 行左右)抓 label
|
|
40
|
+
* - label 优先级:ApiModelProperty.value > CheckV.desc > 兜底 field 名
|
|
41
|
+
*/
|
|
42
|
+
const fieldRegex = /private\s+(\w+)\s+(\w+)\s*;/g;
|
|
43
|
+
|
|
44
|
+
const lines = content.split(/\r?\n/);
|
|
45
|
+
const jsonResult = [];
|
|
46
|
+
const tsFields = [];
|
|
47
|
+
const formFields = [];
|
|
48
|
+
|
|
49
|
+
// 为了“回看”,我们把每一行的起始偏移算出来,方便从 match.index 找到行号
|
|
50
|
+
const lineStartOffsets = [];
|
|
51
|
+
let offset = 0;
|
|
52
|
+
for (const line of lines) {
|
|
53
|
+
lineStartOffsets.push(offset);
|
|
54
|
+
offset += line.length + 1; // +1 for \n(\r\n 也足够用来定位)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function findLineIndexByOffset(idx) {
|
|
58
|
+
// 二分找 <= idx 的最大 lineStartOffsets
|
|
59
|
+
let l = 0, r = lineStartOffsets.length - 1, ans = 0;
|
|
60
|
+
while (l <= r) {
|
|
61
|
+
const m = (l + r) >> 1;
|
|
62
|
+
if (lineStartOffsets[m] <= idx) { ans = m; l = m + 1; }
|
|
63
|
+
else r = m - 1;
|
|
64
|
+
}
|
|
65
|
+
return ans;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function extractLabelAround(lineIndex) {
|
|
69
|
+
// 往上最多找 12 行(你可以按需调大)
|
|
70
|
+
const start = Math.max(0, lineIndex - 12);
|
|
71
|
+
const window = lines.slice(start, lineIndex).join("\n");
|
|
72
|
+
|
|
73
|
+
// 先找 ApiModelProperty(value="xxx")
|
|
74
|
+
const api = /@ApiModelProperty\s*\(\s*value\s*=\s*"([^"]+)"/.exec(window);
|
|
75
|
+
if (api?.[1]) return api[1];
|
|
76
|
+
|
|
77
|
+
// 再找 CheckV(desc="xxx")
|
|
78
|
+
const check = /@CheckV\s*\(\s*desc\s*=\s*"([^"]+)"/.exec(window);
|
|
79
|
+
if (check?.[1]) return check[1];
|
|
80
|
+
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
let match;
|
|
85
|
+
while ((match = fieldRegex.exec(content)) !== null) {
|
|
86
|
+
const javaType = match[1];
|
|
87
|
+
const field = match[2];
|
|
88
|
+
|
|
89
|
+
const lineIndex = findLineIndexByOffset(match.index);
|
|
90
|
+
const label = extractLabelAround(lineIndex) || field;
|
|
91
|
+
|
|
92
|
+
const tsType = javaToTsType(javaType);
|
|
93
|
+
|
|
94
|
+
jsonResult.push({ field, label });
|
|
95
|
+
|
|
96
|
+
tsFields.push(` /** ${label} */\n ${field}: ${tsType};`);
|
|
97
|
+
formFields.push(` /** ${label} */\n ${field}: ${defaultValue(tsType)}`);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// 写文件
|
|
101
|
+
fs.writeFileSync("output.json", JSON.stringify(jsonResult, null, 2), "utf8");
|
|
102
|
+
|
|
103
|
+
fs.writeFileSync(
|
|
104
|
+
"model.ts",
|
|
105
|
+
`export interface Model {\n${tsFields.join("\n\n")}\n}\n`,
|
|
106
|
+
"utf8"
|
|
107
|
+
);
|
|
108
|
+
|
|
109
|
+
fs.writeFileSync(
|
|
110
|
+
"form.js",
|
|
111
|
+
`export const formModel = {\n${formFields.join(",\n\n")}\n};\n`,
|
|
112
|
+
"utf8"
|
|
113
|
+
);
|
|
114
|
+
|
|
115
|
+
console.log("✅ 已生成 output.json / model.ts / form.js");
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|