zhaojinyu 1 mesiac pred
rodič
commit
235f91d82c
100 zmenil súbory, kde vykonal 1068 pridanie a 2 odobranie
  1. 4 0
      .browserslistrc
  2. 1 0
      .commitlintrc.js
  3. 7 0
      .dockerignore
  4. 18 0
      .editorconfig
  5. 1 0
      .node-version
  6. 13 0
      .npmrc
  7. 17 0
      .prettierignore
  8. 1 0
      .prettierrc.mjs
  9. 4 0
      .stylelintignore
  10. 30 0
      .vscode/extensions.json
  11. 37 0
      .vscode/global.code-snippets
  12. 15 0
      .vscode/launch.json
  13. 240 0
      .vscode/settings.json
  14. 140 2
      README.md
  15. 16 0
      apps/web/.env
  16. 7 0
      apps/web/.env.analyze
  17. 24 0
      apps/web/.env.development
  18. 25 0
      apps/web/.env.production
  19. 11 0
      apps/web/.prettierrc.mjs
  20. 20 0
      apps/web/index.html
  21. 84 0
      apps/web/package.json
  22. 1 0
      apps/web/postcss.config.mjs
  23. BIN
      apps/web/public/cdn/socials/dingtalk.png
  24. BIN
      apps/web/public/cdn/socials/feishu.png
  25. BIN
      apps/web/public/cdn/socials/qq.png
  26. BIN
      apps/web/public/cdn/socials/wechat_open.png
  27. BIN
      apps/web/public/cdn/socials/wxWork.png
  28. 352 0
      apps/web/public/css/print-lock.css
  29. BIN
      apps/web/public/favicon.ico
  30. BIN
      apps/web/public/resource/emoji/100.gif
  31. BIN
      apps/web/public/resource/emoji/101.gif
  32. BIN
      apps/web/public/resource/emoji/102.gif
  33. BIN
      apps/web/public/resource/emoji/103.gif
  34. BIN
      apps/web/public/resource/emoji/104.gif
  35. BIN
      apps/web/public/resource/emoji/105.gif
  36. BIN
      apps/web/public/resource/emoji/106.gif
  37. BIN
      apps/web/public/resource/emoji/107.gif
  38. BIN
      apps/web/public/resource/emoji/108.gif
  39. BIN
      apps/web/public/resource/emoji/109.gif
  40. BIN
      apps/web/public/resource/emoji/110.gif
  41. BIN
      apps/web/public/resource/emoji/111.gif
  42. BIN
      apps/web/public/resource/emoji/112.gif
  43. BIN
      apps/web/public/resource/emoji/113.gif
  44. BIN
      apps/web/public/resource/emoji/114.gif
  45. BIN
      apps/web/public/resource/emoji/115.gif
  46. BIN
      apps/web/public/resource/emoji/116.gif
  47. BIN
      apps/web/public/resource/emoji/117.gif
  48. BIN
      apps/web/public/resource/emoji/118.gif
  49. BIN
      apps/web/public/resource/emoji/119.gif
  50. BIN
      apps/web/public/resource/emoji/120.gif
  51. BIN
      apps/web/public/resource/emoji/121.gif
  52. BIN
      apps/web/public/resource/emoji/122.gif
  53. BIN
      apps/web/public/resource/emoji/123.gif
  54. BIN
      apps/web/public/resource/emoji/124.gif
  55. BIN
      apps/web/public/resource/emoji/125.gif
  56. BIN
      apps/web/public/resource/emoji/126.gif
  57. BIN
      apps/web/public/resource/emoji/127.gif
  58. BIN
      apps/web/public/resource/emoji/128.gif
  59. BIN
      apps/web/public/resource/emoji/129.gif
  60. BIN
      apps/web/public/resource/emoji/130.gif
  61. BIN
      apps/web/public/resource/emoji/131.gif
  62. BIN
      apps/web/public/resource/emoji/132.gif
  63. BIN
      apps/web/public/resource/emoji/133.gif
  64. BIN
      apps/web/public/resource/emoji/134.gif
  65. BIN
      apps/web/public/resource/emoji/135.gif
  66. BIN
      apps/web/public/resource/emoji/136.gif
  67. BIN
      apps/web/public/resource/emoji/137.gif
  68. BIN
      apps/web/public/resource/emoji/138.gif
  69. BIN
      apps/web/public/resource/emoji/139.gif
  70. BIN
      apps/web/public/resource/emoji/140.gif
  71. BIN
      apps/web/public/resource/emoji/141.gif
  72. BIN
      apps/web/public/resource/emoji/142.gif
  73. BIN
      apps/web/public/resource/emoji/143.gif
  74. BIN
      apps/web/public/resource/emoji/144.gif
  75. BIN
      apps/web/public/resource/emoji/145.gif
  76. BIN
      apps/web/public/resource/emoji/146.gif
  77. BIN
      apps/web/public/resource/emoji/147.gif
  78. BIN
      apps/web/public/resource/emoji/148.gif
  79. BIN
      apps/web/public/resource/emoji/149.gif
  80. BIN
      apps/web/public/resource/emoji/150.gif
  81. BIN
      apps/web/public/resource/emoji/151.gif
  82. BIN
      apps/web/public/resource/emoji/152.gif
  83. BIN
      apps/web/public/resource/emoji/153.gif
  84. BIN
      apps/web/public/resource/emoji/154.gif
  85. BIN
      apps/web/public/resource/emoji/155.gif
  86. BIN
      apps/web/public/resource/emoji/156.gif
  87. BIN
      apps/web/public/resource/emoji/157.gif
  88. BIN
      apps/web/public/resource/emoji/158.gif
  89. BIN
      apps/web/public/resource/emoji/159.gif
  90. BIN
      apps/web/public/resource/emoji/160.gif
  91. BIN
      apps/web/public/resource/emoji/161.gif
  92. BIN
      apps/web/public/resource/emoji/162.gif
  93. BIN
      apps/web/public/resource/emoji/163.gif
  94. BIN
      apps/web/public/resource/emoji/164.gif
  95. BIN
      apps/web/public/resource/emoji/165.gif
  96. BIN
      apps/web/public/resource/emoji/166.gif
  97. BIN
      apps/web/public/resource/emoji/167.gif
  98. BIN
      apps/web/public/resource/emoji/168.gif
  99. BIN
      apps/web/public/resource/emoji/169.gif
  100. BIN
      apps/web/public/resource/emoji/170.gif

