create-pubinfo 2.1.3 → 2.1.5

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 (74) hide show
  1. package/dist/cli.js +1 -1
  2. package/dist/{helper-DTE6TM8O.js → helper.js} +74 -22
  3. package/dist/index.d.ts +6 -1
  4. package/dist/index.js +1 -1
  5. package/package.json +4 -3
  6. package/templates/pubinfo-monorepo/.browserslistrc +5 -0
  7. package/templates/pubinfo-monorepo/.editorconfig +10 -0
  8. package/templates/pubinfo-monorepo/.vscode/settings.json +50 -0
  9. package/templates/pubinfo-monorepo/_gitignore +38 -0
  10. package/templates/pubinfo-monorepo/_npmrc +5 -0
  11. package/templates/pubinfo-monorepo/apps/basic/.env +2 -0
  12. package/templates/pubinfo-monorepo/apps/basic/.env.development +4 -0
  13. package/templates/pubinfo-monorepo/apps/basic/.env.production +10 -0
  14. package/templates/pubinfo-monorepo/apps/basic/index.html +47 -0
  15. package/templates/pubinfo-monorepo/apps/basic/openapi.config.ts.hbs +33 -0
  16. package/templates/pubinfo-monorepo/apps/basic/package.json.hbs +26 -0
  17. package/templates/pubinfo-monorepo/apps/basic/pubinfo.config.ts +9 -0
  18. package/templates/pubinfo-monorepo/apps/basic/public/browser_upgrade/chrome.png +0 -0
  19. package/templates/pubinfo-monorepo/apps/basic/public/browser_upgrade/edge.png +0 -0
  20. package/templates/pubinfo-monorepo/apps/basic/public/browser_upgrade/index.css +49 -0
  21. package/templates/pubinfo-monorepo/apps/basic/public/loading.css +92 -0
  22. package/templates/pubinfo-monorepo/apps/basic/src/App.vue +7 -0
  23. package/templates/pubinfo-monorepo/apps/basic/src/api/modules/auth/index.ts +3 -0
  24. package/templates/pubinfo-monorepo/apps/basic/src/api/modules/auth/renzhengfuwu.ts +145 -0
  25. package/templates/pubinfo-monorepo/apps/basic/src/api/modules/auth/typings.d.ts +97 -0
  26. package/templates/pubinfo-monorepo/apps/basic/src/api/request.ts +125 -0
  27. package/templates/pubinfo-monorepo/apps/basic/src/assets/icons/logo.svg +1 -0
  28. package/templates/pubinfo-monorepo/apps/basic/src/assets/icons/process-management.svg +1 -0
  29. package/templates/pubinfo-monorepo/apps/basic/src/assets/icons/workbench.svg +1 -0
  30. package/templates/pubinfo-monorepo/apps/basic/src/assets/images/login-bg.webp +0 -0
  31. package/templates/pubinfo-monorepo/apps/basic/src/assets/images/login-bg_dark.webp +0 -0
  32. package/templates/pubinfo-monorepo/apps/basic/src/assets/images/login-small.png +0 -0
  33. package/templates/pubinfo-monorepo/apps/basic/src/assets/images/login-small_dark.webp +0 -0
  34. package/templates/pubinfo-monorepo/apps/basic/src/components/UIProvider/index.vue +51 -0
  35. package/templates/pubinfo-monorepo/apps/basic/src/layouts/index.vue +48 -0
  36. package/templates/pubinfo-monorepo/apps/basic/src/main.ts.hbs +26 -0
  37. package/templates/pubinfo-monorepo/apps/basic/src/modules/captcha.ts +8 -0
  38. package/templates/pubinfo-monorepo/apps/basic/src/modules/rbac.ts +10 -0
  39. package/templates/pubinfo-monorepo/apps/basic/src/routes/index.ts +71 -0
  40. package/templates/pubinfo-monorepo/apps/basic/src/routes/modules/demo/breadcrumb.example.ts +62 -0
  41. package/templates/pubinfo-monorepo/apps/basic/src/routes/modules/demo/link.ts +15 -0
  42. package/templates/pubinfo-monorepo/apps/basic/src/routes/modules/demo/multilevel.menu.example.ts +68 -0
  43. package/templates/pubinfo-monorepo/apps/basic/src/routes/modules/demo/other.page.ts +37 -0
  44. package/templates/pubinfo-monorepo/apps/basic/src/routes/modules/demo/single.ts +14 -0
  45. package/templates/pubinfo-monorepo/apps/basic/src/settings.ts.hbs +8 -0
  46. package/templates/pubinfo-monorepo/apps/basic/src/stores/index.ts +2 -0
  47. package/templates/pubinfo-monorepo/apps/basic/src/stores/modules/conter.ts +16 -0
  48. package/templates/pubinfo-monorepo/apps/basic/src/views/demo/breadcrumb_example/detail1.vue +11 -0
  49. package/templates/pubinfo-monorepo/apps/basic/src/views/demo/breadcrumb_example/detail2.vue +11 -0
  50. package/templates/pubinfo-monorepo/apps/basic/src/views/demo/breadcrumb_example/list1.vue +11 -0
  51. package/templates/pubinfo-monorepo/apps/basic/src/views/demo/breadcrumb_example/list2.vue +11 -0
  52. package/templates/pubinfo-monorepo/apps/basic/src/views/demo/multilevel_menu_example/level2/level3/page1.vue +11 -0
  53. package/templates/pubinfo-monorepo/apps/basic/src/views/demo/multilevel_menu_example/level2/level3/page2.vue +11 -0
  54. package/templates/pubinfo-monorepo/apps/basic/src/views/demo/multilevel_menu_example/level2/page.vue +11 -0
  55. package/templates/pubinfo-monorepo/apps/basic/src/views/demo/multilevel_menu_example/page.vue +11 -0
  56. package/templates/pubinfo-monorepo/apps/basic/src/views/demo/other_page/des.vue +13 -0
  57. package/templates/pubinfo-monorepo/apps/basic/src/views/demo/other_page/index.vue +25 -0
  58. package/templates/pubinfo-monorepo/apps/basic/src/views/demo/preview-empty/index.vue +17 -0
  59. package/templates/pubinfo-monorepo/apps/basic/src/views/demo/single/index.vue +13 -0
  60. package/templates/pubinfo-monorepo/apps/basic/src/views/system/index.vue +5 -0
  61. package/templates/pubinfo-monorepo/apps/basic/src/views/system/login/components/LoginForm.vue +29 -0
  62. package/templates/pubinfo-monorepo/apps/basic/src/views/system/login/components/LoginWithPhone.vue +213 -0
  63. package/templates/pubinfo-monorepo/apps/basic/src/views/system/login/components/PasswordLogin.vue +178 -0
  64. package/templates/pubinfo-monorepo/apps/basic/src/views/system/login/components/Savephone.vue +17 -0
  65. package/templates/pubinfo-monorepo/apps/basic/src/views/system/login/components/Useragreement.vue +26 -0
  66. package/templates/pubinfo-monorepo/apps/basic/src/views/system/login/composables.ts +63 -0
  67. package/templates/pubinfo-monorepo/apps/basic/src/views/system/login/index.vue +142 -0
  68. package/templates/pubinfo-monorepo/apps/basic/tsconfig.json +3 -0
  69. package/templates/pubinfo-monorepo/apps/basic/uno.config.ts +17 -0
  70. package/templates/pubinfo-monorepo/eslint.config.ts +3 -0
  71. package/templates/pubinfo-monorepo/package.json.hbs +46 -0
  72. package/templates/pubinfo-monorepo/pnpm-lock.yaml +12686 -0
  73. package/templates/pubinfo-monorepo/pnpm-workspace.yaml +11 -0
  74. package/templates/pubinfo-monorepo/stylelint.config.js +3 -0
