Browse Source

tauri 打包配置 流程消息提示优化

master
whyzxhnd 1 day ago
parent
commit
4440593f19
  1. 3
      .gitignore
  2. 30
      web/.env.dev.tauri
  3. 2
      web/.env.prod
  4. 7
      web/.env.prod.tauri
  5. 6
      web/.eslintrc.js
  6. 3
      web/.gitignore
  7. 18
      web/.vscode/extensions.json
  8. 16
      web/.vscode/launch.json
  9. 144
      web/.vscode/settings.json
  10. 32
      web/package.json
  11. 4
      web/src-tauri/.gitignore
  12. 4995
      web/src-tauri/Cargo.lock
  13. 25
      web/src-tauri/Cargo.toml
  14. 3
      web/src-tauri/build.rs
  15. 11
      web/src-tauri/capabilities/default.json
  16. BIN
      web/src-tauri/icons/128x128.png
  17. BIN
      web/src-tauri/icons/128x128@2x.png
  18. BIN
      web/src-tauri/icons/32x32.png
  19. BIN
      web/src-tauri/icons/64x64.png
  20. BIN
      web/src-tauri/icons/Square107x107Logo.png
  21. BIN
      web/src-tauri/icons/Square142x142Logo.png
  22. BIN
      web/src-tauri/icons/Square150x150Logo.png
  23. BIN
      web/src-tauri/icons/Square284x284Logo.png
  24. BIN
      web/src-tauri/icons/Square30x30Logo.png
  25. BIN
      web/src-tauri/icons/Square310x310Logo.png
  26. BIN
      web/src-tauri/icons/Square44x44Logo.png
  27. BIN
      web/src-tauri/icons/Square71x71Logo.png
  28. BIN
      web/src-tauri/icons/Square89x89Logo.png
  29. BIN
      web/src-tauri/icons/StoreLogo.png
  30. BIN
      web/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png
  31. BIN
      web/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png
  32. BIN
      web/src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png
  33. BIN
      web/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png
  34. BIN
      web/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png
  35. BIN
      web/src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png
  36. BIN
      web/src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png
  37. BIN
      web/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png
  38. BIN
      web/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png
  39. BIN
      web/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png
  40. BIN
      web/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png
  41. BIN
      web/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png
  42. BIN
      web/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png
  43. BIN
      web/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png
  44. BIN
      web/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png
  45. BIN
      web/src-tauri/icons/icon.icns
  46. BIN
      web/src-tauri/icons/icon.ico
  47. BIN
      web/src-tauri/icons/icon.png
  48. BIN
      web/src-tauri/icons/ios/AppIcon-20x20@1x.png
  49. BIN
      web/src-tauri/icons/ios/AppIcon-20x20@2x-1.png
  50. BIN
      web/src-tauri/icons/ios/AppIcon-20x20@2x.png
  51. BIN
      web/src-tauri/icons/ios/AppIcon-20x20@3x.png
  52. BIN
      web/src-tauri/icons/ios/AppIcon-29x29@1x.png
  53. BIN
      web/src-tauri/icons/ios/AppIcon-29x29@2x-1.png
  54. BIN
      web/src-tauri/icons/ios/AppIcon-29x29@2x.png
  55. BIN
      web/src-tauri/icons/ios/AppIcon-29x29@3x.png
  56. BIN
      web/src-tauri/icons/ios/AppIcon-40x40@1x.png
  57. BIN
      web/src-tauri/icons/ios/AppIcon-40x40@2x-1.png
  58. BIN
      web/src-tauri/icons/ios/AppIcon-40x40@2x.png
  59. BIN
      web/src-tauri/icons/ios/AppIcon-40x40@3x.png
  60. BIN
      web/src-tauri/icons/ios/AppIcon-512@2x.png
  61. BIN
      web/src-tauri/icons/ios/AppIcon-60x60@2x.png
  62. BIN
      web/src-tauri/icons/ios/AppIcon-60x60@3x.png
  63. BIN
      web/src-tauri/icons/ios/AppIcon-76x76@1x.png
  64. BIN
      web/src-tauri/icons/ios/AppIcon-76x76@2x.png
  65. BIN
      web/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png
  66. 16
      web/src-tauri/src/lib.rs
  67. 6
      web/src-tauri/src/main.rs
  68. 37
      web/src-tauri/tauri.conf.json
  69. 1
      web/src/api/bpm/simple/index.ts
  70. 18
      web/src/api/electron/lock/index.ts
  71. 24
      web/src/api/electron/lockworkcord/index.ts
  72. 8
      web/src/api/guide/isolationpoint/index.ts
  73. 22
      web/src/api/guide/lockguide/index.ts
  74. 5
      web/src/api/infra/dataSourceConfig/index.ts
  75. 42
      web/src/api/infra/demo/demo03/erp/index.ts
  76. 42
      web/src/api/infra/demo/demo03/inner/index.ts
  77. 42
      web/src/api/infra/demo/demo03/normal/index.ts
  78. 8
      web/src/api/isolation/plan/index.ts
  79. 18
      web/src/api/isolation/planitem/index.ts
  80. 16
      web/src/api/isolation/planitemdetail/index.ts
  81. 20
      web/src/api/isolation/planlifelock/index.ts
  82. 16
      web/src/api/isolation/point/index.ts
  83. 29
      web/src/api/lock/index.ts
  84. 5
      web/src/api/system/mail/account/index.ts
  85. 5
      web/src/api/system/mail/template/index.ts
  86. 5
      web/src/api/system/notify/template/index.ts
  87. 5
      web/src/api/system/oauth2/client.ts
  88. 5
      web/src/api/system/tenantPackage/index.ts
  89. BIN
      web/src/assets/imgs/iot/device.png
  90. 3
      web/src/components/Cropper/src/CopperModal.vue
  91. 4
      web/src/components/Descriptions/src/Descriptions.vue
  92. 7
      web/src/components/DiyEditor/components/mobile/Carousel/property.vue
  93. 8
      web/src/components/DiyEditor/components/mobile/TitleBar/property.vue
  94. 2
      web/src/components/FormCreate/src/type/index.ts
  95. 7
      web/src/components/Icon/src/IconSelect.vue
  96. 130
      web/src/components/Lock/LockPointNode.vue
  97. 3
      web/src/components/Lock/LockPointNodeAdapter.ts
  98. 25
      web/src/components/LogicFlow/previewPanel.vue
  99. 1
      web/src/components/Map/index.vue
  100. 25
      web/src/components/SimpleProcessDesignerV2/src/nodes-config/ChildProcessNodeConfig.vue

3
.gitignore

@ -1,3 +0,0 @@
.vscode
.idea
.vite

30
web/.env.dev.tauri

@ -0,0 +1,30 @@
NODE_ENV=production
VITE_DEV=true
# 请求路径
VITE_BASE_URL='https://lock.zdhlcn.com:9807'
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务
VITE_UPLOAD_TYPE=server
# 接口地址
VITE_API_URL=/admin-api
# 是否删除debugger
VITE_DROP_DEBUGGER=false
# 是否删除console.log
VITE_DROP_CONSOLE=false
# 是否sourcemap
VITE_SOURCEMAP=true
# 打包路径
VITE_BASE_PATH=/
# 输出路径
VITE_OUT_DIR=dist
# TAURI启动标记
VITE_IS_TAURI=true