+ 4 - 0
.browserslistrc

@@ -0,0 +1,4 @@
+> 1%
+last 2 versions
+not dead
+not ie 11

+ 1 - 0
.commitlintrc.js

@@ -0,0 +1 @@
+export { default } from '@vben/commitlint-config';

+ 7 - 0
.dockerignore

@@ -0,0 +1,7 @@
+node_modules
+.git
+.gitignore
+*.md
+dist
+.turbo
+dist.zip

+ 18 - 0
.editorconfig

@@ -0,0 +1,18 @@
+root = true
+
+[*]
+charset=utf-8
+end_of_line=lf
+insert_final_newline=true
+indent_style=space
+indent_size=2
+max_line_length = 100
+trim_trailing_whitespace = true
+quote_type = single
+
+[*.{yml,yaml,json}]
+indent_style = space
+indent_size = 2
+
+[*.md]
+trim_trailing_whitespace = false

+ 1 - 0
.node-version

@@ -0,0 +1 @@
+22.1.0

+ 13 - 0
.npmrc

@@ -0,0 +1,13 @@
+registry = "https://registry.npmmirror.com"
+public-hoist-pattern[]=lefthook
+public-hoist-pattern[]=eslint
+public-hoist-pattern[]=prettier
+public-hoist-pattern[]=prettier-plugin-tailwindcss
+public-hoist-pattern[]=stylelint
+public-hoist-pattern[]=*postcss*
+public-hoist-pattern[]=@commitlint/*
+public-hoist-pattern[]=czg
+
+strict-peer-dependencies=false
+auto-install-peers=true
+dedupe-peer-dependents=true

+ 17 - 0
.prettierignore

@@ -0,0 +1,17 @@
+dist
+dev-dist
+.local
+.output.js
+node_modules
+.nvmrc
+coverage
+CODEOWNERS
+.output
+
+
+**/*.svg
+**/*.sh
+
+public
+.npmrc
+*-lock.yaml

+ 1 - 0
.prettierrc.mjs

@@ -0,0 +1 @@
+export { default } from '@vben/prettier-config';

+ 4 - 0
.stylelintignore

@@ -0,0 +1,4 @@
+dist
+public
+__tests__
+coverage

+ 30 - 0
.vscode/extensions.json

@@ -0,0 +1,30 @@
+{
+  "recommendations": [
+    // Vue 3 的语言支持
+    "Vue.volar",
+    // 将 ESLint JavaScript 集成到 VS Code 中。
+    "dbaeumer.vscode-eslint",
+    // Visual Studio Code 的官方 Stylelint 扩展
+    "stylelint.vscode-stylelint",
+    // 使用 Prettier 的代码格式化程序
+    "esbenp.prettier-vscode",
+    // 支持 dotenv 文件语法
+    "mikestead.dotenv",
+    // 源代码的拼写检查器
+    "streetsidesoftware.code-spell-checker",
+    // Tailwind CSS 的官方 VS Code 插件
+    "bradlc.vscode-tailwindcss",
+    // iconify 图标插件
+    "antfu.iconify",
+    // i18n 插件
+    "Lokalise.i18n-ally",
+    // CSS 变量提示
+    "vunguyentuan.vscode-css-variables",
+    // 在 package.json 中显示 PNPM catalog 的版本
+    "antfu.pnpm-catalog-lens"
+  ],
+  "unwantedRecommendations": [
+    // 和 volar 冲突
+    "octref.vetur"
+  ]
+}

+ 37 - 0
.vscode/global.code-snippets

@@ -0,0 +1,37 @@
+{
+  "import": {
+    "scope": "javascript,typescript",
+    "prefix": "im",
+    "body": ["import { $2 } from '$1';"],
+    "description": "Import a module",
+  },
+  "export-all": {
+    "scope": "javascript,typescript",
+    "prefix": "ex",
+    "body": ["export * from '$1';"],
+    "description": "Export a module",
+  },
+  "vue-script-setup": {
+    "scope": "vue",
+    "prefix": "<sc",
+    "body": [
+      "<script setup lang=\"ts\">",
+      "const props = defineProps<{",
+      "  modelValue?: boolean,",
+      "}>()",
+      "$1",
+      "</script>",
+      "",
+      "<template>",
+      "  <div>",
+      "    <slot/>",
+      "  </div>",
+      "</template>",
+    ],
+  },
+  "vue-computed": {
+    "scope": "javascript,typescript,vue",
+    "prefix": "com",
+    "body": ["computed(() => { $1 })"],
+  },
+}

+ 15 - 0
.vscode/launch.json

@@ -0,0 +1,15 @@
+{
+  "$schema": "https://json.schemastore.org/launchsettings.json",
+  "version": "0.2.0",
+  "configurations": [
+    {
+      "type": "chrome",
+      "name": "jnpf web dev",
+      "request": "launch",
+      "url": "http://localhost:3000",
+      "env": { "NODE_ENV": "development" },
+      "sourceMaps": true,
+      "webRoot": "${workspaceFolder}/apps/web"
+    }
+  ]
+}

+ 240 - 0
.vscode/settings.json

@@ -0,0 +1,240 @@
+{
+  "tailwindCSS.experimental.configFile": "internal/tailwind-config/src/index.ts",
+  // workbench
+  "workbench.list.smoothScrolling": true,
+  "workbench.startupEditor": "newUntitledFile",
+  "workbench.tree.indent": 10,
+  "workbench.editor.highlightModifiedTabs": true,
+  "workbench.editor.closeOnFileDelete": true,
+  "workbench.editor.limit.enabled": true,
+  "workbench.editor.limit.perEditorGroup": true,
+  "workbench.editor.limit.value": 10,
+
+  // editor
+  "editor.tabSize": 2,
+  "editor.detectIndentation": false,
+  "editor.cursorBlinking": "expand",
+  "editor.largeFileOptimizations": true,
+  "editor.accessibilitySupport": "off",
+  "editor.cursorSmoothCaretAnimation": "on",
+  "editor.guides.bracketPairs": "active",
+  "editor.inlineSuggest.enabled": true,
+  "editor.suggestSelection": "recentlyUsedByPrefix",
+  "editor.acceptSuggestionOnEnter": "smart",
+  "editor.suggest.snippetsPreventQuickSuggestions": false,
+  "editor.stickyScroll.enabled": true,
+  "editor.hover.sticky": true,
+  "editor.suggest.insertMode": "replace",
+  "editor.bracketPairColorization.enabled": true,
+  "editor.autoClosingBrackets": "beforeWhitespace",
+  "editor.autoClosingDelete": "always",
+  "editor.autoClosingOvertype": "always",
+  "editor.autoClosingQuotes": "beforeWhitespace",
+  "editor.wordSeparators": "`~!@#%^&*()=+[{]}\\|;:'\",.<>/?",
+  "editor.codeActionsOnSave": {
+    "source.fixAll.eslint": "explicit",
+    "source.fixAll.stylelint": "explicit",
+    "source.organizeImports": "never"
+  },
+  "editor.defaultFormatter": "esbenp.prettier-vscode",
+  "[html]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  "[css]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  "[scss]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  "[javascript]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  "[typescript]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  "[json]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  "[markdown]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  "[jsonc]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  "[vue]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  // extensions
+  "extensions.ignoreRecommendations": true,
+
+  // terminal
+  "terminal.integrated.cursorBlinking": true,
+  "terminal.integrated.persistentSessionReviveProcess": "never",
+  "terminal.integrated.tabs.enabled": true,
+  "terminal.integrated.scrollback": 10000,
+  "terminal.integrated.stickyScroll.enabled": true,
+
+  // files
+  "files.eol": "\n",
+  "files.insertFinalNewline": true,
+  "files.simpleDialog.enable": true,
+  "files.associations": {
+    "*.ejs": "html",
+    "*.art": "html",
+    "**/tsconfig.json": "jsonc",
+    "*.json": "jsonc",
+    "package.json": "json"
+  },
+
+  "files.exclude": {
+    "**/.eslintcache": true,
+    "**/bower_components": true,
+    "**/.turbo": true,
+    "**/.idea": true,
+    "**/.vitepress": true,
+    "**/tmp": true,
+    "**/.git": true,
+    "**/.svn": true,
+    "**/.hg": true,
+    "**/CVS": true,
+    "**/.stylelintcache": true,
+    "**/.DS_Store": true,
+    "**/vite.config.mts.*": true,
+    "**/tea.yaml": true
+  },
+  "files.watcherExclude": {
+    "**/.git/objects/**": true,
+    "**/.git/subtree-cache/**": true,
+    "**/.vscode/**": true,
+    "**/node_modules/**": true,
+    "**/tmp/**": true,
+    "**/bower_components/**": true,
+    "**/dist/**": true,
+    "**/yarn.lock": true
+  },
+
+  "typescript.tsserver.exclude": ["**/node_modules", "**/dist", "**/.turbo"],
+
+  // search
+  "search.searchEditor.singleClickBehaviour": "peekDefinition",
+  "search.followSymlinks": false,
+  // 在使用搜索功能时,将这些文件夹/文件排除在外
+  "search.exclude": {
+    "**/node_modules": true,
+    "**/*.log": true,
+    "**/*.log*": true,
+    "**/bower_components": true,
+    "**/dist": true,
+    "**/elehukouben": true,
+    "**/.git": true,
+    "**/.github": true,
+    "**/.gitignore": true,
+    "**/.svn": true,
+    "**/.DS_Store": true,
+    "**/.vitepress/cache": true,
+    "**/.idea": true,
+    "**/.vscode": false,
+    "**/.yarn": true,
+    "**/tmp": true,
+    "*.xml": true,
+    "out": true,
+    "dist": true,
+    "node_modules": true,
+    "CHANGELOG.md": true,
+    "**/pnpm-lock.yaml": true,
+    "**/yarn.lock": true
+  },
+
+  "debug.onTaskErrors": "debugAnyway",
+  "diffEditor.ignoreTrimWhitespace": false,
+  "npm.packageManager": "pnpm",
+
+  "css.validate": false,
+  "less.validate": false,
+  "scss.validate": false,
+
+  // extension
+  "emmet.showSuggestionsAsSnippets": true,
+  "emmet.triggerExpansionOnTab": false,
+
+  "errorLens.enabledDiagnosticLevels": ["warning", "error"],
+  "errorLens.excludeBySource": ["cSpell", "Grammarly", "eslint"],
+
+  "stylelint.enable": true,
+  "stylelint.packageManager": "pnpm",
+  "stylelint.validate": ["css", "less", "postcss", "scss", "vue"],
+  "stylelint.customSyntax": "postcss-html",
+  "stylelint.snippet": ["css", "less", "postcss", "scss", "vue"],
+
+  "typescript.inlayHints.enumMemberValues.enabled": true,
+  "typescript.preferences.preferTypeOnlyAutoImports": true,
+  "typescript.preferences.includePackageJsonAutoImports": "on",
+
+  "eslint.validate": [
+    "javascript",
+    "typescript",
+    "javascriptreact",
+    "typescriptreact",
+    "vue",
+    "html",
+    "markdown",
+    "json",
+    "jsonc",
+    "json5"
+  ],
+
+  "tailwindCSS.experimental.classRegex": [
+    ["cva\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"]
+  ],
+
+  "github.copilot.enable": {
+    "*": true,
+    "markdown": true,
+    "plaintext": false,
+    "yaml": false
+  },
+
+  "cssVariables.lookupFiles": ["packages/core/base/design/src/**/*.css"],
+
+  "i18n-ally.localesPaths": [
+    "packages/locales/src/langs",
+    "apps/*/src/locales/langs"
+  ],
+  "i18n-ally.pathMatcher": "{locale}/{namespace}.{ext}",
+  "i18n-ally.enabledParsers": ["json"],
+  "i18n-ally.sourceLanguage": "en",
+  "i18n-ally.displayLanguage": "zh-CN",
+  "i18n-ally.enabledFrameworks": ["vue", "react"],
+  "i18n-ally.keystyle": "nested",
+  "i18n-ally.sortKeys": true,
+  "i18n-ally.namespace": true,
+
+  // 控制相关文件嵌套展示
+  "explorer.fileNesting.enabled": true,
+  "explorer.fileNesting.expand": false,
+  "explorer.fileNesting.patterns": {
+    "*.ts": "$(capture).test.ts, $(capture).test.tsx, $(capture).spec.ts, $(capture).spec.tsx, $(capture).d.ts",
+    "*.tsx": "$(capture).test.ts, $(capture).test.tsx, $(capture).spec.ts, $(capture).spec.tsx,$(capture).d.ts",
+    "*.env": "$(capture).env.*",
+    "README.md": "README*,CHANGELOG*,LICENSE,CNAME",
+    "package.json": "pnpm-lock.yaml,pnpm-workspace.yaml,.gitattributes,.gitignore,.gitpod.yml,.npmrc,.browserslistrc,.node-version,.git*,.tazerc.json",
+    "eslint.config.mjs": ".eslintignore,.prettierignore,.stylelintignore,.commitlintrc.*,.prettierrc.*,stylelint.config.*,.lintstagedrc.mjs,cspell.json,lefthook.yml",
+    "tailwind.config.mjs": "postcss.*"
+  },
+  "commentTranslate.hover.enabled": false,
+  "commentTranslate.multiLineMerge": true,
+  "vue.server.hybridMode": true,
+  "typescript.tsdk": "node_modules/typescript/lib",
+  "oxc.enable": false,
+  "cSpell.words": [
+    "archiver",
+    "axios",
+    "dotenv",
+    "isequal",
+    "jspm",
+    "napi",
+    "nolebase",
+    "rollup",
+    "vitest"
+  ]
+}

