Browse Source

首次提交

htc 3 weeks ago
commit
b5f805d4fc
100 changed files with 45261 additions and 0 deletions
  1. 2 0
      .env.development
  2. 2 0
      .env.production
  3. 2 0
      .env.production.sit
  4. 2 0
      .env.production.uat
  5. 23 0
      .gitignore
  6. 11 0
      .vs/VSWorkspaceState.json
  7. 972 0
      .vs/canteen-vue/config/applicationhost.config
  8. BIN
      .vs/slnx.sqlite
  9. 6 0
      Dockerfile
  10. 21 0
      README.md
  11. 6 0
      babel.config.js
  12. 9 0
      build.sh
  13. 2 0
      entrypoint.sh
  14. 105 0
      gulpfile.js
  15. 38519 0
      package-lock.json
  16. 85 0
      package.json
  17. 1 0
      public/element-theme/blue/aui.css
  18. BIN
      public/element-theme/blue/fonts/element-icons.ttf
  19. BIN
      public/element-theme/blue/fonts/element-icons.woff
  20. 1 0
      public/element-theme/blue/index.css
  21. 1 0
      public/element-theme/brown/aui.css
  22. BIN
      public/element-theme/brown/fonts/element-icons.ttf
  23. BIN
      public/element-theme/brown/fonts/element-icons.woff
  24. 1 0
      public/element-theme/brown/index.css
  25. 1 0
      public/element-theme/cyan/aui.css
  26. BIN
      public/element-theme/cyan/fonts/element-icons.ttf
  27. BIN
      public/element-theme/cyan/fonts/element-icons.woff
  28. 1 0
      public/element-theme/cyan/index.css
  29. 1288 0
      public/element-theme/default/aui.css
  30. BIN
      public/element-theme/default/fonts/element-icons.ttf
  31. BIN
      public/element-theme/default/fonts/element-icons.woff
  32. 1 0
      public/element-theme/default/index.css
  33. 1 0
      public/element-theme/gray/aui.css
  34. BIN
      public/element-theme/gray/fonts/element-icons.ttf
  35. BIN
      public/element-theme/gray/fonts/element-icons.woff
  36. 1 0
      public/element-theme/gray/index.css
  37. 1 0
      public/element-theme/green/aui.css
  38. BIN
      public/element-theme/green/fonts/element-icons.ttf
  39. BIN
      public/element-theme/green/fonts/element-icons.woff
  40. 1 0
      public/element-theme/green/index.css
  41. 1 0
      public/element-theme/indigo/aui.css
  42. BIN
      public/element-theme/indigo/fonts/element-icons.ttf
  43. BIN
      public/element-theme/indigo/fonts/element-icons.woff
  44. 1 0
      public/element-theme/indigo/index.css
  45. 1 0
      public/element-theme/orange/aui.css
  46. BIN
      public/element-theme/orange/fonts/element-icons.ttf
  47. BIN
      public/element-theme/orange/fonts/element-icons.woff
  48. 1 0
      public/element-theme/orange/index.css
  49. 1 0
      public/element-theme/pink/aui.css
  50. BIN
      public/element-theme/pink/fonts/element-icons.ttf
  51. BIN
      public/element-theme/pink/fonts/element-icons.woff
  52. 1 0
      public/element-theme/pink/index.css
  53. 1 0
      public/element-theme/purple/aui.css
  54. BIN
      public/element-theme/purple/fonts/element-icons.ttf
  55. BIN
      public/element-theme/purple/fonts/element-icons.woff
  56. 1 0
      public/element-theme/purple/index.css
  57. 1 0
      public/element-theme/red/aui.css
  58. BIN
      public/element-theme/red/fonts/element-icons.ttf
  59. BIN
      public/element-theme/red/fonts/element-icons.woff
  60. 1 0
      public/element-theme/red/index.css
  61. 1 0
      public/element-theme/runze/aui.css
  62. BIN
      public/element-theme/runze/fonts/element-icons.ttf
  63. BIN
      public/element-theme/runze/fonts/element-icons.woff
  64. 1 0
      public/element-theme/runze/index.css
  65. 1288 0
      public/element-theme/turquoise/aui.css
  66. BIN
      public/element-theme/turquoise/fonts/element-icons.ttf
  67. BIN
      public/element-theme/turquoise/fonts/element-icons.woff
  68. 1 0
      public/element-theme/turquoise/index.css
  69. 1288 0
      public/element-theme/yellow/aui.css
  70. BIN
      public/element-theme/yellow/fonts/element-icons.ttf
  71. BIN
      public/element-theme/yellow/fonts/element-icons.woff
  72. 1 0
      public/element-theme/yellow/index.css
  73. BIN
      public/favicon.ico
  74. 91 0
      public/index.html
  75. 11 0
      sh.exe.stackdump
  76. 597 0
      src/App.vue
  77. 59 0
      src/api/login.js
  78. 72 0
      src/api/system/config.js
  79. 52 0
      src/api/system/dept.js
  80. 52 0
      src/api/system/dict/data.js
  81. 60 0
      src/api/system/dict/type.js
  82. 60 0
      src/api/system/menu.js
  83. 44 0
      src/api/system/notice.js
  84. 27 0
      src/api/system/oss.js
  85. 58 0
      src/api/system/ossConfig.js
  86. 44 0
      src/api/system/post.js
  87. 119 0
      src/api/system/role.js
  88. 135 0
      src/api/system/user.js
  89. 51 0
      src/assets/iconfont/iconfont.css
  90. 1 0
      src/assets/iconfont/iconfont.js
  91. 72 0
      src/assets/iconfont/iconfont.json
  92. BIN
      src/assets/iconfont/iconfont.ttf
  93. BIN
      src/assets/iconfont/iconfont.woff
  94. BIN
      src/assets/iconfont/iconfont.woff2
  95. BIN
      src/assets/images/agent/arrow_left.png
  96. BIN
      src/assets/images/agent/arrow_right_two.png
  97. BIN
      src/assets/images/agent/avatar.png
  98. BIN
      src/assets/images/agent/clear_mini.png
  99. BIN
      src/assets/images/agent/close_mini.png
  100. 0 0
      src/assets/images/agent/copy_mini.png

+ 2 - 0
.env.development

@@ -0,0 +1,2 @@
+NODE_ENV=development
+VUE_APP_NODE_ENV=dev

+ 2 - 0
.env.production

@@ -0,0 +1,2 @@
+NODE_ENV=production
+VUE_APP_NODE_ENV=prod

+ 2 - 0
.env.production.sit

@@ -0,0 +1,2 @@
+NODE_ENV=production
+VUE_APP_NODE_ENV=prod:sit

+ 2 - 0
.env.production.uat

@@ -0,0 +1,2 @@
+NODE_ENV=production
+VUE_APP_NODE_ENV=prod:uat

+ 23 - 0
.gitignore

@@ -0,0 +1,23 @@
+.DS_Store
+.VSCodeCounter
+node_modules
+/dist
+
+# local env files
+.env.local
+.env.*.local
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
+

+ 11 - 0
.vs/VSWorkspaceState.json