2
web/.env.prod

@ -15,7 +15,7 @@ VITE_API_URL=/admin-api
VITE_DROP_DEBUGGER=true
# 是否删除console.log
VITE_DROP_CONSOLE=false
VITE_DROP_CONSOLE=true
# 是否sourcemap
VITE_SOURCEMAP=false

7
web/.env.test → web/.env.prod.tauri

@ -3,7 +3,7 @@ NODE_ENV=production
VITE_DEV=false
# 请求路径
VITE_BASE_URL=''
VITE_BASE_URL='https://lock.zdhlcn.com:9807'
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务
VITE_UPLOAD_TYPE=server
@ -24,4 +24,7 @@ VITE_SOURCEMAP=false
VITE_BASE_PATH=/
# 输出路径
VITE_OUT_DIR=dist-test
VITE_OUT_DIR=dist-prod
# TAURI启动标记
VITE_IS_TAURI=true

6
web/.eslintrc.js

@ -17,6 +17,12 @@ module.exports = defineConfig({
jsx: true
}
},
ignorePatterns: [
'src/components/Tinyflow/**/*.js',
'src/components/Tinyflow/**/*.umd.js',
'src/types/auto-imports.d.ts',
'src/types/auto-components.d.ts'
],
extends: [
'plugin:vue/vue3-recommended',
'plugin:@typescript-eslint/recommended',

3
web/.gitignore

@ -7,3 +7,6 @@ pnpm-debug
auto-*.d.ts
.idea
.history
pnpm-lock.yaml
.vite
.vscode

18
web/.vscode/extensions.json

@ -1,18 +0,0 @@
{
"recommendations": [
"christian-kohler.path-intellisense",
"vscode-icons-team.vscode-icons",
"davidanson.vscode-markdownlint",
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode",
"mrmlnc.vscode-less",
"lokalise.i18n-ally",
"redhat.vscode-yaml",
"csstools.postcss",
"mikestead.dotenv",
"eamodio.gitlens",
"antfu.iconify",
"antfu.unocss",
"Vue.volar"
]
}

16
web/.vscode/launch.json

@ -1,16 +0,0 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "msedge",
"request": "launch",
"name": "Launch Edge against localhost",
"url": "http://localhost",
"webRoot": "${workspaceFolder}/src",
"sourceMaps": true
}
]
}

144
web/.vscode/settings.json

@ -1,144 +0,0 @@
{
"typescript.tsdk": "node_modules/typescript/lib",
"npm.packageManager": "pnpm",
"editor.tabSize": 2,
"prettier.printWidth": 100, //
"editor.defaultFormatter": "esbenp.prettier-vscode",
"files.eol": "\n",
"search.exclude": {
"**/node_modules": true,
"**/*.log": true,
"**/*.log*": true,
"**/bower_components": true,
"**/dist": true,
"**/elehukouben": true,
"**/.git": true,
"**/.gitignore": true,
"**/.svn": true,
"**/.DS_Store": true,
"**/.idea": true,
"**/.vscode": false,
"**/yarn.lock": true,
"**/tmp": true,
"out": true,
"dist": true,
"node_modules": true,
"CHANGELOG.md": true,
"examples": true,
"res": true,
"screenshots": true,
"yarn-error.log": true,
"**/.yarn": true
},
"files.exclude": {
"**/.cache": true,
"**/.editorconfig": true,
"**/.eslintcache": true,
"**/bower_components": true,
"**/.idea": true,
"**/tmp": true,
"**/.git": true,
"**/.svn": true,
"**/.hg": true,
"**/CVS": true,
"**/.DS_Store": 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
},
"stylelint.enable": true,
"stylelint.validate": ["css", "less", "postcss", "scss", "vue", "sass"],
"path-intellisense.mappings": {
"@/": "${workspaceRoot}/src"
},
"[javascriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[html]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[css]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[less]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[scss]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[markdown]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit",
"source.fixAll.stylelint": "explicit"
},
"editor.formatOnSave": true,
"[vue]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"i18n-ally.localesPaths": ["src/locales"],
"i18n-ally.keystyle": "nested",
"i18n-ally.sortKeys": true,
"i18n-ally.namespace": false,
"i18n-ally.enabledParsers": ["ts"],
"i18n-ally.sourceLanguage": "en",
"i18n-ally.displayLanguage": "zh-CN",
"i18n-ally.enabledFrameworks": ["vue", "react"],
"cSpell.words": [
"brotli",
"browserslist",
"codemirror",
"commitlint",
"cropperjs",
"echart",
"echarts",
"esnext",
"esno",
"iconify",
"INTLIFY",
"lintstagedrc",
"logicflow",
"nprogress",
"pinia",
"pnpm",
"qrcode",
"sider",
"sortablejs",
"stylelint",
"svgs",
"unocss",
"unplugin",
"unref",
"videojs",
"VITE",
"vitejs",
"vueuse",
"wangeditor",
"zxcvbn"
],
//
"explorer.fileNesting.enabled": true,
"explorer.fileNesting.expand": false,
"explorer.fileNesting.patterns": {
"*.ts": "$(capture).test.ts, $(capture).test.tsx",
"*.tsx": "$(capture).test.ts, $(capture).test.tsx",
"*.env": "$(capture).env.*",
"package.json": "pnpm-lock.yaml,yarn.lock,LICENSE,README*,CHANGELOG*,CNAME,.gitattributes,.eslintrc-auto-import.json,.gitignore,prettier.config.js,stylelint.config.js,commitlint.config.js,.stylelintignore,.prettierignore,.gitpod.yml,.eslintrc.js,.eslintignore"
},
"terminal.integrated.scrollback": 10000,
"nuxt.isNuxtApp": false
}

32
web/package.json