+ 140 - 2
README.md

@@ -1,3 +1,141 @@
-# jnpf-web-monorepo-v6x
+# jnpf-web-monorepo
 
-前端主程序
+## 一 环境要求
+
+### 1.1 开发环境
+
+- 操作系统:`Windows 10/11`,`MacOS`;
+- `Node 20.15.0` 及以上版本(某些情况下可能需要安装 `Python3` 环境);
+- `pnpm v9.12.0`及以上版本;
+- `Visual Studio Code` (简称 VSCode)
+
+### 1.2 运行环境
+
+`Nginx` 建议使用 `1.18.0` 及以上版本、兼容 `OpenResty` 或 `TongHttpServer` 6.0(国产信创)
+
+## 二 浏览器支持
+
+> 支持现代浏览器,不支持 IE
+
+| IE | Edge | Firefox | Chrome | Safari |
+| --- | --- | --- | --- | --- |
+| not support | last 2 versions | last 2 versions | last 2 versions | last 2 versions |
+
+## 三 关联项目
+
+> 需要使用下表中的对应分支
+
+| 项目                     | 分支          | 说明                   |
+| ------------------------ | ------------- | ---------------------- |
+| **后端**(任一后端服务)   |               |                        |
+| jnpf-java-boot           | v6.0.x-stable | Java 单体项目源码      |
+| jnpf-java-cloud          | v6.0.x-stable | Java 微服务项目源码    |
+| jnpf-dotnet              | v6.0.x-stable | .NET 单体项目源码      |
+| jnpf-dotnet-cloud        | v6.0.x-stable | .NET 微服务项目源码    |
+| **前端**                 |               |                        |
+| jnpf-web-datascreen-vue3 | v6.0.x-stable | 大屏前端项目源码(Vue3) |
+| jnpf-web-datareport      | v6.0.x-stable | 报表前端项目源码       |
+
+## 四 使用说明
+
+### 4.1 开发环境
+
+#### 4.1.1 安装 pnpm
+
+在 Windows 的 `PowerShell` 中执行如下命令
+
+```bash
+iwr https://get.pnpm.io/install.ps1 -useb | iex
+```
+
+MacOS 通过 `Homebrew` 安装 `pnpm`<br/> 若已经安装了 `Homebrew` 软件包管理器,则可以使用如下命令赖安装 pnpm:
+
+```bash
+brew install pnpm
+```
+
+也可以通过 npm 安装 pnpm
+
+```bash
+npm install -g pnpm
+或
+npm install -g @pnpm/exe
+```
+
+#### 4.1.2 拉取插件代码(jnpf-bpmn,jnpf-univer)
+
+在项目目录 `packages\jnpf\plugins` 中,拉取 `jnpf-bpmn` 和 `jnpf-univer` 项目代码
+
+#### 4.1.3 安装依赖
+
+使用如下命令安装项目依赖
+
+```bash
+pnpm install
+```
+
+#### 4.1.4 后端接口配置
+
+修改项目根目录 `.env.development` 中的后端接口地址和websocket地址
+
+- Java 项目本地开发默认接口地址:`http://localhost:30000`
+- .NET 项目本地开发默认接口地址:`http://localhost:5000`
+
+```bash
+# 后端接口
+VITE_PROXY = [["/dev","http://localhost:30000"]]
+
+# websocket地址
+# 在本地开发环境,将后端默认接口地址的协议改成 ws 即可
+VITE_GLOB_WEBSOCKET_URL='ws://localhost:30000'
+```
+
+#### 4.1.5 关联项目配置
+
+打开 `apps\web\.env` 配置文件,默认配置如下所示
+
+```bash
+...
+# 密钥
+VITE_CIPHER_KEY=自行修改
+# 高德地图相关key
+VITE_A_MAP_JS_KEY=自行修改
+VITE_A_MAP_WEB_KEY=自行修改
+VITE_A_MAP_SECURITY_JS_CODE=自行修改
+...
+```
+
+#### 4.1.5 本地运行
+
+完成上述操作后,使用如下命令运行前端项目
+
+```bash
+pnpm dev
+```
+
+### 4.2 运行环境
+
+> 测试或生产环境
+
+如果需要测试或生产环境发布,使用如下命令打包项目
+
+```bash
+pnpm build
+```
+
+然后将项目根目录下 `/dist/` 中所有的文件上传至服务器。
+
+## 五 常见问题
+
+### 5.1 修改项目基本信息
+
+打开项目根目录 `.env` 文件,可以看到 `本地运行端口号` 等配置。
+
+```bash
+# 端口号
+VITE_PORT = 3000
+```
+
+### 5.2 代码更新后报错
+
+在开发或打包时报依赖缺失,可以先删除项目根目录下的 `pnpm-lock.yaml` 文件,然后重新执行 `pnpm install` 安装依赖即可解决。

