Quellcode durchsuchen

device manage system.

renevy vor 4 Jahren
Ursprung
Commit
266cade1f2
100 geänderte Dateien mit 2841 neuen und 0 gelöschten Zeilen
  1. 14 0
      device-manage-ui/.editorconfig
  2. 14 0
      device-manage-ui/.env.development
  3. 6 0
      device-manage-ui/.env.production
  4. 8 0
      device-manage-ui/.env.staging
  5. 4 0
      device-manage-ui/.eslintignore
  6. 198 0
      device-manage-ui/.eslintrc.js
  7. 30 0
      device-manage-ui/.github/workflows/nodejs.yml
  8. 23 0
      device-manage-ui/.gitignore
  9. 4 0
      device-manage-ui/.npmrc
  10. 5 0
      device-manage-ui/.travis.yml
  11. 28 0
      device-manage-ui/README.md
  12. 5 0
      device-manage-ui/babel.config.js
  13. 35 0
      device-manage-ui/build/index.js
  14. 24 0
      device-manage-ui/jest.config.js
  15. 9 0
      device-manage-ui/jsconfig.json
  16. 135 0
      device-manage-ui/package.json
  17. 26 0
      device-manage-ui/plop-templates/component/index.hbs
  18. 55 0
      device-manage-ui/plop-templates/component/prompt.js
  19. 16 0
      device-manage-ui/plop-templates/store/index.hbs
  20. 62 0
      device-manage-ui/plop-templates/store/prompt.js
  21. 9 0
      device-manage-ui/plop-templates/utils.js
  22. 26 0
      device-manage-ui/plop-templates/view/index.hbs
  23. 57 0
      device-manage-ui/plop-templates/view/prompt.js
  24. 9 0
      device-manage-ui/plopfile.js
  25. 5 0
      device-manage-ui/postcss.config.js
  26. BIN
      device-manage-ui/public/favicon.ico
  27. 217 0
      device-manage-ui/public/index.html
  28. 29 0
      device-manage-ui/src/App.vue
  29. 141 0
      device-manage-ui/src/api/business/application.js
  30. 75 0
      device-manage-ui/src/api/business/devicelist.js
  31. 45 0
      device-manage-ui/src/api/business/group.js
  32. 38 0
      device-manage-ui/src/api/business/log.js
  33. 30 0
      device-manage-ui/src/api/business/monitor.js
  34. 37 0
      device-manage-ui/src/api/business/picture.js
  35. 98 0
      device-manage-ui/src/api/business/playlist.js
  36. 64 0
      device-manage-ui/src/api/business/upgradefile.js
  37. 19 0
      device-manage-ui/src/api/business/upgraderecord.js
  38. 62 0
      device-manage-ui/src/api/business/video.js
  39. 54 0
      device-manage-ui/src/api/file.js
  40. 26 0
      device-manage-ui/src/api/login.js
  41. 9 0
      device-manage-ui/src/api/monitor/server.js
  42. 17 0
      device-manage-ui/src/api/remote-search.js
  43. 43 0
      device-manage-ui/src/api/schedule.js
  44. 45 0
      device-manage-ui/src/api/syscategory.js
  45. 45 0
      device-manage-ui/src/api/sysconfig.js
  46. 46 0
      device-manage-ui/src/api/syscontent.js
  47. 62 0
      device-manage-ui/src/api/sysjob.js
  48. 61 0
      device-manage-ui/src/api/system/config.js
  49. 59 0
      device-manage-ui/src/api/system/dept.js
  50. 61 0
      device-manage-ui/src/api/system/dict/data.js
  51. 61 0
      device-manage-ui/src/api/system/dict/type.js
  52. 35 0
      device-manage-ui/src/api/system/loginlog.js
  53. 60 0
      device-manage-ui/src/api/system/menu.js
  54. 35 0
      device-manage-ui/src/api/system/operlog.js
  55. 45 0
      device-manage-ui/src/api/system/post.js
  56. 87 0
      device-manage-ui/src/api/system/role.js
  57. 133 0
      device-manage-ui/src/api/system/sysuser.js
  58. 20 0
      device-manage-ui/src/api/table.js
  59. 95 0
      device-manage-ui/src/api/tools/gen.js
  60. 32 0
      device-manage-ui/src/api/user.js
  61. 9 0
      device-manage-ui/src/api/ws.js
  62. BIN
      device-manage-ui/src/assets/401_images/401.gif
  63. BIN
      device-manage-ui/src/assets/404_images/404.png
  64. BIN
      device-manage-ui/src/assets/404_images/404_cloud.png
  65. BIN
      device-manage-ui/src/assets/custom-theme/fonts/element-icons.ttf
  66. BIN
      device-manage-ui/src/assets/custom-theme/fonts/element-icons.woff
  67. 0 0
      device-manage-ui/src/assets/custom-theme/index.css
  68. 39 0
      device-manage-ui/src/assets/dark.svg
  69. BIN
      device-manage-ui/src/assets/icons/12-01.png
  70. BIN
      device-manage-ui/src/assets/icons/AU-01.png
  71. BIN
      device-manage-ui/src/assets/icons/Access.png
  72. BIN
      device-manage-ui/src/assets/icons/AndroidStudio.png
  73. BIN
      device-manage-ui/src/assets/icons/Awesome.png
  74. BIN
      device-manage-ui/src/assets/icons/AwesomeVue.png
  75. BIN
      device-manage-ui/src/assets/icons/Clion-01-01.png
  76. BIN
      device-manage-ui/src/assets/icons/Dm-01-01.png
  77. BIN
      device-manage-ui/src/assets/icons/Edge-01.png
  78. BIN
      device-manage-ui/src/assets/icons/Excel.png
  79. BIN
      device-manage-ui/src/assets/icons/Ic-01.png
  80. BIN
      device-manage-ui/src/assets/icons/Idea.png
  81. BIN
      device-manage-ui/src/assets/icons/Link.png
  82. BIN
      device-manage-ui/src/assets/icons/OneDrive.png
  83. BIN
      device-manage-ui/src/assets/icons/OneNote.png
  84. BIN
      device-manage-ui/src/assets/icons/PDFbeifen.png
  85. BIN
      device-manage-ui/src/assets/icons/Phpstorm-01.png
  86. BIN
      device-manage-ui/src/assets/icons/PictureUnknow.png
  87. BIN
      device-manage-ui/src/assets/icons/Pictureloadingfailed.png
  88. BIN
      device-manage-ui/src/assets/icons/Pl-01.png
  89. BIN
      device-manage-ui/src/assets/icons/Pn-01.png
  90. BIN
      device-manage-ui/src/assets/icons/PowerPoint.png
  91. BIN
      device-manage-ui/src/assets/icons/PowerShell.png
  92. BIN
      device-manage-ui/src/assets/icons/Pycharm.png
  93. BIN
      device-manage-ui/src/assets/icons/Typora.png
  94. BIN
      device-manage-ui/src/assets/icons/UTools.png
  95. BIN
      device-manage-ui/src/assets/icons/Unknow.png
  96. BIN
      device-manage-ui/src/assets/icons/Visio.png
  97. BIN
      device-manage-ui/src/assets/icons/VisualStudio.png
  98. BIN
      device-manage-ui/src/assets/icons/Web.png
  99. BIN
      device-manage-ui/src/assets/icons/Webstorm.png
  100. BIN
      device-manage-ui/src/assets/icons/Windows.png

+ 14 - 0
device-manage-ui/.editorconfig

@@ -0,0 +1,14 @@
+# https://editorconfig.org
+root = true
+
+[*]
+charset = utf-8
+indent_style = space
+indent_size = 2
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.md]
+insert_final_newline = false
+trim_trailing_whitespace = false

+ 14 - 0
device-manage-ui/.env.development

@@ -0,0 +1,14 @@
+# just a flag
+ENV = 'development'
+
+# base api
+VUE_APP_BASE_API = 'http://127.0.0.1:8000'
+
+# vue-cli uses the VUE_CLI_BABEL_TRANSPILE_MODULES environment variable,
+# to control whether the babel-plugin-dynamic-import-node plugin is enabled.
+# It only does one thing by converting all import() to require().
+# This configuration can significantly increase the speed of hot updates,
+# when you have a large number of pages.
+# Detail:  https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/babel-preset-app/index.js
+
+VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 6 - 0
device-manage-ui/.env.production

@@ -0,0 +1,6 @@
+# just a flag
+ENV = 'production'
+
+# base api
+VUE_APP_BASE_API = ''
+

+ 8 - 0
device-manage-ui/.env.staging

@@ -0,0 +1,8 @@
+NODE_ENV = production
+
+# just a flag
+ENV = 'staging'
+
+# base api
+VUE_APP_BASE_API = ''
+

+ 4 - 0
device-manage-ui/.eslintignore