package/dist/cli.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { a as validateInput, n as readPackageJSON, r as run, t as bootstrop } from "./helper-DTE6TM8O.js";
2
+ import { a as validateInput, n as readPackageJSON, r as run, t as bootstrop } from "./helper.js";
3
3
  import { checkbox, confirm, input, select } from "@inquirer/prompts";
4
4
  import { logger } from "@pubinfo/shared";
5
5
  import { Command } from "commander";
@@ -7,6 +7,7 @@ import { copy } from "fs-extra";
7
7
  import fs, { existsSync, renameSync } from "node:fs";
8
8
  import colors from "ansi-colors";
9
9
  import nodePlop from "node-plop";
10
+ import { spawn } from "node:child_process";
10
11
  import fonts from "cfonts";
11
12
 
12
13
  //#region src/core/copy.ts
@@ -20,13 +21,51 @@ async function copyTemplate(options) {
20
21
  await copy(resolve(templateDir, templateName), targetDir);
21
22
  }
22
23
 
24
+ //#endregion
25
+ //#region src/git.ts
26
+ function runGitCommand(args, cwd$1) {
27
+ return new Promise((resolvePromise, rejectPromise) => {
28
+ const child = spawn("git", args, {
29
+ cwd: cwd$1,
30
+ stdio: "ignore"
31
+ });
32
+ child.on("error", rejectPromise);
33
+ child.on("close", (code) => {
34
+ if (code === 0) {
35
+ resolvePromise();
36
+ return;
37
+ }
38
+ rejectPromise(/* @__PURE__ */ new Error(`git ${args.join(" ")} exited with code ${code}`));
39
+ });
40
+ });
41
+ }
42
+ async function initGitRepository(targetDir) {
43
+ if (!targetDir || !existsSync(targetDir)) return;
44
+ if (existsSync(resolve(targetDir, ".git"))) {
45
+ logger.info("检测到已存在 Git 仓库,跳过初始化。");
46
+ return;
47
+ }
48
+ try {
49
+ await runGitCommand(["init"], targetDir);
50
+ logger.success("已在项目目录中初始化 Git 仓库。");
51
+ } catch (error) {
52
+ logger.warn("Git 初始化失败,请手动执行 `git init`。");
53
+ logger.debug(error);
54
+ }
55
+ }
56
+
23
57
  //#endregion
24
58
  //#region src/core/generate.ts
25
59
  const __dirname = dirname(fileURLToPath(import.meta.url));
60
+ const RBAC_FILE_PATHS = {
61
+ "pubinfo-app": ["src/modules/rbac.ts"],
62
+ "pubinfo-module": ["playground/src/modules/rbac.ts"],
63
+ "pubinfo-monorepo": ["apps/basic/src/modules/rbac.ts", "src/modules/rbac.ts"]
64
+ };
26
65
  async function generate(options) {
27
66
  const root = cwd();
28
67
  const plop = await nodePlop();
29
- const { templateName, templateDir, targetDir } = {
68
+ const { templateName, templateDir, targetDir, templatePath } = {
30
69
  templateDir: resolve(__dirname, "../templates"),
31
70
  targetDir: options.dir ? resolve(root, options.dir) : void 0,
32
71
  openapi: false,
@@ -37,32 +76,34 @@ async function generate(options) {
37
76
  ...options,
38
77
  rbac: options.modules.includes("rbac")
39
78
  };
79
+ const baseTemplateDir = templatePath || resolve(templateDir, templateName);
80
+ const normalizedBase = baseTemplateDir.replace(/\\/g, "/");
40
81
  plop.setGenerator("generate", { actions: () => {
41
82
  return [{
42
83
  type: "addMany",
43
84
  destination: targetDir,
44
- base: `${templateDir}/${templateName}`.replace(/\\/g, "/"),
45
- templateFiles: `${templateDir}/${templateName}/**/*.hbs`.replace(/\\/g, "/"),
85
+ base: normalizedBase,
86
+ templateFiles: `${normalizedBase}/**/*.hbs`,
46
87
  globOptions: { dot: true }
47
88
  }, async function copyRawFiles() {
48
- const baseDir = resolve(templateDir, templateName);
89
+ const skipRbacFiles = new Set(RBAC_FILE_PATHS[templateName] || []);
49
90
  async function walk(dir) {
50
91
  const entries = await fs.promises.readdir(dir, { withFileTypes: true });
51
92
  for (const e of entries) {
52
93
  const srcPath = resolve(dir, e.name);
53
- const rel = relative(baseDir, srcPath).split(sep).join(posix.sep);
94
+ const rel = relative(baseTemplateDir, srcPath).split(sep).join(posix.sep);
54
95
  if (e.isDirectory()) {
55
96
  await walk(srcPath);
56
97
  continue;
57
98
  }
58
99
  if (e.name.endsWith(".hbs")) continue;
59
- if (!plopOptions.rbac && rel === "src/modules/rbac.ts") continue;
100
+ if (!plopOptions.rbac && skipRbacFiles.has(rel)) continue;
60
101
  const targetPath = resolve(targetDir, rel);
61
102
  await fs.promises.mkdir(dirname(targetPath), { recursive: true });
62
103
  await fs.promises.copyFile(srcPath, targetPath);
63
104
  }
64
105
  }
65
- await walk(baseDir);
106
+ await walk(baseTemplateDir);
66
107
  return `Copied raw files from ${templateName}`;
67
108
  }];
68
109
  } });
@@ -75,6 +116,7 @@ async function generate(options) {
75
116
  const newPath = resolve(targetDir, newName || oldName);
76
117
  if (existsSync(oldPath)) renameSync(oldPath, newPath);
77
118
  }
119
+ await initGitRepository(targetDir);
78
120
  logger.success(`${colors.green("项目模板初始化完成.")}`);
79
121
  }
80
122
 
@@ -91,12 +133,12 @@ async function interaction() {
91
133
  try {
92
134
  const answer = {};
93
135
  answer.dir = await input({
94
- message: "目录名称(dir",
136
+ message: "目录名称 (dir)",
95
137
  default: "my-app",
96
138
  validate: validateInput
97
139
  });
98
140
  answer.key = await input({
99
- message: "项目标识(key",
141
+ message: "项目标识 (key)",
100
142
  default: answer.dir,
101
143
  validate: validateInput
102
144
  });
@@ -106,18 +148,25 @@ async function interaction() {
106
148
  answer.templateName = await select({
107
149
  message: "选择模板类型",
108
150
  default: "pubinfo-app",
109
- choices: [{
110
- name: "Web应用(app)",
111
- value: "pubinfo-app"
112
- }, {
113
- name: "模块插件(module)",
114
- value: "pubinfo-module"
115
- }]
151
+ choices: [
152
+ {
153
+ name: "Web应用 (app)",
154
+ value: "pubinfo-app"
155
+ },
156
+ {
157
+ name: "Web应用 (monorepo)",
158
+ value: "pubinfo-monorepo"
159
+ },
160
+ {
161
+ name: "模块插件 (module)",
162
+ value: "pubinfo-module"
163
+ }
164
+ ]
116
165
  });
117
166
  answer.modules = await checkbox({
118
167
  message: "选择需要的模块",
119
168
  choices: [{
120
- name: "用户权限管理(RBAC",
169
+ name: "用户权限管理 (RBAC)",
121
170
  value: "rbac",
122
171
  checked: true
123
172
  }]
@@ -147,14 +196,17 @@ async function run(version$1) {
147
196
  var package_default = {
148
197
  name: "create-pubinfo",
149
198
  type: "module",
150
- version: "2.1.3",
199
+ version: "2.1.5",
151
200
  description: "初始化项目框架",
152
201
  author: "Werheng <werheng.zhang@gmail.com>",
153
202
  license: "MIT",
154
- exports: { ".": {
155
- "types": "./dist/index.d.ts",
156
- "default": "./dist/index.js"
157
- } },
203
+ exports: {
204
+ ".": {
205
+ "types": "./dist/index.d.ts",
206
+ "default": "./dist/index.js"
207
+ },
208
+ "./package.json": "./package.json"
209
+ },
158
210
  main: "./dist/index.js",
159
211
  module: "./dist/index.js",
160
212
  types: "./dist/index.d.ts",
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  //#region src/interface.d.ts
2
- type TemplateName = 'pubinfo-app' | 'pubinfo-module';
2
+ type TemplateName = 'pubinfo-app' | 'pubinfo-module' | 'pubinfo-monorepo';
3
3
  type Module = 'rbac';
4
4
  interface Options {
5
5
  /**
@@ -28,6 +28,10 @@ interface GenerateOptions extends Options {
28
28
  * 版本号
29
29
  */
30
30
  version: string;
31
+ /**
32
+ * 自定义模板目录
33
+ */
34
+ templatePath?: string;
31
35
  /**
32
36
  * 模板文件夹
33
37
  */
@@ -77,6 +81,7 @@ declare function readPackageJSON(): {
77
81
  types: string;
78
82
  default: string;
79
83
  };
84
+ "./package.json": string;
80
85
  };
81
86
  main: string;
82
87
  module: string;
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- import { i as interaction, n as readPackageJSON, o as generate, r as run, s as copyTemplate } from "./helper-DTE6TM8O.js";
1
+ import { i as interaction, n as readPackageJSON, o as generate, r as run, s as copyTemplate } from "./helper.js";
2
2
 
3
3
  export { copyTemplate, generate, interaction, readPackageJSON, run };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "create-pubinfo",
3
3
  "type": "module",
4
- "version": "2.1.3",
4
+ "version": "2.1.5",
5
5
  "description": "初始化项目框架",
6
6
  "author": "Werheng <werheng.zhang@gmail.com>",
7
7
  "license": "MIT",
@@ -9,7 +9,8 @@
9
9
  ".": {
10
10
  "types": "./dist/index.d.ts",
11
11
  "default": "./dist/index.js"
12
- }
12
+ },
13
+ "./package.json": "./package.json"
13
14
  },
14
15
  "main": "./dist/index.js",
15
16
  "module": "./dist/index.js",
@@ -37,7 +38,7 @@
37
38
  "ora": "^8.2.0",
38
39
  "rimraf": "^6.0.1",
39
40
  "semver": "^7.7.2",
40
- "@pubinfo/shared": "2.1.3"
41
+ "@pubinfo/shared": "2.1.5"
41
42
  },
42
43
  "devDependencies": {
43
44
  "@types/node": "^24.0.10"
@@ -0,0 +1,5 @@
1
+ # Browsers that we support
2
+
3
+ last 2 version
4
+ > 1%
5
+ not dead # no browsers without security updates
@@ -0,0 +1,10 @@
1
+ root = true
2
+
3
+ [*]
4
+ charset = utf-8
5
+ indent_style = space
6
+ indent_size = 2
7
+ end_of_line = lf
8
+ insert_final_newline = true
9
+ trim_trailing_whitespace = true
10
+ quote_type = single
@@ -0,0 +1,50 @@
1
+ {
2
+ // Disable the default formatter, use eslint instead
3
+ "prettier.enable": false,
4
+ "editor.formatOnSave": false,
5
+
6
+ // Auto fix
7
+ "editor.codeActionsOnSave": {
8
+ "source.fixAll.eslint": "explicit",
9
+ "source.organizeImports": "never"
10
+ },
11
+
12
+ // Silent the stylistic rules in you IDE, but still auto fix them
13
+ "eslint.rules.customizations": [
14
+ { "rule": "style/*", "severity": "off", "fixable": true },
15
+ { "rule": "format/*", "severity": "off", "fixable": true },
16
+ { "rule": "*-indent", "severity": "off", "fixable": true },
17
+ { "rule": "*-spacing", "severity": "off", "fixable": true },
18
+ { "rule": "*-spaces", "severity": "off", "fixable": true },
19
+ { "rule": "*-order", "severity": "off", "fixable": true },
20
+ { "rule": "*-dangle", "severity": "off", "fixable": true },
21
+ { "rule": "*-newline", "severity": "off", "fixable": true },
22
+ { "rule": "*quotes", "severity": "off", "fixable": true },
23
+ { "rule": "*semi", "severity": "off", "fixable": true }
24
+ ],
25
+
26
+ // Enable eslint for all supported languages
27
+ "eslint.validate": [
28
+ "javascript",
29
+ "javascriptreact",
30
+ "typescript",
31
+ "typescriptreact",
32
+ "vue",
33
+ "html",
34
+ "markdown",
35
+ "json",
36
+ "jsonc",
37
+ "yaml",
38
+ "toml",
39
+ "xml",
40
+ "gql",
41
+ "graphql",
42
+ "astro",
43
+ "svelte",
44
+ "css",
45
+ "less",
46
+ "scss",
47
+ "pcss",
48
+ "postcss"
49
+ ]
50
+ }
@@ -0,0 +1,38 @@
1
+ .pubinfo
2
+ .eslintcache
3
+ .stylelintcache
4
+ .gitmessage
5
+
6
+ # auto generated
7
+ auto-imports.d.ts
8
+ components.d.ts
9
+
10
+ .DS_Store
11
+ node_modules
12
+ dist
13
+ cache
14
+ coverage
15
+ .turbo
16
+ .eslintcache
17
+ .stylelintcache
18
+
19
+ # local env files
20
+ .env.local
21
+ .env.*.local
22
+
23
+ # Log files
24
+ npm-debug.log*
25
+ yarn-debug.log*
26
+ yarn-error.log*
27
+ pnpm-debug.log*
28
+ lerna-debug.log*
29
+
30
+ # Editor directories and files
31
+ .idea
32
+ # .vscode
33
+ *.suo
34
+ *.ntvs*
35
+ *.njsproj
36
+ *.sln
37
+ *.sw?
38
+
@@ -0,0 +1,5 @@
1
+ ignore-workspace-root-check=true
2
+ shamefully-hoist=true
3
+ strict-peer-dependencies=false
4
+ shell-emulator=true
5
+ max-old-space-size=4096
@@ -0,0 +1,2 @@
1
+ # 页面标题
2
+ VITE_APP_TITLE = 产数开发底座
@@ -0,0 +1,4 @@
1
+ # 接口请求地址,会设置到 axios 的 baseURL 参数上
2
+ VITE_APP_API_BASEURL = http://localhost:9099/pubinfo-sys
3
+ # 是否开启代理
4
+ VITE_OPEN_PROXY = false
@@ -0,0 +1,10 @@
1
+ # 接口请求地址,会设置到 axios 的 baseURL 参数上
2
+ VITE_APP_API_BASEURL = /pubinfo-sys
3
+ # 是否在打包时启用 Mock
4
+ VITE_BUILD_MOCK = false
5
+ # 是否在打包时生成 sourcemap
6
+ VITE_BUILD_SOURCEMAP = false
7
+ # 是否在打包时开启压缩,支持 gzip 和 brotli,例如 gzip,brotli
8
+ VITE_BUILD_COMPRESS =
9
+ # 是否在打包时启用传统浏览器兼容,可在 .browserslistrc 中进行具体配置
10
+ VITE_BUILD_LEGACY = false
@@ -0,0 +1,47 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <link rel="icon" href="src/assets/icons/logo.svg" type="image/svg+xml"/>
6
+ <link rel="stylesheet" href="/loading.css" />
7
+ <link rel="stylesheet" href="/browser_upgrade/index.css" />
8
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
9
+ <meta http-equiv="Expires" content="0">
10
+ <meta http-equiv="Pragma" content="no-cache">
11
+ <meta http-equiv="Cache-control" content="no-cache">
12
+ <meta http-equiv="Cache" content="no-cache">
13
+ <title>%VITE_APP_TITLE%</title>
14
+ </head>
15
+ <body>
16
+ <div id="app">
17
+ <div class="w-admin-home">
18
+ <div class="loading">
19
+ <div class="square"></div>
20
+ <div class="square"></div>
21
+ <div class="square"></div>
22
+ <div class="square"></div>
23
+ </div>
24
+ <div class="text">载入中</div>
25
+ </div>
26
+ <div id="browser-upgrade">
27
+ <div class="title">为了您的体验,推荐使用以下浏览器</div>
28
+ <div class="browsers">
29
+ <a href="https://www.microsoft.com/edge" target="_blank" class="browser">
30
+ <img class="browser-icon" src="/browser_upgrade/edge.png" />
31
+ <div class="browser-name">Mircosoft Edge</div>
32
+ </a>
33
+ <a href="https://www.google.cn/chrome/" target="_blank" class="browser">
34
+ <img class="browser-icon" src="/browser_upgrade/chrome.png" />
35
+ <div class="browser-name">Google Chrome</div>
36
+ </a>
37
+ </div>
38
+ </div>
39
+ </div>
40
+ <script>
41
+ if (!!window.ActiveXObject || 'ActiveXObject' in window) {
42
+ document.getElementById('browser-upgrade').style.display = 'block';
43
+ }
44
+ </script>
45
+ <script type="module" src="/src/main.ts"></script>
46
+ </body>
47
+ </html>
@@ -0,0 +1,33 @@
1
+ import { defineConfig } from '@pubinfo/openapi';
2
+ import { presetName } from '@pubinfo/preset-openapi';
3
+
4
+ export default defineConfig({
5
+ enabled: {{openapi}},
6
+
7
+ presets: [
8
+ // 小驼峰式命名
9
+ presetName({
10
+ functionName: 'camelCase',
11
+ }),
12
+ ],
13
+
14
+ imports: { '@/api/request': [{ name: 'basic', as: 'request' }] },
15
+ batch: [
16
+ {
17
+ input: 'http://localhost:9099/pubinfo-sys/v3/api-docs/auth',
18
+ output: './src/api/modules/auth',
19
+ imports: { '@/api/request': [{ name: 'auth', as: 'request' }] },
20
+ },
21
+ ],
22
+
23
+ hooks: {
24
+ customType(schema, namespace, defaultFn) {
25
+ // `int64` 在前端会精度丢失,可在此处调整对应字段的 `TS类型`
26
+ if (schema?.type === 'integer' && schema?.format === 'int64') {
27
+ return 'number';
28
+ }
29
+
30
+ return defaultFn(schema, namespace);
31
+ },
32
+ },
33
+ });
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "pubinfo-template",
3
+ "type": "module",
4
+ "private": true,
5
+ "scripts": {
6
+ "dev": "pubinfo dev",
7
+ "build": "pubinfo build",
8
+ "preview": "pubinfo preview",
9
+ "upgrade": "pubinfo upgrade",
10
+ "prepare": "pubinfo setup",
11
+ "openapi": "pnpx @pubinfo/openapi generate",
12
+ "icon:normalize": "pubinfo icon"
13
+ },
14
+ "dependencies": {
15
+ "@pubinfo/module-captcha": "{{version}}",
16
+ {{#if rbac}}
17
+ "@pubinfo/module-rbac": "{{version}}",
18
+ {{/if}}
19
+ "@vueuse/core": "^14.0.0",
20
+ "pubinfo": "{{version}}"
21
+ },
22
+ "devDependencies": {
23
+ "@pubinfo/openapi": "^0.9.1",
24
+ "@pubinfo/preset-openapi": "^0.9.1"
25
+ }
26
+ }
@@ -0,0 +1,9 @@
1
+ import { definePubinfoConfig } from 'pubinfo/node';
2
+
3
+ export default definePubinfoConfig({
4
+ vite: {
5
+ server: {
6
+ port: 5173,
7
+ },
8
+ },
9
+ });
@@ -0,0 +1,49 @@
1
+ #browser-upgrade {
2
+ position: absolute;
3
+ top: 0;
4
+ left: 0;
5
+ z-index: 10001;
6
+ display: none;
7
+ width: 100%;
8
+ height: 100%;
9
+ color: #736477;
10
+ user-select: none;
11
+ background-color: snow;
12
+ }
13
+
14
+ #browser-upgrade .title {
15
+ margin: 40px 0;
16
+ font-size: 24px;
17
+ text-align: center;
18
+ }
19
+
20
+ #browser-upgrade .browsers {
21
+ text-align: center;
22
+ }
23
+
24
+ #browser-upgrade .browsers .browser {
25
+ display: inline-block;
26
+ margin: 0 20px;
27
+ text-decoration: none;
28
+ cursor: pointer;
29
+ }
30
+
31
+ #browser-upgrade .browsers .browser .browser-icon {
32
+ display: block;
33
+ width: 50px;
34
+ height: 50px;
35
+ margin: 0 auto;
36
+ border: none;
37
+ }
38
+
39
+ #browser-upgrade .browsers .browser .browser-name {
40
+ padding-bottom: 2px;
41
+ margin-top: 10px;
42
+ color: #736477;
43
+ text-align: center;
44
+ border-bottom: 1px solid transparent;
45
+ }
46
+
47
+ #browser-upgrade .browsers .browser:hover .browser-name {
48
+ border-bottom: 1px solid #736477;
49
+ }
@@ -0,0 +1,92 @@
1
+ #app {
2
+ height: 100%;
3
+ }
4
+
5
+ .w-admin-home {
6
+ position: absolute;
7
+ top: 0;
8
+ left: 0;
9
+ z-index: 10000;
10
+ display: flex;
11
+ flex-direction: column;
12
+ align-items: center;
13
+ justify-content: center;
14
+ width: 100%;
15
+ height: 100%;
16
+ color: #736477;
17
+ user-select: none;
18
+ background-color: snow;
19
+ }
20
+
21
+ .w-admin-home .loading {
22
+ display: flex;
23
+ flex-wrap: wrap;
24
+ align-items: center;
25
+ justify-content: center;
26
+ width: 40px;
27
+ height: 40px;
28
+ }
29
+
30
+ .w-admin-home .loading .square {
31
+ display: flex;
32
+ align-items: center;
33
+ justify-content: center;
34
+ width: 20px;
35
+ height: 20px;
36
+ }
37
+
38
+ .w-admin-home .loading .square::before {
39
+ width: 10px;
40
+ height: 10px;
41
+ content: "";
42
+ border: 3px solid #8c858f;
43
+ border-radius: 15%;
44
+ animation: square-to-dot-animation 2s linear infinite;
45
+ }
46
+
47
+ .w-admin-home .loading .square:nth-child(1)::before {
48
+ animation-delay: calc(150ms * 1);
49
+ }
50
+
51
+ .w-admin-home .loading .square:nth-child(2)::before {
52
+ animation-delay: calc(150ms * 2);
53
+ }
54
+
55
+ .w-admin-home .loading .square:nth-child(3)::before {
56
+ animation-delay: calc(150ms * 3);
57
+ }
58
+
59
+ .w-admin-home .loading .square:nth-child(4)::before {
60
+ animation-delay: calc(150ms * 4);
61
+ }
62
+
63
+ @keyframes square-to-dot-animation {
64
+ 15%,
65
+ 25% {
66
+ width: 0;
67
+ height: 0;
68
+ margin: 5px;
69
+ border-width: 5px;
70
+ border-radius: 100%;
71
+ }
72
+
73
+ 40% {
74
+ width: 10px;
75
+ height: 10px;
76
+ margin: initial;
77
+ border-width: 3px;
78
+ border-radius: 15%;
79
+ }
80
+ }
81
+
82
+ .w-admin-home .text {
83
+ position: relative;
84
+ margin-top: 20px;
85
+ font-size: 24px;
86
+ }
87
+
88
+ .w-admin-home .text::after {
89
+ position: absolute;
90
+ padding-left: 5px;
91
+ content: "…";
92
+ }
@@ -0,0 +1,7 @@
1
+ <template>
2
+ <UIProvider>
3
+ <PubinfoProvider>
4
+ <PubinfoApp />
5
+ </PubinfoProvider>
6
+ </UIProvider>
7
+ </template>
@@ -0,0 +1,3 @@
1
+ // API 更新时间:
2
+ // API 唯一标识:
3
+ export * from './renzhengfuwu';