+ 16 - 0
apps/web/.env

@@ -0,0 +1,16 @@
+# 应用标题
+VITE_APP_TITLE=JNPF快速开发平台
+
+# 应用命名空间,用于缓存、store等功能的前缀,确保隔离
+VITE_APP_NAMESPACE=jnpf-web
+
+# 对store进行加密的密钥,在将store持久化到localStorage时会使用该密钥进行加密
+VITE_APP_STORE_SECURE_KEY=jnpf
+
+# 密钥
+VITE_CIPHER_KEY=EY8WePvjM5GGwQzn
+
+# 高德地图相关key
+VITE_A_MAP_JS_KEY=
+VITE_A_MAP_WEB_KEY=
+VITE_A_MAP_SECURITY_JS_CODE=

+ 7 - 0
apps/web/.env.analyze

@@ -0,0 +1,7 @@
+# public path
+VITE_BASE=/
+
+# Basic interface address SPA
+VITE_GLOB_API_URL=/dev
+
+VITE_VISUALIZER=true

+ 24 - 0
apps/web/.env.development

@@ -0,0 +1,24 @@
+# 端口号
+VITE_PORT=3000
+
+VITE_BASE=/
+
+# 本地开发代理,可以解决跨域及多地址代理
+# 如果接口地址匹配到,则会转发到http://localhost:30000,防止本地出现跨域问题
+# 可以有多个,注意多个不能换行,否则代理将会失效
+VITE_PROXY=[["/dev","http://localhost:30000"], ["/reportDev","http://localhost:32000"]]
+
+# 接口地址
+VITE_GLOB_API_URL=/dev
+
+# 报表接口地址
+VITE_GLOB_REPORT_API_URL=/reportDev
+
+# WebSocket基础地址
+VITE_GLOB_WEBSOCKET_URL=ws://localhost:30000
+
+# 是否打开 devtools,true 为打开,false 为关闭
+VITE_DEVTOOLS=false
+
+# 是否注入全局loading
+VITE_INJECT_APP_LOADING=true

