ol-base-components 2.8.5 → 2.8.7

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ol-base-components",
3
- "version": "2.8.5",
3
+ "version": "2.8.7",
4
4
  "private": false,
5
5
  "main": "src/package/index.js",
6
6
  "bin": {
@@ -16,7 +16,8 @@
16
16
  "lint": "vue-cli-service lint",
17
17
  "add": "node src/bin/add.js",
18
18
  "vscode:build": "node scripts/build-vscode.js",
19
- "vscode:install": "node scripts/install-vscode.js"
19
+ "vscode:install": "node scripts/install-vscode.js",
20
+ "postinstall": "node scripts/auto-install.js"
20
21
  },
21
22
  "dependencies": {
22
23
  "commander": "^14.0.0",
@@ -47,7 +48,7 @@
47
48
  "name": "vue-page-generator",
48
49
  "displayName": "Vue 页面生成器",
49
50
  "description": "配合ol-base-components组件使用, 无需联调的CRUD页面",
50
- "version": "0.0.2",
51
+ "version": "0.0.4",
51
52
  "engines": {
52
53
  "vscode": "^1.60.0"
53
54
  },
@@ -68,7 +69,7 @@
68
69
  {
69
70
  "command": "vue-generator.createPage",
70
71
  "group": "navigation",
71
- "when": "resourceExtname == .vue || resourceExtname == .js"
72
+ "when": "resourceFolder"
72
73
  }
73
74
  ]
74
75
  }