@@ -0,0 +1,4 @@
+build/*.js
+src/assets
+public
+dist

+ 198 - 0
device-manage-ui/.eslintrc.js

@@ -0,0 +1,198 @@
+module.exports = {
+  root: true,
+  parserOptions: {
+    parser: 'babel-eslint',
+    sourceType: 'module'
+  },
+  env: {
+    browser: true,
+    node: true,
+    es6: true,
+  },
+  extends: ['plugin:vue/recommended', 'eslint:recommended'],
+
+  // add your custom rules here
+  //it is base on https://github.com/vuejs/eslint-config-vue
+  rules: {
+    "vue/max-attributes-per-line": [2, {
+      "singleline": 10,
+      "multiline": {
+        "max": 1,
+        "allowFirstLine": false
+      }
+    }],
+    "vue/singleline-html-element-content-newline": "off",
+    "vue/multiline-html-element-content-newline":"off",
+    "vue/name-property-casing": ["error", "PascalCase"],
+    "vue/no-v-html": "off",
+    'accessor-pairs': 2,
+    'arrow-spacing': [2, {
+      'before': true,
+      'after': true
+    }],
+    'block-spacing': [2, 'always'],
+    'brace-style': [2, '1tbs', {
+      'allowSingleLine': true
+    }],
+    'camelcase': [0, {
+      'properties': 'always'
+    }],
+    'comma-dangle': [2, 'never'],
+    'comma-spacing': [2, {
+      'before': false,
+      'after': true
+    }],
+    'comma-style': [2, 'last'],
+    'constructor-super': 2,
+    'curly': [2, 'multi-line'],
+    'dot-location': [2, 'property'],
+    'eol-last': 2,
+    'eqeqeq': ["error", "always", {"null": "ignore"}],
+    'generator-star-spacing': [2, {
+      'before': true,
+      'after': true
+    }],
+    'handle-callback-err': [2, '^(err|error)$'],
+    'indent': [2, 2, {
+      'SwitchCase': 1
+    }],
+    'jsx-quotes': [2, 'prefer-single'],
+    'key-spacing': [2, {
+      'beforeColon': false,
+      'afterColon': true
+    }],
+    'keyword-spacing': [2, {
+      'before': true,
+      'after': true
+    }],
+    'new-cap': [2, {
+      'newIsCap': true,
+      'capIsNew': false
+    }],
+    'new-parens': 2,
+    'no-array-constructor': 2,
+    'no-caller': 2,
+    'no-console': 'off',
+    'no-class-assign': 2,
+    'no-cond-assign': 2,
+    'no-const-assign': 2,
+    'no-control-regex': 0,
+    'no-delete-var': 2,
+    'no-dupe-args': 2,
+    'no-dupe-class-members': 2,
+    'no-dupe-keys': 2,
+    'no-duplicate-case': 2,
+    'no-empty-character-class': 2,
+    'no-empty-pattern': 2,
+    'no-eval': 2,
+    'no-ex-assign': 2,
+    'no-extend-native': 2,
+    'no-extra-bind': 2,
+    'no-extra-boolean-cast': 2,
+    'no-extra-parens': [2, 'functions'],
+    'no-fallthrough': 2,
+    'no-floating-decimal': 2,
+    'no-func-assign': 2,
+    'no-implied-eval': 2,
+    'no-inner-declarations': [2, 'functions'],
+    'no-invalid-regexp': 2,
+    'no-irregular-whitespace': 2,
+    'no-iterator': 2,
+    'no-label-var': 2,
+    'no-labels': [2, {
+      'allowLoop': false,
+      'allowSwitch': false
+    }],
+    'no-lone-blocks': 2,
+    'no-mixed-spaces-and-tabs': 2,
+    'no-multi-spaces': 2,
+    'no-multi-str': 2,
+    'no-multiple-empty-lines': [2, {
+      'max': 1
+    }],
+    'no-native-reassign': 2,
+    'no-negated-in-lhs': 2,
+    'no-new-object': 2,
+    'no-new-require': 2,
+    'no-new-symbol': 2,
+    'no-new-wrappers': 2,
+    'no-obj-calls': 2,
+    'no-octal': 2,
+    'no-octal-escape': 2,
+    'no-path-concat': 2,
+    'no-proto': 2,
+    'no-redeclare': 2,
+    'no-regex-spaces': 2,
+    'no-return-assign': [2, 'except-parens'],
+    'no-self-assign': 2,
+    'no-self-compare': 2,
+    'no-sequences': 2,
+    'no-shadow-restricted-names': 2,
+    'no-spaced-func': 2,
+    'no-sparse-arrays': 2,
+    'no-this-before-super': 2,
+    'no-throw-literal': 2,
+    'no-trailing-spaces': 2,
+    'no-undef': 2,
+    'no-undef-init': 2,
+    'no-unexpected-multiline': 2,
+    'no-unmodified-loop-condition': 2,
+    'no-unneeded-ternary': [2, {
+      'defaultAssignment': false
+    }],
+    'no-unreachable': 2,
+    'no-unsafe-finally': 2,
+    'no-unused-vars': [2, {
+      'vars': 'all',
+      'args': 'none'
+    }],
+    'no-useless-call': 2,
+    'no-useless-computed-key': 2,
+    'no-useless-constructor': 2,
+    'no-useless-escape': 0,
+    'no-whitespace-before-property': 2,
+    'no-with': 2,
+    'one-var': [2, {
+      'initialized': 'never'
+    }],
+    'operator-linebreak': [2, 'after', {
+      'overrides': {
+        '?': 'before',
+        ':': 'before'
+      }
+    }],
+    'padded-blocks': [2, 'never'],
+    'quotes': [2, 'single', {
+      'avoidEscape': true,
+      'allowTemplateLiterals': true
+    }],
+    'semi': [2, 'never'],
+    'semi-spacing': [2, {
+      'before': false,
+      'after': true
+    }],
+    'space-before-blocks': [2, 'always'],
+    'space-before-function-paren': [2, 'never'],
+    'space-in-parens': [2, 'never'],
+    'space-infix-ops': 2,
+    'space-unary-ops': [2, {
+      'words': true,
+      'nonwords': false
+    }],
+    'spaced-comment': [2, 'always', {
+      'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ',']
+    }],
+    'template-curly-spacing': [2, 'never'],
+    'use-isnan': 2,
+    'valid-typeof': 2,
+    'wrap-iife': [2, 'any'],
+    'yield-star-spacing': [2, 'both'],
+    'yoda': [2, 'never'],
+    'prefer-const': 2,
+    'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
+    'object-curly-spacing': [2, 'always', {
+      objectsInObjects: false
+    }],
+    'array-bracket-spacing': [2, 'never']
+  }
+}

+ 30 - 0
device-manage-ui/.github/workflows/nodejs.yml

@@ -0,0 +1,30 @@
+# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
+# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
+
+name: build
+
+on:
+  push:
+    branches: [ master ]
+  pull_request:
+    branches: [ master ]
+
+jobs:
+  build:
+
+    runs-on: ubuntu-latest
+
+    strategy:
+      matrix:
+        node-version: [10.x, 12.x]
+
+    steps:
+    - uses: actions/checkout@v2
+    - name: Use Node.js ${{ matrix.node-version }}
+      uses: actions/setup-node@v1
+      with:
+        node-version: ${{ matrix.node-version }}
+    - run: npm install
+    - run: npm run build:prod
+      env:
+        CI: true

+ 23 - 0
device-manage-ui/.gitignore

@@ -0,0 +1,23 @@
+.DS_Store
+node_modules/
+dist/
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+**/*.log
+
+tests/**/coverage/
+tests/e2e/reports
+selenium-debug.log
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.local
+
+package-lock.json
+yarn.lock

+ 4 - 0
device-manage-ui/.npmrc

@@ -0,0 +1,4 @@
+sass_binary_site=https://npm.taobao.org/mirrors/node-sass/
+phantomjs_cdnurl=https://npm.taobao.org/mirrors/phantomjs/
+electron_mirror=https://npm.taobao.org/mirrors/electron/
+registry=https://registry.npm.taobao.org

+ 5 - 0
device-manage-ui/.travis.yml

@@ -0,0 +1,5 @@
+language: node_js
+node_js: 10
+script: npm run test
+notifications:
+  email: false

+ 28 - 0
device-manage-ui/README.md

@@ -0,0 +1,28 @@
+# device-manage-ui
+
+## 开发
+
+```bash
+
+# 进入项目目录
+cd device-manage-ui
+
+# 安装依赖
+
+npm install
+
+# 启动服务
+npm run dev
+```
+
+浏览器访问 http://localhost:9527
+
+## 发布
+
+```bash
+# 构建测试环境
+npm run build:stage
+
+# 构建生产环境
+npm run build:prod
+```

+ 5 - 0
device-manage-ui/babel.config.js

@@ -0,0 +1,5 @@
+module.exports = {
+  presets: [
+    '@vue/app'
+  ]
+}

+ 35 - 0
device-manage-ui/build/index.js

@@ -0,0 +1,35 @@
+const { run } = require('runjs')
+const chalk = require('chalk')
+const config = require('../vue.config.js')
+const rawArgv = process.argv.slice(2)
+const args = rawArgv.join(' ')
+
+if (process.env.npm_config_preview || rawArgv.includes('--preview')) {
+  const report = rawArgv.includes('--report')
+
+  run(`vue-cli-service build ${args}`)
+
+  const port = 9526
+  const publicPath = config.publicPath
+
+  var connect = require('connect')
+  var serveStatic = require('serve-static')
+  const app = connect()
+
+  app.use(
+    publicPath,
+    serveStatic('./dist', {
+      index: ['index.html', '/']
+    })
+  )
+
+  app.listen(port, function () {
+    console.log(chalk.green(`> Preview at  http://localhost:${port}${publicPath}`))
+    if (report) {
+      console.log(chalk.green(`> Report at  http://localhost:${port}${publicPath}report.html`))
+    }
+
+  })
+} else {
+  run(`vue-cli-service build ${args}`)
+}

+ 24 - 0
device-manage-ui/jest.config.js

@@ -0,0 +1,24 @@
+module.exports = {
+  moduleFileExtensions: ['js', 'jsx', 'json', 'vue'],
+  transform: {
+    '^.+\\.vue$': 'vue-jest',
+    '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$':
+      'jest-transform-stub',
+    '^.+\\.jsx?$': 'babel-jest'
+  },
+  moduleNameMapper: {
+    '^@/(.*)$': '<rootDir>/src/$1'
+  },
+  snapshotSerializers: ['jest-serializer-vue'],
+  testMatch: [
+    '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)'
+  ],
+  collectCoverageFrom: ['src/utils/**/*.{js,vue}', '!src/utils/auth.js', '!src/utils/request.js', 'src/components/**/*.{js,vue}'],
+  coverageDirectory: '<rootDir>/tests/unit/coverage',
+  // 'collectCoverage': true,
+  'coverageReporters': [
+    'lcov',
+    'text-summary'
+  ],
+  testURL: 'http://localhost/'
+}

+ 9 - 0
device-manage-ui/jsconfig.json

@@ -0,0 +1,9 @@
+{ 
+  "compilerOptions": {
+    "baseUrl": "./",
+    "paths": {
+        "@/*": ["src/*"]
+    }
+  },
+  "exclude": ["node_modules", "dist"]
+}

+ 135 - 0
device-manage-ui/package.json