+ 25 - 0
apps/web/.env.production

@@ -0,0 +1,25 @@
+VITE_BASE=/
+
+# 接口地址
+VITE_GLOB_API_URL=
+
+# 报表接口地址
+VITE_GLOB_REPORT_API_URL=
+
+# WebSocket基础地址 (为空时默认取当前url路径,若需要自定义,请输入)
+VITE_GLOB_WEBSOCKET_URL=
+
+# 是否开启压缩,可以设置为 none, brotli, gzip
+VITE_COMPRESS=none
+
+# 是否开启 PWA
+VITE_PWA=false
+
+# vue-router 的模式
+VITE_ROUTER_HISTORY=history
+
+# 是否注入全局loading
+VITE_INJECT_APP_LOADING=true
+
+# 打包后是否生成dist.zip
+VITE_ARCHIVER=false

+ 11 - 0
apps/web/.prettierrc.mjs

@@ -0,0 +1,11 @@
+import defaultConfig from '@vben/prettier-config';
+
+const config = {
+  ...defaultConfig,
+  // 设置是否将 HTML、Vue、JSX 的标签闭合括号放在同一行
+  bracketSameLine: true,
+  // 设置代码的最大行宽(单位是字符)。当代码超过这个长度时,格式化工具将尝试换行
+  printWidth: 160,
+};
+
+export default config;

+ 20 - 0
apps/web/index.html

@@ -0,0 +1,20 @@
+<!doctype html>
+<html lang="zh">
+  <head>
+    <meta charset="UTF-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
+    <link rel="stylesheet" href="/css/print-lock.css" />
+    <meta name="renderer" content="webkit" />
+    <meta name="description" content="JNPF快速开发平台" />
+    <meta name="keywords" content="JNPF快速开发平台" />
+    <meta name="author" content="福建引迈信息技术有限公司" />
+    <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=0" />
+    <!-- 由 vite 注入 VITE_APP_TITLE 变量,在 .env 文件内配置 -->
+    <title><%= VITE_APP_TITLE %></title>
+    <link rel="icon" href="/favicon.ico" />
+  </head>
+  <body>
+    <div id="app"></div>
+    <script type="module" src="/src/main.ts"></script>
+  </body>
+</html>

+ 84 - 0
apps/web/package.json