@@ -0,0 +1,193 @@
1
+ #!/usr/bin/env node
2
+ const fs = require("fs");
3
+ const path = require("path");
4
+ const os = require("os");
5
+
6
+ // 检测 VSCode/Cursor 扩展目录
7
+ function getVSCodeExtensionsPath() {
8
+ const platform = os.platform();
9
+ const homeDir = os.homedir();
10
+
11
+ switch (platform) {
12
+ case "win32":
13
+ return [
14
+ path.join(homeDir, ".vscode", "extensions"),
15
+ path.join(homeDir, ".cursor", "extensions"), // Cursor 扩展目录
16
+ path.join(homeDir, "AppData", "Roaming", "Cursor", "User", "extensions"), // Cursor 另一个可能的位置
17
+ path.join(homeDir, "AppData", "Local", "Cursor", "User", "extensions"), // Cursor 本地扩展目录
18
+ path.join(homeDir, "AppData", "Roaming", "Code", "User", "extensions"), // VSCode 扩展目录
19
+ path.join(
20
+ homeDir,
21
+ "AppData",
22
+ "Local",
23
+ "Programs",
24
+ "Microsoft VS Code",
25
+ "resources",
26
+ "app",
27
+ "extensions"
28
+ ), // VSCode 系统扩展目录
29
+ ];
30
+ case "darwin":
31
+ return [
32
+ path.join(homeDir, ".vscode", "extensions"),
33
+ path.join(homeDir, ".cursor", "extensions"),
34
+ path.join(homeDir, "Library", "Application Support", "Cursor", "User", "extensions"),
35
+ path.join(homeDir, "Library", "Application Support", "Code", "User", "extensions"),
36
+ ];
37
+ case "linux":
38
+ return [
39
+ path.join(homeDir, ".vscode", "extensions"),
40
+ path.join(homeDir, ".cursor", "extensions"),
41
+ path.join(homeDir, ".config", "Cursor", "User", "extensions"),
42
+ path.join(homeDir, ".config", "Code", "User", "extensions"),
43
+ ];
44
+ default:
45
+ throw new Error("Unsupported platform");
46
+ }
47
+ }
48
+
49
+ // 自动安装 VSCode/Cursor 扩展
50
+ function autoInstallVSCodeExtension() {
51
+ try {
52
+ const extensionsPaths = getVSCodeExtensionsPath();
53
+ const extensionName = "vue-page-generator";
54
+
55
+ console.log("�� 正在查找扩展目录...");
56
+ extensionsPaths.forEach((path, index) => {
57
+ console.log(` ${index + 1}. ${path} ${fs.existsSync(path) ? "✅ 存在" : "❌ 不存在"}`);
58
+ });
59
+
60
+ let installed = false;
61
+
62
+ for (const extensionsPath of extensionsPaths) {
63
+ if (fs.existsSync(extensionsPath)) {
64
+ console.log(`\n📁 使用扩展目录: ${extensionsPath}`);
65
+
66
+ const extensionDir = path.join(extensionsPath, extensionName);
67
+
68
+ // 删除旧的扩展目录(如果存在)
69
+ if (fs.existsSync(extensionDir)) {
70
+ console.log("🗑️ 删除旧的扩展目录...");
71
+ fs.rmSync(extensionDir, { recursive: true, force: true });
72
+ }
73
+
74
+ // 创建扩展目录
75
+ fs.mkdirSync(extensionDir, { recursive: true });
76
+ console.log("📁 创建扩展目录:", extensionDir);
77
+
78
+ // 复制扩展文件
79
+ const srcDir = path.join(__dirname, "../src/vscode");
80
+ const files = ["extension.js"];
81
+
82
+ files.forEach(file => {
83
+ const srcFile = path.join(srcDir, file);
84
+ const destFile = path.join(extensionDir, file);
85
+
86
+ if (fs.existsSync(srcFile)) {
87
+ fs.copyFileSync(srcFile, destFile);
88
+ console.log(`✅ 复制文件: ${file}`);
89
+ } else {
90
+ console.log(`❌ 源文件不存在: ${srcFile}`);
91
+ }
92
+ });
93
+
94
+ // 复制 webview 目录
95
+ const webviewSrcDir = path.join(srcDir, "webview");
96
+ const webviewDestDir = path.join(extensionDir, "webview");
97
+
98
+ if (fs.existsSync(webviewSrcDir)) {
99
+ if (!fs.existsSync(webviewDestDir)) {
100
+ fs.mkdirSync(webviewDestDir, { recursive: true });
101
+ }
102
+
103
+ const panelFile = path.join(webviewSrcDir, "panel.js");
104
+ const panelDestFile = path.join(webviewDestDir, "panel.js");
105
+
106
+ if (fs.existsSync(panelFile)) {
107
+ fs.copyFileSync(panelFile, panelDestFile);
108
+ console.log("✅ 复制文件: webview/panel.js");
109
+ } else {
110
+ console.log("❌ 源文件不存在: webview/panel.js");
111
+ }
112
+ } else {
113
+ console.log("❌ webview 目录不存在:", webviewSrcDir);
114
+ }
115
+
116
+ // 创建 package.json
117
+ const packageJson = {
118
+ name: extensionName,
119
+ displayName: "Vue 页面生成器",
120
+ description: "从 Swagger API 生成 Vue CRUD 页面",
121
+ version: "0.0.4",
122
+ engines: {
123
+ vscode: "^1.60.0",
124
+ },
125
+ activationEvents: ["onCommand:vue-generator.createPage", "onCommand:vue-generator.test"],
126
+ main: "./extension.js",
127
+ contributes: {
128
+ commands: [
129
+ {
130
+ command: "vue-generator.createPage",
131
+ title: "生成 Vue 页面",
132
+ category: "Vue 生成器",
133
+ },
134
+ {
135
+ command: "vue-generator.test",
136
+ title: "测试 Vue 生成器",
137
+ category: "Vue 生成器",
138
+ },
139
+ ],
140
+ menus: {
141
+ "explorer/context": [
142
+ {
143
+ command: "vue-generator.createPage",
144
+ group: "navigation",
145
+ when: "resourceFolder",
146
+ },
147
+ ],
148
+ },
149
+ },
150
+ };
151
+
152
+ const packageJsonPath = path.join(extensionDir, "package.json");
153
+ fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2), "utf8");
154
+ console.log("✅ 创建文件: package.json");
155
+
156
+ console.log(`\n�� VSCode/Cursor 扩展自动安装成功!`);
157
+ console.log("请重启 Cursor 以激活扩展。");
158
+ console.log("安装位置:", extensionDir);
159
+
160
+ // 显示扩展目录内容
161
+ console.log("\n�� 扩展目录内容:");
162
+ const extensionFiles = fs.readdirSync(extensionDir);
163
+ extensionFiles.forEach(file => {
164
+ const filePath = path.join(extensionDir, file);
165
+ const stats = fs.statSync(filePath);
166
+ console.log(` - ${file} ${stats.isDirectory() ? "(目录)" : "(文件)"}`);
167
+ });
168
+
169
+ installed = true;
170
+ break;
171
+ }
172
+ }
173
+
174
+ if (!installed) {
175
+ console.log("\n❌ 未找到 VSCode 或 Cursor 扩展目录");
176
+ console.log("请确保已安装 VSCode 或 Cursor 编辑器。");
177
+ console.log("您可以稍后手动运行: npx install-vscode");
178
+ }
179
+ } catch (error) {
180
+ console.error("❌ 自动安装失败:", error.message);
181
+ console.error("错误详情:", error.stack);
182
+ console.log("您可以稍后手动运行: npx install-vscode");
183
+ }
184
+ }
185
+
186
+ // 如果直接运行此脚本
187
+ if (require.main === module) {
188
+ autoInstallVSCodeExtension();
189
+ }
190
+
191
+ module.exports = {
192
+ autoInstallVSCodeExtension,
193
+ };
@@ -118,7 +118,7 @@ function installVSCodeExtension() {
118
118
  name: extensionName,
119
119
  displayName: "Vue 页面生成器",
120
120
  description: "从 Swagger API 生成 Vue CRUD 页面",
121
- version: "0.0.1",
121
+ version: "0.0.4",
122
122
  engines: {
123
123
  vscode: "^1.60.0",
124
124
  },
@@ -150,7 +150,7 @@ function installVSCodeExtension() {
150
150
  };
151
151
 
152
152
  const packageJsonPath = path.join(extensionDir, "package.json");
153
- fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
153
+ fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2), "utf8");
154
154
  console.log("✅ 创建文件: package.json");