@@ -0,0 +1,11 @@
+{
+  "ExpandedNodes": [
+    "",
+    "\\src",
+    "\\src\\views",
+    "\\src\\views\\modules",
+    "\\src\\views\\modules\\archives"
+  ],
+  "SelectedNode": "\\src\\views\\modules\\archives\\syssuppliers-add-or-update.vue",
+  "PreviewInSolutionExplorer": false
+}

File diff suppressed because it is too large
+ 972 - 0
.vs/canteen-vue/config/applicationhost.config


BIN
.vs/slnx.sqlite


+ 6 - 0
Dockerfile

@@ -0,0 +1,6 @@
+from node:16.0.0
+
+WORKDIR /user/app
+COPY entrypoint.sh /
+RUN chmod +x /entrypoint.sh
+ENTRYPOINT ["/entrypoint.sh"]

+ 21 - 0
README.md

@@ -0,0 +1,21 @@
+# security-enterprise-admin
+
+## Project setup
+```
+npm install
+```
+
+### Compiles and hot-reloads for development
+```
+npm run serve
+```
+
+### Compiles and minifies for production
+```
+npm run build
+```
+
+### Lints and fixes files
+```
+npm run lint
+```

+ 6 - 0
babel.config.js

@@ -0,0 +1,6 @@
+module.exports = {
+  presets: [
+    '@vue/app'
+  ],
+  plugins: [["transform-es2015-arrow-functions", { spec: true }]]
+}

+ 9 - 0
build.sh

@@ -0,0 +1,9 @@
+npm cache clean --force
+npm install -g cnpm -registry=https://registry.npm.taobao.org
+npm install -g npm@6.14.17 -registry=https://registry.npm.taobao.org
+npm install vue-loader
+cnpm install -g @vue/cli
+cnpm install @vue/cli-service -g
+cnpm install node-sass@npm:dart-sass
+cnpm i
+cnpm run build

+ 2 - 0
entrypoint.sh

@@ -0,0 +1,2 @@
+#!/bin/bash 
+cnpm run build

+ 105 - 0
gulpfile.js

@@ -0,0 +1,105 @@
+var gulp   = require('gulp')
+var $      = require('gulp-load-plugins')()
+var fs     = require('fs')
+var path   = require('path')
+var del    = require('del')
+//var colors = require('colors')
+var child_process = require('child_process')
+
+var theme            = {}
+var themeList        = require('./src/element-ui/config.js').filter(item => !item.hasBuild)
+var styleFileDir     = './src/assets/scss'
+var styleFileDirTemp = `${styleFileDir}-temp`
+var themeFileDir     = './public/element-theme'
+var et               = require('element-theme')
+var etOptions        = require('./package.json')['element-theme']
+var themeFileName    = etOptions.config.replace(/.*\/(.+\.scss)/, '$1')
+
+/**
+ * 构建生成主题
+ */
+gulp.task('themes', () => {
+  if (themeList.length <= 0) { return del(styleFileDirTemp) }
+
+  // 删除临时文件,保证本次操作正常执行
+  //del(styleFileDirTemp)
+  console.log('del(styleFileDirTemp)');
+
+  // 拷贝一份scss样式文件夹,作为构建的临时处理文件夹
+  //child_process.spawnSync('cp', ['-r', styleFileDir, styleFileDirTemp])
+  console.log('copy styleFileDirTemp');
+
+  // 拷贝element组件scss变量样式文件至临时处理文件夹中,并修改相应配置信息
+  //child_process.spawnSync('cp', ['-r', etOptions.config, styleFileDirTemp])
+  etOptions.config = `${styleFileDirTemp}/${themeFileName}`
+
+  // 开始构建生成
+  fnCreate(themeList)
+
+  function fnCreate (themeList) {
+    if (themeList.length >= 1) {
+      // 保存当前构建生成的主题对象
+      theme = themeList[0]
+
+      console.log('\n')
+      console.log('-------------------- 待构建,主题 -------------------------')
+      console.log(themeList)
+      console.log('\n')
+      console.log('-------------------- 构建中,主题 -------------------------')
+      console.log(theme)
+      console.log('\n')
+
+      // 修改.scss临时文件中的$--color-primary主题变量值
+      var data = fs.readFileSync(etOptions.config, 'utf8')
+      var result = data.replace(/\$--color-primary:(.*) !default;/, `$--color-primary:${theme.color} !default;`)
+      fs.writeFileSync(path.resolve(etOptions.config), result)
+
+      // 修改aui.scss临时文件中引入element组件主题变量文件路径
+      var data = fs.readFileSync(`${styleFileDirTemp}/aui.scss`, 'utf8')
+      var result = data.replace(new RegExp(`(@import \")(.*\/)(${themeFileName}\";)`), '$1./$3')
+      fs.writeFileSync(path.resolve(`${styleFileDirTemp}/aui.scss`), result)
+
+      // 调用element-theme插件,生成element组件主题
+      etOptions.out = `${themeFileDir}/${theme.name}`
+      et.run(etOptions, () => {
+        // 生成后,构建同主题色aui.css项目主题
+        gulp.start(['styles'], () => {
+          // 递归下一步
+          themeList.splice(0, 1)
+          fnCreate(themeList)
+        })
+      })
+    } else {
+      // 删除临时文件
+      del(styleFileDirTemp)
+      console.log('\n')
+      console.log('-------------------- 构建完毕,删除临时文件 -------------------------')
+      console.log(styleFileDirTemp)
+      console.log('\n')
+
+      // 删除主题不需要的部分文件
+      var files = [
+        `${themeFileDir}/**/*.css`,
+        `!${themeFileDir}/**/index.css`,
+        `!${themeFileDir}/**/aui.css`,
+        `!${themeFileDir}/**/fonts`
+      ]
+      del(files)
+      console.log('-------------------- 构建完毕,删除主题独立组件文件 -------------------------')
+      console.log(files)
+      console.log('\n')
+    }
+  }
+})
+
+gulp.task('styles', () => {
+  return gulp.src([`${styleFileDirTemp}/aui.scss`])
+    .pipe($.sass().on('error', $.sass.logError))
+    .pipe($.autoprefixer({
+      browsers: etOptions.browsers,
+      cascade: false
+    }))
+    .pipe($.cleanCss())
+    .pipe($.rename('aui.css'))
+    .pipe(gulp.dest(`${themeFileDir}/${theme.name}`))
+})

File diff suppressed because it is too large
+ 38519 - 0
package-lock.json


+ 85 - 0
package.json