@@ -0,0 +1,84 @@
+{
+  "name": "@jnpf/web",
+  "version": "6.0.0",
+  "description": "JNPF快速开发平台",
+  "homepage": "https://www.jnpfsoft.com",
+  "author": {
+    "name": "福建引迈信息技术有限公司",
+    "email": "support@yinmaisoft.com",
+    "url": "https://www.jnpfsoft.com"
+  },
+  "type": "module",
+  "scripts": {
+    "build": "pnpm vite build --mode production",
+    "build:analyze": "pnpm vite build --mode analyze",
+    "dev": "pnpm vite --mode development",
+    "preview": "vite preview",
+    "typecheck": "vue-tsc --noEmit --skipLibCheck"
+  },
+  "imports": {
+    "#/*": "./src/*"
+  },
+  "dependencies": {
+    "@amap/amap-jsapi-loader": "catalog:",
+    "@ant-design/icons-vue": "catalog:",
+    "@fullcalendar/core": "catalog:",
+    "@fullcalendar/daygrid": "catalog:",
+    "@fullcalendar/interaction": "catalog:",
+    "@fullcalendar/timegrid": "catalog:",
+    "@fullcalendar/vue3": "catalog:",
+    "@jnpf/bpmn": "workspace:*",
+    "@jnpf/hooks": "workspace:*",
+    "@jnpf/ui": "workspace:*",
+    "@jnpf/univer": "workspace:*",
+    "@jnpf/utils": "workspace:*",
+    "@tanstack/vue-query": "catalog:",
+    "@vben-core/composables": "workspace:*",
+    "@vben-core/form-ui": "workspace:*",
+    "@vben-core/preferences": "workspace:*",
+    "@vben-core/shadcn-ui": "workspace:*",
+    "@vben-core/shared": "workspace:*",
+    "@vben-core/typings": "workspace:*",
+    "@vben/access": "workspace:*",
+    "@vben/common-ui": "workspace:*",
+    "@vben/constants": "workspace:*",
+    "@vben/hooks": "workspace:*",
+    "@vben/icons": "workspace:*",
+    "@vben/layouts": "workspace:*",
+    "@vben/locales": "workspace:*",
+    "@vben/plugins": "workspace:*",
+    "@vben/preferences": "workspace:*",
+    "@vben/request": "workspace:*",
+    "@vben/stores": "workspace:*",
+    "@vben/styles": "workspace:*",
+    "@vben/types": "workspace:*",
+    "@vben/utils": "workspace:*",
+    "@vueuse/core": "catalog:",
+    "ant-design-vue": "catalog:",
+    "dayjs": "catalog:",
+    "echarts": "catalog:",
+    "echarts-stat": "catalog:",
+    "jquery": "catalog:",
+    "jsbarcode": "catalog:",
+    "lodash-es": "catalog:",
+    "pinia": "catalog:",
+    "print-js": "catalog:",
+    "qrcode": "catalog:",
+    "reconnecting-websocket": "catalog:",
+    "sortablejs": "catalog:",
+    "spark-md5": "catalog:",
+    "v-code-diff": "catalog:",
+    "vue": "catalog:",
+    "vue-grid-layout": "catalog:",
+    "vue-plugin-hiprint": "catalog:",
+    "vue-router": "catalog:",
+    "vue-simple-uploader": "catalog:",
+    "vue3-draggable-resizable": "catalog:",
+    "vue3-marquee": "catalog:",
+    "vuedraggable": "catalog:",
+    "vxe-table": "catalog:"
+  },
+  "devDependencies": {
+    "@vben/prettier-config": "workspace:*"
+  }
+}

+ 1 - 0
apps/web/postcss.config.mjs

@@ -0,0 +1 @@
+export { default } from '@vben/tailwind-config/postcss';

BIN
apps/web/public/cdn/socials/dingtalk.png


BIN
apps/web/public/cdn/socials/feishu.png


BIN
apps/web/public/cdn/socials/qq.png


BIN
apps/web/public/cdn/socials/wechat_open.png


BIN
apps/web/public/cdn/socials/wxWork.png


+ 352 - 0
apps/web/public/css/print-lock.css