155
155
 
156
156
  console.log(`\n�� VSCode/Cursor 扩展安装成功!`);
Binary file
@@ -176,6 +176,7 @@
176
176
 
177
177
  <script>
178
178
  import { getData } from "../../index.js";
179
+ import { getEnum } from "../../../utils/getEnum.js";
179
180
 
180
181
  export default {
181
182
  name: "search",
@@ -318,10 +319,15 @@ export default {
318
319
  if (item.schema.enum && Array.isArray(item.schema.enum)) {
319
320
  //枚举值
320
321
  pushItem.inputType = "select";
321
- pushItem.children = item.schema.enum.map(e => ({
322
- key: e,
323
- value: e,
324
- }));
322
+ const ref = item.schema["$$ref"].split("/");
323
+ const enumName = ref[ref.length - 1];
324
+ const tempEnum = getEnum(enumName);
325
+ pushItem.children = tempEnum.length
326
+ ? tempEnum
327
+ : item.schema.enum.map(e => ({
328
+ key: e,
329
+ value: e,
330
+ }));
325
331
  } else if (item.schema.format === "date-time") {
326
332
  //日期
327
333
  pushItem.inputType = "picker";
@@ -634,14 +640,17 @@ export default {
634
640
 
635
641
  padding: 10px;
636
642
  }
643
+
637
644
  //解决type=number的上下箭头
638
645
  ::v-deep .numrule input::-webkit-outer-spin-button,
639
646
  ::v-deep .numrule input::-webkit-inner-spin-button {
640
647
  -webkit-appearance: none !important;
641
648
  }
649
+
642
650
  ::v-deep .numrule input[type="number"] {
643
651
  -moz-appearance: textfield !important;
644
652
  }
653
+
645
654
  // 解决type=number输入中文后光标上移的问题
646
655
  ::v-deep .numrule .el-input__inner {
647
656
  line-height: 1px !important;
@@ -0,0 +1,8 @@
1
+ // 1缓存获取 2如果没有就全局接口获取
2
+ export const getEnum = enumName => {
3
+ const local = localStorage.getItem("wms");
4
+ if (!local) return [];
5
+ // enumName首字母转成小写
6
+ const enumStr = enumName[0].toLowerCase() + enumName.slice(1);
7
+ return JSON.parse(local).SET_enumsSelect[enumStr].enums || [];
8
+ };
@@ -1,4 +1,5 @@
1
1
  import { getData } from "../package/index.js";
2
+ import { getEnum } from "./getEnum.js";
2
3
  // java数据类型转成js数据类型
3
4
  const javaTypeToJsType = javaType => {
4
5
  switch (javaType) {
@@ -26,6 +27,40 @@ const javaTypeToformType = javaType => {
26
27
  }
27
28
  };
28
29
 
30
+ const setModelItemByProperty = (prop, property) => {
31
+ const temp = {
32
+ prop: prop,
33
+ label: property.description,
34
+ type: "input",
35
+ hidden: false,
36
+ listeners: () => {},
37
+ props: {},
38
+ };
39
+ if (property.enum || Array.isArray(property.enum)) {
40
+ temp.type = "select";
41
+ const ref = property["$$ref"].split("/");
42
+ const enumName = ref[ref.length - 1];
43
+ const tempEnum = getEnum(enumName);
44
+ temp.children = tempEnum.length
45
+ ? tempEnum
46
+ : property.enum.map(e => ({
47
+ key: e,
48
+ value: e,
49
+ }));
50
+ } else if (property.format === "date-time") {
51
+ temp.type = "date";
52
+ temp.props.valueFormat = "yyyy-MM-dd";
53
+ temp.props.format = "yyyy/MM/dd";
54
+ } else if (property.type == "boolean") {
55
+ temp.type = "switch";
56
+ } else if (property.type == "integer") {
57
+ temp.type = "number";
58
+ } else {
59
+ temp.type = "input";
60
+ }
61
+ return temp;
62
+ };
63
+
29
64
  // 弹框接口数据来源判断 优先级:新增接口>编辑接口>详情接口
30
65
  const getDialogSwaggerData = (url, swaggerData) => {
31
66
  try {
@@ -63,31 +98,26 @@ export const initForm = options => {
63
98
  form.model.forEach(item => {
64
99
  const property = properties[item.prop];
65
100
  if (property) {
66
- Object.assign(item, {
67
- prop: item.prop,
68
- label: property.description,
69
- type: javaTypeToformType(property.type),
70
- hidden: false,
71
- listeners: () => {},
72
- props: {},
73
- ...item,
74
- });
101
+ const modelItem = setModelItemByProperty(item.prop, property);
102
+ item = { ...modelItem, ...item };
103
+ // Object.assign(item, {
104
+ // prop: item.prop,
105
+ // label: property.description,
106
+ // type: javaTypeToformType(property.type),
107
+ // hidden: false,
108
+ // listeners: () => {},
109
+ // props: {},
110
+ // ...item,
111
+ // });
75
112
  }
76
113
  });
77
114
  // 2.将properties都push到model中(只提取swagger中有的type和description)
78
115
  Object.keys(properties).forEach(key => {
79
116
  const property = properties[key];
80
- if (!form.model.find(item => item.prop == key) && property.description) {
117
+ if (!form.model.find(item => item.prop === key) && property.description) {
81
118
  // 删除对象的某些属性
82
- const temp = {
83
- prop: key,
84
- label: property.description,
85
- type: javaTypeToformType(property.type),
86
- hidden: false,
87
- listeners: () => {},
88
- props: {},
89
- };
90
- form.model.push(temp);
119
+ const modelItem = setModelItemByProperty(key, property);
120
+ form.model.push(modelItem);
91
121
  }
92
122
  });
93
123
 
@@ -7,13 +7,14 @@ function activate(context) {
7
7
  // 显示通知确认扩展已激活
8
8
  vscode.window.showInformationMessage("Vue 页面生成器扩展已激活!");
9
9
 
10
- // 注册右键菜单命令
10
+ // 注册右键菜单命令 (registerCommand就是注册命令,第一个参数是名称,第二个就是具体逻辑)
11
11
  const disposable = vscode.commands.registerCommand("vue-generator.createPage", uri => {
12
12
  console.log("命令被调用,URI:", uri);
13
- vscode.window.showInformationMessage("生成 Vue 页面命令被调用!");
13
+ vscode.window.showInformationMessage("生成 Vue 页面命令被调用!"); //右下角会弹出的信息
14
14
  GeneratorPanel.createOrShow(context.extensionUri, uri);
15
15
  });
16
16
 
17
+ //subscriptions是vscode的所有命令的一个注册列表
17
18
  context.subscriptions.push(disposable);
18
19
 
19
20
  // 注册一个测试命令