@@ -0,0 +1,85 @@
+{
+  "name": "security-enterprise-admin",
+  "version": "2.5.0",
+  "private": true,
+  "scripts": {
+    "test": "jest",
+    "serve": "vue-cli-service serve",
+    "build": "vue-cli-service build",
+    "build:sit": "vue-cli-service build --mode production.sit",
+    "build:uat": "vue-cli-service build --mode production.uat",
+    "build:prod": "vue-cli-service build --mode production",
+    "lint": "vue-cli-service lint",
+    "et": "node_modules/.bin/et",
+    "et:init": "node_modules/.bin/et -i",
+    "et:list": "gulp themes"
+  },
+  "dependencies": {
+    "@vue/cli-service": "^5.0.8",
+    "axios": "^0.19.0",
+    "babel-plugin-transform-es2015-arrow-functions": "^6.22.0",
+    "dayjs": "^1.10.7",
+    "element-theme": "^2.0.1",
+    "element-ui": "^2.11.1",
+    "file-loader": "^6.2.0",
+    "file-saver": "^2.0.5",
+    "js-cookie": "^3.0.5",
+    "jsbarcode": "^3.11.6",
+    "linq": "^4.0.0",
+    "lodash": "^4.17.15",
+    "mitt": "^3.0.1",
+    "moment": "^2.30.1",
+    "nanoid": "^4.0.0",
+    "node-sass": "^6.0.1",
+    "pinia": "^2.3.0",
+    "qrcode": "^1.5.4",
+    "qs": "^6.14.0",
+    "quill": "^1.3.6",
+    "sass": "^1.43.5",
+    "sass-loader": "^10.0.1",
+    "screenfull": "^4.2.1",
+    "svg-sprite-loader": "^4.1.6",
+    "vue": "^2.6.10",
+    "vue-cron": "^1.0.9",
+    "vue-i18n": "^8.12.0",
+    "vue-loader": "^17.0.0",
+    "vue-quill-editor": "^3.0.6",
+    "vue-router": "^3.6.5",
+    "vuex": "^3.1.1",
+    "webpack": "^5.89.0",
+    "webpack-cli": "^5.1.4",
+    "xlsx": "^0.18.5"
+  },
+  "devDependencies": {
+    "@vue/cli-plugin-babel": "5.0.0-rc.1",
+    "@vue/cli-plugin-router": "5.0.0-rc.1",
+    "@vue/cli-service": "5.0.0-rc.1",
+    "element-theme-chalk": "^2.11.1",
+    "natives": "^1.1.6",
+    "vue-template-compiler": "^2.6.10"
+  },
+  "postcss": {
+    "plugins": {
+      "autoprefixer": {}
+    }
+  },
+  "engines": {
+    "node": ">= 8.11.1",
+    "npm": ">= 5.6.0"
+  },
+  "browserslist": [
+    "> 1%",
+    "last 2 versions",
+    "not ie <= 10"
+  ],
+  "element-theme": {
+    "config": "./src/element-ui/theme-variables.scss",
+    "out": "./src/element-ui/theme",
+    "minimize": true,
+    "browsers": [
+      "> 1%",
+      "last 2 versions",
+      "not ie <= 10"
+    ]
+  }
+}

File diff suppressed because it is too large
+ 1 - 0
public/element-theme/blue/aui.css


BIN
public/element-theme/blue/fonts/element-icons.ttf


BIN
public/element-theme/blue/fonts/element-icons.woff


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/blue/index.css


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/brown/aui.css


BIN
public/element-theme/brown/fonts/element-icons.ttf


BIN
public/element-theme/brown/fonts/element-icons.woff


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/brown/index.css


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/cyan/aui.css


BIN
public/element-theme/cyan/fonts/element-icons.ttf


BIN
public/element-theme/cyan/fonts/element-icons.woff


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/cyan/index.css


File diff suppressed because it is too large
+ 1288 - 0
public/element-theme/default/aui.css


BIN
public/element-theme/default/fonts/element-icons.ttf


BIN
public/element-theme/default/fonts/element-icons.woff


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/default/index.css


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/gray/aui.css


BIN
public/element-theme/gray/fonts/element-icons.ttf


BIN
public/element-theme/gray/fonts/element-icons.woff


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/gray/index.css


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/green/aui.css


BIN
public/element-theme/green/fonts/element-icons.ttf


BIN
public/element-theme/green/fonts/element-icons.woff


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/green/index.css


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/indigo/aui.css


BIN
public/element-theme/indigo/fonts/element-icons.ttf


BIN
public/element-theme/indigo/fonts/element-icons.woff


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/indigo/index.css


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/orange/aui.css


BIN
public/element-theme/orange/fonts/element-icons.ttf


BIN
public/element-theme/orange/fonts/element-icons.woff


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/orange/index.css


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/pink/aui.css


BIN
public/element-theme/pink/fonts/element-icons.ttf


BIN
public/element-theme/pink/fonts/element-icons.woff


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/pink/index.css


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/purple/aui.css


BIN
public/element-theme/purple/fonts/element-icons.ttf


BIN
public/element-theme/purple/fonts/element-icons.woff


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/purple/index.css


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/red/aui.css


BIN
public/element-theme/red/fonts/element-icons.ttf


BIN
public/element-theme/red/fonts/element-icons.woff


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/red/index.css


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/runze/aui.css


BIN
public/element-theme/runze/fonts/element-icons.ttf


BIN
public/element-theme/runze/fonts/element-icons.woff


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/runze/index.css


File diff suppressed because it is too large
+ 1288 - 0
public/element-theme/turquoise/aui.css


BIN
public/element-theme/turquoise/fonts/element-icons.ttf


BIN
public/element-theme/turquoise/fonts/element-icons.woff


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/turquoise/index.css


File diff suppressed because it is too large
+ 1288 - 0
public/element-theme/yellow/aui.css


BIN
public/element-theme/yellow/fonts/element-icons.ttf


BIN
public/element-theme/yellow/fonts/element-icons.woff


File diff suppressed because it is too large
+ 1 - 0
public/element-theme/yellow/index.css


BIN
public/favicon.ico


+ 91 - 0
public/index.html

@@ -0,0 +1,91 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+  <meta charset="UTF-8">
+  <title>创衡智能体平台</title>
+  <meta http-equiv="X-UA-Compatible" content="ie=edge">
+  <link rel="shortcut icon" href="<%= BASE_URL %>favicon.ico">
+  <!-- 站点配置 -->
+  <script>
+    window.SITE_CONFIG = {};
+    window.SITE_CONFIG['version'] = 'v2.5.0';
+    window.SITE_CONFIG['nodeEnv'] = '<%= process.env.VUE_APP_NODE_ENV %>';
+    window.SITE_CONFIG['apiURL'] = '';                      // api请求地址
+    window.SITE_CONFIG['storeState'] = {};                  // vuex本地储存初始化状态(用于不刷新页面的情况下,也能重置初始化项目中所有状态)
+    window.SITE_CONFIG['contentTabDefault'] = {             // 内容标签页默认属性对象
+      'name': '',        // 名称, 由 this.$route.name 自动赋值(默认,名称 === 路由名称 === 路由路径)
+      'params': {},      // 参数, 由 this.$route.params 自动赋值
+      'query': {},       // 查询参数, 由 this.$route.query 自动赋值
+      'menuId': '',      // 菜单id(用于选中侧边栏菜单,与this.$store.state.sidebarMenuActiveName进行匹配)
+      'title': '',       // 标题
+      'isTab': false,     // 是否通过tab展示内容?
+      'iframeURL': ''    // 是否通过iframe嵌套展示内容? (以http[s]://开头, 自动匹配)
+    };
+    window.SITE_CONFIG['menuList'] = [];                     // 左侧菜单列表(后台返回,未做处理)
+    window.SITE_CONFIG['sidebarMenuActiveName'] = [];          // 面包屑导航
+    window.SITE_CONFIG['permissions'] = [];                  // 页面按钮操作权限(后台返回,未做处理)
+    window.SITE_CONFIG['dynamicRoutes'] = [];                // 动态路由列表
+    window.SITE_CONFIG['dynamicMenuRoutes'] = [];            // 动态(菜单)路由列表
+    window.SITE_CONFIG['dynamicMenuRoutesHasAdded'] = false; // 动态(菜单)路由是否已经添加的状态标示(用于判断是否需要重新拉取数据并进行动态添加操作)
+    window.SITE_CONFIG['scene'] = '跨境电商';
+
+
+  </script>
+  <!-- 开发环境 -->
+  <% if (process.env.VUE_APP_NODE_ENV==='dev' ) { %>
+    <script>
+
+      //window.SITE_CONFIG['apiURL'] = 'http://192.168.2.19:9011//witcarbon-admin';
+      // window.SITE_CONFIG['apiURL1'] = 'http://192.168.2.19:9014/iot';
+      window.SITE_CONFIG['apiURL'] = 'https://glt.ringzle.com:8033/witcarbon-admin';
+      // window.SITE_CONFIG['apiURL'] = 'http:///192.168.2.19:9021/witcarbon-admin';
+      window.SITE_CONFIG['apiURL1'] = 'http://gpu.ringzle.com:8082/iot';
+      // window.SITE_CONFIG['apiURL1'] = 'http://192.168.2.19:9014'; //李勇本地
+
+
+      // window.SITE_CONFIG['apiURL2'] = 'http://192.168.1.128:9015/witcarbon-gica';
+      window.SITE_CONFIG['apiURL2'] = 'http://gpu.ringzle.com:8082/witcarbon-gica';
+
+
+      // 李勇本机地址
+      //  window.SITE_CONFIG['apiURL'] = 'http://192.168.1.19:9011/witcarbon-admin';
+      //  window.SITE_CONFIG['apiURL1'] = 'http://192.168.1.19:9014/witcarbon-iot';
+      // WebSocket地址
+      window.SITE_CONFIG['socketURL'] = 'ws://https://s.ringzle.com/witcarbon-admin/websocket';
+    </script>
+    <% } %>
+      <!-- 集成测试环境 -->
+      <% if (process.env.VUE_APP_NODE_ENV==='prod:sit' ) { %>
+        <script>
+          window.SITE_CONFIG['apiURL'] = 'https://glt.ringzle.com:8033/witcarbon-admin';
+          // WebSocket地址
+          window.SITE_CONFIG['socketURL'] = 'ws://gpu.ringzle.com/witcarbon-admin/websocket';
+        </script>
+        <% } %>
+          <!-- 验收测试环境 -->
+          <% if (process.env.VUE_APP_NODE_ENV==='prod:uat' ) { %>
+            <script>
+              window.SITE_CONFIG['apiURL'] = 'https://glt.ringzle.com:8033/witcarbon-admin';
+              // WebSocket地址
+              window.SITE_CONFIG['socketURL'] = 'ws://s.ringzle.com/witcarbon-admin/websocket';
+            </script>
+            <% } %>
+              <!-- 生产环境 -->
+              <% if (process.env.VUE_APP_NODE_ENV==='prod' ) { %>
+                <script>
+                  window.SITE_CONFIG['apiURL'] = '../witcarbon-admin';
+                  window.SITE_CONFIG['apiURL1'] = '../iot';
+                  window.SITE_CONFIG['apiURL2'] = '../witcarbon-gica';
+                  // WebSocket地址
+                  window.SITE_CONFIG['socketURL'] = 'ws://localhost:8080/witcarbon-admin/websocket';
+                </script>
+                <% } %>
+</head>
+
+<body>
+  <div id="app"></div>
+  <script type="text/javascript" src="https://api.map.baidu.com/api?v=1.0&type=webgl&ak=tHCKI9rDMnTgxHPYsk95hGExEbYqkcIn"></script>
+</body>
+
+</html>

+ 11 - 0
sh.exe.stackdump

@@ -0,0 +1,11 @@
+Stack trace:
+Frame        Function    Args
+000FFFFB540  00180064365 (00180275F10, 00180266FD1, 000FFFFCA60, 000FFFFBA20)
+000FFFFBA70  001800499D2 (00100002000, 0018034EBC0, 00000000001, 00000000170)
+000FFFFCA80  00180049A11 (00000000001, 0018034EED0, 000FFFFCA60, 00000000008)
+000FFFFCB10  0018005CFCD (00000000000, 000FFFFCC40, 001800DC3EF, 00000000000)
+000FFFFCBF0  0018005D12B (000FFFFCDF0, 00000000000, FFFFFFFFFFFFFFD7, 00000000000)
+000FFFFCCE0  0018004A1A8 (00000000000, 00000000000, 00000000000, 00000000000)
+000FFFFCDA0  00180048A2A (00000000000, 00000000000, 00000000000, 00000000000)
+000FFFFCE50  00180048AEC (00000000000, 00000000000, 00000000000, 00000000000)
+End of stack trace

+ 597 - 0
src/App.vue

@@ -0,0 +1,597 @@
+<template>
+  <transition name="el-fade-in-linear">
+    <router-view />
+  </transition>
+</template>
+<style lang='scss'>
+.el-drawer__wrapper .el-drawer__body{
+    overflow-y: auto !important;
+  }
+* {
+  margin: 0;
+  padding: 0;
+}
+html,
+body {
+  height: 100%;
+  width: 100%;
+}
+p {
+  margin: 0;
+  padding: 0;
+}
+body {
+  overflow: hidden;
+}
+.position {
+  display: flex;
+  margin: 10px 0;
+  color: #999 !important;
+  .el-breadcrumb__inner {
+    color: #999 !important;
+  }
+}
+.nodata {
+  padding: 50px 0 0;
+  text-align: center;
+  display: block;
+  width: 100%;
+  color: #999;
+  font-size: 14px;
+}
+.look {
+  display: flex;
+  width: 100%;
+  height: 80px;
+  margin-bottom: 20px;
+  .l-look {
+    background: #ffffff;
+    box-shadow: 0px 0px 10px 2px rgba(153, 153, 153, 0.2);
+    width: 440px;
+    margin-right: 10px;
+    .meterItem {
+      height: 80px;
+      text-align: center;
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      flex-direction: column;
+      .num {
+        color: #2e69eb;
+        font-size: 24px;
+      }
+      .text {
+        margin-top: 5px;
+        color: #0c1935;
+        font-size: 16px;
+      }
+    }
+  }
+  .r-look {
+    background: #ffffff;
+    box-shadow: 0px 0px 10px 2px rgba(153, 153, 153, 0.2);
+    flex: 1;
+    .img {
+      height: 80px;
+      line-height: 80px;
+      text-align: center;
+    }
+    .meterItem {
+      margin-left: 5px;
+      height: 80px;
+      text-align: center;
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      flex-direction: column;
+      .num {
+        color: #2e69eb;
+        font-size: 24px;
+      }
+      .text {
+        margin-top: 5px;
+        color: #0c1935;
+        font-size: 16px;
+      }
+    }
+  }
+}
+.page_info {
+  height: calc(100% - 0.8rem);
+  width: 100%;
+  padding: 0.25rem 0.25rem 0px 0.25rem;
+
+  .count_pannel {
+    display: flex;
+    width: 100%;
+    height: 1rem;
+    margin-bottom: 0.25rem;
+
+    .pannel_info {
+      flex: 1;
+      display: flex;
+      align-items: center;
+      justify-content: space-around;
+      background: #ffffff;
+      box-shadow: 0px 0px 10px 2px rgba(153, 153, 153, 0.2);
+      .pannel_item {
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        .img {
+          margin-right: 0.075rem;
+        }
+        .count_info {
+          display: flex;
+          flex-direction: column;
+          align-items: center;
+          justify-content: center;
+          .count_up {
+            color: #2e69eb;
+            font-size: 0.3rem;
+            font-weight: 600;
+          }
+          .text {
+            margin-top: 0.075rem;
+            color: #0c1935;
+            font-size: 0.2rem;
+          }
+        }
+      }
+    }
+  }
+
+  .card_info {
+    height: calc(100% - 1.25rem);
+    background: #ffffff;
+    box-shadow: 0px 0px 10px 2px rgba(153, 153, 153, 0.2);
+    .function_btn {
+      padding: 0.25rem;
+    }
+    .info_list {
+      height: calc(100% - 1.75rem);
+      // margin: 0 0.25rem;
+      overflow: hidden;
+      .el-tag--small {
+        font-size: 0.15rem;
+        height: 0.3rem;
+        padding: 0 0.1rem;
+        line-height: 0.3rem;
+      }
+    }
+  }
+}
+.search_pannel {
+  height: 1rem;
+  background: #ffffff;
+  box-shadow: 0px 0px 10px 2px rgba(153, 153, 153, 0.2);
+  margin-bottom: 0.25rem;
+  padding: 0.25rem;
+  display: flex;
+  align-items: center;
+
+  .el-form {
+    width: 100%;
+    display: flex;
+    .el-form-item {
+      display: flex;
+      align-items: center;
+      margin-bottom: 0;
+      margin-right: 0.15rem;
+      .el-form-item__label {
+        color: #0c1935;
+        line-height: 0.5rem;
+        padding: 0 0.15rem 0 0;
+        font-size: 0.175rem;
+      }
+      .el-form-item__content {
+        line-height: 0.5rem;
+      }
+      .el-input__inner {
+        height: 0.5rem;
+        line-height: 0.5rem;
+      }
+      .el-input__icon {
+        line-height: 0.5rem;
+      }
+      .el-range-editor {
+        width: 3rem;
+        padding: 0.0375rem 0.0625rem;
+        .el-range__icon,
+        .el-range__close-icon {
+          display: none;
+        }
+        .el-range-input {
+          flex: 1;
+          font-size: 0.175rem;
+        }
+        .el-range-separator {
+          width: 0.325rem;
+          line-height: 0.4rem;
+          padding: 0 0.0625rem;
+          font-size: 0.175rem;
+          color: #999;
+        }
+      }
+      .el-input {
+        width: 2.5rem;
+        font-size: 0.175rem;
+        .el-input__clear {
+          font-size: 0.175rem;
+        }
+      }
+      .el-select {
+        width: 2.5rem;
+        font-size: 0.175rem;
+        .el-select__caret {
+          font-size: 0.175rem;
+        }
+      }
+    }
+  }
+  .search_btn {
+    flex: 1;
+    display: flex;
+  }
+}
+.el-button {
+  font-size: 0.175rem !important;
+  //padding: 0.1rem 0.25rem !important;
+}
+.iconfont {
+  font-size: 0.2rem !important;
+}
+.btn_color {
+  color: #2e69eb !important;
+  border: 1px solid #2e69eb !important;
+}
+.btn_color.is-plain:active {
+  background: #fff !important;
+  outline: 0 !important;
+}
+.btn_color.is-active,
+.btn_color.is-plain:active {
+  color: #3a8ee6 !important;
+  border-color: #3a8ee6 !important;
+}
+.btn_color.is-plain:focus,
+.btn_color.is-plain:hover {
+  background: #fff !important;
+  border-color: #409eff !important;
+  color: #409eff !important;
+}
+
+a:focus,
+a:hover {
+  text-decoration: none !important;
+}
+.el-link {
+  font-size: 0.175rem !important;
+}
+.el-table {
+  font-size: 0.175rem !important;
+  th {
+    padding: 0.125rem 0 !important;
+  }
+  td {
+    padding: 0.25rem 0 !important;
+  }
+  .cell {
+    line-height: 0.3rem !important;
+  }
+  &::before {
+    height: 0 !important;
+  }
+  .caret-wrapper {
+    height: 0.3rem !important;
+    .sort-caret.ascending {
+      top: 0px;
+    }
+    .sort-caret.descending {
+      bottom: 2px;
+    }
+  }
+}
+.el-pagination {
+  margin-top: 0.25rem !important;
+  text-align: center !important;
+  padding: 0 !important;
+  button,
+  span:not([class*="suffix"]) {
+    font-size: 0.1625rem !important;
+    height: 0.35rem !important;
+    line-height: 0.35rem !important;
+  }
+  .el-pagination__sizes {
+    .el-input {
+      width: 1.25rem !important;
+    }
+    .el-input__inner {
+      font-size: 0.175rem !important;
+      height: 0.35rem !important;
+      line-height: 0.35rem !important;
+      padding-left: 0.1rem !important;
+      padding-right: 0.3125rem !important;
+    }
+    .el-select__caret {
+      font-size: 0.175rem !important;
+      line-height: 0.35rem !important;
+    }
+  }
+  .el-pager li {
+    font-size: 0.1625rem !important;
+    height: 0.35rem !important;
+    line-height: 0.35rem !important;
+  }
+  .el-pagination__jump {
+    .el-pagination__editor {
+      font-size: 0.175rem !important;
+      height: 0.35rem !important;
+      line-height: 0.35rem !important;
+      .el-input__inner {
+        height: 0.35rem !important;
+        line-height: 0.35rem !important;
+      }
+    }
+  }
+}
+.el-drawer__wrapper {
+  position: fixed;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  overflow: hidden;
+  margin: 0;
+  .el-drawer__body {
+    overflow: hidden;
+    .drawer_info {
+      width: 100%;
+      height: 100%;
+      overflow: hidden;
+      .sub_title {
+        margin: 0 0.25rem 0.375rem 0;
+        font-size: 14px;
+        font-weight: 400;
+        color: #0c1935;
+        padding-left: 0.125rem;
+        position: relative;
+        line-height: 14px;
+        &:before {
+          position: absolute;
+          top: 0;
+          left: 0;
+          height: 100%;
+          display: block;
+          content: "";
+          border-left: 0.05rem solid #2681f3;
+        }
+      }
+      .drawer_list {
+        max-height: calc(100% - 2.075rem);
+        position: relative;
+        overflow-y: auto;
+        overflow-x: hidden;
+        padding: 0 0.25rem;
+
+        .el-form-item {
+          margin-bottom: 0.25rem;
+          margin-right: 0.125rem;
+          display: flex;
+          .el-form-item__label {
+            line-height: 0.5rem;
+            width: 1.25rem;
+            font-size: 0.175rem;
+            padding: 0 0.15rem 0 0;
+          }
+          .el-form-item__content {
+            flex: 1;
+            font-size: 0.175rem;
+            line-height: 0.5rem;
+          }
+        }
+
+        .special_form_item {
+          .el-form-item__label {
+            line-height: 0.25rem;
+          }
+        }
+
+        .mb15 {
+          margin-bottom: 0.25rem;
+          color: #0c1935;
+          font-size: 0.175rem;
+          span {
+            color: #697081;
+          }
+        }
+        .img_col {
+          display: flex;
+          img {
+            margin-right: 0.125rem;
+            width: 1.25rem;
+            height: 1.25rem;
+            vertical-align: top;
+            cursor: pointer;
+          }
+        }
+      }
+      .company.drawer_list {
+        .el-form-item {
+          .el-form-item__label {
+            width: 2.5rem;
+          }
+        }
+      }
+        .mainArea.drawer_list {
+        .el-form-item {
+          .el-form-item__label {
+            width: 1.9rem;
+          }
+        }
+      }
+      
+
+      .el-input__inner {
+        height: 0.5rem;
+        line-height: 0.5rem;
+      }
+      .el-input__icon {
+        line-height: 0.5rem;
+      }
+      .el-range-editor {
+        width: 100%;
+        padding: 0.0375rem 0.0625rem;
+        .el-range__icon,
+        .el-range__close-icon {
+          display: none;
+        }
+        .el-range-input {
+          flex: 1;
+          font-size: 0.175rem;
+        }
+        .el-range-separator {
+          width: 0.325rem;
+          line-height: 0.4rem;
+          padding: 0 0.0625rem;
+          font-size: 0.175rem;
+          color: #999;
+        }
+      }
+      .el-input {
+        width: 100%;
+        font-size: 0.175rem;
+        .el-input__clear {
+          font-size: 0.175rem;
+        }
+      }
+      .el-cascader {
+        font-size: 0.175rem;
+        line-height: 0.5rem;
+      }
+      .el-select {
+        width: 100%;
+        font-size: 0.175rem;
+        .el-select__caret {
+          font-size: 0.175rem;
+        }
+        .el-input__inner {
+          padding: 0 0.375rem 0 0.1875rem;
+        }
+      }
+      .el-textarea {
+        font-size: 0.175rem;
+      }
+      .el-radio__label {
+        font-size: 0.175rem;
+        padding-left: 0.125rem;
+      }
+      .el-radio__inner {
+        width: 0.175rem;
+        height: 0.175rem;
+      }
+      .save_btn {
+        text-align: center;
+        margin: 0.25rem 0;
+        .el-button {
+          font-size: 0.175rem;
+          padding: 0.1rem 0.25rem;
+        }
+      }
+      .img_preview {
+        position: fixed;
+        top: 0;
+        left: 0;
+        width: 100%;
+        height: 100%;
+        background: #000;
+        opacity: 0.5;
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        img {
+          width: 40%;
+        }
+      }
+    }
+  }
+}
+
+.el-progress-bar {
+  padding-right: 100px !important;
+  margin-right: -100px !important;
+}
+
+.el-upload-dragger {
+  width: 220px;
+  height: 130px;
+}
+.el-dropdown-menu__item:focus,
+.el-dropdown-menu__item:not(.is-disabled):hover {
+  color: #2e69eb !important;
+}
+input::-webkit-outer-spin-button,
+input::-webkit-inner-spin-button {
+  -webkit-appearance: none;
+}
+input[type="number"] {
+  -moz-appearance: textfield;
+}
+.input_suffix {
+  position: absolute;
+  right: 0.125rem;
+  color: #c0c4cc;
+}
+
+.drawer_title {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  height: 0.8rem;
+  font-size: 0.2rem;
+  font-weight: 600;
+  border-bottom: 1px solid #d8d8d8;
+  padding-left: 0.25rem;
+  margin: 0 0 0.375rem 0;
+  color: #0c1935;
+}
+.icon-export {
+  margin-right: 4px;
+}
+.icon-feeInfo,
+.icon-open,
+.icon-forbidden,
+.icon-hasten {
+  font-style: normal !important;
+  margin-right: 0.075rem;
+}
+//碳资产 填报数据tab 字体设置
+.cfilldata .el-tabs__item{
+  font-size: 12px!important;
+}
+.el-tabs__content{height:100%}
+.cfilldata .el-tabs__content{
+  height: 400px;
+  flex:1
+}
+.seasonal .el-tabs__content{height:100%}
+
+.el-card.is-always-shadow,.current_position,.aui-sidebar{
+  box-shadow: none !important;
+}
+.cell .el-tag{
+  background-color: #F2F8FF !important;
+  border: none;
+}
+</style>
+<style>
+.app-container{
+  padding: 0 !important;
+  margin: 20px;
+  min-height: calc(100% - 88px);
+  background: #FFFFFF;
+}
+.el-card{
+  border: none !important;
+}
+</style>

+ 59 - 0
src/api/login.js

@@ -0,0 +1,59 @@
+import request from '@/utils/request2'
+
+// 登录方法
+export function login(username, password, code, uuid) {
+  const data = {
+    username,
+    password,
+    code,
+    uuid
+  }
+  return request({
+    url: '/login',
+    headers: {
+      isToken: false
+    },
+    method: 'post',
+    data: data
+  })
+}
+
+// 注册方法
+export function register(data) {
+  return request({
+    url: '/register',
+    headers: {
+      isToken: false
+    },
+    method: 'post',
+    data: data
+  })
+}
+
+// 获取用户详细信息
+export function getInfo() {
+  return request({
+    url: '/getInfo',
+    method: 'get'
+  })
+}
+
+// 退出方法
+export function logout() {
+  return request({
+    url: '/logout',
+    method: 'post'
+  })
+}
+
+// 获取验证码
+export function getCodeImg() {
+  return request({
+    url: '/captchaImage',
+    headers: {
+      isToken: false
+    },
+    method: 'get',
+    timeout: 20000
+  })
+}

+ 72 - 0
src/api/system/config.js

@@ -0,0 +1,72 @@
+import request from '@/utils/request2'
+
+// 查询参数列表
+export function listConfig(query) {
+  return request({
+    url: '/system/config/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询参数详细
+export function getConfig(configId) {
+  return request({
+    url: '/system/config/' + configId,
+    method: 'get'
+  })
+}
+
+// 根据参数键名查询参数值
+export function getConfigKey(configKey) {
+  return request({
+    url: '/system/config/configKey/' + configKey,
+    method: 'get'
+  })
+}
+
+// 新增参数配置
+export function addConfig(data) {
+  return request({
+    url: '/system/config',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改参数配置
+export function updateConfig(data) {
+  return request({
+    url: '/system/config',
+    method: 'put',
+    data: data
+  })
+}
+
+// 修改参数配置
+export function updateConfigByKey(key, value) {
+  return request({
+    url: '/system/config/updateByKey',
+    method: 'put',
+    data: {
+      configKey: key,
+      configValue: value
+    }
+  })
+}
+
+// 删除参数配置
+export function delConfig(configId) {
+  return request({
+    url: '/system/config/' + configId,
+    method: 'delete'
+  })
+}
+
+// 刷新参数缓存
+export function refreshCache() {
+  return request({
+    url: '/system/config/refreshCache',
+    method: 'delete'
+  })
+}

+ 52 - 0
src/api/system/dept.js

@@ -0,0 +1,52 @@
+import request from '@/utils/request2'
+
+// 查询部门列表
+export function listDept(query) {
+  return request({
+    url: '/system/dept/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询部门列表(排除节点)
+export function listDeptExcludeChild(deptId) {
+  return request({
+    url: '/system/dept/list/exclude/' + deptId,
+    method: 'get'
+  })
+}
+
+// 查询部门详细
+export function getDept(deptId) {
+  return request({
+    url: '/system/dept/' + deptId,
+    method: 'get'
+  })
+}
+
+// 新增部门
+export function addDept(data) {
+  return request({
+    url: '/system/dept',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改部门
+export function updateDept(data) {
+  return request({
+    url: '/system/dept',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除部门
+export function delDept(deptId) {
+  return request({
+    url: '/system/dept/' + deptId,
+    method: 'delete'
+  })
+}

+ 52 - 0
src/api/system/dict/data.js

@@ -0,0 +1,52 @@
+import request from '@/utils/request2'
+
+// 查询字典数据列表
+export function listData(query) {
+  return request({
+    url: '/system/dict/data/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询字典数据详细
+export function getData(dictCode) {
+  return request({
+    url: '/system/dict/data/' + dictCode,
+    method: 'get'
+  })
+}
+
+// 根据字典类型查询字典数据信息
+export function getDicts(dictType) {
+  return request({
+    url: '/sys/dict/data/getListByType/' + dictType,
+    method: 'get'
+  })
+}
+
+// 新增字典数据
+export function addData(data) {
+  return request({
+    url: '/system/dict/data',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改字典数据
+export function updateData(data) {
+  return request({
+    url: '/system/dict/data',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除字典数据
+export function delData(dictCode) {
+  return request({
+    url: '/system/dict/data/' + dictCode,
+    method: 'delete'
+  })
+}

+ 60 - 0
src/api/system/dict/type.js

@@ -0,0 +1,60 @@
+import request from '@/utils/request2'
+
+// 查询字典类型列表
+export function listType(query) {
+  return request({
+    url: '/system/dict/type/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询字典类型详细
+export function getType(dictId) {
+  return request({
+    url: '/system/dict/type/' + dictId,
+    method: 'get'
+  })
+}
+
+// 新增字典类型
+export function addType(data) {
+  return request({
+    url: '/system/dict/type',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改字典类型
+export function updateType(data) {
+  return request({
+    url: '/system/dict/type',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除字典类型
+export function delType(dictId) {
+  return request({
+    url: '/system/dict/type/' + dictId,
+    method: 'delete'
+  })
+}
+
+// 刷新字典缓存
+export function refreshCache() {
+  return request({
+    url: '/system/dict/type/refreshCache',
+    method: 'delete'
+  })
+}
+
+// 获取字典选择框列表
+export function optionselect() {
+  return request({
+    url: '/system/dict/type/optionselect',
+    method: 'get'
+  })
+}

+ 60 - 0
src/api/system/menu.js

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

+ 44 - 0
src/api/system/notice.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request2'
+
+// 查询公告列表
+export function listNotice(query) {
+  return request({
+    url: '/system/notice/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询公告详细
+export function getNotice(noticeId) {
+  return request({
+    url: '/system/notice/' + noticeId,
+    method: 'get'
+  })
+}
+
+// 新增公告
+export function addNotice(data) {
+  return request({
+    url: '/system/notice',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改公告
+export function updateNotice(data) {
+  return request({
+    url: '/system/notice',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除公告
+export function delNotice(noticeId) {
+  return request({
+    url: '/system/notice/' + noticeId,
+    method: 'delete'
+  })
+}

+ 27 - 0
src/api/system/oss.js

@@ -0,0 +1,27 @@
+import request from '@/utils/request2'
+
+// 查询OSS对象存储列表
+export function listOss(query) {
+  return request({
+    url: '/system/oss/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询OSS对象基于id串
+export function listByIds(ossId) {
+  return request({
+    url: '/system/oss/listByIds/' + ossId,
+    method: 'get'
+  })
+}
+
+// 删除OSS对象存储
+export function delOss(ossId) {
+  return request({
+    url: '/system/oss/' + ossId,
+    method: 'delete'
+  })
+}
+

+ 58 - 0
src/api/system/ossConfig.js

@@ -0,0 +1,58 @@
+import request from '@/utils/request2'
+
+// 查询对象存储配置列表
+export function listOssConfig(query) {
+  return request({
+    url: '/system/oss/config/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询对象存储配置详细
+export function getOssConfig(ossConfigId) {
+  return request({
+    url: '/system/oss/config/' + ossConfigId,
+    method: 'get'
+  })
+}
+
+// 新增对象存储配置
+export function addOssConfig(data) {
+  return request({
+    url: '/system/oss/config',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改对象存储配置
+export function updateOssConfig(data) {
+  return request({
+    url: '/system/oss/config',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除对象存储配置
+export function delOssConfig(ossConfigId) {
+  return request({
+    url: '/system/oss/config/' + ossConfigId,
+    method: 'delete'
+  })
+}
+
+// 对象存储状态修改
+export function changeOssConfigStatus(ossConfigId, status, configKey) {
+  const data = {
+    ossConfigId,
+    status,
+    configKey
+  }
+  return request({
+    url: '/system/oss/config/changeStatus',
+    method: 'put',
+    data: data
+  })
+}

+ 44 - 0
src/api/system/post.js

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

+ 119 - 0
src/api/system/role.js

@@ -0,0 +1,119 @@
+import request from '@/utils/request2'
+
+// 查询角色列表
+export function listRole(query) {
+  return request({
+    url: '/system/role/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询角色详细
+export function getRole(roleId) {
+  return request({
+    url: '/system/role/' + roleId,
+    method: 'get'
+  })
+}
+
+// 新增角色
+export function addRole(data) {
+  return request({
+    url: '/system/role',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改角色
+export function updateRole(data) {
+  return request({
+    url: '/system/role',
+    method: 'put',
+    data: data
+  })
+}
+
+// 角色数据权限
+export function dataScope(data) {
+  return request({
+    url: '/system/role/dataScope',
+    method: 'put',
+    data: data
+  })
+}
+
+// 角色状态修改
+export function changeRoleStatus(roleId, status) {
+  const data = {
+    roleId,
+    status
+  }
+  return request({
+    url: '/system/role/changeStatus',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除角色
+export function delRole(roleId) {
+  return request({
+    url: '/system/role/' + roleId,
+    method: 'delete'
+  })
+}
+
+// 查询角色已授权用户列表
+export function allocatedUserList(query) {
+  return request({
+    url: '/system/role/authUser/allocatedList',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询角色未授权用户列表
+export function unallocatedUserList(query) {
+  return request({
+    url: '/system/role/authUser/unallocatedList',
+    method: 'get',
+    params: query
+  })
+}
+
+// 取消用户授权角色
+export function authUserCancel(data) {
+  return request({
+    url: '/system/role/authUser/cancel',
+    method: 'put',
+    data: data
+  })
+}
+
+// 批量取消用户授权角色
+export function authUserCancelAll(data) {
+  return request({
+    url: '/system/role/authUser/cancelAll',
+    method: 'put',
+    params: data
+  })
+}
+
+// 授权用户选择
+export function authUserSelectAll(data) {
+  return request({
+    url: '/system/role/authUser/selectAll',
+    method: 'put',
+    params: data
+  })
+}
+
+// 根据角色ID查询部门树结构
+export function deptTreeSelect(roleId) {
+  return request({
+    url: '/system/role/deptTree/' + roleId,
+    method: 'get'
+  })
+}

+ 135 - 0
src/api/system/user.js

@@ -0,0 +1,135 @@
+import request from '@/utils/request2'
+import { parseStrEmpty } from "@/utils/ruoyi";
+
+// 查询用户列表
+export function listUser(query) {
+  return request({
+    url: '/system/user/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询用户详细
+export function getUser(userId) {
+  return request({
+    url: '/system/user/' + parseStrEmpty(userId),
+    method: 'get'
+  })
+}
+
+// 新增用户
+export function addUser(data) {
+  return request({
+    url: '/system/user',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改用户
+export function updateUser(data) {
+  return request({
+    url: '/system/user',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除用户
+export function delUser(userId) {
+  return request({
+    url: '/system/user/' + userId,
+    method: 'delete'
+  })
+}
+
+// 用户密码重置
+export function resetUserPwd(userId, password) {
+  const data = {
+    userId,
+    password
+  }
+  return request({
+    url: '/system/user/resetPwd',
+    method: 'put',
+    data: data
+  })
+}
+
+// 用户状态修改
+export function changeUserStatus(userId, status) {
+  const data = {
+    userId,
+    status
+  }
+  return request({
+    url: '/system/user/changeStatus',
+    method: 'put',
+    data: data
+  })
+}
+
+// 查询用户个人信息
+export function getUserProfile() {
+  return request({
+    url: '/system/user/profile',
+    method: 'get'
+  })
+}
+
+// 修改用户个人信息
+export function updateUserProfile(data) {
+  return request({
+    url: '/system/user/profile',
+    method: 'put',
+    data: data
+  })
+}
+
+// 用户密码重置
+export function updateUserPwd(oldPassword, newPassword) {
+  const data = {
+    oldPassword,
+    newPassword
+  }
+  return request({
+    url: '/system/user/profile/updatePwd',
+    method: 'put',
+    params: data
+  })
+}
+
+// 用户头像上传
+export function uploadAvatar(data) {
+  return request({
+    url: '/system/user/profile/avatar',
+    method: 'post',
+    data: data
+  })
+}
+
+// 查询授权角色
+export function getAuthRole(userId) {
+  return request({
+    url: '/system/user/authRole/' + userId,
+    method: 'get'
+  })
+}
+
+// 保存授权角色
+export function updateAuthRole(data) {
+  return request({
+    url: '/system/user/authRole',
+    method: 'put',
+    params: data
+  })
+}
+
+// 查询部门下拉树结构
+export function deptTreeSelect() {
+  return request({
+    url: '/system/user/deptTree',
+    method: 'get'
+  })
+}

+ 51 - 0
src/assets/iconfont/iconfont.css

@@ -0,0 +1,51 @@
+@font-face {
+  font-family: "iconfont"; /* Project id 3560744 */
+  src: url('iconfont.woff2?t=1669367281073') format('woff2'),
+       url('iconfont.woff?t=1669367281073') format('woff'),
+       url('iconfont.ttf?t=1669367281073') format('truetype');
+}
+
+.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-hasten:before {
+  content: "\e724";
+}
+
+.icon-open:before {
+  content: "\e641";
+}
+
+.icon-forbidden:before {
+  content: "\e615";
+}
+
+.icon-project:before {
+  content: "\e60f";
+}
+
+.icon-floor:before {
+  content: "\e642";
+}
+
+.icon-company:before {
+  content: "\e8c6";
+}
+
+.icon-feeInfo:before {
+  content: "\e625";
+}
+
+.icon-build:before {
+  content: "\e60e";
+}
+
+.icon-export:before {
+  content: "\e612";
+}
+

File diff suppressed because it is too large
+ 1 - 0
src/assets/iconfont/iconfont.js


+ 72 - 0
src/assets/iconfont/iconfont.json

@@ -0,0 +1,72 @@
+{
+  "id": "3560744",
+  "name": "图标库",
+  "font_family": "iconfont",
+  "css_prefix_text": "icon-",
+  "description": "",
+  "glyphs": [
+    {
+      "icon_id": "7579720",
+      "name": "催收",
+      "font_class": "hasten",
+      "unicode": "e724",
+      "unicode_decimal": 59172
+    },
+    {
+      "icon_id": "1761482",
+      "name": "启用",
+      "font_class": "open",
+      "unicode": "e641",
+      "unicode_decimal": 58945
+    },
+    {
+      "icon_id": "4942647",
+      "name": "禁用",
+      "font_class": "forbidden",
+      "unicode": "e615",
+      "unicode_decimal": 58901
+    },
+    {
+      "icon_id": "1200193",
+      "name": "项目消息",
+      "font_class": "project",
+      "unicode": "e60f",
+      "unicode_decimal": 58895
+    },
+    {
+      "icon_id": "10559070",
+      "name": "楼层",
+      "font_class": "floor",
+      "unicode": "e642",
+      "unicode_decimal": 58946
+    },
+    {
+      "icon_id": "11372774",
+      "name": "首页",
+      "font_class": "company",
+      "unicode": "e8c6",
+      "unicode_decimal": 59590
+    },
+    {
+      "icon_id": "16290373",
+      "name": "缴费设置",
+      "font_class": "feeInfo",
+      "unicode": "e625",
+      "unicode_decimal": 58917
+    },
+    {
+      "icon_id": "17590350",
+      "name": "楼栋管理",
+      "font_class": "build",
+      "unicode": "e60e",
+      "unicode_decimal": 58894
+    },
+    {
+      "icon_id": "20104475",
+      "name": "导出",
+      "font_class": "export",
+      "unicode": "e612",
+      "unicode_decimal": 58898
+    }
+  ]
+}

BIN
src/assets/iconfont/iconfont.ttf


BIN
src/assets/iconfont/iconfont.woff


BIN
src/assets/iconfont/iconfont.woff2


BIN
src/assets/images/agent/arrow_left.png


BIN
src/assets/images/agent/arrow_right_two.png


BIN
src/assets/images/agent/avatar.png


BIN
src/assets/images/agent/clear_mini.png


BIN
src/assets/images/agent/close_mini.png


+ 0 - 0
src/assets/images/agent/copy_mini.png


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