@@ -0,0 +1,135 @@
+{
+  "name": "device-manage",
+  "version": "1.2.0",
+  "description": "A magical vue admin. An out-of-box UI solution for enterprise applications. Newest development stack of vue. Lots of awesome features",
+  "author": "https://github.com/wenjianzhang/go-admin-ui",
+  "license": "MIT",
+  "scripts": {
+    "dev": "vue-cli-service serve",
+    "build:prod": "vue-cli-service build",
+    "build:stage": "vue-cli-service build --mode staging",
+    "preview": "node build/index.js --preview",
+    "lint": "eslint --ext .js,.vue src",
+    "test:unit": "jest --clearCache && vue-cli-service test:unit",
+    "test:ci": "npm run lint && npm run test:unit",
+    "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml",
+    "new": "plop"
+  },
+  "husky": {
+    "hooks": {
+      "pre-commit": "lint-staged"
+    }
+  },
+  "lint-staged": {
+    "src/**/*.{js,vue}": [
+      "eslint --fix",
+      "git add"
+    ]
+  },
+  "keywords": [
+    "vue",
+    "admin",
+    "dashboard",
+    "element-ui",
+    "boilerplate",
+    "admin-template",
+    "management-system"
+  ],
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/wenjianzhang/go-admin.git"
+  },
+  "bugs": {
+    "url": "https://github.com/wenjianzhang/go-admin/issues"
+  },
+  "dependencies": {
+    "@riophae/vue-treeselect": "0.4.0",
+    "@tinymce/tinymce-vue": "^3.2.2",
+    "awe-dnd": "^0.3.4",
+    "axios": "0.19.2",
+    "clipboard": "2.0.6",
+    "codemirror": "5.56.0",
+    "core-js": "^3.6.5",
+    "driver.js": "0.9.8",
+    "dropzone": "5.7.2",
+    "echarts": "4.8.0",
+    "element-ui": "2.13.2",
+    "file-saver": "2.0.2",
+    "fuse.js": "6.4.1",
+    "js-cookie": "2.2.1",
+    "js-md5": "^0.7.3",
+    "jsonlint": "1.6.3",
+    "jszip": "3.5.0",
+    "moment": "^2.27.0",
+    "monaco-editor": "^0.20.0",
+    "normalize.css": "8.0.1",
+    "nprogress": "0.2.0",
+    "path-to-regexp": "6.1.0",
+    "remixicon": "^2.5.0",
+    "sass-resources-loader": "^2.0.3",
+    "screenfull": "5.0.2",
+    "showdown": "^1.9.1",
+    "solarlunar": "^2.0.7",
+    "sortablejs": "^1.10.2",
+    "tui-editor": "1.4.10",
+    "uuid": "^8.3.0",
+    "viser-vue": "^2.4.8",
+    "vue": "2.6.11",
+    "vue-baidu-map": "^0.21.22",
+    "vue-count-to": "1.0.13",
+    "vue-cropper": "^0.5.5",
+    "vue-particles": "^1.0.9",
+    "vue-quill-editor": "^3.0.6",
+    "vue-router": "3.4.2",
+    "vue-splitpane": "1.0.6",
+    "vue-uuid": "^2.0.2",
+    "vue-video-player": "^5.0.2",
+    "vuedraggable": "2.24.0",
+    "vuex": "3.5.1",
+    "webpack-bundle-analyzer": "^3.8.0",
+    "xlsx": "0.16.5"
+  },
+  "devDependencies": {
+    "@babel/core": "7.11.1",
+    "@babel/register": "^7.10.5",
+    "@vue/cli-plugin-babel": "4.4.6",
+    "@vue/cli-plugin-eslint": "^4.4.6",
+    "@vue/cli-plugin-unit-jest": "4.4.6",
+    "@vue/cli-service": "4.4.6",
+    "@vue/test-utils": "1.0.3",
+    "autoprefixer": "^9.8.6",
+    "babel-core": "7.0.0-bridge.0",
+    "babel-eslint": "10.1.0",
+    "babel-jest": "26.2.2",
+    "beautifier": "^0.1.7",
+    "chalk": "4.1.0",
+    "chokidar": "3.4.2",
+    "compression-webpack-plugin": "^4.0.0",
+    "connect": "3.7.0",
+    "eslint": "7.6.0",
+    "eslint-plugin-vue": "6.2.2",
+    "html-webpack-plugin": "4.3.0",
+    "husky": "4.2.5",
+    "lint-staged": "10.2.11",
+    "mockjs": "1.1.0",
+    "monaco-editor-webpack-plugin": "^1.9.0",
+    "node-sass": "^4.14.1",
+    "plop": "2.7.4",
+    "runjs": "^4.4.2",
+    "sass-loader": "^9.0.3",
+    "script-ext-html-webpack-plugin": "2.1.4",
+    "script-loader": "0.7.2",
+    "serve-static": "^1.14.1",
+    "svg-sprite-loader": "^5.0.0",
+    "svgo": "1.3.2",
+    "vue-template-compiler": "2.6.11"
+  },
+  "engines": {
+    "node": ">=8.9",
+    "npm": ">= 3.0.0"
+  },
+  "browserslist": [
+    "> 1%",
+    "last 2 versions"
+  ]
+}

+ 26 - 0
device-manage-ui/plop-templates/component/index.hbs