@ -1,26 +1,26 @@
{
"name": "yudao-ui-admin-vue3",
"version": "2.6.1-snapshot",
"description": "基于vue3、vite4、element-plus、typesScript",
"author": "xingyu",
"private": false,
"name": "ElectronicLock",
"version": "0.0.1",
"private": true,
"scripts": {
"i": "pnpm install",
"dev": "vite --mode dev",
"ts:check": "vue-tsc --noEmit",
"build:local": "node --max_old_space_size=4096 ./node_modules/vite/bin/vite.js build",
"build:dev": "node --max_old_space_size=4096 ./node_modules/vite/bin/vite.js build --mode dev",
"build:test": "node --max_old_space_size=4096 ./node_modules/vite/bin/vite.js build --mode test",
"build:prod": "node --max_old_space_size=4096 ./node_modules/vite/bin/vite.js build --mode prod",
"build:dev": "vite build --mode dev",
"build:prod": "vite build --mode prod",
"serve:dev": "vite preview --mode dev",
"serve:prod": "vite preview --mode prod",
"preview": "pnpm build:local && vite preview",
"preview": "pnpm build:dev && vite preview",
"clean": "npx rimraf node_modules",
"clean:cache": "npx rimraf node_modules/.cache",
"lint:eslint": "eslint --fix --ext .js,.ts,.vue ./src",
"lint:format": "prettier --write --loglevel warn \"src/**/*.{js,ts,json,tsx,css,less,scss,vue,html,md}\"",
"lint:style": "stylelint --fix \"./src/**/*.{vue,less,postcss,css,scss}\" --cache --cache-location node_modules/.cache/stylelint/",
"lint:lint-staged": "lint-staged -c "
"dev:tauri": "vite --mode dev.tauri",
"build:tauri": "vite build --mode prod.tauri",
"tauri:dev": "tauri dev",
"tauri:build": "tauri build",
"tauri:icon": "tauri icon"
},
"dependencies": {
"@element-plus/icons-vue": "^2.1.0",
@ -86,6 +86,7 @@
"@iconify/json": "^2.2.187",
"@intlify/unplugin-vue-i18n": "^2.0.0",
"@purge-icons/generated": "^0.9.0",
"@tauri-apps/cli": "^2.8.1",
"@types/lodash-es": "^4.17.12",
"@types/node": "^20.11.21",
"@types/nprogress": "^0.2.3",
@ -139,15 +140,6 @@
"vue-eslint-parser": "^9.3.2",
"vue-tsc": "^1.8.27"
},
"license": "MIT",
"repository": {
"type": "git",
"url": "git+https://gitee.com/yudaocode/yudao-ui-admin-vue3"
},
"bugs": {
"url": "https://gitee.com/yudaocode/yudao-ui-admin-vue3/issues"
},
"homepage": "https://gitee.com/yudaocode/yudao-ui-admin-vue3",
"web-types": "./web-types.json",
"engines": {
"node": ">= 16.0.0",

4
web/src-tauri/.gitignore

@ -0,0 +1,4 @@
# Generated by Cargo
# will have compiled files and executables
/target/
/gen/schemas

4995
web/src-tauri/Cargo.lock

File diff suppressed because it is too large

25
web/src-tauri/Cargo.toml

@ -0,0 +1,25 @@
[package]
name = "挂牌上锁平台"
version = "0.1.0"
description = "挂牌上锁平台"
authors = ["you"]
license = ""
repository = ""
edition = "2021"
rust-version = "1.77.2"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[lib]
name = "app_lib"
crate-type = ["staticlib", "cdylib", "rlib"]
[build-dependencies]
tauri-build = { version = "2.4.0", features = [] }
[dependencies]
serde_json = "1.0"
serde = { version = "1.0", features = ["derive"] }
log = "0.4"
tauri = { version = "2.8.2", features = [] }
tauri-plugin-log = "2"

3
web/src-tauri/build.rs

@ -0,0 +1,3 @@
fn main() {
tauri_build::build()
}

11
web/src-tauri/capabilities/default.json

@ -0,0 +1,11 @@
{
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "default",
"description": "enables the default permissions",
"windows": [
"main"
],
"permissions": [
"core:default"
]
}

BIN
web/src-tauri/icons/128x128.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

BIN
web/src-tauri/icons/128x128@2x.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
web/src-tauri/icons/32x32.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

BIN
web/src-tauri/icons/64x64.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
web/src-tauri/icons/Square107x107Logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
web/src-tauri/icons/Square142x142Logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

BIN
web/src-tauri/icons/Square150x150Logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

BIN
web/src-tauri/icons/Square284x284Logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
web/src-tauri/icons/Square30x30Logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1002 B

BIN
web/src-tauri/icons/Square310x310Logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
web/src-tauri/icons/Square44x44Logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
web/src-tauri/icons/Square71x71Logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
web/src-tauri/icons/Square89x89Logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
web/src-tauri/icons/StoreLogo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
web/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
web/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

BIN
web/src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
web/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
web/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
web/src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
web/src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
web/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

BIN
web/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
web/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

BIN
web/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
web/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

BIN
web/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

BIN
web/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
web/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

BIN
web/src-tauri/icons/icon.icns

Binary file not shown.

BIN
web/src-tauri/icons/icon.ico

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
web/src-tauri/icons/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
web/src-tauri/icons/ios/AppIcon-20x20@1x.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 659 B

BIN
web/src-tauri/icons/ios/AppIcon-20x20@2x-1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
web/src-tauri/icons/ios/AppIcon-20x20@2x.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
web/src-tauri/icons/ios/AppIcon-20x20@3x.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
web/src-tauri/icons/ios/AppIcon-29x29@1x.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 933 B

BIN
web/src-tauri/icons/ios/AppIcon-29x29@2x-1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
web/src-tauri/icons/ios/AppIcon-29x29@2x.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
web/src-tauri/icons/ios/AppIcon-29x29@3x.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
web/src-tauri/icons/ios/AppIcon-40x40@1x.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
web/src-tauri/icons/ios/AppIcon-40x40@2x-1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
web/src-tauri/icons/ios/AppIcon-40x40@2x.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
web/src-tauri/icons/ios/AppIcon-40x40@3x.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
web/src-tauri/icons/ios/AppIcon-512@2x.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

BIN
web/src-tauri/icons/ios/AppIcon-60x60@2x.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
web/src-tauri/icons/ios/AppIcon-60x60@3x.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

BIN
web/src-tauri/icons/ios/AppIcon-76x76@1x.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
web/src-tauri/icons/ios/AppIcon-76x76@2x.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

BIN
web/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

16
web/src-tauri/src/lib.rs

@ -0,0 +1,16 @@
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
tauri::Builder::default()
.setup(|app| {
if cfg!(debug_assertions) {
app.handle().plugin(
tauri_plugin_log::Builder::default()
.level(log::LevelFilter::Info)
.build(),
)?;
}
Ok(())
})
.run(tauri::generate_context!())
.expect("error while running tauri application");
}

6
web/src-tauri/src/main.rs

@ -0,0 +1,6 @@
// Prevents additional console window on Windows in release, DO NOT REMOVE!!
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
fn main() {
app_lib::run();
}

37
web/src-tauri/tauri.conf.json

@ -0,0 +1,37 @@
{
"$schema": "../node_modules/@tauri-apps/cli/config.schema.json",
"productName": "ElectronicLock",
"version": "0.1.0",
"identifier": "lock.zdhlcn.com",
"build": {
"frontendDist": "../dist-prod",
"devUrl": "http://localhost",
"beforeDevCommand": "pnpm dev:tauri",
"beforeBuildCommand": "pnpm build:tauri"
},
"app": {
"windows": [
{
"title": "挂牌上锁平台",
"width": 800,
"height": 600,
"resizable": true,
"fullscreen": false
}
],
"security": {
"csp": null
}
},
"bundle": {
"active": true,
"targets": "all",
"icon": [
"icons/32x32.png",
"icons/128x128.png",
"icons/128x128@2x.png",
"icons/icon.icns",
"icons/icon.ico"
]
}
}

1
web/src/api/bpm/simple/index.ts

@ -1,6 +1,5 @@
import request from '@/config/axios'
export const updateBpmSimpleModel = async (data) => {
return await request.post({
url: '/bpm/model/simple/update',

18
web/src/api/electron/lock/index.ts

@ -1,16 +1,16 @@
import request from '@/config/axios'
import type { Dayjs } from 'dayjs';
import type { Dayjs } from 'dayjs'
/** 电子锁信息 */
export interface Lock {
id?: number; // 主键ID
lockNumber?: number; // 编号
lockName?: string; // 名称
lockStatus?: number; // 状态
lockType?: number; // 锁具类型
lockEnableStatus?: number; // 启用状态: 0=未启用, 1=已启用
lockLastChargeTime?: string | Dayjs; // 上次充电时间
lockBluetoothId?: string; // 蓝牙ID
id?: number // 主键ID
lockNumber?: number // 编号
lockName?: string // 名称
lockStatus?: number // 状态
lockType?: number // 锁具类型
lockEnableStatus?: number // 启用状态: 0=未启用, 1=已启用
lockLastChargeTime?: string | Dayjs // 上次充电时间
lockBluetoothId?: string // 蓝牙ID
}
// 电子锁 API

24
web/src/api/electron/lockworkcord/index.ts

@ -1,17 +1,17 @@
import request from '@/config/axios'
import type { Dayjs } from 'dayjs';
import type { Dayjs } from 'dayjs'
/** 电子锁操作记录信息 */
export interface LockWorkRecord {
id?: number; // 主键ID
operatorId?: number; // 操作人ID
lockId?: number; // 电子锁ID
isolationPlanItemDetailId?: number; // 关联的子项详情ID (某些操作可能不关联)
recordType?: number; // 记录类型
signaturePath?: string; // 操作签名 (图片路径)
beforePhotoPath?: string; // 操作前照片 (图片路径)
afterPhotoPath?: string; // 操作后照片 (图片路径)
gpsCoordinates?: string; // 操作GPS坐标
id?: number // 主键ID
operatorId?: number // 操作人ID
lockId?: number // 电子锁ID
isolationPlanItemDetailId?: number // 关联的子项详情ID (某些操作可能不关联)
recordType?: number // 记录类型
signaturePath?: string // 操作签名 (图片路径)
beforePhotoPath?: string // 操作前照片 (图片路径)
afterPhotoPath?: string // 操作后照片 (图片路径)
gpsCoordinates?: string // 操作GPS坐标
}
// 电子锁操作记录 API
@ -43,7 +43,9 @@ export const LockWorkRecordApi = {
/** 批量删除电子锁操作记录 */
deleteLockWorkRecordList: async (ids: number[]) => {
return await request.delete({ url: `/electron/lock-word-record/delete-list?ids=${ids.join(',')}` })
return await request.delete({
url: `/electron/lock-word-record/delete-list?ids=${ids.join(',')}`
})
},
// 导出电子锁操作记录 Excel

8
web/src/api/guide/isolationpoint/index.ts

@ -1,11 +1,11 @@
import request from '@/config/axios'
import type { Dayjs } from 'dayjs';
import type { Dayjs } from 'dayjs'
/** 指导书与隔离点关联信息 */
export interface IsolationPoint {
id?: number; // id
guideId?: number; // 隔离指导书ID
isolationPointId?: number; // 隔离点ID
id?: number // id
guideId?: number // 隔离指导书ID
isolationPointId?: number // 隔离点ID
}
// 指导书与隔离点关联 API

22
web/src/api/guide/lockguide/index.ts

@ -1,18 +1,18 @@
import request from '@/config/axios'
import type { Dayjs } from 'dayjs';
import type { Dayjs } from 'dayjs'
/** 隔离指导书信息 */
export interface LockGuide {
id?: number; // 主键ID
name?: string; // 指导书名称
code?: string; // 指导书编码
operatorId?: number; // 操作人ID
operatorHelperId?: number; // 操作协助人ID
verifierId?: number; // 验证人ID
verifierHelperId?: number; // 验证协助人ID
guideContent?: string; // 工作内容和范围
guideLockNums?: number; // 所需设备锁数量
isolationPointIds?: number[]; // 关联隔离点ID
id?: number // 主键ID
name?: string // 指导书名称
code?: string // 指导书编码
operatorId?: number // 操作人ID
operatorHelperId?: number // 操作协助人ID
verifierId?: number // 验证人ID
verifierHelperId?: number // 验证协助人ID
guideContent?: string // 工作内容和范围
guideLockNums?: number // 所需设备锁数量
isolationPointIds?: number[] // 关联隔离点ID
}
// 隔离指导书 API

5
web/src/api/infra/dataSourceConfig/index.ts

@ -26,7 +26,10 @@ export const deleteDataSourceConfig = (id: number) => {
// 批量删除数据源配置
export const deleteDataSourceConfigList = (ids: number[]) => {
return request.delete({ url: '/infra/data-source-config/delete-list', params: { ids: ids.join(',') } })
return request.delete({
url: '/infra/data-source-config/delete-list',
params: { ids: ids.join(',') }
})
}
// 查询数据源配置详情

42
web/src/api/infra/demo/demo03/erp/index.ts

@ -1,29 +1,29 @@
import request from '@/config/axios'
import type { Dayjs } from 'dayjs';
import type { Dayjs } from 'dayjs'
/** 学生课程信息 */
export interface Demo03Course {
id: number; // 编号
studentId?: number; // 学生编号
name?: string; // 名字
score?: number; // 分数
id: number // 编号
studentId?: number // 学生编号
name?: string // 名字
score?: number // 分数
}
/** 学生班级信息 */
export interface Demo03Grade {
id: number; // 编号
studentId?: number; // 学生编号
name?: string; // 名字
teacher?: string; // 班主任
id: number // 编号
studentId?: number // 学生编号
name?: string // 名字
teacher?: string // 班主任
}
/** 学生信息 */
export interface Demo03Student {
id: number; // 编号
name?: string; // 名字
sex?: number; // 性别
birthday?: string | Dayjs; // 出生日期
description?: string; // 简介
id: number // 编号
name?: string // 名字
sex?: number // 性别
birthday?: string | Dayjs // 出生日期
description?: string // 简介
}
// 学生 API
@ -55,7 +55,9 @@ export const Demo03StudentApi = {
/** 批量删除学生 */
deleteDemo03StudentList: async (ids: number[]) => {
return await request.delete({ url: `/infra/demo03-student-erp/delete-list?ids=${ids.join(',')}` })
return await request.delete({
url: `/infra/demo03-student-erp/delete-list?ids=${ids.join(',')}`
})
},
// 导出学生 Excel
@ -86,7 +88,9 @@ export const Demo03StudentApi = {
/** 批量删除学生课程 */
deleteDemo03CourseList: async (ids: number[]) => {
return await request.delete({ url: `/infra/demo03-student-erp/demo03-course/delete-list?ids=${ids.join(',')}` })
return await request.delete({
url: `/infra/demo03-student-erp/demo03-course/delete-list?ids=${ids.join(',')}`
})
},
// 获得学生课程
@ -117,11 +121,13 @@ export const Demo03StudentApi = {
/** 批量删除学生班级 */
deleteDemo03GradeList: async (ids: number[]) => {
return await request.delete({ url: `/infra/demo03-student-erp/demo03-grade/delete-list?ids=${ids.join(',')}` })
return await request.delete({
url: `/infra/demo03-student-erp/demo03-grade/delete-list?ids=${ids.join(',')}`
})
},
// 获得学生班级
getDemo03Grade: async (id: number) => {
return await request.get({ url: `/infra/demo03-student-erp/demo03-grade/get?id=` + id })
},
}
}

42
web/src/api/infra/demo/demo03/inner/index.ts

@ -1,29 +1,29 @@
import request from '@/config/axios'
import type { Dayjs } from 'dayjs';
import type { Dayjs } from 'dayjs'
/** 学生课程信息 */
export interface Demo03Course {
id: number; // 编号
studentId?: number; // 学生编号
name?: string; // 名字
score?: number; // 分数
id: number // 编号
studentId?: number // 学生编号
name?: string // 名字
score?: number // 分数
}
/** 学生班级信息 */
export interface Demo03Grade {
id: number; // 编号
studentId?: number; // 学生编号
name?: string; // 名字
teacher?: string; // 班主任
id: number // 编号
studentId?: number // 学生编号
name?: string // 名字
teacher?: string // 班主任
}
/** 学生信息 */
export interface Demo03Student {
id: number; // 编号
name?: string; // 名字
sex?: number; // 性别
birthday?: string | Dayjs; // 出生日期
description?: string; // 简介
id: number // 编号
name?: string // 名字
sex?: number // 性别
birthday?: string | Dayjs // 出生日期
description?: string // 简介
demo03courses?: Demo03Course[]
demo03grade?: Demo03Grade
}
@ -57,7 +57,9 @@ export const Demo03StudentApi = {
/** 批量删除学生 */
deleteDemo03StudentList: async (ids: number[]) => {
return await request.delete({ url: `/infra/demo03-student-inner/delete-list?ids=${ids.join(',')}` })
return await request.delete({
url: `/infra/demo03-student-inner/delete-list?ids=${ids.join(',')}`
})
},
// 导出学生 Excel
@ -69,13 +71,17 @@ export const Demo03StudentApi = {
// 获得学生课程列表
getDemo03CourseListByStudentId: async (studentId) => {
return await request.get({ url: `/infra/demo03-student-inner/demo03-course/list-by-student-id?studentId=` + studentId })
return await request.get({
url: `/infra/demo03-student-inner/demo03-course/list-by-student-id?studentId=` + studentId
})
},
// ==================== 子表(学生班级) ====================
// 获得学生班级
getDemo03GradeByStudentId: async (studentId) => {
return await request.get({ url: `/infra/demo03-student-inner/demo03-grade/get-by-student-id?studentId=` + studentId })
},
return await request.get({
url: `/infra/demo03-student-inner/demo03-grade/get-by-student-id?studentId=` + studentId
})
}
}

42
web/src/api/infra/demo/demo03/normal/index.ts

@ -1,29 +1,29 @@
import request from '@/config/axios'
import type { Dayjs } from 'dayjs';
import type { Dayjs } from 'dayjs'
/** 学生课程信息 */
export interface Demo03Course {
id: number; // 编号
studentId?: number; // 学生编号
name?: string; // 名字
score?: number; // 分数
id: number // 编号
studentId?: number // 学生编号
name?: string // 名字
score?: number // 分数
}
/** 学生班级信息 */
export interface Demo03Grade {
id: number; // 编号
studentId?: number; // 学生编号
name?: string; // 名字
teacher?: string; // 班主任
id: number // 编号
studentId?: number // 学生编号
name?: string // 名字
teacher?: string // 班主任
}
/** 学生信息 */
export interface Demo03Student {
id: number; // 编号
name?: string; // 名字
sex?: number; // 性别
birthday?: string | Dayjs; // 出生日期
description?: string; // 简介
id: number // 编号
name?: string // 名字
sex?: number // 性别
birthday?: string | Dayjs // 出生日期
description?: string // 简介
demo03courses?: Demo03Course[]
demo03grade?: Demo03Grade
}
@ -57,7 +57,9 @@ export const Demo03StudentApi = {
/** 批量删除学生 */
deleteDemo03StudentList: async (ids: number[]) => {
return await request.delete({ url: `/infra/demo03-student-normal/delete-list?ids=${ids.join(',')}` })
return await request.delete({
url: `/infra/demo03-student-normal/delete-list?ids=${ids.join(',')}`
})
},
// 导出学生 Excel
@ -69,13 +71,17 @@ export const Demo03StudentApi = {
// 获得学生课程列表
getDemo03CourseListByStudentId: async (studentId) => {
return await request.get({ url: `/infra/demo03-student-normal/demo03-course/list-by-student-id?studentId=` + studentId })
return await request.get({
url: `/infra/demo03-student-normal/demo03-course/list-by-student-id?studentId=` + studentId
})
},
// ==================== 子表(学生班级) ====================
// 获得学生班级
getDemo03GradeByStudentId: async (studentId) => {
return await request.get({ url: `/infra/demo03-student-normal/demo03-grade/get-by-student-id?studentId=` + studentId })
},
return await request.get({
url: `/infra/demo03-student-normal/demo03-grade/get-by-student-id?studentId=` + studentId
})
}
}

8
web/src/api/isolation/plan/index.ts

@ -1,11 +1,11 @@
import request from '@/config/axios'
import type { Dayjs } from 'dayjs';
import type { Dayjs } from 'dayjs'
/** 检修任务信息 */
export interface Plan {
id: number; // 主键ID
ipName?: string; // 任务名称
status?: number; // 状态
id: number // 主键ID
ipName?: string // 任务名称
status?: number // 状态
}
// 检修任务 API

18
web/src/api/isolation/planitem/index.ts

@ -1,16 +1,16 @@
import request from '@/config/axios'
import type { Dayjs } from 'dayjs';
import type { Dayjs } from 'dayjs'
/** 检修任务子项信息 */
export interface PlanItem {
id?: number; // 主键ID
isolationPlanId?: number; // 检修任务ID
guideId?: number; // 隔离指导书ID
operatorId?: number; // 集中挂牌人ID
operatorHelperId?: number; // 集中挂牌协助人ID
verifierId?: number; // 验证人ID
verifierHelperId?: number; // 验证协助人ID
status?: number; // 子项状态: 0=未完成, 1=已完成
id?: number // 主键ID
isolationPlanId?: number // 检修任务ID
guideId?: number // 隔离指导书ID
operatorId?: number // 集中挂牌人ID
operatorHelperId?: number // 集中挂牌协助人ID
verifierId?: number // 验证人ID
verifierHelperId?: number // 验证协助人ID
status?: number // 子项状态: 0=未完成, 1=已完成
}
// 检修任务子项 API

16
web/src/api/isolation/planitemdetail/index.ts

@ -1,13 +1,13 @@
import request from '@/config/axios'
import type { Dayjs } from 'dayjs';
import type { Dayjs } from 'dayjs'
/** 检修任务子项详情信息 */
export interface PlanItemDetail {
id?: number; // 主键ID
isolationPlanItemId?: number; // 检修任务子项ID
isolationPointId?: number; // 隔离点ID
lockId?: number; // 电子锁ID
lockStatus?: number; // 锁状态: 0=未上锁, 1=已上锁, 2=已解锁
id?: number // 主键ID
isolationPlanItemId?: number // 检修任务子项ID
isolationPointId?: number // 隔离点ID
lockId?: number // 电子锁ID
lockStatus?: number // 锁状态: 0=未上锁, 1=已上锁, 2=已解锁
}
// 检修任务子项详情 API
@ -39,7 +39,9 @@ export const PlanItemDetailApi = {
/** 批量删除检修任务子项详情 */
deletePlanItemDetailList: async (ids: number[]) => {
return await request.delete({ url: `/isolation/plan-item-detail/delete-list?ids=${ids.join(',')}` })
return await request.delete({
url: `/isolation/plan-item-detail/delete-list?ids=${ids.join(',')}`
})
},
// 导出检修任务子项详情 Excel

20
web/src/api/isolation/planlifelock/index.ts

@ -1,15 +1,15 @@
import request from '@/config/axios'
import type { Dayjs } from 'dayjs';
import type { Dayjs } from 'dayjs'
/** 个人生命锁信息 */
export interface PlanLifeLock {
id: number; // 主键ID
isolationPlanItemDetailId?: number; // 子项详情ID
userId?: number; // 上锁人ID
lockType?: number; // 生命锁类型
lockStatus?: number; // 锁定状态: 0=未上锁, 1=已上锁
lockTime?: number; // 上锁时间
unlockTime?: number; // 解锁时间
id: number // 主键ID
isolationPlanItemDetailId?: number // 子项详情ID
userId?: number // 上锁人ID
lockType?: number // 生命锁类型
lockStatus?: number // 锁定状态: 0=未上锁, 1=已上锁
lockTime?: number // 上锁时间
unlockTime?: number // 解锁时间
}
// 个人生命锁 API
@ -41,7 +41,9 @@ export const PlanLifeLockApi = {
/** 批量删除个人生命锁 */
deletePlanLifeLockList: async (ids: number[]) => {
return await request.delete({ url: `/isolation/plan-life-lock/delete-list?ids=${ids.join(',')}` })
return await request.delete({
url: `/isolation/plan-life-lock/delete-list?ids=${ids.join(',')}`
})
},
// 导出个人生命锁 Excel

16
web/src/api/isolation/point/index.ts

@ -1,15 +1,15 @@
import request from '@/config/axios'
import type { Dayjs } from 'dayjs';
import type { Dayjs } from 'dayjs'
/** 隔离点信息 */
export interface Point {
id?: number; // 主键ID
ipType?: string; // 隔离点类型
ipName?: string; // 隔离点名称
ipLocation?: string; // 隔离点位置
ipNumber?: number; // 隔离点编号
status?: number; // 隔离点状态
guideLockNums?: number; // 电子锁数量
id?: number // 主键ID
ipType?: string // 隔离点类型
ipName?: string // 隔离点名称
ipLocation?: string // 隔离点位置
ipNumber?: number // 隔离点编号
status?: number // 隔离点状态
guideLockNums?: number // 电子锁数量
}
// 隔离点 API

29
web/src/api/lock/index.ts

@ -1,7 +1,5 @@
import request from '@/config/axios'
export const getAllLock = (params: PageParam = { pageSize: 9999, pageNo: 1 }) => {
return request.get({ url: `/electron/lock/page`, params })
}
@ -29,13 +27,13 @@ export const getAllPlanLifeLock = (params: PageParam = { pageSize: 9999, pageNo:
}
const baseUrl = import.meta.env.VITE_BASE_URL + import.meta.env.VITE_API_URL
export const getAgentConfigSignature = (url: string) => {
return fetch(`${baseUrl}/js/weixin/getAgentConfigSignature?url=${url}`).then(async res => {
return fetch(`${baseUrl}/js/weixin/getAgentConfigSignature?url=${url}`).then(async (res) => {
return await res.json()
})
}
export const getConfigSignature = (url: string) => {
return fetch(`${baseUrl}/js/weixin/getConfigSignature?url=${url}`).then(async res => {
return fetch(`${baseUrl}/js/weixin/getConfigSignature?url=${url}`).then(async (res) => {
return await res.json()
})
}
@ -44,23 +42,30 @@ export const getAllFormattedIsolationPlan = () => {
return request.get({ url: `/isolation/plan/planListAll` })
}
// 获取所有基础数据
export const getAllBaseData = () => request.get({ url: `isolation/point/getListAll` })
// 查询用户管理列表
export const getAllUser = () => request.get({ url: 'system/user/list-all-simple' })
// 根据隔离点获取相关记录
export const getIsolationPointDetail = (id: number) => request.get({ url: `isolation/point/getPointListAll`, params: { id } })
export const getIsolationPointDetail = (id: number) =>
request.get({ url: `isolation/point/getPointListAll`, params: { id } })
export const bindLock = (data: { planItemDetailId: number; lockId: number }) => request.put({ url: `isolation/point/bindlock`, data })
export const bindLock = (data: { planItemDetailId: number; lockId: number }) =>
request.put({ url: `isolation/point/bindlock`, data })
export const lockAction = (data: { planItemDetailId: number, operateRecordId: number }) => request.put({ url: `isolation/point/createLock`, data })
export const lockAction = (data: { planItemDetailId: number; operateRecordId: number }) =>
request.put({ url: `isolation/point/createLock`, data })
export const verifyLockAction = (data: { planItemDetailId: number, verifyRecordId: number }) => request.put({ url: `isolation/point/verifyLock`, data })
export const verifyLockAction = (data: { planItemDetailId: number; verifyRecordId: number }) =>
request.put({ url: `isolation/point/verifyLock`, data })
export const verifyUnlockAction = (data: { planItemDetailId: number, lifelockId: number }) => request.put({ url: `isolation/point/verifyUnLock`, data })
export const verifyUnlockAction = (data: { planItemDetailId: number; lifelockId: number }) =>
request.put({ url: `isolation/point/verifyUnLock`, data })
export const unLockAction = (data: { planItemDetailId: number, planId: number, lifelockId: number }) => request.put({ url: `isolation/point/unLock`, data })
export const unLockAction = (data: {
planItemDetailId: number
planId: number
lifelockId: number
}) => request.put({ url: `isolation/point/unLock`, data })

5
web/src/api/system/mail/account/index.ts

@ -38,7 +38,10 @@ export const deleteMailAccount = async (id: number) => {
// 批量删除邮箱账号
export const deleteMailAccountList = async (ids: number[]) => {
return await request.delete({ url: '/system/mail-account/delete-list', params: { ids: ids.join(',') } })
return await request.delete({
url: '/system/mail-account/delete-list',
params: { ids: ids.join(',') }
})
}
// 获得邮箱账号精简列表

5
web/src/api/system/mail/template/index.ts

@ -46,7 +46,10 @@ export const deleteMailTemplate = async (id: number) => {
// 批量删除邮件模版
export const deleteMailTemplateList = async (ids: number[]) => {
return await request.delete({ url: '/system/mail-template/delete-list', params: { ids: ids.join(',') } })
return await request.delete({
url: '/system/mail-template/delete-list',
params: { ids: ids.join(',') }
})
}
// 发送邮件

5
web/src/api/system/notify/template/index.ts

@ -45,7 +45,10 @@ export const deleteNotifyTemplate = async (id: number) => {
// 批量删除站内信模板
export const deleteNotifyTemplateList = async (ids: number[]) => {
return await request.delete({ url: '/system/notify-template/delete-list', params: { ids: ids.join(',') } })
return await request.delete({
url: '/system/notify-template/delete-list',
params: { ids: ids.join(',') }
})
}
// 发送站内信

5
web/src/api/system/oauth2/client.ts

@ -48,5 +48,8 @@ export const deleteOAuth2Client = (id: number) => {
// 批量删除 OAuth2 客户端
export const deleteOAuth2ClientList = (ids: number[]) => {
return request.delete({ url: '/system/oauth2-client/delete-list', params: { ids: ids.join(',') } })
return request.delete({
url: '/system/oauth2-client/delete-list',
params: { ids: ids.join(',') }
})
}

5
web/src/api/system/tenantPackage/index.ts

@ -39,7 +39,10 @@ export const deleteTenantPackage = (id: number) => {
// 批量删除租户套餐
export const deleteTenantPackageList = (ids: number[]) => {
return request.delete({ url: '/system/tenant-package/delete-list', params: { ids: ids.join(',') } })
return request.delete({
url: '/system/tenant-package/delete-list',
params: { ids: ids.join(',') }
})
}
// 获取租户套餐精简信息列表

BIN
web/src/assets/imgs/iot/device.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

3
web/src/components/Cropper/src/CopperModal.vue

@ -208,7 +208,8 @@ $prefix-cls: #{$namespace}-cropper-am;
&-cropper {
height: 300px;
background: #eee;
background-image: linear-gradient(
background-image:
linear-gradient(
45deg,
rgb(0 0 0 / 25%) 25%,
transparent 0,

4
web/src/components/Descriptions/src/Descriptions.vue

@ -130,9 +130,7 @@ const toggleClick = () => {
<DictTag :type="item.dictType" :value="data[item.field] + ''" />
</slot>
<slot v-else :name="item.field" :row="data">
{{
item.mappedField ? data[item.mappedField] : data[item.field]
}}
{{ item.mappedField ? data[item.mappedField] : data[item.field] }}
</slot>
</template>
</ElDescriptionsItem>

7
web/src/components/DiyEditor/components/mobile/Carousel/property.vue

@ -17,7 +17,12 @@
</el-radio-group>
</el-form-item>
<el-form-item label="高度" prop="height">
<el-input-number class="!w-50% mr-10px" controls-position="right" v-model="formData.height" /> px
<el-input-number
class="!w-50% mr-10px"
controls-position="right"
v-model="formData.height"
/>
px
</el-form-item>
<el-form-item label="指示器" prop="indicator">
<el-radio-group v-model="formData.indicator">

8
web/src/components/DiyEditor/components/mobile/TitleBar/property.vue

@ -31,13 +31,7 @@
/>
</el-form-item>
<el-form-item label="高度" prop="height" label-width="70px">
<el-slider
v-model="formData.height"
:max="200"
:min="20"
show-input
input-size="small"
/>
<el-slider v-model="formData.height" :max="200" :min="20" show-input input-size="small" />
</el-form-item>
</el-card>
<el-card header="主标题" class="property-group" shadow="never">

2
web/src/components/FormCreate/src/type/index.ts

@ -46,6 +46,6 @@ export interface SelectRuleOption {
label: string // label 名称
name: string // 组件名称
icon: string // 组件图标
props?: any[], // 组件规则
props?: any[] // 组件规则
event?: any[] // 事件配置
}

7
web/src/components/Icon/src/IconSelect.vue

@ -125,7 +125,12 @@ watch(
<template>
<div class="selector">
<ElInput v-model="inputValue" @click="visible = !visible" :clearable="props.clearable" @clear="clearIcon">
<ElInput
v-model="inputValue"
@click="visible = !visible"
:clearable="props.clearable"
@clear="clearIcon"
>
<template #append>
<ElPopover
:popper-options="{

130
web/src/components/Lock/LockPointNode.vue

@ -197,8 +197,8 @@ const useHorizontal = ref(props.expand)
flex-direction: column;
gap: 8px;
padding: 8px;
background: #ffffffcc;
border: 1px solid #00f369;
background: var(--el-bg-color-overlay);
border: 1px solid var(--el-color-success);
border-radius: 6px;
backdrop-filter: blur(2px);
}
@ -210,11 +210,11 @@ const useHorizontal = ref(props.expand)
}
.title {
font-size: 12px;
color: #909399;
color: var(--el-text-color-regular);
}
.point-name {
font-weight: 600;
color: #303133;
color: var(--el-text-color-primary);
}
.section {
@ -224,7 +224,7 @@ const useHorizontal = ref(props.expand)
}
.section-title {
font-size: 12px;
color: #606266;
color: var(--el-text-color-regular);
font-weight: 600;
}
@ -234,10 +234,10 @@ const useHorizontal = ref(props.expand)
gap: 6px;
}
.task-card {
border: 1px solid #ebeef5;
border: 1px solid var(--el-border-color-lighter);
border-radius: 4px;
padding: 6px;
background: #fff;
background: var(--el-bg-color-overlay);
}
.task-row {
display: flex;
@ -249,10 +249,10 @@ const useHorizontal = ref(props.expand)
}
.label {
text-wrap: nowrap;
color: #909399;
color: var(--el-text-color-regular);
}
.value {
color: #303133;
color: var(--el-text-color-primary);
font-weight: 500;
}
@ -281,24 +281,24 @@ const useHorizontal = ref(props.expand)
border: 1px solid transparent;
}
.tag--info {
color: #409eff;
background: #ecf5ff;
border-color: #b3d8ff;
color: var(--el-color-primary);
background: var(--el-color-primary-light-9);
border-color: var(--el-color-primary-light-5);
}
.tag--success {
color: #67c23a;
background: #f0f9eb;
border-color: #c2e7b0;
color: var(--el-color-success);
background: var(--el-color-success-light-9);
border-color: var(--el-color-success-light-5);
}
.tag--warning {
color: #e6a23c;
background: #fdf6ec;
border-color: #f3d19e;
color: var(--el-color-warning);
background: var(--el-color-warning-light-9);
border-color: var(--el-color-warning-light-5);
}
.tag--danger {
color: #f56c6c;
background: #fef0f0;
border-color: #fbc4c4;
color: var(--el-color-danger);
background: var(--el-color-danger-light-9);
border-color: var(--el-color-danger-light-5);
}
.lifelock-list {
@ -317,11 +317,11 @@ const useHorizontal = ref(props.expand)
justify-content: space-between;
}
.user-name {
color: #303133;
color: var(--el-text-color-primary);
}
.placeholder {
color: #c0c4cc;
color: var(--el-text-color-placeholder);
}
/* 横向布局样式 */
@ -337,7 +337,7 @@ const useHorizontal = ref(props.expand)
.node-container.horizontal .header {
width: 100%;
flex-shrink: 0;
border-bottom: 1px solid #e6e8eb;
border-bottom: 1px solid var(--el-border-color-lighter);
padding-bottom: 8px;
margin-bottom: 4px;
}
@ -346,10 +346,10 @@ const useHorizontal = ref(props.expand)
flex: 1;
min-width: 180px;
max-width: 250px;
border: 1px solid #ebeef5;
border: 1px solid var(--el-border-color-lighter);
border-radius: 4px;
padding: 8px;
background: #fafafa;
background: var(--el-fill-color-light);
}
.node-container.horizontal .task-list {
@ -385,6 +385,82 @@ const useHorizontal = ref(props.expand)
}
.locked {
border-color: #f56c6c;
border-color: var(--el-color-danger);
}
/* 黑暗模式特殊样式 */
:deep(.dark) .node-container {
background: var(--el-bg-color-overlay);
border-color: var(--el-color-success);
}
:deep(.dark) .task-card {
background: var(--el-bg-color-overlay);
border-color: var(--el-border-color);
}
:deep(.dark) .node-container.horizontal .section {
background: var(--el-fill-color-darker);
border-color: var(--el-border-color);
}
:deep(.dark) .node-container.horizontal .header {
border-bottom-color: var(--el-border-color);
}
/* 悬停效果优化 */
.node-container:hover {
box-shadow: 0 2px 8px var(--el-box-shadow-light);
transition: box-shadow 0.2s ease;
}
:deep(.dark) .node-container:hover {
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
}
.task-card:hover {
border-color: var(--el-color-primary);
transition: border-color 0.2s ease;
}
:deep(.dark) .task-card:hover {
border-color: var(--el-color-primary);
}
/* 状态样式优化 */
.node-container.locked {
border-color: var(--el-color-danger);
box-shadow: 0 0 0 1px var(--el-color-danger-light-5);
}
:deep(.dark) .node-container.locked {
box-shadow: 0 0 0 1px var(--el-color-danger-light-3);
}
.node-container.locked:hover {
box-shadow: 0 2px 8px var(--el-box-shadow-light), 0 0 0 1px var(--el-color-danger-light-5);
}
:deep(.dark) .node-container.locked:hover {
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3), 0 0 0 1px var(--el-color-danger-light-3);
}
/* 标签悬停效果 */
.tag:hover {
transform: translateY(-1px);
transition: transform 0.2s ease;
}
/* 响应式优化 */
@media (max-width: 768px) {
.node-container.horizontal {
min-width: auto;
max-width: 100%;
}
.node-container.horizontal .section {
min-width: auto;
max-width: 100%;
}
}
</style>

3
web/src/components/Lock/LockPointNodeAdapter.ts

@ -42,7 +42,8 @@ class LockPointNode extends HtmlNode {
components: {
LockPointVueNode
},
render: () => h(LockPointVueNode, {
render: () =>
h(LockPointVueNode, {
...node.properties
})
})

25
web/src/components/LogicFlow/previewPanel.vue

@ -1,10 +1,9 @@
<template>
<div class="logicflow-preview-panel" ref="logicflow-preview">
</div>
<div class="logicflow-preview-panel" ref="logicflow-preview"> </div>
</template>
<script setup>
import { ref } from 'vue'
import LogicFlow from '@logicflow/core';
import LogicFlow from '@logicflow/core'
const logicflowPreview = ref(null)
const data = {
//
@ -14,24 +13,24 @@ const data = {
type: 'rect',
x: 100,
y: 150,
text: '你好',
text: '你好'
},
{
id: 21,
type: 'circle',
x: 300,
y: 150,
},
y: 150
}
],
//
edges: [
{
type: 'polyline',
sourceNodeId: 50,
targetNodeId: 21,
},
],
};
targetNodeId: 21
}
]
}
const lf = new LogicFlow({
container: document.querySelector('#logicflow-preview'),
stopScrollGraph: true,
@ -40,7 +39,7 @@ const lf = new LogicFlow({
height: 500,
grid: {
type: 'dot',
size: 20,
},
});
size: 20
}
})
</script>

1
web/src/components/Map/index.vue

@ -11,5 +11,4 @@ const map = ref(null)
width: 100%;
height: 100%;
}
</style>

25
web/src/components/SimpleProcessDesignerV2/src/nodes-config/ChildProcessNodeConfig.vue

@ -295,10 +295,20 @@
/>
</el-select>
</el-form-item>
<el-form-item v-if="configForm.multiInstanceSourceType === ChildProcessMultiInstanceSourceTypeEnum.FIXED_QUANTITY">
<el-form-item
v-if="
configForm.multiInstanceSourceType ===
ChildProcessMultiInstanceSourceTypeEnum.FIXED_QUANTITY
"
>
<el-input-number v-model="configForm.multiInstanceSource" :min="1" />
</el-form-item>
<el-form-item v-if="configForm.multiInstanceSourceType === ChildProcessMultiInstanceSourceTypeEnum.NUMBER_FORM">
<el-form-item
v-if="
configForm.multiInstanceSourceType ===
ChildProcessMultiInstanceSourceTypeEnum.NUMBER_FORM
"
>
<el-select class="w-200px!" v-model="configForm.multiInstanceSource">
<el-option
v-for="(field, fIdx) in digitalFormFieldOptions"
@ -308,7 +318,12 @@
/>
</el-select>
</el-form-item>
<el-form-item v-if="configForm.multiInstanceSourceType === ChildProcessMultiInstanceSourceTypeEnum.MULTIPLE_FORM">
<el-form-item
v-if="
configForm.multiInstanceSourceType ===
ChildProcessMultiInstanceSourceTypeEnum.MULTIPLE_FORM
"
>
<el-select class="w-200px!" v-model="configForm.multiInstanceSource">
<el-option
v-for="(field, fIdx) in multiFormFieldOptions"
@ -519,7 +534,9 @@ const showChildProcessNodeConfig = (node: SimpleFlowNode) => {
configForm.value.outVariables = node.childProcessSetting.outVariables
// 6.
configForm.value.startUserType = node.childProcessSetting.startUserSetting.type
configForm.value.startUserEmptyType = node.childProcessSetting.startUserSetting.emptyType ?? ChildProcessStartUserEmptyTypeEnum.MAIN_PROCESS_START_USER
configForm.value.startUserEmptyType =
node.childProcessSetting.startUserSetting.emptyType ??
ChildProcessStartUserEmptyTypeEnum.MAIN_PROCESS_START_USER
configForm.value.startUserFormField = node.childProcessSetting.startUserSetting.formField ?? ''
// 7.
configForm.value.timeoutEnable = node.childProcessSetting.timeoutSetting.enable ?? false

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save