@@ -0,0 +1,352 @@
+@media print {
+  body {
+    margin: 0px;
+    padding: 0px;
+  }
+}
+
+@page {
+  margin: 0;
+}
+
+.hiprint-printPaper * {
+  box-sizing: border-box;
+  -moz-box-sizing: border-box; /* Firefox */
+  -webkit-box-sizing: border-box; /* Safari */
+}
+
+.hiprint-printPaper *:focus {
+  outline: -webkit-focus-ring-color auto 0px;
+}
+
+.hiprint-printPaper {
+  position: relative;
+  padding: 0 0 0 0;
+  page-break-after: always;
+  -webkit-user-select: none; /* Chrome/Safari/Opera */
+  -moz-user-select: none; /* Firefox */
+  user-select: none;
+  overflow-x: hidden;
+  overflow: hidden;
+}
+
+.hiprint-printPaper .hiprint-printPaper-content {
+  position: relative;
+}
+
+/* 火狐浏览器打印 第一页过后 重叠问题 */
+@-moz-document url-prefix() {
+  .hiprint-printPaper .hiprint-printPaper-content {
+    position: relative;
+    margin-top: 20px;
+    top: -20px
+  }
+}
+
+.hiprint-printPaper.design {
+  overflow: visible;
+}
+
+
+.hiprint-printTemplate .hiprint-printPanel {
+  page-break-after: always;
+}
+
+.hiprint-printPaper, hiprint-printPanel {
+  box-sizing: border-box;
+  border: 0px;
+}
+
+.hiprint-printPanel .hiprint-printPaper:last-child {
+  page-break-after: avoid;
+}
+
+.hiprint-printTemplate .hiprint-printPanel:last-child {
+  page-break-after: avoid;
+}
+
+.hiprint-printPaper .hideheaderLinetarget {
+  border-top: 0px dashed rgb(201, 190, 190) !important;
+}
+
+.hiprint-printPaper .hidefooterLinetarget {
+  border-top: 0px dashed rgb(201, 190, 190) !important;
+}
+
+.hiprint-printPaper.design {
+  border: 1px dashed rgba(170, 170, 170, 0.7);
+}
+
+.design .hiprint-printElement-table-content, .design .hiprint-printElement-longText-content {
+  overflow: hidden;
+  box-sizing: border-box;
+}
+
+.design .resize-panel {
+  box-sizing: border-box;
+  border: 1px dotted;
+}
+
+.hiprint-printElement-text {
+  background-color: transparent;
+  background-repeat: repeat;
+  padding: 0 0 0 0;
+  border: 0.75pt none rgb(0, 0, 0);
+  direction: ltr;
+  font-family: 'SimSun';
+  font-size: 9pt;
+  font-style: normal;
+  font-weight: normal;
+  padding-bottom: 0pt;
+  padding-left: 0pt;
+  padding-right: 0pt;
+  padding-top: 0pt;
+  text-align: left;
+  text-decoration: none;
+  line-height: 9.75pt;
+  box-sizing: border-box;
+  word-wrap: break-word;
+  word-break: break-all;
+}
+
+.design .hiprint-printElement-text-content {
+  border: 1px dashed rgb(206, 188, 188);
+  box-sizing: border-box;
+}
+
+.hiprint-printElement-longText {
+  background-color: transparent;
+  background-repeat: repeat;
+  border: 0.75pt none rgb(0, 0, 0);
+  direction: ltr;
+  font-family: 'SimSun';
+  font-size: 9pt;
+  font-style: normal;
+  font-weight: normal;
+  padding-bottom: 0pt;
+  padding-left: 0pt;
+  padding-right: 0pt;
+  padding-top: 0pt;
+  text-align: left;
+  text-decoration: none;
+  line-height: 9.75pt;
+  box-sizing: border-box;
+  word-wrap: break-word;
+  word-break: break-all;
+  /*white-space: pre-wrap*/
+}
+
+
+.hiprint-printElement-table {
+  background-color: transparent;
+  background-repeat: repeat;
+  color: rgb(0, 0, 0);
+  border-color: rgb(0, 0, 0);
+  border-style: none;
+  direction: ltr;
+  font-family: 'SimSun';
+  font-size: 9pt;
+  font-style: normal;
+  font-weight: normal;
+  padding-bottom: 0pt;
+  padding-left: 0pt;
+  padding-right: 0pt;
+  padding-top: 0pt;
+  text-align: left;
+  text-decoration: none;
+  padding: 0 0 0 0;
+  box-sizing: border-box;
+  line-height: 9.75pt;
+}
+
+.hiprint-printElement-table thead {
+  background: #e8e8e8;
+  font-weight: 700;
+}
+
+table.hiprint-printElement-tableTarget {
+  width: 100%;
+}
+
+.hiprint-printElement-tableTarget, .hiprint-printElement-tableTarget tr, .hiprint-printElement-tableTarget td {
+  border-color: rgb(0, 0, 0);
+  /*border-style: none;*/
+  /*border: 1px solid rgb(0, 0, 0);*/
+  font-weight: normal;
+  direction: ltr;
+  padding-bottom: 0pt;
+  padding-left: 4pt;
+  padding-right: 4pt;
+  padding-top: 0pt;
+  text-decoration: none;
+  vertical-align: middle;
+  box-sizing: border-box;
+  word-wrap: break-word;
+  word-break: break-all;
+  /*line-height: 9.75pt;
+  font-size: 9pt;*/
+}
+
+.hiprint-printElement-tableTarget-border-all {
+  border: 1px solid;
+}
+.hiprint-printElement-tableTarget-border-none {
+  border: 0px solid;
+}
+.hiprint-printElement-tableTarget-border-lr {
+  border-left: 1px solid;
+  border-right: 1px solid;
+}
+.hiprint-printElement-tableTarget-border-left {
+  border-left: 1px solid;
+}
+.hiprint-printElement-tableTarget-border-right {
+  border-right: 1px solid;
+}
+.hiprint-printElement-tableTarget-border-tb {
+  border-top: 1px solid;
+  border-bottom: 1px solid;
+}
+.hiprint-printElement-tableTarget-border-top {
+  border-top: 1px solid;
+}
+.hiprint-printElement-tableTarget-border-bottom {
+  border-bottom: 1px solid;
+}
+
+.hiprint-printElement-tableTarget-border-td-none td {
+  border: 0px solid;
+}
+.hiprint-printElement-tableTarget-border-td-all td:not(:nth-last-child(-n+2)) {
+  border-right: 1px solid;
+}
+.hiprint-printElement-tableTarget-border-td-all td:not(last-child) {
+  border-right: 1px solid;
+}
+.hiprint-printElement-tableTarget-border-td-all td:last-child {
+  border-left: 1px solid;
+}
+.hiprint-printElement-tableTarget-border-td-all td:last-child:first-child {
+  border-left: none;
+}
+
+/*.hiprint-printElement-tableTarget tr,*/
+.hiprint-printElement-tableTarget td {
+  height: 18pt;
+}
+
+.hiprint-printPaper .hiprint-paperNumber {
+  font-size: 9pt;
+}
+
+.design .hiprint-printElement-table-handle {
+  position: absolute;
+  height: 21pt;
+  width: 21pt;
+  background: red;
+  z-index: 1;
+}
+
+.hiprint-printPaper .hiprint-paperNumber-disabled {
+  float: right !important;
+  right: 0 !important;
+  color: gainsboro !important;
+}
+
+.hiprint-printElement-vline, .hiprint-printElement-hline {
+  border: 0px none rgb(0, 0, 0);
+
+}
+
+.hiprint-printElement-vline {
+  border-left: 0.75pt solid #000;
+  border-right: 0px none rgb(0, 0, 0) !important;
+  border-bottom: 0px none rgb(0, 0, 0) !important;
+  border-top: 0px none rgb(0, 0, 0) !important;
+}
+
+.hiprint-printElement-hline {
+  border-top: 0.75pt solid #000;
+  border-right: 0px none rgb(0, 0, 0) !important;
+  border-bottom: 0px none rgb(0, 0, 0) !important;
+  border-left: 0px none rgb(0, 0, 0) !important;
+}
+
+.hiprint-printElement-oval, .hiprint-printElement-rect {
+  border: 0.75pt solid #000;
+}
+
+.hiprint-text-content-middle {
+}
+
+.hiprint-text-content-middle > div {
+  display: grid;
+  align-items: center;
+}
+
+.hiprint-text-content-bottom {
+}
+
+.hiprint-text-content-bottom > div {
+  display: grid;
+  align-items: flex-end;
+}
+
+.hiprint-text-content-wrap {
+}
+
+.hiprint-text-content-wrap .hiprint-text-content-wrap-nowrap {
+  white-space: nowrap;
+}
+
+.hiprint-text-content-wrap .hiprint-text-content-wrap-clip {
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: clip;
+}
+
+.hiprint-text-content-wrap .hiprint-text-content-wrap-ellipsis {
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+/*hi-grid-row */
+.hi-grid-row {
+  position: relative;
+  height: auto;
+  margin-right: 0;
+  margin-left: 0;
+  zoom: 1;
+  display: block;
+  box-sizing: border-box;
+}
+
+.hi-grid-row::after, .hi-grid-row::before {
+  display: table;
+  content: '';
+  box-sizing: border-box;
+}
+
+.hi-grid-col {
+  display: block;
+  box-sizing: border-box;
+  position: relative;
+  float: left;
+  flex: 0 0 auto;
+}
+
+.table-grid-row {
+  margin-left: -0pt;
+  margin-right: -0pt;
+}
+
+.tableGridColumnsGutterRow {
+  padding-left: 0pt;
+  padding-right: 0pt;
+}
+
+.hiprint-gridColumnsFooter {
+  text-align: left;
+  clear: both;
+}

BIN
apps/web/public/favicon.ico


BIN
apps/web/public/resource/emoji/100.gif


BIN
apps/web/public/resource/emoji/101.gif


BIN
apps/web/public/resource/emoji/102.gif


BIN
apps/web/public/resource/emoji/103.gif


BIN
apps/web/public/resource/emoji/104.gif


BIN
apps/web/public/resource/emoji/105.gif


BIN
apps/web/public/resource/emoji/106.gif


BIN
apps/web/public/resource/emoji/107.gif


BIN
apps/web/public/resource/emoji/108.gif


BIN
apps/web/public/resource/emoji/109.gif


BIN
apps/web/public/resource/emoji/110.gif


BIN
apps/web/public/resource/emoji/111.gif


BIN
apps/web/public/resource/emoji/112.gif


BIN
apps/web/public/resource/emoji/113.gif


BIN
apps/web/public/resource/emoji/114.gif


BIN
apps/web/public/resource/emoji/115.gif


BIN
apps/web/public/resource/emoji/116.gif


BIN
apps/web/public/resource/emoji/117.gif


BIN
apps/web/public/resource/emoji/118.gif


BIN
apps/web/public/resource/emoji/119.gif


BIN
apps/web/public/resource/emoji/120.gif


BIN
apps/web/public/resource/emoji/121.gif


BIN
apps/web/public/resource/emoji/122.gif


BIN
apps/web/public/resource/emoji/123.gif


BIN
apps/web/public/resource/emoji/124.gif


BIN
apps/web/public/resource/emoji/125.gif


BIN
apps/web/public/resource/emoji/126.gif


BIN
apps/web/public/resource/emoji/127.gif


BIN
apps/web/public/resource/emoji/128.gif


BIN
apps/web/public/resource/emoji/129.gif


BIN
apps/web/public/resource/emoji/130.gif


BIN
apps/web/public/resource/emoji/131.gif


BIN
apps/web/public/resource/emoji/132.gif


BIN
apps/web/public/resource/emoji/133.gif


BIN
apps/web/public/resource/emoji/134.gif


BIN
apps/web/public/resource/emoji/135.gif


BIN
apps/web/public/resource/emoji/136.gif


BIN
apps/web/public/resource/emoji/137.gif


BIN
apps/web/public/resource/emoji/138.gif


BIN
apps/web/public/resource/emoji/139.gif


BIN
apps/web/public/resource/emoji/140.gif


BIN
apps/web/public/resource/emoji/141.gif


BIN
apps/web/public/resource/emoji/142.gif


BIN
apps/web/public/resource/emoji/143.gif


BIN
apps/web/public/resource/emoji/144.gif


BIN
apps/web/public/resource/emoji/145.gif


BIN
apps/web/public/resource/emoji/146.gif


BIN
apps/web/public/resource/emoji/147.gif


BIN
apps/web/public/resource/emoji/148.gif


BIN
apps/web/public/resource/emoji/149.gif


BIN
apps/web/public/resource/emoji/150.gif


BIN
apps/web/public/resource/emoji/151.gif


BIN
apps/web/public/resource/emoji/152.gif


BIN
apps/web/public/resource/emoji/153.gif


BIN
apps/web/public/resource/emoji/154.gif


BIN
apps/web/public/resource/emoji/155.gif


BIN
apps/web/public/resource/emoji/156.gif


BIN
apps/web/public/resource/emoji/157.gif


BIN
apps/web/public/resource/emoji/158.gif


BIN
apps/web/public/resource/emoji/159.gif


BIN
apps/web/public/resource/emoji/160.gif


BIN
apps/web/public/resource/emoji/161.gif


BIN
apps/web/public/resource/emoji/162.gif


BIN
apps/web/public/resource/emoji/163.gif


BIN
apps/web/public/resource/emoji/164.gif


BIN
apps/web/public/resource/emoji/165.gif


BIN
apps/web/public/resource/emoji/166.gif


BIN
apps/web/public/resource/emoji/167.gif


BIN
apps/web/public/resource/emoji/168.gif


BIN
apps/web/public/resource/emoji/169.gif


BIN
apps/web/public/resource/emoji/170.gif


Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov