diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..179358c --- /dev/null +++ b/.env.development @@ -0,0 +1,20 @@ +### + # @Description: + # @Autor: 飘泊客 + # @Date: 2023-02-13 18:25:04 + # @LastEditors: 飘泊客 + # @LastEditTime: 2023-06-21 15:15:11 +### +ENV = 'development' + +# 接口地址 http://8.130.96.163:8899 +VUE_APP_BASE_API = 'http://8.130.96.163:8899' +#VUE_APP_BASE_API = 'http://172.18.0.225:8899xy' +#VUE_APP_BASE_API = 'http://172.18.0.228:8899ts' +#VUE_APP_BASE_API = 'http://172.18.1.8:8899jt' +# VUE_APP_BASE_API = 'http://8.130.96.163:8899' +VUE_APP_BASE_IMG = 'https://baiyee.vip' +VUE_APP_WS_API = 'wss://baiyee.vip' + +# 是否启用 babel-plugin-dynamic-import-node插件 +VUE_CLI_BABEL_TRANSPILE_MODULES = true diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..a827e24 --- /dev/null +++ b/.env.production @@ -0,0 +1,15 @@ +### + # @Description: + # @Autor: 飘泊客 + # @Date: 2023-05-05 16:18:03 + # @LastEditors: 飘泊客 + # @LastEditTime: 2023-06-05 16:05:04 +### +ENV = 'production' + +# 如果使用 Nginx 代理后端接口,那么此处需要改为 '/',文件查看 Docker 部署篇,Nginx 配置 +# 接口地址,注意协议,如果你没有配置 ssl,需要将 https 改为 http +VUE_APP_BASE_API = 'https://baiyee.vip' +VUE_APP_BASE_IMG = 'https://baiyee.vip' +# 如果接口是 http 形式, wss 需要改为 ws +VUE_APP_WS_API = 'wss://baiyee.vip' \ No newline at end of file diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..e6529fc --- /dev/null +++ b/.eslintignore @@ -0,0 +1,4 @@ +build/*.js +src/assets +public +dist diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..c977505 --- /dev/null +++ b/.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'] + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..78a752d --- /dev/null +++ b/.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 diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..f4be7a0 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,5 @@ +language: node_js +node_js: 10 +script: npm run test +notifications: + email: false diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..78a36cb --- /dev/null +++ b/LICENSE @@ -0,0 +1,191 @@ +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and +distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright +owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities +that control, are controlled by, or are under common control with that entity. +For the purposes of this definition, "control" means (i) the power, direct or +indirect, to cause the direction or management of such entity, whether by +contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising +permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including +but not limited to software source code, documentation source, and configuration +files. + +"Object" form shall mean any form resulting from mechanical transformation or +translation of a Source form, including but not limited to compiled object code, +generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made +available under the License, as indicated by a copyright notice that is included +in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that +is based on (or derived from) the Work and for which the editorial revisions, +annotations, elaborations, or other modifications represent, as a whole, an +original work of authorship. For the purposes of this License, Derivative Works +shall not include works that remain separable from, or merely link (or bind by +name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version +of the Work and any modifications or additions to that Work or Derivative Works +thereof, that is intentionally submitted to Licensor for inclusion in the Work +by the copyright owner or by an individual or Legal Entity authorized to submit +on behalf of the copyright owner. For the purposes of this definition, +"submitted" means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control systems, and +issue tracking systems that are managed by, or on behalf of, the Licensor for +the purpose of discussing and improving the Work, but excluding communication +that is conspicuously marked or otherwise designated in writing by the copyright +owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf +of whom a Contribution has been received by Licensor and subsequently +incorporated within the Work. + +2. Grant of Copyright License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the Work and such +Derivative Works in Source or Object form. + +3. Grant of Patent License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable (except as stated in this section) patent license to make, have +made, use, offer to sell, sell, import, and otherwise transfer the Work, where +such license applies only to those patent claims licensable by such Contributor +that are necessarily infringed by their Contribution(s) alone or by combination +of their Contribution(s) with the Work to which such Contribution(s) was +submitted. If You institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Work or a +Contribution incorporated within the Work constitutes direct or contributory +patent infringement, then any patent licenses granted to You under this License +for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. + +You may reproduce and distribute copies of the Work or Derivative Works thereof +in any medium, with or without modifications, and in Source or Object form, +provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of +this License; and +You must cause any modified files to carry prominent notices stating that You +changed the files; and +You must retain, in the Source form of any Derivative Works that You distribute, +all copyright, patent, trademark, and attribution notices from the Source form +of the Work, excluding those notices that do not pertain to any part of the +Derivative Works; and +If the Work includes a "NOTICE" text file as part of its distribution, then any +Derivative Works that You distribute must include a readable copy of the +attribution notices contained within such NOTICE file, excluding those notices +that do not pertain to any part of the Derivative Works, in at least one of the +following places: within a NOTICE text file distributed as part of the +Derivative Works; within the Source form or documentation, if provided along +with the Derivative Works; or, within a display generated by the Derivative +Works, if and wherever such third-party notices normally appear. The contents of +the NOTICE file are for informational purposes only and do not modify the +License. You may add Your own attribution notices within Derivative Works that +You distribute, alongside or as an addendum to the NOTICE text from the Work, +provided that such additional attribution notices cannot be construed as +modifying the License. +You may add Your own copyright statement to Your modifications and may provide +additional or different license terms and conditions for use, reproduction, or +distribution of Your modifications, or for any such Derivative Works as a whole, +provided Your use, reproduction, and distribution of the Work otherwise complies +with the conditions stated in this License. + +5. Submission of Contributions. + +Unless You explicitly state otherwise, any Contribution intentionally submitted +for inclusion in the Work by You to the Licensor shall be under the terms and +conditions of this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify the terms of +any separate license agreement you may have executed with Licensor regarding +such Contributions. + +6. Trademarks. + +This License does not grant permission to use the trade names, trademarks, +service marks, or product names of the Licensor, except as required for +reasonable and customary use in describing the origin of the Work and +reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. + +Unless required by applicable law or agreed to in writing, Licensor provides the +Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, +including, without limitation, any warranties or conditions of TITLE, +NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are +solely responsible for determining the appropriateness of using or +redistributing the Work and assume any risks associated with Your exercise of +permissions under this License. + +8. Limitation of Liability. + +In no event and under no legal theory, whether in tort (including negligence), +contract, or otherwise, unless required by applicable law (such as deliberate +and grossly negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, incidental, +or consequential damages of any character arising as a result of this License or +out of the use or inability to use the Work (including but not limited to +damages for loss of goodwill, work stoppage, computer failure or malfunction, or +any and all other commercial damages or losses), even if such Contributor has +been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. + +While redistributing the Work or Derivative Works thereof, You may choose to +offer, and charge a fee for, acceptance of support, warranty, indemnity, or +other liability obligations and/or rights consistent with this License. However, +in accepting such obligations, You may act only on Your own behalf and on Your +sole responsibility, not on behalf of any other Contributor, and only if You +agree to indemnify, defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason of your +accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work + +To apply the Apache License to your work, attach the following boilerplate +notice, with the fields enclosed by brackets "{}" replaced with your own +identifying information. (Don't include the brackets!) The text should be +enclosed in the appropriate comment syntax for the file format. We also +recommend that a file or class name and description of purpose be included on +the same "printed page" as the copyright notice for easier identification within +third-party archives. + + Copyright 2019 Zheng Jie + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000..52b0139 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,19 @@ +/* + * @Description: + * @Autor: 飘泊客 + * @Date: 2021-12-15 14:44:41 + * @LastEditors: 飘泊客 + * @LastEditTime: 2022-02-25 17:47:37 + */ +const plugins = ['@vue/babel-plugin-transform-vue-jsx'] +// 生产环境移除console +if (process.env.NODE_ENV === 'production') { + plugins.push('transform-remove-console') +} +module.exports = { + plugins: plugins, + sourceType: 'unambiguous', + presets: [ + '@vue/app' + ] +} diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..143cdc8 --- /dev/null +++ b/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: { + '^@/(.*)$': '/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: '/tests/unit/coverage', + // 'collectCoverage': true, + 'coverageReporters': [ + 'lcov', + 'text-summary' + ], + testURL: 'http://localhost/' +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..571dcce --- /dev/null +++ b/package.json @@ -0,0 +1,125 @@ +{ + "name": "eladmin-web", + "version": "2.6.0", + "description": "太空猫", + "author": "Zheng Jie", + "license": "Apache-2.0", + "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", + "svgo": "svgo -f src/assets/icons/svg --config=src/assets/icons/svgo.yml", + "new": "plop" + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "lint-staged": { + "src/**/*.{js,vue}": [ + "eslint --fix", + "git add" + ] + }, + "repository": { + "type": "git", + "url": "https://github.com/elunez/eladmin-web.git" + }, + "bugs": { + "url": "https://github.com/elunez/eladmin/issues" + }, + "dependencies": { + "@better-scroll/core": "^2.5.0", + "@riophae/vue-treeselect": "0.4.0", + "axios": "^0.21.1", + "clipboard": "2.0.4", + "codemirror": "^5.49.2", + "connect": "3.6.6", + "core-js": "^2.6.12", + "echarts": "^4.2.1", + "echarts-gl": "^1.1.1", + "echarts-wordcloud": "^1.1.3", + "element-ui": "^2.15.7", + "file-saver": "1.3.8", + "fuse.js": "3.4.4", + "js-beautify": "^1.10.2", + "js-cookie": "2.2.0", + "jsencrypt": "^3.0.0-rc.1", + "jssip": "^3.10.0", + "jszip": "^3.7.1", + "mavon-editor": "^2.9.0", + "node-sass": "npm:sass@^1.57.1", + "normalize.css": "7.0.0", + "nprogress": "0.2.0", + "path-to-regexp": "2.4.0", + "qrcode": "^1.5.1", + "qs": "^6.9.1", + "redux": "^4.1.2", + "redux-actions": "^2.6.5", + "screenfull": "4.2.0", + "sortablejs": "1.8.4", + "tapable": "^2.2.1", + "vue": "2.6.10", + "vue-aplayer": "^1.6.1", + "vue-clipboard2": "^0.3.3", + "vue-count-to": "1.0.13", + "vue-cropper": "0.4.9", + "vue-echarts": "^5.0.0-beta.0", + "vue-highlightjs": "^1.3.3", + "vue-image-crop-upload": "^2.5.0", + "vue-router": "3.0.2", + "vue-splitpane": "1.0.4", + "vuedraggable": "2.20.0", + "vuex": "3.1.0", + "wangeditor": "^3.1.1", + "xlsx": "^0.17.3" + }, + "devDependencies": { + "@babel/core": "7.0.0", + "@babel/parser": "^7.7.4", + "@babel/register": "7.0.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "@vue/cli-plugin-babel": "3.5.3", + "@vue/cli-plugin-eslint": "^3.9.1", + "@vue/cli-plugin-unit-jest": "3.5.3", + "@vue/cli-service": "3.5.3", + "@vue/test-utils": "1.0.0-beta.29", + "autoprefixer": "^9.5.1", + "babel-core": "7.0.0-bridge.0", + "babel-eslint": "10.0.1", + "babel-jest": "23.6.0", + "babel-plugin-dynamic-import-node": "2.3.0", + "babel-plugin-transform-remove-console": "^6.9.4", + "chalk": "2.4.2", + "chokidar": "2.1.5", + "connect": "3.6.6", + "eslint": "^5.15.3", + "eslint-plugin-vue": "5.2.2", + "html-webpack-plugin": "3.2.0", + "http-proxy-middleware": "^0.19.1", + "husky": "1.3.1", + "lint-staged": "8.1.5", + "plop": "^2.7.6", + "runjs": "^4.3.2", + "sass": "^1.26.10", + "sass-loader": "^7.1.0", + "script-ext-html-webpack-plugin": "2.1.3", + "script-loader": "0.7.2", + "serve-static": "^1.13.2", + "svg-sprite-loader": "4.1.3", + "svgo": "1.2.0", + "vue-template-compiler": "2.6.10" + }, + "engines": { + "node": ">=8.9", + "npm": ">= 3.0.0" + }, + "browserslist": [ + "> 1%", + "last 2 versions" + ] +} diff --git a/plopfile.js b/plopfile.js new file mode 100644 index 0000000..9f3147e --- /dev/null +++ b/plopfile.js @@ -0,0 +1,7 @@ +const viewGenerator = require('./plop-templates/view/prompt') +const componentGenerator = require('./plop-templates/component/prompt') + +module.exports = function(plop) { + plop.setGenerator('view', viewGenerator) + plop.setGenerator('component', componentGenerator) +} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..961986e --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,5 @@ +module.exports = { + plugins: { + autoprefixer: {} + } +} diff --git a/public/favicon-0.ico b/public/favicon-0.ico new file mode 100644 index 0000000..1b35f15 Binary files /dev/null and b/public/favicon-0.ico differ diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..c015819 Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..d1bb0e0 --- /dev/null +++ b/public/index.html @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + 太空猫电销平台 + + +
+ + + diff --git a/sh.exe.stackdump b/sh.exe.stackdump new file mode 100644 index 0000000..b8c4fb4 --- /dev/null +++ b/sh.exe.stackdump @@ -0,0 +1,11 @@ +Stack trace: +Frame Function Args +00000010002 0018006021E (00180241C10, 001802340B9, 00000010002, 000FFFFBA40) +00000010002 00180048859 (00000000001, 00180328B40, 00000000001, 00180328B40) +00000010002 00180048892 (00000000001, 00180328E50, 00000010002, 00000000008) +00000010002 001800598BC (001800C0322, 00000000000, 00000000000, 00000000000) +000FFFFCCD0 0018005994E (000FFFFCDF0, 000FFFFCCD0, FFFFFFFFFFFFFFD8, 00000000000) +000FFFFCCD0 00180048FE1 (00000000000, 00000000000, 00000000000, 00000000000) +00000000000 00180047963 (00000000000, 00000000000, 00000000000, 00000000000) +000FFFFFFF0 00180047A14 (00000000000, 00000000000, 00000000000, 00000000000) +End of stack trace diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..d460286 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,18 @@ + + + + diff --git a/src/api/agentManagement/index.js b/src/api/agentManagement/index.js new file mode 100644 index 0000000..2373817 --- /dev/null +++ b/src/api/agentManagement/index.js @@ -0,0 +1,42 @@ +/* + * @Author: 代理商管理 + * @Date: 2021-10-21 10:06:23 + * @LastEditTime: 2023-04-24 17:17:56 + * @LastEditors: 飘泊客 + * @Description: In User Settings Edit + * @FilePath: /byhl-taomi/src/api/index.js + */ +import request from '@/utils/request' +// 激活开通 +export function activateAndActivate(data) { + return request({ + url: '/api-management/api/channel/active', + method: 'post', + data + }) +} +// 禁用删除 +export function disableDeletion(data) { + return request({ + url: '/api-management/api/channel/forbidden', + method: 'post', + data + }) +} +// 统计 +export function statistics(params) { + return request({ + url: '/api-management/api/channel/report', + method: 'get', + params + }) +} +// 开通账号数量限制 +export function openAccountNumberLimit(data) { + return request({ + url: '/api-management/api/channel/update', + method: 'post', + data + }) +} + diff --git a/src/api/channelLabel/index.js b/src/api/channelLabel/index.js new file mode 100644 index 0000000..e0a2c4c --- /dev/null +++ b/src/api/channelLabel/index.js @@ -0,0 +1,34 @@ +/* + * @Author: 渠道标签 + * @Date: 2021-10-21 10:06:23 + * @LastEditTime: 2023-06-20 17:17:56 + * @LastEditors: 飘泊客 + * @Description: In User Settings Edit + * @FilePath: /byhl-taomi/src/api/index.js + */ +import request from '@/utils/request' +// 添加渠道 +export function addChannel(data) { + return request({ + url: '/api-source/api/clueRoute/add', + method: 'post', + data + }) +} +// 渠道列表 +export function channelList(params) { + return request({ + url: '/api-source/api/clueRoute/list', + method: 'get', + params + }) +} +// 修改状态 +export function modifyStatu(data) { + return request({ + url: '/api-source/api/clueRoute/update', + method: 'post', + data + }) +} + diff --git a/src/api/customerManagement/index.js b/src/api/customerManagement/index.js new file mode 100644 index 0000000..c05d111 --- /dev/null +++ b/src/api/customerManagement/index.js @@ -0,0 +1,65 @@ +/* + * @Author: 客户管理 + * @Date: 2021-10-21 10:06:23 + * @LastEditTime: 2023-06-15 18:48:17 + * @LastEditors: 飘泊客 + * @Description: In User Settings Edit + * @FilePath: /byhl-taomi/src/api/index.js + */ +import request from '@/utils/request' +// 新增账号 +export function addCount(data) { + return request({ + url: '/api-management/api/custom/add', + method: 'post', + data + }) +} +// 配量 +export function allotmentQuantitya(params) { + return request({ + url: '/api-management/api/custom/assign', + method: 'get', + params + }) +} +// 生链 +export function generateLink(params) { + return request({ + url: '/api-management/api/custom/link', + method: 'get', + params + }) +} +// 查看链接地址 +export function getGenerateLinkUrl(params) { + return request({ + url: '/api-management/api/custom/linkList', + method: 'get', + params + }) +} +// 修改dmp投送数量 +export function modifyDeliveryQuantity(params) { + return request({ + url: '/api-management/api/custom/dmpLimitNum', + method: 'get', + params + }) +} +// 统计 +export function statistics(params) { + return request({ + url: '/api-management/api/custom/report', + method: 'get', + params + }) +} +// 查看akey +export function getAkey(params) { + return request({ + url: '/api-management/api/custom/linkAKey', + method: 'get', + params + }) +} diff --git a/src/api/data.js b/src/api/data.js new file mode 100644 index 0000000..d975d75 --- /dev/null +++ b/src/api/data.js @@ -0,0 +1,17 @@ +import request from '@/utils/request' +import qs from 'qs' + +export function initData(url, params) { + return request({ + url: url + '?' + qs.stringify(params, { indices: false }), + method: 'get' + }) +} + +export function download(url, params) { + return request({ + url: url + '?' + qs.stringify(params, { indices: false }), + method: 'get', + responseType: 'blob' + }) +} diff --git a/src/api/funnelStatistics/index.js b/src/api/funnelStatistics/index.js new file mode 100644 index 0000000..0984bb3 --- /dev/null +++ b/src/api/funnelStatistics/index.js @@ -0,0 +1,26 @@ +/* + * @Author: 客户管理 + * @Date: 2021-10-21 10:06:23 + * @LastEditTime: 2023-04-24 17:18:02 + * @LastEditors: 飘泊客 + * @Description: In User Settings Edit + * @FilePath: /byhl-taomi/src/api/index.js + */ +import request from '@/utils/request' +// 导出 +export function exportEsalesFunnel(data) { + return request({ + url: '/api-source/api/clueReport/funnelExport', + method: 'post', + responseType: 'blob', + data + }) +} +// 销售漏斗 +export function getReportFunnel(data) { + return request({ + url: '/api-source/api/clueReport/adminFunnel', + method: 'post', + data + }) +} diff --git a/src/api/generator/genConfig.js b/src/api/generator/genConfig.js new file mode 100644 index 0000000..b70d0b4 --- /dev/null +++ b/src/api/generator/genConfig.js @@ -0,0 +1,24 @@ +/* + * @Description: + * @Autor: 飘泊客 + * @Date: 2021-12-16 10:08:05 + * @LastEditors: 飘泊客 + * @LastEditTime: 2021-12-16 13:21:45 + */ +import request from '@/utils/request' +import baseObj from '@/utils/url' + +export function get(tableName) { + return request({ + url: baseObj.url + 'api/genConfig/' + tableName, + method: 'get' + }) +} + +export function update(data) { + return request({ + url: baseObj.url + 'api/genConfig', + data, + method: 'put' + }) +} diff --git a/src/api/generator/generator.js b/src/api/generator/generator.js new file mode 100644 index 0000000..7e1957e --- /dev/null +++ b/src/api/generator/generator.js @@ -0,0 +1,41 @@ +/* + * @Description: + * @Autor: 飘泊客 + * @Date: 2021-12-16 10:08:05 + * @LastEditors: 飘泊客 + * @LastEditTime: 2021-12-16 13:21:54 + */ +import request from '@/utils/request' +import baseObj from '@/utils/url' + +export function getAllTable() { + return request({ + url: baseObj.url + 'api/generator/tables/all', + method: 'get' + }) +} + +export function generator(tableName, type) { + return request({ + url: baseObj.url + 'api/generator/' + tableName + '/' + type, + method: 'post', + responseType: type === 2 ? 'blob' : '' + }) +} + +export function save(data) { + return request({ + url: baseObj.url + 'api/generator', + data, + method: 'put' + }) +} + +export function sync(tables) { + return request({ + url: baseObj.url + 'api/generator/sync', + method: 'post', + data: tables + }) +} + diff --git a/src/api/index.js b/src/api/index.js new file mode 100644 index 0000000..b5d44fd --- /dev/null +++ b/src/api/index.js @@ -0,0 +1,1126 @@ +/* + * @Author: your name + * @Date: 2021-10-21 10:06:23 + * @LastEditTime: 2023-06-29 10:21:42 + * @LastEditors: 飘泊客 + * @Description: In User Settings Edit + * @FilePath: /byhl-taomi/src/api/index.js + */ +import request from '@/utils/request' +import baseObj from '@/utils/url' +import qs from 'qs' +// 主账号列表 +export function getAccounts(data) { + return request({ + url: baseObj.url + 'api/parent/accounts', + method: 'get', + data + }) +} +// 模板下载 +export function downLoadTemplate(params) { + return request({ + url: 'api-source/source/uploadFile/downLoadTemplate', + method: 'get', + params + }) +} +// 导入文件 +export function fileUploads(data) { + return request({ + url: 'api-source/source/uploadFile/fileUpload', + method: 'post', + data + }) +} +// 上传记录 +export function queryRecordList(userId) { + const param = { + userId + } + return request({ + url: 'api-source/source/clue/queryRecordList', + method: 'get', + param + }) +} +// 资源列表 +export function taskQueryAll(data) { + const params = data + return request({ + url: baseObj.url + 'api/task/queryAll', + method: 'get', + params + }) +} +// 资源分配-总管理员 +export function saveOrganizeDistribution(data) { + return request({ + url: baseObj.url + 'api/organize/saveOrganizeDistribution', + method: 'post', + data + }) +} + +// 组长or组员用户列表 +export function selectMemberList(params) { + return request({ + url: baseObj.url + 'api/organize/selectMemberList', + method: 'get', + params + }) +} +// 小组任务分配 +export function saveMemberDistribution(data) { + return request({ + url: baseObj.url + 'api/organize/saveMemberDistribution', + method: 'post', + data + }) +} +// 组列表 +export function organizeQueryAll(params) { + return request({ + url: baseObj.url + 'api/organize/queryAll', + method: 'get', + params + }) +} +// 组任务详情 +export function queryDetails(params) { + return request({ + url: baseObj.url + 'api/organize/queryDetails', + method: 'get', + params + }) +} +// 组任务详情 (弃用) +export function organizeQuery(params) { + return request({ + url: baseObj.url + 'api/organize/query', + method: 'get', + params + }) +} +// 组员客户列表 +export function queryMember(data) { + return request({ + url: baseObj.url + 'api/organize/queryMember', + method: 'get', + data + }) +} +// 请求双呼 +export function doubleReq(data) { + return request({ + url: baseObj.url + 'api/telephone/req', + method: 'post', + data + }) +} +// 拨打挂断-双呼 +export function doubleStop(data) { + return request({ + url: baseObj.url + 'api/double/stop', + method: 'post', + data + }) +} +// 拨打挂断-点呼 +export function rollStop(data) { + return request({ + url: baseObj.url + 'api/cti/stop', + method: 'post', + data + }) +} +// 左侧消息列表 +export function getMsgQueryAll(params) { + return request({ + url: baseObj.url + 'api/userMessage/queryAll', + method: 'get', + params + }) +} +// 线索状态修改 +export function clueUpdate(data) { + return request({ + url: 'api-source/source/clue/update', + method: 'post', + data + }) +} +// 线索回退公海 +export function cluerecycle(params) { + return request({ + url: 'api-source/source/clue/recycle', + method: 'get', + params + }) +} +// 线索公海自领取 +export function clueReceive(params) { + return request({ + url: 'api-source/source/clue/receive', + method: 'get', + params + }) +} +// 线索详情 +export function clueQuery(data) { + return request({ + url: 'api-source/source/clue/query', + method: 'post', + data + }) +} +// 商机多任务折现统计图 +export function reportBroken(data) { + return request({ + url: 'api-source/source/report/crm/broken', + method: 'post', + data + }) +} +// 商机多任务状态对比图 +export function reportCrmPie(data) { + return request({ + url: 'api-source/source/report/crm/pie', + method: 'post', + data + }) +} +// 小组柱状统计图 +export function reportOrganize(data) { + return request({ + url: baseObj.url + 'api/report/organize', + method: 'post', + data + }) +} +// 商机多任务资源下载 +export function downloadTask(data) { + return request({ + url: 'api-source/source/report/crm/download', + method: 'post', + responseType: 'blob', + data + }) +} + +// 小组资源下载 +export function downloadOrganize(data) { + return request({ + url: baseObj.url + 'api/download/organize', + method: 'post', + responseType: 'blob', + data + }) +} +// 单个任务详情下载 +export function singleTask(params) { + return request({ + url: baseObj.url + 'api/download/single/task', + method: 'get', + responseType: 'blob', + params + }) +} +// 组员资源下载 +export function downloadMember() { + return request({ + url: baseObj.url + 'api/download/member', + method: 'get' + }) +} +// 管理员显示统计 +export function reportAllget() { + return request({ + url: baseObj.url + 'api/report/all', + method: 'get' + }) +} +// 管理员显示统计-新版 +export function reportHomePage(params) { + return request({ + url: 'api-source/source/report/homePage', + method: 'get', + params + }) +} +// 组员业务柱状显示统计 +export function reportMember(params) { + return request({ + url: baseObj.url + 'api/report/member', + method: 'get', + params + }) +} +// 组员业务折现显示统计-30天 +export function memberMonth() { + return request({ + url: baseObj.url + 'api/report/member/month', + method: 'get' + }) +} +// 线索记录下载 +export function callRecord(params) { + return request({ + url: baseObj.url + 'api/call/record', + method: 'get', + params + }) +} +// 用户修改公司 +export function userUpdateCompany(data) { + return request({ + url: baseObj.url + 'api/company/userUpdateCompany', + method: 'post', + data + }) +} + +// 管理员修改公司 +export function updateCompany(data) { + return request({ + url: baseObj.url + 'api/company/updateCompany', + method: 'post', + data + }) +} +// 公司审核 +export function updateCompanyStatus(params) { + return request({ + url: baseObj.url + 'api/company/updateCompanyStatus', + method: 'get', + params + }) +} + +// 生成分销码 +export function addAgent(data) { + return request({ + url: baseObj.url + 'api/agent', + method: 'post', + data + }) +} +// 获取分机号/点呼使用 +export function extension(params) { + return request({ + url: baseObj.url + 'api/get/extension', + method: 'get', + params + }) +} +// 获取呼叫方式/号码 +export function selectCallMode(params) { + return request({ + url: baseObj.url + 'api/organize/selectCallMode', + method: 'get', + params + }) +} +// 删除资源 +export function taskDel(params) { + return request({ + url: baseObj.url + 'api/task/del', + method: 'get', + params + }) +} +// 编辑备注 +export function taskUpdate(data) { + return request({ + url: baseObj.url + 'api/task/update', + method: 'post', + data + }) +} +// 新建任务-公海 +export function taskSaveTask(data) { + return request({ + url: baseObj.url + 'api/task/saveTask', + method: 'post', + data + }) +} +// 投流任务 +export function clueQueryCluePool(params) { + return request({ + url: 'api-source/source/clue/queryCluePool', + method: 'get', + params + }) +} +// 资源上传-公海 +export function taskFileUpload(data) { + return request({ + url: 'api-source/source/uploadFile/taskFileUpload', + method: 'post', + data + }) +} +// 人员列表-公海 +export function selectAllOrganizeUser(params) { + return request({ + url: baseObj.url + 'api/organize/selectAllOrganizeUser', + method: 'get', + params + }) +} +// 人员指派-公海 +export function updateBatchMember(data) { + return request({ + url: 'api-source/source/clue/updateBatchMember', + method: 'post', + data + }) +} +// 线索模板下载-公海 +export function downLoadTemplateMove() { + return request({ + url: 'api-source/source/uploadFile/downLoadTemplateMove', + method: 'post' + }) +} +// 用户续期 +export function amendmentAmount(data) { + return request({ + url: baseObj.url + 'pay/payOrder/amendmentAmount', + method: 'post', + data + }) +} +// 用户续期-新 +export function usersBuyCombo(data) { + return request({ + url: baseObj.url + 'api/users/buyCombo', + method: 'post', + data + }) +} +// 充值记录 +// export function payOrderList(params) { +// return request({ +// url: baseObj.url + 'pay/payOrder/list', +// method: 'get', +// params +// }) +// } +export function payOrderList(url, params) { + return request({ + url: url + '?' + qs.stringify(params, { indices: false }), + method: 'get' + }) +} +// 增加对公支付记录 +export function payOrderCreate(data) { + return request({ + url: baseObj.url + 'pay/payOrder/create', + method: 'post', + data + }) +} +// 导入分机号 +export function addExtension(data) { + return request({ + url: baseObj.url + 'api/add/extension', + method: 'post', + data + }) +} +// 查询所有业务管理员 +export function rolesRoleLookupUser(data) { + return request({ + url: baseObj.url + 'api/roles/roleLookupUser', + method: 'post', + data + }) +} +// 导入用户模板下载 +export function userPersonnelList(params) { + return request({ + url: baseObj.url + 'api/users/personnelList', + method: 'get', + params + }) +} +// 导入用户 +export function userImportUsers(data) { + return request({ + url: baseObj.url + 'api/users/importUsers', + method: 'post', + data + }) +} +// 分销商禁用/启用 +export function updateUserStatus(params) { + return request({ + url: baseObj.url + 'api/form/user/updateUserStatus', + method: 'get', + params + }) +} + +// 分销商二级列表 +export function debtqueryAll(params) { + return request({ + url: baseObj.url + 'api/debt/queryAll', + method: 'get', + params + }) +} +// 以分配动态任务撤回 +export function withdrawSource(data) { + return request({ + url: 'api-source/source/clue/withdrawSource', + method: 'post', + data + }) +} +// 记录列表 +export function conductQuery(params) { + return request({ + url: 'api-source/source/conductRecord/query', + method: 'get', + params + }) +} +// 保存记录 +export function conductSaveRecord(data) { + return request({ + url: 'api-source/source/conductRecord/saveRecord', + method: 'post', + data + }) +} +// 删除记录 +export function conductDel(params) { + return request({ + url: 'api-source/source/conductRecord/del', + method: 'get', + params + }) +} +// 通话记录查询 +export function reportDetails(params) { + return request({ + url: baseObj.url + 'api/report/details', + method: 'get', + params + }) +} +// 单个线索通话记录下载 +export function downloadDetail(params) { + return request({ + url: baseObj.url + 'api/download/details', + method: 'get', + responseType: 'blob', + params + }) +} + +// 删除动态任务 +export function taskDelDynamic(params) { + return request({ + url: baseObj.url + 'api/task/delDynamic', + method: 'get', + params + }) +} +// 标签组列表 +export function labelOrganizeQueryAll(params) { + return request({ + url: baseObj.url + 'api/labelOrganize/queryAll', + method: 'get', + params + }) +} +// 标签新增 +export function labelOrganizeAdd(data) { + return request({ + url: baseObj.url + 'api/labelOrganize/add', + method: 'post', + data + }) +} +// 标签删除 +export function labelOrganizeDel(ids) { + return request({ + url: baseObj.url + 'api/labelOrganize/del', + method: 'delete', + data: ids + }) +} +// 修改标签组 +export function labelOrganizeUpdate(data) { + return request({ + url: baseObj.url + 'api/labelOrganize/update', + method: 'post', + data + }) +} +// 待审批资源列表 +export function queryNotApproved(data) { + return request({ + url: 'api-source/source/clueRecord/queryNotApproved', + method: 'post', + data + }) +} +// 审批资源0:通过 1:拒绝 +export function clueRecordAudit(data) { + return request({ + url: 'api-source/source/clueRecord/audit', + method: 'post', + data + }) +} +// 套餐列表 +export function payTemplateList(params) { + return request({ + url: baseObj.url + 'api/payTemplate/list', + method: 'get', + params + }) +} +// 套餐列表-无分页 +export function payFatherTemplateList(params) { + return request({ + url: baseObj.url + 'api/payFatherTemplate/list', + method: 'get', + params + }) +} +// 新增套餐 +export function payTemplateAdd(data) { + return request({ + url: baseObj.url + 'api/payTemplate/add', + method: 'post', + data + }) +} +// 伪删除套餐 +export function payTemplateUpdate(data) { + return request({ + url: baseObj.url + 'api/payTemplate/update', + method: 'post', + data + }) +} +// 新增消费模板 +export function payFatherTemplateAdd(data) { + return request({ + url: baseObj.url + 'api/payFatherTemplate/add', + method: 'post', + data + }) +} +// 删除消费模板 +export function payFatherTemplateDel(ids) { + return request({ + url: baseObj.url + 'api/payFatherTemplate/del', + method: 'delete', + data: ids + }) +} +// 模板列表-无分页 +export function payTemplateQuery(params) { + return request({ + url: baseObj.url + 'api/payTemplate/query', + method: 'get', + params + }) +} +// 企微-二维码获取 +export function wechatGetQrCode(params) { + return request({ + url: baseObj.url + 'api/wechat/getQrCode', + method: 'get', + params + }) +} +// 企微-好友添加 +export function wechatAddFriend(data) { + return request({ + url: baseObj.url + 'api/wechat/addFriend', + method: 'post', + data + }) +} +// 企微-验证模板 +export function wechatSendMessageList(params) { + return request({ + url: baseObj.url + 'api/wechatSendMessage/list', + method: 'get', + params + }) +} +// 企微-新增验证模板 +export function wechatSendMessageAdd(data) { + return request({ + url: baseObj.url + 'api/wechatSendMessage', + method: 'post', + data + }) +} +// 企微-删除验证模板 +export function wechatSendMessageDel(params) { + return request({ + url: baseObj.url + 'api/wechatSendMessage/deleteById', + method: 'get', + params + }) +} +// 企微-编辑验证模板 +export function changeIsDefault(params) { + return request({ + url: baseObj.url + 'api/wechatSendMessage/changeIsDefault', + method: 'get', + params + }) +} +// 查询配置线索规则 +export function getpoolQuery(params) { + return request({ + url: 'api-source/source/clue/pool/query', + method: 'get', + params + }) +} +// 配置线索规则 +export function setPoolConfigure(data) { + return request({ + url: 'api-source/source/clue/pool/configure', + method: 'post', + data + }) +} +// 手动导入 +export function setDynamicTask(data) { + return request({ + url: 'api-source/source/clue/dynamic/task', + method: 'post', + data + }) +} +// 加敏脱敏 +export function upFormNncryption(params) { + return request({ + url: baseObj.url + 'api/task/form/encryption', + method: 'get', + params + }) +} +// 统计图表员工or管理员 +export function getClueStage(data) { + return request({ + url: 'api-source/source/report/crm/stage', + method: 'post', + data + }) +} + +// 授权-抖音授权列表 +export function getOceanEnginePage(params) { + return request({ + url: baseObj.url + 'api/oceanEngine/page', + method: 'get', + params + }) +} +// 授权-抖音新增 +export function getOceanEngineAdd(data) { + return request({ + url: baseObj.url + 'api/oceanEngine/add', + method: 'post', + data + }) +} +// 授权-抖音授权 +export function getOceanEngineUrl(params) { + return request({ + url: baseObj.url + 'api/oceanEngine/url', + method: 'get', + params + }) +} +// 新建任务-投流任务 +export function taskSaveBackTask(data) { + return request({ + url: baseObj.url + 'api/task/saveAdBackTask', + method: 'post', + data + }) +} +// 指定公司-分机号列表 +export function getDisplay(params) { + return request({ + url: baseObj.url + 'api/extension/display', + method: 'get', + params + }) +} +// 拓客投流线索转CRM +export function upClueBackFlow(params) { + return request({ + url: 'api-source/source/clue/backFlow', + method: 'get', + params + }) +} + +// 拓客模块多任务折现统计图 +export function tokerBroken(data) { + return request({ + url: 'api-source/source/report/toker/broken', + method: 'post', + data + }) +} +// 任务饼图统计图-投流 +export function tokerPie(data) { + return request({ + url: 'api-source/source/report/toker/pie', + method: 'post', + data + }) +} +// 任务饼图统计图-获取通话统计 +export function tokeStatistics(params) { + return request({ + url: 'api-source/source/report/call', + method: 'get', + params + }) +} +// 拓客模块人员or组 线索状态比对 +export function tokerStage(data) { + return request({ + url: 'api-source/source/report/toker/stage', + method: 'post', + data + }) +} +// 业务管理员or业务员成交额 +export function getTurnover(data) { + return request({ + url: 'api-source/source/report/crm/turnover', + method: 'post', + data + }) +} +// 任务折现统计图-投流拓客导出 +export function tokerDownload(data) { + return request({ + url: 'api-source/source/report/toker/download', + method: 'post', + responseType: 'blob', + data + }) +} +// 拓客任务列表 +export function getTaskList(params) { + return request({ + url: baseObj.url + 'api/task/list', + method: 'get', + params + }) +} +// 拓客任务设置 +export function updateEncryption(params) { + return request({ + url: baseObj.url + 'api/task/updateEncryption', + method: 'get', + params + }) +} +// 动态任务-自动分配 +export function addTaskDistribution(data) { + return request({ + url: baseObj.url + 'api/task/addTaskDistribution', + method: 'post', + data + }) +} +// 投流任务-单个详情 +export function queryDmpTask(params) { + return request({ + url: baseObj.url + 'api/task/queryDmpTask', + method: 'get', + params + }) +} +// 投流任务-编辑 +export function updateDmpTask(data) { + return request({ + url: baseObj.url + 'api/task/updateDmpTask', + method: 'post', + data + }) +} +// 月度账号概览 +export function getDeductList(params) { + return request({ + url: baseObj.url + 'api/call/deduct/list', + method: 'get', + params + }) +} +// 月度账号详情 +export function getDeductMonthList(params) { + return request({ + url: baseObj.url + 'api/call/deduct/month/list', + method: 'get', + params + }) +} +// 导出月订单excel +export function downloadDeduct(params) { + return request({ + url: baseObj.url + 'api/call/deduct/download', + method: 'get', + responseType: 'blob', + params + }) +} +// 公司列表-套餐 +export function getComboList(params) { + return request({ + url: baseObj.url + 'api/company/comboList', + method: 'get', + params + }) +} +// 公司列表-套餐编辑 +export function updateCombo(data) { + return request({ + url: baseObj.url + 'api/company/update/combo', + method: 'post', + data + }) +} +// 销售漏斗 +export function getReportFunnel(data) { + return request({ + url: '/api-source/api/clueReport/funnel', + method: 'post', + data + }) +} +// 投流下载-上传excel +export function uploadFiles(data) { + return request({ + url: baseObj.url + 'api/down/record/upload/files', + method: 'post', + data + }) +} +// 投流下载-发送邮件 +export function sendEmail(params) { + return request({ + url: baseObj.url + 'api/down/record/send/email', + method: 'get', + params + }) +} +// 投流下载-发送邮件 +export function queryRecordListDownload(params) { + return request({ + url: 'api-source/source/clueRecord/queryRecordList/download', + method: 'get', + responseType: 'blob', + params + }) +} +// 新建回款 +export function turnoverRecordSave(data) { + return request({ + url: 'api-source/source/turnoverRecord/save', + method: 'post', + data + }) +} +// 回款账单 +export function turnoverRecordQuery(params) { + return request({ + url: 'api-source/source/turnoverRecord/query', + method: 'get', + params + }) +} +// 修改回款账单状态 +export function turnoverRecordUpdate(params) { + return request({ + url: 'api-source/source/turnoverRecord/update', + method: 'get', + params + }) +} +// 成交额下载 +export function turnoverDownload(data) { + return request({ + url: 'api-source/source/report/turnover/download', + method: 'post', + responseType: 'blob', + data + }) +} +// 可继承人员列表 +export function getFindDelUser(params) { + return request({ + url: baseObj.url + 'api/organize/findDelUser', + method: 'get', + params + }) +} +// 公司消费信息统计 +export function getConsumptionInformation(data) { + return request({ + url: baseObj.url + 'api/report/deduct', + method: 'post', + data + }) +} +// 人员转移 +export function organizeConvert(data) { + return request({ + url: baseObj.url + 'api/organize/convert', + method: 'post', + data + }) +} +// 线索上传-自上传 +export function delIndividualClue(ids) { + return request({ + url: 'api-source/source/clue/delIndividualClue', + method: 'delete', + data: ids + }) +} + +// 话术-add +export function setScriptAdd(data) { + return request({ + url: baseObj.url + 'api/script/organize/add', + method: 'post', + data + }) +} +// 话术分类-update +export function setScriptOrganizeUpdate(data) { + return request({ + url: baseObj.url + 'api/script/organize/update', + method: 'post', + data + }) +} +// 话术-update +export function setScriptUpdate(data) { + return request({ + url: baseObj.url + 'api/script/update', + method: 'post', + data + }) +} +// 话术-del +export function setScriptDel(id) { + return request({ + url: baseObj.url + 'api/script/del/' + id, + method: 'delete' + }) +} +// 话术-select +export function getScriptQueryAll(params) { + return request({ + url: baseObj.url + 'api/script/queryAll', + method: 'get', + params + }) +} +// 话术分类-select +export function getQueryOrganize(params) { + return request({ + url: baseObj.url + 'api/script/organize/queryOrganize', + method: 'get', + params + }) +} +// 话术-select +export function getQueryScript(params) { + return request({ + url: baseObj.url + 'api/script/queryScript', + method: 'get', + params + }) +} +// 新增置顶话术 +export function addTopScript(data) { + return request({ + url: baseObj.url + 'api/script/add', + method: 'post', + data + }) +} +// 新增案例 +export function setAddCases(data) { + return request({ + url: baseObj.url + 'api/cases/addCases', + method: 'post', + data + }) +} +// 查询案例All +export function getQueryAll(params) { + return request({ + url: baseObj.url + 'api/cases/queryAll', + method: 'get', + params + }) +} +// 单个案例查询 +export function getQuerySession(params) { + return request({ + url: baseObj.url + 'api/cases/querySession', + method: 'get', + params + }) +} +// 删除批注 +export function setDelete(id) { + return request({ + url: baseObj.url + 'api/cases/delete/' + id, + method: 'delete' + }) +} +// DMP赔付-置换 +export function boostCompensate(data) { + return request({ + url: baseObj.url + 'api/boost/compensate', + method: 'post', + data + }) +} +// 通话日志记录 +export function setLogSave(data) { + return request({ + url: baseObj.url + 'api/log/save', + method: 'post', + data + }) +} +export function getCompensateInfo(params) { + return request({ + url: baseObj.url + 'api/boost/compensateInfo', + method: 'get', + params + }) +} + +// export function getConsumptionInformation(url,params) { +// return request({ +// url: url +'?'+qs.stringify(params,{indices:false}), +// method: 'post', +// }) +// } diff --git a/src/api/logClick/index.js b/src/api/logClick/index.js new file mode 100644 index 0000000..f67f27b --- /dev/null +++ b/src/api/logClick/index.js @@ -0,0 +1,17 @@ +/* + * @Author: 客户管理 + * @Date: 2021-10-21 10:06:23 + * @LastEditTime: 2023-04-24 17:18:02 + * @LastEditors: 飘泊客 + * @Description: In User Settings Edit + * @FilePath: /byhl-taomi/src/api/index.js + */ +import request from '@/utils/request' +// 获取日志列表 +export function logList(params) { + return request({ + url: '/api-management/api/log/page', + method: 'get', + params + }) +} diff --git a/src/api/login.js b/src/api/login.js new file mode 100644 index 0000000..8a06750 --- /dev/null +++ b/src/api/login.js @@ -0,0 +1,58 @@ +/* + * @Description: + * @Autor: 飘泊客 + * @Date: 2021-12-16 10:08:05 + * @LastEditors: 飘泊客 + * @LastEditTime: 2022-12-27 10:40:35 + */ +import request from '@/utils/request' +import baseObj from '@/utils/url' +const client_id = 'admin-web' +const client_secret = '123456' +const grant_type = 'password' +const scope = 'server' + +export function login(username, password, code, uuid) { + return request({ + url: '/auth/oauth/token', + method: 'post', + params: { + username, + password, + code, + uuid, + client_id, + client_secret, + grant_type, + scope + } + }) +} + +export function getInfo() { + return request({ + url: baseObj.url + 'api/users/info', + method: 'get' + }) +} + +export function getCodeImg() { + return request({ + url: 'auth/code', + method: 'get' + }) +} + +export function logout() { + return request({ + url: 'auth/token/logout', + method: 'delete' + }) +} +// 获取广告质量分 +export function getAdvertisingQualityScore() { + return request({ + url: '/api-management/api/quality/query', + method: 'get' + }) +} diff --git a/src/api/mnt/app.js b/src/api/mnt/app.js new file mode 100644 index 0000000..c30e794 --- /dev/null +++ b/src/api/mnt/app.js @@ -0,0 +1,35 @@ +/* + * @Description: + * @Autor: 飘泊客 + * @Date: 2021-12-16 10:08:05 + * @LastEditors: 飘泊客 + * @LastEditTime: 2021-12-16 13:21:01 + */ +import request from '@/utils/request' +import baseObj from '@/utils/url' + +export function add(data) { + return request({ + url: baseObj.url + 'api/app', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: baseObj.url + 'api/app', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: baseObj.url + 'api/app', + method: 'put', + data + }) +} + +export default { add, edit, del } diff --git a/src/api/mnt/connect.js b/src/api/mnt/connect.js new file mode 100644 index 0000000..4566c8d --- /dev/null +++ b/src/api/mnt/connect.js @@ -0,0 +1,25 @@ +/* + * @Description: + * @Autor: 飘泊客 + * @Date: 2021-12-16 10:08:05 + * @LastEditors: 飘泊客 + * @LastEditTime: 2021-12-16 13:21:09 + */ +import request from '@/utils/request' +import baseObj from '@/utils/url' + +export function testDbConnect(data) { + return request({ + url: baseObj.url + 'api/database/testConnect', + method: 'post', + data + }) +} + +export function testServerConnect(data) { + return request({ + url: baseObj.url + 'api/serverDeploy/testConnect', + method: 'post', + data + }) +} diff --git a/src/api/mnt/database.js b/src/api/mnt/database.js new file mode 100644 index 0000000..26418bd --- /dev/null +++ b/src/api/mnt/database.js @@ -0,0 +1,43 @@ +/* + * @Description: + * @Autor: 飘泊客 + * @Date: 2021-12-16 10:08:05 + * @LastEditors: 飘泊客 + * @LastEditTime: 2021-12-16 13:21:16 + */ +import request from '@/utils/request' +import baseObj from '@/utils/url' + +export function add(data) { + return request({ + url: baseObj.url + 'api/database', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: baseObj.url + 'api/database', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: baseObj.url + 'api/database', + method: 'put', + data + }) +} + +export function testDbConnection(data) { + return request({ + url: baseObj.url + 'api/database/testConnect', + method: 'post', + data + }) +} + +export default { add, edit, del, testDbConnection } diff --git a/src/api/mnt/deploy.js b/src/api/mnt/deploy.js new file mode 100644 index 0000000..d96546e --- /dev/null +++ b/src/api/mnt/deploy.js @@ -0,0 +1,85 @@ +/* + * @Description: + * @Autor: 飘泊客 + * @Date: 2021-12-16 10:08:05 + * @LastEditors: 飘泊客 + * @LastEditTime: 2021-12-16 13:21:21 + */ +import request from '@/utils/request' +import baseObj from '@/utils/url' + +export function add(data) { + return request({ + url: baseObj.url + 'api/deploy', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: baseObj.url + 'api/deploy', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: baseObj.url + 'api/deploy', + method: 'put', + data + }) +} + +export function getApps() { + return request({ + url: baseObj.url + 'api/app', + method: 'get' + }) +} + +export function getServers() { + return request({ + url: baseObj.url + 'api/serverDeploy', + method: 'get' + }) +} + +/** + * 启动服务 + * @param data 选中行 + */ +export function startServer(data) { + return request({ + url: baseObj.url + 'api/deploy/startServer', + method: 'post', + data + }) +} + +/** + * 停止服务 + * @param data 选中行 + */ +export function stopServer(data) { + return request({ + url: baseObj.url + 'api/deploy/stopServer', + method: 'post', + data + }) +} + +/** + * 停止服务 + * @param data 选中行 + */ +export function serverStatus(data) { + return request({ + url: baseObj.url + 'api/deploy/serverStatus', + method: 'post', + data + }) +} + +export default { add, edit, del, stopServer, serverStatus, startServer, getServers, getApps } diff --git a/src/api/mnt/deployHistory.js b/src/api/mnt/deployHistory.js new file mode 100644 index 0000000..93adc73 --- /dev/null +++ b/src/api/mnt/deployHistory.js @@ -0,0 +1,29 @@ +/* + * @Description: + * @Autor: 飘泊客 + * @Date: 2021-12-16 10:08:05 + * @LastEditors: 飘泊客 + * @LastEditTime: 2021-12-16 13:21:31 + */ +import request from '@/utils/request' +import baseObj from '@/utils/url' + +export function del(ids) { + return request({ + url: baseObj.url + 'api/deployHistory', + method: 'delete', + data: ids + }) +} + +/** + * 版本回退 + * @param data 选中行 + */ +export function reducte(data) { + return request({ + url: baseObj.url + 'api/deploy/serverReduction', + method: 'post', + data + }) +} diff --git a/src/api/mnt/serverDeploy.js b/src/api/mnt/serverDeploy.js new file mode 100644 index 0000000..40957a9 --- /dev/null +++ b/src/api/mnt/serverDeploy.js @@ -0,0 +1,35 @@ +/* + * @Description: + * @Autor: 飘泊客 + * @Date: 2021-12-16 10:08:05 + * @LastEditors: 飘泊客 + * @LastEditTime: 2021-12-16 13:21:37 + */ +import request from '@/utils/request' +import baseObj from '@/utils/url' + +export function add(data) { + return request({ + url: baseObj.url + 'api/serverDeploy', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: baseObj.url + 'api/serverDeploy', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: baseObj.url + 'api/serverDeploy', + method: 'put', + data + }) +} + +export default { add, edit, del } diff --git a/src/api/monitor/log.js b/src/api/monitor/log.js new file mode 100644 index 0000000..ce1499f --- /dev/null +++ b/src/api/monitor/log.js @@ -0,0 +1,30 @@ +/* + * @Description: + * @Autor: 飘泊客 + * @Date: 2021-12-16 10:08:05 + * @LastEditors: 飘泊客 + * @LastEditTime: 2021-12-16 13:20:39 + */ +import request from '@/utils/request' +import baseObj from '@/utils/url' + +export function getErrDetail(id) { + return request({ + url: baseObj.url + 'api/logs/error/' + id, + method: 'get' + }) +} + +export function delAllError() { + return request({ + url: baseObj.url + 'api/logs/del/error', + method: 'delete' + }) +} + +export function delAllInfo() { + return request({ + url: baseObj.url + 'api/logs/del/info', + method: 'delete' + }) +} diff --git a/src/api/monitor/online.js b/src/api/monitor/online.js new file mode 100644 index 0000000..0cba80f --- /dev/null +++ b/src/api/monitor/online.js @@ -0,0 +1,17 @@ +/* + * @Description: + * @Autor: 飘泊客 + * @Date: 2021-12-16 10:08:05 + * @LastEditors: 飘泊客 + * @LastEditTime: 2021-12-16 13:20:45 + */ +import request from '@/utils/request' +import baseObj from '@/utils/url' + +export function del(keys) { + return request({ + url: baseObj.url + 'auth/online', + method: 'delete', + data: keys + }) +} diff --git a/src/api/resourceBundleManagement/index.js b/src/api/resourceBundleManagement/index.js new file mode 100644 index 0000000..155b1b0 --- /dev/null +++ b/src/api/resourceBundleManagement/index.js @@ -0,0 +1,34 @@ +/* + * @Author:资源包管理 + * @Date: 2021-10-21 10:06:23 + * @LastEditTime: 2023-04-24 17:18:34 + * @LastEditors: 飘泊客 + * @Description: In User Settings Edit + * @FilePath: /byhl-taomi/src/api/index.js + */ +import request from '@/utils/request' +import qs from 'qs' +// 配量 +export function allotmentQuantity(channelId, assignNum, assignBill) { + return request({ + url: '/api-management/api/resource/assign?channelId=' + channelId + '&assignNum=' + assignNum + '&assignBill=' + assignBill, + method: 'get' + // params + }) +} +// 分页查询渠道商分配记录 +export function allocationRecord(params) { + return request({ + url: '/api-management/api/resource/query/assign' + '?' + qs.stringify(params, { indices: false }), + method: 'get' + }) +} +// 统计 +export function statistics(params) { + return request({ + url: '/api-management/api/resource/report', + method: 'get', + params + }) +} + diff --git a/src/api/system/code.js b/src/api/system/code.js new file mode 100644 index 0000000..b0ac98b --- /dev/null +++ b/src/api/system/code.js @@ -0,0 +1,23 @@ +/* + * @Description: + * @Autor: 飘泊客 + * @Date: 2021-12-15 14:44:41 + * @LastEditors: 飘泊客 + * @LastEditTime: 2021-12-16 13:19:02 + */ +import request from '@/utils/request' +import baseObj from '@/utils/url' + +export function resetEmail(data) { + return request({ + url: baseObj.url + 'api/code/resetEmail?email=' + data, + method: 'post' + }) +} + +export function updatePass(pass) { + return request({ + url: baseObj.url + 'api/users/updatePass/' + pass, + method: 'get' + }) +} diff --git a/src/api/system/dept.js b/src/api/system/dept.js new file mode 100644 index 0000000..67e7932 --- /dev/null +++ b/src/api/system/dept.js @@ -0,0 +1,52 @@ +/* + * @Description: + * @Autor: 飘泊客 + * @Date: 2021-12-16 10:08:05 + * @LastEditors: 飘泊客 + * @LastEditTime: 2021-12-16 13:20:25 + */ +import request from '@/utils/request' +import baseObj from '@/utils/url' + +export function getDepts(params) { + return request({ + url: baseObj.url + 'api/dept', + method: 'get', + params + }) +} + +export function getDeptSuperior(ids) { + const data = ids.length || ids.length === 0 ? ids : Array.of(ids) + return request({ + url: baseObj.url + 'api/dept/superior', + method: 'post', + data + }) +} + +export function add(data) { + return request({ + url: baseObj.url + 'api/dept', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: baseObj.url + 'api/dept', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: baseObj.url + 'api/dept', + method: 'put', + data + }) +} + +export default { add, edit, del, getDepts, getDeptSuperior } diff --git a/src/api/system/dict.js b/src/api/system/dict.js new file mode 100644 index 0000000..ba511a5 --- /dev/null +++ b/src/api/system/dict.js @@ -0,0 +1,42 @@ +/* + * @Description: + * @Autor: 飘泊客 + * @Date: 2021-12-16 10:08:05 + * @LastEditors: 飘泊客 + * @LastEditTime: 2021-12-16 13:20:19 + */ +import request from '@/utils/request' +import baseObj from '@/utils/url' + +export function getDicts() { + return request({ + url: baseObj.url + 'api/dict/all', + method: 'get' + }) +} + +export function add(data) { + return request({ + url: baseObj.url + 'api/dict', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: baseObj.url + 'api/dict/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: baseObj.url + 'api/dict', + method: 'put', + data + }) +} + +export default { add, edit, del } diff --git a/src/api/system/dictDetail.js b/src/api/system/dictDetail.js new file mode 100644 index 0000000..f2a5a2c --- /dev/null +++ b/src/api/system/dictDetail.js @@ -0,0 +1,60 @@ +/* + * @Description: + * @Autor: 飘泊客 + * @Date: 2021-12-16 10:08:05 + * @LastEditors: 飘泊客 + * @LastEditTime: 2021-12-16 13:20:11 + */ +import request from '@/utils/request' +import baseObj from '@/utils/url' + +export function get(dictName) { + const params = { + dictName, + page: 0, + size: 9999 + } + return request({ + url: baseObj.url + 'api/dictDetail', + method: 'get', + params + }) +} + +export function getDictMap(dictName) { + const params = { + dictName, + page: 0, + size: 9999 + } + return request({ + url: baseObj.url + 'api/dictDetail/map', + method: 'get', + params + }) +} + +export function add(data) { + return request({ + url: baseObj.url + 'api/dictDetail', + method: 'post', + data + }) +} + +export function del(id) { + return request({ + url: baseObj.url + 'api/dictDetail/' + id, + method: 'delete' + }) +} + +export function edit(data) { + return request({ + url: baseObj.url + 'api/dictDetail', + method: 'put', + data + }) +} + +export default { add, edit, del } diff --git a/src/api/system/groud.js b/src/api/system/groud.js new file mode 100644 index 0000000..6dece83 --- /dev/null +++ b/src/api/system/groud.js @@ -0,0 +1,65 @@ +/* + * @Description: 组管理 + * @Autor: 飘泊客 + * @Date: 2021-12-16 10:08:05 + * @LastEditors: 飘泊客 + * @LastEditTime: 2022-01-11 11:14:01 + */ +import request from '@/utils/request' +import baseObj from '@/utils/url' + +export function organizeSave(data) { + return request({ + url: baseObj.url + 'api/organize/save', + method: 'post', + data + }) +} + +export function organizeDel(params) { + return request({ + url: baseObj.url + 'api/organize/del', + method: 'get', + params + }) +} + +export function organizeEdit(data) { + return request({ + url: baseObj.url + 'api/organize/update', + method: 'post', + data + }) +} +// 组员查询 +export function selectMemberList(params) { + return request({ + url: baseObj.url + 'api/organize/selectMemberList', + method: 'get', + params + }) +} +// 新增组员 +export function addMember(data) { + return request({ + url: baseObj.url + 'api/organize/addMember', + method: 'post', + data + }) +} +// 删除组员 +export function delMember(params) { + return request({ + url: baseObj.url + 'api/organize/delMember', + method: 'get', + params + }) +} +// 组长转移 +export function queryIdenticalTask(params) { + return request({ + url: baseObj.url + 'api/organize/queryIdenticalTask', + method: 'get', + params + }) +} diff --git a/src/api/system/job.js b/src/api/system/job.js new file mode 100644 index 0000000..eda0280 --- /dev/null +++ b/src/api/system/job.js @@ -0,0 +1,48 @@ +/* + * @Description: + * @Autor: 飘泊客 + * @Date: 2021-12-16 10:08:05 + * @LastEditors: 飘泊客 + * @LastEditTime: 2021-12-16 13:20:04 + */ +import request from '@/utils/request' +import baseObj from '@/utils/url' + +export function getAllJob() { + const params = { + page: 0, + size: 9999, + enabled: true + } + return request({ + url: baseObj.url + 'api/job', + method: 'get', + params + }) +} + +export function add(data) { + return request({ + url: baseObj.url + 'api/job', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: baseObj.url + 'api/job', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: baseObj.url + 'api/job', + method: 'put', + data + }) +} + +export default { add, edit, del } diff --git a/src/api/system/menu.js b/src/api/system/menu.js new file mode 100644 index 0000000..1dcbef3 --- /dev/null +++ b/src/api/system/menu.js @@ -0,0 +1,73 @@ +/* + * @Description: + * @Autor: 飘泊客 + * @Date: 2021-12-16 10:08:05 + * @LastEditors: 飘泊客 + * @LastEditTime: 2021-12-16 10:47:12 + */ +import request from '@/utils/request' +import baseObj from '@/utils/url' + +export function getMenusTree(pid) { + return request({ + url: baseObj.url + 'api/menus/lazy?pid=' + pid, + method: 'get' + }) +} + +export function getMenus(params) { + return request({ + url: baseObj.url + 'api/menus', + method: 'get', + params + }) +} + +export function getMenuSuperior(ids) { + const data = Array.isArray(ids) || ids.length === 0 ? ids : Array.of(ids) + return request({ + url: baseObj.url + 'api/menus/superior', + method: 'post', + data + }) +} + +export function getChild(id) { + return request({ + url: baseObj.url + 'api/menus/child?id=' + id, + method: 'get' + }) +} + +export function buildMenus() { + return request({ + url: baseObj.url + 'api/menus/build', + method: 'get' + }) +} + +export function add(data) { + return request({ + url: baseObj.url + 'api/menus', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: baseObj.url + 'api/menus', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: baseObj.url + 'api/menus', + method: 'put', + data + }) +} + +export default { add, edit, del, getMenusTree, getMenuSuperior, getMenus, getChild } diff --git a/src/api/system/role.js b/src/api/system/role.js new file mode 100644 index 0000000..d070081 --- /dev/null +++ b/src/api/system/role.js @@ -0,0 +1,65 @@ +/* + * @Description: + * @Autor: 飘泊客 + * @Date: 2021-12-16 10:08:05 + * @LastEditors: 飘泊客 + * @LastEditTime: 2021-12-16 13:19:52 + */ +import request from '@/utils/request' +import baseObj from '@/utils/url' + +// 获取所有的Role +export function getAll() { + return request({ + url: baseObj.url + 'api/roles/all', + method: 'get' + }) +} + +export function add(data) { + return request({ + url: baseObj.url + 'api/roles', + method: 'post', + data + }) +} + +export function get(id) { + return request({ + url: baseObj.url + 'api/roles/' + id, + method: 'get' + }) +} + +export function getLevel() { + return request({ + url: baseObj.url + 'api/roles/level', + method: 'get' + }) +} + +export function del(ids) { + return request({ + url: baseObj.url + 'api/roles', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: baseObj.url + 'api/roles', + method: 'put', + data + }) +} + +export function editMenu(data) { + return request({ + url: baseObj.url + 'api/roles/menu', + method: 'put', + data + }) +} + +export default { add, edit, del, get, editMenu, getLevel } diff --git a/src/api/system/timing.js b/src/api/system/timing.js new file mode 100644 index 0000000..d4db283 --- /dev/null +++ b/src/api/system/timing.js @@ -0,0 +1,49 @@ +/* + * @Description: + * @Autor: 飘泊客 + * @Date: 2021-12-16 10:08:05 + * @LastEditors: 飘泊客 + * @LastEditTime: 2021-12-16 13:19:45 + */ +import request from '@/utils/request' +import baseObj from '@/utils/url' + +export function add(data) { + return request({ + url: baseObj.url + 'api/jobs', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: baseObj.url + 'api/jobs', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: baseObj.url + 'api/jobs', + method: 'put', + data + }) +} + +export function updateIsPause(id) { + return request({ + url: baseObj.url + 'api/jobs/' + id, + method: 'put' + }) +} + +export function execution(id) { + return request({ + url: baseObj.url + 'api/jobs/exec/' + id, + method: 'put' + }) +} + +export default { del, updateIsPause, execution, add, edit } diff --git a/src/api/system/user.js b/src/api/system/user.js new file mode 100644 index 0000000..9d47b1b --- /dev/null +++ b/src/api/system/user.js @@ -0,0 +1,69 @@ +/* + * @Description: + * @Autor: 飘泊客 + * @Date: 2021-12-16 10:08:05 + * @LastEditors: 飘泊客 + * @LastEditTime: 2022-01-25 13:19:33 + */ +import request from '@/utils/request' +import { encrypt } from '@/utils/rsaEncrypt' +import baseObj from '@/utils/url' + +export function add(data) { + return request({ + url: baseObj.url + 'api/users/createUsers', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: baseObj.url + 'api/users', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: baseObj.url + 'api/users', + method: 'put', + data + }) +} + +export function editUser(data) { + return request({ + url: baseObj.url + 'api/users/center', + method: 'put', + data + }) +} + +export function updatePass(user) { + const data = { + oldPass: encrypt(user.oldPass), + newPass: encrypt(user.newPass) + } + return request({ + url: baseObj.url + 'api/users/updatePass/', + method: 'post', + data + }) +} + +export function updateEmail(form) { + const data = { + password: encrypt(form.pass), + email: form.email + } + return request({ + url: baseObj.url + 'api/users/updateEmail/' + form.code, + method: 'post', + data + }) +} + +export default { add, edit, del } + diff --git a/src/api/tools/alipay.js b/src/api/tools/alipay.js new file mode 100644 index 0000000..1c12adc --- /dev/null +++ b/src/api/tools/alipay.js @@ -0,0 +1,57 @@ +/* + * @Description: + * @Autor: 飘泊客 + * @Date: 2021-12-16 10:08:05 + * @LastEditors: 飘泊客 + * @LastEditTime: 2023-02-03 17:05:20 + */ +import request from '@/utils/request' +import baseObj from '@/utils/url' + +export function get() { + return request({ + url: baseObj.url + 'api/aliPay', + method: 'get' + }) +} + +export function update(data) { + return request({ + url: baseObj.url + 'api/aliPay', + data, + method: 'put' + }) +} + +// 支付 +export function toAliPay(url, data) { + return request({ + url: baseObj.url + 'api/' + url, + data, + method: 'post' + }) +} +// 充值-支付宝 +export function aliPayPcPay(data) { + return request({ + url: baseObj.url + 'pay/aliPay/pcPay', + method: 'post', + data + }) +} +// 生成激活码 +export function getActivationCode(params) { + return request({ + url: baseObj.url + 'api/activationRecord/generate', + method: 'get', + params + }) +} +// 获取激活码表格 +export function getActivationCodeForm(params) { + return request({ + url: baseObj.url + 'api/activationRecord/queryAll', + method: 'get', + params + }) +} diff --git a/src/api/tools/email.js b/src/api/tools/email.js new file mode 100644 index 0000000..4997fdf --- /dev/null +++ b/src/api/tools/email.js @@ -0,0 +1,32 @@ +/* + * @Description: + * @Autor: 飘泊客 + * @Date: 2021-12-16 10:08:05 + * @LastEditors: 飘泊客 + * @LastEditTime: 2021-12-16 13:17:52 + */ +import request from '@/utils/request' +import baseObj from '@/utils/url' + +export function get() { + return request({ + url: baseObj.url + 'api/email', + method: 'get' + }) +} + +export function update(data) { + return request({ + url: baseObj.url + 'api/email', + data, + method: 'put' + }) +} + +export function send(data) { + return request({ + url: baseObj.url + 'api/email', + data, + method: 'post' + }) +} diff --git a/src/api/tools/localStorage.js b/src/api/tools/localStorage.js new file mode 100644 index 0000000..2501bcf --- /dev/null +++ b/src/api/tools/localStorage.js @@ -0,0 +1,35 @@ +/* + * @Description: + * @Autor: 飘泊客 + * @Date: 2021-12-16 10:08:05 + * @LastEditors: 飘泊客 + * @LastEditTime: 2021-12-16 13:17:45 + */ +import request from '@/utils/request' +import baseObj from '@/utils/url' + +export function add(data) { + return request({ + url: baseObj.url + 'api/localStorage', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: baseObj.url + 'api/localStorage/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: baseObj.url + 'api/localStorage', + method: 'put', + data + }) +} + +export default { add, edit, del } diff --git a/src/api/tools/qiniu.js b/src/api/tools/qiniu.js new file mode 100644 index 0000000..44c1b61 --- /dev/null +++ b/src/api/tools/qiniu.js @@ -0,0 +1,48 @@ +/* + * @Description: + * @Autor: 飘泊客 + * @Date: 2021-12-16 10:08:05 + * @LastEditors: 飘泊客 + * @LastEditTime: 2021-12-16 13:17:37 + */ +import request from '@/utils/request' +import baseObj from '@/utils/url' + +export function get() { + return request({ + url: baseObj.url + 'api/qiNiuContent/config', + method: 'get' + }) +} + +export function update(data) { + return request({ + url: baseObj.url + 'api/qiNiuContent/config', + data, + method: 'put' + }) +} + +export function download(id) { + return request({ + url: baseObj.url + 'api/qiNiuContent/download/' + id, + method: 'get' + }) +} + +export function sync() { + return request({ + url: baseObj.url + 'api/qiNiuContent/synchronize', + method: 'post' + }) +} + +export function del(ids) { + return request({ + url: baseUrl + 'api/qiNiuContent', + method: 'delete', + data: ids + }) +} + +export default { del, download, sync } diff --git a/src/assets/401_images/401.gif b/src/assets/401_images/401.gif new file mode 100644 index 0000000..cd6e0d9 Binary files /dev/null and b/src/assets/401_images/401.gif differ diff --git a/src/assets/404_images/404.png b/src/assets/404_images/404.png new file mode 100644 index 0000000..3d8e230 Binary files /dev/null and b/src/assets/404_images/404.png differ diff --git a/src/assets/404_images/404.svg b/src/assets/404_images/404.svg new file mode 100644 index 0000000..56d5e51 --- /dev/null +++ b/src/assets/404_images/404.svg @@ -0,0 +1 @@ +blank canvas \ No newline at end of file diff --git a/src/assets/404_images/404_cloud.png b/src/assets/404_images/404_cloud.png new file mode 100644 index 0000000..c6281d0 Binary files /dev/null and b/src/assets/404_images/404_cloud.png differ diff --git a/src/assets/icons/index.js b/src/assets/icons/index.js new file mode 100644 index 0000000..2c6b309 --- /dev/null +++ b/src/assets/icons/index.js @@ -0,0 +1,9 @@ +import Vue from 'vue' +import SvgIcon from '@/components/SvgIcon'// svg component + +// register globally +Vue.component('svg-icon', SvgIcon) + +const req = require.context('./svg', false, /\.svg$/) +const requireAll = requireContext => requireContext.keys().map(requireContext) +requireAll(req) diff --git a/src/assets/icons/svg/404.svg b/src/assets/icons/svg/404.svg new file mode 100644 index 0000000..56d5e51 --- /dev/null +++ b/src/assets/icons/svg/404.svg @@ -0,0 +1 @@ +blank canvas \ No newline at end of file diff --git a/src/assets/icons/svg/Steve-Jobs.svg b/src/assets/icons/svg/Steve-Jobs.svg new file mode 100644 index 0000000..53843e2 --- /dev/null +++ b/src/assets/icons/svg/Steve-Jobs.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/aircraft.svg b/src/assets/icons/svg/aircraft.svg new file mode 100644 index 0000000..42b0eee --- /dev/null +++ b/src/assets/icons/svg/aircraft.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/alipay.svg b/src/assets/icons/svg/alipay.svg new file mode 100644 index 0000000..9138981 --- /dev/null +++ b/src/assets/icons/svg/alipay.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/anq.svg b/src/assets/icons/svg/anq.svg new file mode 100644 index 0000000..a466608 --- /dev/null +++ b/src/assets/icons/svg/anq.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/app.svg b/src/assets/icons/svg/app.svg new file mode 100644 index 0000000..0796da3 --- /dev/null +++ b/src/assets/icons/svg/app.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/backup.svg b/src/assets/icons/svg/backup.svg new file mode 100644 index 0000000..a3272a4 --- /dev/null +++ b/src/assets/icons/svg/backup.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/chain.svg b/src/assets/icons/svg/chain.svg new file mode 100644 index 0000000..ed3317f --- /dev/null +++ b/src/assets/icons/svg/chain.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/chart.svg b/src/assets/icons/svg/chart.svg new file mode 100644 index 0000000..27728fb --- /dev/null +++ b/src/assets/icons/svg/chart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/codeConsole.svg b/src/assets/icons/svg/codeConsole.svg new file mode 100644 index 0000000..672ec6e --- /dev/null +++ b/src/assets/icons/svg/codeConsole.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/copy.svg b/src/assets/icons/svg/copy.svg new file mode 100644 index 0000000..836c30f --- /dev/null +++ b/src/assets/icons/svg/copy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/dashboard.svg b/src/assets/icons/svg/dashboard.svg new file mode 100644 index 0000000..5317d37 --- /dev/null +++ b/src/assets/icons/svg/dashboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/database.svg b/src/assets/icons/svg/database.svg new file mode 100644 index 0000000..7fbad9b --- /dev/null +++ b/src/assets/icons/svg/database.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/date.svg b/src/assets/icons/svg/date.svg new file mode 100644 index 0000000..0540e99 --- /dev/null +++ b/src/assets/icons/svg/date.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/deploy.svg b/src/assets/icons/svg/deploy.svg new file mode 100644 index 0000000..f4a1c56 --- /dev/null +++ b/src/assets/icons/svg/deploy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/dept.svg b/src/assets/icons/svg/dept.svg new file mode 100644 index 0000000..894e4bf --- /dev/null +++ b/src/assets/icons/svg/dept.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/dev.svg b/src/assets/icons/svg/dev.svg new file mode 100644 index 0000000..ed4d23c --- /dev/null +++ b/src/assets/icons/svg/dev.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/develop.svg b/src/assets/icons/svg/develop.svg new file mode 100644 index 0000000..e189223 --- /dev/null +++ b/src/assets/icons/svg/develop.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/dictionary.svg b/src/assets/icons/svg/dictionary.svg new file mode 100644 index 0000000..6e83c43 --- /dev/null +++ b/src/assets/icons/svg/dictionary.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/doc.svg b/src/assets/icons/svg/doc.svg new file mode 100644 index 0000000..9160de8 --- /dev/null +++ b/src/assets/icons/svg/doc.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/download.svg b/src/assets/icons/svg/download.svg new file mode 100644 index 0000000..0243c6a --- /dev/null +++ b/src/assets/icons/svg/download.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/edit.svg b/src/assets/icons/svg/edit.svg new file mode 100644 index 0000000..d26101f --- /dev/null +++ b/src/assets/icons/svg/edit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/education.svg b/src/assets/icons/svg/education.svg new file mode 100644 index 0000000..7bfb01d --- /dev/null +++ b/src/assets/icons/svg/education.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/email.svg b/src/assets/icons/svg/email.svg new file mode 100644 index 0000000..f1cf3ae --- /dev/null +++ b/src/assets/icons/svg/email.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/error.svg b/src/assets/icons/svg/error.svg new file mode 100644 index 0000000..fd935da --- /dev/null +++ b/src/assets/icons/svg/error.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/exit-fullscreen.svg b/src/assets/icons/svg/exit-fullscreen.svg new file mode 100644 index 0000000..485c128 --- /dev/null +++ b/src/assets/icons/svg/exit-fullscreen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/fullscreen.svg b/src/assets/icons/svg/fullscreen.svg new file mode 100644 index 0000000..0e86b6f --- /dev/null +++ b/src/assets/icons/svg/fullscreen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/fwb.svg b/src/assets/icons/svg/fwb.svg new file mode 100644 index 0000000..59933fc --- /dev/null +++ b/src/assets/icons/svg/fwb.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/github.svg b/src/assets/icons/svg/github.svg new file mode 100644 index 0000000..8145e95 --- /dev/null +++ b/src/assets/icons/svg/github.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/gonggao.svg b/src/assets/icons/svg/gonggao.svg new file mode 100644 index 0000000..22aed08 --- /dev/null +++ b/src/assets/icons/svg/gonggao.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/icon.svg b/src/assets/icons/svg/icon.svg new file mode 100644 index 0000000..82fbdd9 --- /dev/null +++ b/src/assets/icons/svg/icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/image.svg b/src/assets/icons/svg/image.svg new file mode 100644 index 0000000..16d572f --- /dev/null +++ b/src/assets/icons/svg/image.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/index.svg b/src/assets/icons/svg/index.svg new file mode 100644 index 0000000..fdb3826 --- /dev/null +++ b/src/assets/icons/svg/index.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/international.svg b/src/assets/icons/svg/international.svg new file mode 100644 index 0000000..dd98b26 --- /dev/null +++ b/src/assets/icons/svg/international.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/assets/icons/svg/ipvisits.svg b/src/assets/icons/svg/ipvisits.svg new file mode 100644 index 0000000..4ca473d --- /dev/null +++ b/src/assets/icons/svg/ipvisits.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/java.svg b/src/assets/icons/svg/java.svg new file mode 100644 index 0000000..e2effbb --- /dev/null +++ b/src/assets/icons/svg/java.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/kefu-log.svg b/src/assets/icons/svg/kefu-log.svg new file mode 100644 index 0000000..7925166 --- /dev/null +++ b/src/assets/icons/svg/kefu-log.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/left-1.svg b/src/assets/icons/svg/left-1.svg new file mode 100644 index 0000000..742fe43 --- /dev/null +++ b/src/assets/icons/svg/left-1.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/assets/icons/svg/left-11.svg b/src/assets/icons/svg/left-11.svg new file mode 100644 index 0000000..9175334 --- /dev/null +++ b/src/assets/icons/svg/left-11.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/assets/icons/svg/left-12.svg b/src/assets/icons/svg/left-12.svg new file mode 100644 index 0000000..44186ae --- /dev/null +++ b/src/assets/icons/svg/left-12.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/assets/icons/svg/left-13.svg b/src/assets/icons/svg/left-13.svg new file mode 100644 index 0000000..a96c1f1 --- /dev/null +++ b/src/assets/icons/svg/left-13.svg @@ -0,0 +1,14 @@ + + + 编组 10 + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/icons/svg/left-2.svg b/src/assets/icons/svg/left-2.svg new file mode 100644 index 0000000..df2b9d0 --- /dev/null +++ b/src/assets/icons/svg/left-2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/assets/icons/svg/left-3.svg b/src/assets/icons/svg/left-3.svg new file mode 100644 index 0000000..d02670e --- /dev/null +++ b/src/assets/icons/svg/left-3.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/assets/icons/svg/left-4.svg b/src/assets/icons/svg/left-4.svg new file mode 100644 index 0000000..059dd82 --- /dev/null +++ b/src/assets/icons/svg/left-4.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/assets/icons/svg/left-5.svg b/src/assets/icons/svg/left-5.svg new file mode 100644 index 0000000..d997349 --- /dev/null +++ b/src/assets/icons/svg/left-5.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/assets/icons/svg/left-6.svg b/src/assets/icons/svg/left-6.svg new file mode 100644 index 0000000..c80160a --- /dev/null +++ b/src/assets/icons/svg/left-6.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/assets/icons/svg/left-7.svg b/src/assets/icons/svg/left-7.svg new file mode 100644 index 0000000..1154088 --- /dev/null +++ b/src/assets/icons/svg/left-7.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/assets/icons/svg/left-8.svg b/src/assets/icons/svg/left-8.svg new file mode 100644 index 0000000..c58bfb5 --- /dev/null +++ b/src/assets/icons/svg/left-8.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/icons/svg/left-9.svg b/src/assets/icons/svg/left-9.svg new file mode 100644 index 0000000..2c6c67c --- /dev/null +++ b/src/assets/icons/svg/left-9.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/assets/icons/svg/link.svg b/src/assets/icons/svg/link.svg new file mode 100644 index 0000000..48197ba --- /dev/null +++ b/src/assets/icons/svg/link.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/list.svg b/src/assets/icons/svg/list.svg new file mode 100644 index 0000000..20259ed --- /dev/null +++ b/src/assets/icons/svg/list.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/lock.svg b/src/assets/icons/svg/lock.svg new file mode 100644 index 0000000..0f842ea --- /dev/null +++ b/src/assets/icons/svg/lock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/log.svg b/src/assets/icons/svg/log.svg new file mode 100644 index 0000000..4fefe74 --- /dev/null +++ b/src/assets/icons/svg/log.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/login.svg b/src/assets/icons/svg/login.svg new file mode 100644 index 0000000..cc5a854 --- /dev/null +++ b/src/assets/icons/svg/login.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/markdown.svg b/src/assets/icons/svg/markdown.svg new file mode 100644 index 0000000..7cd6747 --- /dev/null +++ b/src/assets/icons/svg/markdown.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/menu.svg b/src/assets/icons/svg/menu.svg new file mode 100644 index 0000000..e4360a0 --- /dev/null +++ b/src/assets/icons/svg/menu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/message.svg b/src/assets/icons/svg/message.svg new file mode 100644 index 0000000..14ca817 --- /dev/null +++ b/src/assets/icons/svg/message.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/mnt.svg b/src/assets/icons/svg/mnt.svg new file mode 100644 index 0000000..502a7c0 --- /dev/null +++ b/src/assets/icons/svg/mnt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/modular.svg b/src/assets/icons/svg/modular.svg new file mode 100644 index 0000000..9905be2 --- /dev/null +++ b/src/assets/icons/svg/modular.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/money.svg b/src/assets/icons/svg/money.svg new file mode 100644 index 0000000..c1580de --- /dev/null +++ b/src/assets/icons/svg/money.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/monitor.svg b/src/assets/icons/svg/monitor.svg new file mode 100644 index 0000000..fbf0a2f --- /dev/null +++ b/src/assets/icons/svg/monitor.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/nested.svg b/src/assets/icons/svg/nested.svg new file mode 100644 index 0000000..06713a8 --- /dev/null +++ b/src/assets/icons/svg/nested.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/password.svg b/src/assets/icons/svg/password.svg new file mode 100644 index 0000000..4ab451f --- /dev/null +++ b/src/assets/icons/svg/password.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/people.svg b/src/assets/icons/svg/people.svg new file mode 100644 index 0000000..2bd54ae --- /dev/null +++ b/src/assets/icons/svg/people.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/peoples.svg b/src/assets/icons/svg/peoples.svg new file mode 100644 index 0000000..2c91161 --- /dev/null +++ b/src/assets/icons/svg/peoples.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/permission.svg b/src/assets/icons/svg/permission.svg new file mode 100644 index 0000000..c4c7409 --- /dev/null +++ b/src/assets/icons/svg/permission.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/phone.svg b/src/assets/icons/svg/phone.svg new file mode 100644 index 0000000..da339f9 --- /dev/null +++ b/src/assets/icons/svg/phone.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/qiniu.svg b/src/assets/icons/svg/qiniu.svg new file mode 100644 index 0000000..c2f9f8b --- /dev/null +++ b/src/assets/icons/svg/qiniu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/qw-icon.svg b/src/assets/icons/svg/qw-icon.svg new file mode 100644 index 0000000..acb64e9 --- /dev/null +++ b/src/assets/icons/svg/qw-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/recommend.svg b/src/assets/icons/svg/recommend.svg new file mode 100644 index 0000000..60b73d4 --- /dev/null +++ b/src/assets/icons/svg/recommend.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/redis.svg b/src/assets/icons/svg/redis.svg new file mode 100644 index 0000000..bef111b --- /dev/null +++ b/src/assets/icons/svg/redis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/role.svg b/src/assets/icons/svg/role.svg new file mode 100644 index 0000000..76cb18f --- /dev/null +++ b/src/assets/icons/svg/role.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/search.svg b/src/assets/icons/svg/search.svg new file mode 100644 index 0000000..84233dd --- /dev/null +++ b/src/assets/icons/svg/search.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/server.svg b/src/assets/icons/svg/server.svg new file mode 100644 index 0000000..db6dcdf --- /dev/null +++ b/src/assets/icons/svg/server.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/shopping.svg b/src/assets/icons/svg/shopping.svg new file mode 100644 index 0000000..87513e7 --- /dev/null +++ b/src/assets/icons/svg/shopping.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/size.svg b/src/assets/icons/svg/size.svg new file mode 100644 index 0000000..ddb25b8 --- /dev/null +++ b/src/assets/icons/svg/size.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/skill.svg b/src/assets/icons/svg/skill.svg new file mode 100644 index 0000000..a3b7312 --- /dev/null +++ b/src/assets/icons/svg/skill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/source.svg b/src/assets/icons/svg/source.svg new file mode 100644 index 0000000..1c3a038 --- /dev/null +++ b/src/assets/icons/svg/source.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/sqlMonitor.svg b/src/assets/icons/svg/sqlMonitor.svg new file mode 100644 index 0000000..950a430 --- /dev/null +++ b/src/assets/icons/svg/sqlMonitor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/swagger.svg b/src/assets/icons/svg/swagger.svg new file mode 100644 index 0000000..ded7de8 --- /dev/null +++ b/src/assets/icons/svg/swagger.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/sys-tools.svg b/src/assets/icons/svg/sys-tools.svg new file mode 100644 index 0000000..324aa04 --- /dev/null +++ b/src/assets/icons/svg/sys-tools.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/system.svg b/src/assets/icons/svg/system.svg new file mode 100644 index 0000000..9333c60 --- /dev/null +++ b/src/assets/icons/svg/system.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/system1.svg b/src/assets/icons/svg/system1.svg new file mode 100644 index 0000000..37b0a0a --- /dev/null +++ b/src/assets/icons/svg/system1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/tab.svg b/src/assets/icons/svg/tab.svg new file mode 100644 index 0000000..b4b48e4 --- /dev/null +++ b/src/assets/icons/svg/tab.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/theme.svg b/src/assets/icons/svg/theme.svg new file mode 100644 index 0000000..5982a2f --- /dev/null +++ b/src/assets/icons/svg/theme.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/timing.svg b/src/assets/icons/svg/timing.svg new file mode 100644 index 0000000..f8fdc6d --- /dev/null +++ b/src/assets/icons/svg/timing.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/toker.svg b/src/assets/icons/svg/toker.svg new file mode 100644 index 0000000..281f72f --- /dev/null +++ b/src/assets/icons/svg/toker.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/tools.svg b/src/assets/icons/svg/tools.svg new file mode 100644 index 0000000..aba1a40 --- /dev/null +++ b/src/assets/icons/svg/tools.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/total.svg b/src/assets/icons/svg/total.svg new file mode 100644 index 0000000..7c5d19b --- /dev/null +++ b/src/assets/icons/svg/total.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/tree-table.svg b/src/assets/icons/svg/tree-table.svg new file mode 100644 index 0000000..8aafdb8 --- /dev/null +++ b/src/assets/icons/svg/tree-table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/tree.svg b/src/assets/icons/svg/tree.svg new file mode 100644 index 0000000..dd4b7dd --- /dev/null +++ b/src/assets/icons/svg/tree.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/unlock.svg b/src/assets/icons/svg/unlock.svg new file mode 100644 index 0000000..1219e41 --- /dev/null +++ b/src/assets/icons/svg/unlock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/user.svg b/src/assets/icons/svg/user.svg new file mode 100644 index 0000000..09d7a81 --- /dev/null +++ b/src/assets/icons/svg/user.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/user1.svg b/src/assets/icons/svg/user1.svg new file mode 100644 index 0000000..14ca51e --- /dev/null +++ b/src/assets/icons/svg/user1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/utilizationRate.svg b/src/assets/icons/svg/utilizationRate.svg new file mode 100644 index 0000000..0eaca41 --- /dev/null +++ b/src/assets/icons/svg/utilizationRate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/validCode.svg b/src/assets/icons/svg/validCode.svg new file mode 100644 index 0000000..a1feb74 --- /dev/null +++ b/src/assets/icons/svg/validCode.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/visits.svg b/src/assets/icons/svg/visits.svg new file mode 100644 index 0000000..8425662 --- /dev/null +++ b/src/assets/icons/svg/visits.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/web.svg b/src/assets/icons/svg/web.svg new file mode 100644 index 0000000..9c57415 --- /dev/null +++ b/src/assets/icons/svg/web.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/wechat.svg b/src/assets/icons/svg/wechat.svg new file mode 100644 index 0000000..c586e55 --- /dev/null +++ b/src/assets/icons/svg/wechat.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/weixin.svg b/src/assets/icons/svg/weixin.svg new file mode 100644 index 0000000..8dbcfa5 --- /dev/null +++ b/src/assets/icons/svg/weixin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/zujian.svg b/src/assets/icons/svg/zujian.svg new file mode 100644 index 0000000..2aba32f --- /dev/null +++ b/src/assets/icons/svg/zujian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svgo.yml b/src/assets/icons/svgo.yml new file mode 100644 index 0000000..d11906a --- /dev/null +++ b/src/assets/icons/svgo.yml @@ -0,0 +1,22 @@ +# replace default config + +# multipass: true +# full: true + +plugins: + + # - name + # + # or: + # - name: false + # - name: true + # + # or: + # - name: + # param1: 1 + # param2: 2 + +- removeAttrs: + attrs: + - 'fill' + - 'fill-rule' diff --git a/src/assets/images/1-png.png b/src/assets/images/1-png.png new file mode 100644 index 0000000..15f2c28 Binary files /dev/null and b/src/assets/images/1-png.png differ diff --git a/src/assets/images/2-png.png b/src/assets/images/2-png.png new file mode 100644 index 0000000..4728e34 Binary files /dev/null and b/src/assets/images/2-png.png differ diff --git a/src/assets/images/3-png.png b/src/assets/images/3-png.png new file mode 100644 index 0000000..6918f48 Binary files /dev/null and b/src/assets/images/3-png.png differ diff --git a/src/assets/images/Import-1.png b/src/assets/images/Import-1.png new file mode 100644 index 0000000..0b3c572 Binary files /dev/null and b/src/assets/images/Import-1.png differ diff --git a/src/assets/images/add-icon.png b/src/assets/images/add-icon.png new file mode 100644 index 0000000..3001fde Binary files /dev/null and b/src/assets/images/add-icon.png differ diff --git a/src/assets/images/av_icon.png b/src/assets/images/av_icon.png new file mode 100644 index 0000000..76d9c0f Binary files /dev/null and b/src/assets/images/av_icon.png differ diff --git a/src/assets/images/avatar.png b/src/assets/images/avatar.png new file mode 100644 index 0000000..997732a Binary files /dev/null and b/src/assets/images/avatar.png differ diff --git a/src/assets/images/bd_icon.png b/src/assets/images/bd_icon.png new file mode 100644 index 0000000..970415e Binary files /dev/null and b/src/assets/images/bd_icon.png differ diff --git a/src/assets/images/boxian.png b/src/assets/images/boxian.png new file mode 100644 index 0000000..62d71c0 Binary files /dev/null and b/src/assets/images/boxian.png differ diff --git a/src/assets/images/gd_icon.png b/src/assets/images/gd_icon.png new file mode 100644 index 0000000..594f403 Binary files /dev/null and b/src/assets/images/gd_icon.png differ diff --git a/src/assets/images/gonggao_icon.png b/src/assets/images/gonggao_icon.png new file mode 100644 index 0000000..7c38ae8 Binary files /dev/null and b/src/assets/images/gonggao_icon.png differ diff --git a/src/assets/images/h5-code.png b/src/assets/images/h5-code.png new file mode 100644 index 0000000..23cff03 Binary files /dev/null and b/src/assets/images/h5-code.png differ diff --git a/src/assets/images/huikuan_ic.png b/src/assets/images/huikuan_ic.png new file mode 100644 index 0000000..b0521da Binary files /dev/null and b/src/assets/images/huikuan_ic.png differ diff --git a/src/assets/images/internet-error.png b/src/assets/images/internet-error.png new file mode 100644 index 0000000..275e46a Binary files /dev/null and b/src/assets/images/internet-error.png differ diff --git a/src/assets/images/internrt-success.png b/src/assets/images/internrt-success.png new file mode 100644 index 0000000..5b0c14c Binary files /dev/null and b/src/assets/images/internrt-success.png differ diff --git a/src/assets/images/kf.png b/src/assets/images/kf.png new file mode 100644 index 0000000..cda1b5b Binary files /dev/null and b/src/assets/images/kf.png differ diff --git a/src/assets/images/log-login.png b/src/assets/images/log-login.png new file mode 100644 index 0000000..0f7ad0c Binary files /dev/null and b/src/assets/images/log-login.png differ diff --git a/src/assets/images/log-login1.png b/src/assets/images/log-login1.png new file mode 100644 index 0000000..b85f1c3 Binary files /dev/null and b/src/assets/images/log-login1.png differ diff --git a/src/assets/images/logo_f_m.jpg b/src/assets/images/logo_f_m.jpg new file mode 100644 index 0000000..fbf50ef Binary files /dev/null and b/src/assets/images/logo_f_m.jpg differ diff --git a/src/assets/images/logo_f_m.png b/src/assets/images/logo_f_m.png new file mode 100644 index 0000000..ab6c2b2 Binary files /dev/null and b/src/assets/images/logo_f_m.png differ diff --git a/src/assets/images/mm_ic.png b/src/assets/images/mm_ic.png new file mode 100644 index 0000000..041b363 Binary files /dev/null and b/src/assets/images/mm_ic.png differ diff --git a/src/assets/images/mp3.png b/src/assets/images/mp3.png new file mode 100644 index 0000000..3bb5dc4 Binary files /dev/null and b/src/assets/images/mp3.png differ diff --git a/src/assets/images/mp31.png b/src/assets/images/mp31.png new file mode 100644 index 0000000..6c37619 Binary files /dev/null and b/src/assets/images/mp31.png differ diff --git a/src/assets/images/msgicon.png b/src/assets/images/msgicon.png new file mode 100644 index 0000000..84f0c39 Binary files /dev/null and b/src/assets/images/msgicon.png differ diff --git a/src/assets/images/naozhong_icon.png b/src/assets/images/naozhong_icon.png new file mode 100644 index 0000000..408d10e Binary files /dev/null and b/src/assets/images/naozhong_icon.png differ diff --git a/src/assets/images/qianbao-bj.png b/src/assets/images/qianbao-bj.png new file mode 100644 index 0000000..6b67243 Binary files /dev/null and b/src/assets/images/qianbao-bj.png differ diff --git a/src/assets/images/qianbao-icon.png b/src/assets/images/qianbao-icon.png new file mode 100644 index 0000000..41d5866 Binary files /dev/null and b/src/assets/images/qianbao-icon.png differ diff --git a/src/assets/images/qwcode-h.png b/src/assets/images/qwcode-h.png new file mode 100644 index 0000000..01b1ee3 Binary files /dev/null and b/src/assets/images/qwcode-h.png differ diff --git a/src/assets/images/qwcode.png b/src/assets/images/qwcode.png new file mode 100644 index 0000000..1e2e1d3 Binary files /dev/null and b/src/assets/images/qwcode.png differ diff --git a/src/assets/images/sfz-f.png b/src/assets/images/sfz-f.png new file mode 100644 index 0000000..223f11c Binary files /dev/null and b/src/assets/images/sfz-f.png differ diff --git a/src/assets/images/sfz-z.png b/src/assets/images/sfz-z.png new file mode 100644 index 0000000..935ae24 Binary files /dev/null and b/src/assets/images/sfz-z.png differ diff --git a/src/assets/images/tanhao.png b/src/assets/images/tanhao.png new file mode 100644 index 0000000..41607de Binary files /dev/null and b/src/assets/images/tanhao.png differ diff --git a/src/assets/images/task-title.png b/src/assets/images/task-title.png new file mode 100644 index 0000000..1ebe19f Binary files /dev/null and b/src/assets/images/task-title.png differ diff --git a/src/assets/images/task_icon.png b/src/assets/images/task_icon.png new file mode 100644 index 0000000..97dfc9a Binary files /dev/null and b/src/assets/images/task_icon.png differ diff --git a/src/assets/images/top-h1.png b/src/assets/images/top-h1.png new file mode 100644 index 0000000..a344c98 Binary files /dev/null and b/src/assets/images/top-h1.png differ diff --git a/src/assets/images/top-h2.png b/src/assets/images/top-h2.png new file mode 100644 index 0000000..4077740 Binary files /dev/null and b/src/assets/images/top-h2.png differ diff --git a/src/assets/images/top-h3.png b/src/assets/images/top-h3.png new file mode 100644 index 0000000..2444f7d Binary files /dev/null and b/src/assets/images/top-h3.png differ diff --git a/src/assets/images/top.png b/src/assets/images/top.png new file mode 100644 index 0000000..d00df7a Binary files /dev/null and b/src/assets/images/top.png differ diff --git a/src/assets/images/uc.jpg b/src/assets/images/uc.jpg new file mode 100644 index 0000000..a7c4ee5 Binary files /dev/null and b/src/assets/images/uc.jpg differ diff --git a/src/assets/images/update.png b/src/assets/images/update.png new file mode 100644 index 0000000..64a43ce Binary files /dev/null and b/src/assets/images/update.png differ diff --git a/src/assets/images/wx-log.png b/src/assets/images/wx-log.png new file mode 100644 index 0000000..3cb5c61 Binary files /dev/null and b/src/assets/images/wx-log.png differ diff --git a/src/assets/images/yyzz.png b/src/assets/images/yyzz.png new file mode 100644 index 0000000..5597511 Binary files /dev/null and b/src/assets/images/yyzz.png differ diff --git a/src/assets/images/zanwu.png b/src/assets/images/zanwu.png new file mode 100644 index 0000000..11806c8 Binary files /dev/null and b/src/assets/images/zanwu.png differ diff --git a/src/assets/images/zfb_ic.png b/src/assets/images/zfb_ic.png new file mode 100644 index 0000000..61f4225 Binary files /dev/null and b/src/assets/images/zfb_ic.png differ diff --git a/src/assets/styles/btn.scss b/src/assets/styles/btn.scss new file mode 100644 index 0000000..8f47f2c --- /dev/null +++ b/src/assets/styles/btn.scss @@ -0,0 +1,99 @@ +@import 'variables'; + +@mixin colorBtn($color) { + background: $color; + + &:hover { + color: $color; + + &:before, + &:after { + background: $color; + } + } +} + +.blue-btn { + @include colorBtn($blue) +} + +.light-blue-btn { + @include colorBtn($light-blue) +} + +.red-btn { + @include colorBtn($red) +} + +.pink-btn { + @include colorBtn($pink) +} + +.green-btn { + @include colorBtn($green) +} + +.tiffany-btn { + @include colorBtn($tiffany) +} + +.yellow-btn { + @include colorBtn($yellow) +} + +.pan-btn { + font-size: 14px; + color: #fff; + padding: 14px 36px; + border-radius: 8px; + border: none; + outline: none; + transition: 600ms ease all; + position: relative; + display: inline-block; + + &:hover { + background: #fff; + + &:before, + &:after { + width: 100%; + transition: 600ms ease all; + } + } + + &:before, + &:after { + content: ''; + position: absolute; + top: 0; + right: 0; + height: 2px; + width: 0; + transition: 400ms ease all; + } + + &::after { + right: inherit; + top: inherit; + left: 0; + bottom: 0; + } +} + +.custom-button { + display: inline-block; + line-height: 1; + white-space: nowrap; + cursor: pointer; + background: #fff; + color: #fff; + -webkit-appearance: none; + text-align: center; + box-sizing: border-box; + outline: 0; + margin: 0; + padding: 10px 15px; + font-size: 14px; + border-radius: 4px; +} diff --git a/src/assets/styles/common.scss b/src/assets/styles/common.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/assets/styles/eladmin.scss b/src/assets/styles/eladmin.scss new file mode 100644 index 0000000..c14e062 --- /dev/null +++ b/src/assets/styles/eladmin.scss @@ -0,0 +1,117 @@ +.head-container { + padding-bottom: 10px; + .filter-item { + display: inline-block; + vertical-align: middle; + margin: 0 3px 10px 0; + input { + height: 30.5px; + line-height: 30.5px; + } + } + .el-form-item-label { + margin: 0 3px 9px 0; + display: inline-block; + text-align: right; + vertical-align: middle; + font-size: 14px; + color: #606266; + line-height: 30.5px; + padding: 0 7px 0 7px; + } + .el-button+.el-button { + margin-left: 0 !important; + } + .el-select__caret.el-input__icon.el-icon-arrow-up{ + line-height: 30.5px; + } + .date-item { + display: inline-block; + vertical-align: middle; + margin-bottom: 10px; + height: 30.5px !important; + width: 230px !important; + } +} +.el-avatar { + display: inline-block; + text-align: center; + background: #ccc; + color: #fff; + white-space: nowrap; + position: relative; + overflow: hidden; + vertical-align: middle; + width: 32px; + height: 32px; + line-height: 32px; + border-radius: 16px; +} + +.logo-con{ + height: 60px; + padding: 13px 0 0; + img{ + height: 32px; + width: 135px; + display: block; + //margin: 0 auto; + } +} + +#el-login-footer { + height: 40px; + line-height: 40px; + position: fixed; + bottom: 0; + width: 100%; + text-align: center; + color: rgba(0,0,0,.4); + font-family: Arial, serif; + font-size: 12px; + letter-spacing: 1px; +} + +#el-main-footer { + background: none repeat scroll 0 0 white; + border-top: 1px solid #e7eaec; + overflow: hidden; + padding: 10px 6px 0 6px; + height: 33px; + font-size: 0.7rem !important; + color: #7a8b9a; + letter-spacing: 0.8px; + font-family: Arial, sans-serif !important; + position: fixed; + bottom: 0; + z-index: 99; + width: 100%; +} +.eladmin-upload { + border: 1px dashed #c0ccda; + border-radius: 5px; + height: 45px; + line-height: 45px; + width: 368px; +} +.my-blockquote{ + margin: 0 0 10px; + padding: 15px; + line-height: 22px; + border-left: 5px solid #00437B; + border-radius: 0 2px 2px 0; + background-color: #f2f2f2; +} +.my-code{ + position: relative; + padding: 15px; + line-height: 20px; + border-left: 5px solid #ddd; + color: #333; + font-family: Courier New, serif; + font-size: 12px +} + +.el-tabs{ + margin-bottom: 25px; +} \ No newline at end of file diff --git a/src/assets/styles/element-ui.scss b/src/assets/styles/element-ui.scss new file mode 100644 index 0000000..8f7881c --- /dev/null +++ b/src/assets/styles/element-ui.scss @@ -0,0 +1,79 @@ +// cover some element-ui styles + +.el-breadcrumb__inner, +.el-breadcrumb__inner a { + font-weight: 400 !important; +} + +.el-upload { + input[type="file"] { + display: none !important; + } +} + +.el-upload__input { + display: none; +} + +.cell { + .el-tag { + margin-right: 0; + } +} + +.small-padding { + .cell { + padding-left: 5px; + padding-right: 5px; + } +} + +.fixed-width { + .el-button--mini { + padding: 7px 10px; + width: 60px; + } +} + +.status-col { + .cell { + padding: 0 10px; + text-align: center; + + .el-tag { + margin-right: 0; + } + } +} + +// to fixed https://github.com/ElemeFE/element/issues/2461 +.el-dialog { + transform: none; + left: 0; + position: relative; + margin: 0 auto; +} + +// refine element ui upload +.upload-container { + .el-upload { + width: 100%; + + .el-upload-dragger { + width: 100%; + height: 200px; + } + } +} + +// dropdown +.el-dropdown-menu { + a { + display: block + } +} + +// fix date-picker ui bug in filter-item +.el-range-editor.el-input__inner { + display: inline-flex !important; +} diff --git a/src/assets/styles/element-variables.scss b/src/assets/styles/element-variables.scss new file mode 100644 index 0000000..a4f8c4a --- /dev/null +++ b/src/assets/styles/element-variables.scss @@ -0,0 +1,31 @@ +/** +* I think element-ui's default theme color is too light for long-term use. +* So I modified the default color and you can modify it to your liking. +**/ + +/* theme color */ +$--color-primary: #1890ff; +$--color-success: #13ce66; +$--color-warning: #FFBA00; +$--color-danger: #ff4949; +// $--color-info: #1E1E1E; + +$--button-font-weight: 400; + +// $--color-text-regular: #1f2d3d; + +$--border-color-light: #dfe4ed; +$--border-color-lighter: #e6ebf5; + +$--table-border:1px solid#dfe6ec; + +/* icon font path, required */ +$--font-path: '~element-ui/lib/theme-chalk/fonts'; + +@import "../../../node_modules/element-ui/packages/theme-chalk/src/index"; + +// the :export directive is the magic sauce for webpack +// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass +:export { + theme: $--color-primary; +} diff --git a/src/assets/styles/index.scss b/src/assets/styles/index.scss new file mode 100644 index 0000000..d6d0e6d --- /dev/null +++ b/src/assets/styles/index.scss @@ -0,0 +1,383 @@ +@import 'variables'; +@import 'mixin'; +@import 'transition'; +@import 'element-ui'; +@import 'sidebar'; +@import 'btn'; +@import 'eladmin'; + +body { + height: 100%; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; + font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif; +} +.el-tooltip__popper { + max-width: 60%!important; //宽度可根据自己需要进行设置 +} +label { + font-weight: 700; +} + +html { + height: 100%; + box-sizing: border-box; +} + +#app { + height: 100%; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +.no-padding { + padding: 0 !important; +} + +.padding-content { + padding: 4px 0; +} + +a:focus, +a:active { + outline: none; +} + +a, +a:focus, +a:hover { + cursor: pointer; + color: inherit; + text-decoration: none; +} + +.color33 { + color: #333!important; +} +div:focus { + outline: none; +} +.fs-12 { + font-size: 12px; +} +.fs-14 { + font-size: 14px; +} +.fs-15 { + font-size: 15px; +} +.fs-16 { + font-size: 16px!important; +} +.fs-18 { + font-size: 18px!important; +} + +.fr { + float: right; +} +.fl { + float: left; +} +.pr-5 { + padding-right: 5px; +} +.pb-10{ + padding-bottom: 10px!important; +} +.pl-5 { + padding-left: 5px!important; +} +.pl-10 { + padding-left: 10px!important; +} +.mt-5{ + margin-top: 5px!important; +} +.mt-10{ + margin-top: 10px!important; +} +.mt-15{ + margin-top: 15px!important; +} +.mb-5{ + margin-bottom: 5px; +} +.mb-10{ + margin-bottom: 10px; +} +.mb-15{ + margin-bottom: 15px!important; +} +.ml-0 { + margin-left: 0px!important; +} +.ml-5 { + margin-left: 5px!important; +} +.ml-10 { + margin-left: 10px!important; +} +.ml-15 { + margin-left: 15px!important; +} +.mr-5 { + margin-right: 5px!important; +} +.mr-10 { + margin-right: 10px!important; +} +.block { + display: block; +} +.inline-block { + display: inline-block; +} +.inline-flex { + display: inline-flex; +} +.pointer { + cursor: pointer; +} + +.clearfix { + &:after { + visibility: hidden; + display: block; + font-size: 0; + content: " "; + clear: both; + height: 0; + } +} + +aside { + background: #eef1f6; + padding: 8px 24px; + margin-bottom: 20px; + border-radius: 2px; + display: block; + line-height: 32px; + font-size: 16px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + color: #2c3e50; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + a { + color: #337ab7; + cursor: pointer; + + &:hover { + color: rgb(32, 160, 255); + } + } +} + +//main-container全局样式 +.app-container { + padding: 20px; + margin: 20px; + background: #fff; +} + +.components-container { + margin: 30px 50px; + position: relative; +} + +.pagination-container { + margin-top: 30px; +} + +.text-center { + text-align: center +} + +.sub-navbar { + height: 50px; + line-height: 50px; + position: relative; + width: 100%; + text-align: right; + padding-right: 20px; + transition: 600ms ease position; + background: linear-gradient(90deg, rgba(32, 182, 249, 1) 0%, rgba(32, 182, 249, 1) 0%, rgba(33, 120, 241, 1) 100%, rgba(33, 120, 241, 1) 100%); + + .subtitle { + font-size: 20px; + color: #fff; + } + + &.draft { + background: #d0d0d0; + } + + &.deleted { + background: #d0d0d0; + } +} + +.link-type, +.link-type:focus { + color: #337ab7; + cursor: pointer; + + &:hover { + color: rgb(32, 160, 255); + } +} + +//refine vue-multiselect plugin +.multiselect { + line-height: 16px; +} + +.multiselect--active { + z-index: 1000 !important; +} + +.margin-auto { + margin-left: auto; + margin-right: auto; + width: max-content; +} +.text-hide { + overflow: hidden; + text-overflow: ellipsis; + white-space:nowrap +} +.text-hide-2 { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + word-break: break-all; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} +.u-flex { + display: flex; + align-items: center; +} +.flex-start { + align-items: flex-start; +} +.u-flex-between { + justify-content: space-between; +} +.u-flex-center { + justify-content: center; +} +.u-flex-around { + justify-content: space-around; +} +.u-flex-end { + justify-content: flex-end; +} +.u-flex-wrap { + flex-wrap: wrap; +} +.flex-1 { + flex: 1; +} +.flex-baseline{ + align-items: baseline; +} +.icon-currency { + font-size: 16px; + color: rgba(0,0,0,0.65); +} +.el-table th.el-table__cell { + background: #FAFAFA; + text-align: center; +} +.color0{ + background-color: #FEF0F0!important; +} +.color1{ + background-color: #EDF4FF!important; +} +.color2{ + background-color: #ECF5FF!important; +} +.color3{ + background-color: #FDF6EC!important; +} +.color4{ + background-color: #F0F9EB!important; +} +.color5{ + background-color: #D7DEED!important; +} +.color6{ + background-color: #0084FF!important; +} +// 上方蓝色横条 +.tableToplink { + background: #E6F7FF; + height: 35px; + line-height: 35px; + font-size: 12px; + padding: 0 15px; + margin-top: 10px; + span { + color: #1890FF; + margin: 0 8px; + } +} +// 圆点 +.upload-spot { + position: absolute; + margin: auto; + top: 0px; + bottom: 0px; + left: 0; + width: 6px; + height: 6px; + background: rgba(0,0,0,0.25); + border-radius: 50%; +} +.y-green { + background: #52C41A; +} +.y-red { + background: #F5222D; +} +.c-red { + color: #F5222D; +} +.y-label{ + min-width: 80px; + float: none; + display: inline-block; + font-size: 14px; + color: rgba(0,0,0,0.85); + vertical-align: middle; + font-weight: 500; + margin: 0 0 10px 0; + text-align: right; +} +// 滚动条 +.sim-cont{ + max-height: 100%; + overflow: auto; +} +.sim-cont::-webkit-scrollbar { /*滚动条整体样式*/ + width: 5px; + height: 3px; +} +.sim-cont::-webkit-scrollbar-thumb { /*滚动条里面小方块样式*/ + border-radius: 100px; + -webkit-box-shadow: inset 0 0 5px rgba(151, 151, 151, 0.2); + background:rgba(0,0,0,0.1);; +} +.sim-cont::-webkit-scrollbar-track { /*滚动条里面轨道样式*/ + -webkit-box-shadow: inset 0 0 5px rgba(223, 223, 223, 0.2); + border-radius: 100px; + background: rgba(0,0,0,0.1); +} \ No newline at end of file diff --git a/src/assets/styles/mixin.scss b/src/assets/styles/mixin.scss new file mode 100644 index 0000000..06fa061 --- /dev/null +++ b/src/assets/styles/mixin.scss @@ -0,0 +1,66 @@ +@mixin clearfix { + &:after { + content: ""; + display: table; + clear: both; + } +} + +@mixin scrollBar { + &::-webkit-scrollbar-track-piece { + background: #d3dce6; + } + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #99a9bf; + border-radius: 20px; + } +} + +@mixin relative { + position: relative; + width: 100%; + height: 100%; +} + +@mixin pct($pct) { + width: #{$pct}; + position: relative; + margin: 0 auto; +} + +@mixin triangle($width, $height, $color, $direction) { + $width: $width/2; + $color-border-style: $height solid $color; + $transparent-border-style: $width solid transparent; + height: 0; + width: 0; + + @if $direction==up { + border-bottom: $color-border-style; + border-left: $transparent-border-style; + border-right: $transparent-border-style; + } + + @else if $direction==right { + border-left: $color-border-style; + border-top: $transparent-border-style; + border-bottom: $transparent-border-style; + } + + @else if $direction==down { + border-top: $color-border-style; + border-left: $transparent-border-style; + border-right: $transparent-border-style; + } + + @else if $direction==left { + border-right: $color-border-style; + border-top: $transparent-border-style; + border-bottom: $transparent-border-style; + } +} diff --git a/src/assets/styles/sidebar.scss b/src/assets/styles/sidebar.scss new file mode 100644 index 0000000..755567e --- /dev/null +++ b/src/assets/styles/sidebar.scss @@ -0,0 +1,223 @@ +#app { + + .main-container { + min-height: 100%; + transition: margin-left .28s; + margin-left: $sideBarWidth; + position: relative; + } + + .sidebar-container { + transition: width 0.28s; + width: $sideBarWidth !important; + background-color: $menuBg; + height: 100%; + position: fixed; + font-size: 0; + top: 0; + bottom: 0; + left: 0; + z-index: 1001; + overflow: hidden; + + // reset element-ui css + .horizontal-collapse-transition { + transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out; + } + + .scrollbar-wrapper { + overflow-x: hidden !important; + } + + .el-scrollbar__bar.is-vertical { + right: 0; + } + + .el-scrollbar { + height: 100%; + } + + &.has-logo { + box-shadow: 2px 0px 6px 0px rgb(28 31 35 / 8%); + .el-scrollbar { + height: calc(100% - 50px); + } + } + + .is-horizontal { + display: none; + } + + a { + display: inline-block; + width: 100%; + overflow: hidden; + } + + .svg-icon { + margin-right: 16px; + } + + .el-menu { + border: none; + height: 100%; + width: 100% !important; + } + + // menu hover + .submenu-title-noDropdown, + .el-submenu__title { + &:hover { + background-color: $menuHover !important; + } + } + + .is-active>.el-submenu__title { + color: $subMenuActiveText !important; + } + + & .nest-menu .el-submenu>.el-submenu__title, + & .el-submenu .el-menu-item { + min-width: $sideBarWidth !important; + background-color: $subMenuBg !important; + + &:hover { + background-color: $subMenuHover !important; + } + } + } + + .hideSidebar { + .sidebar-container { + width: 54px !important; + } + + .main-container { + margin-left: 54px; + } + + .submenu-title-noDropdown { + padding: 0 !important; + position: relative; + + .el-tooltip { + padding: 0 !important; + + .svg-icon { + margin-left: 20px; + } + } + } + + .el-submenu { + overflow: hidden; + + &>.el-submenu__title { + padding: 0 !important; + + .svg-icon { + margin-left: 20px; + } + + .el-submenu__icon-arrow { + display: none; + } + } + } + + .el-menu--collapse { + .el-submenu { + &>.el-submenu__title { + &>span { + height: 0; + width: 0; + overflow: hidden; + visibility: hidden; + display: inline-block; + } + } + } + } + } + + .el-menu--collapse .el-menu .el-submenu { + min-width: $sideBarWidth !important; + } + + // mobile responsive + .mobile { + .main-container { + margin-left: 0; + } + + .sidebar-container { + transition: transform .28s; + width: $sideBarWidth !important; + } + + &.hideSidebar { + .sidebar-container { + pointer-events: none; + transition-duration: 0.3s; + transform: translate3d(-$sideBarWidth, 0, 0); + } + } + } + + .withoutAnimation { + + .main-container, + .sidebar-container { + transition: none; + } + } +} + +.el-button--primary { + background-color: #246FDC; + border-color: #246FDC; +} +.el-button--text { + color: #246FDC; +} +.el-tabs__item.is-active { + color: #246FDC; +} +.el-tabs__active-bar { + background-color: #246FDC; +} +// when menu collapsed +.el-menu--vertical { + &>.el-menu { + .svg-icon { + margin-right: 16px; + } + } + + .nest-menu .el-submenu>.el-submenu__title, + .el-menu-item { + &:hover { + // you can use $subMenuHover + background-color: $menuHover !important; + } + } + + // the scroll bar appears when the subMenu is too long + >.el-menu--popup { + max-height: 100vh; + overflow-y: auto; + + &::-webkit-scrollbar-track-piece { + background: #d3dce6; + } + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #99a9bf; + border-radius: 20px; + } + } +} diff --git a/src/assets/styles/transition.scss b/src/assets/styles/transition.scss new file mode 100644 index 0000000..4cb27cc --- /dev/null +++ b/src/assets/styles/transition.scss @@ -0,0 +1,48 @@ +// global transition css + +/* fade */ +.fade-enter-active, +.fade-leave-active { + transition: opacity 0.28s; +} + +.fade-enter, +.fade-leave-active { + opacity: 0; +} + +/* fade-transform */ +.fade-transform-leave-active, +.fade-transform-enter-active { + transition: all .5s; +} + +.fade-transform-enter { + opacity: 0; + transform: translateX(-30px); +} + +.fade-transform-leave-to { + opacity: 0; + transform: translateX(30px); +} + +/* breadcrumb transition */ +.breadcrumb-enter-active, +.breadcrumb-leave-active { + transition: all .5s; +} + +.breadcrumb-enter, +.breadcrumb-leave-active { + opacity: 0; + transform: translateX(20px); +} + +.breadcrumb-move { + transition: all .5s; +} + +.breadcrumb-leave-active { + position: absolute; +} diff --git a/src/assets/styles/variables.scss b/src/assets/styles/variables.scss new file mode 100644 index 0000000..b3ead13 --- /dev/null +++ b/src/assets/styles/variables.scss @@ -0,0 +1,35 @@ +// base color +$blue:#324157; +$light-blue:#3A71A8; +$red:#C03639; +$pink: #E65D6E; +$green: #30B08F; +$tiffany: #4AB7BD; +$yellow:#FEC171; +$panGreen: #30B08F; + +// sidebar +$menuText:#1C1F23; +$menuActiveText:#246FDC; +$subMenuActiveText:#246FDC; // https://github.com/ElemeFE/element/issues/12951 + +$menuBg:#FFFFFF; +$menuHover:#E4EDFB; + +$subMenuBg:#FFFFFF; +$subMenuHover: #E4EDFB; + +$sideBarWidth: 212px; + +// the :export directive is the magic sauce for webpack +// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass +:export { + menuText: $menuText; + menuActiveText: $menuActiveText; + subMenuActiveText: $subMenuActiveText; + menuBg: $menuBg; + menuHover: $menuHover; + subMenuBg: $subMenuBg; + subMenuHover: $subMenuHover; + sideBarWidth: $sideBarWidth; +} diff --git a/src/components/Breadcrumb/index.vue b/src/components/Breadcrumb/index.vue new file mode 100644 index 0000000..204ea59 --- /dev/null +++ b/src/components/Breadcrumb/index.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/Crud/CRUD.operation copy.vue b/src/components/Crud/CRUD.operation copy.vue new file mode 100644 index 0000000..68a62a1 --- /dev/null +++ b/src/components/Crud/CRUD.operation copy.vue @@ -0,0 +1,330 @@ + + + + diff --git a/src/components/Crud/CRUD.operation.vue b/src/components/Crud/CRUD.operation.vue new file mode 100644 index 0000000..d1a5734 --- /dev/null +++ b/src/components/Crud/CRUD.operation.vue @@ -0,0 +1,288 @@ + + + + diff --git a/src/components/Crud/Pagination.vue b/src/components/Crud/Pagination.vue new file mode 100644 index 0000000..aa4dd41 --- /dev/null +++ b/src/components/Crud/Pagination.vue @@ -0,0 +1,31 @@ + + + + + diff --git a/src/components/Crud/RR.operation.vue b/src/components/Crud/RR.operation.vue new file mode 100644 index 0000000..76dafe5 --- /dev/null +++ b/src/components/Crud/RR.operation.vue @@ -0,0 +1,37 @@ + + + + diff --git a/src/components/Crud/UD.operation.vue b/src/components/Crud/UD.operation.vue new file mode 100644 index 0000000..fc2e13b --- /dev/null +++ b/src/components/Crud/UD.operation.vue @@ -0,0 +1,189 @@ + + + + diff --git a/src/components/Crud/crud.js b/src/components/Crud/crud.js new file mode 100644 index 0000000..d899f3d --- /dev/null +++ b/src/components/Crud/crud.js @@ -0,0 +1,890 @@ +import { initData, download } from '@/api/data' +import { parseTime, downloadFile } from '@/utils/index' +import Vue from 'vue' + +/** + * CRUD配置 + * @author moxun + * @param {*} options
+ * @return crud instance. + * @example + * 要使用多crud时,请在关联crud的组件处使用crud-tag进行标记,如: + */ +function CRUD(options) { + const defaultOptions = { + tag: 'default', + // id字段名 + idField: 'id', + // 标题 + title: '', + // 请求数据的url + url: '', + // 表格数据 + data: [], + // 选择项 + selections: [], + // 待查询的对象 + query: {}, + // 查询数据的参数 + params: {}, + // Form 表单 + form: {}, + // 重置表单 + defaultForm: () => {}, + // 排序规则,默认 id 降序, 支持多字段排序 ['id,desc', 'createTime,asc'] + sort: ['id,desc'], + // 等待时间 + time: 50, + // CRUD Method + crudMethod: { + add: (form) => {}, + del: (id) => {}, + edit: (form) => {}, + get: (id) => {} + }, + // 主页操作栏显示哪些按钮 + optShow: { + add: true, + edit: true, + del: true, + download: true, + reset: true + }, + // 自定义一些扩展属性 + props: {}, + // 在主页准备 + queryOnPresenterCreated: true, + // 调试开关 + debug: false + } + options = mergeOptions(defaultOptions, options) + const data = { + ...options, + // 记录数据状态 + dataStatus: {}, + status: { + add: CRUD.STATUS.NORMAL, + edit: CRUD.STATUS.NORMAL, + // 添加或编辑状态 + get cu() { + if (this.add === CRUD.STATUS.NORMAL && this.edit === CRUD.STATUS.NORMAL) { + return CRUD.STATUS.NORMAL + } else if (this.add === CRUD.STATUS.PREPARED || this.edit === CRUD.STATUS.PREPARED) { + return CRUD.STATUS.PREPARED + } else if (this.add === CRUD.STATUS.PROCESSING || this.edit === CRUD.STATUS.PROCESSING) { + return CRUD.STATUS.PROCESSING + } + throw new Error('wrong crud\'s cu status') + }, + // 标题 + get title() { + return this.add > CRUD.STATUS.NORMAL ? `新增${crud.title}` : this.edit > CRUD.STATUS.NORMAL ? `编辑${crud.title}` : crud.title + } + }, + msg: { + submit: '提交成功', + add: '新增成功', + edit: '编辑成功', + del: '删除成功' + }, + page: { + // 页码 + page: 0, + // 每页数据条数 + size: 10, + // 总数据条数 + total: 0 + }, + // 整体loading + loading: false, + // 导出的 Loading + downloadLoading: false, + // 删除的 Loading + delAllLoading: false + } + const methods = { + /** + * 通用的提示 + */ + submitSuccessNotify() { + crud.notify(crud.msg.submit, CRUD.NOTIFICATION_TYPE.SUCCESS) + }, + addSuccessNotify() { + crud.notify(crud.msg.add, CRUD.NOTIFICATION_TYPE.SUCCESS) + }, + editSuccessNotify() { + crud.notify(crud.msg.edit, CRUD.NOTIFICATION_TYPE.SUCCESS) + }, + delSuccessNotify() { + crud.notify(crud.msg.del, CRUD.NOTIFICATION_TYPE.SUCCESS) + }, + // 搜索 + toQuery() { + crud.page.page = 1 + crud.refresh() + }, + // 刷新 + refresh() { + if (!callVmHook(crud, CRUD.HOOK.beforeRefresh)) { + return + } + return new Promise((resolve, reject) => { + crud.loading = true + // 请求数据 + initData(crud.url, crud.getQueryParams()).then(data => { + const table = crud.getTable() + if (table && table.lazy) { // 懒加载子节点数据,清掉已加载的数据 + table.store.states.treeData = {} + table.store.states.lazyTreeNodeMap = {} + } + crud.page.total = data.totalElements + crud.data = data.content + crud.resetDataStatus() + // time 毫秒后显示表格 + setTimeout(() => { + crud.loading = false + callVmHook(crud, CRUD.HOOK.afterRefresh) + }, crud.time) + resolve(data) + }).catch(err => { + crud.loading = false + reject(err) + }) + }) + }, + /** + * 启动添加 + */ + toAdd() { + crud.resetForm() + if (!(callVmHook(crud, CRUD.HOOK.beforeToAdd, crud.form) && callVmHook(crud, CRUD.HOOK.beforeToCU, crud.form))) { + return + } + crud.status.add = CRUD.STATUS.PREPARED + callVmHook(crud, CRUD.HOOK.afterToAdd, crud.form) + callVmHook(crud, CRUD.HOOK.afterToCU, crud.form) + }, + /** + * 启动编辑 + * @param {*} data 数据项 + */ + toEdit(data) { + crud.resetForm(JSON.parse(JSON.stringify(data))) + if (!(callVmHook(crud, CRUD.HOOK.beforeToEdit, crud.form) && callVmHook(crud, CRUD.HOOK.beforeToCU, crud.form))) { + return + } + crud.status.edit = CRUD.STATUS.PREPARED + crud.getDataStatus(crud.getDataId(data)).edit = CRUD.STATUS.PREPARED + callVmHook(crud, CRUD.HOOK.afterToEdit, crud.form) + callVmHook(crud, CRUD.HOOK.afterToCU, crud.form) + }, + /** + * 启动删除 + * @param {*} data 数据项 + */ + toDelete(data) { + crud.getDataStatus(crud.getDataId(data)).delete = CRUD.STATUS.PREPARED + }, + /** + * 取消删除 + * @param {*} data 数据项 + */ + cancelDelete(data) { + if (!callVmHook(crud, CRUD.HOOK.beforeDeleteCancel, data)) { + return + } + crud.getDataStatus(crud.getDataId(data)).delete = CRUD.STATUS.NORMAL + callVmHook(crud, CRUD.HOOK.afterDeleteCancel, data) + }, + /** + * 取消新增/编辑 + */ + cancelCU() { + const addStatus = crud.status.add + const editStatus = crud.status.edit + if (addStatus === CRUD.STATUS.PREPARED) { + if (!callVmHook(crud, CRUD.HOOK.beforeAddCancel, crud.form)) { + return + } + crud.status.add = CRUD.STATUS.NORMAL + } + if (editStatus === CRUD.STATUS.PREPARED) { + if (!callVmHook(crud, CRUD.HOOK.beforeEditCancel, crud.form)) { + return + } + crud.status.edit = CRUD.STATUS.NORMAL + crud.getDataStatus(crud.getDataId(crud.form)).edit = CRUD.STATUS.NORMAL + } + crud.resetForm() + if (addStatus === CRUD.STATUS.PREPARED) { + callVmHook(crud, CRUD.HOOK.afterAddCancel, crud.form) + } + if (editStatus === CRUD.STATUS.PREPARED) { + callVmHook(crud, CRUD.HOOK.afterEditCancel, crud.form) + } + // 清除表单验证 + if (crud.findVM('form').$refs['form']) { + crud.findVM('form').$refs['form'].clearValidate() + } + }, + /** + * 提交新增/编辑 + */ + submitCU() { + if (!callVmHook(crud, CRUD.HOOK.beforeValidateCU)) { + return + } + crud.findVM('form').$refs['form'].validate(valid => { + if (!valid) { + return + } + if (!callVmHook(crud, CRUD.HOOK.afterValidateCU)) { + return + } + if (crud.status.add === CRUD.STATUS.PREPARED) { + crud.doAdd() + } else if (crud.status.edit === CRUD.STATUS.PREPARED) { + crud.doEdit() + } + }) + }, + /** + * 执行添加 + */ + doAdd() { + if (!callVmHook(crud, CRUD.HOOK.beforeSubmit)) { + return + } + crud.status.add = CRUD.STATUS.PROCESSING + crud.crudMethod.add(crud.form).then((res) => { + crud.status.add = CRUD.STATUS.NORMAL + crud.resetForm() + crud.addSuccessNotify() + callVmHook(crud, CRUD.HOOK.afterSubmit) + crud.toQuery() + }).catch(() => { + crud.status.add = CRUD.STATUS.PREPARED + callVmHook(crud, CRUD.HOOK.afterAddError) + }) + }, + /** + * 执行编辑 + */ + doEdit() { + if (!callVmHook(crud, CRUD.HOOK.beforeSubmit)) { + return + } + crud.status.edit = CRUD.STATUS.PROCESSING + crud.crudMethod.edit(crud.form).then(() => { + crud.status.edit = CRUD.STATUS.NORMAL + crud.getDataStatus(crud.getDataId(crud.form)).edit = CRUD.STATUS.NORMAL + crud.editSuccessNotify() + crud.resetForm() + callVmHook(crud, CRUD.HOOK.afterSubmit) + crud.refresh() + }).catch(() => { + crud.status.edit = CRUD.STATUS.PREPARED + callVmHook(crud, CRUD.HOOK.afterEditError) + }) + }, + /** + * 执行删除 + * @param {*} data 数据项 + */ + doDelete(data) { + let delAll = false + let dataStatus + const ids = [] + if (data instanceof Array) { + delAll = true + data.forEach(val => { + ids.push(this.getDataId(val)) + }) + } else { + ids.push(this.getDataId(data)) + dataStatus = crud.getDataStatus(this.getDataId(data)) + } + if (!callVmHook(crud, CRUD.HOOK.beforeDelete, data)) { + return + } + if (!delAll) { + dataStatus.delete = CRUD.STATUS.PROCESSING + } + return crud.crudMethod.del(ids).then(() => { + if (delAll) { + crud.delAllLoading = false + } else dataStatus.delete = CRUD.STATUS.PREPARED + crud.dleChangePage(1) + crud.delSuccessNotify() + callVmHook(crud, CRUD.HOOK.afterDelete, data) + crud.refresh() + }).catch(() => { + if (delAll) { + crud.delAllLoading = false + } else dataStatus.delete = CRUD.STATUS.PREPARED + }) + }, + /** + * 适用用户删除 + * @param {*} params 数据项 + */ + doUserDelete(params, replaceUserId) { + const data = {} + const delAll = false + let dataStatus + data.userId = this.getDataId(params) + data['replaceUserId'] = replaceUserId + if (!callVmHook(crud, CRUD.HOOK.beforeDelete, params)) { + return + } + if (!delAll) { + dataStatus = crud.getDataStatus(this.getDataId(params)) + dataStatus.delete = CRUD.STATUS.PROCESSING + } + return crud.crudMethod.del(data).then(() => { + dataStatus.delete = CRUD.STATUS.PREPARED + crud.dleChangePage(1) + crud.delSuccessNotify() + callVmHook(crud, CRUD.HOOK.afterDelete, params) + crud.refresh() + }).catch(() => { + dataStatus.delete = CRUD.STATUS.PREPARED + }) + }, + /** + * 通用导出 + */ + doExport() { + crud.downloadLoading = true + const url = crud.props.dowmapi || crud.url + download(url + '/download', crud.getQueryParams()).then(result => { + downloadFile(result, crud.title + '数据', 'xlsx') + crud.downloadLoading = false + }).catch(() => { + crud.downloadLoading = false + }) + }, + /** + * 获取查询参数 + */ + getQueryParams: function() { + // 清除参数无值的情况 + Object.keys(crud.query).length !== 0 && Object.keys(crud.query).forEach(item => { + if (crud.query[item] === null) crud.query[item] = undefined + }) + Object.keys(crud.params).length !== 0 && Object.keys(crud.params).forEach(item => { + if (crud.params[item] === null || crud.params[item] === '') crud.params[item] = undefined + }) + return { + page: crud.page.page - 1, + size: crud.page.size, + sort: crud.sort, + ...crud.query, + ...crud.params + } + }, + // 当前页改变 + pageChangeHandler(e) { + crud.page.page = e + crud.refresh() + }, + // 每页条数改变 + sizeChangeHandler(e) { + crud.page.size = e + crud.page.page = 1 + crud.refresh() + }, + // 预防删除第二页最后一条数据时,或者多选删除第二页的数据时,页码错误导致请求无数据 + dleChangePage(size) { + if (crud.data.length === size && crud.page.page !== 1) { + crud.page.page -= 1 + } + }, + // 选择改变 + selectionChangeHandler(val) { + crud.selections = val + }, + /** + * 重置查询参数 + * @param {Boolean} toQuery 重置后进行查询操作 + */ + resetQuery(toQuery = true) { + const defaultQuery = JSON.parse(JSON.stringify(crud.defaultQuery)) + const query = crud.query + Object.keys(query).forEach(key => { + query[key] = defaultQuery[key] + }) + // 重置参数 + this.params = {} + if (toQuery) { + crud.toQuery() + } + }, + /** + * 重置表单 + * @param {Array} data 数据 + */ + resetForm(data) { + const form = data || (typeof crud.defaultForm === 'object' ? JSON.parse(JSON.stringify(crud.defaultForm)) : crud.defaultForm.apply(crud.findVM('form'))) + const crudFrom = crud.form + for (const key in form) { + if (crudFrom.hasOwnProperty(key)) { + crudFrom[key] = form[key] + } else { + Vue.set(crudFrom, key, form[key]) + } + } + // 页面重复添加信息时,下拉框的校验会存在,需要找工取消 + if (crud.findVM('form').$refs['form']) { + crud.findVM('form').$refs['form'].clearValidate() + } + }, + /** + * 重置数据状态 + */ + resetDataStatus() { + const dataStatus = {} + function resetStatus(datas) { + datas.forEach(e => { + dataStatus[crud.getDataId(e)] = { + delete: 0, + edit: 0 + } + if (e.children) { + resetStatus(e.children) + } + }) + } + resetStatus(crud.data instanceof Array ? crud.data : crud.data.content) + crud.dataStatus = dataStatus + }, + /** + * 获取数据状态 + * @param {Number | String} id 数据项id + */ + getDataStatus(id) { + return crud.dataStatus[id] + }, + /** + * 用于树形表格多选, 选中所有 + * @param selection + */ + selectAllChange(selection) { + // 如果选中的数目与请求到的数目相同就选中子节点,否则就清空选中 + if (selection && selection.length === crud.data.length) { + selection.forEach(val => { + crud.selectChange(selection, val) + }) + } else { + crud.getTable().clearSelection() + } + }, + /** + * 用于树形表格多选,单选的封装 + * @param selection + * @param row + */ + selectChange(selection, row) { + // 如果selection中存在row代表是选中,否则是取消选中 + if (selection.find(val => { return crud.getDataId(val) === crud.getDataId(row) })) { + if (row.children) { + row.children.forEach(val => { + crud.getTable().toggleRowSelection(val, true) + selection.push(val) + if (val.children) { + crud.selectChange(selection, val) + } + }) + } + } else { + crud.toggleRowSelection(selection, row) + } + }, + /** + * 切换选中状态 + * @param selection + * @param data + */ + toggleRowSelection(selection, data) { + if (data.children) { + data.children.forEach(val => { + crud.getTable().toggleRowSelection(val, false) + if (val.children) { + crud.toggleRowSelection(selection, val) + } + }) + } + }, + findVM(type) { + return crud.vms.find(vm => vm && vm.type === type).vm + }, + notify(title, type = CRUD.NOTIFICATION_TYPE.INFO, duration = 2500) { + crud.vms[0].vm.$notify({ + title, + type, + duration + }) + }, + updateProp(name, value) { + Vue.set(crud.props, name, value) + }, + getDataId(data) { + return data[this.idField] + }, + getTable() { + return this.findVM('presenter').$refs.table + }, + attchTable() { + const table = this.getTable() + this.updateProp('table', table) + const that = this + table.$on('expand-change', (row, expanded) => { + if (!expanded) { + return + } + const lazyTreeNodeMap = table.store.states.lazyTreeNodeMap + row.children = lazyTreeNodeMap[crud.getDataId(row)] + if (row.children) { + row.children.forEach(ele => { + const id = crud.getDataId(ele) + if (that.dataStatus[id] === undefined) { + that.dataStatus[id] = { + delete: 0, + edit: 0 + } + } + }) + } + }) + } + } + const crud = Object.assign({}, data) + // 可观测化 + Vue.observable(crud) + // 附加方法 + Object.assign(crud, methods) + // 记录初始默认的查询参数,后续重置查询时使用 + Object.assign(crud, { + defaultQuery: JSON.parse(JSON.stringify(data.query)), + // 预留4位存储:组件 主页、头部、分页、表单,调试查看也方便找 + vms: Array(4), + /** + * 注册组件实例 + * @param {String} type 类型 + * @param {*} vm 组件实例 + * @param {Number} index 该参数内部使用 + */ + registerVM(type, vm, index = -1) { + const vmObj = { + type, + vm: vm + } + if (index < 0) { + this.vms.push(vmObj) + return + } + if (index < 4) { // 内置预留vm数 + this.vms[index] = vmObj + return + } + this.vms.length = Math.max(this.vms.length, index) + this.vms.splice(index, 1, vmObj) + }, + /** + * 取消注册组件实例 + * @param {*} vm 组件实例 + */ + unregisterVM(type, vm) { + for (let i = this.vms.length - 1; i >= 0; i--) { + if (this.vms[i] === undefined) { + continue + } + if (this.vms[i].type === type && this.vms[i].vm === vm) { + if (i < 4) { // 内置预留vm数 + this.vms[i] = undefined + } else { + this.vms.splice(i, 1) + } + break + } + } + } + }) + // 冻结处理,需要扩展数据的话,使用crud.updateProp(name, value),以crud.props.name形式访问,这个是响应式的,可以做数据绑定 + Object.freeze(crud) + return crud +} +// hook VM +function callVmHook(crud, hook) { + if (crud.debug) { + console.log('callVmHook: ' + hook) + } + const tagHook = crud.tag ? hook + '$' + crud.tag : null + let ret = true + const nargs = [crud] + for (let i = 2; i < arguments.length; ++i) { + nargs.push(arguments[i]) + } + // 有些组件扮演了多个角色,调用钩子时,需要去重 + const vmSet = new Set() + crud.vms.forEach(vm => vm && vmSet.add(vm.vm)) + vmSet.forEach(vm => { + if (vm[hook]) { + ret = vm[hook].apply(vm, nargs) !== false && ret + } + if (tagHook && vm[tagHook]) { + ret = vm[tagHook].apply(vm, nargs) !== false && ret + } + }) + return ret +} + +function mergeOptions(src, opts) { + const optsRet = { + ...src + } + for (const key in src) { + if (opts.hasOwnProperty(key)) { + optsRet[key] = opts[key] + } + } + return optsRet +} + +/** + * 查找crud + * @param {*} vm + * @param {string} tag + */ +function lookupCrud(vm, tag) { + tag = tag || vm.$attrs['crud-tag'] || 'default' + // function lookupCrud(vm, tag) { + if (vm.$crud) { + const ret = vm.$crud[tag] + if (ret) { + return ret + } + } + return vm.$parent ? lookupCrud(vm.$parent, tag) : undefined +} + +/** + * crud主页 + */ +function presenter(crud) { + if (crud) { + console.warn('[CRUD warn]: ' + 'please use $options.cruds() { return CRUD(...) or [CRUD(...), ...] }') + } + return { + data() { + // 在data中返回crud,是为了将crud与当前实例关联,组件观测crud相关属性变化 + return { + crud: this.crud + } + }, + beforeCreate() { + this.$crud = this.$crud || {} + let cruds = this.$options.cruds instanceof Function ? this.$options.cruds() : crud + if (!(cruds instanceof Array)) { + cruds = [cruds] + } + cruds.forEach(ele => { + if (this.$crud[ele.tag]) { + console.error('[CRUD error]: ' + 'crud with tag [' + ele.tag + ' is already exist') + } + this.$crud[ele.tag] = ele + ele.registerVM('presenter', this, 0) + }) + this.crud = this.$crud['defalut'] || cruds[0] + }, + methods: { + parseTime + }, + created() { + for (const k in this.$crud) { + if (this.$crud[k].queryOnPresenterCreated) { + this.$crud[k].toQuery() + } + } + }, + destroyed() { + for (const k in this.$crud) { + this.$crud[k].unregisterVM('presenter', this) + } + }, + mounted() { + // 如果table未实例化(例如使用了v-if),请稍后在适当时机crud.attchTable刷新table信息 + if (this.$refs.table !== undefined) { + this.crud.attchTable() + } + } + } +} + +/** + * 头部 + */ +function header() { + return { + data() { + return { + crud: this.crud, + query: this.crud.query + } + }, + beforeCreate() { + this.crud = lookupCrud(this) + this.crud.registerVM('header', this, 1) + }, + destroyed() { + this.crud.unregisterVM('header', this) + } + } +} + +/** + * 分页 + */ +function pagination() { + return { + data() { + return { + crud: this.crud, + page: this.crud.page + } + }, + beforeCreate() { + this.crud = lookupCrud(this) + this.crud.registerVM('pagination', this, 2) + }, + destroyed() { + this.crud.unregisterVM('pagination', this) + } + } +} + +/** + * 表单 + */ +function form(defaultForm) { + return { + data() { + return { + crud: this.crud, + form: this.crud.form + } + }, + beforeCreate() { + this.crud = lookupCrud(this) + this.crud.registerVM('form', this, 3) + }, + created() { + this.crud.defaultForm = defaultForm + this.crud.resetForm() + }, + destroyed() { + this.crud.unregisterVM('form', this) + } + } +} + +/** + * crud + */ +function crud(options = {}) { + const defaultOptions = { + type: undefined + } + options = mergeOptions(defaultOptions, options) + return { + data() { + return { + crud: this.crud + } + }, + beforeCreate() { + this.crud = lookupCrud(this) + this.crud.registerVM(options.type, this) + }, + destroyed() { + this.crud.unregisterVM(options.type, this) + } + } +} + +/** + * CRUD钩子 + */ +CRUD.HOOK = { + /** 刷新 - 之前 */ + beforeRefresh: 'beforeCrudRefresh', + /** 刷新 - 之后 */ + afterRefresh: 'afterCrudRefresh', + /** 删除 - 之前 */ + beforeDelete: 'beforeCrudDelete', + /** 删除 - 之后 */ + afterDelete: 'afterCrudDelete', + /** 删除取消 - 之前 */ + beforeDeleteCancel: 'beforeCrudDeleteCancel', + /** 删除取消 - 之后 */ + afterDeleteCancel: 'afterCrudDeleteCancel', + /** 新建 - 之前 */ + beforeToAdd: 'beforeCrudToAdd', + /** 新建 - 之后 */ + afterToAdd: 'afterCrudToAdd', + /** 编辑 - 之前 */ + beforeToEdit: 'beforeCrudToEdit', + /** 编辑 - 之后 */ + afterToEdit: 'afterCrudToEdit', + /** 开始 "新建/编辑" - 之前 */ + beforeToCU: 'beforeCrudToCU', + /** 开始 "新建/编辑" - 之后 */ + afterToCU: 'afterCrudToCU', + /** "新建/编辑" 验证 - 之前 */ + beforeValidateCU: 'beforeCrudValidateCU', + /** "新建/编辑" 验证 - 之后 */ + afterValidateCU: 'afterCrudValidateCU', + /** 添加取消 - 之前 */ + beforeAddCancel: 'beforeCrudAddCancel', + /** 添加取消 - 之后 */ + afterAddCancel: 'afterCrudAddCancel', + /** 编辑取消 - 之前 */ + beforeEditCancel: 'beforeCrudEditCancel', + /** 编辑取消 - 之后 */ + afterEditCancel: 'afterCrudEditCancel', + /** 提交 - 之前 */ + beforeSubmit: 'beforeCrudSubmitCU', + /** 提交 - 之后 */ + afterSubmit: 'afterCrudSubmitCU', + afterAddError: 'afterCrudAddError', + afterEditError: 'afterCrudEditError' +} + +/** + * CRUD状态 + */ +CRUD.STATUS = { + NORMAL: 0, + PREPARED: 1, + PROCESSING: 2 +} + +/** + * CRUD通知类型 + */ +CRUD.NOTIFICATION_TYPE = { + SUCCESS: 'success', + WARNING: 'warning', + INFO: 'info', + ERROR: 'error' +} + +export default CRUD + +export { + presenter, + header, + form, + pagination, + crud +} diff --git a/src/components/DateRangePicker/index.vue b/src/components/DateRangePicker/index.vue new file mode 100644 index 0000000..b9ea749 --- /dev/null +++ b/src/components/DateRangePicker/index.vue @@ -0,0 +1,52 @@ + + diff --git a/src/components/Dict/Dict.js b/src/components/Dict/Dict.js new file mode 100644 index 0000000..48554de --- /dev/null +++ b/src/components/Dict/Dict.js @@ -0,0 +1,29 @@ +import Vue from 'vue' +import { get as getDictDetail } from '@/api/system/dictDetail' + +export default class Dict { + constructor(dict) { + this.dict = dict + } + + async init(names, completeCallback) { + if (names === undefined || name === null) { + throw new Error('need Dict names') + } + const ps = [] + names.forEach(n => { + Vue.set(this.dict.dict, n, {}) + Vue.set(this.dict.label, n, {}) + Vue.set(this.dict, n, []) + ps.push(getDictDetail(n).then(data => { + this.dict[n].splice(0, 0, ...data.content) + data.content.forEach(d => { + Vue.set(this.dict.dict[n], d.value, d) + Vue.set(this.dict.label[n], d.value, d.label) + }) + })) + }) + await Promise.all(ps) + completeCallback() + } +} diff --git a/src/components/Dict/index.js b/src/components/Dict/index.js new file mode 100644 index 0000000..0952f43 --- /dev/null +++ b/src/components/Dict/index.js @@ -0,0 +1,29 @@ +import Dict from './Dict' + +const install = function(Vue) { + Vue.mixin({ + data() { + if (this.$options.dicts instanceof Array) { + const dict = { + dict: {}, + label: {} + } + return { + dict + } + } + return {} + }, + created() { + if (this.$options.dicts instanceof Array) { + new Dict(this.dict).init(this.$options.dicts, () => { + this.$nextTick(() => { + this.$emit('dictReady') + }) + }) + } + } + }) +} + +export default { install } diff --git a/src/components/Doc/index.vue b/src/components/Doc/index.vue new file mode 100644 index 0000000..e27dd4b --- /dev/null +++ b/src/components/Doc/index.vue @@ -0,0 +1,16 @@ + + + diff --git a/src/components/Echarts/BarChart.vue b/src/components/Echarts/BarChart.vue new file mode 100644 index 0000000..8da55e2 --- /dev/null +++ b/src/components/Echarts/BarChart.vue @@ -0,0 +1,532 @@ + + + + diff --git a/src/components/Echarts/Category.vue b/src/components/Echarts/Category.vue new file mode 100644 index 0000000..5859114 --- /dev/null +++ b/src/components/Echarts/Category.vue @@ -0,0 +1,438 @@ + + + diff --git a/src/components/Echarts/Funnel.vue b/src/components/Echarts/Funnel.vue new file mode 100644 index 0000000..96e1e84 --- /dev/null +++ b/src/components/Echarts/Funnel.vue @@ -0,0 +1,120 @@ + + + diff --git a/src/components/Echarts/Gauge.vue b/src/components/Echarts/Gauge.vue new file mode 100644 index 0000000..40ce775 --- /dev/null +++ b/src/components/Echarts/Gauge.vue @@ -0,0 +1,74 @@ + + + diff --git a/src/components/Echarts/Graph.vue b/src/components/Echarts/Graph.vue new file mode 100644 index 0000000..a5a88b3 --- /dev/null +++ b/src/components/Echarts/Graph.vue @@ -0,0 +1,101 @@ + + + diff --git a/src/components/Echarts/HeatMap.vue b/src/components/Echarts/HeatMap.vue new file mode 100644 index 0000000..6606278 --- /dev/null +++ b/src/components/Echarts/HeatMap.vue @@ -0,0 +1,105 @@ + + + diff --git a/src/components/Echarts/Line3D.vue b/src/components/Echarts/Line3D.vue new file mode 100644 index 0000000..c3f16f6 --- /dev/null +++ b/src/components/Echarts/Line3D.vue @@ -0,0 +1,96 @@ + + + diff --git a/src/components/Echarts/PieChart.vue b/src/components/Echarts/PieChart.vue new file mode 100644 index 0000000..1732b55 --- /dev/null +++ b/src/components/Echarts/PieChart.vue @@ -0,0 +1,150 @@ + + + + + diff --git a/src/components/Echarts/PieChartMultiple.vue b/src/components/Echarts/PieChartMultiple.vue new file mode 100644 index 0000000..c1c321c --- /dev/null +++ b/src/components/Echarts/PieChartMultiple.vue @@ -0,0 +1,126 @@ + + + + diff --git a/src/components/Echarts/Point.vue b/src/components/Echarts/Point.vue new file mode 100644 index 0000000..5a6c777 --- /dev/null +++ b/src/components/Echarts/Point.vue @@ -0,0 +1,149 @@ + + + diff --git a/src/components/Echarts/Radar.vue b/src/components/Echarts/Radar.vue new file mode 100644 index 0000000..52480d8 --- /dev/null +++ b/src/components/Echarts/Radar.vue @@ -0,0 +1,122 @@ + + + + diff --git a/src/components/Echarts/RadarChart.vue b/src/components/Echarts/RadarChart.vue new file mode 100644 index 0000000..de70e52 --- /dev/null +++ b/src/components/Echarts/RadarChart.vue @@ -0,0 +1,120 @@ + + + diff --git a/src/components/Echarts/Rich.vue b/src/components/Echarts/Rich.vue new file mode 100644 index 0000000..1cf6bf2 --- /dev/null +++ b/src/components/Echarts/Rich.vue @@ -0,0 +1,149 @@ + + + diff --git a/src/components/Echarts/Sankey.vue b/src/components/Echarts/Sankey.vue new file mode 100644 index 0000000..49968c4 --- /dev/null +++ b/src/components/Echarts/Sankey.vue @@ -0,0 +1,100 @@ + + + diff --git a/src/components/Echarts/Scatter.vue b/src/components/Echarts/Scatter.vue new file mode 100644 index 0000000..b776efb --- /dev/null +++ b/src/components/Echarts/Scatter.vue @@ -0,0 +1,143 @@ + + + diff --git a/src/components/Echarts/Sunburst.vue b/src/components/Echarts/Sunburst.vue new file mode 100644 index 0000000..fafc1a8 --- /dev/null +++ b/src/components/Echarts/Sunburst.vue @@ -0,0 +1,107 @@ + + + diff --git a/src/components/Echarts/ThemeRiver.vue b/src/components/Echarts/ThemeRiver.vue new file mode 100644 index 0000000..967fc05 --- /dev/null +++ b/src/components/Echarts/ThemeRiver.vue @@ -0,0 +1,148 @@ + + + diff --git a/src/components/Echarts/WordCloud.vue b/src/components/Echarts/WordCloud.vue new file mode 100644 index 0000000..415f2a8 --- /dev/null +++ b/src/components/Echarts/WordCloud.vue @@ -0,0 +1,192 @@ + + + diff --git a/src/components/GithubCorner/index.vue b/src/components/GithubCorner/index.vue new file mode 100644 index 0000000..fd77324 --- /dev/null +++ b/src/components/GithubCorner/index.vue @@ -0,0 +1,54 @@ + + + diff --git a/src/components/Hamburger/index.vue b/src/components/Hamburger/index.vue new file mode 100644 index 0000000..368b002 --- /dev/null +++ b/src/components/Hamburger/index.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/src/components/HeaderSearch/index.vue b/src/components/HeaderSearch/index.vue new file mode 100644 index 0000000..c713efc --- /dev/null +++ b/src/components/HeaderSearch/index.vue @@ -0,0 +1,188 @@ + + + + + diff --git a/src/components/IconSelect/index.vue b/src/components/IconSelect/index.vue new file mode 100644 index 0000000..b0ec9fa --- /dev/null +++ b/src/components/IconSelect/index.vue @@ -0,0 +1,68 @@ + + + + + + diff --git a/src/components/IconSelect/requireIcons.js b/src/components/IconSelect/requireIcons.js new file mode 100644 index 0000000..99e5c54 --- /dev/null +++ b/src/components/IconSelect/requireIcons.js @@ -0,0 +1,11 @@ + +const req = require.context('../../assets/icons/svg', false, /\.svg$/) +const requireAll = requireContext => requireContext.keys() + +const re = /\.\/(.*)\.svg/ + +const icons = requireAll(req).map(i => { + return i.match(re)[1] +}) + +export default icons diff --git a/src/components/Iframe/index.vue b/src/components/Iframe/index.vue new file mode 100644 index 0000000..9f395a3 --- /dev/null +++ b/src/components/Iframe/index.vue @@ -0,0 +1,30 @@ +