@@ -0,0 +1,26 @@
+{{#if template}}
+<template>
+  <div />
+</template>
+{{/if}}
+
+{{#if script}}
+<script>
+export default {
+  name: '{{ properCase name }}',
+  props: {},
+  data() {
+    return {}
+  },
+  created() {},
+  mounted() {},
+  methods: {}
+}
+</script>
+{{/if}}
+
+{{#if style}}
+<style lang="scss" scoped>
+
+</style>
+{{/if}}

+ 55 - 0
device-manage-ui/plop-templates/component/prompt.js

@@ -0,0 +1,55 @@
+const { notEmpty } = require('../utils.js')
+
+module.exports = {
+  description: 'generate vue component',
+  prompts: [{
+    type: 'input',
+    name: 'name',
+    message: 'component name please',
+    validate: notEmpty('name')
+  },
+  {
+    type: 'checkbox',
+    name: 'blocks',
+    message: 'Blocks:',
+    choices: [{
+      name: '<template>',
+      value: 'template',
+      checked: true
+    },
+    {
+      name: '<script>',
+      value: 'script',
+      checked: true
+    },
+    {
+      name: 'style',
+      value: 'style',
+      checked: true
+    }
+    ],
+    validate(value) {
+      if (value.indexOf('script') === -1 && value.indexOf('template') === -1) {
+        return 'Components require at least a <script> or <template> tag.'
+      }
+      return true
+    }
+  }
+  ],
+  actions: data => {
+    const name = '{{properCase name}}'
+    const actions = [{
+      type: 'add',
+      path: `src/components/${name}/index.vue`,
+      templateFile: 'plop-templates/component/index.hbs',
+      data: {
+        name: name,
+        template: data.blocks.includes('template'),
+        script: data.blocks.includes('script'),
+        style: data.blocks.includes('style')
+      }
+    }]
+
+    return actions
+  }
+}

+ 16 - 0
device-manage-ui/plop-templates/store/index.hbs

@@ -0,0 +1,16 @@
+{{#if state}}
+const state = {}
+{{/if}}
+
+{{#if mutations}}
+const mutations = {}
+{{/if}}
+
+{{#if actions}}
+const actions = {}
+{{/if}}
+
+export default {
+  namespaced: true,
+  {{options}}
+}

+ 62 - 0
device-manage-ui/plop-templates/store/prompt.js

@@ -0,0 +1,62 @@
+const { notEmpty } = require('../utils.js')
+
+module.exports = {
+  description: 'generate store',
+  prompts: [{
+    type: 'input',
+    name: 'name',
+    message: 'store name please',
+    validate: notEmpty('name')
+  },
+  {
+    type: 'checkbox',
+    name: 'blocks',
+    message: 'Blocks:',
+    choices: [{
+      name: 'state',
+      value: 'state',
+      checked: true
+    },
+    {
+      name: 'mutations',
+      value: 'mutations',
+      checked: true
+    },
+    {
+      name: 'actions',
+      value: 'actions',
+      checked: true
+    }
+    ],
+    validate(value) {
+      if (!value.includes('state') || !value.includes('mutations')) {
+        return 'store require at least state and mutations'
+      }
+      return true
+    }
+  }
+  ],
+  actions(data) {
+    const name = '{{name}}'
+    const { blocks } = data
+    const options = ['state', 'mutations']
+    const joinFlag = `,
+  `
+    if (blocks.length === 3) {
+      options.push('actions')
+    }
+
+    const actions = [{
+      type: 'add',
+      path: `src/store/modules/${name}.js`,
+      templateFile: 'plop-templates/store/index.hbs',
+      data: {
+        options: options.join(joinFlag),
+        state: blocks.includes('state'),
+        mutations: blocks.includes('mutations'),
+        actions: blocks.includes('actions')
+      }
+    }]
+    return actions
+  }
+}

+ 9 - 0
device-manage-ui/plop-templates/utils.js

@@ -0,0 +1,9 @@
+exports.notEmpty = name => {
+  return v => {
+    if (!v || v.trim === '') {
+      return `${name} is required`
+    } else {
+      return true
+    }
+  }
+}

+ 26 - 0
device-manage-ui/plop-templates/view/index.hbs

@@ -0,0 +1,26 @@
+{{#if template}}
+<template>
+  <div />
+</template>
+{{/if}}
+
+{{#if script}}
+<script>
+export default {
+  name: '{{ properCase name }}',
+  props: {},
+  data() {
+    return {}
+  },
+  created() {},
+  mounted() {},
+  methods: {}
+}
+</script>
+{{/if}}
+
+{{#if style}}
+<style lang="scss" scoped>
+
+</style>
+{{/if}}

+ 57 - 0
device-manage-ui/plop-templates/view/prompt.js

@@ -0,0 +1,57 @@
+const { notEmpty } = require('../utils.js')
+
+module.exports = {
+  description: 'generate a view',
+  prompts: [{
+    type: 'input',
+    name: 'name',
+    message: 'view name please',
+    validate: notEmpty('name')
+  },
+  {
+    type: 'checkbox',
+    name: 'blocks',
+    message: 'Blocks:',
+    choices: [{
+      name: '<template>',
+      value: 'template',
+      checked: true
+    },
+    {
+      name: '<script>',
+      value: 'script',
+      checked: true
+    },
+    {
+      name: 'style',
+      value: 'style',
+      checked: true
+    }
+    ],
+    validate(value) {
+      if (value.indexOf('script') === -1 && value.indexOf('template') === -1) {
+        return 'View require at least a <script> or <template> tag.'
+      }
+      return true
+    }
+  }
+  ],
+  actions: data => {
+    const name = '{{name}}'
+    console.log("xxxxxxxxxxxxxxxxxxxxxxxxx")
+    console.log(name)
+    const actions = [{
+      type: 'add',
+      path: `src/views/${name}/index.vue`,
+      templateFile: 'plop-templates/view/index.hbs',
+      data: {
+        name: name,
+        template: data.blocks.includes('template'),
+        script: data.blocks.includes('script'),
+        style: data.blocks.includes('style')
+      }
+    }]
+
+    return actions
+  }
+}

+ 9 - 0
device-manage-ui/plopfile.js

@@ -0,0 +1,9 @@
+const viewGenerator = require('./plop-templates/view/prompt')
+const componentGenerator = require('./plop-templates/component/prompt')
+const storeGenerator = require('./plop-templates/store/prompt.js')
+
+module.exports = function(plop) {
+  plop.setGenerator('view', viewGenerator)
+  plop.setGenerator('component', componentGenerator)
+  plop.setGenerator('store', storeGenerator)
+}

+ 5 - 0
device-manage-ui/postcss.config.js

@@ -0,0 +1,5 @@
+module.exports = {
+  plugins: {
+    autoprefixer: {}
+  }
+}

BIN
device-manage-ui/public/favicon.ico


+ 217 - 0
device-manage-ui/public/index.html

@@ -0,0 +1,217 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+  <meta charset="utf-8">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+  <meta name="renderer" content="webkit">
+  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
+  <link rel="icon" href="<%= BASE_URL %>favicon.ico">
+  <title><%= webpackConfig.name %> - go-admin</title>
+    <link href="https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.20.0/min/vs/editor/editor.main.css" rel="stylesheet">
+  <meta name="keywords" content="go-admin,gin,权限管理系统,gin-admin,gin-vue-admin,go">
+  <meta name="description" content="基于Gin + Vue + Element UI的前后端分离权限管理系统,初始化极度简单,只需要配置文件中,修改数据库连接,系统启动后会自动初始化数据库信息以及必须的基础数据">
+  <style>
+    html,
+    body,
+    #app {
+      height: 100%;
+      margin: 0px;
+      padding: 0px;
+      background: #f0f1f5;
+    }
+
+    .chromeframe {
+      margin: 0.2em 0;
+      background: #ccc;
+      color: #000;
+      padding: 0.2em 0;
+    }
+
+    #loader-wrapper {
+      position: fixed;
+      top: 0;
+      left: 0;
+      width: 100%;
+      height: 100%;
+      z-index: 999999;
+    }
+
+    #loader {
+      display: block;
+      position: relative;
+      left: 50%;
+      top: 50%;
+      width: 150px;
+      height: 150px;
+      margin: -75px 0 0 -75px;
+      border-radius: 50%;
+      border: 3px solid transparent;
+      border-top-color: #FFF;
+      -webkit-animation: spin 2s linear infinite;
+      -ms-animation: spin 2s linear infinite;
+      -moz-animation: spin 2s linear infinite;
+      -o-animation: spin 2s linear infinite;
+      animation: spin 2s linear infinite;
+      z-index: 1001;
+    }
+
+    #loader:before {
+      content: "";
+      position: absolute;
+      top: 5px;
+      left: 5px;
+      right: 5px;
+      bottom: 5px;
+      border-radius: 50%;
+      border: 3px solid transparent;
+      border-top-color: #FFF;
+      -webkit-animation: spin 3s linear infinite;
+      -moz-animation: spin 3s linear infinite;
+      -o-animation: spin 3s linear infinite;
+      -ms-animation: spin 3s linear infinite;
+      animation: spin 3s linear infinite;
+    }
+
+    #loader:after {
+      content: "";
+      position: absolute;
+      top: 15px;
+      left: 15px;
+      right: 15px;
+      bottom: 15px;
+      border-radius: 50%;
+      border: 3px solid transparent;
+      border-top-color: #FFF;
+      -moz-animation: spin 1.5s linear infinite;
+      -o-animation: spin 1.5s linear infinite;
+      -ms-animation: spin 1.5s linear infinite;
+      -webkit-animation: spin 1.5s linear infinite;
+      animation: spin 1.5s linear infinite;
+    }
+
+
+    @-webkit-keyframes spin {
+      0% {
+        -webkit-transform: rotate(0deg);
+        -ms-transform: rotate(0deg);
+        transform: rotate(0deg);
+      }
+
+      100% {
+        -webkit-transform: rotate(360deg);
+        -ms-transform: rotate(360deg);
+        transform: rotate(360deg);
+      }
+    }
+
+    @keyframes spin {
+      0% {
+        -webkit-transform: rotate(0deg);
+        -ms-transform: rotate(0deg);
+        transform: rotate(0deg);
+      }
+
+      100% {
+        -webkit-transform: rotate(360deg);
+        -ms-transform: rotate(360deg);
+        transform: rotate(360deg);
+      }
+    }
+
+
+    #loader-wrapper .loader-section {
+      position: fixed;
+      top: 0;
+      width: 51%;
+      height: 100%;
+      background: #7171C6;
+      z-index: 1000;
+      -webkit-transform: translateX(0);
+      -ms-transform: translateX(0);
+      transform: translateX(0);
+    }
+
+    #loader-wrapper .loader-section.section-left {
+      left: 0;
+    }
+
+    #loader-wrapper .loader-section.section-right {
+      right: 0;
+    }
+
+
+    .loaded #loader-wrapper .loader-section.section-left {
+      -webkit-transform: translateX(-100%);
+      -ms-transform: translateX(-100%);
+      transform: translateX(-100%);
+      -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
+      transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
+    }
+
+    .loaded #loader-wrapper .loader-section.section-right {
+      -webkit-transform: translateX(100%);
+      -ms-transform: translateX(100%);
+      transform: translateX(100%);
+      -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
+      transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
+    }
+
+    .loaded #loader {
+      opacity: 0;
+      -webkit-transition: all 0.3s ease-out;
+      transition: all 0.3s ease-out;
+    }
+
+    .loaded #loader-wrapper {
+      visibility: hidden;
+      -webkit-transform: translateY(-100%);
+      -ms-transform: translateY(-100%);
+      transform: translateY(-100%);
+      -webkit-transition: all 0.3s 1s ease-out;
+      transition: all 0.3s 1s ease-out;
+    }
+
+    .no-js #loader-wrapper {
+      display: none;
+    }
+
+    .no-js h1 {
+      color: #222222;
+    }
+
+    #loader-wrapper .load_title {
+      font-family: 'Open Sans';
+      color: #FFF;
+      font-size: 14.3px;
+      width: 100%;
+      text-align: center;
+      z-index: 9999999999999;
+      position: absolute;
+      top: 60%;
+      opacity: 1;
+      line-height: 30px;
+    }
+
+    #loader-wrapper .load_title span {
+      font-weight: normal;
+      font-style: italic;
+      font-size: 13px;
+      color: #FFF;
+      opacity: 0.5;
+    }
+  </style>
+</head>
+
+<body>
+  <div id="app">
+    <div id="loader-wrapper">
+      <div id="loader"></div>
+      <div class="loader-section section-left"></div>
+      <div class="loader-section section-right"></div>
+      <div class="load_title">正在加载系统资源,请耐心等待</div>
+    </div>
+  </div>
+</body>
+
+</html>

+ 29 - 0
device-manage-ui/src/App.vue

@@ -0,0 +1,29 @@
+<template>
+  <div id="app">
+    <router-view />
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'App'
+}
+</script>
+<script>
+var _hmt = _hmt || [];
+(function() {
+  var hm = document.createElement("script");
+  hm.src = "https://hm.baidu.com/hm.js?1d2d61263f13e4b288c8da19ad3ff56d";
+  var s = document.getElementsByTagName("script")[0];
+  s.parentNode.insertBefore(hm, s);
+})();
+</script>
+
+<style lang="scss">
+  .el-dialog__wrapper{
+    display: flex;
+    justify-content: center;
+    align-items: center;
+  }
+</style>
+

+ 141 - 0
device-manage-ui/src/api/business/application.js

@@ -0,0 +1,141 @@
+import request from '@/utils/request'
+
+// 查询列表
+export function queryApplicationList(data) {
+  return request({
+    url: '/api/v1/applicationlist',
+    method: 'post',
+    data:data
+  })
+}
+
+// 添加应用
+export function addApplication(data) {
+  return request({
+    url: '/api/v1/app/application',
+    method: 'post',
+    data: data
+  })
+}
+
+// 查询应用信息
+export function queryApplication(id) {
+  return request({
+    url: '/api/v1/app/application/'+id,
+    method: 'get',
+  })
+}
+
+// 更改应用信息
+export function updateApplication(data) {
+  return request({
+    url: '/api/v1/app/application',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除应用
+export function deleteApplication(appId) {
+  return request({
+    url: '/api/v1/app/application/' + appId,
+    method: 'delete'
+  })
+}
+
+// 绑定应用到设备
+export function appDeviceBind(data) {
+  return request({
+    url: '/api/v1/app/device/bind',
+    method: 'post',
+    data: data
+  })
+}
+
+// 解绑定应用 设备
+export function appDeviceUnBind(ids) {
+  return request({
+    url: '/api/v1/app/device/unbind/'+ids,
+    method: 'delete'
+  })
+}
+
+// 绑定应用到群组
+export function appGroupBind(data) {
+  return request({
+    url: '/api/v1/app/group/bind',
+    method: 'post',
+    data: data
+  })
+}
+
+// 解绑定应用 群组
+export function appGroupUnBind(ids) {
+  return request({
+    url: '/api/v1/app/group/unbind/'+ids,
+    method: 'delete'
+  })
+}
+
+
+
+
+
+
+// 查询应用和设备绑定列表
+export function queryAppDeviceBindList(query) {
+  return request({
+    url: '/api/v1/app/device/bindlist',
+    method: 'post',
+    data: query
+  })
+}
+
+// 查询应用和群组绑定列表
+export function queryAppGroupBindList(query) {
+  return request({
+    url: '/api/v1/app/group/bindlist',
+    method: 'post',
+    data: query
+  })
+}
+
+// 查询应用未和设备绑定列表
+export function queryAppDeviceUnBindList(query) {
+  return request({
+    url: '/api/v1/app/device/unbindlist',
+    method: 'post',
+    data: query
+  })
+}
+
+// 查询应用未和群组绑定列表
+export function queryAppGroupUnBindList(query) {
+  return request({
+    url: '/api/v1/app/group/unbindlist',
+    method: 'post',
+    data: query
+  })
+}
+
+
+
+
+// 推送版本到设备
+export function pushApp2Devices(params) {
+  return request({
+    url: '/api/v1/app/publish/device',
+    method: 'post',
+    data:params
+  })
+}
+
+// 推送版本到群组
+export function pushApp2Groups(params) {
+  return request({
+    url: '/api/v1/app/publish/group',
+    method: 'post',
+    data:params
+  })
+}
+

+ 75 - 0
device-manage-ui/src/api/business/devicelist.js

@@ -0,0 +1,75 @@
+import request from '@/utils/request'
+
+// 查询设备列表
+export function queryDeviceList(data) {
+  return request({
+    url: '/api/v1/devicelist',
+    method: 'post',
+    data: data
+  })
+}
+
+// 查询设备列表
+export function queryDeviceListByStatus(data) {
+  return request({
+    url: '/api/v1/device/list/statistics',
+    method: 'post',
+    data: data
+  })
+}
+
+// 查询设备详情
+export function queryDevice(deviceId) {
+  return request({
+    url: '/api/v1/device/list/' + deviceId,
+    method: 'get'
+  })
+}
+
+// 添加设备
+export function addDevice(data) {
+  return request({
+    url: '/api/v1/device/list',
+    method: 'post',
+    data:data
+  })
+}
+
+
+// 更改设备信息
+export function updateDevice(data) {
+  return request({
+    url: '/api/v1/device/list',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除设备信息
+export function deleteDevice(deviceId) {
+  return request({
+    url: '/api/v1/device/list/' + deviceId,
+    method: 'delete'
+  })
+}
+
+// 导出设备信息
+export function exportDevice(query) {
+  return request({
+    url: '/api/v1/device/list/export',
+    method: 'get',
+    params: query
+  })
+}
+
+// 导入设备
+export function importDeviceList(data) {
+  return request({
+    url: '/api/v1/device/list/import',
+    method: 'post',
+    data:data,
+    headers: {
+      'Content-Type': 'multipart/form-data',
+    }
+  })
+}

+ 45 - 0
device-manage-ui/src/api/business/group.js

@@ -0,0 +1,45 @@
+import request from '@/utils/request'
+
+// 查询设备列表
+export function queryGroupList(query) {
+  return request({
+    url: '/api/v1/grouplist',
+    method: 'post',
+    data: query
+  })
+}
+
+// 查询群组信息
+export function queryGroup(groupid) {
+  return request({
+    url: '/api/v1/group/manage/' + groupid,
+    method: 'get'
+  })
+}
+
+// 添加群组
+export function addGroup(data) {
+  return request({
+    url: '/api/v1/group/manage',
+    method: 'post',
+    data:data
+  })
+}
+
+
+// 更改群组信息
+export function updateGroup(data) {
+  return request({
+    url: '/api/v1/group/manage',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除群组
+export function deleteGroup(groupid) {
+  return request({
+    url: '/api/v1/group/manage/' + groupid,
+    method: 'delete'
+  })
+}

+ 38 - 0
device-manage-ui/src/api/business/log.js

@@ -0,0 +1,38 @@
+import request from '@/utils/request'
+
+// 查询设备列表
+export function queryLogList(query) {
+  return request({
+    url: '/api/v1/loglist',
+    method: 'post',
+    data: query
+  })
+}
+
+// 删除设备日志
+export function querySingleDeviceLog(data) {
+  return request({
+    url: '/api/v1/device/log/list',
+    method: 'post',
+    data:data
+  })
+}
+
+// 删除设备日志
+export function deleteDeviceLog(deviceId) {
+  return request({
+    url: '/api/v1/device/log/' + deviceId,
+    method: 'delete'
+  })
+}
+
+// 下载设备日志
+export function downloadDeviceLog(deviceId) {
+  return request({
+    url: '/api/v1/device/log/download/' + deviceId,
+    method: 'delete'
+  })
+}
+
+
+

+ 30 - 0
device-manage-ui/src/api/business/monitor.js

@@ -0,0 +1,30 @@
+import request from '@/utils/request'
+
+// 查询设备列表
+export function queryDeviceList(query) {
+  return request({
+    url: '/api/v1/monitorlist',
+    method: 'post',
+    data: query
+  })
+}
+
+// 获取设备日志
+export function queryDeviceLog(deviceId) {
+  return request({
+    url: '/api/v1/device/monitor/log/' + deviceId,
+    method: 'get'
+  })
+}
+
+
+// 获取设备日志
+export function rebootDevice(deviceId) {
+  return request({
+    url: '/api/v1/device/monitor/reboot/' + deviceId,
+    method: 'post'
+  })
+}
+
+
+

+ 37 - 0
device-manage-ui/src/api/business/picture.js

@@ -0,0 +1,37 @@
+import request from '@/utils/request'
+
+// 查询图片列表
+export function queryPictureList(query) {
+  return request({
+    url: '/api/v1/picturelist',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询图片详情
+export function queryPicture(deviceId) {
+  return request({
+    url: '/api/v1/media/picture/' + deviceId,
+    method: 'get'
+  })
+}
+
+
+// 更改图片信息
+export function updatePicture(data) {
+  return request({
+    url: '/api/v1/media/picture',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除图片信息
+export function deletePicture(deviceId) {
+  return request({
+    url: '/api/v1/media/picture/' + deviceId,
+    method: 'delete'
+  })
+}
+

+ 98 - 0
device-manage-ui/src/api/business/playlist.js

@@ -0,0 +1,98 @@
+import request from '@/utils/request'
+
+// 查询推送列表菜单
+export function getMenuList() {
+  return request({
+    url: '/api/v1/media/menu',
+    method: 'get',
+  })
+}
+
+// 新建推送菜单
+export function createMenu(data) {
+  return request({
+    url: '/api/v1/media/menu',
+    method: 'post',
+    data: data
+  })
+}
+
+
+// 更改菜单信息
+export function updateMenu(data) {
+  return request({
+    url: '/api/v1/media/menu',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除菜单信息
+export function deleteMenu(menuId) {
+  return request({
+    url: '/api/v1/media/menu/' + menuId,
+    method: 'delete'
+  })
+}
+
+// 查询推送列表菜单
+export function getPlayItemList(menuId) {
+  return request({
+    url: '/api/v1/media/item/' + menuId,
+    method: 'get',
+  })
+}
+
+// 添加视频
+export function addVideo2PlayList(data) {
+  return request({
+    url: '/api/v1/media/item',
+    method: 'post',
+    data: data
+  })
+}
+
+
+// 更改菜单信息
+export function updateItem(data) {
+  return request({
+    url: '/api/v1/media/item',
+    method: 'put',
+    data: data
+  })
+}
+
+// 移除视频
+export function removeVideo(itemId) {
+  return request({
+    url: '/api/v1/media/item/' + itemId,
+    method: 'delete'
+  })
+}
+
+
+// 获取播放属性信息
+export function getPlayAttris(data) {
+  return request({
+    url: '/api/v1/media/attri/'+data,
+    method: 'get',
+  })
+}
+// 更新播放属性信息
+export function updatePlayAttris(data) {
+  return request({
+    url: '/api/v1/media/attri',
+    method: 'put',
+    data: data
+  })
+}
+
+
+// 推送playlist
+export function publishMedia2Devices(params) {
+  return request({
+    url: '/api/v1/media/publish/'+params.devids,
+    method: 'post',
+    data: params.body
+  })
+}

+ 64 - 0
device-manage-ui/src/api/business/upgradefile.js

@@ -0,0 +1,64 @@
+import request from '@/utils/request'
+
+// 查询视频列表
+export function queryUpgradeFileList(data) {
+  return request({
+    url: '/api/v1/upgradefilelist',
+    method: 'post',
+    data: data
+  })
+}
+
+// 查询应用版本详情
+export function queryUpgradeFile(versionId) {
+  return request({
+    url: '/api/v1/app/upgradefile/' + versionId,
+    method: 'get'
+  })
+}
+
+
+// 更改版本信息
+export function updateUpgradefile(data) {
+  return request({
+    url: '/api/v1/app/upgradefile',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除版本信息
+export function deleteUpgradeFile(versionId) {
+  return request({
+    url: '/api/v1/app/upgradefile/' + versionId,
+    method: 'delete'
+  })
+}
+
+// 上传版本
+export function uploadUpgradeFile(data) {
+  return request({
+    url: '/api/v1/app/upgradefile/upload',
+    method: 'post',
+    data: data,
+    headers: {
+      'Content-Type': 'multipart/form-data',
+    }
+  })
+}
+// 下载版本
+export function downloadUpgradeFile(uid) {
+  return request({
+    url: '/api/v1/app/upgradefile/download/'+uid,
+    method: 'get'
+  })
+}
+
+// 推送版本信息, 默认推送最新版本, 所以, version可以确定, 只需要传递推送的目标的设备号即可以完成推送.
+export function pushVersion(deviceId) {
+  return request({
+    url: '/api/v1/app/upgradefile/' + deviceId,
+    method: 'delete'
+  })
+}
+

+ 19 - 0
device-manage-ui/src/api/business/upgraderecord.js

@@ -0,0 +1,19 @@
+import request from '@/utils/request'
+
+// 查询升级记录
+export function queryUpgradeRecordList(data) {
+  return request({
+    url: '/api/v1/recordlist',
+    method: 'post',
+    data: data
+  })
+}
+
+// 删除升级记录
+export function deleteUpgradeRecord(recordid) {
+    return request({
+      url: '/api/v1/device/record/' + recordid,
+      method: 'delete'
+    })
+  }
+  

+ 62 - 0
device-manage-ui/src/api/business/video.js

@@ -0,0 +1,62 @@
+import request from '@/utils/request'
+
+// 查询视频列表
+export function getVideoList(query) {
+  return request({
+    url: '/api/v1/videolist',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询视频信息 (支持多个 传数组即可以)
+export function getVideo(vids) {
+  return request({
+    url: '/api/v1/media/video/' + vids,
+    method: 'get'
+  })
+}
+
+
+// 更改视频信息
+export function updateVideo(data) {
+  return request({
+    url: '/api/v1/media/video',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除视频信息
+export function deleteVideo(vids) {
+  return request({
+    url: '/api/v1/media/video/' + vids,
+    method: 'delete'
+  })
+}
+
+// 上传视频
+export function uploadVideo(data) {
+  return request({
+    url: '/api/v1/media/video/upload',
+    method: 'post',
+    data: data,
+    headers: {
+      'Content-Type': 'multipart/form-data',
+    }
+  })
+}
+
+
+// 提交视频信息
+export function postVideoInfo(data) {
+  return request({
+    url: '/api/v1/media/video/upload/form',
+    method: 'post',
+    data: data
+  })
+}
+
+
+
+

+ 54 - 0
device-manage-ui/src/api/file.js

@@ -0,0 +1,54 @@
+import request from '@/utils/request'
+import { data } from 'autoprefixer'
+
+export const sysfiledirList = data => request({
+  url: '/api/v1/sysfiledirList',
+  method: 'GET',
+  data
+})
+
+export const sysfiledirAcionAdd = data => request({
+  url: '/api/v1/sysfiledir',
+  method: 'POST',
+  data
+})
+
+export const sysfiledirAcionEdit = data => request({
+  url: '/api/v1/sysfiledir',
+  method: 'PUT',
+  data
+})
+
+export const sysfiledirAcionDel = data => request({
+  url: '/api/v1/sysfiledir/' + data,
+  method: 'DELETE'
+})
+
+export const sysfileinfoList = data => request({
+  url: `/api/v1/sysfileinfoList?pId=${data.pId}&pageSize=${data.pageSize}&pageIndex=${data.pageIndex}`,
+  method: 'GET',
+  data
+})
+
+export const sysfileinfo = id => request({
+  url: '/api/v1/sysfileinfo/' + id,
+  method: 'GET'
+})
+
+export const sysfileinfoAdd = data => request({
+  url: '/api/v1/sysfileinfo',
+  method: 'POST',
+  data
+})
+
+export const sysfileinfoEdit = data => request({
+  url: '/api/v1/sysfileinfo',
+  method: 'put',
+  data
+})
+
+export const sysfileinfoDelete = id => request({
+  url: '/api/v1/sysfileinfo/' + id,
+  method: 'DELETE',
+  data
+})

+ 26 - 0
device-manage-ui/src/api/login.js

@@ -0,0 +1,26 @@
+import request from '@/utils/request'
+
+// 获取验证码
+export function getCodeImg() {
+  return request({
+    url: '/api/v1/getCaptcha',
+    method: 'get'
+  })
+}
+
+// 查询
+export function getSetting() {
+  return request({
+    url: '/api/v1/setting',
+    method: 'get'
+  })
+}
+
+// 修改
+export function updateSetting(data) {
+  return request({
+    url: '/api/v1/setting',
+    method: 'post',
+    data: data
+  })
+}

+ 9 - 0
device-manage-ui/src/api/monitor/server.js

@@ -0,0 +1,9 @@
+import request from '@/utils/request'
+
+// 查询服务器详细
+export function getServer() {
+  return request({
+    url: '/api/v1/setting/serverInfo',
+    method: 'get'
+  })
+}

+ 17 - 0
device-manage-ui/src/api/remote-search.js

@@ -0,0 +1,17 @@
+import request from '@/utils/request'
+
+export function searchUser(name) {
+  return request({
+    url: '/search/user',
+    method: 'get',
+    params: { name }
+  })
+}
+
+export function transactionList(query) {
+  return request({
+    url: '/transaction/list',
+    method: 'get',
+    params: query
+  })
+}

+ 43 - 0
device-manage-ui/src/api/schedule.js

@@ -0,0 +1,43 @@
+import request from '@/utils/request'
+
+export function list(data) {
+  return request({
+    url: 'api/v1/schedule/list',
+    method: 'get',
+    params: data
+  })
+}
+
+export function add(data) {
+  return request({
+    url: 'api/v1/schedule/add',
+    method: 'post',
+    data
+  })
+}
+
+export function edit(data) {
+  return request({
+    url: 'api/v1/schedule/update',
+    method: 'put',
+    data
+  })
+}
+
+export function getSchedule(id) {
+  return request({
+    url: 'api/v1/schedule/query',
+    method: 'get',
+    params: {
+      id
+    }
+  })
+}
+
+export function deleteSchedule(data) {
+  return request({
+    url: 'api/v1/schedule/delete',
+    method: 'delete',
+    data
+  })
+}

+ 45 - 0
device-manage-ui/src/api/syscategory.js

@@ -0,0 +1,45 @@
+import request from '@/utils/request'
+
+// 查询SysCategory列表
+export function listSysCategory(query) {
+  return request({
+    url: '/api/v1/syscategoryList',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询SysCategory详细
+export function getSysCategory(id) {
+  return request({
+    url: '/api/v1/syscategory/' + id,
+    method: 'get'
+  })
+}
+
+// 新增SysCategory
+export function addSysCategory(data) {
+  return request({
+    url: '/api/v1/syscategory',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改SysCategory
+export function updateSysCategory(data) {
+  return request({
+    url: '/api/v1/syscategory',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除SysCategory
+export function delSysCategory(id) {
+  return request({
+    url: '/api/v1/syscategory/' + id,
+    method: 'delete'
+  })
+}
+

+ 45 - 0
device-manage-ui/src/api/sysconfig.js

@@ -0,0 +1,45 @@
+import request from '@/utils/request'
+
+// 查询SysConfig列表
+export function listSysConfig(query) {
+  return request({
+    url: '/api/v1/sysconfigList',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询SysConfig详细
+export function getSysConfig(configId) {
+  return request({
+    url: '/api/v1/sysconfig/' + configId,
+    method: 'get'
+  })
+}
+
+// 新增SysConfig
+export function addSysConfig(data) {
+  return request({
+    url: '/api/v1/sysconfig',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改SysConfig
+export function updateSysConfig(data) {
+  return request({
+    url: '/api/v1/sysconfig',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除SysConfig
+export function delSysConfig(configId) {
+  return request({
+    url: '/api/v1/sysconfig/' + configId,
+    method: 'delete'
+  })
+}
+

+ 46 - 0
device-manage-ui/src/api/syscontent.js

@@ -0,0 +1,46 @@
+import request from '@/utils/request'
+
+// 查询SysContent列表
+export function listSysContent(query) {
+return request({
+url: '/api/v1/syscontentList',
+method: 'get',
+params: query
+})
+}
+
+// 查询SysContent详细
+export function getSysContent (id) {
+return request({
+url: '/api/v1/syscontent/' + id,
+method: 'get'
+})
+}
+
+
+// 新增SysContent
+export function addSysContent(data) {
+return request({
+url: '/api/v1/syscontent',
+method: 'post',
+data: data
+})
+}
+
+// 修改SysContent
+export function updateSysContent(data) {
+return request({
+url: '/api/v1/syscontent',
+method: 'put',
+data: data
+})
+}
+
+// 删除SysContent
+export function delSysContent(id) {
+return request({
+url: '/api/v1/syscontent/' + id,
+method: 'delete'
+})
+}
+

+ 62 - 0
device-manage-ui/src/api/sysjob.js

@@ -0,0 +1,62 @@
+import request from '@/utils/request'
+
+// 查询SysJob列表
+export function listSysJob(query) {
+  return request({
+    url: '/api/v1/sysjob',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询SysJob详细
+export function getSysJob(jobId) {
+  return request({
+    url: '/api/v1/sysjob/' + jobId,
+    method: 'get'
+  })
+}
+
+// 新增SysJob
+export function addSysJob(data) {
+  return request({
+    url: '/api/v1/sysjob',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改SysJob
+export function updateSysJob(data) {
+  return request({
+    url: '/api/v1/sysjob',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除SysJob
+export function delSysJob(data) {
+  return request({
+    url: '/api/v1/sysjob',
+    method: 'delete',
+    data: data
+  })
+}
+
+// 移除SysJob
+export function removeJob(jobId) {
+  return request({
+    url: '/api/v1/job/remove/' + jobId,
+    method: 'get'
+  })
+}
+
+// 启动SysJob
+export function startJob(jobId) {
+  return request({
+    url: '/api/v1/job/start/' + jobId,
+    method: 'get'
+  })
+}
+

+ 61 - 0
device-manage-ui/src/api/system/config.js

@@ -0,0 +1,61 @@
+import request from '@/utils/request'
+
+// 查询参数列表
+export function listConfig(query) {
+  return request({
+    url: '/api/v1/configList',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询参数详细
+export function getConfig(configId) {
+  return request({
+    url: '/api/v1/config/' + configId,
+    method: 'get'
+  })
+}
+
+// 根据参数键名查询参数值
+export function getConfigKey(configKey) {
+  return request({
+    url: '/api/v1/configKey/' + configKey,
+    method: 'get'
+  })
+}
+
+// 新增参数配置
+export function addConfig(data) {
+  return request({
+    url: '/api/v1/config',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改参数配置
+export function updateConfig(data) {
+  return request({
+    url: '/api/v1/config',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除参数配置
+export function delConfig(configId) {
+  return request({
+    url: '/api/v1/config/' + configId,
+    method: 'delete'
+  })
+}
+
+// 导出参数
+export function exportConfig(query) {
+  return request({
+    url: '/api/v1/config/export',
+    method: 'get',
+    params: query
+  })
+}

+ 59 - 0
device-manage-ui/src/api/system/dept.js

@@ -0,0 +1,59 @@
+import request from '@/utils/request'
+
+export function getDeptList(query) {
+  return request({
+    url: '/api/v1/deptList',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询部门详细
+export function getDept(deptId) {
+  return request({
+    url: '/api/v1/dept/' + deptId,
+    method: 'get'
+  })
+}
+
+// 查询部门下拉树结构
+export function treeselect() {
+  return request({
+    url: '/api/v1/deptTree',
+    method: 'get'
+  })
+}
+
+// 根据角色ID查询部门树结构
+export function roleDeptTreeselect(roleId) {
+  return request({
+    url: '/api/v1/roleDeptTreeselect/' + roleId,
+    method: 'get'
+  })
+}
+
+// 新增部门
+export function addDept(data) {
+  return request({
+    url: '/api/v1/dept',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改部门
+export function updateDept(data) {
+  return request({
+    url: '/api/v1/dept',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除部门
+export function delDept(deptId) {
+  return request({
+    url: '/api/v1/dept/' + deptId,
+    method: 'delete'
+  })
+}

+ 61 - 0
device-manage-ui/src/api/system/dict/data.js

@@ -0,0 +1,61 @@
+import request from '@/utils/request'
+
+// 查询字典数据列表
+export function listData(query) {
+  return request({
+    url: '/api/v1/dict/datalist?dictType=' + query.dictType,
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询字典数据详细
+export function getData(dictCode) {
+  return request({
+    url: '/api/v1/dict/data/' + dictCode,
+    method: 'get'
+  })
+}
+
+// 根据字典类型查询字典数据信息
+export function getDicts(dictType) {
+  return request({
+    url: '/api/v1/dict/databytype/' + dictType,
+    method: 'get'
+  })
+}
+
+// 新增字典数据
+export function addData(data) {
+  return request({
+    url: '/api/v1/dict/data',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改字典数据
+export function updateData(data) {
+  return request({
+    url: '/api/v1/dict/data/',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除字典数据
+export function delData(dictCode) {
+  return request({
+    url: '/api/v1/dict/data/' + dictCode,
+    method: 'delete'
+  })
+}
+
+// 导出字典数据
+export function exportData(query) {
+  return request({
+    url: '/api/v1/dict/data/export',
+    method: 'get',
+    params: query
+  })
+}

+ 61 - 0
device-manage-ui/src/api/system/dict/type.js

@@ -0,0 +1,61 @@
+import request from '@/utils/request'
+
+// 查询字典类型列表
+export function listType(query) {
+  return request({
+    url: '/api/v1/dict/typelist',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询字典类型详细
+export function getType(dictId) {
+  return request({
+    url: '/api/v1/dict/type/' + dictId,
+    method: 'get'
+  })
+}
+
+// 新增字典类型
+export function addType(data) {
+  return request({
+    url: '/api/v1/dict/type',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改字典类型
+export function updateType(data) {
+  return request({
+    url: '/api/v1/dict/type',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除字典类型
+export function delType(dictId) {
+  return request({
+    url: '/api/v1/dict/type/' + dictId,
+    method: 'delete'
+  })
+}
+
+// 导出字典类型
+export function exportType(query) {
+  return request({
+    url: '/api/v1/dict/type/export',
+    method: 'get',
+    params: query
+  })
+}
+
+// 获取字典选择框列表
+export function optionselect() {
+  return request({
+    url: '/api/v1/dict/typeoptionselect',
+    method: 'get'
+  })
+}

+ 35 - 0
device-manage-ui/src/api/system/loginlog.js

@@ -0,0 +1,35 @@
+import request from '@/utils/request'
+
+// 查询登录日志列表
+export function list(query) {
+  return request({
+    url: '/api/v1/loginloglist',
+    method: 'get',
+    params: query
+  })
+}
+
+// 删除登录日志
+export function delLogininfor(infoId) {
+  return request({
+    url: '/api/v1/loginlog/' + infoId,
+    method: 'delete'
+  })
+}
+
+// 清空登录日志
+export function cleanLogininfor() {
+  return request({
+    url: '/api/v1/loginlog/clean',
+    method: 'delete'
+  })
+}
+
+// 导出登录日志
+export function exportLogininfor(query) {
+  return request({
+    url: '/api/v1/loginlog/export',
+    method: 'get',
+    params: query
+  })
+}

+ 60 - 0
device-manage-ui/src/api/system/menu.js

@@ -0,0 +1,60 @@
+import request from '@/utils/request'
+
+// 查询菜单列表
+export function listMenu(query) {
+  return request({
+    url: '/api/v1/menulist',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询菜单详细
+export function getMenu(menuId) {
+  return request({
+    url: '/api/v1/menu/' + menuId,
+    method: 'get'
+  })
+}
+
+// 查询菜单下拉树结构
+export function treeselect() {
+  return request({
+    url: '/api/v1/menuTreeselect',
+    method: 'get'
+  })
+}
+
+// 根据角色ID查询菜单下拉树结构
+export function roleMenuTreeselect(roleId) {
+  return request({
+    url: '/api/v1/roleMenuTreeselect/' + roleId,
+    method: 'get'
+  })
+}
+
+// 新增菜单
+export function addMenu(data) {
+  return request({
+    url: '/api/v1/menu',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改菜单
+export function updateMenu(data) {
+  return request({
+    url: '/api/v1/menu',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除菜单
+export function delMenu(menuId) {
+  return request({
+    url: '/api/v1/menu/' + menuId,
+    method: 'delete'
+  })
+}

+ 35 - 0
device-manage-ui/src/api/system/operlog.js

@@ -0,0 +1,35 @@
+import request from '@/utils/request'
+
+// 查询操作日志列表
+export function list(query) {
+  return request({
+    url: '/api/v1/operloglist',
+    method: 'get',
+    params: query
+  })
+}
+
+// 删除操作日志
+export function delOperlog(operId) {
+  return request({
+    url: '/api/v1/operlog/' + operId,
+    method: 'delete'
+  })
+}
+
+// 清空操作日志
+export function cleanOperlog() {
+  return request({
+    url: '/api/v1/operlog/clean',
+    method: 'delete'
+  })
+}
+
+// 导出操作日志
+export function exportOperlog(query) {
+  return request({
+    url: '/api/v1/operlog/export',
+    method: 'get',
+    params: query
+  })
+}

+ 45 - 0
device-manage-ui/src/api/system/post.js

@@ -0,0 +1,45 @@
+import request from '@/utils/request'
+
+// 查询岗位列表
+export function listPost(query) {
+  return request({
+    url: '/api/v1/postlist',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询岗位详细
+export function getPost(postId) {
+  return request({
+    url: '/api/v1/post/' + postId,
+    method: 'get'
+  })
+}
+
+// 新增岗位
+export function addPost(data) {
+  return request({
+    url: '/api/v1/post',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改岗位
+export function updatePost(data) {
+  return request({
+    url: '/api/v1/post',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除岗位
+export function delPost(postId) {
+  return request({
+    url: '/api/v1/post/' + postId,
+    method: 'delete'
+  })
+}
+

+ 87 - 0
device-manage-ui/src/api/system/role.js

@@ -0,0 +1,87 @@
+import request from '@/utils/request'
+
+// 查询角色列表
+export function listRole(query) {
+  return request({
+    url: '/api/v1/rolelist',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询角色详细
+export function getRole(roleId) {
+  return request({
+    url: '/api/v1/role/' + roleId,
+    method: 'get'
+  })
+}
+
+// 新增角色
+export function addRole(data) {
+  return request({
+    url: '/api/v1/role',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改角色
+export function updateRole(data) {
+  return request({
+    url: '/api/v1/role',
+    method: 'put',
+    data: data
+  })
+}
+
+// 角色数据权限
+export function dataScope(data) {
+  return request({
+    url: '/api/v1/roledatascope',
+    method: 'put',
+    data: data
+  })
+}
+
+// 角色状态修改
+export function changeRoleStatus(roleId, status) {
+  const data = {
+    roleId,
+    status
+  }
+  return request({
+    url: '/api/v1/role',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除角色
+export function delRole(roleId) {
+  return request({
+    url: '/api/v1/role/' + roleId,
+    method: 'delete'
+  })
+}
+
+export function getListrole(id) {
+  return request({
+    url: '/api/v1/menu/role/' + id,
+    method: 'get'
+  })
+}
+
+export function getRoutes() {
+  return request({
+    url: '/api/v1/menurole',
+    method: 'get'
+  })
+}
+
+export function getMenuNames() {
+  return request({
+    url: '/api/v1/menuids',
+    method: 'get'
+  })
+}

+ 133 - 0
device-manage-ui/src/api/system/sysuser.js

@@ -0,0 +1,133 @@
+import request from '@/utils/request'
+
+// 查询用户列表
+export function listUser(query) {
+  return request({
+    url: '/api/v1/sysUserList',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询用户详细
+export function getUser(userId) {
+  return request({
+    url: '/api/v1/sysUser/' + userId,
+    method: 'get'
+  })
+}
+
+export function getUserInit() {
+  return request({
+    url: '/api/v1/sysUser/',
+    method: 'get'
+  })
+}
+
+// 新增用户
+export function addUser(data) {
+  return request({
+    url: '/api/v1/sysUser',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改用户
+export function updateUser(data) {
+  return request({
+    url: '/api/v1/sysUser',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除用户
+export function delUser(userId) {
+  return request({
+    url: '/api/v1/sysUser/' + userId,
+    method: 'delete'
+  })
+}
+
+// 导出用户
+export function exportUser(query) {
+  return request({
+    url: '/api/v1/sysUser/export',
+    method: 'get',
+    params: query
+  })
+}
+
+// 用户密码重置
+export function resetUserPwd(userId, password) {
+  const data = {
+    userId,
+    password
+  }
+  return request({
+    url: '/api/v1/sysUser',
+    method: 'put',
+    data: data
+  })
+}
+
+// 用户状态修改
+export function changeUserStatus(userId, status) {
+  const data = {
+    userId,
+    status
+  }
+  return request({
+    url: '/api/v1/sysUser',
+    method: 'put',
+    data: data
+  })
+}
+
+// 查询用户个人信息
+export function getUserProfile() {
+  return request({
+    url: '/api/v1/user/profile',
+    method: 'get'
+  })
+}
+
+// 修改用户个人信息
+export function updateUserProfile(data) {
+  return request({
+    url: '/api/v1/sysUser/profile',
+    method: 'put',
+    data: data
+  })
+}
+
+// 用户密码重置
+export function updateUserPwd(oldPassword, newPassword) {
+  const data = {
+    oldPassword,
+    newPassword
+  }
+  return request({
+    url: '/api/v1/user/pwd',
+    method: 'put',
+    data: data
+  })
+}
+
+// 用户头像上传
+export function uploadAvatar(data) {
+  return request({
+    url: '/api/v1/user/avatar',
+    method: 'post',
+    data: data
+  })
+}
+
+// 下载用户导入模板
+export function importTemplate() {
+  return request({
+    url: '/api/v1/sysUser/importTemplate',
+    method: 'get'
+  })
+}

+ 20 - 0
device-manage-ui/src/api/table.js

@@ -0,0 +1,20 @@
+// 查询列表
+export function getItems(f, query) {
+  query = query || { pageSize: 10000 }
+  return f(query)
+}
+
+export function setItems(response, k, v) {
+  const data = []
+  k = k || 'id'
+  v = v || 'name'
+  if (response.data && response.data.list && response.data.list.length > 0) {
+    response.data.list.forEach(e => {
+      data.push({
+        key: e[k].toString(),
+        value: e[v].toString()
+      })
+    })
+    return data
+  }
+}

+ 95 - 0
device-manage-ui/src/api/tools/gen.js

@@ -0,0 +1,95 @@
+import request from '@/utils/request'
+
+// 查询生成表数据
+export function listTable(query) {
+  return request({
+    url: '/api/v1/sys/tables/page',
+    method: 'get',
+    params: query
+  })
+}
+// 查询db数据库列表
+export function listDbTable(query) {
+  return request({
+    url: '/api/v1/db/tables/page',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询表详细信息
+export function getGenTable(tableId) {
+  return request({
+    url: '/api/v1/sys/tables/info/' + tableId,
+    method: 'get'
+  })
+}
+
+export function getGenTableInfo(tablename) {
+  return request({
+    url: '/api/v1/sys/tables?tableName=' + tablename,
+    method: 'get'
+  })
+}
+
+// 修改代码生成信息
+export function updateGenTable(data) {
+  return request({
+    url: '/api/v1/sys/tables/info',
+    method: 'put',
+    data: data
+  })
+}
+
+// 导入表
+export function importTable(data) {
+  return request({
+    url: '/api/v1/sys/tables/info',
+    method: 'post',
+    params: data
+  })
+}
+// 预览生成代码
+export function previewTable(tableId) {
+  return request({
+    url: '/api/v1/gen/preview/' + tableId,
+    method: 'get'
+  })
+}
+// 删除表数据
+export function delTable(tableId) {
+  return request({
+    url: '/api/v1/sys/tables/info/' + tableId,
+    method: 'delete'
+  })
+}
+
+// 生成代码到项目
+export function toProjectTable(tableId) {
+  return request({
+    url: '/api/v1/gen/toproject/' + tableId,
+    method: 'get'
+  })
+}
+
+export function toProjectTableCheckRole(tableId, ischeckrole) {
+  return request({
+    url: '/api/v1/gen/toproject/' + tableId + '?ischeckrole=' + ischeckrole,
+    method: 'get'
+  })
+}
+
+// 生成菜单到数据库
+export function toDBTable(tableId) {
+  return request({
+    url: '/api/v1/gen/todb/' + tableId,
+    method: 'get'
+  })
+}
+
+export function getTableTree() {
+  return request({
+    url: '/api/v1/gen/tabletree',
+    method: 'get'
+  })
+}

+ 32 - 0
device-manage-ui/src/api/user.js

@@ -0,0 +1,32 @@
+import request from '@/utils/request'
+
+export function login(data) {
+  return request({
+    url: '/login',
+    method: 'post',
+    data
+  })
+}
+
+export function refreshtoken(data) {
+  return request({
+    url: '/refreshtoken',
+    method: 'post',
+    data
+  })
+}
+
+export function getInfo() {
+  return request({
+    url: '/api/v1/getinfo',
+    method: 'get'
+  })
+}
+
+export function logout() {
+  return request({
+    url: '/api/v1/logout',
+    method: 'post'
+  })
+}
+

+ 9 - 0
device-manage-ui/src/api/ws.js

@@ -0,0 +1,9 @@
+import request from '@/utils/request'
+
+// 查询SysJob列表
+export function unWsLogout(id, group) {
+  return request({
+    url: '/wslogout/' + id + '/' + group,
+    method: 'get'
+  })
+}

BIN
device-manage-ui/src/assets/401_images/401.gif


BIN
device-manage-ui/src/assets/404_images/404.png


BIN
device-manage-ui/src/assets/404_images/404_cloud.png


BIN
device-manage-ui/src/assets/custom-theme/fonts/element-icons.ttf


BIN
device-manage-ui/src/assets/custom-theme/fonts/element-icons.woff


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
device-manage-ui/src/assets/custom-theme/index.css


+ 39 - 0
device-manage-ui/src/assets/dark.svg

@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="52px" height="45px" viewBox="0 0 52 45" version="1.1" 
+    xmlns="http://www.w3.org/2000/svg" 
+    xmlns:xlink="http://www.w3.org/1999/xlink">
+    <defs>
+        <filter x="-9.4%" y="-6.2%" width="118.8%" height="122.5%" filterUnits="objectBoundingBox" id="filter-1">
+            <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
+            <feGaussianBlur stdDeviation="1" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
+            <feColorMatrix values="0 0 0 0 0   0 0 0 0 0   0 0 0 0 0  0 0 0 0.15 0" type="matrix" in="shadowBlurOuter1" result="shadowMatrixOuter1"></feColorMatrix>
+            <feMerge>
+                <feMergeNode in="shadowMatrixOuter1"></feMergeNode>
+                <feMergeNode in="SourceGraphic"></feMergeNode>
+            </feMerge>
+        </filter>
+        <rect id="path-2" x="0" y="0" width="48" height="40" rx="4"></rect>
+        <filter x="-4.2%" y="-2.5%" width="108.3%" height="110.0%" filterUnits="objectBoundingBox" id="filter-4">
+            <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
+            <feGaussianBlur stdDeviation="0.5" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
+            <feColorMatrix values="0 0 0 0 0   0 0 0 0 0   0 0 0 0 0  0 0 0 0.1 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
+        </filter>
+    </defs>
+    <g id="配置面板" width="48" height="40" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="setting-copy-2" width="48" height="40" transform="translate(-1190.000000, -136.000000)">
+            <g id="Group-8" width="48" height="40" transform="translate(1167.000000, 0.000000)">
+                <g id="Group-5-Copy-5" filter="url(#filter-1)" transform="translate(25.000000, 137.000000)">
+                    <mask id="mask-3" fill="white">
+                        <use xlink:href="#path-2"></use>
+                    </mask>
+                    <g id="Rectangle-18">
+                        <use fill="black" fill-opacity="1" filter="url(#filter-4)" xlink:href="#path-2"></use>
+                        <use fill="#F0F2F5" fill-rule="evenodd" xlink:href="#path-2"></use>
+                    </g>
+                    <rect id="Rectangle-11" fill="#FFFFFF" mask="url(#mask-3)" x="0" y="0" width="48" height="10"></rect>
+                    <rect id="Rectangle-18" fill="#303648" mask="url(#mask-3)" x="0" y="0" width="16" height="40"></rect>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

BIN
device-manage-ui/src/assets/icons/12-01.png


BIN
device-manage-ui/src/assets/icons/AU-01.png


BIN
device-manage-ui/src/assets/icons/Access.png


BIN
device-manage-ui/src/assets/icons/AndroidStudio.png


BIN
device-manage-ui/src/assets/icons/Awesome.png


BIN
device-manage-ui/src/assets/icons/AwesomeVue.png


BIN
device-manage-ui/src/assets/icons/Clion-01-01.png


BIN
device-manage-ui/src/assets/icons/Dm-01-01.png


BIN
device-manage-ui/src/assets/icons/Edge-01.png


BIN
device-manage-ui/src/assets/icons/Excel.png


BIN
device-manage-ui/src/assets/icons/Ic-01.png


BIN
device-manage-ui/src/assets/icons/Idea.png


BIN
device-manage-ui/src/assets/icons/Link.png


BIN
device-manage-ui/src/assets/icons/OneDrive.png


BIN
device-manage-ui/src/assets/icons/OneNote.png


BIN
device-manage-ui/src/assets/icons/PDFbeifen.png


BIN
device-manage-ui/src/assets/icons/Phpstorm-01.png


BIN
device-manage-ui/src/assets/icons/PictureUnknow.png


BIN
device-manage-ui/src/assets/icons/Pictureloadingfailed.png


BIN
device-manage-ui/src/assets/icons/Pl-01.png


BIN
device-manage-ui/src/assets/icons/Pn-01.png


BIN
device-manage-ui/src/assets/icons/PowerPoint.png


BIN
device-manage-ui/src/assets/icons/PowerShell.png


BIN
device-manage-ui/src/assets/icons/Pycharm.png


BIN
device-manage-ui/src/assets/icons/Typora.png


BIN
device-manage-ui/src/assets/icons/UTools.png


BIN
device-manage-ui/src/assets/icons/Unknow.png


BIN
device-manage-ui/src/assets/icons/Visio.png


BIN
device-manage-ui/src/assets/icons/VisualStudio.png


BIN
device-manage-ui/src/assets/icons/Web.png


BIN
device-manage-ui/src/assets/icons/Webstorm.png


BIN
device-manage-ui/src/assets/icons/Windows.png


Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.