diff --git a/oms-vue/.editorconfig b/oms-vue/.editorconfig deleted file mode 100644 index 7034f9bf..00000000 --- a/oms-vue/.editorconfig +++ /dev/null @@ -1,22 +0,0 @@ -# 告诉EditorConfig插件,这是根文件,不用继续往上查找 -root = true - -# 匹配全部文件 -[*] -# 设置字符集 -charset = utf-8 -# 缩进风格,可选space、tab -indent_style = space -# 缩进的空格数 -indent_size = 2 -# 结尾换行符,可选lf、cr、crlf -end_of_line = lf -# 在文件结尾插入新行 -insert_final_newline = true -# 删除一行中的前后空格 -trim_trailing_whitespace = true - -# 匹配md结尾的文件 -[*.md] -insert_final_newline = false -trim_trailing_whitespace = false diff --git a/oms-vue/.env.development b/oms-vue/.env.development deleted file mode 100644 index 8efa9bfa..00000000 --- a/oms-vue/.env.development +++ /dev/null @@ -1,11 +0,0 @@ -# 页面标题 -VUE_APP_TITLE = 启航电商ERP系统 - -# 开发环境配置 -ENV = 'development' - -# 启航电商ERP系统/开发环境 -VUE_APP_BASE_API = '/dev-api' - -# 路由懒加载 -VUE_CLI_BABEL_TRANSPILE_MODULES = true diff --git a/oms-vue/.env.production b/oms-vue/.env.production deleted file mode 100644 index 34b71124..00000000 --- a/oms-vue/.env.production +++ /dev/null @@ -1,8 +0,0 @@ -# 页面标题 -VUE_APP_TITLE = 启航电商管理系统 - -# 生产环境配置 -ENV = 'production' - -# 启航电商管理系统/生产环境 -VUE_APP_BASE_API = '/prod-api' diff --git a/oms-vue/.env.staging b/oms-vue/.env.staging deleted file mode 100644 index 48a60294..00000000 --- a/oms-vue/.env.staging +++ /dev/null @@ -1,10 +0,0 @@ -# 页面标题 -VUE_APP_TITLE = 启航电商管理系统 - -NODE_ENV = production - -# 测试环境配置 -ENV = 'staging' - -# 启航电商管理系统/测试环境 -VUE_APP_BASE_API = '/stage-api' diff --git a/oms-vue/.eslintignore b/oms-vue/.eslintignore deleted file mode 100644 index 89be6f65..00000000 --- a/oms-vue/.eslintignore +++ /dev/null @@ -1,10 +0,0 @@ -# 忽略build目录下类型为js的文件的语法检查 -build/*.js -# 忽略src/assets目录下文件的语法检查 -src/assets -# 忽略public目录下文件的语法检查 -public -# 忽略当前目录下为js的文件的语法检查 -*.js -# 忽略当前目录下为vue的文件的语法检查 -*.vue \ No newline at end of file diff --git a/oms-vue/.eslintrc.js b/oms-vue/.eslintrc.js deleted file mode 100644 index 82bbdeea..00000000 --- a/oms-vue/.eslintrc.js +++ /dev/null @@ -1,199 +0,0 @@ -// ESlint 检查配置 -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/oms-vue/.gitignore b/oms-vue/.gitignore deleted file mode 100644 index 78a752d8..00000000 --- a/oms-vue/.gitignore +++ /dev/null @@ -1,23 +0,0 @@ -.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/oms-vue/README.md b/oms-vue/README.md deleted file mode 100644 index 1e59ddb9..00000000 --- a/oms-vue/README.md +++ /dev/null @@ -1,30 +0,0 @@ -## 开发 - -```bash -# 克隆项目 - - -# 进入项目目录 -cd zhijian-vue - -# 安装依赖 -npm install - -# 建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题 -npm install --registry=https://registry.npmmirror.com - -# 启动服务 -npm run dev -``` - -浏览器访问 http://localhost:80 - -## 发布 - -```bash -# 构建测试环境 -npm run build:stage - -# 构建生产环境 -npm run build:prod -``` \ No newline at end of file diff --git a/oms-vue/babel.config.js b/oms-vue/babel.config.js deleted file mode 100644 index c8267b2d..00000000 --- a/oms-vue/babel.config.js +++ /dev/null @@ -1,13 +0,0 @@ -module.exports = { - presets: [ - // https://github.com/vuejs/vue-cli/tree/master/packages/@vue/babel-preset-app - '@vue/cli-plugin-babel/preset' - ], - 'env': { - 'development': { - // babel-plugin-dynamic-import-node plugin only does one thing by converting all import() to require(). - // This plugin can significantly increase the speed of hot updates, when you have a large number of pages. - 'plugins': ['dynamic-import-node'] - } - } -} \ No newline at end of file diff --git a/oms-vue/package.json b/oms-vue/package.json deleted file mode 100644 index 4eaff57f..00000000 --- a/oms-vue/package.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "name": "qihang-ecerp", - "version": "0.1.1", - "description": "启航电商ERP系统", - "author": "qihang", - "license": "MIT", - "scripts": { - "dev": "vue-cli-service serve", - "build:prod": "vue-cli-service build", - "build:stage": "vue-cli-service build --mode staging", - "preview": "node build/index.js --preview", - "lint": "eslint --ext .js,.vue src" - }, - "husky": { - "hooks": { - "pre-commit": "lint-staged" - } - }, - "lint-staged": { - "src/**/*.{js,vue}": [ - "eslint --fix", - "git add" - ] - }, - "keywords": [ - "vue", - "admin", - "dashboard", - "element-ui", - "boilerplate", - "admin-template", - "management-system" - ], - "repository": { - "type": "git", - "url": "https://gitee.com/qiliping/zhijian.git" - }, - "dependencies": { - "@riophae/vue-treeselect": "^0.4.0", - "@smallwei/avue": "^2.10.15", - "axios": "0.24.0", - "clipboard": "2.0.8", - "core-js": "3.25.3", - "echarts": "5.4.0", - "element-china-area-data": "^6.1.0", - "element-ui": "2.15.13", - "file-saver": "2.0.5", - "fuse.js": "6.4.3", - "highlight.js": "9.18.5", - "js-beautify": "1.13.0", - "js-cookie": "3.0.1", - "jsencrypt": "3.0.0-rc.1", - "nprogress": "0.2.0", - "quill": "1.3.7", - "screenfull": "5.0.2", - "sortablejs": "1.10.2", - "vue": "2.6.12", - "vue-count-to": "1.0.13", - "vue-cropper": "0.5.5", - "vue-meta": "2.4.0", - "vue-router": "3.4.9", - "vuedraggable": "2.24.3", - "vuex": "3.6.0" - }, - "devDependencies": { - "@vue/cli-plugin-babel": "4.4.6", - "@vue/cli-plugin-eslint": "4.4.6", - "@vue/cli-service": "4.4.6", - "babel-eslint": "10.1.0", - "babel-plugin-dynamic-import-node": "2.3.3", - "chalk": "4.1.0", - "compression-webpack-plugin": "5.0.2", - "connect": "3.6.6", - "eslint": "7.15.0", - "eslint-plugin-vue": "7.2.0", - "lint-staged": "10.5.3", - "runjs": "4.4.2", - "sass": "1.32.13", - "sass-loader": "10.1.1", - "script-ext-html-webpack-plugin": "2.1.5", - "svg-sprite-loader": "5.1.1", - "vue-template-compiler": "2.6.12" - }, - "engines": { - "node": ">=8.9", - "npm": ">= 3.0.0" - }, - "browserslist": [ - "> 1%", - "last 2 versions" - ] -} diff --git a/oms-vue/public/favicon.ico b/oms-vue/public/favicon.ico deleted file mode 100644 index e2637602..00000000 Binary files a/oms-vue/public/favicon.ico and /dev/null differ diff --git a/oms-vue/public/html/ie.html b/oms-vue/public/html/ie.html deleted file mode 100644 index 052ffcd6..00000000 --- a/oms-vue/public/html/ie.html +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - 请升级您的浏览器 - - - - - - -

请升级您的浏览器,以便我们更好的为您提供服务!

-

您正在使用 Internet Explorer 的早期版本(IE11以下版本或使用该内核的浏览器)。这意味着在升级浏览器前,您将无法访问此网站。

-
-

请注意:微软公司对Windows XP 及 Internet Explorer 早期版本的支持已经结束

-

自 2016 年 1 月 12 日起,Microsoft 不再为 IE 11 以下版本提供相应支持和更新。没有关键的浏览器安全更新,您的电脑可能易受有害病毒、间谍软件和其他恶意软件的攻击,它们可以窃取或损害您的业务数据和信息。请参阅 微软对 Internet Explorer 早期版本的支持将于 2016 年 1 月 12 日结束的说明

-
-

您可以选择更先进的浏览器

-

推荐使用以下浏览器的最新版本。如果您的电脑已有以下浏览器的最新版本则直接使用该浏览器访问即可。

- -
- - \ No newline at end of file diff --git a/oms-vue/public/index.html b/oms-vue/public/index.html deleted file mode 100644 index 925455ca..00000000 --- a/oms-vue/public/index.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - - - - <%= webpackConfig.name %> - - - - -
-
-
-
-
-
正在加载系统资源,请耐心等待
-
-
- - diff --git a/oms-vue/public/robots.txt b/oms-vue/public/robots.txt deleted file mode 100644 index 77470cb3..00000000 --- a/oms-vue/public/robots.txt +++ /dev/null @@ -1,2 +0,0 @@ -User-agent: * -Disallow: / \ No newline at end of file diff --git a/oms-vue/src/App.vue b/oms-vue/src/App.vue deleted file mode 100644 index 29de49f1..00000000 --- a/oms-vue/src/App.vue +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/oms-vue/src/api/api/logistics.js b/oms-vue/src/api/api/logistics.js deleted file mode 100644 index 0a194690..00000000 --- a/oms-vue/src/api/api/logistics.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -// 查询物流公司列表 -export function listLogistics(query) { - return request({ - url: '/api/logistics/list', - method: 'get', - params: query - }) -} - -// 查询物流公司详细 -export function getLogistics(id) { - return request({ - url: '/api/logistics/' + id, - method: 'get' - }) -} - -// 新增物流公司 -export function addLogistics(data) { - return request({ - url: '/api/logistics', - method: 'post', - data: data - }) -} - -// 修改物流公司 -export function updateLogistics(data) { - return request({ - url: '/api/logistics', - method: 'put', - data: data - }) -} - -// 删除物流公司 -export function delLogistics(id) { - return request({ - url: '/api/logistics/' + id, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/api/returned.js b/oms-vue/src/api/api/returned.js deleted file mode 100644 index 93b380a8..00000000 --- a/oms-vue/src/api/api/returned.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -// 查询退换货列表 -export function listReturned(query) { - return request({ - url: '/api/returned/list', - method: 'get', - params: query - }) -} - -// 查询退换货详细 -export function getReturned(id) { - return request({ - url: '/api/returned/' + id, - method: 'get' - }) -} - -// 新增退换货 -export function addReturned(data) { - return request({ - url: '/api/returned', - method: 'post', - data: data - }) -} - -// 修改退换货 -export function updateReturned(data) { - return request({ - url: '/api/returned', - method: 'put', - data: data - }) -} - -// 删除退换货 -export function delReturned(id) { - return request({ - url: '/api/returned/' + id, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/dou/douRefund.js b/oms-vue/src/api/dou/douRefund.js deleted file mode 100644 index 0ac2127f..00000000 --- a/oms-vue/src/api/dou/douRefund.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -// 查询抖店订单退款列表 -export function listDouRefund(query) { - return request({ - url: '/dou/douRefund/list', - method: 'get', - params: query - }) -} - -// 查询抖店订单退款详细 -export function getDouRefund(id) { - return request({ - url: '/dou/douRefund/' + id, - method: 'get' - }) -} - -// 新增抖店订单退款 -export function addDouRefund(data) { - return request({ - url: '/dou/douRefund', - method: 'post', - data: data - }) -} - -// 修改抖店订单退款 -export function updateDouRefund(data) { - return request({ - url: '/dou/douRefund', - method: 'put', - data: data - }) -} - -// 删除抖店订单退款 -export function delDouRefund(id) { - return request({ - url: '/dou/douRefund/' + id, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/dou/order.js b/oms-vue/src/api/dou/order.js deleted file mode 100644 index f6047b75..00000000 --- a/oms-vue/src/api/dou/order.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -// 查询抖店订单列表 -export function listOrder(query) { - return request({ - url: '/dou/order/list', - method: 'get', - params: query - }) -} - -// 查询抖店订单详细 -export function getOrder(id) { - return request({ - url: '/dou/order/' + id, - method: 'get' - }) -} - -// 新增抖店订单 -export function addOrder(data) { - return request({ - url: '/dou/order', - method: 'post', - data: data - }) -} - -// 修改抖店订单 -export function confirmOrder(data) { - return request({ - url: '/dou/order/confirm', - method: 'post', - data: data - }) -} - -// 删除抖店订单 -export function delOrder(id) { - return request({ - url: '/dou/order/' + id, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/dou/refund.js b/oms-vue/src/api/dou/refund.js deleted file mode 100644 index 975867b3..00000000 --- a/oms-vue/src/api/dou/refund.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -// 查询抖店订单退款列表 -export function listRefund(query) { - return request({ - url: '/dou/refund/list', - method: 'get', - params: query - }) -} - -// 查询抖店订单退款详细 -export function getRefund(id) { - return request({ - url: '/dou/refund/' + id, - method: 'get' - }) -} - -// 新增抖店订单退款 -export function addRefund(data) { - return request({ - url: '/dou/refund', - method: 'post', - data: data - }) -} - -// 修改抖店订单退款 -export function updateRefund(data) { - return request({ - url: '/dou/refund', - method: 'put', - data: data - }) -} - -// 删除抖店订单退款 -export function delRefund(id) { - return request({ - url: '/dou/refund/' + id, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/goods/brand.js b/oms-vue/src/api/goods/brand.js deleted file mode 100644 index dac3b96c..00000000 --- a/oms-vue/src/api/goods/brand.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -// 查询商品品牌列表 -export function listBrand(query) { - return request({ - url: '/goods/brand/list', - method: 'get', - params: query - }) -} - -// 查询商品品牌详细 -export function getBrand(id) { - return request({ - url: '/goods/brand/' + id, - method: 'get' - }) -} - -// 新增商品品牌 -export function addBrand(data) { - return request({ - url: '/goods/brand', - method: 'post', - data: data - }) -} - -// 修改商品品牌 -export function updateBrand(data) { - return request({ - url: '/goods/brand', - method: 'put', - data: data - }) -} - -// 删除商品品牌 -export function delBrand(id) { - return request({ - url: '/goods/brand/' + id, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/goods/category.js b/oms-vue/src/api/goods/category.js deleted file mode 100644 index 551a043a..00000000 --- a/oms-vue/src/api/goods/category.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -// 查询商品分类列表 -export function listCategory(query) { - return request({ - url: '/goods/category/list', - method: 'get', - params: query - }) -} - -// 查询商品分类详细 -export function getCategory(id) { - return request({ - url: '/goods/category/' + id, - method: 'get' - }) -} - -// 新增商品分类 -export function addCategory(data) { - return request({ - url: '/goods/category', - method: 'post', - data: data - }) -} - -// 修改商品分类 -export function updateCategory(data) { - return request({ - url: '/goods/category', - method: 'put', - data: data - }) -} - -// 删除商品分类 -export function delCategory(id) { - return request({ - url: '/goods/category/' + id, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/goods/categoryAttribute.js b/oms-vue/src/api/goods/categoryAttribute.js deleted file mode 100644 index 16eb6c69..00000000 --- a/oms-vue/src/api/goods/categoryAttribute.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -// 查询商品分类属性列表 -export function listCategoryAttribute(query) { - return request({ - url: '/goods/categoryAttribute/list', - method: 'get', - params: query - }) -} - -// 查询商品分类属性详细 -export function getCategoryAttribute(id) { - return request({ - url: '/goods/categoryAttribute/' + id, - method: 'get' - }) -} - -// 新增商品分类属性 -export function addCategoryAttribute(data) { - return request({ - url: '/goods/categoryAttribute', - method: 'post', - data: data - }) -} - -// 修改商品分类属性 -export function updateCategoryAttribute(data) { - return request({ - url: '/goods/categoryAttribute', - method: 'put', - data: data - }) -} - -// 删除商品分类属性 -export function delCategoryAttribute(id) { - return request({ - url: '/goods/categoryAttribute/' + id, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/goods/categoryAttributeValue.js b/oms-vue/src/api/goods/categoryAttributeValue.js deleted file mode 100644 index 3df58a5f..00000000 --- a/oms-vue/src/api/goods/categoryAttributeValue.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -// 查询商品分类属性值列表 -export function listCategoryAttributeValue(query) { - return request({ - url: '/goods/categoryAttributeValue/list', - method: 'get', - params: query - }) -} - -// 查询商品分类属性值详细 -export function getCategoryAttributeValue(id) { - return request({ - url: '/goods/categoryAttributeValue/' + id, - method: 'get' - }) -} - -// 新增商品分类属性值 -export function addCategoryAttributeValue(data) { - return request({ - url: '/goods/categoryAttributeValue', - method: 'post', - data: data - }) -} - -// 修改商品分类属性值 -export function updateCategoryAttributeValue(data) { - return request({ - url: '/goods/categoryAttributeValue', - method: 'put', - data: data - }) -} - -// 删除商品分类属性值 -export function delCategoryAttributeValue(id) { - return request({ - url: '/goods/categoryAttributeValue/' + id, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/goods/goods.js b/oms-vue/src/api/goods/goods.js deleted file mode 100644 index 080aa19d..00000000 --- a/oms-vue/src/api/goods/goods.js +++ /dev/null @@ -1,53 +0,0 @@ -import request from '@/utils/request' - -// 查询商品管理列表 -export function listGoods(query) { - return request({ - url: '/goods/goods/list', - method: 'get', - params: query - }) -} - -// 查询商品规格列表 -export function searchSku(query) { - return request({ - url: '/goods/goods/searchSku', - method: 'get', - params: query - }) -} - -// 查询商品管理详细 -export function getGoods(id) { - return request({ - url: '/goods/goods/' + id, - method: 'get' - }) -} - -// 新增商品管理 -export function addGoods(data) { - return request({ - url: '/goods/goods', - method: 'post', - data: data - }) -} - -// 修改商品管理 -export function updateGoods(data) { - return request({ - url: '/goods/goods', - method: 'put', - data: data - }) -} - -// 删除商品管理 -export function delGoods(id) { - return request({ - url: '/goods/goods/' + id, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/goods/goodsInventory.js b/oms-vue/src/api/goods/goodsInventory.js deleted file mode 100644 index df940b09..00000000 --- a/oms-vue/src/api/goods/goodsInventory.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -// 查询商品库存列表 -export function listGoodsInventory(query) { - return request({ - url: '/api/goodsInventory/list', - method: 'get', - params: query - }) -} - -// 查询商品库存详细 -export function getGoodsInventory(id) { - return request({ - url: '/api/goodsInventory/' + id, - method: 'get' - }) -} - -// 新增商品库存 -export function addGoodsInventory(data) { - return request({ - url: '/api/goodsInventory', - method: 'post', - data: data - }) -} - -// 修改商品库存 -export function updateGoodsInventory(data) { - return request({ - url: '/api/goodsInventory', - method: 'put', - data: data - }) -} - -// 删除商品库存 -export function delGoodsInventory(id) { - return request({ - url: '/api/goodsInventory/' + id, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/goods/goodsSpec.js b/oms-vue/src/api/goods/goodsSpec.js deleted file mode 100644 index 12cbf069..00000000 --- a/oms-vue/src/api/goods/goodsSpec.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -// 查询商品规格库存管理列表 -export function listGoodsSpec(query) { - return request({ - url: '/goods/goodsSpec/list', - method: 'get', - params: query - }) -} - -// 查询商品规格库存管理详细 -export function getGoodsSpec(id) { - return request({ - url: '/goods/goodsSpec/' + id, - method: 'get' - }) -} - -// 新增商品规格库存管理 -export function addGoodsSpec(data) { - return request({ - url: '/goods/goodsSpec', - method: 'post', - data: data - }) -} - -// 修改商品规格库存管理 -export function updateGoodsSpec(data) { - return request({ - url: '/goods/goodsSpec', - method: 'put', - data: data - }) -} - -// 删除商品规格库存管理 -export function delGoodsSpec(id) { - return request({ - url: '/goods/goodsSpec/' + id, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/keyword/keyword.js b/oms-vue/src/api/keyword/keyword.js deleted file mode 100644 index 91d703b8..00000000 --- a/oms-vue/src/api/keyword/keyword.js +++ /dev/null @@ -1,33 +0,0 @@ -import request from '@/utils/request' - -// 查询生成表数据 -export function listAll(query) { - return request({ - url: '/keyword/list', - method: 'get', - params: query - }) -} - -export function saveData(data) { - return request({ - url: '/keyword/save', - method: 'post', - data: data - }) -} - -export function delData(id) { - return request({ - url: '/keyword/del/' + id, - method: 'delete' - }) -} - -export function updateData(data) { - return request({ - url: '/keyword/edit', - method: 'put', - data: data - }) -} diff --git a/oms-vue/src/api/login.js b/oms-vue/src/api/login.js deleted file mode 100644 index 649f59c8..00000000 --- a/oms-vue/src/api/login.js +++ /dev/null @@ -1,59 +0,0 @@ -import request from '@/utils/request' - -// 登录方法 -export function login(username, password, code, uuid) { - const data = { - username, - password, - code, - uuid - } - return request({ - url: '/login', - headers: { - isToken: false - }, - method: 'post', - data: data - }) -} - -// 注册方法 -export function register(data) { - return request({ - url: '/register', - headers: { - isToken: false - }, - method: 'post', - data: data - }) -} - -// 获取用户详细信息 -export function getInfo() { - return request({ - url: '/getInfo', - method: 'get' - }) -} - -// 退出方法 -export function logout() { - return request({ - url: '/logout', - method: 'post' - }) -} - -// 获取验证码 -export function getCodeImg() { - return request({ - url: '/captchaImage', - headers: { - isToken: false - }, - method: 'get', - timeout: 20000 - }) -} \ No newline at end of file diff --git a/oms-vue/src/api/menu.js b/oms-vue/src/api/menu.js deleted file mode 100644 index faef101c..00000000 --- a/oms-vue/src/api/menu.js +++ /dev/null @@ -1,9 +0,0 @@ -import request from '@/utils/request' - -// 获取路由 -export const getRouters = () => { - return request({ - url: '/getRouters', - method: 'get' - }) -} \ No newline at end of file diff --git a/oms-vue/src/api/monitor/cache.js b/oms-vue/src/api/monitor/cache.js deleted file mode 100644 index 72c5f6a3..00000000 --- a/oms-vue/src/api/monitor/cache.js +++ /dev/null @@ -1,57 +0,0 @@ -import request from '@/utils/request' - -// 查询缓存详细 -export function getCache() { - return request({ - url: '/monitor/cache', - method: 'get' - }) -} - -// 查询缓存名称列表 -export function listCacheName() { - return request({ - url: '/monitor/cache/getNames', - method: 'get' - }) -} - -// 查询缓存键名列表 -export function listCacheKey(cacheName) { - return request({ - url: '/monitor/cache/getKeys/' + cacheName, - method: 'get' - }) -} - -// 查询缓存内容 -export function getCacheValue(cacheName, cacheKey) { - return request({ - url: '/monitor/cache/getValue/' + cacheName + '/' + cacheKey, - method: 'get' - }) -} - -// 清理指定名称缓存 -export function clearCacheName(cacheName) { - return request({ - url: '/monitor/cache/clearCacheName/' + cacheName, - method: 'delete' - }) -} - -// 清理指定键名缓存 -export function clearCacheKey(cacheKey) { - return request({ - url: '/monitor/cache/clearCacheKey/' + cacheKey, - method: 'delete' - }) -} - -// 清理全部缓存 -export function clearCacheAll() { - return request({ - url: '/monitor/cache/clearCacheAll', - method: 'delete' - }) -} diff --git a/oms-vue/src/api/monitor/job.js b/oms-vue/src/api/monitor/job.js deleted file mode 100644 index 38155693..00000000 --- a/oms-vue/src/api/monitor/job.js +++ /dev/null @@ -1,71 +0,0 @@ -import request from '@/utils/request' - -// 查询定时任务调度列表 -export function listJob(query) { - return request({ - url: '/monitor/job/list', - method: 'get', - params: query - }) -} - -// 查询定时任务调度详细 -export function getJob(jobId) { - return request({ - url: '/monitor/job/' + jobId, - method: 'get' - }) -} - -// 新增定时任务调度 -export function addJob(data) { - return request({ - url: '/monitor/job', - method: 'post', - data: data - }) -} - -// 修改定时任务调度 -export function updateJob(data) { - return request({ - url: '/monitor/job', - method: 'put', - data: data - }) -} - -// 删除定时任务调度 -export function delJob(jobId) { - return request({ - url: '/monitor/job/' + jobId, - method: 'delete' - }) -} - -// 任务状态修改 -export function changeJobStatus(jobId, status) { - const data = { - jobId, - status - } - return request({ - url: '/monitor/job/changeStatus', - method: 'put', - data: data - }) -} - - -// 定时任务立即执行一次 -export function runJob(jobId, jobGroup) { - const data = { - jobId, - jobGroup - } - return request({ - url: '/monitor/job/run', - method: 'put', - data: data - }) -} \ No newline at end of file diff --git a/oms-vue/src/api/monitor/jobLog.js b/oms-vue/src/api/monitor/jobLog.js deleted file mode 100644 index 6e0be616..00000000 --- a/oms-vue/src/api/monitor/jobLog.js +++ /dev/null @@ -1,26 +0,0 @@ -import request from '@/utils/request' - -// 查询调度日志列表 -export function listJobLog(query) { - return request({ - url: '/monitor/jobLog/list', - method: 'get', - params: query - }) -} - -// 删除调度日志 -export function delJobLog(jobLogId) { - return request({ - url: '/monitor/jobLog/' + jobLogId, - method: 'delete' - }) -} - -// 清空调度日志 -export function cleanJobLog() { - return request({ - url: '/monitor/jobLog/clean', - method: 'delete' - }) -} diff --git a/oms-vue/src/api/monitor/logininfor.js b/oms-vue/src/api/monitor/logininfor.js deleted file mode 100644 index 4d112b78..00000000 --- a/oms-vue/src/api/monitor/logininfor.js +++ /dev/null @@ -1,34 +0,0 @@ -import request from '@/utils/request' - -// 查询登录日志列表 -export function list(query) { - return request({ - url: '/monitor/logininfor/list', - method: 'get', - params: query - }) -} - -// 删除登录日志 -export function delLogininfor(infoId) { - return request({ - url: '/monitor/logininfor/' + infoId, - method: 'delete' - }) -} - -// 解锁用户登录状态 -export function unlockLogininfor(userName) { - return request({ - url: '/monitor/logininfor/unlock/' + userName, - method: 'get' - }) -} - -// 清空登录日志 -export function cleanLogininfor() { - return request({ - url: '/monitor/logininfor/clean', - method: 'delete' - }) -} diff --git a/oms-vue/src/api/monitor/online.js b/oms-vue/src/api/monitor/online.js deleted file mode 100644 index bd221378..00000000 --- a/oms-vue/src/api/monitor/online.js +++ /dev/null @@ -1,18 +0,0 @@ -import request from '@/utils/request' - -// 查询在线用户列表 -export function list(query) { - return request({ - url: '/monitor/online/list', - method: 'get', - params: query - }) -} - -// 强退用户 -export function forceLogout(tokenId) { - return request({ - url: '/monitor/online/' + tokenId, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/monitor/operlog.js b/oms-vue/src/api/monitor/operlog.js deleted file mode 100644 index a04bca84..00000000 --- a/oms-vue/src/api/monitor/operlog.js +++ /dev/null @@ -1,26 +0,0 @@ -import request from '@/utils/request' - -// 查询操作日志列表 -export function list(query) { - return request({ - url: '/monitor/operlog/list', - method: 'get', - params: query - }) -} - -// 删除操作日志 -export function delOperlog(operId) { - return request({ - url: '/monitor/operlog/' + operId, - method: 'delete' - }) -} - -// 清空操作日志 -export function cleanOperlog() { - return request({ - url: '/monitor/operlog/clean', - method: 'delete' - }) -} diff --git a/oms-vue/src/api/monitor/server.js b/oms-vue/src/api/monitor/server.js deleted file mode 100644 index e1f9ca21..00000000 --- a/oms-vue/src/api/monitor/server.js +++ /dev/null @@ -1,9 +0,0 @@ -import request from '@/utils/request' - -// 获取服务信息 -export function getServer() { - return request({ - url: '/monitor/server', - method: 'get' - }) -} \ No newline at end of file diff --git a/oms-vue/src/api/pdd/order.js b/oms-vue/src/api/pdd/order.js deleted file mode 100644 index f45bdfe5..00000000 --- a/oms-vue/src/api/pdd/order.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -// 查询拼多多订单列表 -export function listOrder(query) { - return request({ - url: '/pdd/order/list', - method: 'get', - params: query - }) -} - -// 查询拼多多订单详细 -export function getOrder(id) { - return request({ - url: '/pdd/order/' + id, - method: 'get' - }) -} - -// 新增拼多多订单 -export function addOrder(data) { - return request({ - url: '/pdd/order', - method: 'post', - data: data - }) -} - -// 修改拼多多订单 -export function confirmOrder(data) { - return request({ - url: '/pdd/order/confirm', - method: 'post', - data: data - }) -} - -// 删除拼多多订单 -export function delOrder(id) { - return request({ - url: '/pdd/order/' + id, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/pdd/orderRefund.js b/oms-vue/src/api/pdd/orderRefund.js deleted file mode 100644 index 599f00e5..00000000 --- a/oms-vue/src/api/pdd/orderRefund.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -// 查询拼多多订单退款列表 -export function listOrderRefund(query) { - return request({ - url: '/pdd/orderRefund/list', - method: 'get', - params: query - }) -} - -// 查询拼多多订单退款详细 -export function getOrderRefund(id) { - return request({ - url: '/pdd/orderRefund/' + id, - method: 'get' - }) -} - -// 新增拼多多订单退款 -export function addOrderRefund(data) { - return request({ - url: '/pdd/orderRefund', - method: 'post', - data: data - }) -} - -// 修改拼多多订单退款 -export function updateOrderRefund(data) { - return request({ - url: '/pdd/orderRefund', - method: 'put', - data: data - }) -} - -// 删除拼多多订单退款 -export function delOrderRefund(id) { - return request({ - url: '/pdd/orderRefund/' + id, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/pdd/pddRefund.js b/oms-vue/src/api/pdd/pddRefund.js deleted file mode 100644 index f2f752b1..00000000 --- a/oms-vue/src/api/pdd/pddRefund.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -// 查询拼多多订单退款列表 -export function listPddRefund(query) { - return request({ - url: '/pdd/pddRefund/list', - method: 'get', - params: query - }) -} - -// 查询拼多多订单退款详细 -export function getPddRefund(id) { - return request({ - url: '/pdd/pddRefund/' + id, - method: 'get' - }) -} - -// 新增拼多多订单退款 -export function addPddRefund(data) { - return request({ - url: '/pdd/pddRefund', - method: 'post', - data: data - }) -} - -// 修改拼多多订单退款 -export function updatePddRefund(data) { - return request({ - url: '/pdd/pddRefund', - method: 'put', - data: data - }) -} - -// 删除拼多多订单退款 -export function delPddRefund(id) { - return request({ - url: '/pdd/pddRefund/' + id, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/purchase/purchaseOrder.js b/oms-vue/src/api/purchase/purchaseOrder.js deleted file mode 100644 index 858a380b..00000000 --- a/oms-vue/src/api/purchase/purchaseOrder.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -// 查询采购订单列表 -export function listPurchaseOrder(query) { - return request({ - url: '/purchase/purchaseOrder/list', - method: 'get', - params: query - }) -} - -// 查询采购订单详细 -export function getPurchaseOrder(id) { - return request({ - url: '/purchase/purchaseOrder/' + id, - method: 'get' - }) -} - -// 新增采购订单 -export function addPurchaseOrder(data) { - return request({ - url: '/purchase/purchaseOrder', - method: 'post', - data: data - }) -} - -// 修改采购订单 -export function updatePurchaseOrder(data) { - return request({ - url: '/purchase/purchaseOrder', - method: 'put', - data: data - }) -} - -// 删除采购订单 -export function delPurchaseOrder(id) { - return request({ - url: '/purchase/purchaseOrder/' + id, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/purchase/purchaseOrderItem.js b/oms-vue/src/api/purchase/purchaseOrderItem.js deleted file mode 100644 index 9a6ed1a1..00000000 --- a/oms-vue/src/api/purchase/purchaseOrderItem.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -// 查询采购订单明细列表 -export function listPurchaseOrderItem(query) { - return request({ - url: '/purchase/purchaseOrderItem/list', - method: 'get', - params: query - }) -} - -// 查询采购订单明细详细 -export function getPurchaseOrderItem(id) { - return request({ - url: '/purchase/purchaseOrderItem/' + id, - method: 'get' - }) -} - -// 新增采购订单明细 -export function addPurchaseOrderItem(data) { - return request({ - url: '/purchase/purchaseOrderItem', - method: 'post', - data: data - }) -} - -// 修改采购订单明细 -export function updatePurchaseOrderItem(data) { - return request({ - url: '/purchase/purchaseOrderItem', - method: 'put', - data: data - }) -} - -// 删除采购订单明细 -export function delPurchaseOrderItem(id) { - return request({ - url: '/purchase/purchaseOrderItem/' + id, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/scm/PurchaseOrderShip.js b/oms-vue/src/api/scm/PurchaseOrderShip.js deleted file mode 100644 index 77fb7a5b..00000000 --- a/oms-vue/src/api/scm/PurchaseOrderShip.js +++ /dev/null @@ -1,54 +0,0 @@ -import request from '@/utils/request' - -// 查询采购订单物流列表 -export function listPurchaseOrderShip(query) { - return request({ - url: '/purchase/PurchaseOrderShip/list', - method: 'get', - params: query - }) -} - -// 查询采购订单物流详细 -export function getPurchaseOrderShip(id) { - return request({ - url: '/purchase/PurchaseOrderShip/' + id, - method: 'get' - }) -} - -// 新增采购订单物流 -export function addPurchaseOrderShip(data) { - return request({ - url: '/purchase/PurchaseOrderShip', - method: 'post', - data: data - }) -} - -//创建入库单 -export function createStockInEntry(data) { - return request({ - url: '/purchase/PurchaseOrderShip/createStockInEntry', - method: 'post', - data: data - }) -} - - -// 修改采购订单物流 -export function updatePurchaseOrderShip(data) { - return request({ - url: '/purchase/PurchaseOrderShip', - method: 'put', - data: data - }) -} - -// 删除采购订单物流 -export function delPurchaseOrderShip(id) { - return request({ - url: '/purchase/PurchaseOrderShip/' + id, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/scm/agentShipping.js b/oms-vue/src/api/scm/agentShipping.js deleted file mode 100644 index 4bc8a437..00000000 --- a/oms-vue/src/api/scm/agentShipping.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -// 查询供应商代发货列表 -export function listAgentShipping(query) { - return request({ - url: '/scm/agentShipping/list', - method: 'get', - params: query - }) -} - -// 查询供应商代发货详细 -export function getAgentShipping(id) { - return request({ - url: '/scm/agentShipping/' + id, - method: 'get' - }) -} - -// 新增供应商代发货 -export function addAgentShipping(data) { - return request({ - url: '/scm/agentShipping', - method: 'post', - data: data - }) -} - -// 修改供应商代发货 -export function updateAgentShipping(data) { - return request({ - url: '/scm/agentShipping', - method: 'put', - data: data - }) -} - -// 删除供应商代发货 -export function delAgentShipping(id) { - return request({ - url: '/scm/agentShipping/' + id, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/scm/purchaseOrderCost.js b/oms-vue/src/api/scm/purchaseOrderCost.js deleted file mode 100644 index 462d89cd..00000000 --- a/oms-vue/src/api/scm/purchaseOrderCost.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -// 查询采购订单费用确认列表 -export function listPurchaseOrderCost(query) { - return request({ - url: '/purchase/purchaseOrderCost/list', - method: 'get', - params: query - }) -} - -// 查询采购订单费用确认详细 -export function getPurchaseOrderCost(id) { - return request({ - url: '/purchase/purchaseOrderCost/' + id, - method: 'get' - }) -} - -// 新增采购订单费用确认 -export function addPurchaseOrderCost(data) { - return request({ - url: '/purchase/purchaseOrderCost', - method: 'post', - data: data - }) -} - -// 修改采购订单费用确认 -export function updatePurchaseOrderCost(data) { - return request({ - url: '/purchase/purchaseOrderCost', - method: 'put', - data: data - }) -} - -// 删除采购订单费用确认 -export function delPurchaseOrderCost(id) { - return request({ - url: '/purchase/purchaseOrderCost/' + id, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/scm/supplier.js b/oms-vue/src/api/scm/supplier.js deleted file mode 100644 index 7624e894..00000000 --- a/oms-vue/src/api/scm/supplier.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -// 查询供应商管理列表 -export function listSupplier(query) { - return request({ - url: '/scm/supplier/list', - method: 'get', - params: query - }) -} - -// 查询供应商管理详细 -export function getSupplier(id) { - return request({ - url: '/scm/supplier/' + id, - method: 'get' - }) -} - -// 新增供应商管理 -export function addSupplier(data) { - return request({ - url: '/scm/supplier', - method: 'post', - data: data - }) -} - -// 修改供应商管理 -export function updateSupplier(data) { - return request({ - url: '/scm/supplier', - method: 'put', - data: data - }) -} - -// 删除供应商管理 -export function delSupplier(id) { - return request({ - url: '/scm/supplier/' + id, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/shop/goods.js b/oms-vue/src/api/shop/goods.js deleted file mode 100644 index 112909de..00000000 --- a/oms-vue/src/api/shop/goods.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -// 查询店铺商品列表 -export function listGoods(query) { - return request({ - url: '/shop/goods/list', - method: 'get', - params: query - }) -} - -// 查询店铺商品详细 -export function getGoods(id) { - return request({ - url: '/shop/goods/' + id, - method: 'get' - }) -} - -// 新增店铺商品 -export function addGoods(data) { - return request({ - url: '/shop/goods', - method: 'post', - data: data - }) -} - -// 修改店铺商品 -export function updateGoods(data) { - return request({ - url: '/shop/goods', - method: 'put', - data: data - }) -} - -// 删除店铺商品 -export function delGoods(id) { - return request({ - url: '/shop/goods/' + id, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/shop/order.js b/oms-vue/src/api/shop/order.js deleted file mode 100644 index 7d0a7ad8..00000000 --- a/oms-vue/src/api/shop/order.js +++ /dev/null @@ -1,54 +0,0 @@ -import request from '@/utils/request' - -// 查询店铺订单列表 -export function listOrder(query) { - return request({ - url: '/api/order/list', - method: 'get', - params: query - }) -} - -// 查询店铺订单详细 -export function getOrder(id) { - return request({ - url: '/api/order/' + id, - method: 'get' - }) -} - -// 新增店铺订单 -export function addOrder(data) { - return request({ - url: '/api/order', - method: 'post', - data: data - }) -} - -export function shipOrder(data) { - return request({ - url: '/api/order/ship', - method: 'post', - data: data - }) -} - - - -// 修改店铺订单 -export function updateOrder(data) { - return request({ - url: '/api/order', - method: 'put', - data: data - }) -} - -// 删除店铺订单 -export function delOrder(id) { - return request({ - url: '/api/order/' + id, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/shop/shop.js b/oms-vue/src/api/shop/shop.js deleted file mode 100644 index dd7a96ac..00000000 --- a/oms-vue/src/api/shop/shop.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -// 查询店铺列表 -export function listShop(query) { - return request({ - url: '/shop/shop/list', - method: 'get', - params: query - }) -} - -// 查询店铺详细 -export function getShop(id) { - return request({ - url: '/shop/shop/' + id, - method: 'get' - }) -} - -// 新增店铺 -export function addShop(data) { - return request({ - url: '/shop/shop', - method: 'post', - data: data - }) -} - -// 修改店铺 -export function updateShop(data) { - return request({ - url: '/shop/shop', - method: 'put', - data: data - }) -} - -// 删除店铺 -export function delShop(id) { - return request({ - url: '/shop/shop/' + id, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/system/config.js b/oms-vue/src/api/system/config.js deleted file mode 100644 index a404d825..00000000 --- a/oms-vue/src/api/system/config.js +++ /dev/null @@ -1,60 +0,0 @@ -import request from '@/utils/request' - -// 查询参数列表 -export function listConfig(query) { - return request({ - url: '/system/config/list', - method: 'get', - params: query - }) -} - -// 查询参数详细 -export function getConfig(configId) { - return request({ - url: '/system/config/' + configId, - method: 'get' - }) -} - -// 根据参数键名查询参数值 -export function getConfigKey(configKey) { - return request({ - url: '/system/config/configKey/' + configKey, - method: 'get' - }) -} - -// 新增参数配置 -export function addConfig(data) { - return request({ - url: '/system/config', - method: 'post', - data: data - }) -} - -// 修改参数配置 -export function updateConfig(data) { - return request({ - url: '/system/config', - method: 'put', - data: data - }) -} - -// 删除参数配置 -export function delConfig(configId) { - return request({ - url: '/system/config/' + configId, - method: 'delete' - }) -} - -// 刷新参数缓存 -export function refreshCache() { - return request({ - url: '/system/config/refreshCache', - method: 'delete' - }) -} diff --git a/oms-vue/src/api/system/dept.js b/oms-vue/src/api/system/dept.js deleted file mode 100644 index fc943cd4..00000000 --- a/oms-vue/src/api/system/dept.js +++ /dev/null @@ -1,52 +0,0 @@ -import request from '@/utils/request' - -// 查询部门列表 -export function listDept(query) { - return request({ - url: '/system/dept/list', - method: 'get', - params: query - }) -} - -// 查询部门列表(排除节点) -export function listDeptExcludeChild(deptId) { - return request({ - url: '/system/dept/list/exclude/' + deptId, - method: 'get' - }) -} - -// 查询部门详细 -export function getDept(deptId) { - return request({ - url: '/system/dept/' + deptId, - method: 'get' - }) -} - -// 新增部门 -export function addDept(data) { - return request({ - url: '/system/dept', - method: 'post', - data: data - }) -} - -// 修改部门 -export function updateDept(data) { - return request({ - url: '/system/dept', - method: 'put', - data: data - }) -} - -// 删除部门 -export function delDept(deptId) { - return request({ - url: '/system/dept/' + deptId, - method: 'delete' - }) -} \ No newline at end of file diff --git a/oms-vue/src/api/system/dict/data.js b/oms-vue/src/api/system/dict/data.js deleted file mode 100644 index 6c9eb79b..00000000 --- a/oms-vue/src/api/system/dict/data.js +++ /dev/null @@ -1,52 +0,0 @@ -import request from '@/utils/request' - -// 查询字典数据列表 -export function listData(query) { - return request({ - url: '/system/dict/data/list', - method: 'get', - params: query - }) -} - -// 查询字典数据详细 -export function getData(dictCode) { - return request({ - url: '/system/dict/data/' + dictCode, - method: 'get' - }) -} - -// 根据字典类型查询字典数据信息 -export function getDicts(dictType) { - return request({ - url: '/system/dict/data/type/' + dictType, - method: 'get' - }) -} - -// 新增字典数据 -export function addData(data) { - return request({ - url: '/system/dict/data', - method: 'post', - data: data - }) -} - -// 修改字典数据 -export function updateData(data) { - return request({ - url: '/system/dict/data', - method: 'put', - data: data - }) -} - -// 删除字典数据 -export function delData(dictCode) { - return request({ - url: '/system/dict/data/' + dictCode, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/system/dict/type.js b/oms-vue/src/api/system/dict/type.js deleted file mode 100644 index a7a6e01f..00000000 --- a/oms-vue/src/api/system/dict/type.js +++ /dev/null @@ -1,60 +0,0 @@ -import request from '@/utils/request' - -// 查询字典类型列表 -export function listType(query) { - return request({ - url: '/system/dict/type/list', - method: 'get', - params: query - }) -} - -// 查询字典类型详细 -export function getType(dictId) { - return request({ - url: '/system/dict/type/' + dictId, - method: 'get' - }) -} - -// 新增字典类型 -export function addType(data) { - return request({ - url: '/system/dict/type', - method: 'post', - data: data - }) -} - -// 修改字典类型 -export function updateType(data) { - return request({ - url: '/system/dict/type', - method: 'put', - data: data - }) -} - -// 删除字典类型 -export function delType(dictId) { - return request({ - url: '/system/dict/type/' + dictId, - method: 'delete' - }) -} - -// 刷新字典缓存 -export function refreshCache() { - return request({ - url: '/system/dict/type/refreshCache', - method: 'delete' - }) -} - -// 获取字典选择框列表 -export function optionselect() { - return request({ - url: '/system/dict/type/optionselect', - method: 'get' - }) -} \ No newline at end of file diff --git a/oms-vue/src/api/system/menu.js b/oms-vue/src/api/system/menu.js deleted file mode 100644 index f6415c65..00000000 --- a/oms-vue/src/api/system/menu.js +++ /dev/null @@ -1,60 +0,0 @@ -import request from '@/utils/request' - -// 查询菜单列表 -export function listMenu(query) { - return request({ - url: '/system/menu/list', - method: 'get', - params: query - }) -} - -// 查询菜单详细 -export function getMenu(menuId) { - return request({ - url: '/system/menu/' + menuId, - method: 'get' - }) -} - -// 查询菜单下拉树结构 -export function treeselect() { - return request({ - url: '/system/menu/treeselect', - method: 'get' - }) -} - -// 根据角色ID查询菜单下拉树结构 -export function roleMenuTreeselect(roleId) { - return request({ - url: '/system/menu/roleMenuTreeselect/' + roleId, - method: 'get' - }) -} - -// 新增菜单 -export function addMenu(data) { - return request({ - url: '/system/menu', - method: 'post', - data: data - }) -} - -// 修改菜单 -export function updateMenu(data) { - return request({ - url: '/system/menu', - method: 'put', - data: data - }) -} - -// 删除菜单 -export function delMenu(menuId) { - return request({ - url: '/system/menu/' + menuId, - method: 'delete' - }) -} \ No newline at end of file diff --git a/oms-vue/src/api/system/notice.js b/oms-vue/src/api/system/notice.js deleted file mode 100644 index c274ea5b..00000000 --- a/oms-vue/src/api/system/notice.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -// 查询公告列表 -export function listNotice(query) { - return request({ - url: '/system/notice/list', - method: 'get', - params: query - }) -} - -// 查询公告详细 -export function getNotice(noticeId) { - return request({ - url: '/system/notice/' + noticeId, - method: 'get' - }) -} - -// 新增公告 -export function addNotice(data) { - return request({ - url: '/system/notice', - method: 'post', - data: data - }) -} - -// 修改公告 -export function updateNotice(data) { - return request({ - url: '/system/notice', - method: 'put', - data: data - }) -} - -// 删除公告 -export function delNotice(noticeId) { - return request({ - url: '/system/notice/' + noticeId, - method: 'delete' - }) -} \ No newline at end of file diff --git a/oms-vue/src/api/system/post.js b/oms-vue/src/api/system/post.js deleted file mode 100644 index 1a8e9ca0..00000000 --- a/oms-vue/src/api/system/post.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -// 查询岗位列表 -export function listPost(query) { - return request({ - url: '/system/post/list', - method: 'get', - params: query - }) -} - -// 查询岗位详细 -export function getPost(postId) { - return request({ - url: '/system/post/' + postId, - method: 'get' - }) -} - -// 新增岗位 -export function addPost(data) { - return request({ - url: '/system/post', - method: 'post', - data: data - }) -} - -// 修改岗位 -export function updatePost(data) { - return request({ - url: '/system/post', - method: 'put', - data: data - }) -} - -// 删除岗位 -export function delPost(postId) { - return request({ - url: '/system/post/' + postId, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/system/role.js b/oms-vue/src/api/system/role.js deleted file mode 100644 index f13e6f40..00000000 --- a/oms-vue/src/api/system/role.js +++ /dev/null @@ -1,119 +0,0 @@ -import request from '@/utils/request' - -// 查询角色列表 -export function listRole(query) { - return request({ - url: '/system/role/list', - method: 'get', - params: query - }) -} - -// 查询角色详细 -export function getRole(roleId) { - return request({ - url: '/system/role/' + roleId, - method: 'get' - }) -} - -// 新增角色 -export function addRole(data) { - return request({ - url: '/system/role', - method: 'post', - data: data - }) -} - -// 修改角色 -export function updateRole(data) { - return request({ - url: '/system/role', - method: 'put', - data: data - }) -} - -// 角色数据权限 -export function dataScope(data) { - return request({ - url: '/system/role/dataScope', - method: 'put', - data: data - }) -} - -// 角色状态修改 -export function changeRoleStatus(roleId, status) { - const data = { - roleId, - status - } - return request({ - url: '/system/role/changeStatus', - method: 'put', - data: data - }) -} - -// 删除角色 -export function delRole(roleId) { - return request({ - url: '/system/role/' + roleId, - method: 'delete' - }) -} - -// 查询角色已授权用户列表 -export function allocatedUserList(query) { - return request({ - url: '/system/role/authUser/allocatedList', - method: 'get', - params: query - }) -} - -// 查询角色未授权用户列表 -export function unallocatedUserList(query) { - return request({ - url: '/system/role/authUser/unallocatedList', - method: 'get', - params: query - }) -} - -// 取消用户授权角色 -export function authUserCancel(data) { - return request({ - url: '/system/role/authUser/cancel', - method: 'put', - data: data - }) -} - -// 批量取消用户授权角色 -export function authUserCancelAll(data) { - return request({ - url: '/system/role/authUser/cancelAll', - method: 'put', - params: data - }) -} - -// 授权用户选择 -export function authUserSelectAll(data) { - return request({ - url: '/system/role/authUser/selectAll', - method: 'put', - params: data - }) -} - -// 根据角色ID查询部门树结构 -export function deptTreeSelect(roleId) { - return request({ - url: '/system/role/deptTree/' + roleId, - method: 'get' - }) -} diff --git a/oms-vue/src/api/system/user.js b/oms-vue/src/api/system/user.js deleted file mode 100644 index d063c433..00000000 --- a/oms-vue/src/api/system/user.js +++ /dev/null @@ -1,135 +0,0 @@ -import request from '@/utils/request' -import { parseStrEmpty } from "@/utils/zhijian"; - -// 查询用户列表 -export function listUser(query) { - return request({ - url: '/system/user/list', - method: 'get', - params: query - }) -} - -// 查询用户详细 -export function getUser(userId) { - return request({ - url: '/system/user/' + parseStrEmpty(userId), - method: 'get' - }) -} - -// 新增用户 -export function addUser(data) { - return request({ - url: '/system/user', - method: 'post', - data: data - }) -} - -// 修改用户 -export function updateUser(data) { - return request({ - url: '/system/user', - method: 'put', - data: data - }) -} - -// 删除用户 -export function delUser(userId) { - return request({ - url: '/system/user/' + userId, - method: 'delete' - }) -} - -// 用户密码重置 -export function resetUserPwd(userId, password) { - const data = { - userId, - password - } - return request({ - url: '/system/user/resetPwd', - method: 'put', - data: data - }) -} - -// 用户状态修改 -export function changeUserStatus(userId, status) { - const data = { - userId, - status - } - return request({ - url: '/system/user/changeStatus', - method: 'put', - data: data - }) -} - -// 查询用户个人信息 -export function getUserProfile() { - return request({ - url: '/system/user/profile', - method: 'get' - }) -} - -// 修改用户个人信息 -export function updateUserProfile(data) { - return request({ - url: '/system/user/profile', - method: 'put', - data: data - }) -} - -// 用户密码重置 -export function updateUserPwd(oldPassword, newPassword) { - const data = { - oldPassword, - newPassword - } - return request({ - url: '/system/user/profile/updatePwd', - method: 'put', - params: data - }) -} - -// 用户头像上传 -export function uploadAvatar(data) { - return request({ - url: '/system/user/profile/avatar', - method: 'post', - data: data - }) -} - -// 查询授权角色 -export function getAuthRole(userId) { - return request({ - url: '/system/user/authRole/' + userId, - method: 'get' - }) -} - -// 保存授权角色 -export function updateAuthRole(data) { - return request({ - url: '/system/user/authRole', - method: 'put', - params: data - }) -} - -// 查询部门下拉树结构 -export function deptTreeSelect() { - return request({ - url: '/system/user/deptTree', - method: 'get' - }) -} diff --git a/oms-vue/src/api/tao/order.js b/oms-vue/src/api/tao/order.js deleted file mode 100644 index 52eb707c..00000000 --- a/oms-vue/src/api/tao/order.js +++ /dev/null @@ -1,53 +0,0 @@ -import request from '@/utils/request' - -// 查询淘宝订单列表 -export function listOrder(query) { - return request({ - url: '/tao/order/list', - method: 'get', - params: query - }) -} - -// 查询淘宝订单详细 -export function getOrder(id) { - return request({ - url: '/tao/order/' + id, - method: 'get' - }) -} - -// 新增淘宝订单 -export function addOrder(data) { - return request({ - url: '/tao/order', - method: 'post', - data: data - }) -} - -// 修改淘宝订单 -export function confirmOrder(data) { - return request({ - url: '/tao/order/confirmOrder', - method: 'post', - data: data - }) -} - -// 删除淘宝订单 -export function delOrder(id) { - return request({ - url: '/tao/order/' + id, - method: 'delete' - }) -} - -// 接口拉取淘宝订单 -export function pullOrder(query) { - return request({ - url: '/taoapi/order/pull_order', - method: 'get', - params: query - }) -} diff --git a/oms-vue/src/api/tao/orderAddress.js b/oms-vue/src/api/tao/orderAddress.js deleted file mode 100644 index 0ca92463..00000000 --- a/oms-vue/src/api/tao/orderAddress.js +++ /dev/null @@ -1,44 +0,0 @@ -// import request from '@/utils/request' - -// // 查询淘宝订单地址列表 -// export function listOrderAddress(query) { -// return request({ -// url: '/tao/orderAddress/list', -// method: 'get', -// params: query -// }) -// } - -// // 查询淘宝订单地址详细 -// export function getOrderAddress(id) { -// return request({ -// url: '/tao/orderAddress/' + id, -// method: 'get' -// }) -// } - -// // 新增淘宝订单地址 -// export function addOrderAddress(data) { -// return request({ -// url: '/tao/orderAddress', -// method: 'post', -// data: data -// }) -// } - -// // 修改淘宝订单地址 -// export function updateOrderAddress(data) { -// return request({ -// url: '/tao/orderAddress', -// method: 'put', -// data: data -// }) -// } - -// // 删除淘宝订单地址 -// export function delOrderAddress(id) { -// return request({ -// url: '/tao/orderAddress/' + id, -// method: 'delete' -// }) -// } diff --git a/oms-vue/src/api/tao/taoRefund.js b/oms-vue/src/api/tao/taoRefund.js deleted file mode 100644 index f067f9a3..00000000 --- a/oms-vue/src/api/tao/taoRefund.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -// 查询淘宝退款订单列表 -export function listTaoRefund(query) { - return request({ - url: '/tao/taoRefund/list', - method: 'get', - params: query - }) -} - -// 查询淘宝退款订单详细 -export function getTaoRefund(id) { - return request({ - url: '/tao/taoRefund/' + id, - method: 'get' - }) -} - -// 新增淘宝退款订单 -export function addTaoRefund(data) { - return request({ - url: '/tao/taoRefund', - method: 'post', - data: data - }) -} - -// 修改淘宝退款订单 -export function updateTaoRefund(data) { - return request({ - url: '/tao/taoRefund', - method: 'put', - data: data - }) -} - -// 删除淘宝退款订单 -export function delTaoRefund(id) { - return request({ - url: '/tao/taoRefund/' + id, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/tool/gen.js b/oms-vue/src/api/tool/gen.js deleted file mode 100644 index 45069278..00000000 --- a/oms-vue/src/api/tool/gen.js +++ /dev/null @@ -1,76 +0,0 @@ -import request from '@/utils/request' - -// 查询生成表数据 -export function listTable(query) { - return request({ - url: '/tool/gen/list', - method: 'get', - params: query - }) -} -// 查询db数据库列表 -export function listDbTable(query) { - return request({ - url: '/tool/gen/db/list', - method: 'get', - params: query - }) -} - -// 查询表详细信息 -export function getGenTable(tableId) { - return request({ - url: '/tool/gen/' + tableId, - method: 'get' - }) -} - -// 修改代码生成信息 -export function updateGenTable(data) { - return request({ - url: '/tool/gen', - method: 'put', - data: data - }) -} - -// 导入表 -export function importTable(data) { - return request({ - url: '/tool/gen/importTable', - method: 'post', - params: data - }) -} - -// 预览生成代码 -export function previewTable(tableId) { - return request({ - url: '/tool/gen/preview/' + tableId, - method: 'get' - }) -} - -// 删除表数据 -export function delTable(tableId) { - return request({ - url: '/tool/gen/' + tableId, - method: 'delete' - }) -} - -// 生成代码(自定义路径) -export function genCode(tableName) { - return request({ - url: '/tool/gen/genCode/' + tableName, - method: 'get' - }) -} - -// 同步数据库 -export function synchDb(tableName) { - return request({ - url: '/tool/gen/synchDb/' + tableName, - method: 'get' - }) -} diff --git a/oms-vue/src/api/wms/WmsStockInEntry.js b/oms-vue/src/api/wms/WmsStockInEntry.js deleted file mode 100644 index 238f94f7..00000000 --- a/oms-vue/src/api/wms/WmsStockInEntry.js +++ /dev/null @@ -1,35 +0,0 @@ -import request from '@/utils/request' - -// 查询入库单列表 -export function listWmsStockInEntry(query) { - return request({ - url: '/wms/WmsStockInEntry/list', - method: 'get', - params: query - }) -} - -// 查询入库单详细 -export function getWmsStockInEntry(id) { - return request({ - url: '/wms/WmsStockInEntry/' + id, - method: 'get' - }) -} - -// 新增入库单 -export function stockIn(data) { - return request({ - url: '/wms/WmsStockInEntry/stockIn', - method: 'post', - data: data - }) -} - -export function complete(id) { - return request({ - url: '/wms/WmsStockInEntry/complete/' + id, - method: 'get' - }) -} - diff --git a/oms-vue/src/api/wms/location.js b/oms-vue/src/api/wms/location.js deleted file mode 100644 index 5f126ce4..00000000 --- a/oms-vue/src/api/wms/location.js +++ /dev/null @@ -1,52 +0,0 @@ -import request from '@/utils/request' - -// 查询仓库货架列表 -export function listLocation(query) { - return request({ - url: '/wms/location/list', - method: 'get', - params: query - }) -} -export function searchLocation(query) { - return request({ - url: '/wms/location/search', - method: 'get', - params: query - }) -} - - -// 查询仓库货架详细 -export function getLocation(id) { - return request({ - url: '/wms/location/' + id, - method: 'get' - }) -} - -// 新增仓库货架 -export function addLocation(data) { - return request({ - url: '/wms/location', - method: 'post', - data: data - }) -} - -// 修改仓库货架 -export function updateLocation(data) { - return request({ - url: '/wms/location', - method: 'put', - data: data - }) -} - -// 删除仓库货架 -export function delLocation(id) { - return request({ - url: '/wms/location/' + id, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/wms/shipping.js b/oms-vue/src/api/wms/shipping.js deleted file mode 100644 index d64dfd75..00000000 --- a/oms-vue/src/api/wms/shipping.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -// 查询仓库订单发货列表 -export function listShipping(query) { - return request({ - url: '/wms/shipping/list', - method: 'get', - params: query - }) -} - -// 查询仓库订单发货详细 -export function getShipping(id) { - return request({ - url: '/wms/shipping/' + id, - method: 'get' - }) -} - -// 新增仓库订单发货 -export function stockingAdd(data) { - return request({ - url: '/wms/shipping/stockingAdd', - method: 'post', - data: data - }) -} - -// 修改仓库订单发货 -export function updateShipping(data) { - return request({ - url: '/wms/shipping', - method: 'put', - data: data - }) -} - -// 删除仓库订单发货 -export function delShipping(id) { - return request({ - url: '/wms/shipping/' + id, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/wms/stockOutEntry.js b/oms-vue/src/api/wms/stockOutEntry.js deleted file mode 100644 index ac0952fb..00000000 --- a/oms-vue/src/api/wms/stockOutEntry.js +++ /dev/null @@ -1,28 +0,0 @@ -import request from '@/utils/request' - -// 查询出库单列表 -export function listStockOutEntry(query) { - return request({ - url: '/wms/stockOutEntry/list', - method: 'get', - params: query - }) -} - -// 查询出库单详细 -export function getStockOutEntry(id) { - return request({ - url: '/wms/stockOutEntry/' + id, - method: 'get' - }) -} - -// 出库 -export function stockOut(data) { - return request({ - url: '/wms/stockOutEntry/stockOut', - method: 'post', - data: data - }) -} - diff --git a/oms-vue/src/api/wms/stockOutEntryItemDetail.js b/oms-vue/src/api/wms/stockOutEntryItemDetail.js deleted file mode 100644 index b36782c3..00000000 --- a/oms-vue/src/api/wms/stockOutEntryItemDetail.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -// 查询出库明细详情列表 -export function listStockOutEntryItemDetail(query) { - return request({ - url: '/wms/stockOutEntryItemDetail/list', - method: 'get', - params: query - }) -} - -// 查询出库明细详情详细 -export function getStockOutEntryItemDetail(id) { - return request({ - url: '/wms/stockOutEntryItemDetail/' + id, - method: 'get' - }) -} - -// 新增出库明细详情 -export function addStockOutEntryItemDetail(data) { - return request({ - url: '/wms/stockOutEntryItemDetail', - method: 'post', - data: data - }) -} - -// 修改出库明细详情 -export function updateStockOutEntryItemDetail(data) { - return request({ - url: '/wms/stockOutEntryItemDetail', - method: 'put', - data: data - }) -} - -// 删除出库明细详情 -export function delStockOutEntryItemDetail(id) { - return request({ - url: '/wms/stockOutEntryItemDetail/' + id, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/xhs/order.js b/oms-vue/src/api/xhs/order.js deleted file mode 100644 index 4002adbb..00000000 --- a/oms-vue/src/api/xhs/order.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -// 查询小红书订单列表 -export function listOrder(query) { - return request({ - url: '/xhs/order/list', - method: 'get', - params: query - }) -} - -// 查询小红书订单详细 -export function getOrder(id) { - return request({ - url: '/xhs/order/' + id, - method: 'get' - }) -} - -// 新增小红书订单 -export function addOrder(data) { - return request({ - url: '/xhs/order', - method: 'post', - data: data - }) -} - -// 修改小红书订单 -export function confirmOrder(data) { - return request({ - url: '/xhs/order/confirm', - method: 'post', - data: data - }) -} - -// 删除小红书订单 -export function delOrder(id) { - return request({ - url: '/xhs/order/' + id, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/xhs/orderReceiver.js b/oms-vue/src/api/xhs/orderReceiver.js deleted file mode 100644 index a0387e36..00000000 --- a/oms-vue/src/api/xhs/orderReceiver.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -// 查询订单收件人信息列表 -export function listOrderReceiver(query) { - return request({ - url: '/xhs/orderReceiver/list', - method: 'get', - params: query - }) -} - -// 查询订单收件人信息详细 -export function getOrderReceiver(id) { - return request({ - url: '/xhs/orderReceiver/' + id, - method: 'get' - }) -} - -// 新增订单收件人信息 -export function addOrderReceiver(data) { - return request({ - url: '/xhs/orderReceiver', - method: 'post', - data: data - }) -} - -// 修改订单收件人信息 -export function updateOrderReceiver(data) { - return request({ - url: '/xhs/orderReceiver', - method: 'put', - data: data - }) -} - -// 删除订单收件人信息 -export function delOrderReceiver(id) { - return request({ - url: '/xhs/orderReceiver/' + id, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/xhs/refund.js b/oms-vue/src/api/xhs/refund.js deleted file mode 100644 index 9d5a9fa5..00000000 --- a/oms-vue/src/api/xhs/refund.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -// 查询小红书订单退款列表 -export function listRefund(query) { - return request({ - url: '/xhs/refund/list', - method: 'get', - params: query - }) -} - -// 查询小红书订单退款详细 -export function getRefund(id) { - return request({ - url: '/xhs/refund/' + id, - method: 'get' - }) -} - -// 新增小红书订单退款 -export function addRefund(data) { - return request({ - url: '/xhs/refund', - method: 'post', - data: data - }) -} - -// 修改小红书订单退款 -export function updateRefund(data) { - return request({ - url: '/xhs/refund', - method: 'put', - data: data - }) -} - -// 删除小红书订单退款 -export function delRefund(id) { - return request({ - url: '/xhs/refund/' + id, - method: 'delete' - }) -} diff --git a/oms-vue/src/api/xhs/xhsRefund.js b/oms-vue/src/api/xhs/xhsRefund.js deleted file mode 100644 index 4f9ee9bf..00000000 --- a/oms-vue/src/api/xhs/xhsRefund.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -// 查询小红书订单退款列表 -export function listXhsRefund(query) { - return request({ - url: '/xhs/xhsRefund/list', - method: 'get', - params: query - }) -} - -// 查询小红书订单退款详细 -export function getXhsRefund(id) { - return request({ - url: '/xhs/xhsRefund/' + id, - method: 'get' - }) -} - -// 新增小红书订单退款 -export function addXhsRefund(data) { - return request({ - url: '/xhs/xhsRefund', - method: 'post', - data: data - }) -} - -// 修改小红书订单退款 -export function updateXhsRefund(data) { - return request({ - url: '/xhs/xhsRefund', - method: 'put', - data: data - }) -} - -// 删除小红书订单退款 -export function delXhsRefund(id) { - return request({ - url: '/xhs/xhsRefund/' + id, - method: 'delete' - }) -} diff --git a/oms-vue/src/assets/icons/index.js b/oms-vue/src/assets/icons/index.js deleted file mode 100644 index 2c6b309c..00000000 --- a/oms-vue/src/assets/icons/index.js +++ /dev/null @@ -1,9 +0,0 @@ -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/oms-vue/src/assets/icons/svg/404.svg b/oms-vue/src/assets/icons/svg/404.svg deleted file mode 100644 index 6df50190..00000000 --- a/oms-vue/src/assets/icons/svg/404.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/bug.svg b/oms-vue/src/assets/icons/svg/bug.svg deleted file mode 100644 index 05a150dc..00000000 --- a/oms-vue/src/assets/icons/svg/bug.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/build.svg b/oms-vue/src/assets/icons/svg/build.svg deleted file mode 100644 index 97c46886..00000000 --- a/oms-vue/src/assets/icons/svg/build.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/button.svg b/oms-vue/src/assets/icons/svg/button.svg deleted file mode 100644 index 904fddc8..00000000 --- a/oms-vue/src/assets/icons/svg/button.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/cascader.svg b/oms-vue/src/assets/icons/svg/cascader.svg deleted file mode 100644 index e256024f..00000000 --- a/oms-vue/src/assets/icons/svg/cascader.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/chart.svg b/oms-vue/src/assets/icons/svg/chart.svg deleted file mode 100644 index 27728fb0..00000000 --- a/oms-vue/src/assets/icons/svg/chart.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/checkbox.svg b/oms-vue/src/assets/icons/svg/checkbox.svg deleted file mode 100644 index 013fd3a2..00000000 --- a/oms-vue/src/assets/icons/svg/checkbox.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/clipboard.svg b/oms-vue/src/assets/icons/svg/clipboard.svg deleted file mode 100644 index 90923ff6..00000000 --- a/oms-vue/src/assets/icons/svg/clipboard.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/code.svg b/oms-vue/src/assets/icons/svg/code.svg deleted file mode 100644 index 5f9c5abd..00000000 --- a/oms-vue/src/assets/icons/svg/code.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/color.svg b/oms-vue/src/assets/icons/svg/color.svg deleted file mode 100644 index 44a81aab..00000000 --- a/oms-vue/src/assets/icons/svg/color.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/component.svg b/oms-vue/src/assets/icons/svg/component.svg deleted file mode 100644 index 29c34580..00000000 --- a/oms-vue/src/assets/icons/svg/component.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/dashboard.svg b/oms-vue/src/assets/icons/svg/dashboard.svg deleted file mode 100644 index 5317d370..00000000 --- a/oms-vue/src/assets/icons/svg/dashboard.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/date-range.svg b/oms-vue/src/assets/icons/svg/date-range.svg deleted file mode 100644 index fda571e7..00000000 --- a/oms-vue/src/assets/icons/svg/date-range.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/date.svg b/oms-vue/src/assets/icons/svg/date.svg deleted file mode 100644 index 52dc73ee..00000000 --- a/oms-vue/src/assets/icons/svg/date.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/dict.svg b/oms-vue/src/assets/icons/svg/dict.svg deleted file mode 100644 index 48493773..00000000 --- a/oms-vue/src/assets/icons/svg/dict.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/documentation.svg b/oms-vue/src/assets/icons/svg/documentation.svg deleted file mode 100644 index 70431228..00000000 --- a/oms-vue/src/assets/icons/svg/documentation.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/download.svg b/oms-vue/src/assets/icons/svg/download.svg deleted file mode 100644 index c8969513..00000000 --- a/oms-vue/src/assets/icons/svg/download.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/druid.svg b/oms-vue/src/assets/icons/svg/druid.svg deleted file mode 100644 index a2b4b4ed..00000000 --- a/oms-vue/src/assets/icons/svg/druid.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/education.svg b/oms-vue/src/assets/icons/svg/education.svg deleted file mode 100644 index 7bfb01d1..00000000 --- a/oms-vue/src/assets/icons/svg/education.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/email.svg b/oms-vue/src/assets/icons/svg/email.svg deleted file mode 100644 index 74d25e21..00000000 --- a/oms-vue/src/assets/icons/svg/email.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/example.svg b/oms-vue/src/assets/icons/svg/example.svg deleted file mode 100644 index 46f42b53..00000000 --- a/oms-vue/src/assets/icons/svg/example.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/excel.svg b/oms-vue/src/assets/icons/svg/excel.svg deleted file mode 100644 index 74d97b80..00000000 --- a/oms-vue/src/assets/icons/svg/excel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/form.svg b/oms-vue/src/assets/icons/svg/form.svg deleted file mode 100644 index dcbaa185..00000000 --- a/oms-vue/src/assets/icons/svg/form.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/guide.svg b/oms-vue/src/assets/icons/svg/guide.svg deleted file mode 100644 index b2710017..00000000 --- a/oms-vue/src/assets/icons/svg/guide.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/input.svg b/oms-vue/src/assets/icons/svg/input.svg deleted file mode 100644 index ab91381e..00000000 --- a/oms-vue/src/assets/icons/svg/input.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/international.svg b/oms-vue/src/assets/icons/svg/international.svg deleted file mode 100644 index e9b56eee..00000000 --- a/oms-vue/src/assets/icons/svg/international.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/job.svg b/oms-vue/src/assets/icons/svg/job.svg deleted file mode 100644 index 2a93a251..00000000 --- a/oms-vue/src/assets/icons/svg/job.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/language.svg b/oms-vue/src/assets/icons/svg/language.svg deleted file mode 100644 index 0082b577..00000000 --- a/oms-vue/src/assets/icons/svg/language.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/link.svg b/oms-vue/src/assets/icons/svg/link.svg deleted file mode 100644 index 48197ba4..00000000 --- a/oms-vue/src/assets/icons/svg/link.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/list.svg b/oms-vue/src/assets/icons/svg/list.svg deleted file mode 100644 index 20259edd..00000000 --- a/oms-vue/src/assets/icons/svg/list.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/lock.svg b/oms-vue/src/assets/icons/svg/lock.svg deleted file mode 100644 index 74fee543..00000000 --- a/oms-vue/src/assets/icons/svg/lock.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/log.svg b/oms-vue/src/assets/icons/svg/log.svg deleted file mode 100644 index d879d33b..00000000 --- a/oms-vue/src/assets/icons/svg/log.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/logininfor.svg b/oms-vue/src/assets/icons/svg/logininfor.svg deleted file mode 100644 index 267f8447..00000000 --- a/oms-vue/src/assets/icons/svg/logininfor.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/message.svg b/oms-vue/src/assets/icons/svg/message.svg deleted file mode 100644 index 14ca8172..00000000 --- a/oms-vue/src/assets/icons/svg/message.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/money.svg b/oms-vue/src/assets/icons/svg/money.svg deleted file mode 100644 index c1580de1..00000000 --- a/oms-vue/src/assets/icons/svg/money.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/nested.svg b/oms-vue/src/assets/icons/svg/nested.svg deleted file mode 100644 index 06713a86..00000000 --- a/oms-vue/src/assets/icons/svg/nested.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/number.svg b/oms-vue/src/assets/icons/svg/number.svg deleted file mode 100644 index ad5ce9af..00000000 --- a/oms-vue/src/assets/icons/svg/number.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/online.svg b/oms-vue/src/assets/icons/svg/online.svg deleted file mode 100644 index 330a2029..00000000 --- a/oms-vue/src/assets/icons/svg/online.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/pdf.svg b/oms-vue/src/assets/icons/svg/pdf.svg deleted file mode 100644 index 957aa0cc..00000000 --- a/oms-vue/src/assets/icons/svg/pdf.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/people.svg b/oms-vue/src/assets/icons/svg/people.svg deleted file mode 100644 index 2bd54aeb..00000000 --- a/oms-vue/src/assets/icons/svg/people.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/peoples.svg b/oms-vue/src/assets/icons/svg/peoples.svg deleted file mode 100644 index aab852e5..00000000 --- a/oms-vue/src/assets/icons/svg/peoples.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/phone.svg b/oms-vue/src/assets/icons/svg/phone.svg deleted file mode 100644 index ab8e8c4e..00000000 --- a/oms-vue/src/assets/icons/svg/phone.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/post.svg b/oms-vue/src/assets/icons/svg/post.svg deleted file mode 100644 index 2922c613..00000000 --- a/oms-vue/src/assets/icons/svg/post.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/qq.svg b/oms-vue/src/assets/icons/svg/qq.svg deleted file mode 100644 index ee13d4ec..00000000 --- a/oms-vue/src/assets/icons/svg/qq.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/question.svg b/oms-vue/src/assets/icons/svg/question.svg deleted file mode 100644 index cf75bd4b..00000000 --- a/oms-vue/src/assets/icons/svg/question.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/radio.svg b/oms-vue/src/assets/icons/svg/radio.svg deleted file mode 100644 index 0cde3452..00000000 --- a/oms-vue/src/assets/icons/svg/radio.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/rate.svg b/oms-vue/src/assets/icons/svg/rate.svg deleted file mode 100644 index aa3b14d7..00000000 --- a/oms-vue/src/assets/icons/svg/rate.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/redis-list.svg b/oms-vue/src/assets/icons/svg/redis-list.svg deleted file mode 100644 index 98a15b2a..00000000 --- a/oms-vue/src/assets/icons/svg/redis-list.svg +++ /dev/null @@ -1,2 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/row.svg b/oms-vue/src/assets/icons/svg/row.svg deleted file mode 100644 index 07809922..00000000 --- a/oms-vue/src/assets/icons/svg/row.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/search.svg b/oms-vue/src/assets/icons/svg/search.svg deleted file mode 100644 index 84233dda..00000000 --- a/oms-vue/src/assets/icons/svg/search.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/select.svg b/oms-vue/src/assets/icons/svg/select.svg deleted file mode 100644 index d6283828..00000000 --- a/oms-vue/src/assets/icons/svg/select.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/server.svg b/oms-vue/src/assets/icons/svg/server.svg deleted file mode 100644 index eb287e36..00000000 --- a/oms-vue/src/assets/icons/svg/server.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/shopping.svg b/oms-vue/src/assets/icons/svg/shopping.svg deleted file mode 100644 index 87513e7c..00000000 --- a/oms-vue/src/assets/icons/svg/shopping.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/skill.svg b/oms-vue/src/assets/icons/svg/skill.svg deleted file mode 100644 index a3b73121..00000000 --- a/oms-vue/src/assets/icons/svg/skill.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/slider.svg b/oms-vue/src/assets/icons/svg/slider.svg deleted file mode 100644 index fbe4f39f..00000000 --- a/oms-vue/src/assets/icons/svg/slider.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/star.svg b/oms-vue/src/assets/icons/svg/star.svg deleted file mode 100644 index 6cf86e66..00000000 --- a/oms-vue/src/assets/icons/svg/star.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/stock.svg b/oms-vue/src/assets/icons/svg/stock.svg deleted file mode 100644 index 3886875e..00000000 --- a/oms-vue/src/assets/icons/svg/stock.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/stock1.svg b/oms-vue/src/assets/icons/svg/stock1.svg deleted file mode 100644 index f7a8aa8d..00000000 --- a/oms-vue/src/assets/icons/svg/stock1.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/stockin.svg b/oms-vue/src/assets/icons/svg/stockin.svg deleted file mode 100644 index 73c2391f..00000000 --- a/oms-vue/src/assets/icons/svg/stockin.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/swagger.svg b/oms-vue/src/assets/icons/svg/swagger.svg deleted file mode 100644 index 05d4e7bc..00000000 --- a/oms-vue/src/assets/icons/svg/swagger.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/switch.svg b/oms-vue/src/assets/icons/svg/switch.svg deleted file mode 100644 index 0ba61e38..00000000 --- a/oms-vue/src/assets/icons/svg/switch.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/system.svg b/oms-vue/src/assets/icons/svg/system.svg deleted file mode 100644 index 5992593e..00000000 --- a/oms-vue/src/assets/icons/svg/system.svg +++ /dev/null @@ -1,2 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/tab.svg b/oms-vue/src/assets/icons/svg/tab.svg deleted file mode 100644 index b4b48e48..00000000 --- a/oms-vue/src/assets/icons/svg/tab.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/table.svg b/oms-vue/src/assets/icons/svg/table.svg deleted file mode 100644 index 0e3dc9de..00000000 --- a/oms-vue/src/assets/icons/svg/table.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/textarea.svg b/oms-vue/src/assets/icons/svg/textarea.svg deleted file mode 100644 index 2709f292..00000000 --- a/oms-vue/src/assets/icons/svg/textarea.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/theme.svg b/oms-vue/src/assets/icons/svg/theme.svg deleted file mode 100644 index 5982a2f7..00000000 --- a/oms-vue/src/assets/icons/svg/theme.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/time-range.svg b/oms-vue/src/assets/icons/svg/time-range.svg deleted file mode 100644 index 13c1202b..00000000 --- a/oms-vue/src/assets/icons/svg/time-range.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/time.svg b/oms-vue/src/assets/icons/svg/time.svg deleted file mode 100644 index b376e32a..00000000 --- a/oms-vue/src/assets/icons/svg/time.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/tool.svg b/oms-vue/src/assets/icons/svg/tool.svg deleted file mode 100644 index 48e0e357..00000000 --- a/oms-vue/src/assets/icons/svg/tool.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/tree-table.svg b/oms-vue/src/assets/icons/svg/tree-table.svg deleted file mode 100644 index 8aafdb82..00000000 --- a/oms-vue/src/assets/icons/svg/tree-table.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/tree.svg b/oms-vue/src/assets/icons/svg/tree.svg deleted file mode 100644 index dd4b7dd2..00000000 --- a/oms-vue/src/assets/icons/svg/tree.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/upload.svg b/oms-vue/src/assets/icons/svg/upload.svg deleted file mode 100644 index bae49c0a..00000000 --- a/oms-vue/src/assets/icons/svg/upload.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/user.svg b/oms-vue/src/assets/icons/svg/user.svg deleted file mode 100644 index 0ba0716a..00000000 --- a/oms-vue/src/assets/icons/svg/user.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/validCode.svg b/oms-vue/src/assets/icons/svg/validCode.svg deleted file mode 100644 index cfb10214..00000000 --- a/oms-vue/src/assets/icons/svg/validCode.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/wechat.svg b/oms-vue/src/assets/icons/svg/wechat.svg deleted file mode 100644 index c586e551..00000000 --- a/oms-vue/src/assets/icons/svg/wechat.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/zip.svg b/oms-vue/src/assets/icons/svg/zip.svg deleted file mode 100644 index f806fc48..00000000 --- a/oms-vue/src/assets/icons/svg/zip.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svgo.yml b/oms-vue/src/assets/icons/svgo.yml deleted file mode 100644 index d11906ae..00000000 --- a/oms-vue/src/assets/icons/svgo.yml +++ /dev/null @@ -1,22 +0,0 @@ -# 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/oms-vue/src/assets/images/dark.svg b/oms-vue/src/assets/images/dark.svg deleted file mode 100644 index f646bd7e..00000000 --- a/oms-vue/src/assets/images/dark.svg +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/oms-vue/src/assets/images/light.svg b/oms-vue/src/assets/images/light.svg deleted file mode 100644 index ab7cc088..00000000 --- a/oms-vue/src/assets/images/light.svg +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/oms-vue/src/assets/images/login-background.jpg b/oms-vue/src/assets/images/login-background.jpg deleted file mode 100644 index 8a89eb82..00000000 Binary files a/oms-vue/src/assets/images/login-background.jpg and /dev/null differ diff --git a/oms-vue/src/assets/images/pay.png b/oms-vue/src/assets/images/pay.png deleted file mode 100644 index bb8b9672..00000000 Binary files a/oms-vue/src/assets/images/pay.png and /dev/null differ diff --git a/oms-vue/src/assets/images/profile.jpg b/oms-vue/src/assets/images/profile.jpg deleted file mode 100644 index b3a940b2..00000000 Binary files a/oms-vue/src/assets/images/profile.jpg and /dev/null differ diff --git a/oms-vue/src/assets/logo/logo.png b/oms-vue/src/assets/logo/logo.png deleted file mode 100644 index e2637602..00000000 Binary files a/oms-vue/src/assets/logo/logo.png and /dev/null differ diff --git a/oms-vue/src/assets/styles/btn.scss b/oms-vue/src/assets/styles/btn.scss deleted file mode 100644 index e6ba1a8e..00000000 --- a/oms-vue/src/assets/styles/btn.scss +++ /dev/null @@ -1,99 +0,0 @@ -@import './variables.scss'; - -@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/oms-vue/src/assets/styles/element-ui.scss b/oms-vue/src/assets/styles/element-ui.scss deleted file mode 100644 index 363092a6..00000000 --- a/oms-vue/src/assets/styles/element-ui.scss +++ /dev/null @@ -1,92 +0,0 @@ -// 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: 0px; - } -} - -.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: 0px; - } - } -} - -// 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; -} - -// to fix el-date-picker css style -.el-range-separator { - box-sizing: content-box; -} - -.el-menu--collapse - > div - > .el-submenu - > .el-submenu__title - .el-submenu__icon-arrow { - display: none; -} \ No newline at end of file diff --git a/oms-vue/src/assets/styles/element-variables.scss b/oms-vue/src/assets/styles/element-variables.scss deleted file mode 100644 index 1615ff28..00000000 --- a/oms-vue/src/assets/styles/element-variables.scss +++ /dev/null @@ -1,31 +0,0 @@ -/** -* 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 "~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/oms-vue/src/assets/styles/index.scss b/oms-vue/src/assets/styles/index.scss deleted file mode 100644 index 2f3b9ef9..00000000 --- a/oms-vue/src/assets/styles/index.scss +++ /dev/null @@ -1,182 +0,0 @@ -@import './variables.scss'; -@import './mixin.scss'; -@import './transition.scss'; -@import './element-ui.scss'; -@import './sidebar.scss'; -@import './btn.scss'; - -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; -} - -label { - font-weight: 700; -} - -html { - height: 100%; - box-sizing: border-box; -} - -#app { - height: 100%; -} - -*, -*:before, -*:after { - box-sizing: inherit; -} - -.no-padding { - padding: 0px !important; -} - -.padding-content { - padding: 4px 0; -} - -a:focus, -a:active { - outline: none; -} - -a, -a:focus, -a:hover { - cursor: pointer; - color: inherit; - text-decoration: none; -} - -div:focus { - outline: none; -} - -.fr { - float: right; -} - -.fl { - float: left; -} - -.pr-5 { - padding-right: 5px; -} - -.pl-5 { - padding-left: 5px; -} - -.block { - display: block; -} - -.pointer { - cursor: pointer; -} - -.inlineBlock { - display: block; -} - -.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; -} - -.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); - } -} - -.filter-container { - padding-bottom: 10px; - - .filter-item { - display: inline-block; - vertical-align: middle; - margin-bottom: 10px; - } -} diff --git a/oms-vue/src/assets/styles/mixin.scss b/oms-vue/src/assets/styles/mixin.scss deleted file mode 100644 index 06fa0612..00000000 --- a/oms-vue/src/assets/styles/mixin.scss +++ /dev/null @@ -1,66 +0,0 @@ -@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/oms-vue/src/assets/styles/transition.scss b/oms-vue/src/assets/styles/transition.scss deleted file mode 100644 index 073f8c6c..00000000 --- a/oms-vue/src/assets/styles/transition.scss +++ /dev/null @@ -1,49 +0,0 @@ -// 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--move, -.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/oms-vue/src/assets/styles/variables.scss b/oms-vue/src/assets/styles/variables.scss deleted file mode 100644 index 34484d47..00000000 --- a/oms-vue/src/assets/styles/variables.scss +++ /dev/null @@ -1,54 +0,0 @@ -// base color -$blue:#324157; -$light-blue:#3A71A8; -$red:#C03639; -$pink: #E65D6E; -$green: #30B08F; -$tiffany: #4AB7BD; -$yellow:#FEC171; -$panGreen: #30B08F; - -// 默认菜单主题风格 -$base-menu-color:#bfcbd9; -$base-menu-color-active:#f4f4f5; -$base-menu-background:#304156; -$base-logo-title-color: #ffffff; - -$base-menu-light-color:rgba(0,0,0,.70); -$base-menu-light-background:#ffffff; -$base-logo-light-title-color: #001529; - -$base-sub-menu-background:#1f2d3d; -$base-sub-menu-hover:#001528; - -// 自定义暗色菜单风格 -/** -$base-menu-color:hsla(0,0%,100%,.65); -$base-menu-color-active:#fff; -$base-menu-background:#001529; -$base-logo-title-color: #ffffff; - -$base-menu-light-color:rgba(0,0,0,.70); -$base-menu-light-background:#ffffff; -$base-logo-light-title-color: #001529; - -$base-sub-menu-background:#000c17; -$base-sub-menu-hover:#001528; -*/ - -$base-sidebar-width: 200px; - -// the :export directive is the magic sauce for webpack -// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass -:export { - menuColor: $base-menu-color; - menuLightColor: $base-menu-light-color; - menuColorActive: $base-menu-color-active; - menuBackground: $base-menu-background; - menuLightBackground: $base-menu-light-background; - subMenuBackground: $base-sub-menu-background; - subMenuHover: $base-sub-menu-hover; - sideBarWidth: $base-sidebar-width; - logoTitleColor: $base-logo-title-color; - logoLightTitleColor: $base-logo-light-title-color -} diff --git a/oms-vue/src/assets/styles/zhijian.scss b/oms-vue/src/assets/styles/zhijian.scss deleted file mode 100644 index f7872374..00000000 --- a/oms-vue/src/assets/styles/zhijian.scss +++ /dev/null @@ -1,277 +0,0 @@ - /** - * 通用css样式布局处理 - * Copyright (c) 2019 zhijian - */ - - /** 基础通用 **/ -.pt5 { - padding-top: 5px; -} -.pr5 { - padding-right: 5px; -} -.pb5 { - padding-bottom: 5px; -} -.mt5 { - margin-top: 5px; -} -.mr5 { - margin-right: 5px; -} -.mb5 { - margin-bottom: 5px; -} -.mb8 { - margin-bottom: 8px; -} -.ml5 { - margin-left: 5px; -} -.mt10 { - margin-top: 10px; -} -.mr10 { - margin-right: 10px; -} -.mb10 { - margin-bottom: 10px; -} -.ml10 { - margin-left: 10px; -} -.mt20 { - margin-top: 20px; -} -.mr20 { - margin-right: 20px; -} -.mb20 { - margin-bottom: 20px; -} -.ml20 { - margin-left: 20px; -} - -.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { - font-family: inherit; - font-weight: 500; - line-height: 1.1; - color: inherit; -} - -.el-message-box__status + .el-message-box__message{ - word-break: break-word; -} - -.el-dialog:not(.is-fullscreen) { - margin-top: 6vh !important; -} - -.el-dialog__wrapper.scrollbar .el-dialog .el-dialog__body { - overflow: auto; - overflow-x: hidden; - max-height: 70vh; - padding: 10px 20px 0; -} - -.el-table { - .el-table__header-wrapper, .el-table__fixed-header-wrapper { - th { - word-break: break-word; - background-color: #f8f8f9; - color: #515a6e; - height: 40px; - font-size: 13px; - } - } - .el-table__body-wrapper { - .el-button [class*="el-icon-"] + span { - margin-left: 1px; - } - } -} - -/** 表单布局 **/ -.form-header { - font-size:15px; - color:#6379bb; - border-bottom:1px solid #ddd; - margin:8px 10px 25px 10px; - padding-bottom:5px -} - -/** 表格布局 **/ -.pagination-container { - position: relative; - height: 25px; - margin-bottom: 10px; - margin-top: 15px; - padding: 10px 20px !important; -} - -/* tree border */ -.tree-border { - margin-top: 5px; - border: 1px solid #e5e6e7; - background: #FFFFFF none; - border-radius:4px; -} - -.pagination-container .el-pagination { - right: 0; - position: absolute; -} - -@media ( max-width : 768px) { - .pagination-container .el-pagination > .el-pagination__jump { - display: none !important; - } - .pagination-container .el-pagination > .el-pagination__sizes { - display: none !important; - } -} - -.el-table .fixed-width .el-button--mini { - padding-left: 0; - padding-right: 0; - width: inherit; -} - -/** 表格更多操作下拉样式 */ -.el-table .el-dropdown-link,.el-table .el-dropdown-selfdefine { - cursor: pointer; - margin-left: 5px; -} - -.el-table .el-dropdown, .el-icon-arrow-down { - font-size: 12px; -} - -.el-tree-node__content > .el-checkbox { - margin-right: 8px; -} - -.list-group-striped > .list-group-item { - border-left: 0; - border-right: 0; - border-radius: 0; - padding-left: 0; - padding-right: 0; -} - -.list-group { - padding-left: 0px; - list-style: none; -} - -.list-group-item { - border-bottom: 1px solid #e7eaec; - border-top: 1px solid #e7eaec; - margin-bottom: -1px; - padding: 11px 0px; - font-size: 13px; -} - -.pull-right { - float: right !important; -} - -.el-card__header { - padding: 14px 15px 7px; - min-height: 40px; -} - -.el-card__body { - padding: 15px 20px 20px 20px; -} - -.card-box { - padding-right: 15px; - padding-left: 15px; - margin-bottom: 10px; -} - -/* button color */ -.el-button--cyan.is-active, -.el-button--cyan:active { - background: #20B2AA; - border-color: #20B2AA; - color: #FFFFFF; -} - -.el-button--cyan:focus, -.el-button--cyan:hover { - background: #48D1CC; - border-color: #48D1CC; - color: #FFFFFF; -} - -.el-button--cyan { - background-color: #20B2AA; - border-color: #20B2AA; - color: #FFFFFF; -} - -/* text color */ -.text-navy { - color: #1ab394; -} - -.text-primary { - color: inherit; -} - -.text-success { - color: #1c84c6; -} - -.text-info { - color: #23c6c8; -} - -.text-warning { - color: #f8ac59; -} - -.text-danger { - color: #ed5565; -} - -.text-muted { - color: #888888; -} - -/* image */ -.img-circle { - border-radius: 50%; -} - -.img-lg { - width: 120px; - height: 120px; -} - -.avatar-upload-preview { - position: relative; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - width: 200px; - height: 200px; - border-radius: 50%; - box-shadow: 0 0 4px #ccc; - overflow: hidden; -} - -/* 拖拽列样式 */ -.sortable-ghost{ - opacity: .8; - color: #fff!important; - background: #42b983!important; -} - -.top-right-btn { - position: relative; - float: right; -} diff --git a/oms-vue/src/components/Breadcrumb/index.vue b/oms-vue/src/components/Breadcrumb/index.vue deleted file mode 100644 index 1696f547..00000000 --- a/oms-vue/src/components/Breadcrumb/index.vue +++ /dev/null @@ -1,74 +0,0 @@ - - - - - diff --git a/oms-vue/src/components/Crontab/day.vue b/oms-vue/src/components/Crontab/day.vue deleted file mode 100644 index fe3eaf0c..00000000 --- a/oms-vue/src/components/Crontab/day.vue +++ /dev/null @@ -1,161 +0,0 @@ - - - diff --git a/oms-vue/src/components/Crontab/hour.vue b/oms-vue/src/components/Crontab/hour.vue deleted file mode 100644 index 4b1f1fcd..00000000 --- a/oms-vue/src/components/Crontab/hour.vue +++ /dev/null @@ -1,114 +0,0 @@ - - - diff --git a/oms-vue/src/components/Crontab/index.vue b/oms-vue/src/components/Crontab/index.vue deleted file mode 100644 index 3963df28..00000000 --- a/oms-vue/src/components/Crontab/index.vue +++ /dev/null @@ -1,430 +0,0 @@ - - - - diff --git a/oms-vue/src/components/Crontab/min.vue b/oms-vue/src/components/Crontab/min.vue deleted file mode 100644 index 43cab900..00000000 --- a/oms-vue/src/components/Crontab/min.vue +++ /dev/null @@ -1,116 +0,0 @@ - - - \ No newline at end of file diff --git a/oms-vue/src/components/Crontab/month.vue b/oms-vue/src/components/Crontab/month.vue deleted file mode 100644 index fd0ac384..00000000 --- a/oms-vue/src/components/Crontab/month.vue +++ /dev/null @@ -1,114 +0,0 @@ - - - diff --git a/oms-vue/src/components/Crontab/result.vue b/oms-vue/src/components/Crontab/result.vue deleted file mode 100644 index aea6e0e4..00000000 --- a/oms-vue/src/components/Crontab/result.vue +++ /dev/null @@ -1,559 +0,0 @@ - - - diff --git a/oms-vue/src/components/Crontab/second.vue b/oms-vue/src/components/Crontab/second.vue deleted file mode 100644 index e7b77617..00000000 --- a/oms-vue/src/components/Crontab/second.vue +++ /dev/null @@ -1,117 +0,0 @@ - - - diff --git a/oms-vue/src/components/Crontab/week.vue b/oms-vue/src/components/Crontab/week.vue deleted file mode 100644 index 1cec700e..00000000 --- a/oms-vue/src/components/Crontab/week.vue +++ /dev/null @@ -1,202 +0,0 @@ - - - diff --git a/oms-vue/src/components/Crontab/year.vue b/oms-vue/src/components/Crontab/year.vue deleted file mode 100644 index 5487a6c7..00000000 --- a/oms-vue/src/components/Crontab/year.vue +++ /dev/null @@ -1,131 +0,0 @@ - - - diff --git a/oms-vue/src/components/DictData/index.js b/oms-vue/src/components/DictData/index.js deleted file mode 100644 index 7b85d4aa..00000000 --- a/oms-vue/src/components/DictData/index.js +++ /dev/null @@ -1,49 +0,0 @@ -import Vue from 'vue' -import store from '@/store' -import DataDict from '@/utils/dict' -import { getDicts as getDicts } from '@/api/system/dict/data' - -function searchDictByKey(dict, key) { - if (key == null && key == "") { - return null - } - try { - for (let i = 0; i < dict.length; i++) { - if (dict[i].key == key) { - return dict[i].value - } - } - } catch (e) { - return null - } -} - -function install() { - Vue.use(DataDict, { - metas: { - '*': { - labelField: 'dictLabel', - valueField: 'dictValue', - request(dictMeta) { - const storeDict = searchDictByKey(store.getters.dict, dictMeta.type) - if (storeDict) { - return new Promise(resolve => { resolve(storeDict) }) - } else { - return new Promise((resolve, reject) => { - getDicts(dictMeta.type).then(res => { - store.dispatch('dict/setDict', { key: dictMeta.type, value: res.data }) - resolve(res.data) - }).catch(error => { - reject(error) - }) - }) - } - }, - }, - }, - }) -} - -export default { - install, -} \ No newline at end of file diff --git a/oms-vue/src/components/DictTag/index.vue b/oms-vue/src/components/DictTag/index.vue deleted file mode 100644 index a0fd66f3..00000000 --- a/oms-vue/src/components/DictTag/index.vue +++ /dev/null @@ -1,92 +0,0 @@ - - - - diff --git a/oms-vue/src/components/Editor/index.vue b/oms-vue/src/components/Editor/index.vue deleted file mode 100644 index 6bb5a18d..00000000 --- a/oms-vue/src/components/Editor/index.vue +++ /dev/null @@ -1,272 +0,0 @@ - - - - - diff --git a/oms-vue/src/components/FileUpload/index.vue b/oms-vue/src/components/FileUpload/index.vue deleted file mode 100644 index 6c583cf9..00000000 --- a/oms-vue/src/components/FileUpload/index.vue +++ /dev/null @@ -1,215 +0,0 @@ - - - - - diff --git a/oms-vue/src/components/Hamburger/index.vue b/oms-vue/src/components/Hamburger/index.vue deleted file mode 100644 index 368b0021..00000000 --- a/oms-vue/src/components/Hamburger/index.vue +++ /dev/null @@ -1,44 +0,0 @@ - - - - - diff --git a/oms-vue/src/components/HeaderSearch/index.vue b/oms-vue/src/components/HeaderSearch/index.vue deleted file mode 100644 index c4d76bbb..00000000 --- a/oms-vue/src/components/HeaderSearch/index.vue +++ /dev/null @@ -1,189 +0,0 @@ - - - - - diff --git a/oms-vue/src/components/IconSelect/index.vue b/oms-vue/src/components/IconSelect/index.vue deleted file mode 100644 index 8dadc028..00000000 --- a/oms-vue/src/components/IconSelect/index.vue +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - diff --git a/oms-vue/src/components/IconSelect/requireIcons.js b/oms-vue/src/components/IconSelect/requireIcons.js deleted file mode 100644 index 99e5c54c..00000000 --- a/oms-vue/src/components/IconSelect/requireIcons.js +++ /dev/null @@ -1,11 +0,0 @@ - -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/oms-vue/src/components/ImagePreview/index.vue b/oms-vue/src/components/ImagePreview/index.vue deleted file mode 100644 index 3c770c70..00000000 --- a/oms-vue/src/components/ImagePreview/index.vue +++ /dev/null @@ -1,90 +0,0 @@ - - - - - diff --git a/oms-vue/src/components/ImageUpload/index.vue b/oms-vue/src/components/ImageUpload/index.vue deleted file mode 100644 index 1af622a3..00000000 --- a/oms-vue/src/components/ImageUpload/index.vue +++ /dev/null @@ -1,226 +0,0 @@ - - - - - diff --git a/oms-vue/src/components/Pagination/index.vue b/oms-vue/src/components/Pagination/index.vue deleted file mode 100644 index 56f5a6b9..00000000 --- a/oms-vue/src/components/Pagination/index.vue +++ /dev/null @@ -1,114 +0,0 @@ - - - - - diff --git a/oms-vue/src/components/PanThumb/index.vue b/oms-vue/src/components/PanThumb/index.vue deleted file mode 100644 index 1bcf4170..00000000 --- a/oms-vue/src/components/PanThumb/index.vue +++ /dev/null @@ -1,142 +0,0 @@ - - - - - diff --git a/oms-vue/src/components/ParentView/index.vue b/oms-vue/src/components/ParentView/index.vue deleted file mode 100644 index 7bf61489..00000000 --- a/oms-vue/src/components/ParentView/index.vue +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/oms-vue/src/components/RightPanel/index.vue b/oms-vue/src/components/RightPanel/index.vue deleted file mode 100644 index 5abeecb0..00000000 --- a/oms-vue/src/components/RightPanel/index.vue +++ /dev/null @@ -1,106 +0,0 @@ - - - - - diff --git a/oms-vue/src/components/RightToolbar/index.vue b/oms-vue/src/components/RightToolbar/index.vue deleted file mode 100644 index 527e07c1..00000000 --- a/oms-vue/src/components/RightToolbar/index.vue +++ /dev/null @@ -1,104 +0,0 @@ - - - diff --git a/oms-vue/src/components/Screenfull/index.vue b/oms-vue/src/components/Screenfull/index.vue deleted file mode 100644 index d4e539c2..00000000 --- a/oms-vue/src/components/Screenfull/index.vue +++ /dev/null @@ -1,57 +0,0 @@ - - - - - diff --git a/oms-vue/src/components/SizeSelect/index.vue b/oms-vue/src/components/SizeSelect/index.vue deleted file mode 100644 index 069b5de9..00000000 --- a/oms-vue/src/components/SizeSelect/index.vue +++ /dev/null @@ -1,56 +0,0 @@ - - - diff --git a/oms-vue/src/components/SvgIcon/index.vue b/oms-vue/src/components/SvgIcon/index.vue deleted file mode 100644 index e4bf5ade..00000000 --- a/oms-vue/src/components/SvgIcon/index.vue +++ /dev/null @@ -1,61 +0,0 @@ - - - - - diff --git a/oms-vue/src/components/ThemePicker/index.vue b/oms-vue/src/components/ThemePicker/index.vue deleted file mode 100644 index 1714e1f3..00000000 --- a/oms-vue/src/components/ThemePicker/index.vue +++ /dev/null @@ -1,173 +0,0 @@ - - - - - diff --git a/oms-vue/src/components/TopNav/index.vue b/oms-vue/src/components/TopNav/index.vue deleted file mode 100644 index 9fb8dd81..00000000 --- a/oms-vue/src/components/TopNav/index.vue +++ /dev/null @@ -1,191 +0,0 @@ - - - - - diff --git a/oms-vue/src/components/ZhiJian/Doc/index.vue b/oms-vue/src/components/ZhiJian/Doc/index.vue deleted file mode 100644 index cd93f085..00000000 --- a/oms-vue/src/components/ZhiJian/Doc/index.vue +++ /dev/null @@ -1,21 +0,0 @@ - - - diff --git a/oms-vue/src/components/ZhiJian/Git/index.vue b/oms-vue/src/components/ZhiJian/Git/index.vue deleted file mode 100644 index 3ee7d90d..00000000 --- a/oms-vue/src/components/ZhiJian/Git/index.vue +++ /dev/null @@ -1,21 +0,0 @@ - - - diff --git a/oms-vue/src/components/iFrame/index.vue b/oms-vue/src/components/iFrame/index.vue deleted file mode 100644 index 426857fb..00000000 --- a/oms-vue/src/components/iFrame/index.vue +++ /dev/null @@ -1,36 +0,0 @@ - - - diff --git a/oms-vue/src/layout/components/Navbar.vue b/oms-vue/src/layout/components/Navbar.vue deleted file mode 100644 index f0956fc8..00000000 --- a/oms-vue/src/layout/components/Navbar.vue +++ /dev/null @@ -1,200 +0,0 @@ - - - - - diff --git a/oms-vue/src/layout/components/Settings/index.vue b/oms-vue/src/layout/components/Settings/index.vue deleted file mode 100644 index 8b498420..00000000 --- a/oms-vue/src/layout/components/Settings/index.vue +++ /dev/null @@ -1,260 +0,0 @@ - - - - - diff --git a/oms-vue/src/layout/components/Sidebar/FixiOSBug.js b/oms-vue/src/layout/components/Sidebar/FixiOSBug.js deleted file mode 100644 index 68237269..00000000 --- a/oms-vue/src/layout/components/Sidebar/FixiOSBug.js +++ /dev/null @@ -1,25 +0,0 @@ -export default { - computed: { - device() { - return this.$store.state.app.device - } - }, - mounted() { - // In order to fix the click on menu on the ios device will trigger the mouseleave bug - this.fixBugIniOS() - }, - methods: { - fixBugIniOS() { - const $subMenu = this.$refs.subMenu - if ($subMenu) { - const handleMouseleave = $subMenu.handleMouseleave - $subMenu.handleMouseleave = (e) => { - if (this.device === 'mobile') { - return - } - handleMouseleave(e) - } - } - } - } -} diff --git a/oms-vue/src/layout/components/Sidebar/Item.vue b/oms-vue/src/layout/components/Sidebar/Item.vue deleted file mode 100644 index be3285df..00000000 --- a/oms-vue/src/layout/components/Sidebar/Item.vue +++ /dev/null @@ -1,33 +0,0 @@ - diff --git a/oms-vue/src/layout/components/Sidebar/Link.vue b/oms-vue/src/layout/components/Sidebar/Link.vue deleted file mode 100644 index 8b0bc93b..00000000 --- a/oms-vue/src/layout/components/Sidebar/Link.vue +++ /dev/null @@ -1,43 +0,0 @@ - - - diff --git a/oms-vue/src/layout/components/Sidebar/Logo.vue b/oms-vue/src/layout/components/Sidebar/Logo.vue deleted file mode 100644 index 2774cc83..00000000 --- a/oms-vue/src/layout/components/Sidebar/Logo.vue +++ /dev/null @@ -1,93 +0,0 @@ - - - - - diff --git a/oms-vue/src/layout/components/Sidebar/SidebarItem.vue b/oms-vue/src/layout/components/Sidebar/SidebarItem.vue deleted file mode 100644 index 4853fbb7..00000000 --- a/oms-vue/src/layout/components/Sidebar/SidebarItem.vue +++ /dev/null @@ -1,100 +0,0 @@ - - - diff --git a/oms-vue/src/layout/components/Sidebar/index.vue b/oms-vue/src/layout/components/Sidebar/index.vue deleted file mode 100644 index 51d0839f..00000000 --- a/oms-vue/src/layout/components/Sidebar/index.vue +++ /dev/null @@ -1,57 +0,0 @@ - - - diff --git a/oms-vue/src/layout/components/TagsView/ScrollPane.vue b/oms-vue/src/layout/components/TagsView/ScrollPane.vue deleted file mode 100644 index bb753a12..00000000 --- a/oms-vue/src/layout/components/TagsView/ScrollPane.vue +++ /dev/null @@ -1,94 +0,0 @@ - - - - - diff --git a/oms-vue/src/layout/components/TagsView/index.vue b/oms-vue/src/layout/components/TagsView/index.vue deleted file mode 100644 index 96585a5b..00000000 --- a/oms-vue/src/layout/components/TagsView/index.vue +++ /dev/null @@ -1,332 +0,0 @@ - - - - - - - diff --git a/oms-vue/src/layout/components/index.js b/oms-vue/src/layout/components/index.js deleted file mode 100644 index 104bd3ac..00000000 --- a/oms-vue/src/layout/components/index.js +++ /dev/null @@ -1,5 +0,0 @@ -export { default as AppMain } from './AppMain' -export { default as Navbar } from './Navbar' -export { default as Settings } from './Settings' -export { default as Sidebar } from './Sidebar/index.vue' -export { default as TagsView } from './TagsView/index.vue' diff --git a/oms-vue/src/layout/index.vue b/oms-vue/src/layout/index.vue deleted file mode 100644 index dba4393d..00000000 --- a/oms-vue/src/layout/index.vue +++ /dev/null @@ -1,111 +0,0 @@ - - - - - diff --git a/oms-vue/src/layout/mixin/ResizeHandler.js b/oms-vue/src/layout/mixin/ResizeHandler.js deleted file mode 100644 index e8d0df8c..00000000 --- a/oms-vue/src/layout/mixin/ResizeHandler.js +++ /dev/null @@ -1,45 +0,0 @@ -import store from '@/store' - -const { body } = document -const WIDTH = 992 // refer to Bootstrap's responsive design - -export default { - watch: { - $route(route) { - if (this.device === 'mobile' && this.sidebar.opened) { - store.dispatch('app/closeSideBar', { withoutAnimation: false }) - } - } - }, - beforeMount() { - window.addEventListener('resize', this.$_resizeHandler) - }, - beforeDestroy() { - window.removeEventListener('resize', this.$_resizeHandler) - }, - mounted() { - const isMobile = this.$_isMobile() - if (isMobile) { - store.dispatch('app/toggleDevice', 'mobile') - store.dispatch('app/closeSideBar', { withoutAnimation: true }) - } - }, - methods: { - // use $_ for mixins properties - // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential - $_isMobile() { - const rect = body.getBoundingClientRect() - return rect.width - 1 < WIDTH - }, - $_resizeHandler() { - if (!document.hidden) { - const isMobile = this.$_isMobile() - store.dispatch('app/toggleDevice', isMobile ? 'mobile' : 'desktop') - - if (isMobile) { - store.dispatch('app/closeSideBar', { withoutAnimation: true }) - } - } - } - } -} diff --git a/oms-vue/src/main.js b/oms-vue/src/main.js deleted file mode 100644 index e9c3abd4..00000000 --- a/oms-vue/src/main.js +++ /dev/null @@ -1,89 +0,0 @@ -import Vue from 'vue' - -import Cookies from 'js-cookie' - -import Element from 'element-ui' -import './assets/styles/element-variables.scss' - -import '@/assets/styles/index.scss' // global css -import '@/assets/styles/zhijian.scss' // zhijian css -import App from './App' -import store from './store' -import router from './router' -import directive from './directive' // directive -import plugins from './plugins' // plugins -import { download } from '@/utils/request' - -import './assets/icons' // icon -import './permission' // permission control -import { getDicts } from "@/api/system/dict/data"; -import { getConfigKey } from "@/api/system/config"; -import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, handleTree } from "@/utils/zhijian"; -// 分页组件 -import Pagination from "@/components/Pagination"; -// 自定义表格工具组件 -import RightToolbar from "@/components/RightToolbar" -// 富文本组件 -import Editor from "@/components/Editor" -// 文件上传组件 -import FileUpload from "@/components/FileUpload" -// 图片上传组件 -import ImageUpload from "@/components/ImageUpload" -// 图片预览组件 -import ImagePreview from "@/components/ImagePreview" -// 字典标签组件 -import DictTag from '@/components/DictTag' -// 头部标签组件 -import VueMeta from 'vue-meta' -// 字典数据组件 -import DictData from '@/components/DictData' - -import Avue from '@smallwei/avue'; -import '@smallwei/avue/lib/index.css'; - -// 全局方法挂载 -Vue.prototype.getDicts = getDicts -Vue.prototype.getConfigKey = getConfigKey -Vue.prototype.parseTime = parseTime -Vue.prototype.resetForm = resetForm -Vue.prototype.addDateRange = addDateRange -Vue.prototype.selectDictLabel = selectDictLabel -Vue.prototype.selectDictLabels = selectDictLabels -Vue.prototype.download = download -Vue.prototype.handleTree = handleTree - -// 全局组件挂载 -Vue.component('DictTag', DictTag) -Vue.component('Pagination', Pagination) -Vue.component('RightToolbar', RightToolbar) -Vue.component('Editor', Editor) -Vue.component('FileUpload', FileUpload) -Vue.component('ImageUpload', ImageUpload) -Vue.component('ImagePreview', ImagePreview) - -Vue.use(directive) -Vue.use(plugins) -Vue.use(VueMeta) -DictData.install() - -/** - * If you don't want to use mock-server - * you want to use MockJs for mock api - * you can execute: mockXHR() - * - * Currently MockJs will be used in the production environment, - * please remove it before going online! ! ! - */ - -Vue.use(Element, { - size: Cookies.get('size') || 'medium' // set element-ui default size -}) -Vue.use(Avue) -Vue.config.productionTip = false - -new Vue({ - el: '#app', - router, - store, - render: h => h(App) -}) diff --git a/oms-vue/src/permission.js b/oms-vue/src/permission.js deleted file mode 100644 index 609d2159..00000000 --- a/oms-vue/src/permission.js +++ /dev/null @@ -1,56 +0,0 @@ -import router from './router' -import store from './store' -import { Message } from 'element-ui' -import NProgress from 'nprogress' -import 'nprogress/nprogress.css' -import { getToken } from '@/utils/auth' -import { isRelogin } from '@/utils/request' - -NProgress.configure({ showSpinner: false }) - -const whiteList = ['/login', '/register'] - -router.beforeEach((to, from, next) => { - NProgress.start() - if (getToken()) { - to.meta.title && store.dispatch('settings/setTitle', to.meta.title) - /* has token*/ - if (to.path === '/login') { - next({ path: '/' }) - NProgress.done() - } else { - if (store.getters.roles.length === 0) { - isRelogin.show = true - // 判断当前用户是否已拉取完user_info信息 - store.dispatch('GetInfo').then(() => { - isRelogin.show = false - store.dispatch('GenerateRoutes').then(accessRoutes => { - // 根据roles权限生成可访问的路由表 - router.addRoutes(accessRoutes) // 动态添加可访问路由表 - next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 - }) - }).catch(err => { - store.dispatch('LogOut').then(() => { - Message.error(err) - next({ path: '/' }) - }) - }) - } else { - next() - } - } - } else { - // 没有token - if (whiteList.indexOf(to.path) !== -1) { - // 在免登录白名单,直接进入 - next() - } else { - next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页 - NProgress.done() - } - } -}) - -router.afterEach(() => { - NProgress.done() -}) diff --git a/oms-vue/src/plugins/auth.js b/oms-vue/src/plugins/auth.js deleted file mode 100644 index 6c6bc242..00000000 --- a/oms-vue/src/plugins/auth.js +++ /dev/null @@ -1,60 +0,0 @@ -import store from '@/store' - -function authPermission(permission) { - const all_permission = "*:*:*"; - const permissions = store.getters && store.getters.permissions - if (permission && permission.length > 0) { - return permissions.some(v => { - return all_permission === v || v === permission - }) - } else { - return false - } -} - -function authRole(role) { - const super_admin = "admin"; - const roles = store.getters && store.getters.roles - if (role && role.length > 0) { - return roles.some(v => { - return super_admin === v || v === role - }) - } else { - return false - } -} - -export default { - // 验证用户是否具备某权限 - hasPermi(permission) { - return authPermission(permission); - }, - // 验证用户是否含有指定权限,只需包含其中一个 - hasPermiOr(permissions) { - return permissions.some(item => { - return authPermission(item) - }) - }, - // 验证用户是否含有指定权限,必须全部拥有 - hasPermiAnd(permissions) { - return permissions.every(item => { - return authPermission(item) - }) - }, - // 验证用户是否具备某角色 - hasRole(role) { - return authRole(role); - }, - // 验证用户是否含有指定角色,只需包含其中一个 - hasRoleOr(roles) { - return roles.some(item => { - return authRole(item) - }) - }, - // 验证用户是否含有指定角色,必须全部拥有 - hasRoleAnd(roles) { - return roles.every(item => { - return authRole(item) - }) - } -} diff --git a/oms-vue/src/plugins/cache.js b/oms-vue/src/plugins/cache.js deleted file mode 100644 index 6b5c00b9..00000000 --- a/oms-vue/src/plugins/cache.js +++ /dev/null @@ -1,77 +0,0 @@ -const sessionCache = { - set (key, value) { - if (!sessionStorage) { - return - } - if (key != null && value != null) { - sessionStorage.setItem(key, value) - } - }, - get (key) { - if (!sessionStorage) { - return null - } - if (key == null) { - return null - } - return sessionStorage.getItem(key) - }, - setJSON (key, jsonValue) { - if (jsonValue != null) { - this.set(key, JSON.stringify(jsonValue)) - } - }, - getJSON (key) { - const value = this.get(key) - if (value != null) { - return JSON.parse(value) - } - }, - remove (key) { - sessionStorage.removeItem(key); - } -} -const localCache = { - set (key, value) { - if (!localStorage) { - return - } - if (key != null && value != null) { - localStorage.setItem(key, value) - } - }, - get (key) { - if (!localStorage) { - return null - } - if (key == null) { - return null - } - return localStorage.getItem(key) - }, - setJSON (key, jsonValue) { - if (jsonValue != null) { - this.set(key, JSON.stringify(jsonValue)) - } - }, - getJSON (key) { - const value = this.get(key) - if (value != null) { - return JSON.parse(value) - } - }, - remove (key) { - localStorage.removeItem(key); - } -} - -export default { - /** - * 会话级缓存 - */ - session: sessionCache, - /** - * 本地缓存 - */ - local: localCache -} diff --git a/oms-vue/src/plugins/download.js b/oms-vue/src/plugins/download.js deleted file mode 100644 index 7886d0ae..00000000 --- a/oms-vue/src/plugins/download.js +++ /dev/null @@ -1,72 +0,0 @@ -import axios from 'axios' -import { Message } from 'element-ui' -import { saveAs } from 'file-saver' -import { getToken } from '@/utils/auth' -import errorCode from '@/utils/errorCode' -import { blobValidate } from "@/utils/zhijian"; - -const baseURL = process.env.VUE_APP_BASE_API - -export default { - name(name, isDelete = true) { - var url = baseURL + "/common/download?fileName=" + encodeURIComponent(name) + "&delete=" + isDelete - axios({ - method: 'get', - url: url, - responseType: 'blob', - headers: { 'Authorization': 'Bearer ' + getToken() } - }).then((res) => { - const isBlob = blobValidate(res.data); - if (isBlob) { - const blob = new Blob([res.data]) - this.saveAs(blob, decodeURIComponent(res.headers['download-filename'])) - } else { - this.printErrMsg(res.data); - } - }) - }, - resource(resource) { - var url = baseURL + "/common/download/resource?resource=" + encodeURIComponent(resource); - axios({ - method: 'get', - url: url, - responseType: 'blob', - headers: { 'Authorization': 'Bearer ' + getToken() } - }).then((res) => { - const isBlob = blobValidate(res.data); - if (isBlob) { - const blob = new Blob([res.data]) - this.saveAs(blob, decodeURIComponent(res.headers['download-filename'])) - } else { - this.printErrMsg(res.data); - } - }) - }, - zip(url, name) { - var url = baseURL + url - axios({ - method: 'get', - url: url, - responseType: 'blob', - headers: { 'Authorization': 'Bearer ' + getToken() } - }).then((res) => { - const isBlob = blobValidate(res.data); - if (isBlob) { - const blob = new Blob([res.data], { type: 'application/zip' }) - this.saveAs(blob, name) - } else { - this.printErrMsg(res.data); - } - }) - }, - saveAs(text, name, opts) { - saveAs(text, name, opts); - }, - async printErrMsg(data) { - const resText = await data.text(); - const rspObj = JSON.parse(resText); - const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'] - Message.error(errMsg); - } -} - diff --git a/oms-vue/src/plugins/index.js b/oms-vue/src/plugins/index.js deleted file mode 100644 index d000f2df..00000000 --- a/oms-vue/src/plugins/index.js +++ /dev/null @@ -1,20 +0,0 @@ -import tab from './tab' -import auth from './auth' -import cache from './cache' -import modal from './modal' -import download from './download' - -export default { - install(Vue) { - // 页签操作 - Vue.prototype.$tab = tab - // 认证对象 - Vue.prototype.$auth = auth - // 缓存对象 - Vue.prototype.$cache = cache - // 模态框对象 - Vue.prototype.$modal = modal - // 下载文件 - Vue.prototype.$download = download - } -} diff --git a/oms-vue/src/plugins/modal.js b/oms-vue/src/plugins/modal.js deleted file mode 100644 index b37ca145..00000000 --- a/oms-vue/src/plugins/modal.js +++ /dev/null @@ -1,83 +0,0 @@ -import { Message, MessageBox, Notification, Loading } from 'element-ui' - -let loadingInstance; - -export default { - // 消息提示 - msg(content) { - Message.info(content) - }, - // 错误消息 - msgError(content) { - Message.error(content) - }, - // 成功消息 - msgSuccess(content) { - Message.success(content) - }, - // 警告消息 - msgWarning(content) { - Message.warning(content) - }, - // 弹出提示 - alert(content) { - MessageBox.alert(content, "系统提示") - }, - // 错误提示 - alertError(content) { - MessageBox.alert(content, "系统提示", { type: 'error' }) - }, - // 成功提示 - alertSuccess(content) { - MessageBox.alert(content, "系统提示", { type: 'success' }) - }, - // 警告提示 - alertWarning(content) { - MessageBox.alert(content, "系统提示", { type: 'warning' }) - }, - // 通知提示 - notify(content) { - Notification.info(content) - }, - // 错误通知 - notifyError(content) { - Notification.error(content); - }, - // 成功通知 - notifySuccess(content) { - Notification.success(content) - }, - // 警告通知 - notifyWarning(content) { - Notification.warning(content) - }, - // 确认窗体 - confirm(content) { - return MessageBox.confirm(content, "系统提示", { - confirmButtonText: '确定', - cancelButtonText: '取消', - type: "warning", - }) - }, - // 提交内容 - prompt(content) { - return MessageBox.prompt(content, "系统提示", { - confirmButtonText: '确定', - cancelButtonText: '取消', - type: "warning", - }) - }, - // 打开遮罩层 - loading(content) { - loadingInstance = Loading.service({ - lock: true, - text: content, - spinner: "el-icon-loading", - background: "rgba(0, 0, 0, 0.7)", - }) - }, - // 关闭遮罩层 - closeLoading() { - loadingInstance.close(); - } -} diff --git a/oms-vue/src/plugins/tab.js b/oms-vue/src/plugins/tab.js deleted file mode 100644 index b029c0e6..00000000 --- a/oms-vue/src/plugins/tab.js +++ /dev/null @@ -1,71 +0,0 @@ -import store from '@/store' -import router from '@/router'; - -export default { - // 刷新当前tab页签 - refreshPage(obj) { - const { path, query, matched } = router.currentRoute; - if (obj === undefined) { - matched.forEach((m) => { - if (m.components && m.components.default && m.components.default.name) { - if (!['Layout', 'ParentView'].includes(m.components.default.name)) { - obj = { name: m.components.default.name, path: path, query: query }; - } - } - }); - } - return store.dispatch('tagsView/delCachedView', obj).then(() => { - const { path, query } = obj - router.replace({ - path: '/redirect' + path, - query: query - }) - }) - }, - // 关闭当前tab页签,打开新页签 - closeOpenPage(obj) { - store.dispatch("tagsView/delView", router.currentRoute); - if (obj !== undefined) { - return router.push(obj); - } - }, - // 关闭指定tab页签 - closePage(obj) { - if (obj === undefined) { - return store.dispatch('tagsView/delView', router.currentRoute).then(({ visitedViews }) => { - const latestView = visitedViews.slice(-1)[0] - if (latestView) { - return router.push(latestView.fullPath) - } - return router.push('/'); - }); - } - return store.dispatch('tagsView/delView', obj); - }, - // 关闭所有tab页签 - closeAllPage() { - return store.dispatch('tagsView/delAllViews'); - }, - // 关闭左侧tab页签 - closeLeftPage(obj) { - return store.dispatch('tagsView/delLeftTags', obj || router.currentRoute); - }, - // 关闭右侧tab页签 - closeRightPage(obj) { - return store.dispatch('tagsView/delRightTags', obj || router.currentRoute); - }, - // 关闭其他tab页签 - closeOtherPage(obj) { - return store.dispatch('tagsView/delOthersViews', obj || router.currentRoute); - }, - // 添加tab页签 - openPage(title, url, params) { - var obj = { path: url, meta: { title: title } } - store.dispatch('tagsView/addView', obj); - return router.push({ path: url, query: params }); - }, - // 修改tab页签 - updatePage(obj) { - return store.dispatch('tagsView/updateVisitedView', obj); - } -} diff --git a/oms-vue/src/router/index.js b/oms-vue/src/router/index.js deleted file mode 100644 index 0faaf663..00000000 --- a/oms-vue/src/router/index.js +++ /dev/null @@ -1,183 +0,0 @@ -import Vue from 'vue' -import Router from 'vue-router' - -Vue.use(Router) - -/* Layout */ -import Layout from '@/layout' - -/** - * Note: 路由配置项 - * - * hidden: true // 当设置 true 的时候该路由不会再侧边栏出现 如401,login等页面,或者如一些编辑页面/edit/1 - * alwaysShow: true // 当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面 - * // 只有一个时,会将那个子路由当做根路由显示在侧边栏--如引导页面 - * // 若你想不管路由下面的 children 声明的个数都显示你的根路由 - * // 你可以设置 alwaysShow: true,这样它就会忽略之前定义的规则,一直显示根路由 - * redirect: noRedirect // 当设置 noRedirect 的时候该路由在面包屑导航中不可被点击 - * name:'router-name' // 设定路由的名字,一定要填写不然使用时会出现各种问题 - * query: '{"id": 1, "name": "ry"}' // 访问路由的默认传递参数 - * roles: ['admin', 'common'] // 访问路由的角色权限 - * permissions: ['a:a:a', 'b:b:b'] // 访问路由的菜单权限 - * meta : { - noCache: true // 如果设置为true,则不会被 缓存(默认 false) - title: 'title' // 设置该路由在侧边栏和面包屑中展示的名字 - icon: 'svg-name' // 设置该路由的图标,对应路径src/assets/icons/svg - breadcrumb: false // 如果设置为false,则不会在breadcrumb面包屑中显示 - activeMenu: '/system/user' // 当路由设置了该属性,则会高亮相对应的侧边栏。 - } - */ - -// 公共路由 -export const constantRoutes = [ - { - path: '/redirect', - component: Layout, - hidden: true, - children: [ - { - path: '/redirect/:path(.*)', - component: () => import('@/views/redirect') - } - ] - }, - { - path: '/login', - component: () => import('@/views/login'), - hidden: true - }, - { - path: '/register', - component: () => import('@/views/register'), - hidden: true - }, - { - path: '/404', - component: () => import('@/views/error/404'), - hidden: true - }, - { - path: '/401', - component: () => import('@/views/error/401'), - hidden: true - }, - { - path: '', - component: Layout, - redirect: 'index', - children: [ - { - path: 'index', - component: () => import('@/views/index.vue'), - name: 'Index', - meta: { title: '首页', icon: 'dashboard', affix: true } - } - ] - }, - { - path: '/user', - component: Layout, - hidden: true, - redirect: 'noredirect', - children: [ - { - path: 'profile', - component: () => import('@/views/system/user/profile/index'), - name: 'Profile', - meta: { title: '个人中心', icon: 'user' } - } - ] - } -] - -// 动态路由,基于用户权限动态去加载 -export const dynamicRoutes = [ - { - path: '/system/user-auth', - component: Layout, - hidden: true, - permissions: ['system:user:edit'], - children: [ - { - path: 'role/:userId(\\d+)', - component: () => import('@/views/system/user/authRole'), - name: 'AuthRole', - meta: { title: '分配角色', activeMenu: '/system/user' } - } - ] - }, - { - path: '/system/role-auth', - component: Layout, - hidden: true, - permissions: ['system:role:edit'], - children: [ - { - path: 'user/:roleId(\\d+)', - component: () => import('@/views/system/role/authUser'), - name: 'AuthUser', - meta: { title: '分配用户', activeMenu: '/system/role' } - } - ] - }, - { - path: '/system/dict-data', - component: Layout, - hidden: true, - permissions: ['system:dict:list'], - children: [ - { - path: 'index/:dictId(\\d+)', - component: () => import('@/views/system/dict/data'), - name: 'Data', - meta: { title: '字典数据', activeMenu: '/system/dict' } - } - ] - }, - { - path: '/monitor/job-log', - component: Layout, - hidden: true, - permissions: ['monitor:job:list'], - children: [ - { - path: 'index/:jobId(\\d+)', - component: () => import('@/views/monitor/job/log'), - name: 'JobLog', - meta: { title: '调度日志', activeMenu: '/monitor/job' } - } - ] - }, - { - path: '/tool/gen-edit', - component: Layout, - hidden: true, - permissions: ['tool:gen:edit'], - children: [ - { - path: 'index/:tableId(\\d+)', - component: () => import('@/views/tool/gen/editTable'), - name: 'GenEdit', - meta: { title: '修改生成配置', activeMenu: '/tool/gen' } - } - ] - } -] - -// 防止连续点击多次路由报错 -let routerPush = Router.prototype.push; -let routerReplace = Router.prototype.replace; -// push -Router.prototype.push = function push(location) { - return routerPush.call(this, location).catch(err => err) -} -// replace -Router.prototype.replace = function push(location) { - return routerReplace.call(this, location).catch(err => err) -} - -export default new Router({ - mode: 'history', // 去掉url中的# - scrollBehavior: () => ({ y: 0 }), - routes: constantRoutes -}) diff --git a/oms-vue/src/settings.js b/oms-vue/src/settings.js deleted file mode 100644 index 6a0b09f4..00000000 --- a/oms-vue/src/settings.js +++ /dev/null @@ -1,44 +0,0 @@ -module.exports = { - /** - * 侧边栏主题 深色主题theme-dark,浅色主题theme-light - */ - sideTheme: 'theme-dark', - - /** - * 是否系统布局配置 - */ - showSettings: false, - - /** - * 是否显示顶部导航 - */ - topNav: false, - - /** - * 是否显示 tagsView - */ - tagsView: true, - - /** - * 是否固定头部 - */ - fixedHeader: false, - - /** - * 是否显示logo - */ - sidebarLogo: true, - - /** - * 是否显示动态标题 - */ - dynamicTitle: false, - - /** - * @type {string | array} 'production' | ['production', 'development'] - * @description Need show err logs component. - * The default is only used in the production env - * If you want to also use it in dev, you can pass ['production', 'development'] - */ - errorLog: 'production' -} diff --git a/oms-vue/src/store/getters.js b/oms-vue/src/store/getters.js deleted file mode 100644 index 8adb1b65..00000000 --- a/oms-vue/src/store/getters.js +++ /dev/null @@ -1,19 +0,0 @@ -const getters = { - sidebar: state => state.app.sidebar, - size: state => state.app.size, - device: state => state.app.device, - dict: state => state.dict.dict, - visitedViews: state => state.tagsView.visitedViews, - cachedViews: state => state.tagsView.cachedViews, - token: state => state.user.token, - avatar: state => state.user.avatar, - name: state => state.user.name, - introduction: state => state.user.introduction, - roles: state => state.user.roles, - permissions: state => state.user.permissions, - permission_routes: state => state.permission.routes, - topbarRouters:state => state.permission.topbarRouters, - defaultRoutes:state => state.permission.defaultRoutes, - sidebarRouters:state => state.permission.sidebarRouters, -} -export default getters diff --git a/oms-vue/src/store/index.js b/oms-vue/src/store/index.js deleted file mode 100644 index 97aaef80..00000000 --- a/oms-vue/src/store/index.js +++ /dev/null @@ -1,25 +0,0 @@ -import Vue from 'vue' -import Vuex from 'vuex' -import app from './modules/app' -import dict from './modules/dict' -import user from './modules/user' -import tagsView from './modules/tagsView' -import permission from './modules/permission' -import settings from './modules/settings' -import getters from './getters' - -Vue.use(Vuex) - -const store = new Vuex.Store({ - modules: { - app, - dict, - user, - tagsView, - permission, - settings - }, - getters -}) - -export default store diff --git a/oms-vue/src/store/modules/app.js b/oms-vue/src/store/modules/app.js deleted file mode 100644 index 3e22d1c1..00000000 --- a/oms-vue/src/store/modules/app.js +++ /dev/null @@ -1,66 +0,0 @@ -import Cookies from 'js-cookie' - -const state = { - sidebar: { - opened: Cookies.get('sidebarStatus') ? !!+Cookies.get('sidebarStatus') : true, - withoutAnimation: false, - hide: false - }, - device: 'desktop', - size: Cookies.get('size') || 'medium' -} - -const mutations = { - TOGGLE_SIDEBAR: state => { - if (state.sidebar.hide) { - return false; - } - state.sidebar.opened = !state.sidebar.opened - state.sidebar.withoutAnimation = false - if (state.sidebar.opened) { - Cookies.set('sidebarStatus', 1) - } else { - Cookies.set('sidebarStatus', 0) - } - }, - CLOSE_SIDEBAR: (state, withoutAnimation) => { - Cookies.set('sidebarStatus', 0) - state.sidebar.opened = false - state.sidebar.withoutAnimation = withoutAnimation - }, - TOGGLE_DEVICE: (state, device) => { - state.device = device - }, - SET_SIZE: (state, size) => { - state.size = size - Cookies.set('size', size) - }, - SET_SIDEBAR_HIDE: (state, status) => { - state.sidebar.hide = status - } -} - -const actions = { - toggleSideBar({ commit }) { - commit('TOGGLE_SIDEBAR') - }, - closeSideBar({ commit }, { withoutAnimation }) { - commit('CLOSE_SIDEBAR', withoutAnimation) - }, - toggleDevice({ commit }, device) { - commit('TOGGLE_DEVICE', device) - }, - setSize({ commit }, size) { - commit('SET_SIZE', size) - }, - toggleSideBarHide({ commit }, status) { - commit('SET_SIDEBAR_HIDE', status) - } -} - -export default { - namespaced: true, - state, - mutations, - actions -} diff --git a/oms-vue/src/store/modules/dict.js b/oms-vue/src/store/modules/dict.js deleted file mode 100644 index f95bead0..00000000 --- a/oms-vue/src/store/modules/dict.js +++ /dev/null @@ -1,50 +0,0 @@ -const state = { - dict: new Array() -} -const mutations = { - SET_DICT: (state, { key, value }) => { - if (key !== null && key !== "") { - state.dict.push({ - key: key, - value: value - }) - } - }, - REMOVE_DICT: (state, key) => { - try { - for (let i = 0; i < state.dict.length; i++) { - if (state.dict[i].key == key) { - state.dict.splice(i, i) - return true - } - } - } catch (e) { - } - }, - CLEAN_DICT: (state) => { - state.dict = new Array() - } -} - -const actions = { - // 设置字典 - setDict({ commit }, data) { - commit('SET_DICT', data) - }, - // 删除字典 - removeDict({ commit }, key) { - commit('REMOVE_DICT', key) - }, - // 清空字典 - cleanDict({ commit }) { - commit('CLEAN_DICT') - } -} - -export default { - namespaced: true, - state, - mutations, - actions -} - diff --git a/oms-vue/src/store/modules/permission.js b/oms-vue/src/store/modules/permission.js deleted file mode 100644 index 22876655..00000000 --- a/oms-vue/src/store/modules/permission.js +++ /dev/null @@ -1,133 +0,0 @@ -import auth from '@/plugins/auth' -import router, { constantRoutes, dynamicRoutes } from '@/router' -import { getRouters } from '@/api/menu' -import Layout from '@/layout/index' -import ParentView from '@/components/ParentView' -import InnerLink from '@/layout/components/InnerLink' - -const permission = { - state: { - routes: [], - addRoutes: [], - defaultRoutes: [], - topbarRouters: [], - sidebarRouters: [] - }, - mutations: { - SET_ROUTES: (state, routes) => { - state.addRoutes = routes - state.routes = constantRoutes.concat(routes) - }, - SET_DEFAULT_ROUTES: (state, routes) => { - state.defaultRoutes = constantRoutes.concat(routes) - }, - SET_TOPBAR_ROUTES: (state, routes) => { - state.topbarRouters = routes - }, - SET_SIDEBAR_ROUTERS: (state, routes) => { - state.sidebarRouters = routes - }, - }, - actions: { - // 生成路由 - GenerateRoutes({ commit }) { - return new Promise(resolve => { - // 向后端请求路由数据 - getRouters().then(res => { - const sdata = JSON.parse(JSON.stringify(res.data)) - const rdata = JSON.parse(JSON.stringify(res.data)) - const sidebarRoutes = filterAsyncRouter(sdata) - const rewriteRoutes = filterAsyncRouter(rdata, false, true) - const asyncRoutes = filterDynamicRoutes(dynamicRoutes); - rewriteRoutes.push({ path: '*', redirect: '/404', hidden: true }) - router.addRoutes(asyncRoutes); - commit('SET_ROUTES', rewriteRoutes) - commit('SET_SIDEBAR_ROUTERS', constantRoutes.concat(sidebarRoutes)) - commit('SET_DEFAULT_ROUTES', sidebarRoutes) - commit('SET_TOPBAR_ROUTES', sidebarRoutes) - resolve(rewriteRoutes) - }) - }) - } - } -} - -// 遍历后台传来的路由字符串,转换为组件对象 -function filterAsyncRouter(asyncRouterMap, lastRouter = false, type = false) { - return asyncRouterMap.filter(route => { - if (type && route.children) { - route.children = filterChildren(route.children) - } - if (route.component) { - // Layout ParentView 组件特殊处理 - if (route.component === 'Layout') { - route.component = Layout - } else if (route.component === 'ParentView') { - route.component = ParentView - } else if (route.component === 'InnerLink') { - route.component = InnerLink - } else { - route.component = loadView(route.component) - } - } - if (route.children != null && route.children && route.children.length) { - route.children = filterAsyncRouter(route.children, route, type) - } else { - delete route['children'] - delete route['redirect'] - } - return true - }) -} - -function filterChildren(childrenMap, lastRouter = false) { - var children = [] - childrenMap.forEach((el, index) => { - if (el.children && el.children.length) { - if (el.component === 'ParentView' && !lastRouter) { - el.children.forEach(c => { - c.path = el.path + '/' + c.path - if (c.children && c.children.length) { - children = children.concat(filterChildren(c.children, c)) - return - } - children.push(c) - }) - return - } - } - if (lastRouter) { - el.path = lastRouter.path + '/' + el.path - } - children = children.concat(el) - }) - return children -} - -// 动态路由遍历,验证是否具备权限 -export function filterDynamicRoutes(routes) { - const res = [] - routes.forEach(route => { - if (route.permissions) { - if (auth.hasPermiOr(route.permissions)) { - res.push(route) - } - } else if (route.roles) { - if (auth.hasRoleOr(route.roles)) { - res.push(route) - } - } - }) - return res -} - -export const loadView = (view) => { - if (process.env.NODE_ENV === 'development') { - return (resolve) => require([`@/views/${view}`], resolve) - } else { - // 使用 import 实现生产环境的路由懒加载 - return () => import(`@/views/${view}`) - } -} - -export default permission diff --git a/oms-vue/src/store/modules/settings.js b/oms-vue/src/store/modules/settings.js deleted file mode 100644 index 2455a1e2..00000000 --- a/oms-vue/src/store/modules/settings.js +++ /dev/null @@ -1,42 +0,0 @@ -import defaultSettings from '@/settings' - -const { sideTheme, showSettings, topNav, tagsView, fixedHeader, sidebarLogo, dynamicTitle } = defaultSettings - -const storageSetting = JSON.parse(localStorage.getItem('layout-setting')) || '' -const state = { - title: '', - theme: storageSetting.theme || '#409EFF', - sideTheme: storageSetting.sideTheme || sideTheme, - showSettings: showSettings, - topNav: storageSetting.topNav === undefined ? topNav : storageSetting.topNav, - tagsView: storageSetting.tagsView === undefined ? tagsView : storageSetting.tagsView, - fixedHeader: storageSetting.fixedHeader === undefined ? fixedHeader : storageSetting.fixedHeader, - sidebarLogo: storageSetting.sidebarLogo === undefined ? sidebarLogo : storageSetting.sidebarLogo, - dynamicTitle: storageSetting.dynamicTitle === undefined ? dynamicTitle : storageSetting.dynamicTitle -} -const mutations = { - CHANGE_SETTING: (state, { key, value }) => { - if (state.hasOwnProperty(key)) { - state[key] = value - } - } -} - -const actions = { - // 修改布局设置 - changeSetting({ commit }, data) { - commit('CHANGE_SETTING', data) - }, - // 设置网页标题 - setTitle({ commit }, title) { - state.title = title - } -} - -export default { - namespaced: true, - state, - mutations, - actions -} - diff --git a/oms-vue/src/store/modules/tagsView.js b/oms-vue/src/store/modules/tagsView.js deleted file mode 100644 index 5fc011ca..00000000 --- a/oms-vue/src/store/modules/tagsView.js +++ /dev/null @@ -1,228 +0,0 @@ -const state = { - visitedViews: [], - cachedViews: [], - iframeViews: [] -} - -const mutations = { - ADD_IFRAME_VIEW: (state, view) => { - if (state.iframeViews.some(v => v.path === view.path)) return - state.iframeViews.push( - Object.assign({}, view, { - title: view.meta.title || 'no-name' - }) - ) - }, - ADD_VISITED_VIEW: (state, view) => { - if (state.visitedViews.some(v => v.path === view.path)) return - state.visitedViews.push( - Object.assign({}, view, { - title: view.meta.title || 'no-name' - }) - ) - }, - ADD_CACHED_VIEW: (state, view) => { - if (state.cachedViews.includes(view.name)) return - if (view.meta && !view.meta.noCache) { - state.cachedViews.push(view.name) - } - }, - DEL_VISITED_VIEW: (state, view) => { - for (const [i, v] of state.visitedViews.entries()) { - if (v.path === view.path) { - state.visitedViews.splice(i, 1) - break - } - } - state.iframeViews = state.iframeViews.filter(item => item.path !== view.path) - }, - DEL_IFRAME_VIEW: (state, view) => { - state.iframeViews = state.iframeViews.filter(item => item.path !== view.path) - }, - DEL_CACHED_VIEW: (state, view) => { - const index = state.cachedViews.indexOf(view.name) - index > -1 && state.cachedViews.splice(index, 1) - }, - - DEL_OTHERS_VISITED_VIEWS: (state, view) => { - state.visitedViews = state.visitedViews.filter(v => { - return v.meta.affix || v.path === view.path - }) - state.iframeViews = state.iframeViews.filter(item => item.path === view.path) - }, - DEL_OTHERS_CACHED_VIEWS: (state, view) => { - const index = state.cachedViews.indexOf(view.name) - if (index > -1) { - state.cachedViews = state.cachedViews.slice(index, index + 1) - } else { - state.cachedViews = [] - } - }, - DEL_ALL_VISITED_VIEWS: state => { - // keep affix tags - const affixTags = state.visitedViews.filter(tag => tag.meta.affix) - state.visitedViews = affixTags - state.iframeViews = [] - }, - DEL_ALL_CACHED_VIEWS: state => { - state.cachedViews = [] - }, - UPDATE_VISITED_VIEW: (state, view) => { - for (let v of state.visitedViews) { - if (v.path === view.path) { - v = Object.assign(v, view) - break - } - } - }, - DEL_RIGHT_VIEWS: (state, view) => { - const index = state.visitedViews.findIndex(v => v.path === view.path) - if (index === -1) { - return - } - state.visitedViews = state.visitedViews.filter((item, idx) => { - if (idx <= index || (item.meta && item.meta.affix)) { - return true - } - const i = state.cachedViews.indexOf(item.name) - if (i > -1) { - state.cachedViews.splice(i, 1) - } - if(item.meta.link) { - const fi = state.iframeViews.findIndex(v => v.path === item.path) - state.iframeViews.splice(fi, 1) - } - return false - }) - }, - DEL_LEFT_VIEWS: (state, view) => { - const index = state.visitedViews.findIndex(v => v.path === view.path) - if (index === -1) { - return - } - state.visitedViews = state.visitedViews.filter((item, idx) => { - if (idx >= index || (item.meta && item.meta.affix)) { - return true - } - const i = state.cachedViews.indexOf(item.name) - if (i > -1) { - state.cachedViews.splice(i, 1) - } - if(item.meta.link) { - const fi = state.iframeViews.findIndex(v => v.path === item.path) - state.iframeViews.splice(fi, 1) - } - return false - }) - } -} - -const actions = { - addView({ dispatch }, view) { - dispatch('addVisitedView', view) - dispatch('addCachedView', view) - }, - addIframeView({ commit }, view) { - commit('ADD_IFRAME_VIEW', view) - }, - addVisitedView({ commit }, view) { - commit('ADD_VISITED_VIEW', view) - }, - addCachedView({ commit }, view) { - commit('ADD_CACHED_VIEW', view) - }, - delView({ dispatch, state }, view) { - return new Promise(resolve => { - dispatch('delVisitedView', view) - dispatch('delCachedView', view) - resolve({ - visitedViews: [...state.visitedViews], - cachedViews: [...state.cachedViews] - }) - }) - }, - delVisitedView({ commit, state }, view) { - return new Promise(resolve => { - commit('DEL_VISITED_VIEW', view) - resolve([...state.visitedViews]) - }) - }, - delIframeView({ commit, state }, view) { - return new Promise(resolve => { - commit('DEL_IFRAME_VIEW', view) - resolve([...state.iframeViews]) - }) - }, - delCachedView({ commit, state }, view) { - return new Promise(resolve => { - commit('DEL_CACHED_VIEW', view) - resolve([...state.cachedViews]) - }) - }, - delOthersViews({ dispatch, state }, view) { - return new Promise(resolve => { - dispatch('delOthersVisitedViews', view) - dispatch('delOthersCachedViews', view) - resolve({ - visitedViews: [...state.visitedViews], - cachedViews: [...state.cachedViews] - }) - }) - }, - delOthersVisitedViews({ commit, state }, view) { - return new Promise(resolve => { - commit('DEL_OTHERS_VISITED_VIEWS', view) - resolve([...state.visitedViews]) - }) - }, - delOthersCachedViews({ commit, state }, view) { - return new Promise(resolve => { - commit('DEL_OTHERS_CACHED_VIEWS', view) - resolve([...state.cachedViews]) - }) - }, - delAllViews({ dispatch, state }, view) { - return new Promise(resolve => { - dispatch('delAllVisitedViews', view) - dispatch('delAllCachedViews', view) - resolve({ - visitedViews: [...state.visitedViews], - cachedViews: [...state.cachedViews] - }) - }) - }, - delAllVisitedViews({ commit, state }) { - return new Promise(resolve => { - commit('DEL_ALL_VISITED_VIEWS') - resolve([...state.visitedViews]) - }) - }, - delAllCachedViews({ commit, state }) { - return new Promise(resolve => { - commit('DEL_ALL_CACHED_VIEWS') - resolve([...state.cachedViews]) - }) - }, - updateVisitedView({ commit }, view) { - commit('UPDATE_VISITED_VIEW', view) - }, - delRightTags({ commit }, view) { - return new Promise(resolve => { - commit('DEL_RIGHT_VIEWS', view) - resolve([...state.visitedViews]) - }) - }, - delLeftTags({ commit }, view) { - return new Promise(resolve => { - commit('DEL_LEFT_VIEWS', view) - resolve([...state.visitedViews]) - }) - }, -} - -export default { - namespaced: true, - state, - mutations, - actions -} diff --git a/oms-vue/src/store/modules/user.js b/oms-vue/src/store/modules/user.js deleted file mode 100644 index ab0a6fea..00000000 --- a/oms-vue/src/store/modules/user.js +++ /dev/null @@ -1,96 +0,0 @@ -import { login, logout, getInfo } from '@/api/login' -import { getToken, setToken, removeToken } from '@/utils/auth' - -const user = { - state: { - token: getToken(), - name: '', - avatar: '', - roles: [], - permissions: [] - }, - - mutations: { - SET_TOKEN: (state, token) => { - state.token = token - }, - SET_NAME: (state, name) => { - state.name = name - }, - SET_AVATAR: (state, avatar) => { - state.avatar = avatar - }, - SET_ROLES: (state, roles) => { - state.roles = roles - }, - SET_PERMISSIONS: (state, permissions) => { - state.permissions = permissions - } - }, - - actions: { - // 登录 - Login({ commit }, userInfo) { - const username = userInfo.username.trim() - const password = userInfo.password - const code = userInfo.code - const uuid = userInfo.uuid - return new Promise((resolve, reject) => { - login(username, password, code, uuid).then(res => { - setToken(res.token) - commit('SET_TOKEN', res.token) - resolve() - }).catch(error => { - reject(error) - }) - }) - }, - - // 获取用户信息 - GetInfo({ commit, state }) { - return new Promise((resolve, reject) => { - getInfo().then(res => { - const user = res.user - const avatar = (user.avatar == "" || user.avatar == null) ? require("@/assets/images/profile.jpg") : process.env.VUE_APP_BASE_API + user.avatar; - if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组 - commit('SET_ROLES', res.roles) - commit('SET_PERMISSIONS', res.permissions) - } else { - commit('SET_ROLES', ['ROLE_DEFAULT']) - } - commit('SET_NAME', user.userName) - commit('SET_AVATAR', avatar) - resolve(res) - }).catch(error => { - reject(error) - }) - }) - }, - - // 退出系统 - LogOut({ commit, state }) { - return new Promise((resolve, reject) => { - logout(state.token).then(() => { - commit('SET_TOKEN', '') - commit('SET_ROLES', []) - commit('SET_PERMISSIONS', []) - removeToken() - resolve() - }).catch(error => { - reject(error) - }) - }) - }, - - // 前端 登出 - FedLogOut({ commit }) { - return new Promise(resolve => { - commit('SET_TOKEN', '') - removeToken() - resolve() - }) - } - } -} - -export default user diff --git a/oms-vue/src/utils/auth.js b/oms-vue/src/utils/auth.js deleted file mode 100644 index 08a43d6e..00000000 --- a/oms-vue/src/utils/auth.js +++ /dev/null @@ -1,15 +0,0 @@ -import Cookies from 'js-cookie' - -const TokenKey = 'Admin-Token' - -export function getToken() { - return Cookies.get(TokenKey) -} - -export function setToken(token) { - return Cookies.set(TokenKey, token) -} - -export function removeToken() { - return Cookies.remove(TokenKey) -} diff --git a/oms-vue/src/utils/dict/Dict.js b/oms-vue/src/utils/dict/Dict.js deleted file mode 100644 index 6fa99ce1..00000000 --- a/oms-vue/src/utils/dict/Dict.js +++ /dev/null @@ -1,82 +0,0 @@ -import Vue from 'vue' -import { mergeRecursive } from "@/utils/zhijian"; -import DictMeta from './DictMeta' -import DictData from './DictData' - -const DEFAULT_DICT_OPTIONS = { - types: [], -} - -/** - * @classdesc 字典 - * @property {Object} label 标签对象,内部属性名为字典类型名称 - * @property {Object} dict 字段数组,内部属性名为字典类型名称 - * @property {Array.} _dictMetas 字典元数据数组 - */ -export default class Dict { - constructor() { - this.owner = null - this.label = {} - this.type = {} - } - - init(options) { - if (options instanceof Array) { - options = { types: options } - } - const opts = mergeRecursive(DEFAULT_DICT_OPTIONS, options) - if (opts.types === undefined) { - throw new Error('need dict types') - } - const ps = [] - this._dictMetas = opts.types.map(t => DictMeta.parse(t)) - this._dictMetas.forEach(dictMeta => { - const type = dictMeta.type - Vue.set(this.label, type, {}) - Vue.set(this.type, type, []) - if (dictMeta.lazy) { - return - } - ps.push(loadDict(this, dictMeta)) - }) - return Promise.all(ps) - } - - /** - * 重新加载字典 - * @param {String} type 字典类型 - */ - reloadDict(type) { - const dictMeta = this._dictMetas.find(e => e.type === type) - if (dictMeta === undefined) { - return Promise.reject(`the dict meta of ${type} was not found`) - } - return loadDict(this, dictMeta) - } -} - -/** - * 加载字典 - * @param {Dict} dict 字典 - * @param {DictMeta} dictMeta 字典元数据 - * @returns {Promise} - */ -function loadDict(dict, dictMeta) { - return dictMeta.request(dictMeta) - .then(response => { - const type = dictMeta.type - let dicts = dictMeta.responseConverter(response, dictMeta) - if (!(dicts instanceof Array)) { - console.error('the return of responseConverter must be Array.') - dicts = [] - } else if (dicts.filter(d => d instanceof DictData).length !== dicts.length) { - console.error('the type of elements in dicts must be DictData') - dicts = [] - } - dict.type[type].splice(0, Number.MAX_SAFE_INTEGER, ...dicts) - dicts.forEach(d => { - Vue.set(dict.label[type], d.value, d.label) - }) - return dicts - }) -} diff --git a/oms-vue/src/utils/dict/DictConverter.js b/oms-vue/src/utils/dict/DictConverter.js deleted file mode 100644 index 0cf5df86..00000000 --- a/oms-vue/src/utils/dict/DictConverter.js +++ /dev/null @@ -1,17 +0,0 @@ -import DictOptions from './DictOptions' -import DictData from './DictData' - -export default function(dict, dictMeta) { - const label = determineDictField(dict, dictMeta.labelField, ...DictOptions.DEFAULT_LABEL_FIELDS) - const value = determineDictField(dict, dictMeta.valueField, ...DictOptions.DEFAULT_VALUE_FIELDS) - return new DictData(dict[label], dict[value], dict) -} - -/** - * 确定字典字段 - * @param {DictData} dict - * @param {...String} fields - */ -function determineDictField(dict, ...fields) { - return fields.find(f => Object.prototype.hasOwnProperty.call(dict, f)) -} diff --git a/oms-vue/src/utils/dict/DictData.js b/oms-vue/src/utils/dict/DictData.js deleted file mode 100644 index afc763e8..00000000 --- a/oms-vue/src/utils/dict/DictData.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * @classdesc 字典数据 - * @property {String} label 标签 - * @property {*} value 标签 - * @property {Object} raw 原始数据 - */ -export default class DictData { - constructor(label, value, raw) { - this.label = label - this.value = value - this.raw = raw - } -} diff --git a/oms-vue/src/utils/dict/DictMeta.js b/oms-vue/src/utils/dict/DictMeta.js deleted file mode 100644 index fedc461d..00000000 --- a/oms-vue/src/utils/dict/DictMeta.js +++ /dev/null @@ -1,38 +0,0 @@ -import { mergeRecursive } from "@/utils/zhijian"; -import DictOptions from './DictOptions' - -/** - * @classdesc 字典元数据 - * @property {String} type 类型 - * @property {Function} request 请求 - * @property {String} label 标签字段 - * @property {String} value 值字段 - */ -export default class DictMeta { - constructor(options) { - this.type = options.type - this.request = options.request - this.responseConverter = options.responseConverter - this.labelField = options.labelField - this.valueField = options.valueField - this.lazy = options.lazy === true - } -} - - -/** - * 解析字典元数据 - * @param {Object} options - * @returns {DictMeta} - */ -DictMeta.parse= function(options) { - let opts = null - if (typeof options === 'string') { - opts = DictOptions.metas[options] || {} - opts.type = options - } else if (typeof options === 'object') { - opts = options - } - opts = mergeRecursive(DictOptions.metas['*'], opts) - return new DictMeta(opts) -} diff --git a/oms-vue/src/utils/dict/DictOptions.js b/oms-vue/src/utils/dict/DictOptions.js deleted file mode 100644 index f0e786cc..00000000 --- a/oms-vue/src/utils/dict/DictOptions.js +++ /dev/null @@ -1,51 +0,0 @@ -import { mergeRecursive } from "@/utils/zhijian"; -import dictConverter from './DictConverter' - -export const options = { - metas: { - '*': { - /** - * 字典请求,方法签名为function(dictMeta: DictMeta): Promise - */ - request: (dictMeta) => { - console.log(`load dict ${dictMeta.type}`) - return Promise.resolve([]) - }, - /** - * 字典响应数据转换器,方法签名为function(response: Object, dictMeta: DictMeta): DictData - */ - responseConverter, - labelField: 'label', - valueField: 'value', - }, - }, - /** - * 默认标签字段 - */ - DEFAULT_LABEL_FIELDS: ['label', 'name', 'title'], - /** - * 默认值字段 - */ - DEFAULT_VALUE_FIELDS: ['value', 'id', 'uid', 'key'], -} - -/** - * 映射字典 - * @param {Object} response 字典数据 - * @param {DictMeta} dictMeta 字典元数据 - * @returns {DictData} - */ -function responseConverter(response, dictMeta) { - const dicts = response.content instanceof Array ? response.content : response - if (dicts === undefined) { - console.warn(`no dict data of "${dictMeta.type}" found in the response`) - return [] - } - return dicts.map(d => dictConverter(d, dictMeta)) -} - -export function mergeOptions(src) { - mergeRecursive(options, src) -} - -export default options diff --git a/oms-vue/src/utils/dict/index.js b/oms-vue/src/utils/dict/index.js deleted file mode 100644 index 215eb9e0..00000000 --- a/oms-vue/src/utils/dict/index.js +++ /dev/null @@ -1,33 +0,0 @@ -import Dict from './Dict' -import { mergeOptions } from './DictOptions' - -export default function(Vue, options) { - mergeOptions(options) - Vue.mixin({ - data() { - if (this.$options === undefined || this.$options.dicts === undefined || this.$options.dicts === null) { - return {} - } - const dict = new Dict() - dict.owner = this - return { - dict - } - }, - created() { - if (!(this.dict instanceof Dict)) { - return - } - options.onCreated && options.onCreated(this.dict) - this.dict.init(this.$options.dicts).then(() => { - options.onReady && options.onReady(this.dict) - this.$nextTick(() => { - this.$emit('dictReady', this.dict) - if (this.$options.methods && this.$options.methods.onDictReady instanceof Function) { - this.$options.methods.onDictReady.call(this, this.dict) - } - }) - }) - }, - }) -} diff --git a/oms-vue/src/utils/errorCode.js b/oms-vue/src/utils/errorCode.js deleted file mode 100644 index d2111ee1..00000000 --- a/oms-vue/src/utils/errorCode.js +++ /dev/null @@ -1,6 +0,0 @@ -export default { - '401': '认证失败,无法访问系统资源', - '403': '当前操作没有权限', - '404': '访问资源不存在', - 'default': '系统未知错误,请反馈给管理员' -} diff --git a/oms-vue/src/utils/generator/config.js b/oms-vue/src/utils/generator/config.js deleted file mode 100644 index 7abf227d..00000000 --- a/oms-vue/src/utils/generator/config.js +++ /dev/null @@ -1,438 +0,0 @@ -export const formConf = { - formRef: 'elForm', - formModel: 'formData', - size: 'medium', - labelPosition: 'right', - labelWidth: 100, - formRules: 'rules', - gutter: 15, - disabled: false, - span: 24, - formBtns: true -} - -export const inputComponents = [ - { - label: '单行文本', - tag: 'el-input', - tagIcon: 'input', - placeholder: '请输入', - defaultValue: undefined, - span: 24, - labelWidth: null, - style: { width: '100%' }, - clearable: true, - prepend: '', - append: '', - 'prefix-icon': '', - 'suffix-icon': '', - maxlength: null, - 'show-word-limit': false, - readonly: false, - disabled: false, - required: true, - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/input' - }, - { - label: '多行文本', - tag: 'el-input', - tagIcon: 'textarea', - type: 'textarea', - placeholder: '请输入', - defaultValue: undefined, - span: 24, - labelWidth: null, - autosize: { - minRows: 4, - maxRows: 4 - }, - style: { width: '100%' }, - maxlength: null, - 'show-word-limit': false, - readonly: false, - disabled: false, - required: true, - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/input' - }, - { - label: '密码', - tag: 'el-input', - tagIcon: 'password', - placeholder: '请输入', - defaultValue: undefined, - span: 24, - 'show-password': true, - labelWidth: null, - style: { width: '100%' }, - clearable: true, - prepend: '', - append: '', - 'prefix-icon': '', - 'suffix-icon': '', - maxlength: null, - 'show-word-limit': false, - readonly: false, - disabled: false, - required: true, - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/input' - }, - { - label: '计数器', - tag: 'el-input-number', - tagIcon: 'number', - placeholder: '', - defaultValue: undefined, - span: 24, - labelWidth: null, - min: undefined, - max: undefined, - step: undefined, - 'step-strictly': false, - precision: undefined, - 'controls-position': '', - disabled: false, - required: true, - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/input-number' - } -] - -export const selectComponents = [ - { - label: '下拉选择', - tag: 'el-select', - tagIcon: 'select', - placeholder: '请选择', - defaultValue: undefined, - span: 24, - labelWidth: null, - style: { width: '100%' }, - clearable: true, - disabled: false, - required: true, - filterable: false, - multiple: false, - options: [{ - label: '选项一', - value: 1 - }, { - label: '选项二', - value: 2 - }], - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/select' - }, - { - label: '级联选择', - tag: 'el-cascader', - tagIcon: 'cascader', - placeholder: '请选择', - defaultValue: [], - span: 24, - labelWidth: null, - style: { width: '100%' }, - props: { - props: { - multiple: false - } - }, - 'show-all-levels': true, - disabled: false, - clearable: true, - filterable: false, - required: true, - options: [{ - id: 1, - value: 1, - label: '选项1', - children: [{ - id: 2, - value: 2, - label: '选项1-1' - }] - }], - dataType: 'dynamic', - labelKey: 'label', - valueKey: 'value', - childrenKey: 'children', - separator: '/', - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/cascader' - }, - { - label: '单选框组', - tag: 'el-radio-group', - tagIcon: 'radio', - defaultValue: undefined, - span: 24, - labelWidth: null, - style: {}, - optionType: 'default', - border: false, - size: 'medium', - disabled: false, - required: true, - options: [{ - label: '选项一', - value: 1 - }, { - label: '选项二', - value: 2 - }], - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/radio' - }, - { - label: '多选框组', - tag: 'el-checkbox-group', - tagIcon: 'checkbox', - defaultValue: [], - span: 24, - labelWidth: null, - style: {}, - optionType: 'default', - border: false, - size: 'medium', - disabled: false, - required: true, - options: [{ - label: '选项一', - value: 1 - }, { - label: '选项二', - value: 2 - }], - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/checkbox' - }, - { - label: '开关', - tag: 'el-switch', - tagIcon: 'switch', - defaultValue: false, - span: 24, - labelWidth: null, - style: {}, - disabled: false, - required: true, - 'active-text': '', - 'inactive-text': '', - 'active-color': null, - 'inactive-color': null, - 'active-value': true, - 'inactive-value': false, - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/switch' - }, - { - label: '滑块', - tag: 'el-slider', - tagIcon: 'slider', - defaultValue: null, - span: 24, - labelWidth: null, - disabled: false, - required: true, - min: 0, - max: 100, - step: 1, - 'show-stops': false, - range: false, - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/slider' - }, - { - label: '时间选择', - tag: 'el-time-picker', - tagIcon: 'time', - placeholder: '请选择', - defaultValue: null, - span: 24, - labelWidth: null, - style: { width: '100%' }, - disabled: false, - clearable: true, - required: true, - 'picker-options': { - selectableRange: '00:00:00-23:59:59' - }, - format: 'HH:mm:ss', - 'value-format': 'HH:mm:ss', - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/time-picker' - }, - { - label: '时间范围', - tag: 'el-time-picker', - tagIcon: 'time-range', - defaultValue: null, - span: 24, - labelWidth: null, - style: { width: '100%' }, - disabled: false, - clearable: true, - required: true, - 'is-range': true, - 'range-separator': '至', - 'start-placeholder': '开始时间', - 'end-placeholder': '结束时间', - format: 'HH:mm:ss', - 'value-format': 'HH:mm:ss', - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/time-picker' - }, - { - label: '日期选择', - tag: 'el-date-picker', - tagIcon: 'date', - placeholder: '请选择', - defaultValue: null, - type: 'date', - span: 24, - labelWidth: null, - style: { width: '100%' }, - disabled: false, - clearable: true, - required: true, - format: 'yyyy-MM-dd', - 'value-format': 'yyyy-MM-dd', - readonly: false, - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/date-picker' - }, - { - label: '日期范围', - tag: 'el-date-picker', - tagIcon: 'date-range', - defaultValue: null, - span: 24, - labelWidth: null, - style: { width: '100%' }, - type: 'daterange', - 'range-separator': '至', - 'start-placeholder': '开始日期', - 'end-placeholder': '结束日期', - disabled: false, - clearable: true, - required: true, - format: 'yyyy-MM-dd', - 'value-format': 'yyyy-MM-dd', - readonly: false, - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/date-picker' - }, - { - label: '评分', - tag: 'el-rate', - tagIcon: 'rate', - defaultValue: 0, - span: 24, - labelWidth: null, - style: {}, - max: 5, - 'allow-half': false, - 'show-text': false, - 'show-score': false, - disabled: false, - required: true, - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/rate' - }, - { - label: '颜色选择', - tag: 'el-color-picker', - tagIcon: 'color', - defaultValue: null, - labelWidth: null, - 'show-alpha': false, - 'color-format': '', - disabled: false, - required: true, - size: 'medium', - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/color-picker' - }, - { - label: '上传', - tag: 'el-upload', - tagIcon: 'upload', - action: 'https://jsonplaceholder.typicode.com/posts/', - defaultValue: null, - labelWidth: null, - disabled: false, - required: true, - accept: '', - name: 'file', - 'auto-upload': true, - showTip: false, - buttonText: '点击上传', - fileSize: 2, - sizeUnit: 'MB', - 'list-type': 'text', - multiple: false, - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/upload' - } -] - -export const layoutComponents = [ - { - layout: 'rowFormItem', - tagIcon: 'row', - type: 'default', - justify: 'start', - align: 'top', - label: '行容器', - layoutTree: true, - children: [], - document: 'https://element.eleme.cn/#/zh-CN/component/layout' - }, - { - layout: 'colFormItem', - label: '按钮', - changeTag: true, - labelWidth: null, - tag: 'el-button', - tagIcon: 'button', - span: 24, - default: '主要按钮', - type: 'primary', - icon: 'el-icon-search', - size: 'medium', - disabled: false, - document: 'https://element.eleme.cn/#/zh-CN/component/button' - } -] - -// 组件rule的触发方式,无触发方式的组件不生成rule -export const trigger = { - 'el-input': 'blur', - 'el-input-number': 'blur', - 'el-select': 'change', - 'el-radio-group': 'change', - 'el-checkbox-group': 'change', - 'el-cascader': 'change', - 'el-time-picker': 'change', - 'el-date-picker': 'change', - 'el-rate': 'change' -} diff --git a/oms-vue/src/utils/generator/css.js b/oms-vue/src/utils/generator/css.js deleted file mode 100644 index c1c62e60..00000000 --- a/oms-vue/src/utils/generator/css.js +++ /dev/null @@ -1,18 +0,0 @@ -const styles = { - 'el-rate': '.el-rate{display: inline-block; vertical-align: text-top;}', - 'el-upload': '.el-upload__tip{line-height: 1.2;}' -} - -function addCss(cssList, el) { - const css = styles[el.tag] - css && cssList.indexOf(css) === -1 && cssList.push(css) - if (el.children) { - el.children.forEach(el2 => addCss(cssList, el2)) - } -} - -export function makeUpCss(conf) { - const cssList = [] - conf.fields.forEach(el => addCss(cssList, el)) - return cssList.join('\n') -} diff --git a/oms-vue/src/utils/generator/drawingDefault.js b/oms-vue/src/utils/generator/drawingDefault.js deleted file mode 100644 index 09f133ca..00000000 --- a/oms-vue/src/utils/generator/drawingDefault.js +++ /dev/null @@ -1,29 +0,0 @@ -export default [ - { - layout: 'colFormItem', - tagIcon: 'input', - label: '手机号', - vModel: 'mobile', - formId: 6, - tag: 'el-input', - placeholder: '请输入手机号', - defaultValue: '', - span: 24, - style: { width: '100%' }, - clearable: true, - prepend: '', - append: '', - 'prefix-icon': 'el-icon-mobile', - 'suffix-icon': '', - maxlength: 11, - 'show-word-limit': true, - readonly: false, - disabled: false, - required: true, - changeTag: true, - regList: [{ - pattern: '/^1(3|4|5|7|8|9)\\d{9}$/', - message: '手机号格式错误' - }] - } -] diff --git a/oms-vue/src/utils/generator/html.js b/oms-vue/src/utils/generator/html.js deleted file mode 100644 index 9bcc5361..00000000 --- a/oms-vue/src/utils/generator/html.js +++ /dev/null @@ -1,359 +0,0 @@ -/* eslint-disable max-len */ -import { trigger } from './config' - -let confGlobal -let someSpanIsNot24 - -export function dialogWrapper(str) { - return ` - ${str} -
- 取消 - 确定 -
-
` -} - -export function vueTemplate(str) { - return `` -} - -export function vueScript(str) { - return `` -} - -export function cssStyle(cssStr) { - return `` -} - -function buildFormTemplate(conf, child, type) { - let labelPosition = '' - if (conf.labelPosition !== 'right') { - labelPosition = `label-position="${conf.labelPosition}"` - } - const disabled = conf.disabled ? `:disabled="${conf.disabled}"` : '' - let str = ` - ${child} - ${buildFromBtns(conf, type)} - ` - if (someSpanIsNot24) { - str = ` - ${str} - ` - } - return str -} - -function buildFromBtns(conf, type) { - let str = '' - if (conf.formBtns && type === 'file') { - str = ` - 提交 - 重置 - ` - if (someSpanIsNot24) { - str = ` - ${str} - ` - } - } - return str -} - -// span不为24的用el-col包裹 -function colWrapper(element, str) { - if (someSpanIsNot24 || element.span !== 24) { - return ` - ${str} - ` - } - return str -} - -const layouts = { - colFormItem(element) { - let labelWidth = '' - if (element.labelWidth && element.labelWidth !== confGlobal.labelWidth) { - labelWidth = `label-width="${element.labelWidth}px"` - } - const required = !trigger[element.tag] && element.required ? 'required' : '' - const tagDom = tags[element.tag] ? tags[element.tag](element) : null - let str = ` - ${tagDom} - ` - str = colWrapper(element, str) - return str - }, - rowFormItem(element) { - const type = element.type === 'default' ? '' : `type="${element.type}"` - const justify = element.type === 'default' ? '' : `justify="${element.justify}"` - const align = element.type === 'default' ? '' : `align="${element.align}"` - const gutter = element.gutter ? `gutter="${element.gutter}"` : '' - const children = element.children.map(el => layouts[el.layout](el)) - let str = ` - ${children.join('\n')} - ` - str = colWrapper(element, str) - return str - } -} - -const tags = { - 'el-button': el => { - const { - tag, disabled - } = attrBuilder(el) - const type = el.type ? `type="${el.type}"` : '' - const icon = el.icon ? `icon="${el.icon}"` : '' - const size = el.size ? `size="${el.size}"` : '' - let child = buildElButtonChild(el) - - if (child) child = `\n${child}\n` // 换行 - return `<${el.tag} ${type} ${icon} ${size} ${disabled}>${child}` - }, - 'el-input': el => { - const { - disabled, vModel, clearable, placeholder, width - } = attrBuilder(el) - const maxlength = el.maxlength ? `:maxlength="${el.maxlength}"` : '' - const showWordLimit = el['show-word-limit'] ? 'show-word-limit' : '' - const readonly = el.readonly ? 'readonly' : '' - const prefixIcon = el['prefix-icon'] ? `prefix-icon='${el['prefix-icon']}'` : '' - const suffixIcon = el['suffix-icon'] ? `suffix-icon='${el['suffix-icon']}'` : '' - const showPassword = el['show-password'] ? 'show-password' : '' - const type = el.type ? `type="${el.type}"` : '' - const autosize = el.autosize && el.autosize.minRows - ? `:autosize="{minRows: ${el.autosize.minRows}, maxRows: ${el.autosize.maxRows}}"` - : '' - let child = buildElInputChild(el) - - if (child) child = `\n${child}\n` // 换行 - return `<${el.tag} ${vModel} ${type} ${placeholder} ${maxlength} ${showWordLimit} ${readonly} ${disabled} ${clearable} ${prefixIcon} ${suffixIcon} ${showPassword} ${autosize} ${width}>${child}` - }, - 'el-input-number': el => { - const { disabled, vModel, placeholder } = attrBuilder(el) - const controlsPosition = el['controls-position'] ? `controls-position=${el['controls-position']}` : '' - const min = el.min ? `:min='${el.min}'` : '' - const max = el.max ? `:max='${el.max}'` : '' - const step = el.step ? `:step='${el.step}'` : '' - const stepStrictly = el['step-strictly'] ? 'step-strictly' : '' - const precision = el.precision ? `:precision='${el.precision}'` : '' - - return `<${el.tag} ${vModel} ${placeholder} ${step} ${stepStrictly} ${precision} ${controlsPosition} ${min} ${max} ${disabled}>` - }, - 'el-select': el => { - const { - disabled, vModel, clearable, placeholder, width - } = attrBuilder(el) - const filterable = el.filterable ? 'filterable' : '' - const multiple = el.multiple ? 'multiple' : '' - let child = buildElSelectChild(el) - - if (child) child = `\n${child}\n` // 换行 - return `<${el.tag} ${vModel} ${placeholder} ${disabled} ${multiple} ${filterable} ${clearable} ${width}>${child}` - }, - 'el-radio-group': el => { - const { disabled, vModel } = attrBuilder(el) - const size = `size="${el.size}"` - let child = buildElRadioGroupChild(el) - - if (child) child = `\n${child}\n` // 换行 - return `<${el.tag} ${vModel} ${size} ${disabled}>${child}` - }, - 'el-checkbox-group': el => { - const { disabled, vModel } = attrBuilder(el) - const size = `size="${el.size}"` - const min = el.min ? `:min="${el.min}"` : '' - const max = el.max ? `:max="${el.max}"` : '' - let child = buildElCheckboxGroupChild(el) - - if (child) child = `\n${child}\n` // 换行 - return `<${el.tag} ${vModel} ${min} ${max} ${size} ${disabled}>${child}` - }, - 'el-switch': el => { - const { disabled, vModel } = attrBuilder(el) - const activeText = el['active-text'] ? `active-text="${el['active-text']}"` : '' - const inactiveText = el['inactive-text'] ? `inactive-text="${el['inactive-text']}"` : '' - const activeColor = el['active-color'] ? `active-color="${el['active-color']}"` : '' - const inactiveColor = el['inactive-color'] ? `inactive-color="${el['inactive-color']}"` : '' - const activeValue = el['active-value'] !== true ? `:active-value='${JSON.stringify(el['active-value'])}'` : '' - const inactiveValue = el['inactive-value'] !== false ? `:inactive-value='${JSON.stringify(el['inactive-value'])}'` : '' - - return `<${el.tag} ${vModel} ${activeText} ${inactiveText} ${activeColor} ${inactiveColor} ${activeValue} ${inactiveValue} ${disabled}>` - }, - 'el-cascader': el => { - const { - disabled, vModel, clearable, placeholder, width - } = attrBuilder(el) - const options = el.options ? `:options="${el.vModel}Options"` : '' - const props = el.props ? `:props="${el.vModel}Props"` : '' - const showAllLevels = el['show-all-levels'] ? '' : ':show-all-levels="false"' - const filterable = el.filterable ? 'filterable' : '' - const separator = el.separator === '/' ? '' : `separator="${el.separator}"` - - return `<${el.tag} ${vModel} ${options} ${props} ${width} ${showAllLevels} ${placeholder} ${separator} ${filterable} ${clearable} ${disabled}>` - }, - 'el-slider': el => { - const { disabled, vModel } = attrBuilder(el) - const min = el.min ? `:min='${el.min}'` : '' - const max = el.max ? `:max='${el.max}'` : '' - const step = el.step ? `:step='${el.step}'` : '' - const range = el.range ? 'range' : '' - const showStops = el['show-stops'] ? `:show-stops="${el['show-stops']}"` : '' - - return `<${el.tag} ${min} ${max} ${step} ${vModel} ${range} ${showStops} ${disabled}>` - }, - 'el-time-picker': el => { - const { - disabled, vModel, clearable, placeholder, width - } = attrBuilder(el) - const startPlaceholder = el['start-placeholder'] ? `start-placeholder="${el['start-placeholder']}"` : '' - const endPlaceholder = el['end-placeholder'] ? `end-placeholder="${el['end-placeholder']}"` : '' - const rangeSeparator = el['range-separator'] ? `range-separator="${el['range-separator']}"` : '' - const isRange = el['is-range'] ? 'is-range' : '' - const format = el.format ? `format="${el.format}"` : '' - const valueFormat = el['value-format'] ? `value-format="${el['value-format']}"` : '' - const pickerOptions = el['picker-options'] ? `:picker-options='${JSON.stringify(el['picker-options'])}'` : '' - - return `<${el.tag} ${vModel} ${isRange} ${format} ${valueFormat} ${pickerOptions} ${width} ${placeholder} ${startPlaceholder} ${endPlaceholder} ${rangeSeparator} ${clearable} ${disabled}>` - }, - 'el-date-picker': el => { - const { - disabled, vModel, clearable, placeholder, width - } = attrBuilder(el) - const startPlaceholder = el['start-placeholder'] ? `start-placeholder="${el['start-placeholder']}"` : '' - const endPlaceholder = el['end-placeholder'] ? `end-placeholder="${el['end-placeholder']}"` : '' - const rangeSeparator = el['range-separator'] ? `range-separator="${el['range-separator']}"` : '' - const format = el.format ? `format="${el.format}"` : '' - const valueFormat = el['value-format'] ? `value-format="${el['value-format']}"` : '' - const type = el.type === 'date' ? '' : `type="${el.type}"` - const readonly = el.readonly ? 'readonly' : '' - - return `<${el.tag} ${type} ${vModel} ${format} ${valueFormat} ${width} ${placeholder} ${startPlaceholder} ${endPlaceholder} ${rangeSeparator} ${clearable} ${readonly} ${disabled}>` - }, - 'el-rate': el => { - const { disabled, vModel } = attrBuilder(el) - const max = el.max ? `:max='${el.max}'` : '' - const allowHalf = el['allow-half'] ? 'allow-half' : '' - const showText = el['show-text'] ? 'show-text' : '' - const showScore = el['show-score'] ? 'show-score' : '' - - return `<${el.tag} ${vModel} ${allowHalf} ${showText} ${showScore} ${disabled}>` - }, - 'el-color-picker': el => { - const { disabled, vModel } = attrBuilder(el) - const size = `size="${el.size}"` - const showAlpha = el['show-alpha'] ? 'show-alpha' : '' - const colorFormat = el['color-format'] ? `color-format="${el['color-format']}"` : '' - - return `<${el.tag} ${vModel} ${size} ${showAlpha} ${colorFormat} ${disabled}>` - }, - 'el-upload': el => { - const disabled = el.disabled ? ':disabled=\'true\'' : '' - const action = el.action ? `:action="${el.vModel}Action"` : '' - const multiple = el.multiple ? 'multiple' : '' - const listType = el['list-type'] !== 'text' ? `list-type="${el['list-type']}"` : '' - const accept = el.accept ? `accept="${el.accept}"` : '' - const name = el.name !== 'file' ? `name="${el.name}"` : '' - const autoUpload = el['auto-upload'] === false ? ':auto-upload="false"' : '' - const beforeUpload = `:before-upload="${el.vModel}BeforeUpload"` - const fileList = `:file-list="${el.vModel}fileList"` - const ref = `ref="${el.vModel}"` - let child = buildElUploadChild(el) - - if (child) child = `\n${child}\n` // 换行 - return `<${el.tag} ${ref} ${fileList} ${action} ${autoUpload} ${multiple} ${beforeUpload} ${listType} ${accept} ${name} ${disabled}>${child}` - } -} - -function attrBuilder(el) { - return { - vModel: `v-model="${confGlobal.formModel}.${el.vModel}"`, - clearable: el.clearable ? 'clearable' : '', - placeholder: el.placeholder ? `placeholder="${el.placeholder}"` : '', - width: el.style && el.style.width ? ':style="{width: \'100%\'}"' : '', - disabled: el.disabled ? ':disabled=\'true\'' : '' - } -} - -// el-buttin 子级 -function buildElButtonChild(conf) { - const children = [] - if (conf.default) { - children.push(conf.default) - } - return children.join('\n') -} - -// el-input innerHTML -function buildElInputChild(conf) { - const children = [] - if (conf.prepend) { - children.push(``) - } - if (conf.append) { - children.push(``) - } - return children.join('\n') -} - -function buildElSelectChild(conf) { - const children = [] - if (conf.options && conf.options.length) { - children.push(``) - } - return children.join('\n') -} - -function buildElRadioGroupChild(conf) { - const children = [] - if (conf.options && conf.options.length) { - const tag = conf.optionType === 'button' ? 'el-radio-button' : 'el-radio' - const border = conf.border ? 'border' : '' - children.push(`<${tag} v-for="(item, index) in ${conf.vModel}Options" :key="index" :label="item.value" :disabled="item.disabled" ${border}>{{item.label}}`) - } - return children.join('\n') -} - -function buildElCheckboxGroupChild(conf) { - const children = [] - if (conf.options && conf.options.length) { - const tag = conf.optionType === 'button' ? 'el-checkbox-button' : 'el-checkbox' - const border = conf.border ? 'border' : '' - children.push(`<${tag} v-for="(item, index) in ${conf.vModel}Options" :key="index" :label="item.value" :disabled="item.disabled" ${border}>{{item.label}}`) - } - return children.join('\n') -} - -function buildElUploadChild(conf) { - const list = [] - if (conf['list-type'] === 'picture-card') list.push('') - else list.push(`${conf.buttonText}`) - if (conf.showTip) list.push(`
只能上传不超过 ${conf.fileSize}${conf.sizeUnit} 的${conf.accept}文件
`) - return list.join('\n') -} - -export function makeUpHtml(conf, type) { - const htmlList = [] - confGlobal = conf - someSpanIsNot24 = conf.fields.some(item => item.span !== 24) - conf.fields.forEach(el => { - htmlList.push(layouts[el.layout](el)) - }) - const htmlStr = htmlList.join('\n') - - let temp = buildFormTemplate(conf, htmlStr, type) - if (type === 'dialog') { - temp = dialogWrapper(temp) - } - confGlobal = null - return temp -} diff --git a/oms-vue/src/utils/generator/icon.json b/oms-vue/src/utils/generator/icon.json deleted file mode 100644 index 2d9999a3..00000000 --- a/oms-vue/src/utils/generator/icon.json +++ /dev/null @@ -1 +0,0 @@ -["platform-eleme","eleme","delete-solid","delete","s-tools","setting","user-solid","user","phone","phone-outline","more","more-outline","star-on","star-off","s-goods","goods","warning","warning-outline","question","info","remove","circle-plus","success","error","zoom-in","zoom-out","remove-outline","circle-plus-outline","circle-check","circle-close","s-help","help","minus","plus","check","close","picture","picture-outline","picture-outline-round","upload","upload2","download","camera-solid","camera","video-camera-solid","video-camera","message-solid","bell","s-cooperation","s-order","s-platform","s-fold","s-unfold","s-operation","s-promotion","s-home","s-release","s-ticket","s-management","s-open","s-shop","s-marketing","s-flag","s-comment","s-finance","s-claim","s-custom","s-opportunity","s-data","s-check","s-grid","menu","share","d-caret","caret-left","caret-right","caret-bottom","caret-top","bottom-left","bottom-right","back","right","bottom","top","top-left","top-right","arrow-left","arrow-right","arrow-down","arrow-up","d-arrow-left","d-arrow-right","video-pause","video-play","refresh","refresh-right","refresh-left","finished","sort","sort-up","sort-down","rank","loading","view","c-scale-to-original","date","edit","edit-outline","folder","folder-opened","folder-add","folder-remove","folder-delete","folder-checked","tickets","document-remove","document-delete","document-copy","document-checked","document","document-add","printer","paperclip","takeaway-box","search","monitor","attract","mobile","scissors","umbrella","headset","brush","mouse","coordinate","magic-stick","reading","data-line","data-board","pie-chart","data-analysis","collection-tag","film","suitcase","suitcase-1","receiving","collection","files","notebook-1","notebook-2","toilet-paper","office-building","school","table-lamp","house","no-smoking","smoking","shopping-cart-full","shopping-cart-1","shopping-cart-2","shopping-bag-1","shopping-bag-2","sold-out","sell","present","box","bank-card","money","coin","wallet","discount","price-tag","news","guide","male","female","thumb","cpu","link","connection","open","turn-off","set-up","chat-round","chat-line-round","chat-square","chat-dot-round","chat-dot-square","chat-line-square","message","postcard","position","turn-off-microphone","microphone","close-notification","bangzhu","time","odometer","crop","aim","switch-button","full-screen","copy-document","mic","stopwatch","medal-1","medal","trophy","trophy-1","first-aid-kit","discover","place","location","location-outline","location-information","add-location","delete-location","map-location","alarm-clock","timer","watch-1","watch","lock","unlock","key","service","mobile-phone","bicycle","truck","ship","basketball","football","soccer","baseball","wind-power","light-rain","lightning","heavy-rain","sunrise","sunrise-1","sunset","sunny","cloudy","partly-cloudy","cloudy-and-sunny","moon","moon-night","dish","dish-1","food","chicken","fork-spoon","knife-fork","burger","tableware","sugar","dessert","ice-cream","hot-water","water-cup","coffee-cup","cold-drink","goblet","goblet-full","goblet-square","goblet-square-full","refrigerator","grape","watermelon","cherry","apple","pear","orange","coffee","ice-tea","ice-drink","milk-tea","potato-strips","lollipop","ice-cream-square","ice-cream-round"] \ No newline at end of file diff --git a/oms-vue/src/utils/generator/js.js b/oms-vue/src/utils/generator/js.js deleted file mode 100644 index ee8668dc..00000000 --- a/oms-vue/src/utils/generator/js.js +++ /dev/null @@ -1,235 +0,0 @@ -import { exportDefault, titleCase } from '@/utils/index' -import { trigger } from './config' - -const units = { - KB: '1024', - MB: '1024 / 1024', - GB: '1024 / 1024 / 1024' -} -let confGlobal -const inheritAttrs = { - file: '', - dialog: 'inheritAttrs: false,' -} - - -export function makeUpJs(conf, type) { - confGlobal = conf = JSON.parse(JSON.stringify(conf)) - const dataList = [] - const ruleList = [] - const optionsList = [] - const propsList = [] - const methodList = mixinMethod(type) - const uploadVarList = [] - - conf.fields.forEach(el => { - buildAttributes(el, dataList, ruleList, optionsList, methodList, propsList, uploadVarList) - }) - - const script = buildexport( - conf, - type, - dataList.join('\n'), - ruleList.join('\n'), - optionsList.join('\n'), - uploadVarList.join('\n'), - propsList.join('\n'), - methodList.join('\n') - ) - confGlobal = null - return script -} - -function buildAttributes(el, dataList, ruleList, optionsList, methodList, propsList, uploadVarList) { - buildData(el, dataList) - buildRules(el, ruleList) - - if (el.options && el.options.length) { - buildOptions(el, optionsList) - if (el.dataType === 'dynamic') { - const model = `${el.vModel}Options` - const options = titleCase(model) - buildOptionMethod(`get${options}`, model, methodList) - } - } - - if (el.props && el.props.props) { - buildProps(el, propsList) - } - - if (el.action && el.tag === 'el-upload') { - uploadVarList.push( - `${el.vModel}Action: '${el.action}', - ${el.vModel}fileList: [],` - ) - methodList.push(buildBeforeUpload(el)) - if (!el['auto-upload']) { - methodList.push(buildSubmitUpload(el)) - } - } - - if (el.children) { - el.children.forEach(el2 => { - buildAttributes(el2, dataList, ruleList, optionsList, methodList, propsList, uploadVarList) - }) - } -} - -function mixinMethod(type) { - const list = []; const - minxins = { - file: confGlobal.formBtns ? { - submitForm: `submitForm() { - this.$refs['${confGlobal.formRef}'].validate(valid => { - if(!valid) return - // TODO 提交表单 - }) - },`, - resetForm: `resetForm() { - this.$refs['${confGlobal.formRef}'].resetFields() - },` - } : null, - dialog: { - onOpen: 'onOpen() {},', - onClose: `onClose() { - this.$refs['${confGlobal.formRef}'].resetFields() - },`, - close: `close() { - this.$emit('update:visible', false) - },`, - handleConfirm: `handleConfirm() { - this.$refs['${confGlobal.formRef}'].validate(valid => { - if(!valid) return - this.close() - }) - },` - } - } - - const methods = minxins[type] - if (methods) { - Object.keys(methods).forEach(key => { - list.push(methods[key]) - }) - } - - return list -} - -function buildData(conf, dataList) { - if (conf.vModel === undefined) return - let defaultValue - if (typeof (conf.defaultValue) === 'string' && !conf.multiple) { - defaultValue = `'${conf.defaultValue}'` - } else { - defaultValue = `${JSON.stringify(conf.defaultValue)}` - } - dataList.push(`${conf.vModel}: ${defaultValue},`) -} - -function buildRules(conf, ruleList) { - if (conf.vModel === undefined) return - const rules = [] - if (trigger[conf.tag]) { - if (conf.required) { - const type = Array.isArray(conf.defaultValue) ? 'type: \'array\',' : '' - let message = Array.isArray(conf.defaultValue) ? `请至少选择一个${conf.vModel}` : conf.placeholder - if (message === undefined) message = `${conf.label}不能为空` - rules.push(`{ required: true, ${type} message: '${message}', trigger: '${trigger[conf.tag]}' }`) - } - if (conf.regList && Array.isArray(conf.regList)) { - conf.regList.forEach(item => { - if (item.pattern) { - rules.push(`{ pattern: ${eval(item.pattern)}, message: '${item.message}', trigger: '${trigger[conf.tag]}' }`) - } - }) - } - ruleList.push(`${conf.vModel}: [${rules.join(',')}],`) - } -} - -function buildOptions(conf, optionsList) { - if (conf.vModel === undefined) return - if (conf.dataType === 'dynamic') { conf.options = [] } - const str = `${conf.vModel}Options: ${JSON.stringify(conf.options)},` - optionsList.push(str) -} - -function buildProps(conf, propsList) { - if (conf.dataType === 'dynamic') { - conf.valueKey !== 'value' && (conf.props.props.value = conf.valueKey) - conf.labelKey !== 'label' && (conf.props.props.label = conf.labelKey) - conf.childrenKey !== 'children' && (conf.props.props.children = conf.childrenKey) - } - const str = `${conf.vModel}Props: ${JSON.stringify(conf.props.props)},` - propsList.push(str) -} - -function buildBeforeUpload(conf) { - const unitNum = units[conf.sizeUnit]; let rightSizeCode = ''; let acceptCode = ''; const - returnList = [] - if (conf.fileSize) { - rightSizeCode = `let isRightSize = file.size / ${unitNum} < ${conf.fileSize} - if(!isRightSize){ - this.$message.error('文件大小超过 ${conf.fileSize}${conf.sizeUnit}') - }` - returnList.push('isRightSize') - } - if (conf.accept) { - acceptCode = `let isAccept = new RegExp('${conf.accept}').test(file.type) - if(!isAccept){ - this.$message.error('应该选择${conf.accept}类型的文件') - }` - returnList.push('isAccept') - } - const str = `${conf.vModel}BeforeUpload(file) { - ${rightSizeCode} - ${acceptCode} - return ${returnList.join('&&')} - },` - return returnList.length ? str : '' -} - -function buildSubmitUpload(conf) { - const str = `submitUpload() { - this.$refs['${conf.vModel}'].submit() - },` - return str -} - -function buildOptionMethod(methodName, model, methodList) { - const str = `${methodName}() { - // TODO 发起请求获取数据 - this.${model} - },` - methodList.push(str) -} - -function buildexport(conf, type, data, rules, selectOptions, uploadVar, props, methods) { - const str = `${exportDefault}{ - ${inheritAttrs[type]} - components: {}, - props: [], - data () { - return { - ${conf.formModel}: { - ${data} - }, - ${conf.formRules}: { - ${rules} - }, - ${uploadVar} - ${selectOptions} - ${props} - } - }, - computed: {}, - watch: {}, - created () {}, - mounted () {}, - methods: { - ${methods} - } -}` - return str -} diff --git a/oms-vue/src/utils/generator/render.js b/oms-vue/src/utils/generator/render.js deleted file mode 100644 index e8640f0a..00000000 --- a/oms-vue/src/utils/generator/render.js +++ /dev/null @@ -1,126 +0,0 @@ -import { makeMap } from '@/utils/index' - -// 参考https://github.com/vuejs/vue/blob/v2.6.10/src/platforms/web/server/util.js -const isAttr = makeMap( - 'accept,accept-charset,accesskey,action,align,alt,async,autocomplete,' - + 'autofocus,autoplay,autosave,bgcolor,border,buffered,challenge,charset,' - + 'checked,cite,class,code,codebase,color,cols,colspan,content,http-equiv,' - + 'name,contenteditable,contextmenu,controls,coords,data,datetime,default,' - + 'defer,dir,dirname,disabled,download,draggable,dropzone,enctype,method,for,' - + 'form,formaction,headers,height,hidden,high,href,hreflang,http-equiv,' - + 'icon,id,ismap,itemprop,keytype,kind,label,lang,language,list,loop,low,' - + 'manifest,max,maxlength,media,method,GET,POST,min,multiple,email,file,' - + 'muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,' - + 'preload,radiogroup,readonly,rel,required,reversed,rows,rowspan,sandbox,' - + 'scope,scoped,seamless,selected,shape,size,type,text,password,sizes,span,' - + 'spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,' - + 'target,title,type,usemap,value,width,wrap' -) - -function vModel(self, dataObject, defaultValue) { - dataObject.props.value = defaultValue - - dataObject.on.input = val => { - self.$emit('input', val) - } -} - -const componentChild = { - 'el-button': { - default(h, conf, key) { - return conf[key] - }, - }, - 'el-input': { - prepend(h, conf, key) { - return - }, - append(h, conf, key) { - return - } - }, - 'el-select': { - options(h, conf, key) { - const list = [] - conf.options.forEach(item => { - list.push() - }) - return list - } - }, - 'el-radio-group': { - options(h, conf, key) { - const list = [] - conf.options.forEach(item => { - if (conf.optionType === 'button') list.push({item.label}) - else list.push({item.label}) - }) - return list - } - }, - 'el-checkbox-group': { - options(h, conf, key) { - const list = [] - conf.options.forEach(item => { - if (conf.optionType === 'button') { - list.push({item.label}) - } else { - list.push({item.label}) - } - }) - return list - } - }, - 'el-upload': { - 'list-type': (h, conf, key) => { - const list = [] - if (conf['list-type'] === 'picture-card') { - list.push() - } else { - list.push({conf.buttonText}) - } - if (conf.showTip) { - list.push(
只能上传不超过 {conf.fileSize}{conf.sizeUnit} 的{conf.accept}文件
) - } - return list - } - } -} - -export default { - render(h) { - const dataObject = { - attrs: {}, - props: {}, - on: {}, - style: {} - } - const confClone = JSON.parse(JSON.stringify(this.conf)) - const children = [] - - const childObjs = componentChild[confClone.tag] - if (childObjs) { - Object.keys(childObjs).forEach(key => { - const childFunc = childObjs[key] - if (confClone[key]) { - children.push(childFunc(h, confClone, key)) - } - }) - } - - Object.keys(confClone).forEach(key => { - const val = confClone[key] - if (key === 'vModel') { - vModel(this, dataObject, confClone.defaultValue) - } else if (dataObject[key]) { - dataObject[key] = val - } else if (!isAttr(key)) { - dataObject.props[key] = val - } else { - dataObject.attrs[key] = val - } - }) - return h(this.conf.tag, dataObject, children) - }, - props: ['conf'] -} diff --git a/oms-vue/src/utils/index.js b/oms-vue/src/utils/index.js deleted file mode 100644 index 7d6bb43f..00000000 --- a/oms-vue/src/utils/index.js +++ /dev/null @@ -1,390 +0,0 @@ -import { parseTime } from './zhijian' - -/** - * 表格时间格式化 - */ -export function formatDate(cellValue) { - if (cellValue == null || cellValue == "") return ""; - var date = new Date(cellValue) - var year = date.getFullYear() - var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1 - var day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate() - var hours = date.getHours() < 10 ? '0' + date.getHours() : date.getHours() - var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes() - var seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds() - return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds -} - -/** - * @param {number} time - * @param {string} option - * @returns {string} - */ -export function formatTime(time, option) { - if (('' + time).length === 10) { - time = parseInt(time) * 1000 - } else { - time = +time - } - const d = new Date(time) - const now = Date.now() - - const diff = (now - d) / 1000 - - if (diff < 30) { - return '刚刚' - } else if (diff < 3600) { - // less 1 hour - return Math.ceil(diff / 60) + '分钟前' - } else if (diff < 3600 * 24) { - return Math.ceil(diff / 3600) + '小时前' - } else if (diff < 3600 * 24 * 2) { - return '1天前' - } - if (option) { - return parseTime(time, option) - } else { - return ( - d.getMonth() + - 1 + - '月' + - d.getDate() + - '日' + - d.getHours() + - '时' + - d.getMinutes() + - '分' - ) - } -} - -/** - * @param {string} url - * @returns {Object} - */ -export function getQueryObject(url) { - url = url == null ? window.location.href : url - const search = url.substring(url.lastIndexOf('?') + 1) - const obj = {} - const reg = /([^?&=]+)=([^?&=]*)/g - search.replace(reg, (rs, $1, $2) => { - const name = decodeURIComponent($1) - let val = decodeURIComponent($2) - val = String(val) - obj[name] = val - return rs - }) - return obj -} - -/** - * @param {string} input value - * @returns {number} output value - */ -export function byteLength(str) { - // returns the byte length of an utf8 string - let s = str.length - for (var i = str.length - 1; i >= 0; i--) { - const code = str.charCodeAt(i) - if (code > 0x7f && code <= 0x7ff) s++ - else if (code > 0x7ff && code <= 0xffff) s += 2 - if (code >= 0xDC00 && code <= 0xDFFF) i-- - } - return s -} - -/** - * @param {Array} actual - * @returns {Array} - */ -export function cleanArray(actual) { - const newArray = [] - for (let i = 0; i < actual.length; i++) { - if (actual[i]) { - newArray.push(actual[i]) - } - } - return newArray -} - -/** - * @param {Object} json - * @returns {Array} - */ -export function param(json) { - if (!json) return '' - return cleanArray( - Object.keys(json).map(key => { - if (json[key] === undefined) return '' - return encodeURIComponent(key) + '=' + encodeURIComponent(json[key]) - }) - ).join('&') -} - -/** - * @param {string} url - * @returns {Object} - */ -export function param2Obj(url) { - const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ') - if (!search) { - return {} - } - const obj = {} - const searchArr = search.split('&') - searchArr.forEach(v => { - const index = v.indexOf('=') - if (index !== -1) { - const name = v.substring(0, index) - const val = v.substring(index + 1, v.length) - obj[name] = val - } - }) - return obj -} - -/** - * @param {string} val - * @returns {string} - */ -export function html2Text(val) { - const div = document.createElement('div') - div.innerHTML = val - return div.textContent || div.innerText -} - -/** - * Merges two objects, giving the last one precedence - * @param {Object} target - * @param {(Object|Array)} source - * @returns {Object} - */ -export function objectMerge(target, source) { - if (typeof target !== 'object') { - target = {} - } - if (Array.isArray(source)) { - return source.slice() - } - Object.keys(source).forEach(property => { - const sourceProperty = source[property] - if (typeof sourceProperty === 'object') { - target[property] = objectMerge(target[property], sourceProperty) - } else { - target[property] = sourceProperty - } - }) - return target -} - -/** - * @param {HTMLElement} element - * @param {string} className - */ -export function toggleClass(element, className) { - if (!element || !className) { - return - } - let classString = element.className - const nameIndex = classString.indexOf(className) - if (nameIndex === -1) { - classString += '' + className - } else { - classString = - classString.substr(0, nameIndex) + - classString.substr(nameIndex + className.length) - } - element.className = classString -} - -/** - * @param {string} type - * @returns {Date} - */ -export function getTime(type) { - if (type === 'start') { - return new Date().getTime() - 3600 * 1000 * 24 * 90 - } else { - return new Date(new Date().toDateString()) - } -} - -/** - * @param {Function} func - * @param {number} wait - * @param {boolean} immediate - * @return {*} - */ -export function debounce(func, wait, immediate) { - let timeout, args, context, timestamp, result - - const later = function() { - // 据上一次触发时间间隔 - const last = +new Date() - timestamp - - // 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait - if (last < wait && last > 0) { - timeout = setTimeout(later, wait - last) - } else { - timeout = null - // 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用 - if (!immediate) { - result = func.apply(context, args) - if (!timeout) context = args = null - } - } - } - - return function(...args) { - context = this - timestamp = +new Date() - const callNow = immediate && !timeout - // 如果延时不存在,重新设定延时 - if (!timeout) timeout = setTimeout(later, wait) - if (callNow) { - result = func.apply(context, args) - context = args = null - } - - return result - } -} - -/** - * This is just a simple version of deep copy - * Has a lot of edge cases bug - * If you want to use a perfect deep copy, use lodash's _.cloneDeep - * @param {Object} source - * @returns {Object} - */ -export function deepClone(source) { - if (!source && typeof source !== 'object') { - throw new Error('error arguments', 'deepClone') - } - const targetObj = source.constructor === Array ? [] : {} - Object.keys(source).forEach(keys => { - if (source[keys] && typeof source[keys] === 'object') { - targetObj[keys] = deepClone(source[keys]) - } else { - targetObj[keys] = source[keys] - } - }) - return targetObj -} - -/** - * @param {Array} arr - * @returns {Array} - */ -export function uniqueArr(arr) { - return Array.from(new Set(arr)) -} - -/** - * @returns {string} - */ -export function createUniqueString() { - const timestamp = +new Date() + '' - const randomNum = parseInt((1 + Math.random()) * 65536) + '' - return (+(randomNum + timestamp)).toString(32) -} - -/** - * Check if an element has a class - * @param {HTMLElement} elm - * @param {string} cls - * @returns {boolean} - */ -export function hasClass(ele, cls) { - return !!ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)')) -} - -/** - * Add class to element - * @param {HTMLElement} elm - * @param {string} cls - */ -export function addClass(ele, cls) { - if (!hasClass(ele, cls)) ele.className += ' ' + cls -} - -/** - * Remove class from element - * @param {HTMLElement} elm - * @param {string} cls - */ -export function removeClass(ele, cls) { - if (hasClass(ele, cls)) { - const reg = new RegExp('(\\s|^)' + cls + '(\\s|$)') - ele.className = ele.className.replace(reg, ' ') - } -} - -export function makeMap(str, expectsLowerCase) { - const map = Object.create(null) - const list = str.split(',') - for (let i = 0; i < list.length; i++) { - map[list[i]] = true - } - return expectsLowerCase - ? val => map[val.toLowerCase()] - : val => map[val] -} - -export const exportDefault = 'export default ' - -export const beautifierConf = { - html: { - indent_size: '2', - indent_char: ' ', - max_preserve_newlines: '-1', - preserve_newlines: false, - keep_array_indentation: false, - break_chained_methods: false, - indent_scripts: 'separate', - brace_style: 'end-expand', - space_before_conditional: true, - unescape_strings: false, - jslint_happy: false, - end_with_newline: true, - wrap_line_length: '110', - indent_inner_html: true, - comma_first: false, - e4x: true, - indent_empty_lines: true - }, - js: { - indent_size: '2', - indent_char: ' ', - max_preserve_newlines: '-1', - preserve_newlines: false, - keep_array_indentation: false, - break_chained_methods: false, - indent_scripts: 'normal', - brace_style: 'end-expand', - space_before_conditional: true, - unescape_strings: false, - jslint_happy: true, - end_with_newline: true, - wrap_line_length: '110', - indent_inner_html: true, - comma_first: false, - e4x: true, - indent_empty_lines: true - } -} - -// 首字母大小 -export function titleCase(str) { - return str.replace(/( |^)[a-z]/g, L => L.toUpperCase()) -} - -// 下划转驼峰 -export function camelCase(str) { - return str.replace(/_[a-z]/g, str1 => str1.substr(-1).toUpperCase()) -} - -export function isNumberStr(str) { - return /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g.test(str) -} - diff --git a/oms-vue/src/utils/jsencrypt.js b/oms-vue/src/utils/jsencrypt.js deleted file mode 100644 index 78d95234..00000000 --- a/oms-vue/src/utils/jsencrypt.js +++ /dev/null @@ -1,30 +0,0 @@ -import JSEncrypt from 'jsencrypt/bin/jsencrypt.min' - -// 密钥对生成 http://web.chacuo.net/netrsakeypair - -const publicKey = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdH\n' + - 'nzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ==' - -const privateKey = 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY\n' + - '7Nt+PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKN\n' + - 'PuH3owIDAQABAkAfoiLyL+Z4lf4Myxk6xUDgLaWGximj20CUf+5BKKnlrK+Ed8gA\n' + - 'kM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWow\n' + - 'cSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21v+F25WaHYPxCFMvwxpcw99Ecv\n' + - 'DQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthh\n' + - 'YhovyloRYsM+IS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3\n' + - 'UP8iWi1Qw0Y=' - -// 加密 -export function encrypt(txt) { - const encryptor = new JSEncrypt() - encryptor.setPublicKey(publicKey) // 设置公钥 - return encryptor.encrypt(txt) // 对数据进行加密 -} - -// 解密 -export function decrypt(txt) { - const encryptor = new JSEncrypt() - encryptor.setPrivateKey(privateKey) // 设置私钥 - return encryptor.decrypt(txt) // 对数据进行解密 -} - diff --git a/oms-vue/src/utils/permission.js b/oms-vue/src/utils/permission.js deleted file mode 100644 index 1730e332..00000000 --- a/oms-vue/src/utils/permission.js +++ /dev/null @@ -1,51 +0,0 @@ -import store from '@/store' - -/** - * 字符权限校验 - * @param {Array} value 校验值 - * @returns {Boolean} - */ -export function checkPermi(value) { - if (value && value instanceof Array && value.length > 0) { - const permissions = store.getters && store.getters.permissions - const permissionDatas = value - const all_permission = "*:*:*"; - - const hasPermission = permissions.some(permission => { - return all_permission === permission || permissionDatas.includes(permission) - }) - - if (!hasPermission) { - return false - } - return true - } else { - console.error(`need roles! Like checkPermi="['system:user:add','system:user:edit']"`) - return false - } -} - -/** - * 角色权限校验 - * @param {Array} value 校验值 - * @returns {Boolean} - */ -export function checkRole(value) { - if (value && value instanceof Array && value.length > 0) { - const roles = store.getters && store.getters.roles - const permissionRoles = value - const super_admin = "admin"; - - const hasRole = roles.some(role => { - return super_admin === role || permissionRoles.includes(role) - }) - - if (!hasRole) { - return false - } - return true - } else { - console.error(`need roles! Like checkRole="['admin','editor']"`) - return false - } -} \ No newline at end of file diff --git a/oms-vue/src/utils/request.js b/oms-vue/src/utils/request.js deleted file mode 100644 index 0778c867..00000000 --- a/oms-vue/src/utils/request.js +++ /dev/null @@ -1,160 +0,0 @@ -import axios from 'axios' -import { Notification, MessageBox, Message, Loading } from 'element-ui' -import store from '@/store' -import { getToken } from '@/utils/auth' -import errorCode from '@/utils/errorCode' -import { tansParams, blobValidate } from "@/utils/zhijian"; -import cache from '@/plugins/cache' -import { saveAs } from 'file-saver' - -let downloadLoadingInstance; -// 是否显示重新登录 -export let isRelogin = { show: false }; - -axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' -// 创建axios实例 -const service = axios.create({ - // axios中请求配置有baseURL选项,表示请求URL公共部分 - baseURL: process.env.VUE_APP_BASE_API, - // 超时 - timeout: 10000 -}) - -// request拦截器 -service.interceptors.request.use(config => { - // 是否需要设置 token - const isToken = (config.headers || {}).isToken === false - // 是否需要防止数据重复提交 - const isRepeatSubmit = (config.headers || {}).repeatSubmit === false - if (getToken() && !isToken) { - config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 - } - // get请求映射params参数 - if (config.method === 'get' && config.params) { - let url = config.url + '?' + tansParams(config.params); - url = url.slice(0, -1); - config.params = {}; - config.url = url; - } - if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) { - const requestObj = { - url: config.url, - data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data, - time: new Date().getTime() - } - const sessionObj = cache.session.getJSON('sessionObj') - if (sessionObj === undefined || sessionObj === null || sessionObj === '') { - cache.session.setJSON('sessionObj', requestObj) - } else { - const s_url = sessionObj.url; // 请求地址 - const s_data = sessionObj.data; // 请求数据 - const s_time = sessionObj.time; // 请求时间 - const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交 - if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) { - const message = '数据正在处理,请勿重复提交'; - console.warn(`[${s_url}]: ` + message) - return Promise.reject(new Error(message)) - } else { - cache.session.setJSON('sessionObj', requestObj) - } - } - } - return config -}, error => { - console.log(error) - Promise.reject(error) -}) - -// 响应拦截器 -service.interceptors.response.use(res => { - // 未设置状态码则默认成功状态 - const code = res.data.code || 200; - // 获取错误信息 - const msg = errorCode[code] || res.data.msg || errorCode['default'] - // 二进制数据则直接返回 - if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') { - return res.data - } - if (code === 401) { - if (!isRelogin.show) { - isRelogin.show = true; - MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => { - isRelogin.show = false; - store.dispatch('LogOut').then(() => { - location.href = '/index'; - }) - }).catch(() => { - isRelogin.show = false; - }); - } - return Promise.reject('无效的会话,或者会话已过期,请重新登录。') - }else if (code === 1401) { - // if (!isRelogin.show) { - // isRelogin.show = true; - // MessageBox.confirm('Token已过期,需要重新授权', '系统提示', { confirmButtonText: '重新授权', cancelButtonText: '取消', type: 'warning' }).then(() => { - // isRelogin.show = false; - // // store.dispatch('LogOut').then(() => { - // location.href = 'http://taobao.com';/taoapi2/tao_oauth - // // }) - // }).catch(() => { - // isRelogin.show = false; - // }); - // } - // return Promise.reject('无效的会话,或者会话已过期,请重新登录。') - return res.data - } else if (code === 500) { - Message({ message: msg, type: 'error' }) - return Promise.reject(new Error(msg)) - } else if (code === 601) { - Message({ message: msg, type: 'warning' }) - return Promise.reject('error') - } else if (code !== 200) { - Notification.error({ title: msg }) - return Promise.reject('error') - } else { - return res.data - } - }, - error => { - console.log('err' + error) - let { message } = error; - if (message == "Network Error") { - message = "后端接口连接异常"; - } else if (message.includes("timeout")) { - message = "系统接口请求超时"; - } else if (message.includes("Request failed with status code")) { - message = "系统接口" + message.substr(message.length - 3) + "异常"; - } - Message({ message: message, type: 'error', duration: 5 * 1000 }) - return Promise.reject(error) - } -) - -// 通用下载方法 -export function download(url, params, filename, config) { - downloadLoadingInstance = Loading.service({ text: "正在下载数据,请稍候", spinner: "el-icon-loading", background: "rgba(0, 0, 0, 0.7)", }) - return service.post(url, params, { - transformRequest: [(params) => { return tansParams(params) }], - headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, - responseType: 'blob', - ...config - }).then(async (data) => { - const isBlob = blobValidate(data); - if (isBlob) { - const blob = new Blob([data]) - saveAs(blob, filename) - } else { - const resText = await data.text(); - const rspObj = JSON.parse(resText); - const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'] - Message.error(errMsg); - } - downloadLoadingInstance.close(); - }).catch((r) => { - console.error(r) - Message.error('下载文件出现错误,请联系管理员!') - downloadLoadingInstance.close(); - }) -} - -export default service diff --git a/oms-vue/src/utils/scroll-to.js b/oms-vue/src/utils/scroll-to.js deleted file mode 100644 index c5d8e04e..00000000 --- a/oms-vue/src/utils/scroll-to.js +++ /dev/null @@ -1,58 +0,0 @@ -Math.easeInOutQuad = function(t, b, c, d) { - t /= d / 2 - if (t < 1) { - return c / 2 * t * t + b - } - t-- - return -c / 2 * (t * (t - 2) - 1) + b -} - -// requestAnimationFrame for Smart Animating http://goo.gl/sx5sts -var requestAnimFrame = (function() { - return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function(callback) { window.setTimeout(callback, 1000 / 60) } -})() - -/** - * Because it's so fucking difficult to detect the scrolling element, just move them all - * @param {number} amount - */ -function move(amount) { - document.documentElement.scrollTop = amount - document.body.parentNode.scrollTop = amount - document.body.scrollTop = amount -} - -function position() { - return document.documentElement.scrollTop || document.body.parentNode.scrollTop || document.body.scrollTop -} - -/** - * @param {number} to - * @param {number} duration - * @param {Function} callback - */ -export function scrollTo(to, duration, callback) { - const start = position() - const change = to - start - const increment = 20 - let currentTime = 0 - duration = (typeof (duration) === 'undefined') ? 500 : duration - var animateScroll = function() { - // increment the time - currentTime += increment - // find the value with the quadratic in-out easing function - var val = Math.easeInOutQuad(currentTime, start, change, duration) - // move the document.body - move(val) - // do the animation unless its over - if (currentTime < duration) { - requestAnimFrame(animateScroll) - } else { - if (callback && typeof (callback) === 'function') { - // the animation is done so lets callback - callback() - } - } - } - animateScroll() -} diff --git a/oms-vue/src/utils/validate.js b/oms-vue/src/utils/validate.js deleted file mode 100644 index adfa2542..00000000 --- a/oms-vue/src/utils/validate.js +++ /dev/null @@ -1,83 +0,0 @@ -/** - * @param {string} path - * @returns {Boolean} - */ -export function isExternal(path) { - return /^(https?:|mailto:|tel:)/.test(path) -} - -/** - * @param {string} str - * @returns {Boolean} - */ -export function validUsername(str) { - const valid_map = ['admin', 'editor'] - return valid_map.indexOf(str.trim()) >= 0 -} - -/** - * @param {string} url - * @returns {Boolean} - */ -export function validURL(url) { - const reg = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/ - return reg.test(url) -} - -/** - * @param {string} str - * @returns {Boolean} - */ -export function validLowerCase(str) { - const reg = /^[a-z]+$/ - return reg.test(str) -} - -/** - * @param {string} str - * @returns {Boolean} - */ -export function validUpperCase(str) { - const reg = /^[A-Z]+$/ - return reg.test(str) -} - -/** - * @param {string} str - * @returns {Boolean} - */ -export function validAlphabets(str) { - const reg = /^[A-Za-z]+$/ - return reg.test(str) -} - -/** - * @param {string} email - * @returns {Boolean} - */ -export function validEmail(email) { - const reg = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ - return reg.test(email) -} - -/** - * @param {string} str - * @returns {Boolean} - */ -export function isString(str) { - if (typeof str === 'string' || str instanceof String) { - return true - } - return false -} - -/** - * @param {Array} arg - * @returns {Boolean} - */ -export function isArray(arg) { - if (typeof Array.isArray === 'undefined') { - return Object.prototype.toString.call(arg) === '[object Array]' - } - return Array.isArray(arg) -} diff --git a/oms-vue/src/utils/zhijian.js b/oms-vue/src/utils/zhijian.js deleted file mode 100644 index 8d7cafc7..00000000 --- a/oms-vue/src/utils/zhijian.js +++ /dev/null @@ -1,233 +0,0 @@ - - -/** - * 通用js方法封装处理 - * Copyright (c) 2023 zhijian - */ - -// 日期格式化 -export function parseTime(time, pattern) { - if (arguments.length === 0 || !time) { - return null - } - const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}' - let date - if (typeof time === 'object') { - date = time - } else { - if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) { - time = parseInt(time) - } else if (typeof time === 'string') { - time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.[\d]{3}/gm), ''); - } - if ((typeof time === 'number') && (time.toString().length === 10)) { - time = time * 1000 - } - date = new Date(time) - } - const formatObj = { - y: date.getFullYear(), - m: date.getMonth() + 1, - d: date.getDate(), - h: date.getHours(), - i: date.getMinutes(), - s: date.getSeconds(), - a: date.getDay() - } - const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => { - let value = formatObj[key] - // Note: getDay() returns 0 on Sunday - if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] } - if (result.length > 0 && value < 10) { - value = '0' + value - } - return value || 0 - }) - return time_str -} - -// 表单重置 -export function resetForm(refName) { - if (this.$refs[refName]) { - this.$refs[refName].resetFields(); - } -} - -// 添加日期范围 -export function addDateRange(params, dateRange, propName) { - let search = params; - search.params = typeof (search.params) === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {}; - dateRange = Array.isArray(dateRange) ? dateRange : []; - if (typeof (propName) === 'undefined') { - search.params['beginTime'] = dateRange[0]; - search.params['endTime'] = dateRange[1]; - } else { - search.params['begin' + propName] = dateRange[0]; - search.params['end' + propName] = dateRange[1]; - } - return search; -} - -// 回显数据字典 -export function selectDictLabel(datas, value) { - if (value === undefined) { - return ""; - } - var actions = []; - Object.keys(datas).some((key) => { - if (datas[key].value == ('' + value)) { - actions.push(datas[key].label); - return true; - } - }) - if (actions.length === 0) { - actions.push(value); - } - return actions.join(''); -} - -// 回显数据字典(字符串、数组) -export function selectDictLabels(datas, value, separator) { - if (value === undefined || value.length ===0) { - return ""; - } - if (Array.isArray(value)) { - value = value.join(","); - } - var actions = []; - var currentSeparator = undefined === separator ? "," : separator; - var temp = value.split(currentSeparator); - Object.keys(value.split(currentSeparator)).some((val) => { - var match = false; - Object.keys(datas).some((key) => { - if (datas[key].value == ('' + temp[val])) { - actions.push(datas[key].label + currentSeparator); - match = true; - } - }) - if (!match) { - actions.push(temp[val] + currentSeparator); - } - }) - return actions.join('').substring(0, actions.join('').length - 1); -} - -// 字符串格式化(%s ) -export function sprintf(str) { - var args = arguments, flag = true, i = 1; - str = str.replace(/%s/g, function () { - var arg = args[i++]; - if (typeof arg === 'undefined') { - flag = false; - return ''; - } - return arg; - }); - return flag ? str : ''; -} - -// 转换字符串,undefined,null等转化为"" -export function parseStrEmpty(str) { - if (!str || str == "undefined" || str == "null") { - return ""; - } - return str; -} - -// 数据合并 -export function mergeRecursive(source, target) { - for (var p in target) { - try { - if (target[p].constructor == Object) { - source[p] = mergeRecursive(source[p], target[p]); - } else { - source[p] = target[p]; - } - } catch (e) { - source[p] = target[p]; - } - } - return source; -}; - -/** - * 构造树型结构数据 - * @param {*} data 数据源 - * @param {*} id id字段 默认 'id' - * @param {*} parentId 父节点字段 默认 'parentId' - * @param {*} children 孩子节点字段 默认 'children' - */ -export function handleTree(data, id, parentId, children) { - let config = { - id: id || 'id', - parentId: parentId || 'parentId', - childrenList: children || 'children' - }; - - var childrenListMap = {}; - var nodeIds = {}; - var tree = []; - - for (let d of data) { - let parentId = d[config.parentId]; - if (childrenListMap[parentId] == null) { - childrenListMap[parentId] = []; - } - nodeIds[d[config.id]] = d; - childrenListMap[parentId].push(d); - } - - for (let d of data) { - let parentId = d[config.parentId]; - if (nodeIds[parentId] == null) { - tree.push(d); - } - } - - for (let t of tree) { - adaptToChildrenList(t); - } - - function adaptToChildrenList(o) { - if (childrenListMap[o[config.id]] !== null) { - o[config.childrenList] = childrenListMap[o[config.id]]; - } - if (o[config.childrenList]) { - for (let c of o[config.childrenList]) { - adaptToChildrenList(c); - } - } - } - return tree; -} - -/** -* 参数处理 -* @param {*} params 参数 -*/ -export function tansParams(params) { - let result = '' - for (const propName of Object.keys(params)) { - const value = params[propName]; - var part = encodeURIComponent(propName) + "="; - if (value !== null && value !== "" && typeof (value) !== "undefined") { - if (typeof value === 'object') { - for (const key of Object.keys(value)) { - if (value[key] !== null && value[key] !== "" && typeof (value[key]) !== 'undefined') { - let params = propName + '[' + key + ']'; - var subPart = encodeURIComponent(params) + "="; - result += subPart + encodeURIComponent(value[key]) + "&"; - } - } - } else { - result += part + encodeURIComponent(value) + "&"; - } - } - } - return result -} - -// 验证是否为blob格式 -export function blobValidate(data) { - return data.type !== 'application/json' -} diff --git a/oms-vue/src/views/bill/orderShipCost.vue b/oms-vue/src/views/bill/orderShipCost.vue deleted file mode 100644 index 84626aab..00000000 --- a/oms-vue/src/views/bill/orderShipCost.vue +++ /dev/null @@ -1,332 +0,0 @@ - - - diff --git a/oms-vue/src/views/components/icons/element-icons.js b/oms-vue/src/views/components/icons/element-icons.js deleted file mode 100644 index 9ea4d63f..00000000 --- a/oms-vue/src/views/components/icons/element-icons.js +++ /dev/null @@ -1,3 +0,0 @@ -const elementIcons = ['platform-eleme', 'eleme', 'delete-solid', 'delete', 's-tools', 'setting', 'user-solid', 'user', 'phone', 'phone-outline', 'more', 'more-outline', 'star-on', 'star-off', 's-goods', 'goods', 'warning', 'warning-outline', 'question', 'info', 'remove', 'circle-plus', 'success', 'error', 'zoom-in', 'zoom-out', 'remove-outline', 'circle-plus-outline', 'circle-check', 'circle-close', 's-help', 'help', 'minus', 'plus', 'check', 'close', 'picture', 'picture-outline', 'picture-outline-round', 'upload', 'upload2', 'download', 'camera-solid', 'camera', 'video-camera-solid', 'video-camera', 'message-solid', 'bell', 's-cooperation', 's-order', 's-platform', 's-fold', 's-unfold', 's-operation', 's-promotion', 's-home', 's-release', 's-ticket', 's-management', 's-open', 's-shop', 's-marketing', 's-flag', 's-comment', 's-finance', 's-claim', 's-custom', 's-opportunity', 's-data', 's-check', 's-grid', 'menu', 'share', 'd-caret', 'caret-left', 'caret-right', 'caret-bottom', 'caret-top', 'bottom-left', 'bottom-right', 'back', 'right', 'bottom', 'top', 'top-left', 'top-right', 'arrow-left', 'arrow-right', 'arrow-down', 'arrow-up', 'd-arrow-left', 'd-arrow-right', 'video-pause', 'video-play', 'refresh', 'refresh-right', 'refresh-left', 'finished', 'sort', 'sort-up', 'sort-down', 'rank', 'loading', 'view', 'c-scale-to-original', 'date', 'edit', 'edit-outline', 'folder', 'folder-opened', 'folder-add', 'folder-remove', 'folder-delete', 'folder-checked', 'tickets', 'document-remove', 'document-delete', 'document-copy', 'document-checked', 'document', 'document-add', 'printer', 'paperclip', 'takeaway-box', 'search', 'monitor', 'attract', 'mobile', 'scissors', 'umbrella', 'headset', 'brush', 'mouse', 'coordinate', 'magic-stick', 'reading', 'data-line', 'data-board', 'pie-chart', 'data-analysis', 'collection-tag', 'film', 'suitcase', 'suitcase-1', 'receiving', 'collection', 'files', 'notebook-1', 'notebook-2', 'toilet-paper', 'office-building', 'school', 'table-lamp', 'house', 'no-smoking', 'smoking', 'shopping-cart-full', 'shopping-cart-1', 'shopping-cart-2', 'shopping-bag-1', 'shopping-bag-2', 'sold-out', 'sell', 'present', 'box', 'bank-card', 'money', 'coin', 'wallet', 'discount', 'price-tag', 'news', 'guide', 'male', 'female', 'thumb', 'cpu', 'link', 'connection', 'open', 'turn-off', 'set-up', 'chat-round', 'chat-line-round', 'chat-square', 'chat-dot-round', 'chat-dot-square', 'chat-line-square', 'message', 'postcard', 'position', 'turn-off-microphone', 'microphone', 'close-notification', 'bangzhu', 'time', 'odometer', 'crop', 'aim', 'switch-button', 'full-screen', 'copy-document', 'mic', 'stopwatch', 'medal-1', 'medal', 'trophy', 'trophy-1', 'first-aid-kit', 'discover', 'place', 'location', 'location-outline', 'location-information', 'add-location', 'delete-location', 'map-location', 'alarm-clock', 'timer', 'watch-1', 'watch', 'lock', 'unlock', 'key', 'service', 'mobile-phone', 'bicycle', 'truck', 'ship', 'basketball', 'football', 'soccer', 'baseball', 'wind-power', 'light-rain', 'lightning', 'heavy-rain', 'sunrise', 'sunrise-1', 'sunset', 'sunny', 'cloudy', 'partly-cloudy', 'cloudy-and-sunny', 'moon', 'moon-night', 'dish', 'dish-1', 'food', 'chicken', 'fork-spoon', 'knife-fork', 'burger', 'tableware', 'sugar', 'dessert', 'ice-cream', 'hot-water', 'water-cup', 'coffee-cup', 'cold-drink', 'goblet', 'goblet-full', 'goblet-square', 'goblet-square-full', 'refrigerator', 'grape', 'watermelon', 'cherry', 'apple', 'pear', 'orange', 'coffee', 'ice-tea', 'ice-drink', 'milk-tea', 'potato-strips', 'lollipop', 'ice-cream-square', 'ice-cream-round'] - -export default elementIcons diff --git a/oms-vue/src/views/components/icons/index.vue b/oms-vue/src/views/components/icons/index.vue deleted file mode 100644 index d3c9a719..00000000 --- a/oms-vue/src/views/components/icons/index.vue +++ /dev/null @@ -1,87 +0,0 @@ - - - - - diff --git a/oms-vue/src/views/components/icons/svg-icons.js b/oms-vue/src/views/components/icons/svg-icons.js deleted file mode 100644 index 724cd8e9..00000000 --- a/oms-vue/src/views/components/icons/svg-icons.js +++ /dev/null @@ -1,10 +0,0 @@ -const req = require.context('../../../assets/icons/svg', false, /\.svg$/) -const requireAll = requireContext => requireContext.keys() - -const re = /\.\/(.*)\.svg/ - -const svgIcons = requireAll(req).map(i => { - return i.match(re)[1] -}) - -export default svgIcons diff --git a/oms-vue/src/views/dashboard/BarChart.vue b/oms-vue/src/views/dashboard/BarChart.vue deleted file mode 100644 index cd33d2d2..00000000 --- a/oms-vue/src/views/dashboard/BarChart.vue +++ /dev/null @@ -1,102 +0,0 @@ - - - diff --git a/oms-vue/src/views/dashboard/LineChart.vue b/oms-vue/src/views/dashboard/LineChart.vue deleted file mode 100644 index ddd1063d..00000000 --- a/oms-vue/src/views/dashboard/LineChart.vue +++ /dev/null @@ -1,135 +0,0 @@ - - - diff --git a/oms-vue/src/views/dashboard/PanelGroup.vue b/oms-vue/src/views/dashboard/PanelGroup.vue deleted file mode 100644 index d5b2332a..00000000 --- a/oms-vue/src/views/dashboard/PanelGroup.vue +++ /dev/null @@ -1,182 +0,0 @@ - - - - - diff --git a/oms-vue/src/views/dashboard/PieChart.vue b/oms-vue/src/views/dashboard/PieChart.vue deleted file mode 100644 index c3600577..00000000 --- a/oms-vue/src/views/dashboard/PieChart.vue +++ /dev/null @@ -1,79 +0,0 @@ - - - diff --git a/oms-vue/src/views/dashboard/RaddarChart.vue b/oms-vue/src/views/dashboard/RaddarChart.vue deleted file mode 100644 index b1790ca8..00000000 --- a/oms-vue/src/views/dashboard/RaddarChart.vue +++ /dev/null @@ -1,116 +0,0 @@ - - - diff --git a/oms-vue/src/views/dashboard/mixins/resize.js b/oms-vue/src/views/dashboard/mixins/resize.js deleted file mode 100644 index b1e76e94..00000000 --- a/oms-vue/src/views/dashboard/mixins/resize.js +++ /dev/null @@ -1,56 +0,0 @@ -import { debounce } from '@/utils' - -export default { - data() { - return { - $_sidebarElm: null, - $_resizeHandler: null - } - }, - mounted() { - this.initListener() - }, - activated() { - if (!this.$_resizeHandler) { - // avoid duplication init - this.initListener() - } - - // when keep-alive chart activated, auto resize - this.resize() - }, - beforeDestroy() { - this.destroyListener() - }, - deactivated() { - this.destroyListener() - }, - methods: { - // use $_ for mixins properties - // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential - $_sidebarResizeHandler(e) { - if (e.propertyName === 'width') { - this.$_resizeHandler() - } - }, - initListener() { - this.$_resizeHandler = debounce(() => { - this.resize() - }, 100) - window.addEventListener('resize', this.$_resizeHandler) - - this.$_sidebarElm = document.getElementsByClassName('sidebar-container')[0] - this.$_sidebarElm && this.$_sidebarElm.addEventListener('transitionend', this.$_sidebarResizeHandler) - }, - destroyListener() { - window.removeEventListener('resize', this.$_resizeHandler) - this.$_resizeHandler = null - - this.$_sidebarElm && this.$_sidebarElm.removeEventListener('transitionend', this.$_sidebarResizeHandler) - }, - resize() { - const { chart } = this - chart && chart.resize() - } - } -} diff --git a/oms-vue/src/views/data/goods/recommend_list.vue b/oms-vue/src/views/data/goods/recommend_list.vue deleted file mode 100644 index 42cab770..00000000 --- a/oms-vue/src/views/data/goods/recommend_list.vue +++ /dev/null @@ -1,13 +0,0 @@ - - - - - diff --git a/oms-vue/src/views/data/goods/sale_hot_list.vue b/oms-vue/src/views/data/goods/sale_hot_list.vue deleted file mode 100644 index ddc5a13e..00000000 --- a/oms-vue/src/views/data/goods/sale_hot_list.vue +++ /dev/null @@ -1,13 +0,0 @@ - - - - - diff --git a/oms-vue/src/views/data/keyword/hot_keyword.vue b/oms-vue/src/views/data/keyword/hot_keyword.vue deleted file mode 100644 index 4f357879..00000000 --- a/oms-vue/src/views/data/keyword/hot_keyword.vue +++ /dev/null @@ -1,179 +0,0 @@ - - diff --git a/oms-vue/src/views/data/market/info.vue b/oms-vue/src/views/data/market/info.vue deleted file mode 100644 index abfd788f..00000000 --- a/oms-vue/src/views/data/market/info.vue +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/oms-vue/src/views/dou/order/index.vue b/oms-vue/src/views/dou/order/index.vue deleted file mode 100644 index e05e1880..00000000 --- a/oms-vue/src/views/dou/order/index.vue +++ /dev/null @@ -1,1101 +0,0 @@ - - - diff --git a/oms-vue/src/views/dou/refund/index.vue b/oms-vue/src/views/dou/refund/index.vue deleted file mode 100644 index a4eddaeb..00000000 --- a/oms-vue/src/views/dou/refund/index.vue +++ /dev/null @@ -1,533 +0,0 @@ - - - diff --git a/oms-vue/src/views/efm/index.vue b/oms-vue/src/views/efm/index.vue deleted file mode 100644 index 174e31de..00000000 --- a/oms-vue/src/views/efm/index.vue +++ /dev/null @@ -1,307 +0,0 @@ - - \ No newline at end of file diff --git a/oms-vue/src/views/error/401.vue b/oms-vue/src/views/error/401.vue deleted file mode 100644 index 448b6ecd..00000000 --- a/oms-vue/src/views/error/401.vue +++ /dev/null @@ -1,88 +0,0 @@ - - - - - diff --git a/oms-vue/src/views/goods/brand/index.vue b/oms-vue/src/views/goods/brand/index.vue deleted file mode 100644 index 9920629b..00000000 --- a/oms-vue/src/views/goods/brand/index.vue +++ /dev/null @@ -1,255 +0,0 @@ - - - diff --git a/oms-vue/src/views/goods/category/categoryAttribute.vue b/oms-vue/src/views/goods/category/categoryAttribute.vue deleted file mode 100644 index 3af5591f..00000000 --- a/oms-vue/src/views/goods/category/categoryAttribute.vue +++ /dev/null @@ -1,282 +0,0 @@ - - - diff --git a/oms-vue/src/views/goods/category/categoryAttributeValue.vue b/oms-vue/src/views/goods/category/categoryAttributeValue.vue deleted file mode 100644 index eec43aff..00000000 --- a/oms-vue/src/views/goods/category/categoryAttributeValue.vue +++ /dev/null @@ -1,304 +0,0 @@ - - - diff --git a/oms-vue/src/views/goods/category/index.vue b/oms-vue/src/views/goods/category/index.vue deleted file mode 100644 index de586780..00000000 --- a/oms-vue/src/views/goods/category/index.vue +++ /dev/null @@ -1,351 +0,0 @@ - - - diff --git a/oms-vue/src/views/goods/create.vue b/oms-vue/src/views/goods/create.vue deleted file mode 100644 index 73efc5a2..00000000 --- a/oms-vue/src/views/goods/create.vue +++ /dev/null @@ -1,585 +0,0 @@ - - - - diff --git a/oms-vue/src/views/goods/goodsInventory/index.vue b/oms-vue/src/views/goods/goodsInventory/index.vue deleted file mode 100644 index f814c434..00000000 --- a/oms-vue/src/views/goods/goodsInventory/index.vue +++ /dev/null @@ -1,265 +0,0 @@ - - - diff --git a/oms-vue/src/views/goods/index.vue b/oms-vue/src/views/goods/index.vue deleted file mode 100644 index 0b1c7aea..00000000 --- a/oms-vue/src/views/goods/index.vue +++ /dev/null @@ -1,497 +0,0 @@ - - - diff --git a/oms-vue/src/views/goods/spec/index.vue b/oms-vue/src/views/goods/spec/index.vue deleted file mode 100644 index 0642d210..00000000 --- a/oms-vue/src/views/goods/spec/index.vue +++ /dev/null @@ -1,344 +0,0 @@ - - - diff --git a/oms-vue/src/views/index.vue b/oms-vue/src/views/index.vue deleted file mode 100644 index 1aa3e95f..00000000 --- a/oms-vue/src/views/index.vue +++ /dev/null @@ -1,98 +0,0 @@ - - - - - diff --git a/oms-vue/src/views/index22.vue b/oms-vue/src/views/index22.vue deleted file mode 100644 index d2d2ec63..00000000 --- a/oms-vue/src/views/index22.vue +++ /dev/null @@ -1,98 +0,0 @@ - - - - - diff --git a/oms-vue/src/views/login.vue b/oms-vue/src/views/login.vue deleted file mode 100644 index 20e0a5ec..00000000 --- a/oms-vue/src/views/login.vue +++ /dev/null @@ -1,219 +0,0 @@ - - - - - diff --git a/oms-vue/src/views/monitor/cache/index.vue b/oms-vue/src/views/monitor/cache/index.vue deleted file mode 100644 index e81da2e8..00000000 --- a/oms-vue/src/views/monitor/cache/index.vue +++ /dev/null @@ -1,144 +0,0 @@ - - - diff --git a/oms-vue/src/views/monitor/cache/list.vue b/oms-vue/src/views/monitor/cache/list.vue deleted file mode 100644 index 29a7c741..00000000 --- a/oms-vue/src/views/monitor/cache/list.vue +++ /dev/null @@ -1,241 +0,0 @@ - - - diff --git a/oms-vue/src/views/monitor/druid/index.vue b/oms-vue/src/views/monitor/druid/index.vue deleted file mode 100644 index c6ad585c..00000000 --- a/oms-vue/src/views/monitor/druid/index.vue +++ /dev/null @@ -1,15 +0,0 @@ - - diff --git a/oms-vue/src/views/monitor/file/list.vue b/oms-vue/src/views/monitor/file/list.vue deleted file mode 100644 index 62ed798f..00000000 --- a/oms-vue/src/views/monitor/file/list.vue +++ /dev/null @@ -1,66 +0,0 @@ - - - - - diff --git a/oms-vue/src/views/monitor/job/index.vue b/oms-vue/src/views/monitor/job/index.vue deleted file mode 100644 index 6365d3d7..00000000 --- a/oms-vue/src/views/monitor/job/index.vue +++ /dev/null @@ -1,513 +0,0 @@ - - - diff --git a/oms-vue/src/views/monitor/job/log.vue b/oms-vue/src/views/monitor/job/log.vue deleted file mode 100644 index 60bee1de..00000000 --- a/oms-vue/src/views/monitor/job/log.vue +++ /dev/null @@ -1,295 +0,0 @@ - - - diff --git a/oms-vue/src/views/monitor/logininfor/index.vue b/oms-vue/src/views/monitor/logininfor/index.vue deleted file mode 100644 index d6af834c..00000000 --- a/oms-vue/src/views/monitor/logininfor/index.vue +++ /dev/null @@ -1,246 +0,0 @@ - - - - diff --git a/oms-vue/src/views/monitor/online/index.vue b/oms-vue/src/views/monitor/online/index.vue deleted file mode 100644 index ad613c96..00000000 --- a/oms-vue/src/views/monitor/online/index.vue +++ /dev/null @@ -1,122 +0,0 @@ - - - - diff --git a/oms-vue/src/views/monitor/operlog/index.vue b/oms-vue/src/views/monitor/operlog/index.vue deleted file mode 100644 index 34a3ce34..00000000 --- a/oms-vue/src/views/monitor/operlog/index.vue +++ /dev/null @@ -1,313 +0,0 @@ - - - - diff --git a/oms-vue/src/views/monitor/server/index.vue b/oms-vue/src/views/monitor/server/index.vue deleted file mode 100644 index 15ffc9a6..00000000 --- a/oms-vue/src/views/monitor/server/index.vue +++ /dev/null @@ -1,207 +0,0 @@ - - - diff --git a/oms-vue/src/views/pdd/order/index.vue b/oms-vue/src/views/pdd/order/index.vue deleted file mode 100644 index 0bf87959..00000000 --- a/oms-vue/src/views/pdd/order/index.vue +++ /dev/null @@ -1,1220 +0,0 @@ - - - - diff --git a/oms-vue/src/views/pdd/refund/index.vue b/oms-vue/src/views/pdd/refund/index.vue deleted file mode 100644 index 796cfda0..00000000 --- a/oms-vue/src/views/pdd/refund/index.vue +++ /dev/null @@ -1,544 +0,0 @@ - - - diff --git a/oms-vue/src/views/redirect.vue b/oms-vue/src/views/redirect.vue deleted file mode 100644 index db4c1d66..00000000 --- a/oms-vue/src/views/redirect.vue +++ /dev/null @@ -1,12 +0,0 @@ - diff --git a/oms-vue/src/views/register.vue b/oms-vue/src/views/register.vue deleted file mode 100644 index 312dce2c..00000000 --- a/oms-vue/src/views/register.vue +++ /dev/null @@ -1,209 +0,0 @@ - - - - - diff --git a/oms-vue/src/views/sale/order/create.vue b/oms-vue/src/views/sale/order/create.vue deleted file mode 100644 index d59336cc..00000000 --- a/oms-vue/src/views/sale/order/create.vue +++ /dev/null @@ -1,391 +0,0 @@ - - - \ No newline at end of file diff --git a/oms-vue/src/views/sale/order/index.vue b/oms-vue/src/views/sale/order/index.vue deleted file mode 100644 index fe6fb3cf..00000000 --- a/oms-vue/src/views/sale/order/index.vue +++ /dev/null @@ -1,427 +0,0 @@ - - - diff --git a/oms-vue/src/views/sale/returned/index.vue b/oms-vue/src/views/sale/returned/index.vue deleted file mode 100644 index 8d8c8d0e..00000000 --- a/oms-vue/src/views/sale/returned/index.vue +++ /dev/null @@ -1,445 +0,0 @@ - - - diff --git a/oms-vue/src/views/scm/agentShipping/index.vue b/oms-vue/src/views/scm/agentShipping/index.vue deleted file mode 100644 index e0ba783d..00000000 --- a/oms-vue/src/views/scm/agentShipping/index.vue +++ /dev/null @@ -1,521 +0,0 @@ - - - diff --git a/oms-vue/src/views/scm/purchase/cost/index.vue b/oms-vue/src/views/scm/purchase/cost/index.vue deleted file mode 100644 index 6a8b6416..00000000 --- a/oms-vue/src/views/scm/purchase/cost/index.vue +++ /dev/null @@ -1,321 +0,0 @@ - - - diff --git a/oms-vue/src/views/scm/purchase/order/create.vue b/oms-vue/src/views/scm/purchase/order/create.vue deleted file mode 100644 index 8d257876..00000000 --- a/oms-vue/src/views/scm/purchase/order/create.vue +++ /dev/null @@ -1,319 +0,0 @@ - - - diff --git a/oms-vue/src/views/scm/purchase/order/detail.vue b/oms-vue/src/views/scm/purchase/order/detail.vue deleted file mode 100644 index 1362f1a4..00000000 --- a/oms-vue/src/views/scm/purchase/order/detail.vue +++ /dev/null @@ -1,124 +0,0 @@ - - \ No newline at end of file diff --git a/oms-vue/src/views/scm/purchase/order/index.vue b/oms-vue/src/views/scm/purchase/order/index.vue deleted file mode 100644 index 5e64dcfe..00000000 --- a/oms-vue/src/views/scm/purchase/order/index.vue +++ /dev/null @@ -1,506 +0,0 @@ - - - diff --git a/oms-vue/src/views/scm/purchase/order/item.vue b/oms-vue/src/views/scm/purchase/order/item.vue deleted file mode 100644 index 0ae47f7d..00000000 --- a/oms-vue/src/views/scm/purchase/order/item.vue +++ /dev/null @@ -1,467 +0,0 @@ - - - diff --git a/oms-vue/src/views/scm/purchase/ship/create_stock_in_entry.vue b/oms-vue/src/views/scm/purchase/ship/create_stock_in_entry.vue deleted file mode 100644 index 8e3041c1..00000000 --- a/oms-vue/src/views/scm/purchase/ship/create_stock_in_entry.vue +++ /dev/null @@ -1,204 +0,0 @@ - - \ No newline at end of file diff --git a/oms-vue/src/views/scm/purchase/ship/index.vue b/oms-vue/src/views/scm/purchase/ship/index.vue deleted file mode 100644 index 6090f3ea..00000000 --- a/oms-vue/src/views/scm/purchase/ship/index.vue +++ /dev/null @@ -1,431 +0,0 @@ - - - diff --git a/oms-vue/src/views/scm/supplier/index.vue b/oms-vue/src/views/scm/supplier/index.vue deleted file mode 100644 index 59cfcb8f..00000000 --- a/oms-vue/src/views/scm/supplier/index.vue +++ /dev/null @@ -1,425 +0,0 @@ - - - diff --git a/oms-vue/src/views/shop/goods/index.vue b/oms-vue/src/views/shop/goods/index.vue deleted file mode 100644 index 67c767a1..00000000 --- a/oms-vue/src/views/shop/goods/index.vue +++ /dev/null @@ -1,508 +0,0 @@ - - - diff --git a/oms-vue/src/views/shop/index.vue b/oms-vue/src/views/shop/index.vue deleted file mode 100644 index 3c02f44b..00000000 --- a/oms-vue/src/views/shop/index.vue +++ /dev/null @@ -1,395 +0,0 @@ - - - diff --git a/oms-vue/src/views/system/config/index.vue b/oms-vue/src/views/system/config/index.vue deleted file mode 100644 index 3ab81fc2..00000000 --- a/oms-vue/src/views/system/config/index.vue +++ /dev/null @@ -1,343 +0,0 @@ - - - diff --git a/oms-vue/src/views/system/dept/index.vue b/oms-vue/src/views/system/dept/index.vue deleted file mode 100644 index e502b4ea..00000000 --- a/oms-vue/src/views/system/dept/index.vue +++ /dev/null @@ -1,340 +0,0 @@ - - - diff --git a/oms-vue/src/views/system/dict/data.vue b/oms-vue/src/views/system/dict/data.vue deleted file mode 100644 index 324bb640..00000000 --- a/oms-vue/src/views/system/dict/data.vue +++ /dev/null @@ -1,402 +0,0 @@ - - - \ No newline at end of file diff --git a/oms-vue/src/views/system/dict/index.vue b/oms-vue/src/views/system/dict/index.vue deleted file mode 100644 index 6ca54571..00000000 --- a/oms-vue/src/views/system/dict/index.vue +++ /dev/null @@ -1,347 +0,0 @@ - - - \ No newline at end of file diff --git a/oms-vue/src/views/system/menu/index.vue b/oms-vue/src/views/system/menu/index.vue deleted file mode 100644 index 2a83f9e9..00000000 --- a/oms-vue/src/views/system/menu/index.vue +++ /dev/null @@ -1,452 +0,0 @@ - - - diff --git a/oms-vue/src/views/system/notice/index.vue b/oms-vue/src/views/system/notice/index.vue deleted file mode 100644 index 7982b545..00000000 --- a/oms-vue/src/views/system/notice/index.vue +++ /dev/null @@ -1,312 +0,0 @@ - - - diff --git a/oms-vue/src/views/system/post/index.vue b/oms-vue/src/views/system/post/index.vue deleted file mode 100644 index 444bf634..00000000 --- a/oms-vue/src/views/system/post/index.vue +++ /dev/null @@ -1,309 +0,0 @@ - - - diff --git a/oms-vue/src/views/system/role/authUser.vue b/oms-vue/src/views/system/role/authUser.vue deleted file mode 100644 index 147aa33e..00000000 --- a/oms-vue/src/views/system/role/authUser.vue +++ /dev/null @@ -1,199 +0,0 @@ - - - \ No newline at end of file diff --git a/oms-vue/src/views/system/role/index.vue b/oms-vue/src/views/system/role/index.vue deleted file mode 100644 index fb3b5ef0..00000000 --- a/oms-vue/src/views/system/role/index.vue +++ /dev/null @@ -1,605 +0,0 @@ - - - \ No newline at end of file diff --git a/oms-vue/src/views/system/role/selectUser.vue b/oms-vue/src/views/system/role/selectUser.vue deleted file mode 100644 index b2b072f9..00000000 --- a/oms-vue/src/views/system/role/selectUser.vue +++ /dev/null @@ -1,138 +0,0 @@ - - - diff --git a/oms-vue/src/views/system/user/authRole.vue b/oms-vue/src/views/system/user/authRole.vue deleted file mode 100644 index ab5e72fc..00000000 --- a/oms-vue/src/views/system/user/authRole.vue +++ /dev/null @@ -1,117 +0,0 @@ - - - \ No newline at end of file diff --git a/oms-vue/src/views/system/user/index.vue b/oms-vue/src/views/system/user/index.vue deleted file mode 100644 index ae87fe49..00000000 --- a/oms-vue/src/views/system/user/index.vue +++ /dev/null @@ -1,670 +0,0 @@ - - - \ No newline at end of file diff --git a/oms-vue/src/views/system/user/profile/index.vue b/oms-vue/src/views/system/user/profile/index.vue deleted file mode 100644 index ad530f9a..00000000 --- a/oms-vue/src/views/system/user/profile/index.vue +++ /dev/null @@ -1,91 +0,0 @@ - - - diff --git a/oms-vue/src/views/system/user/profile/resetPwd.vue b/oms-vue/src/views/system/user/profile/resetPwd.vue deleted file mode 100644 index 64e8f8c4..00000000 --- a/oms-vue/src/views/system/user/profile/resetPwd.vue +++ /dev/null @@ -1,68 +0,0 @@ - - - diff --git a/oms-vue/src/views/system/user/profile/userAvatar.vue b/oms-vue/src/views/system/user/profile/userAvatar.vue deleted file mode 100644 index 70d8487f..00000000 --- a/oms-vue/src/views/system/user/profile/userAvatar.vue +++ /dev/null @@ -1,187 +0,0 @@ - - - - diff --git a/oms-vue/src/views/system/user/profile/userInfo.vue b/oms-vue/src/views/system/user/profile/userInfo.vue deleted file mode 100644 index c09a20b4..00000000 --- a/oms-vue/src/views/system/user/profile/userInfo.vue +++ /dev/null @@ -1,75 +0,0 @@ - - - diff --git a/oms-vue/src/views/tao/order/index.vue b/oms-vue/src/views/tao/order/index.vue deleted file mode 100644 index 6830c106..00000000 --- a/oms-vue/src/views/tao/order/index.vue +++ /dev/null @@ -1,1046 +0,0 @@ - - - diff --git a/oms-vue/src/views/tao/orderAddress/index.vue b/oms-vue/src/views/tao/orderAddress/index.vue deleted file mode 100644 index adf1fd85..00000000 --- a/oms-vue/src/views/tao/orderAddress/index.vue +++ /dev/null @@ -1,374 +0,0 @@ - - - diff --git a/oms-vue/src/views/tao/refund/index.vue b/oms-vue/src/views/tao/refund/index.vue deleted file mode 100644 index 580f084a..00000000 --- a/oms-vue/src/views/tao/refund/index.vue +++ /dev/null @@ -1,461 +0,0 @@ - - - diff --git a/oms-vue/src/views/tool/gen/basicInfoForm.vue b/oms-vue/src/views/tool/gen/basicInfoForm.vue deleted file mode 100644 index 70295298..00000000 --- a/oms-vue/src/views/tool/gen/basicInfoForm.vue +++ /dev/null @@ -1,60 +0,0 @@ - - - diff --git a/oms-vue/src/views/tool/gen/editTable.vue b/oms-vue/src/views/tool/gen/editTable.vue deleted file mode 100644 index 951497a7..00000000 --- a/oms-vue/src/views/tool/gen/editTable.vue +++ /dev/null @@ -1,234 +0,0 @@ - - - diff --git a/oms-vue/src/views/tool/gen/genInfoForm.vue b/oms-vue/src/views/tool/gen/genInfoForm.vue deleted file mode 100644 index 2fb107de..00000000 --- a/oms-vue/src/views/tool/gen/genInfoForm.vue +++ /dev/null @@ -1,299 +0,0 @@ - - - diff --git a/oms-vue/src/views/tool/gen/importTable.vue b/oms-vue/src/views/tool/gen/importTable.vue deleted file mode 100644 index 3ea9532b..00000000 --- a/oms-vue/src/views/tool/gen/importTable.vue +++ /dev/null @@ -1,120 +0,0 @@ - - - diff --git a/oms-vue/src/views/tool/gen/index.vue b/oms-vue/src/views/tool/gen/index.vue deleted file mode 100644 index ccb1b11b..00000000 --- a/oms-vue/src/views/tool/gen/index.vue +++ /dev/null @@ -1,337 +0,0 @@ - - - diff --git a/oms-vue/src/views/tool/swagger/index.vue b/oms-vue/src/views/tool/swagger/index.vue deleted file mode 100644 index b8becc67..00000000 --- a/oms-vue/src/views/tool/swagger/index.vue +++ /dev/null @@ -1,15 +0,0 @@ - - diff --git a/oms-vue/src/views/wms/location/index.vue b/oms-vue/src/views/wms/location/index.vue deleted file mode 100644 index 0aff0dea..00000000 --- a/oms-vue/src/views/wms/location/index.vue +++ /dev/null @@ -1,331 +0,0 @@ - - - diff --git a/oms-vue/src/views/wms/orderShipping/logistics.vue b/oms-vue/src/views/wms/orderShipping/logistics.vue deleted file mode 100644 index d3c0188a..00000000 --- a/oms-vue/src/views/wms/orderShipping/logistics.vue +++ /dev/null @@ -1,324 +0,0 @@ - - - diff --git a/oms-vue/src/views/wms/orderShipping/shipping.vue b/oms-vue/src/views/wms/orderShipping/shipping.vue deleted file mode 100644 index 35e7e29d..00000000 --- a/oms-vue/src/views/wms/orderShipping/shipping.vue +++ /dev/null @@ -1,567 +0,0 @@ - - - diff --git a/oms-vue/src/views/wms/orderShipping/stockOut.vue b/oms-vue/src/views/wms/orderShipping/stockOut.vue deleted file mode 100644 index 12dbcb20..00000000 --- a/oms-vue/src/views/wms/orderShipping/stockOut.vue +++ /dev/null @@ -1,413 +0,0 @@ - - - diff --git a/oms-vue/src/views/wms/orderShipping/stocking.vue b/oms-vue/src/views/wms/orderShipping/stocking.vue deleted file mode 100644 index 4360c228..00000000 --- a/oms-vue/src/views/wms/orderShipping/stocking.vue +++ /dev/null @@ -1,458 +0,0 @@ - - - diff --git a/oms-vue/src/views/wms/stockInEntry/index.vue b/oms-vue/src/views/wms/stockInEntry/index.vue deleted file mode 100644 index b8c9ed2a..00000000 --- a/oms-vue/src/views/wms/stockInEntry/index.vue +++ /dev/null @@ -1,424 +0,0 @@ - - - diff --git a/oms-vue/src/views/wms/stockOutEntry/index.vue b/oms-vue/src/views/wms/stockOutEntry/index.vue deleted file mode 100644 index 12dbcb20..00000000 --- a/oms-vue/src/views/wms/stockOutEntry/index.vue +++ /dev/null @@ -1,413 +0,0 @@ - - - diff --git a/oms-vue/src/views/xhs/order/index.vue b/oms-vue/src/views/xhs/order/index.vue deleted file mode 100644 index 307ffc64..00000000 --- a/oms-vue/src/views/xhs/order/index.vue +++ /dev/null @@ -1,973 +0,0 @@ - - - diff --git a/oms-vue/src/views/xhs/orderReceiver/index.vue b/oms-vue/src/views/xhs/orderReceiver/index.vue deleted file mode 100644 index bdc9fd6e..00000000 --- a/oms-vue/src/views/xhs/orderReceiver/index.vue +++ /dev/null @@ -1,346 +0,0 @@ - - - diff --git a/oms-vue/src/views/xhs/refund/index.vue b/oms-vue/src/views/xhs/refund/index.vue deleted file mode 100644 index a2ea29eb..00000000 --- a/oms-vue/src/views/xhs/refund/index.vue +++ /dev/null @@ -1,785 +0,0 @@ - - - diff --git a/oms-vue/vue.config.js b/oms-vue/vue.config.js deleted file mode 100644 index 6d98ab0b..00000000 --- a/oms-vue/vue.config.js +++ /dev/null @@ -1,134 +0,0 @@ -'use strict' -const path = require('path') - -function resolve(dir) { - return path.join(__dirname, dir) -} - -const CompressionPlugin = require('compression-webpack-plugin') - -const name = process.env.VUE_APP_TITLE || '启航电商管理系统' // 网页标题 - -const port = process.env.port || process.env.npm_config_port || 80 // 端口 - -// vue.config.js 配置说明 -//官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions -// 这里只列一部分,具体配置参考文档 -module.exports = { - // 部署生产环境和开发环境下的URL。 - // 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上 - // 如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.zhijian.vip/admin/,则设置 baseUrl 为 /admin/。 - publicPath: process.env.NODE_ENV === "production" ? "/" : "/", - // 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist) - outputDir: 'dist', - // 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下) - assetsDir: 'static', - // 是否开启eslint保存检测,有效值:ture | false | 'error' - lintOnSave: process.env.NODE_ENV === 'development', - // 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。 - productionSourceMap: false, - // webpack-dev-server 相关配置 - devServer: { - host: '0.0.0.0', - port: port, - open: true, - proxy: { - // detail: https://cli.vuejs.org/config/#devserver-proxy - [process.env.VUE_APP_BASE_API]: { - target: `http://localhost:8080`, - changeOrigin: true, - pathRewrite: { - ['^' + process.env.VUE_APP_BASE_API]: '' - } - } - }, - disableHostCheck: true - }, - css: { - loaderOptions: { - sass: { - sassOptions: { outputStyle: "expanded" } - } - } - }, - configureWebpack: { - name: name, - resolve: { - alias: { - '@': resolve('src') - } - }, - plugins: [ - // 使用gzip解压缩静态文件 - new CompressionPlugin({ - cache: false, // 不启用文件缓存 - test: /\.(js|css|html)?$/i, // 压缩文件格式 - filename: '[path].gz[query]', // 压缩后的文件名 - algorithm: 'gzip', // 使用gzip压缩 - minRatio: 0.8 // 压缩率小于1才会压缩 - }) - ], - }, - chainWebpack(config) { - config.plugins.delete('preload') // TODO: need test - config.plugins.delete('prefetch') // TODO: need test - - // set svg-sprite-loader - config.module - .rule('svg') - .exclude.add(resolve('src/assets/icons')) - .end() - config.module - .rule('icons') - .test(/\.svg$/) - .include.add(resolve('src/assets/icons')) - .end() - .use('svg-sprite-loader') - .loader('svg-sprite-loader') - .options({ - symbolId: 'icon-[name]' - }) - .end() - - config.when(process.env.NODE_ENV !== 'development', config => { - config - .plugin('ScriptExtHtmlWebpackPlugin') - .after('html') - .use('script-ext-html-webpack-plugin', [{ - // `runtime` must same as runtimeChunk name. default is `runtime` - inline: /runtime\..*\.js$/ - }]) - .end() - - config.optimization.splitChunks({ - chunks: 'all', - cacheGroups: { - libs: { - name: 'chunk-libs', - test: /[\\/]node_modules[\\/]/, - priority: 10, - chunks: 'initial' // only package third parties that are initially dependent - }, - elementUI: { - name: 'chunk-elementUI', // split elementUI into a single package - test: /[\\/]node_modules[\\/]_?element-ui(.*)/, // in order to adapt to cnpm - priority: 20 // the weight needs to be larger than libs and app or it will be packaged into libs or app - }, - commons: { - name: 'chunk-commons', - test: resolve('src/components'), // can customize your rules - minChunks: 3, // minimum common number - priority: 5, - reuseExistingChunk: true - } - } - }) - - config.optimization.runtimeChunk('single'), - { - from: path.resolve(__dirname, './public/robots.txt'), //防爬虫文件 - to: './' //到根目录下 - } - }) - } -} diff --git a/vue3/.editorconfig b/vue3/.editorconfig new file mode 100644 index 00000000..00ee2de4 --- /dev/null +++ b/vue3/.editorconfig @@ -0,0 +1,15 @@ +# http://editorconfig.org +root = true + +# 表示所有文件适用 +[*] +charset = utf-8 # 设置文件字符集为 utf-8 +end_of_line = lf # 控制换行类型(lf | cr | crlf) +indent_style = space # 缩进风格(tab | space) +indent_size = 2 # 缩进大小 +insert_final_newline = true # 始终在文件末尾插入一个新行 + +# 表示仅 md 文件适用以下规则 +[*.md] +max_line_length = off # 关闭最大行长度限制 +trim_trailing_whitespace = false # 关闭末尾空格修剪 diff --git a/vue3/.env.development b/vue3/.env.development new file mode 100644 index 00000000..9544eb57 --- /dev/null +++ b/vue3/.env.development @@ -0,0 +1,8 @@ +## 开发环境 +NODE_ENV='development' + +# 应用端口 +VITE_APP_PORT = 3000 + +# 代理前缀 +VITE_APP_BASE_API = '/dev-api' diff --git a/vue3/.env.production b/vue3/.env.production new file mode 100644 index 00000000..a2d828cb --- /dev/null +++ b/vue3/.env.production @@ -0,0 +1,6 @@ +## 生产环境 +NODE_ENV='production' + +# 代理前缀 +VITE_APP_BASE_API = '/prod-api' + diff --git a/vue3/.eslintignore b/vue3/.eslintignore new file mode 100644 index 00000000..43af40f4 --- /dev/null +++ b/vue3/.eslintignore @@ -0,0 +1,14 @@ +dist +node_modules +public +.husky +.vscode +.idea +*.sh +*.md + +src/assets + +.eslintrc.cjs +.prettierrc.cjs +.stylelintrc.cjs diff --git a/vue3/.eslintrc-auto-import.json b/vue3/.eslintrc-auto-import.json new file mode 100644 index 00000000..f4738bfc --- /dev/null +++ b/vue3/.eslintrc-auto-import.json @@ -0,0 +1,284 @@ +{ + "globals": { + "Component": true, + "ComponentPublicInstance": true, + "ComputedRef": true, + "EffectScope": true, + "ElMessage": true, + "ElMessageBox": true, + "ElNotification": true, + "InjectionKey": true, + "PropType": true, + "Ref": true, + "VNode": true, + "asyncComputed": true, + "autoResetRef": true, + "computed": true, + "computedAsync": true, + "computedEager": true, + "computedInject": true, + "computedWithControl": true, + "controlledComputed": true, + "controlledRef": true, + "createApp": true, + "createEventHook": true, + "createGlobalState": true, + "createInjectionState": true, + "createReactiveFn": true, + "createReusableTemplate": true, + "createSharedComposable": true, + "createTemplatePromise": true, + "createUnrefFn": true, + "customRef": true, + "debouncedRef": true, + "debouncedWatch": true, + "defineAsyncComponent": true, + "defineComponent": true, + "eagerComputed": true, + "effectScope": true, + "extendRef": true, + "getCurrentInstance": true, + "getCurrentScope": true, + "h": true, + "ignorableWatch": true, + "inject": true, + "isDefined": true, + "isProxy": true, + "isReactive": true, + "isReadonly": true, + "isRef": true, + "makeDestructurable": true, + "markRaw": true, + "nextTick": true, + "onActivated": true, + "onBeforeMount": true, + "onBeforeUnmount": true, + "onBeforeUpdate": true, + "onClickOutside": true, + "onDeactivated": true, + "onErrorCaptured": true, + "onKeyStroke": true, + "onLongPress": true, + "onMounted": true, + "onRenderTracked": true, + "onRenderTriggered": true, + "onScopeDispose": true, + "onServerPrefetch": true, + "onStartTyping": true, + "onUnmounted": true, + "onUpdated": true, + "pausableWatch": true, + "provide": true, + "reactify": true, + "reactifyObject": true, + "reactive": true, + "reactiveComputed": true, + "reactiveOmit": true, + "reactivePick": true, + "readonly": true, + "ref": true, + "refAutoReset": true, + "refDebounced": true, + "refDefault": true, + "refThrottled": true, + "refWithControl": true, + "resolveComponent": true, + "resolveRef": true, + "resolveUnref": true, + "shallowReactive": true, + "shallowReadonly": true, + "shallowRef": true, + "syncRef": true, + "syncRefs": true, + "templateRef": true, + "throttledRef": true, + "throttledWatch": true, + "toRaw": true, + "toReactive": true, + "toRef": true, + "toRefs": true, + "toValue": true, + "triggerRef": true, + "tryOnBeforeMount": true, + "tryOnBeforeUnmount": true, + "tryOnMounted": true, + "tryOnScopeDispose": true, + "tryOnUnmounted": true, + "unref": true, + "unrefElement": true, + "until": true, + "useActiveElement": true, + "useAnimate": true, + "useArrayDifference": true, + "useArrayEvery": true, + "useArrayFilter": true, + "useArrayFind": true, + "useArrayFindIndex": true, + "useArrayFindLast": true, + "useArrayIncludes": true, + "useArrayJoin": true, + "useArrayMap": true, + "useArrayReduce": true, + "useArraySome": true, + "useArrayUnique": true, + "useAsyncQueue": true, + "useAsyncState": true, + "useAttrs": true, + "useBase64": true, + "useBattery": true, + "useBluetooth": true, + "useBreakpoints": true, + "useBroadcastChannel": true, + "useBrowserLocation": true, + "useCached": true, + "useClipboard": true, + "useCloned": true, + "useColorMode": true, + "useConfirmDialog": true, + "useCounter": true, + "useCssModule": true, + "useCssVar": true, + "useCssVars": true, + "useCurrentElement": true, + "useCycleList": true, + "useDark": true, + "useDateFormat": true, + "useDebounce": true, + "useDebounceFn": true, + "useDebouncedRefHistory": true, + "useDeviceMotion": true, + "useDeviceOrientation": true, + "useDevicePixelRatio": true, + "useDevicesList": true, + "useDisplayMedia": true, + "useDocumentVisibility": true, + "useDraggable": true, + "useDropZone": true, + "useElementBounding": true, + "useElementByPoint": true, + "useElementHover": true, + "useElementSize": true, + "useElementVisibility": true, + "useEventBus": true, + "useEventListener": true, + "useEventSource": true, + "useEyeDropper": true, + "useFavicon": true, + "useFetch": true, + "useFileDialog": true, + "useFileSystemAccess": true, + "useFocus": true, + "useFocusWithin": true, + "useFps": true, + "useFullscreen": true, + "useGamepad": true, + "useGeolocation": true, + "useIdle": true, + "useImage": true, + "useInfiniteScroll": true, + "useIntersectionObserver": true, + "useInterval": true, + "useIntervalFn": true, + "useKeyModifier": true, + "useLastChanged": true, + "useLocalStorage": true, + "useMagicKeys": true, + "useManualRefHistory": true, + "useMediaControls": true, + "useMediaQuery": true, + "useMemoize": true, + "useMemory": true, + "useMounted": true, + "useMouse": true, + "useMouseInElement": true, + "useMousePressed": true, + "useMutationObserver": true, + "useNavigatorLanguage": true, + "useNetwork": true, + "useNow": true, + "useObjectUrl": true, + "useOffsetPagination": true, + "useOnline": true, + "usePageLeave": true, + "useParallax": true, + "useParentElement": true, + "usePerformanceObserver": true, + "usePermission": true, + "usePointer": true, + "usePointerLock": true, + "usePointerSwipe": true, + "usePreferredColorScheme": true, + "usePreferredContrast": true, + "usePreferredDark": true, + "usePreferredLanguages": true, + "usePreferredReducedMotion": true, + "usePrevious": true, + "useRafFn": true, + "useRefHistory": true, + "useResizeObserver": true, + "useScreenOrientation": true, + "useScreenSafeArea": true, + "useScriptTag": true, + "useScroll": true, + "useScrollLock": true, + "useSessionStorage": true, + "useShare": true, + "useSlots": true, + "useSorted": true, + "useSpeechRecognition": true, + "useSpeechSynthesis": true, + "useStepper": true, + "useStorage": true, + "useStorageAsync": true, + "useStyleTag": true, + "useSupported": true, + "useSwipe": true, + "useTemplateRefsList": true, + "useTextDirection": true, + "useTextSelection": true, + "useTextareaAutosize": true, + "useThrottle": true, + "useThrottleFn": true, + "useThrottledRefHistory": true, + "useTimeAgo": true, + "useTimeout": true, + "useTimeoutFn": true, + "useTimeoutPoll": true, + "useTimestamp": true, + "useTitle": true, + "useToNumber": true, + "useToString": true, + "useToggle": true, + "useTransition": true, + "useUrlSearchParams": true, + "useUserMedia": true, + "useVModel": true, + "useVModels": true, + "useVibrate": true, + "useVirtualList": true, + "useWakeLock": true, + "useWebNotification": true, + "useWebSocket": true, + "useWebWorker": true, + "useWebWorkerFn": true, + "useWindowFocus": true, + "useWindowScroll": true, + "useWindowSize": true, + "watch": true, + "watchArray": true, + "watchAtMost": true, + "watchDebounced": true, + "watchDeep": true, + "watchEffect": true, + "watchIgnorable": true, + "watchImmediate": true, + "watchOnce": true, + "watchPausable": true, + "watchPostEffect": true, + "watchSyncEffect": true, + "watchThrottled": true, + "watchTriggerable": true, + "watchWithFilter": true, + "whenever": true + } +} diff --git a/vue3/.eslintrc.cjs b/vue3/.eslintrc.cjs new file mode 100644 index 00000000..8ae169a9 --- /dev/null +++ b/vue3/.eslintrc.cjs @@ -0,0 +1,88 @@ +module.exports = { + root: true, + env: { + browser: true, + es2021: true, + node: true, + }, + parser: "vue-eslint-parser", + extends: [ + // https://eslint.vuejs.org/user-guide/#usage + "plugin:vue/vue3-recommended", + "./.eslintrc-auto-import.json", + "prettier", + "plugin:@typescript-eslint/recommended", + "plugin:prettier/recommended", + ], + parserOptions: { + ecmaVersion: "latest", + sourceType: "module", + parser: "@typescript-eslint/parser", + project: "./tsconfig.*?.json", + createDefaultProgram: false, + extraFileExtensions: [".vue"], + }, + plugins: ["vue", "@typescript-eslint"], + rules: { + // https://eslint.vuejs.org/rules/#priority-a-essential-error-prevention + "vue/multi-word-component-names": "off", + "vue/no-v-model-argument": "off", + "vue/script-setup-uses-vars": "error", + "vue/no-reserved-component-names": "off", + "vue/custom-event-name-casing": "off", + "vue/attributes-order": "off", + "vue/one-component-per-file": "off", + "vue/html-closing-bracket-newline": "off", + "vue/max-attributes-per-line": "off", + "vue/multiline-html-element-content-newline": "off", + "vue/singleline-html-element-content-newline": "off", + "vue/attribute-hyphenation": "off", + "vue/require-default-prop": "off", + "vue/require-explicit-emits": "off", + "vue/html-self-closing": [ + "error", + { + html: { + void: "always", + normal: "never", + component: "always", + }, + svg: "always", + math: "always", + }, + ], + + "@typescript-eslint/no-empty-function": "off", // 关闭空方法检查 + "@typescript-eslint/no-explicit-any": "off", // 关闭any类型的警告 + "@typescript-eslint/no-non-null-assertion": "off", + "@typescript-eslint/ban-ts-ignore": "off", + "@typescript-eslint/ban-ts-comment": "off", + "@typescript-eslint/ban-types": "off", + "@typescript-eslint/explicit-function-return-type": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-var-requires": "off", + "@typescript-eslint/no-empty-function": "off", + "@typescript-eslint/no-use-before-define": "off", + "@typescript-eslint/no-non-null-assertion": "off", + "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/no-unused-vars": "off", + + "prettier/prettier": [ + "error", + { + useTabs: false, // 不使用制表符 + }, + ], + }, + // eslint不能对html文件生效 + overrides: [ + { + files: ["*.html"], + processor: "vue/.vue", + }, + ], + // https://eslint.org/docs/latest/use/configure/language-options#specifying-globals + globals: { + OptionType: "readonly", + }, +}; diff --git a/vue3/.gitignore b/vue3/.gitignore new file mode 100644 index 00000000..1fd449a7 --- /dev/null +++ b/vue3/.gitignore @@ -0,0 +1,17 @@ +node_modules +.DS_Store +dist +dist-ssr +*.local + +# Editor directories and files +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.local + +package-lock.json +pnpm-lock.yaml +stats.html diff --git a/vue3/.husky/commit-msg b/vue3/.husky/commit-msg new file mode 100644 index 00000000..e8511eae --- /dev/null +++ b/vue3/.husky/commit-msg @@ -0,0 +1,4 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +npx --no-install commitlint --edit $1 diff --git a/vue3/.husky/pre-commit b/vue3/.husky/pre-commit new file mode 100644 index 00000000..37568d10 --- /dev/null +++ b/vue3/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +npm run lint:lint-staged diff --git a/vue3/.prettierignore b/vue3/.prettierignore new file mode 100644 index 00000000..f3e9850f --- /dev/null +++ b/vue3/.prettierignore @@ -0,0 +1,11 @@ +dist +node_modules +public +.husky +.vscode +.idea +*.sh +*.md + +src/assets +stats.html diff --git a/vue3/.prettierrc.cjs b/vue3/.prettierrc.cjs new file mode 100644 index 00000000..347fb32e --- /dev/null +++ b/vue3/.prettierrc.cjs @@ -0,0 +1,46 @@ +module.exports = { + // (x)=>{},单个参数箭头函数是否显示小括号。(always:始终显示;avoid:省略括号。默认:always) + arrowParens: "always", + // 开始标签的右尖括号是否跟随在最后一行属性末尾,默认false + bracketSameLine: false, + // 对象字面量的括号之间打印空格 (true - Example: { foo: bar } ; false - Example: {foo:bar}) + bracketSpacing: true, + // 是否格式化一些文件中被嵌入的代码片段的风格(auto|off;默认auto) + embeddedLanguageFormatting: "auto", + // 指定 HTML 文件的空格敏感度 (css|strict|ignore;默认css) + htmlWhitespaceSensitivity: "css", + // 当文件已经被 Prettier 格式化之后,是否会在文件顶部插入一个特殊的 @format 标记,默认false + insertPragma: false, + // 在 JSX 中使用单引号替代双引号,默认false + jsxSingleQuote: false, + // 每行最多字符数量,超出换行(默认80) + printWidth: 80, + // 超出打印宽度 (always | never | preserve ) + proseWrap: "preserve", + // 对象属性是否使用引号(as-needed | consistent | preserve;默认as-needed:对象的属性需要加引号才添加;) + quoteProps: "as-needed", + // 是否只格式化在文件顶部包含特定注释(@prettier| @format)的文件,默认false + requirePragma: false, + // 结尾添加分号 + semi: true, + // 使用单引号 (true:单引号;false:双引号) + singleQuote: false, + // 缩进空格数,默认2个空格 + tabWidth: 2, + // 元素末尾是否加逗号,默认es5: ES5中的 objects, arrays 等会添加逗号,TypeScript 中的 type 后不加逗号 + trailingComma: "es5", + // 指定缩进方式,空格或tab,默认false,即使用空格 + useTabs: false, + // vue 文件中是否缩进 + + diff --git a/vue3/package.json b/vue3/package.json new file mode 100644 index 00000000..0b0af355 --- /dev/null +++ b/vue3/package.json @@ -0,0 +1,120 @@ +{ + "name": "qihang-oms", + "version": "2.8.2", + "private": true, + "type": "module", + "scripts": { + "preinstall": "npx only-allow pnpm", + "dev": "vite serve --mode development", + "build:prod": "vite build --mode production && vue-tsc --noEmit", + "prepare": "husky install", + "lint:eslint": "eslint --fix --ext .ts,.js,.vue ./src ", + "lint:prettier": "prettier --write \"**/*.{js,cjs,ts,json,tsx,css,less,scss,vue,html,md}\"", + "lint:stylelint": "stylelint \"**/*.{css,scss,vue}\" --fix", + "lint:lint-staged": "lint-staged", + "commit": "git-cz" + }, + "config": { + "commitizen": { + "path": "node_modules/cz-git" + } + }, + "lint-staged": { + "*.{js,ts}": [ + "eslint --fix", + "prettier --write" + ], + "*.{cjs,json}": [ + "prettier --write" + ], + "*.{vue,html}": [ + "eslint --fix", + "prettier --write", + "stylelint --fix" + ], + "*.{scss,css}": [ + "stylelint --fix", + "prettier --write" + ], + "*.md": [ + "prettier --write" + ] + }, + "dependencies": { + "@element-plus/icons-vue": "^2.3.1", + "@vitejs/plugin-vue": "^4.6.2", + "@vueuse/core": "^10.7.1", + "@wangeditor/editor": "^5.1.23", + "@wangeditor/editor-for-vue": "5.1.10", + "axios": "^1.6.5", + "echarts": "^5.4.3", + "element-plus": "^2.5.0", + "lodash-es": "^4.17.21", + "net": "^1.0.2", + "nprogress": "^0.2.0", + "path-browserify": "^1.0.1", + "path-to-regexp": "^6.2.1", + "pinia": "^2.1.7", + "screenfull": "^6.0.2", + "sockjs-client": "1.6.1", + "sortablejs": "^1.15.1", + "stompjs": "^2.3.3", + "terser": "^5.26.0", + "vue": "^3.4.8", + "vue-i18n": "9.2.2", + "vue-router": "^4.2.5", + "xlsx": "^0.18.5" + }, + "devDependencies": { + "@commitlint/cli": "^17.8.1", + "@commitlint/config-conventional": "^17.8.1", + "@iconify-json/ep": "^1.1.14", + "@types/lodash": "^4.14.202", + "@types/nprogress": "^0.2.3", + "@types/path-browserify": "^1.0.2", + "@types/sockjs-client": "^1.5.4", + "@types/sortablejs": "^1.15.7", + "@types/stompjs": "^2.3.9", + "@typescript-eslint/eslint-plugin": "^5.62.0", + "@typescript-eslint/parser": "^5.62.0", + "@vitejs/plugin-vue-jsx": "^3.1.0", + "autoprefixer": "^10.4.16", + "commitizen": "^4.3.0", + "cz-git": "^1.8.0", + "eslint": "^8.56.0", + "eslint-config-prettier": "^8.10.0", + "eslint-plugin-import": "^2.29.1", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-vue": "^9.20.0", + "fast-glob": "^3.3.2", + "husky": "^8.0.3", + "lint-staged": "^13.3.0", + "postcss": "^8.4.33", + "postcss-html": "^1.5.0", + "postcss-scss": "^4.0.9", + "prettier": "^2.8.8", + "sass": "^1.69.7", + "stylelint": "^15.11.0", + "stylelint-config-html": "^1.1.0", + "stylelint-config-recess-order": "^4.4.0", + "stylelint-config-recommended-scss": "^13.1.0", + "stylelint-config-recommended-vue": "^1.5.0", + "stylelint-config-standard": "^34.0.0", + "stylelint-config-standard-scss": "^11.1.0", + "typescript": "^5.3.3", + "unocss": "^0.58.3", + "unplugin-auto-import": "^0.15.3", + "unplugin-icons": "^0.16.6", + "unplugin-vue-components": "^0.24.1", + "vite": "^5.0.11", + "vite-plugin-mock-dev-server": "^1.4.5", + "vite-plugin-svg-icons": "^2.0.1", + "vue-tsc": "^1.8.27" + }, + "repository": "https://gitee.com/youlaiorg/vue3-element-admin.git", + "author": "有来开源组织", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } +} diff --git a/vue3/public/favicon.ico b/vue3/public/favicon.ico new file mode 100644 index 00000000..df36fcfb Binary files /dev/null and b/vue3/public/favicon.ico differ diff --git a/vue3/src/App.vue b/vue3/src/App.vue new file mode 100644 index 00000000..dd2ac672 --- /dev/null +++ b/vue3/src/App.vue @@ -0,0 +1,11 @@ + + + diff --git a/vue3/src/api/article.ts b/vue3/src/api/article.ts new file mode 100644 index 00000000..2547a4bc --- /dev/null +++ b/vue3/src/api/article.ts @@ -0,0 +1,88 @@ +import request from "@/utils/request"; + +export interface ArticleQuery { + page?: number; + limit?: number; + sort?: string; + title?: string; + type?: string; + importance?: number; +} + +export interface ArticleDetail { + id: number; + timestamp: number; + title: string; + type: string; + status: string; + importance: number; + content?: string; + remark?: string; +} + +export interface ArticleCreate { + type: string; + timestamp: Date; + title: string; + status?: string; + importance?: number; + remark?: string; +} + +export interface ArticleUpdate { + id: number; + type?: string; + timestamp?: Date; + title?: string; + status?: string; + importance?: number; + remark?: string; +} + +export function fetchList(query: ArticleQuery) { + return request({ + url: "/api/v1/article/list", + method: "get", + params: query, + }); +} + +export function fetchArticle(id: number) { + return request({ + url: "/api/v1/article/detail", + method: "get", + params: { id }, + }); +} + +export function fetchPv(id: number) { + return request({ + url: "/api/v1/article/pv", + method: "get", + params: { id }, + }); +} + +export function createArticle(data: ArticleCreate) { + return request({ + url: "/api/v1/article/create", + method: "post", + data, + }); +} + +export function updateArticle(data: ArticleUpdate) { + return request({ + url: "/api/v1/article/update", + method: "post", + data, + }); +} + +export function deleteArticle(id: number) { + return request({ + url: "/api/v1/article/delete", + method: "post", + data: { id }, + }); +} diff --git a/vue3/src/api/auth/index.ts b/vue3/src/api/auth/index.ts new file mode 100644 index 00000000..645628e1 --- /dev/null +++ b/vue3/src/api/auth/index.ts @@ -0,0 +1,45 @@ +import request from "@/utils/request"; +import { AxiosPromise } from "axios"; +import { CaptchaResult, LoginData, LoginResult } from "./types"; + +/** + * 登录API + * + * @param data {LoginData} + * @returns + */ +export function loginApi(data: LoginData): AxiosPromise { + const formData = new FormData(); + formData.append("username", data.username); + formData.append("password", data.password); + formData.append("captchaKey", data.captchaKey || ""); + formData.append("captchaCode", data.captchaCode || ""); + return request({ + url: "/api/v1/auth/login", + method: "post", + data: formData, + headers: { + "Content-Type": "multipart/form-data", + }, + }); +} + +/** + * 注销API + */ +export function logoutApi() { + return request({ + url: "/api/v1/auth/logout", + method: "delete", + }); +} + +/** + * 获取验证码 + */ +export function getCaptchaApi(): AxiosPromise { + return request({ + url: "/api/v1/auth/captcha", + method: "get", + }); +} diff --git a/vue3/src/api/auth/types.ts b/vue3/src/api/auth/types.ts new file mode 100644 index 00000000..0da661ed --- /dev/null +++ b/vue3/src/api/auth/types.ts @@ -0,0 +1,59 @@ +/** + * 登录请求参数 + */ +export interface LoginData { + /** + * 用户名 + */ + username: string; + /** + * 密码 + */ + password: string; + + /** + * 验证码缓存key + */ + captchaKey?: string; + + /** + * 验证码 + */ + captchaCode?: string; +} + +/** + * 登录响应 + */ +export interface LoginResult { + /** + * 访问token + */ + accessToken?: string; + /** + * 过期时间(单位:毫秒) + */ + expires?: number; + /** + * 刷新token + */ + refreshToken?: string; + /** + * token 类型 + */ + tokenType?: string; +} + +/** + * 验证码响应 + */ +export interface CaptchaResult { + /** + * 验证码缓存key + */ + captchaKey: string; + /** + * 验证码图片Base64字符串 + */ + captchaBase64: string; +} diff --git a/vue3/src/api/dept/index.ts b/vue3/src/api/dept/index.ts new file mode 100644 index 00000000..f5e0466d --- /dev/null +++ b/vue3/src/api/dept/index.ts @@ -0,0 +1,77 @@ +import request from "@/utils/request"; +import { AxiosPromise } from "axios"; +import { DeptForm, DeptQuery, DeptVO } from "./types"; + +/** + * 部门树形表格 + * + * @param queryParams + */ +export function listDepts(queryParams?: DeptQuery): AxiosPromise { + return request({ + url: "/api/v1/dept", + method: "get", + params: queryParams, + }); +} + +/** + * 部门下拉列表 + */ +export function getDeptOptions(): AxiosPromise { + return request({ + url: "/api/v1/dept/options", + method: "get", + }); +} + +/** + * 获取部门详情 + * + * @param id + */ +export function getDeptForm(id: number): AxiosPromise { + return request({ + url: "/api/v1/dept/" + id + "/form", + method: "get", + }); +} + +/** + * 新增部门 + * + * @param data + */ +export function addDept(data: DeptForm) { + return request({ + url: "/api/v1/dept", + method: "post", + data: data, + }); +} + +/** + * 修改部门 + * + * @param id + * @param data + */ +export function updateDept(id: number, data: DeptForm) { + return request({ + url: "/api/v1/dept/" + id, + method: "put", + data: data, + }); +} + +/** + * 删除部门 + * + * @param ids + */ +export function deleteDept(ids: string) { + return request({ + url: "/api/v1/dept/" + ids, + method: "delete", + }); +} diff --git a/vue3/src/api/dept/types.ts b/vue3/src/api/dept/types.ts new file mode 100644 index 00000000..408c39c4 --- /dev/null +++ b/vue3/src/api/dept/types.ts @@ -0,0 +1,71 @@ +/** + * 部门查询参数 + */ +export interface DeptQuery { + keywords?: string; + status?: number; +} + +/** + * 部门类型 + */ +export interface DeptVO { + /** + * 子部门 + */ + children?: DeptVO[]; + /** + * 创建时间 + */ + createTime?: Date; + /** + * 部门ID + */ + id?: number; + /** + * 部门名称 + */ + name?: string; + /** + * 父部门ID + */ + parentId?: number; + /** + * 排序 + */ + sort?: number; + /** + * 状态(1:启用;0:禁用) + */ + status?: number; + /** + * 修改时间 + */ + updateTime?: Date; +} + +/** + * 部门表单类型 + */ +export interface DeptForm { + /** + * 部门ID(新增不填) + */ + id?: number; + /** + * 部门名称 + */ + name?: string; + /** + * 父部门ID + */ + parentId: number; + /** + * 排序 + */ + sort?: number; + /** + * 状态(1:启用;0:禁用) + */ + status?: number; +} diff --git a/vue3/src/api/dict/index.ts b/vue3/src/api/dict/index.ts new file mode 100644 index 00000000..635297eb --- /dev/null +++ b/vue3/src/api/dict/index.ts @@ -0,0 +1,150 @@ +import request from "@/utils/request"; +import { AxiosPromise } from "axios"; +import { + DictTypeQuery, + DictTypePageResult, + DictTypeForm, + DictQuery, + DictForm, + DictPageResult, +} from "./types"; + +/** + * 字典类型分页列表 + * + * @param queryParams + */ +export function getDictTypePage( + queryParams: DictTypeQuery +): AxiosPromise { + return request({ + url: "/api/v1/dict/types/page", + method: "get", + params: queryParams, + }); +} + +/** + * 字典类型表单数据 + * + * @param id + */ +export function getDictTypeForm(id: number): AxiosPromise { + return request({ + url: "/api/v1/dict/types/" + id + "/form", + method: "get", + }); +} + +/** + * 新增字典类型 + * + * @param data + */ +export function addDictType(data: DictTypeForm) { + return request({ + url: "/api/v1/dict/types", + method: "post", + data: data, + }); +} + +/** + * 修改字典类型 + * + * @param id + * @param data + */ +export function updateDictType(id: number, data: DictTypeForm) { + return request({ + url: "/api/v1/dict/types/" + id, + method: "put", + data: data, + }); +} + +/** + * 删除字典类型 + */ +export function deleteDictTypes(ids: string) { + return request({ + url: "/api/v1/dict/types/" + ids, + method: "delete", + }); +} + +/** + * 获取字典类型的数据项 + * + * @param typeCode 字典类型编码 + */ +export function getDictOptions(typeCode: string): AxiosPromise { + return request({ + url: "/api/v1/dict/" + typeCode + "/options", + method: "get", + }); +} + +/** + * 字典分页列表 + */ +export function getDictPage( + queryParams: DictQuery +): AxiosPromise { + return request({ + url: "/api/v1/dict/page", + method: "get", + params: queryParams, + }); +} + +/** + * 获取字典表单数据 + * + * @param id + */ +export function getDictFormData(id: number): AxiosPromise { + return request({ + url: "/api/v1/dict/" + id + "/form", + method: "get", + }); +} + +/** + * 新增字典 + * + * @param data + */ +export function addDict(data: DictForm) { + return request({ + url: "/api/v1/dict", + method: "post", + data: data, + }); +} + +/** + * 修改字典项 + * + * @param id + * @param data + */ +export function updateDict(id: number, data: DictForm) { + return request({ + url: "/api/v1/dict/" + id, + method: "put", + data: data, + }); +} + +/** + * 删除字典 + * + * @param ids 字典项ID,多个以英文逗号(,)分割 + */ +export function deleteDict(ids: string) { + return request({ + url: "/api/v1/dict/" + ids, + method: "delete", + }); +} diff --git a/vue3/src/api/dict/types.ts b/vue3/src/api/dict/types.ts new file mode 100644 index 00000000..315da6d7 --- /dev/null +++ b/vue3/src/api/dict/types.ts @@ -0,0 +1,142 @@ +/** + * 字典类型查询参数 + */ +export interface DictTypeQuery extends PageQuery { + /** + * 关键字(字典类型名称/编码) + */ + keywords?: string; +} + +/** + * 字典类型分页对象 + */ +export interface DictTypePageVO { + /** + * 字典类型ID + */ + id: number; + /** + * 类型编码 + */ + code: string; + /** + * 类型名称 + */ + name: string; + /** + * 状态(1:启用;0:禁用) + */ + status?: number; + /** + * 备注 + */ + remark?: string; +} + +/** + * 字典分页项类型声明 + */ +export type DictTypePageResult = PageResult; + +/** + * 字典表单类型声明 + */ +export interface DictTypeForm { + /** + * 字典类型ID + */ + id?: number; + /** + * 类型名称 + */ + name?: string; + /** + * 类型编码 + */ + code?: string; + /** + * 类型状态:1:启用;0:禁用 + */ + status: number; + /** + * 备注 + */ + remark?: string; +} + +/** + * 字典查询参数 + */ +export interface DictQuery extends PageQuery { + /** + * 字典项名称 + */ + name?: string; + /** + * 字典类型编码 + */ + typeCode?: string; +} + +/** + * 字典分页对象 + */ +export interface DictPageVO { + /** + * 字典ID + */ + id?: number; + /** + * 字典名称 + */ + name?: string; + /** + * 状态(1:启用;0:禁用) + */ + status?: number; + /** + * 字典值 + */ + value?: string; +} + +/** + * 字典分页 + */ +export type DictPageResult = PageResult; + +/** + * 字典表单 + */ +export interface DictForm { + /** + * 字典ID + */ + id?: number; + /** + * 字典名称 + */ + name?: string; + /** + * 排序 + */ + sort?: number; + /** + * 状态(1:启用;0:禁用) + */ + status?: number; + /** + * 类型编码 + */ + typeCode?: string; + /** + * 值 + */ + value?: string; + + /** + * 备注 + */ + remark?: string; +} diff --git a/vue3/src/api/file/index.ts b/vue3/src/api/file/index.ts new file mode 100644 index 00000000..adcc30b9 --- /dev/null +++ b/vue3/src/api/file/index.ts @@ -0,0 +1,34 @@ +import request from "@/utils/request"; +import { AxiosPromise } from "axios"; +import { FileInfo } from "./types"; + +/** + * 上传文件 + * + * @param file + */ +export function uploadFileApi(file: File): AxiosPromise { + const formData = new FormData(); + formData.append("file", file); + return request({ + url: "/api/v1/files", + method: "post", + data: formData, + headers: { + "Content-Type": "multipart/form-data", + }, + }); +} + +/** + * 删除文件 + * + * @param filePath 文件完整路径 + */ +export function deleteFileApi(filePath?: string) { + return request({ + url: "/api/v1/files", + method: "delete", + params: { filePath: filePath }, + }); +} diff --git a/vue3/src/api/file/types.ts b/vue3/src/api/file/types.ts new file mode 100644 index 00000000..22b2be55 --- /dev/null +++ b/vue3/src/api/file/types.ts @@ -0,0 +1,7 @@ +/** + * 文件API类型声明 + */ +export interface FileInfo { + name: string; + url: string; +} diff --git a/vue3/src/api/menu/index.ts b/vue3/src/api/menu/index.ts new file mode 100644 index 00000000..032e0a91 --- /dev/null +++ b/vue3/src/api/menu/index.ts @@ -0,0 +1,87 @@ +import request from "@/utils/request"; +import { AxiosPromise } from "axios"; +import { MenuQuery, MenuVO, MenuForm } from "./types"; + +/** + * 获取路由列表 + */ +export function listRoutes() { + return request({ + url: "/api/v1/menus/routes", + method: "get", + }); +} + +/** + * 获取菜单树形列表 + * + * @param queryParams + */ +export function listMenus(queryParams: MenuQuery): AxiosPromise { + return request({ + url: "/api/v1/menus", + method: "get", + params: queryParams, + }); +} + +/** + * 获取菜单下拉树形列表 + */ +export function getMenuOptions(): AxiosPromise { + return request({ + url: "/api/v1/menus/options", + method: "get", + }); +} + +/** + * 获取菜单表单数据 + * + * @param id + */ +export function getMenuForm(id: number): AxiosPromise { + return request({ + url: "/api/v1/menus/" + id + "/form", + method: "get", + }); +} + +/** + * 添加菜单 + * + * @param data + */ +export function addMenu(data: MenuForm) { + return request({ + url: "/api/v1/menus", + method: "post", + data: data, + }); +} + +/** + * 修改菜单 + * + * @param id + * @param data + */ +export function updateMenu(id: string, data: MenuForm) { + return request({ + url: "/api/v1/menus/" + id, + method: "put", + data: data, + }); +} + +/** + * 删除菜单 + * + * @param id 菜单ID + */ +export function deleteMenu(id: number) { + return request({ + url: "/api/v1/menus/" + id, + method: "delete", + }); +} diff --git a/vue3/src/api/menu/types.ts b/vue3/src/api/menu/types.ts new file mode 100644 index 00000000..38101e8a --- /dev/null +++ b/vue3/src/api/menu/types.ts @@ -0,0 +1,124 @@ +import { MenuTypeEnum } from "@/enums/MenuTypeEnum"; + +/** + * 菜单查询参数类型 + */ +export interface MenuQuery { + keywords?: string; +} + +/** + * 菜单视图对象类型 + */ +export interface MenuVO { + /** + * 子菜单 + */ + children?: MenuVO[]; + /** + * 组件路径 + */ + component?: string; + /** + * ICON + */ + icon?: string; + /** + * 菜单ID + */ + id?: number; + /** + * 菜单名称 + */ + name?: string; + /** + * 父菜单ID + */ + parentId?: number; + /** + * 按钮权限标识 + */ + perm?: string; + /** + * 跳转路径 + */ + redirect?: string; + /** + * 路由名称 + */ + routeName?: string; + /** + * 路由相对路径 + */ + routePath?: string; + /** + * 菜单排序(数字越小排名越靠前) + */ + sort?: number; + /** + * 菜单类型 + */ + type?: MenuTypeEnum; + /** + * 菜单是否可见(1:显示;0:隐藏) + */ + visible?: number; +} + +/** + * 菜单表单对象类型 + */ +export interface MenuForm { + /** + * 菜单ID + */ + id?: string; + /** + * 父菜单ID + */ + parentId?: number; + /** + * 菜单名称 + */ + name?: string; + /** + * 菜单是否可见(1:是;0:否;) + */ + visible: number; + icon?: string; + /** + * 排序 + */ + sort: number; + /** + * 组件路径 + */ + component?: string; + /** + * 路由路径 + */ + path?: string; + /** + * 跳转路由路径 + */ + redirect?: string; + + /** + * 菜单类型 + */ + type: MenuTypeEnum; + + /** + * 权限标识 + */ + perm?: string; + /** + * 【菜单】是否开启页面缓存 + */ + keepAlive?: number; + + /** + * 【目录】只有一个子路由是否始终显示 + */ + alwaysShow?: number; +} diff --git a/vue3/src/api/role/index.ts b/vue3/src/api/role/index.ts new file mode 100644 index 00000000..fdbc65cd --- /dev/null +++ b/vue3/src/api/role/index.ts @@ -0,0 +1,112 @@ +import request from "@/utils/request"; +import { AxiosPromise } from "axios"; +import { RoleQuery, RolePageResult, RoleForm } from "./types"; + +/** + * 获取角色分页数据 + * + * @param queryParams + */ +export function getRolePage( + queryParams?: RoleQuery +): AxiosPromise { + return request({ + url: "/api/v1/roles/page", + method: "get", + params: queryParams, + }); +} + +/** + * 获取角色下拉数据 + * + * @param queryParams + */ +export function getRoleOptions( + queryParams?: RoleQuery +): AxiosPromise { + return request({ + url: "/api/v1/roles/options", + method: "get", + params: queryParams, + }); +} + +/** + * 获取角色的菜单ID集合 + * + * @param queryParams + */ +export function getRoleMenuIds(roleId: number): AxiosPromise { + return request({ + url: "/api/v1/roles/" + roleId + "/menuIds", + method: "get", + }); +} + +/** + * 分配菜单权限给角色 + * + * @param queryParams + */ +export function updateRoleMenus( + roleId: number, + data: number[] +): AxiosPromise { + return request({ + url: "/api/v1/roles/" + roleId + "/menus", + method: "put", + data: data, + }); +} + +/** + * 获取角色详情 + * + * @param id + */ +export function getRoleForm(id: number): AxiosPromise { + return request({ + url: "/api/v1/roles/" + id + "/form", + method: "get", + }); +} + +/** + * 添加角色 + * + * @param data + */ +export function addRole(data: RoleForm) { + return request({ + url: "/api/v1/roles", + method: "post", + data: data, + }); +} + +/** + * 更新角色 + * + * @param id + * @param data + */ +export function updateRole(id: number, data: RoleForm) { + return request({ + url: "/api/v1/roles/" + id, + method: "put", + data: data, + }); +} + +/** + * 批量删除角色,多个以英文逗号(,)分割 + * + * @param ids + */ +export function deleteRoles(ids: string) { + return request({ + url: "/api/v1/roles/" + ids, + method: "delete", + }); +} diff --git a/vue3/src/api/role/types.ts b/vue3/src/api/role/types.ts new file mode 100644 index 00000000..2d259c7f --- /dev/null +++ b/vue3/src/api/role/types.ts @@ -0,0 +1,78 @@ +/** + * 角色查询参数 + */ +export interface RoleQuery extends PageQuery { + keywords?: string; +} + +/** + * 角色分页对象 + */ +export interface RolePageVO { + /** + * 角色编码 + */ + code?: string; + + /** + * 角色ID + */ + id?: number; + /** + * 角色名称 + */ + name?: string; + /** + * 排序 + */ + sort?: number; + /** + * 角色状态 + */ + status?: number; + /** + * 创建时间 + */ + createTime?: Date; + /** + * 修改时间 + */ + updateTime?: Date; +} + +/** + * 角色分页 + */ +export type RolePageResult = PageResult; + +/** + * 角色表单对象 + */ +export interface RoleForm { + /** + * 角色ID + */ + id?: number; + + /** + * 角色编码 + */ + code: string; + /** + * 数据权限 + */ + dataScope?: number; + + /** + * 角色名称 + */ + name: string; + /** + * 排序 + */ + sort?: number; + /** + * 角色状态(1-正常;0-停用) + */ + status?: number; +} diff --git a/vue3/src/api/user/index.ts b/vue3/src/api/user/index.ts new file mode 100644 index 00000000..3c7087a0 --- /dev/null +++ b/vue3/src/api/user/index.ts @@ -0,0 +1,140 @@ +import request from "@/utils/request"; +import { AxiosPromise } from "axios"; +import { UserForm, UserInfo, UserPageVO, UserQuery } from "./types"; + +/** + * 登录成功后获取用户信息(昵称、头像、权限集合和角色集合) + */ +export function getUserInfoApi(): AxiosPromise { + return request({ + url: "/api/v1/users/me", + method: "get", + }); +} + +/** + * 获取用户分页列表 + * + * @param queryParams + */ +export function getUserPage( + queryParams: UserQuery +): AxiosPromise> { + return request({ + url: "/api/v1/users/page", + method: "get", + params: queryParams, + }); +} + +/** + * 获取用户表单详情 + * + * @param userId + */ +export function getUserForm(userId: number): AxiosPromise { + return request({ + url: "/api/v1/users/" + userId + "/form", + method: "get", + }); +} + +/** + * 添加用户 + * + * @param data + */ +export function addUser(data: any) { + return request({ + url: "/api/v1/users", + method: "post", + data: data, + }); +} + +/** + * 修改用户 + * + * @param id + * @param data + */ +export function updateUser(id: number, data: UserForm) { + return request({ + url: "/api/v1/users/" + id, + method: "put", + data: data, + }); +} + +/** + * 修改用户密码 + * + * @param id + * @param password + */ +export function updateUserPassword(id: number, password: string) { + return request({ + url: "/api/v1/users/" + id + "/password", + method: "patch", + params: { password: password }, + }); +} + +/** + * 删除用户 + * + * @param ids + */ +export function deleteUsers(ids: string) { + return request({ + url: "/api/v1/users/" + ids, + method: "delete", + }); +} + +/** + * 下载用户导入模板 + * + * @returns + */ +export function downloadTemplateApi() { + return request({ + url: "/api/v1/users/template", + method: "get", + responseType: "arraybuffer", + }); +} + +/** + * 导出用户 + * + * @param queryParams + * @returns + */ +export function exportUser(queryParams: UserQuery) { + return request({ + url: "/api/v1/users/_export", + method: "get", + params: queryParams, + responseType: "arraybuffer", + }); +} + +/** + * 导入用户 + * + * @param file + */ +export function importUser(deptId: number, file: File) { + const formData = new FormData(); + formData.append("file", file); + return request({ + url: "/api/v1/users/_import", + method: "post", + params: { deptId: deptId }, + data: formData, + headers: { + "Content-Type": "multipart/form-data", + }, + }); +} diff --git a/vue3/src/api/user/types.ts b/vue3/src/api/user/types.ts new file mode 100644 index 00000000..c0060f27 --- /dev/null +++ b/vue3/src/api/user/types.ts @@ -0,0 +1,115 @@ +/** + * 登录用户信息 + */ +export interface UserInfo { + userId?: number; + username?: string; + nickname?: string; + avatar?: string; + roles: string[]; + perms: string[]; +} + +/** + * 用户查询对象类型 + */ +export interface UserQuery extends PageQuery { + keywords?: string; + status?: number; + deptId?: number; + startTime?: string; + endTime?: string; +} + +/** + * 用户分页对象 + */ +export interface UserPageVO { + /** + * 用户头像地址 + */ + avatar?: string; + /** + * 创建时间 + */ + createTime?: Date; + /** + * 部门名称 + */ + deptName?: string; + /** + * 用户邮箱 + */ + email?: string; + /** + * 性别 + */ + genderLabel?: string; + /** + * 用户ID + */ + id?: number; + /** + * 手机号 + */ + mobile?: string; + /** + * 用户昵称 + */ + nickname?: string; + /** + * 角色名称,多个使用英文逗号(,)分割 + */ + roleNames?: string; + /** + * 用户状态(1:启用;0:禁用) + */ + status?: number; + /** + * 用户名 + */ + username?: string; +} + +/** + * 用户表单类型 + */ +export interface UserForm { + /** + * 用户头像 + */ + avatar?: string; + /** + * 部门ID + */ + deptId?: number; + /** + * 邮箱 + */ + email?: string; + /** + * 性别 + */ + gender?: number; + /** + * 用户ID + */ + id?: number; + mobile?: string; + /** + * 昵称 + */ + nickname?: string; + /** + * 角色ID集合 + */ + roleIds?: number[]; + /** + * 用户状态(1:正常;0:禁用) + */ + status?: number; + /** + * 用户名 + */ + username?: string; +} diff --git a/vue3/src/assets/icons/api.svg b/vue3/src/assets/icons/api.svg new file mode 100644 index 00000000..2753743d --- /dev/null +++ b/vue3/src/assets/icons/api.svg @@ -0,0 +1 @@ + diff --git a/vue3/src/assets/icons/captcha.svg b/vue3/src/assets/icons/captcha.svg new file mode 100644 index 00000000..39bf4783 --- /dev/null +++ b/vue3/src/assets/icons/captcha.svg @@ -0,0 +1,9 @@ + + + + diff --git a/vue3/src/assets/icons/cascader.svg b/vue3/src/assets/icons/cascader.svg new file mode 100644 index 00000000..a1a27921 --- /dev/null +++ b/vue3/src/assets/icons/cascader.svg @@ -0,0 +1 @@ + diff --git a/vue3/src/assets/icons/client.svg b/vue3/src/assets/icons/client.svg new file mode 100644 index 00000000..ad4bc15a --- /dev/null +++ b/vue3/src/assets/icons/client.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/vue3/src/assets/icons/close.svg b/vue3/src/assets/icons/close.svg new file mode 100644 index 00000000..5b5057f2 --- /dev/null +++ b/vue3/src/assets/icons/close.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/vue3/src/assets/icons/close_all.svg b/vue3/src/assets/icons/close_all.svg new file mode 100644 index 00000000..aa13cd75 --- /dev/null +++ b/vue3/src/assets/icons/close_all.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/vue3/src/assets/icons/close_left.svg b/vue3/src/assets/icons/close_left.svg new file mode 100644 index 00000000..e5708ea5 --- /dev/null +++ b/vue3/src/assets/icons/close_left.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/vue3/src/assets/icons/close_other.svg b/vue3/src/assets/icons/close_other.svg new file mode 100644 index 00000000..212e6c28 --- /dev/null +++ b/vue3/src/assets/icons/close_other.svg @@ -0,0 +1 @@ + diff --git a/vue3/src/assets/icons/close_right.svg b/vue3/src/assets/icons/close_right.svg new file mode 100644 index 00000000..14d3cf39 --- /dev/null +++ b/vue3/src/assets/icons/close_right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/vue3/src/assets/icons/dict.svg b/vue3/src/assets/icons/dict.svg new file mode 100644 index 00000000..22a82781 --- /dev/null +++ b/vue3/src/assets/icons/dict.svg @@ -0,0 +1,18 @@ + + + + + + + diff --git a/vue3/src/assets/icons/document.svg b/vue3/src/assets/icons/document.svg new file mode 100644 index 00000000..918ae33d --- /dev/null +++ b/vue3/src/assets/icons/document.svg @@ -0,0 +1 @@ + diff --git a/vue3/src/assets/icons/download.svg b/vue3/src/assets/icons/download.svg new file mode 100644 index 00000000..61ec1f9f --- /dev/null +++ b/vue3/src/assets/icons/download.svg @@ -0,0 +1 @@ + diff --git a/oms-vue/src/assets/icons/svg/drag.svg b/vue3/src/assets/icons/drag.svg similarity index 100% rename from oms-vue/src/assets/icons/svg/drag.svg rename to vue3/src/assets/icons/drag.svg diff --git a/oms-vue/src/assets/icons/svg/edit.svg b/vue3/src/assets/icons/edit.svg similarity index 100% rename from oms-vue/src/assets/icons/svg/edit.svg rename to vue3/src/assets/icons/edit.svg diff --git a/oms-vue/src/assets/icons/svg/exit-fullscreen.svg b/vue3/src/assets/icons/exit-fullscreen.svg similarity index 100% rename from oms-vue/src/assets/icons/svg/exit-fullscreen.svg rename to vue3/src/assets/icons/exit-fullscreen.svg diff --git a/oms-vue/src/assets/icons/svg/eye-open.svg b/vue3/src/assets/icons/eye-open.svg similarity index 100% rename from oms-vue/src/assets/icons/svg/eye-open.svg rename to vue3/src/assets/icons/eye-open.svg diff --git a/oms-vue/src/assets/icons/svg/eye.svg b/vue3/src/assets/icons/eye.svg similarity index 100% rename from oms-vue/src/assets/icons/svg/eye.svg rename to vue3/src/assets/icons/eye.svg diff --git a/oms-vue/src/assets/icons/svg/fullscreen.svg b/vue3/src/assets/icons/fullscreen.svg similarity index 100% rename from oms-vue/src/assets/icons/svg/fullscreen.svg rename to vue3/src/assets/icons/fullscreen.svg diff --git a/oms-vue/src/assets/icons/svg/github.svg b/vue3/src/assets/icons/github.svg similarity index 100% rename from oms-vue/src/assets/icons/svg/github.svg rename to vue3/src/assets/icons/github.svg diff --git a/vue3/src/assets/icons/homepage.svg b/vue3/src/assets/icons/homepage.svg new file mode 100644 index 00000000..48f4e249 --- /dev/null +++ b/vue3/src/assets/icons/homepage.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/icon.svg b/vue3/src/assets/icons/icon.svg similarity index 100% rename from oms-vue/src/assets/icons/svg/icon.svg rename to vue3/src/assets/icons/icon.svg diff --git a/vue3/src/assets/icons/ip.svg b/vue3/src/assets/icons/ip.svg new file mode 100644 index 00000000..7422976f --- /dev/null +++ b/vue3/src/assets/icons/ip.svg @@ -0,0 +1 @@ + diff --git a/vue3/src/assets/icons/language.svg b/vue3/src/assets/icons/language.svg new file mode 100644 index 00000000..d2dd693d --- /dev/null +++ b/vue3/src/assets/icons/language.svg @@ -0,0 +1 @@ + diff --git a/vue3/src/assets/icons/link.svg b/vue3/src/assets/icons/link.svg new file mode 100644 index 00000000..9748d530 --- /dev/null +++ b/vue3/src/assets/icons/link.svg @@ -0,0 +1 @@ + diff --git a/vue3/src/assets/icons/menu.svg b/vue3/src/assets/icons/menu.svg new file mode 100644 index 00000000..92c364c2 --- /dev/null +++ b/vue3/src/assets/icons/menu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/vue3/src/assets/icons/message.svg b/vue3/src/assets/icons/message.svg new file mode 100644 index 00000000..993522a0 --- /dev/null +++ b/vue3/src/assets/icons/message.svg @@ -0,0 +1 @@ + diff --git a/vue3/src/assets/icons/money.svg b/vue3/src/assets/icons/money.svg new file mode 100644 index 00000000..6547fe9a --- /dev/null +++ b/vue3/src/assets/icons/money.svg @@ -0,0 +1 @@ + diff --git a/oms-vue/src/assets/icons/svg/monitor.svg b/vue3/src/assets/icons/monitor.svg similarity index 100% rename from oms-vue/src/assets/icons/svg/monitor.svg rename to vue3/src/assets/icons/monitor.svg diff --git a/vue3/src/assets/icons/order.svg b/vue3/src/assets/icons/order.svg new file mode 100644 index 00000000..15c9fb12 --- /dev/null +++ b/vue3/src/assets/icons/order.svg @@ -0,0 +1 @@ + diff --git a/oms-vue/src/assets/icons/svg/password.svg b/vue3/src/assets/icons/password.svg similarity index 100% rename from oms-vue/src/assets/icons/svg/password.svg rename to vue3/src/assets/icons/password.svg diff --git a/vue3/src/assets/icons/peoples.svg b/vue3/src/assets/icons/peoples.svg new file mode 100644 index 00000000..383b82d2 --- /dev/null +++ b/vue3/src/assets/icons/peoples.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/vue3/src/assets/icons/project.svg b/vue3/src/assets/icons/project.svg new file mode 100644 index 00000000..19d016df --- /dev/null +++ b/vue3/src/assets/icons/project.svg @@ -0,0 +1 @@ + diff --git a/vue3/src/assets/icons/publish.svg b/vue3/src/assets/icons/publish.svg new file mode 100644 index 00000000..e9b489c3 --- /dev/null +++ b/vue3/src/assets/icons/publish.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/oms-vue/src/assets/icons/svg/redis.svg b/vue3/src/assets/icons/redis.svg similarity index 100% rename from oms-vue/src/assets/icons/svg/redis.svg rename to vue3/src/assets/icons/redis.svg diff --git a/vue3/src/assets/icons/refresh.svg b/vue3/src/assets/icons/refresh.svg new file mode 100644 index 00000000..4661eeb7 --- /dev/null +++ b/vue3/src/assets/icons/refresh.svg @@ -0,0 +1 @@ + diff --git a/vue3/src/assets/icons/role.svg b/vue3/src/assets/icons/role.svg new file mode 100644 index 00000000..c484b137 --- /dev/null +++ b/vue3/src/assets/icons/role.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/vue3/src/assets/icons/security.svg b/vue3/src/assets/icons/security.svg new file mode 100644 index 00000000..bcd9d2e6 --- /dev/null +++ b/vue3/src/assets/icons/security.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/vue3/src/assets/icons/shrink.svg b/vue3/src/assets/icons/shrink.svg new file mode 100644 index 00000000..075a559d --- /dev/null +++ b/vue3/src/assets/icons/shrink.svg @@ -0,0 +1 @@ + diff --git a/oms-vue/src/assets/icons/svg/size.svg b/vue3/src/assets/icons/size.svg similarity index 100% rename from oms-vue/src/assets/icons/svg/size.svg rename to vue3/src/assets/icons/size.svg diff --git a/vue3/src/assets/icons/system.svg b/vue3/src/assets/icons/system.svg new file mode 100644 index 00000000..e3b7e2d4 --- /dev/null +++ b/vue3/src/assets/icons/system.svg @@ -0,0 +1 @@ + diff --git a/vue3/src/assets/icons/table.svg b/vue3/src/assets/icons/table.svg new file mode 100644 index 00000000..99c09369 --- /dev/null +++ b/vue3/src/assets/icons/table.svg @@ -0,0 +1 @@ + diff --git a/vue3/src/assets/icons/todolist.svg b/vue3/src/assets/icons/todolist.svg new file mode 100644 index 00000000..39248390 --- /dev/null +++ b/vue3/src/assets/icons/todolist.svg @@ -0,0 +1 @@ + diff --git a/vue3/src/assets/icons/tree.svg b/vue3/src/assets/icons/tree.svg new file mode 100644 index 00000000..d40a414d --- /dev/null +++ b/vue3/src/assets/icons/tree.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/vue3/src/assets/icons/user.svg b/vue3/src/assets/icons/user.svg new file mode 100644 index 00000000..e4c7b389 --- /dev/null +++ b/vue3/src/assets/icons/user.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/vue3/src/assets/icons/visit.svg b/vue3/src/assets/icons/visit.svg new file mode 100644 index 00000000..449b8f88 --- /dev/null +++ b/vue3/src/assets/icons/visit.svg @@ -0,0 +1 @@ + diff --git a/oms-vue/src/assets/401_images/401.gif b/vue3/src/assets/images/401.gif similarity index 100% rename from oms-vue/src/assets/401_images/401.gif rename to vue3/src/assets/images/401.gif diff --git a/oms-vue/src/assets/404_images/404.png b/vue3/src/assets/images/404.png similarity index 100% rename from oms-vue/src/assets/404_images/404.png rename to vue3/src/assets/images/404.png diff --git a/oms-vue/src/assets/404_images/404_cloud.png b/vue3/src/assets/images/404_cloud.png similarity index 100% rename from oms-vue/src/assets/404_images/404_cloud.png rename to vue3/src/assets/images/404_cloud.png diff --git a/vue3/src/assets/images/login-bg-dark.jpg b/vue3/src/assets/images/login-bg-dark.jpg new file mode 100644 index 00000000..988011d3 Binary files /dev/null and b/vue3/src/assets/images/login-bg-dark.jpg differ diff --git a/vue3/src/assets/images/login-bg.jpg b/vue3/src/assets/images/login-bg.jpg new file mode 100644 index 00000000..f6a92712 Binary files /dev/null and b/vue3/src/assets/images/login-bg.jpg differ diff --git a/vue3/src/assets/logo.png b/vue3/src/assets/logo.png new file mode 100644 index 00000000..f3d2503f Binary files /dev/null and b/vue3/src/assets/logo.png differ diff --git a/vue3/src/components/Breadcrumb/index.vue b/vue3/src/components/Breadcrumb/index.vue new file mode 100644 index 00000000..2bf19c51 --- /dev/null +++ b/vue3/src/components/Breadcrumb/index.vue @@ -0,0 +1,103 @@ + + + + + diff --git a/vue3/src/components/Dictionary/index.vue b/vue3/src/components/Dictionary/index.vue new file mode 100644 index 00000000..b2e01d0f --- /dev/null +++ b/vue3/src/components/Dictionary/index.vue @@ -0,0 +1,73 @@ + + + diff --git a/vue3/src/components/GithubCorner/index.vue b/vue3/src/components/GithubCorner/index.vue new file mode 100644 index 00000000..4b0bba98 --- /dev/null +++ b/vue3/src/components/GithubCorner/index.vue @@ -0,0 +1,62 @@ + + + diff --git a/vue3/src/components/Hamburger/index.vue b/vue3/src/components/Hamburger/index.vue new file mode 100644 index 00000000..a9049d70 --- /dev/null +++ b/vue3/src/components/Hamburger/index.vue @@ -0,0 +1,39 @@ + + + + diff --git a/vue3/src/components/IconSelect/index.vue b/vue3/src/components/IconSelect/index.vue new file mode 100644 index 00000000..8b26e7c5 --- /dev/null +++ b/vue3/src/components/IconSelect/index.vue @@ -0,0 +1,164 @@ + + + + + diff --git a/vue3/src/components/LangSelect/index.vue b/vue3/src/components/LangSelect/index.vue new file mode 100644 index 00000000..13feaf40 --- /dev/null +++ b/vue3/src/components/LangSelect/index.vue @@ -0,0 +1,38 @@ + + + diff --git a/vue3/src/components/Pagination/index.vue b/vue3/src/components/Pagination/index.vue new file mode 100644 index 00000000..84e8f3e0 --- /dev/null +++ b/vue3/src/components/Pagination/index.vue @@ -0,0 +1,88 @@ + + + + + diff --git a/vue3/src/components/RightPanel/index.vue b/vue3/src/components/RightPanel/index.vue new file mode 100644 index 00000000..9dc5509c --- /dev/null +++ b/vue3/src/components/RightPanel/index.vue @@ -0,0 +1,136 @@ + + + + + diff --git a/vue3/src/components/SizeSelect/index.vue b/vue3/src/components/SizeSelect/index.vue new file mode 100644 index 00000000..f0800ba2 --- /dev/null +++ b/vue3/src/components/SizeSelect/index.vue @@ -0,0 +1,36 @@ + + + diff --git a/vue3/src/components/SvgIcon/index.vue b/vue3/src/components/SvgIcon/index.vue new file mode 100644 index 00000000..07b65e8d --- /dev/null +++ b/vue3/src/components/SvgIcon/index.vue @@ -0,0 +1,45 @@ + + + + + diff --git a/vue3/src/components/Upload/MultiUpload.vue b/vue3/src/components/Upload/MultiUpload.vue new file mode 100644 index 00000000..735f7a3e --- /dev/null +++ b/vue3/src/components/Upload/MultiUpload.vue @@ -0,0 +1,139 @@ + + + + + diff --git a/vue3/src/components/Upload/SingleUpload.vue b/vue3/src/components/Upload/SingleUpload.vue new file mode 100644 index 00000000..631dc28e --- /dev/null +++ b/vue3/src/components/Upload/SingleUpload.vue @@ -0,0 +1,77 @@ + + + + + diff --git a/vue3/src/components/WangEditor/index.vue b/vue3/src/components/WangEditor/index.vue new file mode 100644 index 00000000..2f4c6782 --- /dev/null +++ b/vue3/src/components/WangEditor/index.vue @@ -0,0 +1,74 @@ + + + + + diff --git a/vue3/src/directive/index.ts b/vue3/src/directive/index.ts new file mode 100644 index 00000000..9c22eb69 --- /dev/null +++ b/vue3/src/directive/index.ts @@ -0,0 +1,9 @@ +import type { App } from "vue"; + +import { hasPerm } from "./permission"; + +// 全局注册 directive +export function setupDirective(app: App) { + // 使 v-hasPerm 在所有组件中都可用 + app.directive("hasPerm", hasPerm); +} diff --git a/vue3/src/directive/permission/index.ts b/vue3/src/directive/permission/index.ts new file mode 100644 index 00000000..2bd2c705 --- /dev/null +++ b/vue3/src/directive/permission/index.ts @@ -0,0 +1,55 @@ +import { useUserStoreHook } from "@/store/modules/user"; +import { Directive, DirectiveBinding } from "vue"; + +/** + * 按钮权限 + */ +export const hasPerm: Directive = { + mounted(el: HTMLElement, binding: DirectiveBinding) { + // 「超级管理员」拥有所有的按钮权限 + const { roles, perms } = useUserStoreHook().user; + if (roles.includes("ROOT")) { + return true; + } + // 「其他角色」按钮权限校验 + const { value } = binding; + if (value) { + const requiredPerms = value; // DOM绑定需要的按钮权限标识 + + const hasPerm = perms?.some((perm) => { + return requiredPerms.includes(perm); + }); + + if (!hasPerm) { + el.parentNode && el.parentNode.removeChild(el); + } + } else { + throw new Error( + "need perms! Like v-has-perm=\"['sys:user:add','sys:user:edit']\"" + ); + } + }, +}; + +/** + * 角色权限 + */ +export const hasRole: Directive = { + mounted(el: HTMLElement, binding: DirectiveBinding) { + const { value } = binding; + + if (value) { + const requiredRoles = value; // DOM绑定需要的角色编码 + const { roles } = useUserStoreHook().user; + const hasRole = roles.some((perm) => { + return requiredRoles.includes(perm); + }); + + if (!hasRole) { + el.parentNode && el.parentNode.removeChild(el); + } + } else { + throw new Error("need roles! Like v-has-role=\"['admin','test']\""); + } + }, +}; diff --git a/vue3/src/enums/MenuTypeEnum.ts b/vue3/src/enums/MenuTypeEnum.ts new file mode 100644 index 00000000..65e591db --- /dev/null +++ b/vue3/src/enums/MenuTypeEnum.ts @@ -0,0 +1,19 @@ +export enum MenuTypeEnum { + /** + * 目录 + */ + CATALOG = "CATALOG", + /** + * 菜单 + */ + MENU = "MENU", + + /** + * 按钮 + */ + BUTTON = "BUTTON", + /** + * 外链 + */ + EXTLINK = "EXTLINK", +} diff --git a/vue3/src/lang/index.ts b/vue3/src/lang/index.ts new file mode 100644 index 00000000..18c02316 --- /dev/null +++ b/vue3/src/lang/index.ts @@ -0,0 +1,25 @@ +import { createI18n } from "vue-i18n"; +import { useAppStore } from "@/store/modules/app"; +// 本地语言包 +import enLocale from "./package/en"; +import zhCnLocale from "./package/zh-cn"; + +const appStore = useAppStore(); + +const messages = { + "zh-cn": { + ...zhCnLocale, + }, + en: { + ...enLocale, + }, +}; + +const i18n = createI18n({ + legacy: false, + locale: appStore.language, + messages: messages, + globalInjection: true, +}); + +export default i18n; diff --git a/vue3/src/lang/package/en.ts b/vue3/src/lang/package/en.ts new file mode 100644 index 00000000..e7bbb53c --- /dev/null +++ b/vue3/src/lang/package/en.ts @@ -0,0 +1,21 @@ +export default { + // 路由国际化 + route: { + dashboard: "Dashboard", + document: "Document", + }, + // 登录页面国际化 + login: { + username: "Username", + password: "Password", + login: "Login", + captchaCode: "Verify Code", + }, + // 导航栏国际化 + navbar: { + dashboard: "Dashboard", + logout: "Logout", + document: "Document", + gitee: "Gitee", + }, +}; diff --git a/vue3/src/lang/package/zh-cn.ts b/vue3/src/lang/package/zh-cn.ts new file mode 100644 index 00000000..ed901433 --- /dev/null +++ b/vue3/src/lang/package/zh-cn.ts @@ -0,0 +1,21 @@ +export default { + // 路由国际化 + route: { + dashboard: "首页", + document: "项目文档", + }, + // 登录页面国际化 + login: { + username: "用户名", + password: "密码", + login: "登 录", + captchaCode: "验证码", + }, + // 导航栏国际化 + navbar: { + dashboard: "首页", + logout: "注销", + document: "项目文档", + gitee: "码云", + }, +}; diff --git a/vue3/src/layout/components/AppMain.vue b/vue3/src/layout/components/AppMain.vue new file mode 100644 index 00000000..4d24b3ff --- /dev/null +++ b/vue3/src/layout/components/AppMain.vue @@ -0,0 +1,74 @@ + + + + + diff --git a/vue3/src/layout/components/NavBar/NavRight.vue b/vue3/src/layout/components/NavBar/NavRight.vue new file mode 100644 index 00000000..fa42222b --- /dev/null +++ b/vue3/src/layout/components/NavBar/NavRight.vue @@ -0,0 +1,120 @@ + + + diff --git a/vue3/src/layout/components/NavBar/index.vue b/vue3/src/layout/components/NavBar/index.vue new file mode 100644 index 00000000..e935d450 --- /dev/null +++ b/vue3/src/layout/components/NavBar/index.vue @@ -0,0 +1,42 @@ + + + + + diff --git a/vue3/src/layout/components/Settings/index.vue b/vue3/src/layout/components/Settings/index.vue new file mode 100644 index 00000000..e8882105 --- /dev/null +++ b/vue3/src/layout/components/Settings/index.vue @@ -0,0 +1,268 @@ + + + + + diff --git a/vue3/src/layout/components/Sidebar/Item.vue b/vue3/src/layout/components/Sidebar/Item.vue new file mode 100644 index 00000000..6524a0a8 --- /dev/null +++ b/vue3/src/layout/components/Sidebar/Item.vue @@ -0,0 +1,28 @@ + + + + + diff --git a/vue3/src/layout/components/Sidebar/LeftMenu.vue b/vue3/src/layout/components/Sidebar/LeftMenu.vue new file mode 100644 index 00000000..97c4fbe6 --- /dev/null +++ b/vue3/src/layout/components/Sidebar/LeftMenu.vue @@ -0,0 +1,66 @@ + + diff --git a/vue3/src/layout/components/Sidebar/Link.vue b/vue3/src/layout/components/Sidebar/Link.vue new file mode 100644 index 00000000..536a5d60 --- /dev/null +++ b/vue3/src/layout/components/Sidebar/Link.vue @@ -0,0 +1,37 @@ + + + diff --git a/vue3/src/layout/components/Sidebar/Logo.vue b/vue3/src/layout/components/Sidebar/Logo.vue new file mode 100644 index 00000000..468d7ffe --- /dev/null +++ b/vue3/src/layout/components/Sidebar/Logo.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/vue3/src/layout/components/Sidebar/SidebarItem.vue b/vue3/src/layout/components/Sidebar/SidebarItem.vue new file mode 100644 index 00000000..fefbae68 --- /dev/null +++ b/vue3/src/layout/components/Sidebar/SidebarItem.vue @@ -0,0 +1,138 @@ + + + + diff --git a/vue3/src/layout/components/Sidebar/TopMenu.vue b/vue3/src/layout/components/Sidebar/TopMenu.vue new file mode 100644 index 00000000..485f83d9 --- /dev/null +++ b/vue3/src/layout/components/Sidebar/TopMenu.vue @@ -0,0 +1,71 @@ + + + diff --git a/vue3/src/layout/components/Sidebar/index.vue b/vue3/src/layout/components/Sidebar/index.vue new file mode 100644 index 00000000..08206d0a --- /dev/null +++ b/vue3/src/layout/components/Sidebar/index.vue @@ -0,0 +1,111 @@ + + + + diff --git a/vue3/src/layout/components/TagsView/ScrollPane.vue b/vue3/src/layout/components/TagsView/ScrollPane.vue new file mode 100644 index 00000000..7e8cad17 --- /dev/null +++ b/vue3/src/layout/components/TagsView/ScrollPane.vue @@ -0,0 +1,121 @@ + + + + + diff --git a/vue3/src/layout/components/TagsView/index.vue b/vue3/src/layout/components/TagsView/index.vue new file mode 100644 index 00000000..093b6da2 --- /dev/null +++ b/vue3/src/layout/components/TagsView/index.vue @@ -0,0 +1,432 @@ + + + + + diff --git a/vue3/src/layout/components/index.ts b/vue3/src/layout/components/index.ts new file mode 100644 index 00000000..616c59b0 --- /dev/null +++ b/vue3/src/layout/components/index.ts @@ -0,0 +1,4 @@ +export { default as Navbar } from "./NavBar/index.vue"; +export { default as AppMain } from "./AppMain.vue"; +export { default as Settings } from "./Settings/index.vue"; +export { default as TagsView } from "./TagsView/index.vue"; diff --git a/vue3/src/layout/index.vue b/vue3/src/layout/index.vue new file mode 100644 index 00000000..affb973b --- /dev/null +++ b/vue3/src/layout/index.vue @@ -0,0 +1,236 @@ + + + + + diff --git a/vue3/src/layout/main.vue b/vue3/src/layout/main.vue new file mode 100644 index 00000000..3e8deb45 --- /dev/null +++ b/vue3/src/layout/main.vue @@ -0,0 +1,87 @@ + + + + + diff --git a/vue3/src/main.ts b/vue3/src/main.ts new file mode 100644 index 00000000..3b57f7c4 --- /dev/null +++ b/vue3/src/main.ts @@ -0,0 +1,26 @@ +import { createApp } from "vue"; +import App from "./App.vue"; +import router from "@/router"; +import { setupStore } from "@/store"; +import { setupDirective } from "@/directive"; + +import "@/permission"; + +// 本地SVG图标 +import "virtual:svg-icons-register"; + +// 国际化 +import i18n from "@/lang/index"; + +// 样式 +import "element-plus/theme-chalk/dark/css-vars.css"; +import "@/styles/index.scss"; +import "uno.css"; + +const app = createApp(App); +// 全局注册 自定义指令(directive) +setupDirective(app); +// 全局注册 状态管理(store) +setupStore(app); + +app.use(router).use(i18n).mount("#app"); diff --git a/vue3/src/permission.ts b/vue3/src/permission.ts new file mode 100644 index 00000000..29db962c --- /dev/null +++ b/vue3/src/permission.ts @@ -0,0 +1,62 @@ +import router from "@/router"; +import { useUserStoreHook } from "@/store/modules/user"; +import { usePermissionStoreHook } from "@/store/modules/permission"; + +import NProgress from "nprogress"; +import "nprogress/nprogress.css"; + +NProgress.configure({ showSpinner: false }); // 进度条 + +const permissionStore = usePermissionStoreHook(); + +// 白名单路由 +const whiteList = ["/login"]; + +router.beforeEach(async (to, from, next) => { + NProgress.start(); + const hasToken = localStorage.getItem("accessToken"); + if (hasToken) { + if (to.path === "/login") { + // 如果已登录,跳转首页 + next({ path: "/" }); + NProgress.done(); + } else { + const userStore = useUserStoreHook(); + const hasRoles = userStore.user.roles && userStore.user.roles.length > 0; + if (hasRoles) { + // 未匹配到任何路由,跳转404 + if (to.matched.length === 0) { + from.name ? next({ name: from.name }) : next("/404"); + } else { + next(); + } + } else { + try { + const { roles } = await userStore.getUserInfo(); + const accessRoutes = await permissionStore.generateRoutes(roles); + accessRoutes.forEach((route) => { + router.addRoute(route); + }); + next({ ...to, replace: true }); + } catch (error) { + // 移除 token 并跳转登录页 + await userStore.resetToken(); + next(`/login?redirect=${to.path}`); + NProgress.done(); + } + } + } + } else { + // 未登录可以访问白名单页面 + if (whiteList.indexOf(to.path) !== -1) { + next(); + } else { + next(`/login?redirect=${to.path}`); + NProgress.done(); + } + } +}); + +router.afterEach(() => { + NProgress.done(); +}); diff --git a/vue3/src/router/index.ts b/vue3/src/router/index.ts new file mode 100644 index 00000000..17a249a8 --- /dev/null +++ b/vue3/src/router/index.ts @@ -0,0 +1,127 @@ +import { createRouter, createWebHashHistory, RouteRecordRaw } from "vue-router"; + +export const Layout = () => import("@/layout/index.vue"); + +// 静态路由 +export const constantRoutes: RouteRecordRaw[] = [ + { + path: "/redirect", + component: Layout, + meta: { hidden: true }, + children: [ + { + path: "/redirect/:path(.*)", + component: () => import("@/views/redirect/index.vue"), + }, + ], + }, + + { + path: "/login", + component: () => import("@/views/login/index.vue"), + meta: { hidden: true }, + }, + + { + path: "/", + name: "/", + component: Layout, + redirect: "/dashboard", + children: [ + { + path: "dashboard", + component: () => import("@/views/dashboard/index.vue"), + name: "Dashboard", // 用于 keep-alive, 必须与SFC自动推导或者显示声明的组件name一致 + // https://cn.vuejs.org/guide/built-ins/keep-alive.html#include-exclude + meta: { + title: "dashboard", + icon: "homepage", + affix: true, + keepAlive: true, + alwaysShow: false, + }, + }, + { + path: "401", + component: () => import("@/views/error-page/401.vue"), + meta: { hidden: true }, + }, + { + path: "404", + component: () => import("@/views/error-page/404.vue"), + meta: { hidden: true }, + }, + ], + }, + + // 外部链接 + // { + // path: "/external-link", + // component: Layout, + // children: [ { + // component: () => import("@/views/external-link/index.vue"), + // path: "https://www.cnblogs.com/haoxianrui/", + // meta: { title: "外部链接", icon: "link" }, + // }, + // ], + // }, + // 多级嵌套路由 + /* { + path: '/nested', + component: Layout, + redirect: '/nested/level1/level2', + name: 'Nested', + meta: {title: '多级菜单', icon: 'nested'}, + children: [ + { + path: 'level1', + component: () => import('@/views/nested/level1/index.vue'), + name: 'Level1', + meta: {title: '菜单一级'}, + redirect: '/nested/level1/level2', + children: [ + { + path: 'level2', + component: () => import('@/views/nested/level1/level2/index.vue'), + name: 'Level2', + meta: {title: '菜单二级'}, + redirect: '/nested/level1/level2/level3', + children: [ + { + path: 'level3-1', + component: () => import('@/views/nested/level1/level2/level3/index1.vue'), + name: 'Level3-1', + meta: {title: '菜单三级-1'} + }, + { + path: 'level3-2', + component: () => import('@/views/nested/level1/level2/level3/index2.vue'), + name: 'Level3-2', + meta: {title: '菜单三级-2'} + } + ] + } + ] + }, + ] + }*/ +]; + +/** + * 创建路由 + */ +const router = createRouter({ + history: createWebHashHistory(), + routes: constantRoutes as RouteRecordRaw[], + // 刷新时,滚动条位置还原 + scrollBehavior: () => ({ left: 0, top: 0 }), +}); + +/** + * 重置路由 + */ +export function resetRouter() { + router.replace({ path: "/login" }); +} + +export default router; diff --git a/vue3/src/settings.ts b/vue3/src/settings.ts new file mode 100644 index 00000000..dcbf976f --- /dev/null +++ b/vue3/src/settings.ts @@ -0,0 +1,17 @@ +const defaultSettings: AppSettings = { + title: "启航电商OMS" + + "", + version: "v2.8.2", + showSettings: true, + tagsView: true, + fixedHeader: false, + sidebarLogo: true, + layout: "left", + theme: "light", + size: "default", + language: "zh-cn", + themeColor: "#409EFF", + watermark: { enabled: false, content: "启航电商" }, +}; + +export default defaultSettings; diff --git a/vue3/src/store/index.ts b/vue3/src/store/index.ts new file mode 100644 index 00000000..e22b67c4 --- /dev/null +++ b/vue3/src/store/index.ts @@ -0,0 +1,11 @@ +import type { App } from "vue"; +import { createPinia } from "pinia"; + +const store = createPinia(); + +// 全局注册 store +export function setupStore(app: App) { + app.use(store); +} + +export { store }; diff --git a/vue3/src/store/modules/app.ts b/vue3/src/store/modules/app.ts new file mode 100644 index 00000000..e2e82356 --- /dev/null +++ b/vue3/src/store/modules/app.ts @@ -0,0 +1,93 @@ +import { defineStore } from "pinia"; +import { useStorage } from "@vueuse/core"; +import defaultSettings from "@/settings"; + +// 导入 Element Plus 中英文语言包 +import zhCn from "element-plus/es/locale/lang/zh-cn"; +import en from "element-plus/es/locale/lang/en"; + +// setup +export const useAppStore = defineStore("app", () => { + // state + const device = useStorage("device", "desktop"); + const size = useStorage("size", defaultSettings.size); + const language = useStorage("language", defaultSettings.language); + + const sidebarStatus = useStorage("sidebarStatus", "closed"); + + const sidebar = reactive({ + opened: sidebarStatus.value !== "closed", + withoutAnimation: false, + }); + const activeTopMenu = useStorage("activeTop", ""); + /** + * 根据语言标识读取对应的语言包 + */ + const locale = computed(() => { + if (language?.value == "en") { + return en; + } else { + return zhCn; + } + }); + + // actions + function toggleSidebar() { + sidebar.opened = !sidebar.opened; + sidebar.withoutAnimation = false; + if (sidebar.opened) { + sidebarStatus.value = "opened"; + } else { + sidebarStatus.value = "closed"; + } + } + + function closeSideBar(withoutAnimation: boolean) { + sidebar.opened = false; + sidebar.withoutAnimation = withoutAnimation; + sidebarStatus.value = "closed"; + } + + function openSideBar(withoutAnimation: boolean) { + sidebar.opened = true; + sidebar.withoutAnimation = withoutAnimation; + sidebarStatus.value = "opened"; + } + + function toggleDevice(val: string) { + device.value = val; + } + + function changeSize(val: string) { + size.value = val; + } + /** + * 切换语言 + * + * @param val + */ + function changeLanguage(val: string) { + language.value = val; + } + /** + * 混合模式顶部切换 + */ + function changeTopActive(val: string) { + activeTopMenu.value = val; + } + return { + device, + sidebar, + language, + locale, + size, + activeTopMenu, + toggleDevice, + changeSize, + changeLanguage, + toggleSidebar, + closeSideBar, + openSideBar, + changeTopActive, + }; +}); diff --git a/vue3/src/store/modules/permission.ts b/vue3/src/store/modules/permission.ts new file mode 100644 index 00000000..f133fa1a --- /dev/null +++ b/vue3/src/store/modules/permission.ts @@ -0,0 +1,119 @@ +import { RouteRecordRaw } from "vue-router"; +import { defineStore } from "pinia"; +import { constantRoutes } from "@/router"; +import { store } from "@/store"; +import { listRoutes } from "@/api/menu"; + +const modules = import.meta.glob("../../views/**/**.vue"); +const Layout = () => import("@/layout/index.vue"); + +/** + * Use meta.role to determine if the current user has permission + * + * @param roles 用户角色集合 + * @param route 路由 + * @returns + */ +const hasPermission = (roles: string[], route: RouteRecordRaw) => { + if (route.meta && route.meta.roles) { + // 角色【超级管理员】拥有所有权限,忽略校验 + if (roles.includes("ROOT")) { + return true; + } + return roles.some((role) => { + if (route.meta?.roles) { + return route.meta.roles.includes(role); + } + }); + } + return false; +}; + +/** + * 递归过滤有权限的异步(动态)路由 + * + * @param routes 接口返回的异步(动态)路由 + * @param roles 用户角色集合 + * @returns 返回用户有权限的异步(动态)路由 + */ +const filterAsyncRoutes = (routes: RouteRecordRaw[], roles: string[]) => { + const asyncRoutes: RouteRecordRaw[] = []; + + routes.forEach((route) => { + const tmpRoute = { ...route }; // ES6扩展运算符复制新对象 + if (!route.name) { + tmpRoute.name = route.path; + } + // 判断用户(角色)是否有该路由的访问权限 + if (hasPermission(roles, tmpRoute)) { + if (tmpRoute.component?.toString() == "Layout") { + tmpRoute.component = Layout; + } else { + const component = modules[`../../views/${tmpRoute.component}.vue`]; + if (component) { + tmpRoute.component = component; + } else { + tmpRoute.component = modules[`../../views/error-page/404.vue`]; + } + } + + if (tmpRoute.children) { + tmpRoute.children = filterAsyncRoutes(tmpRoute.children, roles); + } + + asyncRoutes.push(tmpRoute); + } + }); + + return asyncRoutes; +}; + +// setup +export const usePermissionStore = defineStore("permission", () => { + // state + const routes = ref([]); + + // actions + function setRoutes(newRoutes: RouteRecordRaw[]) { + routes.value = constantRoutes.concat(newRoutes); + } + /** + * 生成动态路由 + * + * @param roles 用户角色集合 + * @returns + */ + function generateRoutes(roles: string[]) { + return new Promise((resolve, reject) => { + // 接口获取所有路由 + listRoutes() + .then(({ data: asyncRoutes }) => { + // 根据角色获取有访问权限的路由 + const accessedRoutes = filterAsyncRoutes(asyncRoutes, roles); + setRoutes(accessedRoutes); + resolve(accessedRoutes); + }) + .catch((error) => { + reject(error); + }); + }); + } + + /** + * 混合模式左侧菜单 + */ + const mixLeftMenu = ref([]); + function getMixLeftMenu(activeTop: string) { + routes.value.forEach((item) => { + if (item.path === activeTop) { + mixLeftMenu.value = item.children || []; + } + }); + } + return { routes, setRoutes, generateRoutes, getMixLeftMenu, mixLeftMenu }; +}); + +// 非setup +export function usePermissionStoreHook() { + return usePermissionStore(store); +} diff --git a/vue3/src/store/modules/settings.ts b/vue3/src/store/modules/settings.ts new file mode 100644 index 00000000..3c037587 --- /dev/null +++ b/vue3/src/store/modules/settings.ts @@ -0,0 +1,64 @@ +import { defineStore } from "pinia"; +import defaultSettings from "@/settings"; + +export const useSettingsStore = defineStore("setting", () => { + const title = defaultSettings.title; + const version = defaultSettings.version; + + const tagsView = useStorage("tagsView", defaultSettings.tagsView); + + const showSettings = ref(defaultSettings.showSettings); + const sidebarLogo = ref(defaultSettings.sidebarLogo); + const fixedHeader = useStorage( + "fixedHeader", + defaultSettings.fixedHeader + ); + const layout = useStorage("layout", defaultSettings.layout); + const themeColor = useStorage( + "themeColor", + defaultSettings.themeColor + ); + const theme = useStorage("theme", defaultSettings.theme); + + // Whether to enable watermark + const watermark = useStorage("watermark", defaultSettings.watermark); + + const settingsMap: Record> = { + showSettings, + fixedHeader, + tagsView, + sidebarLogo, + layout, + themeColor, + theme, + watermark: watermark.value, + }; + + function changeSetting({ key, value }: { key: string; value: any }) { + const setting = settingsMap[key]; + if (setting !== undefined) { + setting.value = value; + if (key === "theme") { + if (value === "dark") { + document.documentElement.classList.add("dark"); + } else { + document.documentElement.classList.remove("dark"); + } + } + } + } + + return { + title, + version, + showSettings, + tagsView, + fixedHeader, + sidebarLogo, + layout, + themeColor, + changeSetting, + theme, + watermark, + }; +}); diff --git a/vue3/src/store/modules/tagsView.ts b/vue3/src/store/modules/tagsView.ts new file mode 100644 index 00000000..6327ca99 --- /dev/null +++ b/vue3/src/store/modules/tagsView.ts @@ -0,0 +1,213 @@ +import { defineStore } from "pinia"; + +export const useTagsViewStore = defineStore("tagsView", () => { + const visitedViews = ref([]); + const cachedViews = ref([]); + + /** + * 添加已访问视图到已访问视图列表中 + */ + function addVisitedView(view: TagView) { + // 如果已经存在于已访问的视图列表中,则不再添加 + if (visitedViews.value.some((v) => v.fullPath === view.fullPath)) { + return; + } + // 如果视图是固定的(affix),则在已访问的视图列表的开头添加 + if (view.affix) { + visitedViews.value.unshift(view); + } else { + // 如果视图不是固定的,则在已访问的视图列表的末尾添加 + visitedViews.value.push(view); + } + } + + /** + * 添加缓存视图到缓存视图列表中 + */ + function addCachedView(view: TagView) { + const viewName = view.name; + // 如果缓存视图名称已经存在于缓存视图列表中,则不再添加 + if (cachedViews.value.includes(viewName)) { + return; + } + + // 如果视图需要缓存(keepAlive),则将其路由名称添加到缓存视图列表中 + if (view.keepAlive) { + cachedViews.value.push(viewName); + } + } + + /** + * 从已访问视图列表中删除指定的视图 + */ + function delVisitedView(view: TagView) { + return new Promise((resolve) => { + for (const [i, v] of visitedViews.value.entries()) { + // 找到与指定视图路径匹配的视图,在已访问视图列表中删除该视图 + if (v.path === view.path) { + visitedViews.value.splice(i, 1); + break; + } + } + resolve([...visitedViews.value]); + }); + } + + function delCachedView(view: TagView) { + const viewName = view.name; + return new Promise((resolve) => { + const index = cachedViews.value.indexOf(viewName); + index > -1 && cachedViews.value.splice(index, 1); + resolve([...cachedViews.value]); + }); + } + + function delOtherVisitedViews(view: TagView) { + return new Promise((resolve) => { + visitedViews.value = visitedViews.value.filter((v) => { + return v?.affix || v.path === view.path; + }); + resolve([...visitedViews.value]); + }); + } + + function delOtherCachedViews(view: TagView) { + const viewName = view.name as string; + return new Promise((resolve) => { + const index = cachedViews.value.indexOf(viewName); + if (index > -1) { + cachedViews.value = cachedViews.value.slice(index, index + 1); + } else { + // if index = -1, there is no cached tags + cachedViews.value = []; + } + resolve([...cachedViews.value]); + }); + } + + function updateVisitedView(view: TagView) { + for (let v of visitedViews.value) { + if (v.path === view.path) { + v = Object.assign(v, view); + break; + } + } + } + + function addView(view: TagView) { + addVisitedView(view); + addCachedView(view); + } + + function delView(view: TagView) { + return new Promise((resolve) => { + delVisitedView(view); + delCachedView(view); + resolve({ + visitedViews: [...visitedViews.value], + cachedViews: [...cachedViews.value], + }); + }); + } + + function delOtherViews(view: TagView) { + return new Promise((resolve) => { + delOtherVisitedViews(view); + delOtherCachedViews(view); + resolve({ + visitedViews: [...visitedViews.value], + cachedViews: [...cachedViews.value], + }); + }); + } + + function delLeftViews(view: TagView) { + return new Promise((resolve) => { + const currIndex = visitedViews.value.findIndex( + (v) => v.path === view.path + ); + if (currIndex === -1) { + return; + } + visitedViews.value = visitedViews.value.filter((item, index) => { + if (index >= currIndex || item?.affix) { + return true; + } + + const cacheIndex = cachedViews.value.indexOf(item.name); + if (cacheIndex > -1) { + cachedViews.value.splice(cacheIndex, 1); + } + return false; + }); + resolve({ + visitedViews: [...visitedViews.value], + }); + }); + } + function delRightViews(view: TagView) { + return new Promise((resolve) => { + const currIndex = visitedViews.value.findIndex( + (v) => v.path === view.path + ); + if (currIndex === -1) { + return; + } + visitedViews.value = visitedViews.value.filter((item, index) => { + if (index <= currIndex || item?.affix) { + return true; + } + }); + resolve({ + visitedViews: [...visitedViews.value], + }); + }); + } + + function delAllViews() { + return new Promise((resolve) => { + const affixTags = visitedViews.value.filter((tag) => tag?.affix); + visitedViews.value = affixTags; + cachedViews.value = []; + resolve({ + visitedViews: [...visitedViews.value], + cachedViews: [...cachedViews.value], + }); + }); + } + + function delAllVisitedViews() { + return new Promise((resolve) => { + const affixTags = visitedViews.value.filter((tag) => tag?.affix); + visitedViews.value = affixTags; + resolve([...visitedViews.value]); + }); + } + + function delAllCachedViews() { + return new Promise((resolve) => { + cachedViews.value = []; + resolve([...cachedViews.value]); + }); + } + + return { + visitedViews, + cachedViews, + addVisitedView, + addCachedView, + delVisitedView, + delCachedView, + delOtherVisitedViews, + delOtherCachedViews, + updateVisitedView, + addView, + delView, + delOtherViews, + delLeftViews, + delRightViews, + delAllViews, + delAllVisitedViews, + delAllCachedViews, + }; +}); diff --git a/vue3/src/store/modules/user.ts b/vue3/src/store/modules/user.ts new file mode 100644 index 00000000..c9558e19 --- /dev/null +++ b/vue3/src/store/modules/user.ts @@ -0,0 +1,100 @@ +import { defineStore } from "pinia"; + +import { loginApi, logoutApi } from "@/api/auth"; +import { getUserInfoApi } from "@/api/user"; +import { resetRouter } from "@/router"; +import { store } from "@/store"; + +import { LoginData } from "@/api/auth/types"; +import { UserInfo } from "@/api/user/types"; + +import { useStorage } from "@vueuse/core"; + +export const useUserStore = defineStore("user", () => { + const user: UserInfo = { + roles: [], + perms: [], + }; + + const token = useStorage("accessToken", ""); + + /** + * 登录 + * + * @param {LoginData} + * @returns + */ + function login(loginData: LoginData) { + return new Promise((resolve, reject) => { + loginApi(loginData) + .then((response) => { + const { tokenType, accessToken } = response.data; + token.value = tokenType + " " + accessToken; // Bearer eyJhbGciOiJIUzI1NiJ9.xxx.xxx + resolve(); + }) + .catch((error) => { + reject(error); + }); + }); + } + + // 获取信息(用户昵称、头像、角色集合、权限集合) + function getUserInfo() { + return new Promise((resolve, reject) => { + getUserInfoApi() + .then(({ data }) => { + if (!data) { + reject("Verification failed, please Login again."); + return; + } + if (!data.roles || data.roles.length <= 0) { + reject("getUserInfo: roles must be a non-null array!"); + return; + } + Object.assign(user, { ...data }); + resolve(data); + }) + .catch((error) => { + reject(error); + }); + }); + } + + // user logout + function logout() { + return new Promise((resolve, reject) => { + logoutApi() + .then(() => { + token.value = ""; + location.reload(); // 清空路由 + resolve(); + }) + .catch((error) => { + reject(error); + }); + }); + } + + // remove token + function resetToken() { + return new Promise((resolve) => { + token.value = ""; + resetRouter(); + resolve(); + }); + } + + return { + token, + user, + login, + getUserInfo, + logout, + resetToken, + }; +}); + +// 非setup +export function useUserStoreHook() { + return useUserStore(store); +} diff --git a/vue3/src/styles/dark.scss b/vue3/src/styles/dark.scss new file mode 100644 index 00000000..fb548a2f --- /dev/null +++ b/vue3/src/styles/dark.scss @@ -0,0 +1,47 @@ +html.dark { + --menuBg: var(--el-bg-color-overlay); + --menuText: #fff; + --menuActiveText: var(--el-menu-active-color); + --menuHover: rgb(0 0 0 / 20%); + --subMenuBg: var(--el-menu-bg-color); + --subMenuActiveText: var(--el-menu-active-color); + --subMenuHover: rgb(0 0 0 / 20%); + + // wang-editor toolbar + --w-e-toolbar-bg-color: var(--el-bg-color-overlay); + --w-e-toolbar-color: var(--el-text-color-regulary); + --w-e-toolbar-active-bg-color: var(--el-bg-color-page); + --w-e-toolbar-active-color: var(--el-color-info-dark-2); + --w-e-toolbar-disabled-color: var(--el-disabled-text-color); + --w-e-toolbar-border-color: var(--el-color-info-light-8); + + // wang-editor textarea + --w-e-textarea-bg-color: var(--el-bg-color-overlay); + --w-e-textarea-color: var(--el-text-color-regulary); + --w-e-textarea-slight-border-color: var(--el-color-primary); + --w-e-textarea-slight-bg-color: rgb(var(--el-color-primary-rgb) 0.1); + --w-e-textarea-selected-border-color: var(--el-color-primary); + --w-e-textarea-border-color: var(--el-color-info-light-5); + + // // wang-editor modal + --w-e-modal-button-bg-color: var(--el-button-bg-color); + --w-e-modal-button-border-color: var(--el-color-info-light-3); + + .navbar { + background-color: var(--el-bg-color); + + .setting-container .setting-item:hover { + background: var(--el-fill-color-light); + } + } + + .right-panel-btn { + background-color: var(--el-color-primary-dark); + } + + .sidebar-container { + .el-menu-item.is-active .svg-icon { + fill: var(--el-color-primary); + } + } +} diff --git a/vue3/src/styles/index.scss b/vue3/src/styles/index.scss new file mode 100644 index 00000000..e9250634 --- /dev/null +++ b/vue3/src/styles/index.scss @@ -0,0 +1,31 @@ +@import "./transition"; +@import "./sidebar"; +@import "./reset"; +@import "./dark"; + +.app-container { + padding: 10px; +} + +.search-container { + padding: 18px 0 0 10px; + margin-bottom: 10px; + background-color: var(--el-bg-color-overlay); + border: 1px solid var(--el-border-color-light); + border-radius: 4px; + box-shadow: var(--el-box-shadow-light); +} + +.table-container > .el-card__header { + padding: calc(var(--el-card-padding) - 8px) var(--el-card-padding); +} + +.link-type, +.link-type:focus { + color: #337ab7; + cursor: pointer; + + &:hover { + color: rgb(32 160 255); + } +} diff --git a/vue3/src/styles/reset.scss b/vue3/src/styles/reset.scss new file mode 100644 index 00000000..9b19e4c4 --- /dev/null +++ b/vue3/src/styles/reset.scss @@ -0,0 +1,75 @@ +*, +::before, +::after { + box-sizing: border-box; + border-color: currentcolor; + border-style: solid; + border-width: 0; +} + +#app { + width: 100%; + height: 100%; +} + +html { + box-sizing: border-box; + width: 100%; + height: 100%; + line-height: 1.5; + tab-size: 4; + text-size-adjust: 100%; +} + +body { + width: 100%; + height: 100%; + margin: 0; + font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", + "Microsoft YaHei", "微软雅黑", Arial, sans-serif; + line-height: inherit; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + text-rendering: optimizelegibility; +} + +a { + color: inherit; + text-decoration: inherit; +} + +img, +svg { + display: inline-block; +} + +svg { + vertical-align: -0.15em; //因icon大小被设置为和字体大小一致,而span等标签的下边缘会和字体的基线对齐,故需设置一个往下的偏移比例,来纠正视觉上的未对齐效果 +} + +ul, +li { + padding: 0; + margin: 0; + list-style: none; +} + +*, +*::before, +*::after { + box-sizing: inherit; +} + +a, +a:focus, +a:hover { + color: inherit; + text-decoration: none; + cursor: pointer; +} + +a:focus, +a:active, +div:focus { + outline: none; +} diff --git a/oms-vue/src/assets/styles/sidebar.scss b/vue3/src/styles/sidebar.scss similarity index 55% rename from oms-vue/src/assets/styles/sidebar.scss rename to vue3/src/styles/sidebar.scss index abe5b631..fa1e53fe 100644 --- a/oms-vue/src/assets/styles/sidebar.scss +++ b/vue3/src/styles/sidebar.scss @@ -1,35 +1,27 @@ -#app { - +.app { .main-container { - height: 100%; - transition: margin-left .28s; - margin-left: $base-sidebar-width; position: relative; - } - - .sidebarHide { - margin-left: 0!important; + min-height: 100%; + margin-left: $sideBarWidth; + transition: margin-left 0.28s; } .sidebar-container { - -webkit-transition: width .28s; - transition: width 0.28s; - width: $base-sidebar-width !important; - background-color: $base-menu-background; - height: 100%; position: fixed; - font-size: 0px; top: 0; bottom: 0; left: 0; z-index: 1001; + width: $sideBarWidth !important; + height: 100%; overflow: hidden; - -webkit-box-shadow: 2px 0 6px rgba(0,21,41,.35); - box-shadow: 2px 0 6px rgba(0,21,41,.35); + background-color: $menuBg; + transition: width 0.28s; // 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; + transition: 0s width ease-in-out, 0s padding-left ease-in-out, + 0s padding-right ease-in-out; } .scrollbar-wrapper { @@ -37,7 +29,7 @@ } .el-scrollbar__bar.is-vertical { - right: 0px; + right: 0; } .el-scrollbar { @@ -54,62 +46,58 @@ display: none; } - a { - display: inline-block; - width: 100%; - overflow: hidden; + .svg-icon { + margin-right: 12px; } - .svg-icon { - margin-right: 16px; + .sub-el-icon { + margin-right: 12px; + margin-left: -2px; } .el-menu { - border: none; - height: 100%; width: 100% !important; - } - - .el-menu-item, .el-submenu__title { - overflow: hidden !important; - text-overflow: ellipsis !important; - white-space: nowrap !important; + height: 100%; + border: none; } // menu hover .submenu-title-noDropdown, - .el-submenu__title { + .el-sub-menu__title { &:hover { - background-color: rgba(0, 0, 0, 0.06) !important; + background-color: $menuHover !important; } } - & .theme-dark .is-active > .el-submenu__title { - color: $base-menu-color-active !important; + .is-active > .el-sub-menu__title { + color: $subMenuActiveText !important; } - & .nest-menu .el-submenu>.el-submenu__title, - & .el-submenu .el-menu-item { - min-width: $base-sidebar-width !important; + & .nest-menu .el-sub-menu > .el-sub-menu__title, + & .el-sub-menu .el-menu-item { + min-width: $sideBarWidth !important; + background-color: $subMenuBg !important; &:hover { - background-color: rgba(0, 0, 0, 0.06) !important; - } - } - - & .theme-dark .nest-menu .el-submenu>.el-submenu__title, - & .theme-dark .el-submenu .el-menu-item { - background-color: $base-sub-menu-background !important; - - &:hover { - background-color: $base-sub-menu-hover !important; + background-color: $subMenuHover !important; } } } .hideSidebar { + .mix-wrapper__left { + width: 54px; + } + .sidebar-container { width: 54px !important; + + .header { + .logo-wrap { + width: 54px !important; + transition: transform 0.28s; + } + } } .main-container { @@ -117,8 +105,8 @@ } .submenu-title-noDropdown { - padding: 0 !important; position: relative; + padding: 0 !important; .el-tooltip { padding: 0 !important; @@ -126,63 +114,86 @@ .svg-icon { margin-left: 20px; } + + .sub-el-icon { + margin-left: 19px; + } + } + + // TODO + & > .svg-icon { + margin-left: 20px; + } + + & > span { + display: inline-block; + width: 0; + height: 0; + overflow: hidden; + visibility: hidden; } } - .el-submenu { + .el-sub-menu { overflow: hidden; - &>.el-submenu__title { + & > .el-sub-menu__title { padding: 0 !important; .svg-icon { margin-left: 20px; } + .sub-el-icon { + margin-left: 19px; + } + + .el-sub-menu__icon-arrow { + display: none; + } } } .el-menu--collapse { - .el-submenu { - &>.el-submenu__title { - &>span { - height: 0; + .el-sub-menu { + & > .el-sub-menu__title { + & > span { + display: inline-block; width: 0; + height: 0; overflow: hidden; visibility: hidden; - display: inline-block; } } } } } - .el-menu--collapse .el-menu .el-submenu { - min-width: $base-sidebar-width !important; + .el-menu--collapse .el-menu .el-sub-menu { + min-width: $sideBarWidth !important; } // mobile responsive .mobile { .main-container { - margin-left: 0px; + margin-left: 0; } .sidebar-container { - transition: transform .28s; - width: $base-sidebar-width !important; + width: $sideBarWidth !important; + transition: transform 0.28s; } - &.hideSidebar { + &.hideSidebar:not(.isMix, .isTop) { .sidebar-container { pointer-events: none; transition-duration: 0.3s; - transform: translate3d(-$base-sidebar-width, 0, 0); + transform: translate3d(-$sideBarWidth, 0, 0); } } } .withoutAnimation { - .main-container, .sidebar-container { transition: none; @@ -192,22 +203,27 @@ // when menu collapsed .el-menu--vertical { - &>.el-menu { + & > .el-menu { .svg-icon { - margin-right: 16px; + margin-right: 12px; + } + + .sub-el-icon { + margin-right: 12px; + margin-left: -2px; } } - .nest-menu .el-submenu>.el-submenu__title, + .nest-menu .el-sub-menu > .el-sub-menu__title, .el-menu-item { &:hover { // you can use $subMenuHover - background-color: rgba(0, 0, 0, 0.06) !important; + background-color: $menuHover !important; } } // the scroll bar appears when the subMenu is too long - >.el-menu--popup { + > .el-menu--popup { max-height: 100vh; overflow-y: auto; diff --git a/vue3/src/styles/transition.scss b/vue3/src/styles/transition.scss new file mode 100644 index 00000000..7ba53632 --- /dev/null +++ b/vue3/src/styles/transition.scss @@ -0,0 +1,85 @@ +// 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 0.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 0.5s; +} + +.breadcrumb-enter, +.breadcrumb-leave-active { + opacity: 0; + transform: translateX(20px); +} + +.breadcrumb-move { + transition: all 0.5s; +} + +.breadcrumb-leave-active { + position: absolute; +} + +/* 缩放过渡 */ +.fade-scale-enter-active, +.fade-scale-leave-active { + transition: transform 0.3s ease-in-out; +} + +.fade-scale-enter-from, +.fade-scale-leave-to { + transform: scale(0); +} + +.fade-slide-leave-active, +.fade-slide-enter-active { + transition: opacity 0.3s, transform 0.3s; +} + +.fade-slide-enter-from { + opacity: 0; + transform: translateX(-30px); +} + +.fade-slide-leave-to { + opacity: 0; + transform: translateX(30px); +} + +/* 旋转过渡 */ +.fade-rotate-enter-active, +.fade-rotate-leave-active { + transition: transform 0.3s ease-in-out; +} + +.fade-rotate-enter-from, +.fade-rotate-leave-to { + transform: rotate(90deg); +} diff --git a/vue3/src/styles/variables.module.scss b/vue3/src/styles/variables.module.scss new file mode 100644 index 00000000..7feccc40 --- /dev/null +++ b/vue3/src/styles/variables.module.scss @@ -0,0 +1,6 @@ +// 导出 variables.module.scss 变量提供给TypeScript使用 +:export { + menuBg: $menuBg; + menuText: $menuText; + menuActiveText: $menuActiveText; +} diff --git a/vue3/src/styles/variables.scss b/vue3/src/styles/variables.scss new file mode 100644 index 00000000..dd36f4e0 --- /dev/null +++ b/vue3/src/styles/variables.scss @@ -0,0 +1,27 @@ +// 全局SCSS变量 + +:root { + --menuBg: #304156; + --menuText: #bfcbd9; + --menuActiveText: #409eff; + --menuHover: #263445; + --subMenuBg: #1f2d3d; + --subMenuActiveText: #f4f4f5; + --subMenuHover: #001528; + + // wang-editor textarea + --w-e-textarea-slight-border-color: var(--el-color-primary); + --w-e-textarea-slight-bg-color: rgb(var(--el-color-primary-rgb) 0.1); + --w-e-textarea-selected-border-color: var(--el-color-primary); +} + +$menuBg: var(--menuBg); +$menuText: var(--menuText); +$menuActiveText: var(--menuActiveText); +$menuHover: var(--menuHover); + +$subMenuBg: var(--subMenuBg); +$subMenuActiveText: var(--subMenuActiveText); +$subMenuHover: var(--subMenuHover); + +$sideBarWidth: 210px; diff --git a/vue3/src/typings/auto-imports.d.ts b/vue3/src/typings/auto-imports.d.ts new file mode 100644 index 00000000..94c3f682 --- /dev/null +++ b/vue3/src/typings/auto-imports.d.ts @@ -0,0 +1,1693 @@ +/* eslint-disable */ +/* prettier-ignore */ +// @ts-nocheck +// Generated by unplugin-auto-import +export {} +declare global { + const EffectScope: typeof import("vue")["EffectScope"]; + const ElForm: typeof import("element-plus/es")["ElForm"]; + const ElMessage: typeof import("element-plus/es")["ElMessage"]; + const ElMessageBox: typeof import("element-plus/es")["ElMessageBox"]; + const ElTree: typeof import("element-plus/es")["ElTree"]; + const acceptHMRUpdate: typeof import("pinia")["acceptHMRUpdate"]; + const asyncComputed: typeof import("@vueuse/core")["asyncComputed"]; + const autoResetRef: typeof import("@vueuse/core")["autoResetRef"]; + const computed: typeof import("vue")["computed"]; + const computedAsync: typeof import("@vueuse/core")["computedAsync"]; + const computedEager: typeof import("@vueuse/core")["computedEager"]; + const computedInject: typeof import("@vueuse/core")["computedInject"]; + const computedWithControl: typeof import("@vueuse/core")["computedWithControl"]; + const controlledComputed: typeof import("@vueuse/core")["controlledComputed"]; + const controlledRef: typeof import("@vueuse/core")["controlledRef"]; + const createApp: typeof import("vue")["createApp"]; + const createEventHook: typeof import("@vueuse/core")["createEventHook"]; + const createGlobalState: typeof import("@vueuse/core")["createGlobalState"]; + const createInjectionState: typeof import("@vueuse/core")["createInjectionState"]; + const createPinia: typeof import("pinia")["createPinia"]; + const createReactiveFn: typeof import("@vueuse/core")["createReactiveFn"]; + const createReusableTemplate: typeof import("@vueuse/core")["createReusableTemplate"]; + const createSharedComposable: typeof import("@vueuse/core")["createSharedComposable"]; + const createTemplatePromise: typeof import("@vueuse/core")["createTemplatePromise"]; + const createUnrefFn: typeof import("@vueuse/core")["createUnrefFn"]; + const customRef: typeof import("vue")["customRef"]; + const debouncedRef: typeof import("@vueuse/core")["debouncedRef"]; + const debouncedWatch: typeof import("@vueuse/core")["debouncedWatch"]; + const defineAsyncComponent: typeof import("vue")["defineAsyncComponent"]; + const defineComponent: typeof import("vue")["defineComponent"]; + const defineStore: typeof import("pinia")["defineStore"]; + const eagerComputed: typeof import("@vueuse/core")["eagerComputed"]; + const effectScope: typeof import("vue")["effectScope"]; + const extendRef: typeof import("@vueuse/core")["extendRef"]; + const getActivePinia: typeof import("pinia")["getActivePinia"]; + const getCurrentInstance: typeof import("vue")["getCurrentInstance"]; + const getCurrentScope: typeof import("vue")["getCurrentScope"]; + const h: typeof import("vue")["h"]; + const ignorableWatch: typeof import("@vueuse/core")["ignorableWatch"]; + const inject: typeof import("vue")["inject"]; + const injectLocal: typeof import("@vueuse/core")["injectLocal"]; + const isDefined: typeof import("@vueuse/core")["isDefined"]; + const isProxy: typeof import("vue")["isProxy"]; + const isReactive: typeof import("vue")["isReactive"]; + const isReadonly: typeof import("vue")["isReadonly"]; + const isRef: typeof import("vue")["isRef"]; + const makeDestructurable: typeof import("@vueuse/core")["makeDestructurable"]; + const mapActions: typeof import("pinia")["mapActions"]; + const mapGetters: typeof import("pinia")["mapGetters"]; + const mapState: typeof import("pinia")["mapState"]; + const mapStores: typeof import("pinia")["mapStores"]; + const mapWritableState: typeof import("pinia")["mapWritableState"]; + const markRaw: typeof import("vue")["markRaw"]; + const nextTick: typeof import("vue")["nextTick"]; + const onActivated: typeof import("vue")["onActivated"]; + const onBeforeMount: typeof import("vue")["onBeforeMount"]; + const onBeforeRouteLeave: typeof import("vue-router")["onBeforeRouteLeave"]; + const onBeforeRouteUpdate: typeof import("vue-router")["onBeforeRouteUpdate"]; + const onBeforeUnmount: typeof import("vue")["onBeforeUnmount"]; + const onBeforeUpdate: typeof import("vue")["onBeforeUpdate"]; + const onClickOutside: typeof import("@vueuse/core")["onClickOutside"]; + const onDeactivated: typeof import("vue")["onDeactivated"]; + const onErrorCaptured: typeof import("vue")["onErrorCaptured"]; + const onKeyStroke: typeof import("@vueuse/core")["onKeyStroke"]; + const onLongPress: typeof import("@vueuse/core")["onLongPress"]; + const onMounted: typeof import("vue")["onMounted"]; + const onRenderTracked: typeof import("vue")["onRenderTracked"]; + const onRenderTriggered: typeof import("vue")["onRenderTriggered"]; + const onScopeDispose: typeof import("vue")["onScopeDispose"]; + const onServerPrefetch: typeof import("vue")["onServerPrefetch"]; + const onStartTyping: typeof import("@vueuse/core")["onStartTyping"]; + const onUnmounted: typeof import("vue")["onUnmounted"]; + const onUpdated: typeof import("vue")["onUpdated"]; + const pausableWatch: typeof import("@vueuse/core")["pausableWatch"]; + const provide: typeof import("vue")["provide"]; + const provideLocal: typeof import("@vueuse/core")["provideLocal"]; + const reactify: typeof import("@vueuse/core")["reactify"]; + const reactifyObject: typeof import("@vueuse/core")["reactifyObject"]; + const reactive: typeof import("vue")["reactive"]; + const reactiveComputed: typeof import("@vueuse/core")["reactiveComputed"]; + const reactiveOmit: typeof import("@vueuse/core")["reactiveOmit"]; + const reactivePick: typeof import("@vueuse/core")["reactivePick"]; + const readonly: typeof import("vue")["readonly"]; + const ref: typeof import("vue")["ref"]; + const refAutoReset: typeof import("@vueuse/core")["refAutoReset"]; + const refDebounced: typeof import("@vueuse/core")["refDebounced"]; + const refDefault: typeof import("@vueuse/core")["refDefault"]; + const refThrottled: typeof import("@vueuse/core")["refThrottled"]; + const refWithControl: typeof import("@vueuse/core")["refWithControl"]; + const resolveComponent: typeof import("vue")["resolveComponent"]; + const resolveRef: typeof import("@vueuse/core")["resolveRef"]; + const resolveUnref: typeof import("@vueuse/core")["resolveUnref"]; + const setActivePinia: typeof import("pinia")["setActivePinia"]; + const setMapStoreSuffix: typeof import("pinia")["setMapStoreSuffix"]; + const shallowReactive: typeof import("vue")["shallowReactive"]; + const shallowReadonly: typeof import("vue")["shallowReadonly"]; + const shallowRef: typeof import("vue")["shallowRef"]; + const storeToRefs: typeof import("pinia")["storeToRefs"]; + const syncRef: typeof import("@vueuse/core")["syncRef"]; + const syncRefs: typeof import("@vueuse/core")["syncRefs"]; + const templateRef: typeof import("@vueuse/core")["templateRef"]; + const throttledRef: typeof import("@vueuse/core")["throttledRef"]; + const throttledWatch: typeof import("@vueuse/core")["throttledWatch"]; + const toRaw: typeof import("vue")["toRaw"]; + const toReactive: typeof import("@vueuse/core")["toReactive"]; + const toRef: typeof import("vue")["toRef"]; + const toRefs: typeof import("vue")["toRefs"]; + const toValue: typeof import("vue")["toValue"]; + const triggerRef: typeof import("vue")["triggerRef"]; + const tryOnBeforeMount: typeof import("@vueuse/core")["tryOnBeforeMount"]; + const tryOnBeforeUnmount: typeof import("@vueuse/core")["tryOnBeforeUnmount"]; + const tryOnMounted: typeof import("@vueuse/core")["tryOnMounted"]; + const tryOnScopeDispose: typeof import("@vueuse/core")["tryOnScopeDispose"]; + const tryOnUnmounted: typeof import("@vueuse/core")["tryOnUnmounted"]; + const unref: typeof import("vue")["unref"]; + const unrefElement: typeof import("@vueuse/core")["unrefElement"]; + const until: typeof import("@vueuse/core")["until"]; + const useActiveElement: typeof import("@vueuse/core")["useActiveElement"]; + const useAnimate: typeof import("@vueuse/core")["useAnimate"]; + const useArrayDifference: typeof import("@vueuse/core")["useArrayDifference"]; + const useArrayEvery: typeof import("@vueuse/core")["useArrayEvery"]; + const useArrayFilter: typeof import("@vueuse/core")["useArrayFilter"]; + const useArrayFind: typeof import("@vueuse/core")["useArrayFind"]; + const useArrayFindIndex: typeof import("@vueuse/core")["useArrayFindIndex"]; + const useArrayFindLast: typeof import("@vueuse/core")["useArrayFindLast"]; + const useArrayIncludes: typeof import("@vueuse/core")["useArrayIncludes"]; + const useArrayJoin: typeof import("@vueuse/core")["useArrayJoin"]; + const useArrayMap: typeof import("@vueuse/core")["useArrayMap"]; + const useArrayReduce: typeof import("@vueuse/core")["useArrayReduce"]; + const useArraySome: typeof import("@vueuse/core")["useArraySome"]; + const useArrayUnique: typeof import("@vueuse/core")["useArrayUnique"]; + const useAsyncQueue: typeof import("@vueuse/core")["useAsyncQueue"]; + const useAsyncState: typeof import("@vueuse/core")["useAsyncState"]; + const useAttrs: typeof import("vue")["useAttrs"]; + const useBase64: typeof import("@vueuse/core")["useBase64"]; + const useBattery: typeof import("@vueuse/core")["useBattery"]; + const useBluetooth: typeof import("@vueuse/core")["useBluetooth"]; + const useBreakpoints: typeof import("@vueuse/core")["useBreakpoints"]; + const useBroadcastChannel: typeof import("@vueuse/core")["useBroadcastChannel"]; + const useBrowserLocation: typeof import("@vueuse/core")["useBrowserLocation"]; + const useCached: typeof import("@vueuse/core")["useCached"]; + const useClipboard: typeof import("@vueuse/core")["useClipboard"]; + const useClipboardItems: typeof import("@vueuse/core")["useClipboardItems"]; + const useCloned: typeof import("@vueuse/core")["useCloned"]; + const useColorMode: typeof import("@vueuse/core")["useColorMode"]; + const useConfirmDialog: typeof import("@vueuse/core")["useConfirmDialog"]; + const useCounter: typeof import("@vueuse/core")["useCounter"]; + const useCssModule: typeof import("vue")["useCssModule"]; + const useCssVar: typeof import("@vueuse/core")["useCssVar"]; + const useCssVars: typeof import("vue")["useCssVars"]; + const useCurrentElement: typeof import("@vueuse/core")["useCurrentElement"]; + const useCycleList: typeof import("@vueuse/core")["useCycleList"]; + const useDark: typeof import("@vueuse/core")["useDark"]; + const useDateFormat: typeof import("@vueuse/core")["useDateFormat"]; + const useDebounce: typeof import("@vueuse/core")["useDebounce"]; + const useDebounceFn: typeof import("@vueuse/core")["useDebounceFn"]; + const useDebouncedRefHistory: typeof import("@vueuse/core")["useDebouncedRefHistory"]; + const useDeviceMotion: typeof import("@vueuse/core")["useDeviceMotion"]; + const useDeviceOrientation: typeof import("@vueuse/core")["useDeviceOrientation"]; + const useDevicePixelRatio: typeof import("@vueuse/core")["useDevicePixelRatio"]; + const useDevicesList: typeof import("@vueuse/core")["useDevicesList"]; + const useDisplayMedia: typeof import("@vueuse/core")["useDisplayMedia"]; + const useDocumentVisibility: typeof import("@vueuse/core")["useDocumentVisibility"]; + const useDraggable: typeof import("@vueuse/core")["useDraggable"]; + const useDropZone: typeof import("@vueuse/core")["useDropZone"]; + const useElementBounding: typeof import("@vueuse/core")["useElementBounding"]; + const useElementByPoint: typeof import("@vueuse/core")["useElementByPoint"]; + const useElementHover: typeof import("@vueuse/core")["useElementHover"]; + const useElementSize: typeof import("@vueuse/core")["useElementSize"]; + const useElementVisibility: typeof import("@vueuse/core")["useElementVisibility"]; + const useEventBus: typeof import("@vueuse/core")["useEventBus"]; + const useEventListener: typeof import("@vueuse/core")["useEventListener"]; + const useEventSource: typeof import("@vueuse/core")["useEventSource"]; + const useEyeDropper: typeof import("@vueuse/core")["useEyeDropper"]; + const useFavicon: typeof import("@vueuse/core")["useFavicon"]; + const useFetch: typeof import("@vueuse/core")["useFetch"]; + const useFileDialog: typeof import("@vueuse/core")["useFileDialog"]; + const useFileSystemAccess: typeof import("@vueuse/core")["useFileSystemAccess"]; + const useFocus: typeof import("@vueuse/core")["useFocus"]; + const useFocusWithin: typeof import("@vueuse/core")["useFocusWithin"]; + const useFps: typeof import("@vueuse/core")["useFps"]; + const useFullscreen: typeof import("@vueuse/core")["useFullscreen"]; + const useGamepad: typeof import("@vueuse/core")["useGamepad"]; + const useGeolocation: typeof import("@vueuse/core")["useGeolocation"]; + const useIdle: typeof import("@vueuse/core")["useIdle"]; + const useImage: typeof import("@vueuse/core")["useImage"]; + const useInfiniteScroll: typeof import("@vueuse/core")["useInfiniteScroll"]; + const useIntersectionObserver: typeof import("@vueuse/core")["useIntersectionObserver"]; + const useInterval: typeof import("@vueuse/core")["useInterval"]; + const useIntervalFn: typeof import("@vueuse/core")["useIntervalFn"]; + const useKeyModifier: typeof import("@vueuse/core")["useKeyModifier"]; + const useLastChanged: typeof import("@vueuse/core")["useLastChanged"]; + const useLink: typeof import("vue-router")["useLink"]; + const useLocalStorage: typeof import("@vueuse/core")["useLocalStorage"]; + const useMagicKeys: typeof import("@vueuse/core")["useMagicKeys"]; + const useManualRefHistory: typeof import("@vueuse/core")["useManualRefHistory"]; + const useMediaControls: typeof import("@vueuse/core")["useMediaControls"]; + const useMediaQuery: typeof import("@vueuse/core")["useMediaQuery"]; + const useMemoize: typeof import("@vueuse/core")["useMemoize"]; + const useMemory: typeof import("@vueuse/core")["useMemory"]; + const useMounted: typeof import("@vueuse/core")["useMounted"]; + const useMouse: typeof import("@vueuse/core")["useMouse"]; + const useMouseInElement: typeof import("@vueuse/core")["useMouseInElement"]; + const useMousePressed: typeof import("@vueuse/core")["useMousePressed"]; + const useMutationObserver: typeof import("@vueuse/core")["useMutationObserver"]; + const useNavigatorLanguage: typeof import("@vueuse/core")["useNavigatorLanguage"]; + const useNetwork: typeof import("@vueuse/core")["useNetwork"]; + const useNow: typeof import("@vueuse/core")["useNow"]; + const useObjectUrl: typeof import("@vueuse/core")["useObjectUrl"]; + const useOffsetPagination: typeof import("@vueuse/core")["useOffsetPagination"]; + const useOnline: typeof import("@vueuse/core")["useOnline"]; + const usePageLeave: typeof import("@vueuse/core")["usePageLeave"]; + const useParallax: typeof import("@vueuse/core")["useParallax"]; + const useParentElement: typeof import("@vueuse/core")["useParentElement"]; + const usePerformanceObserver: typeof import("@vueuse/core")["usePerformanceObserver"]; + const usePermission: typeof import("@vueuse/core")["usePermission"]; + const usePointer: typeof import("@vueuse/core")["usePointer"]; + const usePointerLock: typeof import("@vueuse/core")["usePointerLock"]; + const usePointerSwipe: typeof import("@vueuse/core")["usePointerSwipe"]; + const usePreferredColorScheme: typeof import("@vueuse/core")["usePreferredColorScheme"]; + const usePreferredContrast: typeof import("@vueuse/core")["usePreferredContrast"]; + const usePreferredDark: typeof import("@vueuse/core")["usePreferredDark"]; + const usePreferredLanguages: typeof import("@vueuse/core")["usePreferredLanguages"]; + const usePreferredReducedMotion: typeof import("@vueuse/core")["usePreferredReducedMotion"]; + const usePrevious: typeof import("@vueuse/core")["usePrevious"]; + const useRafFn: typeof import("@vueuse/core")["useRafFn"]; + const useRefHistory: typeof import("@vueuse/core")["useRefHistory"]; + const useResizeObserver: typeof import("@vueuse/core")["useResizeObserver"]; + const useRoute: typeof import("vue-router")["useRoute"]; + const useRouter: typeof import("vue-router")["useRouter"]; + const useScreenOrientation: typeof import("@vueuse/core")["useScreenOrientation"]; + const useScreenSafeArea: typeof import("@vueuse/core")["useScreenSafeArea"]; + const useScriptTag: typeof import("@vueuse/core")["useScriptTag"]; + const useScroll: typeof import("@vueuse/core")["useScroll"]; + const useScrollLock: typeof import("@vueuse/core")["useScrollLock"]; + const useSessionStorage: typeof import("@vueuse/core")["useSessionStorage"]; + const useShare: typeof import("@vueuse/core")["useShare"]; + const useSlots: typeof import("vue")["useSlots"]; + const useSorted: typeof import("@vueuse/core")["useSorted"]; + const useSpeechRecognition: typeof import("@vueuse/core")["useSpeechRecognition"]; + const useSpeechSynthesis: typeof import("@vueuse/core")["useSpeechSynthesis"]; + const useStepper: typeof import("@vueuse/core")["useStepper"]; + const useStorage: typeof import("@vueuse/core")["useStorage"]; + const useStorageAsync: typeof import("@vueuse/core")["useStorageAsync"]; + const useStyleTag: typeof import("@vueuse/core")["useStyleTag"]; + const useSupported: typeof import("@vueuse/core")["useSupported"]; + const useSwipe: typeof import("@vueuse/core")["useSwipe"]; + const useTemplateRefsList: typeof import("@vueuse/core")["useTemplateRefsList"]; + const useTextDirection: typeof import("@vueuse/core")["useTextDirection"]; + const useTextSelection: typeof import("@vueuse/core")["useTextSelection"]; + const useTextareaAutosize: typeof import("@vueuse/core")["useTextareaAutosize"]; + const useThrottle: typeof import("@vueuse/core")["useThrottle"]; + const useThrottleFn: typeof import("@vueuse/core")["useThrottleFn"]; + const useThrottledRefHistory: typeof import("@vueuse/core")["useThrottledRefHistory"]; + const useTimeAgo: typeof import("@vueuse/core")["useTimeAgo"]; + const useTimeout: typeof import("@vueuse/core")["useTimeout"]; + const useTimeoutFn: typeof import("@vueuse/core")["useTimeoutFn"]; + const useTimeoutPoll: typeof import("@vueuse/core")["useTimeoutPoll"]; + const useTimestamp: typeof import("@vueuse/core")["useTimestamp"]; + const useTitle: typeof import("@vueuse/core")["useTitle"]; + const useToNumber: typeof import("@vueuse/core")["useToNumber"]; + const useToString: typeof import("@vueuse/core")["useToString"]; + const useToggle: typeof import("@vueuse/core")["useToggle"]; + const useTransition: typeof import("@vueuse/core")["useTransition"]; + const useUrlSearchParams: typeof import("@vueuse/core")["useUrlSearchParams"]; + const useUserMedia: typeof import("@vueuse/core")["useUserMedia"]; + const useVModel: typeof import("@vueuse/core")["useVModel"]; + const useVModels: typeof import("@vueuse/core")["useVModels"]; + const useVibrate: typeof import("@vueuse/core")["useVibrate"]; + const useVirtualList: typeof import("@vueuse/core")["useVirtualList"]; + const useWakeLock: typeof import("@vueuse/core")["useWakeLock"]; + const useWebNotification: typeof import("@vueuse/core")["useWebNotification"]; + const useWebSocket: typeof import("@vueuse/core")["useWebSocket"]; + const useWebWorker: typeof import("@vueuse/core")["useWebWorker"]; + const useWebWorkerFn: typeof import("@vueuse/core")["useWebWorkerFn"]; + const useWindowFocus: typeof import("@vueuse/core")["useWindowFocus"]; + const useWindowScroll: typeof import("@vueuse/core")["useWindowScroll"]; + const useWindowSize: typeof import("@vueuse/core")["useWindowSize"]; + const watch: typeof import("vue")["watch"]; + const watchArray: typeof import("@vueuse/core")["watchArray"]; + const watchAtMost: typeof import("@vueuse/core")["watchAtMost"]; + const watchDebounced: typeof import("@vueuse/core")["watchDebounced"]; + const watchDeep: typeof import("@vueuse/core")["watchDeep"]; + const watchEffect: typeof import("vue")["watchEffect"]; + const watchIgnorable: typeof import("@vueuse/core")["watchIgnorable"]; + const watchImmediate: typeof import("@vueuse/core")["watchImmediate"]; + const watchOnce: typeof import("@vueuse/core")["watchOnce"]; + const watchPausable: typeof import("@vueuse/core")["watchPausable"]; + const watchPostEffect: typeof import("vue")["watchPostEffect"]; + const watchSyncEffect: typeof import("vue")["watchSyncEffect"]; + const watchThrottled: typeof import("@vueuse/core")["watchThrottled"]; + const watchTriggerable: typeof import("@vueuse/core")["watchTriggerable"]; + const watchWithFilter: typeof import("@vueuse/core")["watchWithFilter"]; + const whenever: typeof import("@vueuse/core")["whenever"]; +} +// for type re-export +declare global { + // @ts-ignore + export type { + Component, + ComponentPublicInstance, + ComputedRef, + ExtractDefaultPropTypes, + ExtractPropTypes, + ExtractPublicPropTypes, + InjectionKey, + PropType, + Ref, + VNode, + WritableComputedRef, + } from "vue"; + import("vue"); +} +// for vue template auto import +import { UnwrapRef } from "vue"; +declare module "vue" { + interface ComponentCustomProperties { + readonly EffectScope: UnwrapRef; + readonly ElForm: UnwrapRef; + readonly ElMessage: UnwrapRef< + typeof import("element-plus/es")["ElMessage"] + >; + readonly ElMessageBox: UnwrapRef< + typeof import("element-plus/es")["ElMessageBox"] + >; + readonly ElTree: UnwrapRef; + readonly acceptHMRUpdate: UnwrapRef< + typeof import("pinia")["acceptHMRUpdate"] + >; + readonly asyncComputed: UnwrapRef< + typeof import("@vueuse/core")["asyncComputed"] + >; + readonly autoResetRef: UnwrapRef< + typeof import("@vueuse/core")["autoResetRef"] + >; + readonly computed: UnwrapRef; + readonly computedAsync: UnwrapRef< + typeof import("@vueuse/core")["computedAsync"] + >; + readonly computedEager: UnwrapRef< + typeof import("@vueuse/core")["computedEager"] + >; + readonly computedInject: UnwrapRef< + typeof import("@vueuse/core")["computedInject"] + >; + readonly computedWithControl: UnwrapRef< + typeof import("@vueuse/core")["computedWithControl"] + >; + readonly controlledComputed: UnwrapRef< + typeof import("@vueuse/core")["controlledComputed"] + >; + readonly controlledRef: UnwrapRef< + typeof import("@vueuse/core")["controlledRef"] + >; + readonly createApp: UnwrapRef; + readonly createEventHook: UnwrapRef< + typeof import("@vueuse/core")["createEventHook"] + >; + readonly createGlobalState: UnwrapRef< + typeof import("@vueuse/core")["createGlobalState"] + >; + readonly createInjectionState: UnwrapRef< + typeof import("@vueuse/core")["createInjectionState"] + >; + readonly createPinia: UnwrapRef; + readonly createReactiveFn: UnwrapRef< + typeof import("@vueuse/core")["createReactiveFn"] + >; + readonly createReusableTemplate: UnwrapRef< + typeof import("@vueuse/core")["createReusableTemplate"] + >; + readonly createSharedComposable: UnwrapRef< + typeof import("@vueuse/core")["createSharedComposable"] + >; + readonly createTemplatePromise: UnwrapRef< + typeof import("@vueuse/core")["createTemplatePromise"] + >; + readonly createUnrefFn: UnwrapRef< + typeof import("@vueuse/core")["createUnrefFn"] + >; + readonly customRef: UnwrapRef; + readonly debouncedRef: UnwrapRef< + typeof import("@vueuse/core")["debouncedRef"] + >; + readonly debouncedWatch: UnwrapRef< + typeof import("@vueuse/core")["debouncedWatch"] + >; + readonly defineAsyncComponent: UnwrapRef< + typeof import("vue")["defineAsyncComponent"] + >; + readonly defineComponent: UnwrapRef< + typeof import("vue")["defineComponent"] + >; + readonly defineStore: UnwrapRef; + readonly eagerComputed: UnwrapRef< + typeof import("@vueuse/core")["eagerComputed"] + >; + readonly effectScope: UnwrapRef; + readonly extendRef: UnwrapRef; + readonly getActivePinia: UnwrapRef< + typeof import("pinia")["getActivePinia"] + >; + readonly getCurrentInstance: UnwrapRef< + typeof import("vue")["getCurrentInstance"] + >; + readonly getCurrentScope: UnwrapRef< + typeof import("vue")["getCurrentScope"] + >; + readonly h: UnwrapRef; + readonly ignorableWatch: UnwrapRef< + typeof import("@vueuse/core")["ignorableWatch"] + >; + readonly inject: UnwrapRef; + readonly injectLocal: UnwrapRef< + typeof import("@vueuse/core")["injectLocal"] + >; + readonly isDefined: UnwrapRef; + readonly isProxy: UnwrapRef; + readonly isReactive: UnwrapRef; + readonly isReadonly: UnwrapRef; + readonly isRef: UnwrapRef; + readonly makeDestructurable: UnwrapRef< + typeof import("@vueuse/core")["makeDestructurable"] + >; + readonly mapActions: UnwrapRef; + readonly mapGetters: UnwrapRef; + readonly mapState: UnwrapRef; + readonly mapStores: UnwrapRef; + readonly mapWritableState: UnwrapRef< + typeof import("pinia")["mapWritableState"] + >; + readonly markRaw: UnwrapRef; + readonly nextTick: UnwrapRef; + readonly onActivated: UnwrapRef; + readonly onBeforeMount: UnwrapRef; + readonly onBeforeRouteLeave: UnwrapRef< + typeof import("vue-router")["onBeforeRouteLeave"] + >; + readonly onBeforeRouteUpdate: UnwrapRef< + typeof import("vue-router")["onBeforeRouteUpdate"] + >; + readonly onBeforeUnmount: UnwrapRef< + typeof import("vue")["onBeforeUnmount"] + >; + readonly onBeforeUpdate: UnwrapRef; + readonly onClickOutside: UnwrapRef< + typeof import("@vueuse/core")["onClickOutside"] + >; + readonly onDeactivated: UnwrapRef; + readonly onErrorCaptured: UnwrapRef< + typeof import("vue")["onErrorCaptured"] + >; + readonly onKeyStroke: UnwrapRef< + typeof import("@vueuse/core")["onKeyStroke"] + >; + readonly onLongPress: UnwrapRef< + typeof import("@vueuse/core")["onLongPress"] + >; + readonly onMounted: UnwrapRef; + readonly onRenderTracked: UnwrapRef< + typeof import("vue")["onRenderTracked"] + >; + readonly onRenderTriggered: UnwrapRef< + typeof import("vue")["onRenderTriggered"] + >; + readonly onScopeDispose: UnwrapRef; + readonly onServerPrefetch: UnwrapRef< + typeof import("vue")["onServerPrefetch"] + >; + readonly onStartTyping: UnwrapRef< + typeof import("@vueuse/core")["onStartTyping"] + >; + readonly onUnmounted: UnwrapRef; + readonly onUpdated: UnwrapRef; + readonly pausableWatch: UnwrapRef< + typeof import("@vueuse/core")["pausableWatch"] + >; + readonly provide: UnwrapRef; + readonly provideLocal: UnwrapRef< + typeof import("@vueuse/core")["provideLocal"] + >; + readonly reactify: UnwrapRef; + readonly reactifyObject: UnwrapRef< + typeof import("@vueuse/core")["reactifyObject"] + >; + readonly reactive: UnwrapRef; + readonly reactiveComputed: UnwrapRef< + typeof import("@vueuse/core")["reactiveComputed"] + >; + readonly reactiveOmit: UnwrapRef< + typeof import("@vueuse/core")["reactiveOmit"] + >; + readonly reactivePick: UnwrapRef< + typeof import("@vueuse/core")["reactivePick"] + >; + readonly readonly: UnwrapRef; + readonly ref: UnwrapRef; + readonly refAutoReset: UnwrapRef< + typeof import("@vueuse/core")["refAutoReset"] + >; + readonly refDebounced: UnwrapRef< + typeof import("@vueuse/core")["refDebounced"] + >; + readonly refDefault: UnwrapRef; + readonly refThrottled: UnwrapRef< + typeof import("@vueuse/core")["refThrottled"] + >; + readonly refWithControl: UnwrapRef< + typeof import("@vueuse/core")["refWithControl"] + >; + readonly resolveComponent: UnwrapRef< + typeof import("vue")["resolveComponent"] + >; + readonly resolveRef: UnwrapRef; + readonly resolveUnref: UnwrapRef< + typeof import("@vueuse/core")["resolveUnref"] + >; + readonly setActivePinia: UnwrapRef< + typeof import("pinia")["setActivePinia"] + >; + readonly setMapStoreSuffix: UnwrapRef< + typeof import("pinia")["setMapStoreSuffix"] + >; + readonly shallowReactive: UnwrapRef< + typeof import("vue")["shallowReactive"] + >; + readonly shallowReadonly: UnwrapRef< + typeof import("vue")["shallowReadonly"] + >; + readonly shallowRef: UnwrapRef; + readonly storeToRefs: UnwrapRef; + readonly syncRef: UnwrapRef; + readonly syncRefs: UnwrapRef; + readonly templateRef: UnwrapRef< + typeof import("@vueuse/core")["templateRef"] + >; + readonly throttledRef: UnwrapRef< + typeof import("@vueuse/core")["throttledRef"] + >; + readonly throttledWatch: UnwrapRef< + typeof import("@vueuse/core")["throttledWatch"] + >; + readonly toRaw: UnwrapRef; + readonly toReactive: UnwrapRef; + readonly toRef: UnwrapRef; + readonly toRefs: UnwrapRef; + readonly toValue: UnwrapRef; + readonly triggerRef: UnwrapRef; + readonly tryOnBeforeMount: UnwrapRef< + typeof import("@vueuse/core")["tryOnBeforeMount"] + >; + readonly tryOnBeforeUnmount: UnwrapRef< + typeof import("@vueuse/core")["tryOnBeforeUnmount"] + >; + readonly tryOnMounted: UnwrapRef< + typeof import("@vueuse/core")["tryOnMounted"] + >; + readonly tryOnScopeDispose: UnwrapRef< + typeof import("@vueuse/core")["tryOnScopeDispose"] + >; + readonly tryOnUnmounted: UnwrapRef< + typeof import("@vueuse/core")["tryOnUnmounted"] + >; + readonly unref: UnwrapRef; + readonly unrefElement: UnwrapRef< + typeof import("@vueuse/core")["unrefElement"] + >; + readonly until: UnwrapRef; + readonly useActiveElement: UnwrapRef< + typeof import("@vueuse/core")["useActiveElement"] + >; + readonly useAnimate: UnwrapRef; + readonly useArrayDifference: UnwrapRef< + typeof import("@vueuse/core")["useArrayDifference"] + >; + readonly useArrayEvery: UnwrapRef< + typeof import("@vueuse/core")["useArrayEvery"] + >; + readonly useArrayFilter: UnwrapRef< + typeof import("@vueuse/core")["useArrayFilter"] + >; + readonly useArrayFind: UnwrapRef< + typeof import("@vueuse/core")["useArrayFind"] + >; + readonly useArrayFindIndex: UnwrapRef< + typeof import("@vueuse/core")["useArrayFindIndex"] + >; + readonly useArrayFindLast: UnwrapRef< + typeof import("@vueuse/core")["useArrayFindLast"] + >; + readonly useArrayIncludes: UnwrapRef< + typeof import("@vueuse/core")["useArrayIncludes"] + >; + readonly useArrayJoin: UnwrapRef< + typeof import("@vueuse/core")["useArrayJoin"] + >; + readonly useArrayMap: UnwrapRef< + typeof import("@vueuse/core")["useArrayMap"] + >; + readonly useArrayReduce: UnwrapRef< + typeof import("@vueuse/core")["useArrayReduce"] + >; + readonly useArraySome: UnwrapRef< + typeof import("@vueuse/core")["useArraySome"] + >; + readonly useArrayUnique: UnwrapRef< + typeof import("@vueuse/core")["useArrayUnique"] + >; + readonly useAsyncQueue: UnwrapRef< + typeof import("@vueuse/core")["useAsyncQueue"] + >; + readonly useAsyncState: UnwrapRef< + typeof import("@vueuse/core")["useAsyncState"] + >; + readonly useAttrs: UnwrapRef; + readonly useBase64: UnwrapRef; + readonly useBattery: UnwrapRef; + readonly useBluetooth: UnwrapRef< + typeof import("@vueuse/core")["useBluetooth"] + >; + readonly useBreakpoints: UnwrapRef< + typeof import("@vueuse/core")["useBreakpoints"] + >; + readonly useBroadcastChannel: UnwrapRef< + typeof import("@vueuse/core")["useBroadcastChannel"] + >; + readonly useBrowserLocation: UnwrapRef< + typeof import("@vueuse/core")["useBrowserLocation"] + >; + readonly useCached: UnwrapRef; + readonly useClipboard: UnwrapRef< + typeof import("@vueuse/core")["useClipboard"] + >; + readonly useClipboardItems: UnwrapRef< + typeof import("@vueuse/core")["useClipboardItems"] + >; + readonly useCloned: UnwrapRef; + readonly useColorMode: UnwrapRef< + typeof import("@vueuse/core")["useColorMode"] + >; + readonly useConfirmDialog: UnwrapRef< + typeof import("@vueuse/core")["useConfirmDialog"] + >; + readonly useCounter: UnwrapRef; + readonly useCssModule: UnwrapRef; + readonly useCssVar: UnwrapRef; + readonly useCssVars: UnwrapRef; + readonly useCurrentElement: UnwrapRef< + typeof import("@vueuse/core")["useCurrentElement"] + >; + readonly useCycleList: UnwrapRef< + typeof import("@vueuse/core")["useCycleList"] + >; + readonly useDark: UnwrapRef; + readonly useDateFormat: UnwrapRef< + typeof import("@vueuse/core")["useDateFormat"] + >; + readonly useDebounce: UnwrapRef< + typeof import("@vueuse/core")["useDebounce"] + >; + readonly useDebounceFn: UnwrapRef< + typeof import("@vueuse/core")["useDebounceFn"] + >; + readonly useDebouncedRefHistory: UnwrapRef< + typeof import("@vueuse/core")["useDebouncedRefHistory"] + >; + readonly useDeviceMotion: UnwrapRef< + typeof import("@vueuse/core")["useDeviceMotion"] + >; + readonly useDeviceOrientation: UnwrapRef< + typeof import("@vueuse/core")["useDeviceOrientation"] + >; + readonly useDevicePixelRatio: UnwrapRef< + typeof import("@vueuse/core")["useDevicePixelRatio"] + >; + readonly useDevicesList: UnwrapRef< + typeof import("@vueuse/core")["useDevicesList"] + >; + readonly useDisplayMedia: UnwrapRef< + typeof import("@vueuse/core")["useDisplayMedia"] + >; + readonly useDocumentVisibility: UnwrapRef< + typeof import("@vueuse/core")["useDocumentVisibility"] + >; + readonly useDraggable: UnwrapRef< + typeof import("@vueuse/core")["useDraggable"] + >; + readonly useDropZone: UnwrapRef< + typeof import("@vueuse/core")["useDropZone"] + >; + readonly useElementBounding: UnwrapRef< + typeof import("@vueuse/core")["useElementBounding"] + >; + readonly useElementByPoint: UnwrapRef< + typeof import("@vueuse/core")["useElementByPoint"] + >; + readonly useElementHover: UnwrapRef< + typeof import("@vueuse/core")["useElementHover"] + >; + readonly useElementSize: UnwrapRef< + typeof import("@vueuse/core")["useElementSize"] + >; + readonly useElementVisibility: UnwrapRef< + typeof import("@vueuse/core")["useElementVisibility"] + >; + readonly useEventBus: UnwrapRef< + typeof import("@vueuse/core")["useEventBus"] + >; + readonly useEventListener: UnwrapRef< + typeof import("@vueuse/core")["useEventListener"] + >; + readonly useEventSource: UnwrapRef< + typeof import("@vueuse/core")["useEventSource"] + >; + readonly useEyeDropper: UnwrapRef< + typeof import("@vueuse/core")["useEyeDropper"] + >; + readonly useFavicon: UnwrapRef; + readonly useFetch: UnwrapRef; + readonly useFileDialog: UnwrapRef< + typeof import("@vueuse/core")["useFileDialog"] + >; + readonly useFileSystemAccess: UnwrapRef< + typeof import("@vueuse/core")["useFileSystemAccess"] + >; + readonly useFocus: UnwrapRef; + readonly useFocusWithin: UnwrapRef< + typeof import("@vueuse/core")["useFocusWithin"] + >; + readonly useFps: UnwrapRef; + readonly useFullscreen: UnwrapRef< + typeof import("@vueuse/core")["useFullscreen"] + >; + readonly useGamepad: UnwrapRef; + readonly useGeolocation: UnwrapRef< + typeof import("@vueuse/core")["useGeolocation"] + >; + readonly useIdle: UnwrapRef; + readonly useImage: UnwrapRef; + readonly useInfiniteScroll: UnwrapRef< + typeof import("@vueuse/core")["useInfiniteScroll"] + >; + readonly useIntersectionObserver: UnwrapRef< + typeof import("@vueuse/core")["useIntersectionObserver"] + >; + readonly useInterval: UnwrapRef< + typeof import("@vueuse/core")["useInterval"] + >; + readonly useIntervalFn: UnwrapRef< + typeof import("@vueuse/core")["useIntervalFn"] + >; + readonly useKeyModifier: UnwrapRef< + typeof import("@vueuse/core")["useKeyModifier"] + >; + readonly useLastChanged: UnwrapRef< + typeof import("@vueuse/core")["useLastChanged"] + >; + readonly useLink: UnwrapRef; + readonly useLocalStorage: UnwrapRef< + typeof import("@vueuse/core")["useLocalStorage"] + >; + readonly useMagicKeys: UnwrapRef< + typeof import("@vueuse/core")["useMagicKeys"] + >; + readonly useManualRefHistory: UnwrapRef< + typeof import("@vueuse/core")["useManualRefHistory"] + >; + readonly useMediaControls: UnwrapRef< + typeof import("@vueuse/core")["useMediaControls"] + >; + readonly useMediaQuery: UnwrapRef< + typeof import("@vueuse/core")["useMediaQuery"] + >; + readonly useMemoize: UnwrapRef; + readonly useMemory: UnwrapRef; + readonly useMounted: UnwrapRef; + readonly useMouse: UnwrapRef; + readonly useMouseInElement: UnwrapRef< + typeof import("@vueuse/core")["useMouseInElement"] + >; + readonly useMousePressed: UnwrapRef< + typeof import("@vueuse/core")["useMousePressed"] + >; + readonly useMutationObserver: UnwrapRef< + typeof import("@vueuse/core")["useMutationObserver"] + >; + readonly useNavigatorLanguage: UnwrapRef< + typeof import("@vueuse/core")["useNavigatorLanguage"] + >; + readonly useNetwork: UnwrapRef; + readonly useNow: UnwrapRef; + readonly useObjectUrl: UnwrapRef< + typeof import("@vueuse/core")["useObjectUrl"] + >; + readonly useOffsetPagination: UnwrapRef< + typeof import("@vueuse/core")["useOffsetPagination"] + >; + readonly useOnline: UnwrapRef; + readonly usePageLeave: UnwrapRef< + typeof import("@vueuse/core")["usePageLeave"] + >; + readonly useParallax: UnwrapRef< + typeof import("@vueuse/core")["useParallax"] + >; + readonly useParentElement: UnwrapRef< + typeof import("@vueuse/core")["useParentElement"] + >; + readonly usePerformanceObserver: UnwrapRef< + typeof import("@vueuse/core")["usePerformanceObserver"] + >; + readonly usePermission: UnwrapRef< + typeof import("@vueuse/core")["usePermission"] + >; + readonly usePointer: UnwrapRef; + readonly usePointerLock: UnwrapRef< + typeof import("@vueuse/core")["usePointerLock"] + >; + readonly usePointerSwipe: UnwrapRef< + typeof import("@vueuse/core")["usePointerSwipe"] + >; + readonly usePreferredColorScheme: UnwrapRef< + typeof import("@vueuse/core")["usePreferredColorScheme"] + >; + readonly usePreferredContrast: UnwrapRef< + typeof import("@vueuse/core")["usePreferredContrast"] + >; + readonly usePreferredDark: UnwrapRef< + typeof import("@vueuse/core")["usePreferredDark"] + >; + readonly usePreferredLanguages: UnwrapRef< + typeof import("@vueuse/core")["usePreferredLanguages"] + >; + readonly usePreferredReducedMotion: UnwrapRef< + typeof import("@vueuse/core")["usePreferredReducedMotion"] + >; + readonly usePrevious: UnwrapRef< + typeof import("@vueuse/core")["usePrevious"] + >; + readonly useRafFn: UnwrapRef; + readonly useRefHistory: UnwrapRef< + typeof import("@vueuse/core")["useRefHistory"] + >; + readonly useResizeObserver: UnwrapRef< + typeof import("@vueuse/core")["useResizeObserver"] + >; + readonly useRoute: UnwrapRef; + readonly useRouter: UnwrapRef; + readonly useScreenOrientation: UnwrapRef< + typeof import("@vueuse/core")["useScreenOrientation"] + >; + readonly useScreenSafeArea: UnwrapRef< + typeof import("@vueuse/core")["useScreenSafeArea"] + >; + readonly useScriptTag: UnwrapRef< + typeof import("@vueuse/core")["useScriptTag"] + >; + readonly useScroll: UnwrapRef; + readonly useScrollLock: UnwrapRef< + typeof import("@vueuse/core")["useScrollLock"] + >; + readonly useSessionStorage: UnwrapRef< + typeof import("@vueuse/core")["useSessionStorage"] + >; + readonly useShare: UnwrapRef; + readonly useSlots: UnwrapRef; + readonly useSorted: UnwrapRef; + readonly useSpeechRecognition: UnwrapRef< + typeof import("@vueuse/core")["useSpeechRecognition"] + >; + readonly useSpeechSynthesis: UnwrapRef< + typeof import("@vueuse/core")["useSpeechSynthesis"] + >; + readonly useStepper: UnwrapRef; + readonly useStorage: UnwrapRef; + readonly useStorageAsync: UnwrapRef< + typeof import("@vueuse/core")["useStorageAsync"] + >; + readonly useStyleTag: UnwrapRef< + typeof import("@vueuse/core")["useStyleTag"] + >; + readonly useSupported: UnwrapRef< + typeof import("@vueuse/core")["useSupported"] + >; + readonly useSwipe: UnwrapRef; + readonly useTemplateRefsList: UnwrapRef< + typeof import("@vueuse/core")["useTemplateRefsList"] + >; + readonly useTextDirection: UnwrapRef< + typeof import("@vueuse/core")["useTextDirection"] + >; + readonly useTextSelection: UnwrapRef< + typeof import("@vueuse/core")["useTextSelection"] + >; + readonly useTextareaAutosize: UnwrapRef< + typeof import("@vueuse/core")["useTextareaAutosize"] + >; + readonly useThrottle: UnwrapRef< + typeof import("@vueuse/core")["useThrottle"] + >; + readonly useThrottleFn: UnwrapRef< + typeof import("@vueuse/core")["useThrottleFn"] + >; + readonly useThrottledRefHistory: UnwrapRef< + typeof import("@vueuse/core")["useThrottledRefHistory"] + >; + readonly useTimeAgo: UnwrapRef; + readonly useTimeout: UnwrapRef; + readonly useTimeoutFn: UnwrapRef< + typeof import("@vueuse/core")["useTimeoutFn"] + >; + readonly useTimeoutPoll: UnwrapRef< + typeof import("@vueuse/core")["useTimeoutPoll"] + >; + readonly useTimestamp: UnwrapRef< + typeof import("@vueuse/core")["useTimestamp"] + >; + readonly useTitle: UnwrapRef; + readonly useToNumber: UnwrapRef< + typeof import("@vueuse/core")["useToNumber"] + >; + readonly useToString: UnwrapRef< + typeof import("@vueuse/core")["useToString"] + >; + readonly useToggle: UnwrapRef; + readonly useTransition: UnwrapRef< + typeof import("@vueuse/core")["useTransition"] + >; + readonly useUrlSearchParams: UnwrapRef< + typeof import("@vueuse/core")["useUrlSearchParams"] + >; + readonly useUserMedia: UnwrapRef< + typeof import("@vueuse/core")["useUserMedia"] + >; + readonly useVModel: UnwrapRef; + readonly useVModels: UnwrapRef; + readonly useVibrate: UnwrapRef; + readonly useVirtualList: UnwrapRef< + typeof import("@vueuse/core")["useVirtualList"] + >; + readonly useWakeLock: UnwrapRef< + typeof import("@vueuse/core")["useWakeLock"] + >; + readonly useWebNotification: UnwrapRef< + typeof import("@vueuse/core")["useWebNotification"] + >; + readonly useWebSocket: UnwrapRef< + typeof import("@vueuse/core")["useWebSocket"] + >; + readonly useWebWorker: UnwrapRef< + typeof import("@vueuse/core")["useWebWorker"] + >; + readonly useWebWorkerFn: UnwrapRef< + typeof import("@vueuse/core")["useWebWorkerFn"] + >; + readonly useWindowFocus: UnwrapRef< + typeof import("@vueuse/core")["useWindowFocus"] + >; + readonly useWindowScroll: UnwrapRef< + typeof import("@vueuse/core")["useWindowScroll"] + >; + readonly useWindowSize: UnwrapRef< + typeof import("@vueuse/core")["useWindowSize"] + >; + readonly watch: UnwrapRef; + readonly watchArray: UnwrapRef; + readonly watchAtMost: UnwrapRef< + typeof import("@vueuse/core")["watchAtMost"] + >; + readonly watchDebounced: UnwrapRef< + typeof import("@vueuse/core")["watchDebounced"] + >; + readonly watchDeep: UnwrapRef; + readonly watchEffect: UnwrapRef; + readonly watchIgnorable: UnwrapRef< + typeof import("@vueuse/core")["watchIgnorable"] + >; + readonly watchImmediate: UnwrapRef< + typeof import("@vueuse/core")["watchImmediate"] + >; + readonly watchOnce: UnwrapRef; + readonly watchPausable: UnwrapRef< + typeof import("@vueuse/core")["watchPausable"] + >; + readonly watchPostEffect: UnwrapRef< + typeof import("vue")["watchPostEffect"] + >; + readonly watchSyncEffect: UnwrapRef< + typeof import("vue")["watchSyncEffect"] + >; + readonly watchThrottled: UnwrapRef< + typeof import("@vueuse/core")["watchThrottled"] + >; + readonly watchTriggerable: UnwrapRef< + typeof import("@vueuse/core")["watchTriggerable"] + >; + readonly watchWithFilter: UnwrapRef< + typeof import("@vueuse/core")["watchWithFilter"] + >; + readonly whenever: UnwrapRef; + } +} +declare module "@vue/runtime-core" { + interface ComponentCustomProperties { + readonly EffectScope: UnwrapRef; + readonly ElForm: UnwrapRef; + readonly ElMessage: UnwrapRef< + typeof import("element-plus/es")["ElMessage"] + >; + readonly ElMessageBox: UnwrapRef< + typeof import("element-plus/es")["ElMessageBox"] + >; + readonly ElTree: UnwrapRef; + readonly acceptHMRUpdate: UnwrapRef< + typeof import("pinia")["acceptHMRUpdate"] + >; + readonly asyncComputed: UnwrapRef< + typeof import("@vueuse/core")["asyncComputed"] + >; + readonly autoResetRef: UnwrapRef< + typeof import("@vueuse/core")["autoResetRef"] + >; + readonly computed: UnwrapRef; + readonly computedAsync: UnwrapRef< + typeof import("@vueuse/core")["computedAsync"] + >; + readonly computedEager: UnwrapRef< + typeof import("@vueuse/core")["computedEager"] + >; + readonly computedInject: UnwrapRef< + typeof import("@vueuse/core")["computedInject"] + >; + readonly computedWithControl: UnwrapRef< + typeof import("@vueuse/core")["computedWithControl"] + >; + readonly controlledComputed: UnwrapRef< + typeof import("@vueuse/core")["controlledComputed"] + >; + readonly controlledRef: UnwrapRef< + typeof import("@vueuse/core")["controlledRef"] + >; + readonly createApp: UnwrapRef; + readonly createEventHook: UnwrapRef< + typeof import("@vueuse/core")["createEventHook"] + >; + readonly createGlobalState: UnwrapRef< + typeof import("@vueuse/core")["createGlobalState"] + >; + readonly createInjectionState: UnwrapRef< + typeof import("@vueuse/core")["createInjectionState"] + >; + readonly createPinia: UnwrapRef; + readonly createReactiveFn: UnwrapRef< + typeof import("@vueuse/core")["createReactiveFn"] + >; + readonly createReusableTemplate: UnwrapRef< + typeof import("@vueuse/core")["createReusableTemplate"] + >; + readonly createSharedComposable: UnwrapRef< + typeof import("@vueuse/core")["createSharedComposable"] + >; + readonly createTemplatePromise: UnwrapRef< + typeof import("@vueuse/core")["createTemplatePromise"] + >; + readonly createUnrefFn: UnwrapRef< + typeof import("@vueuse/core")["createUnrefFn"] + >; + readonly customRef: UnwrapRef; + readonly debouncedRef: UnwrapRef< + typeof import("@vueuse/core")["debouncedRef"] + >; + readonly debouncedWatch: UnwrapRef< + typeof import("@vueuse/core")["debouncedWatch"] + >; + readonly defineAsyncComponent: UnwrapRef< + typeof import("vue")["defineAsyncComponent"] + >; + readonly defineComponent: UnwrapRef< + typeof import("vue")["defineComponent"] + >; + readonly defineStore: UnwrapRef; + readonly eagerComputed: UnwrapRef< + typeof import("@vueuse/core")["eagerComputed"] + >; + readonly effectScope: UnwrapRef; + readonly extendRef: UnwrapRef; + readonly getActivePinia: UnwrapRef< + typeof import("pinia")["getActivePinia"] + >; + readonly getCurrentInstance: UnwrapRef< + typeof import("vue")["getCurrentInstance"] + >; + readonly getCurrentScope: UnwrapRef< + typeof import("vue")["getCurrentScope"] + >; + readonly h: UnwrapRef; + readonly ignorableWatch: UnwrapRef< + typeof import("@vueuse/core")["ignorableWatch"] + >; + readonly inject: UnwrapRef; + readonly injectLocal: UnwrapRef< + typeof import("@vueuse/core")["injectLocal"] + >; + readonly isDefined: UnwrapRef; + readonly isProxy: UnwrapRef; + readonly isReactive: UnwrapRef; + readonly isReadonly: UnwrapRef; + readonly isRef: UnwrapRef; + readonly makeDestructurable: UnwrapRef< + typeof import("@vueuse/core")["makeDestructurable"] + >; + readonly mapActions: UnwrapRef; + readonly mapGetters: UnwrapRef; + readonly mapState: UnwrapRef; + readonly mapStores: UnwrapRef; + readonly mapWritableState: UnwrapRef< + typeof import("pinia")["mapWritableState"] + >; + readonly markRaw: UnwrapRef; + readonly nextTick: UnwrapRef; + readonly onActivated: UnwrapRef; + readonly onBeforeMount: UnwrapRef; + readonly onBeforeRouteLeave: UnwrapRef< + typeof import("vue-router")["onBeforeRouteLeave"] + >; + readonly onBeforeRouteUpdate: UnwrapRef< + typeof import("vue-router")["onBeforeRouteUpdate"] + >; + readonly onBeforeUnmount: UnwrapRef< + typeof import("vue")["onBeforeUnmount"] + >; + readonly onBeforeUpdate: UnwrapRef; + readonly onClickOutside: UnwrapRef< + typeof import("@vueuse/core")["onClickOutside"] + >; + readonly onDeactivated: UnwrapRef; + readonly onErrorCaptured: UnwrapRef< + typeof import("vue")["onErrorCaptured"] + >; + readonly onKeyStroke: UnwrapRef< + typeof import("@vueuse/core")["onKeyStroke"] + >; + readonly onLongPress: UnwrapRef< + typeof import("@vueuse/core")["onLongPress"] + >; + readonly onMounted: UnwrapRef; + readonly onRenderTracked: UnwrapRef< + typeof import("vue")["onRenderTracked"] + >; + readonly onRenderTriggered: UnwrapRef< + typeof import("vue")["onRenderTriggered"] + >; + readonly onScopeDispose: UnwrapRef; + readonly onServerPrefetch: UnwrapRef< + typeof import("vue")["onServerPrefetch"] + >; + readonly onStartTyping: UnwrapRef< + typeof import("@vueuse/core")["onStartTyping"] + >; + readonly onUnmounted: UnwrapRef; + readonly onUpdated: UnwrapRef; + readonly pausableWatch: UnwrapRef< + typeof import("@vueuse/core")["pausableWatch"] + >; + readonly provide: UnwrapRef; + readonly provideLocal: UnwrapRef< + typeof import("@vueuse/core")["provideLocal"] + >; + readonly reactify: UnwrapRef; + readonly reactifyObject: UnwrapRef< + typeof import("@vueuse/core")["reactifyObject"] + >; + readonly reactive: UnwrapRef; + readonly reactiveComputed: UnwrapRef< + typeof import("@vueuse/core")["reactiveComputed"] + >; + readonly reactiveOmit: UnwrapRef< + typeof import("@vueuse/core")["reactiveOmit"] + >; + readonly reactivePick: UnwrapRef< + typeof import("@vueuse/core")["reactivePick"] + >; + readonly readonly: UnwrapRef; + readonly ref: UnwrapRef; + readonly refAutoReset: UnwrapRef< + typeof import("@vueuse/core")["refAutoReset"] + >; + readonly refDebounced: UnwrapRef< + typeof import("@vueuse/core")["refDebounced"] + >; + readonly refDefault: UnwrapRef; + readonly refThrottled: UnwrapRef< + typeof import("@vueuse/core")["refThrottled"] + >; + readonly refWithControl: UnwrapRef< + typeof import("@vueuse/core")["refWithControl"] + >; + readonly resolveComponent: UnwrapRef< + typeof import("vue")["resolveComponent"] + >; + readonly resolveRef: UnwrapRef; + readonly resolveUnref: UnwrapRef< + typeof import("@vueuse/core")["resolveUnref"] + >; + readonly setActivePinia: UnwrapRef< + typeof import("pinia")["setActivePinia"] + >; + readonly setMapStoreSuffix: UnwrapRef< + typeof import("pinia")["setMapStoreSuffix"] + >; + readonly shallowReactive: UnwrapRef< + typeof import("vue")["shallowReactive"] + >; + readonly shallowReadonly: UnwrapRef< + typeof import("vue")["shallowReadonly"] + >; + readonly shallowRef: UnwrapRef; + readonly storeToRefs: UnwrapRef; + readonly syncRef: UnwrapRef; + readonly syncRefs: UnwrapRef; + readonly templateRef: UnwrapRef< + typeof import("@vueuse/core")["templateRef"] + >; + readonly throttledRef: UnwrapRef< + typeof import("@vueuse/core")["throttledRef"] + >; + readonly throttledWatch: UnwrapRef< + typeof import("@vueuse/core")["throttledWatch"] + >; + readonly toRaw: UnwrapRef; + readonly toReactive: UnwrapRef; + readonly toRef: UnwrapRef; + readonly toRefs: UnwrapRef; + readonly toValue: UnwrapRef; + readonly triggerRef: UnwrapRef; + readonly tryOnBeforeMount: UnwrapRef< + typeof import("@vueuse/core")["tryOnBeforeMount"] + >; + readonly tryOnBeforeUnmount: UnwrapRef< + typeof import("@vueuse/core")["tryOnBeforeUnmount"] + >; + readonly tryOnMounted: UnwrapRef< + typeof import("@vueuse/core")["tryOnMounted"] + >; + readonly tryOnScopeDispose: UnwrapRef< + typeof import("@vueuse/core")["tryOnScopeDispose"] + >; + readonly tryOnUnmounted: UnwrapRef< + typeof import("@vueuse/core")["tryOnUnmounted"] + >; + readonly unref: UnwrapRef; + readonly unrefElement: UnwrapRef< + typeof import("@vueuse/core")["unrefElement"] + >; + readonly until: UnwrapRef; + readonly useActiveElement: UnwrapRef< + typeof import("@vueuse/core")["useActiveElement"] + >; + readonly useAnimate: UnwrapRef; + readonly useArrayDifference: UnwrapRef< + typeof import("@vueuse/core")["useArrayDifference"] + >; + readonly useArrayEvery: UnwrapRef< + typeof import("@vueuse/core")["useArrayEvery"] + >; + readonly useArrayFilter: UnwrapRef< + typeof import("@vueuse/core")["useArrayFilter"] + >; + readonly useArrayFind: UnwrapRef< + typeof import("@vueuse/core")["useArrayFind"] + >; + readonly useArrayFindIndex: UnwrapRef< + typeof import("@vueuse/core")["useArrayFindIndex"] + >; + readonly useArrayFindLast: UnwrapRef< + typeof import("@vueuse/core")["useArrayFindLast"] + >; + readonly useArrayIncludes: UnwrapRef< + typeof import("@vueuse/core")["useArrayIncludes"] + >; + readonly useArrayJoin: UnwrapRef< + typeof import("@vueuse/core")["useArrayJoin"] + >; + readonly useArrayMap: UnwrapRef< + typeof import("@vueuse/core")["useArrayMap"] + >; + readonly useArrayReduce: UnwrapRef< + typeof import("@vueuse/core")["useArrayReduce"] + >; + readonly useArraySome: UnwrapRef< + typeof import("@vueuse/core")["useArraySome"] + >; + readonly useArrayUnique: UnwrapRef< + typeof import("@vueuse/core")["useArrayUnique"] + >; + readonly useAsyncQueue: UnwrapRef< + typeof import("@vueuse/core")["useAsyncQueue"] + >; + readonly useAsyncState: UnwrapRef< + typeof import("@vueuse/core")["useAsyncState"] + >; + readonly useAttrs: UnwrapRef; + readonly useBase64: UnwrapRef; + readonly useBattery: UnwrapRef; + readonly useBluetooth: UnwrapRef< + typeof import("@vueuse/core")["useBluetooth"] + >; + readonly useBreakpoints: UnwrapRef< + typeof import("@vueuse/core")["useBreakpoints"] + >; + readonly useBroadcastChannel: UnwrapRef< + typeof import("@vueuse/core")["useBroadcastChannel"] + >; + readonly useBrowserLocation: UnwrapRef< + typeof import("@vueuse/core")["useBrowserLocation"] + >; + readonly useCached: UnwrapRef; + readonly useClipboard: UnwrapRef< + typeof import("@vueuse/core")["useClipboard"] + >; + readonly useClipboardItems: UnwrapRef< + typeof import("@vueuse/core")["useClipboardItems"] + >; + readonly useCloned: UnwrapRef; + readonly useColorMode: UnwrapRef< + typeof import("@vueuse/core")["useColorMode"] + >; + readonly useConfirmDialog: UnwrapRef< + typeof import("@vueuse/core")["useConfirmDialog"] + >; + readonly useCounter: UnwrapRef; + readonly useCssModule: UnwrapRef; + readonly useCssVar: UnwrapRef; + readonly useCssVars: UnwrapRef; + readonly useCurrentElement: UnwrapRef< + typeof import("@vueuse/core")["useCurrentElement"] + >; + readonly useCycleList: UnwrapRef< + typeof import("@vueuse/core")["useCycleList"] + >; + readonly useDark: UnwrapRef; + readonly useDateFormat: UnwrapRef< + typeof import("@vueuse/core")["useDateFormat"] + >; + readonly useDebounce: UnwrapRef< + typeof import("@vueuse/core")["useDebounce"] + >; + readonly useDebounceFn: UnwrapRef< + typeof import("@vueuse/core")["useDebounceFn"] + >; + readonly useDebouncedRefHistory: UnwrapRef< + typeof import("@vueuse/core")["useDebouncedRefHistory"] + >; + readonly useDeviceMotion: UnwrapRef< + typeof import("@vueuse/core")["useDeviceMotion"] + >; + readonly useDeviceOrientation: UnwrapRef< + typeof import("@vueuse/core")["useDeviceOrientation"] + >; + readonly useDevicePixelRatio: UnwrapRef< + typeof import("@vueuse/core")["useDevicePixelRatio"] + >; + readonly useDevicesList: UnwrapRef< + typeof import("@vueuse/core")["useDevicesList"] + >; + readonly useDisplayMedia: UnwrapRef< + typeof import("@vueuse/core")["useDisplayMedia"] + >; + readonly useDocumentVisibility: UnwrapRef< + typeof import("@vueuse/core")["useDocumentVisibility"] + >; + readonly useDraggable: UnwrapRef< + typeof import("@vueuse/core")["useDraggable"] + >; + readonly useDropZone: UnwrapRef< + typeof import("@vueuse/core")["useDropZone"] + >; + readonly useElementBounding: UnwrapRef< + typeof import("@vueuse/core")["useElementBounding"] + >; + readonly useElementByPoint: UnwrapRef< + typeof import("@vueuse/core")["useElementByPoint"] + >; + readonly useElementHover: UnwrapRef< + typeof import("@vueuse/core")["useElementHover"] + >; + readonly useElementSize: UnwrapRef< + typeof import("@vueuse/core")["useElementSize"] + >; + readonly useElementVisibility: UnwrapRef< + typeof import("@vueuse/core")["useElementVisibility"] + >; + readonly useEventBus: UnwrapRef< + typeof import("@vueuse/core")["useEventBus"] + >; + readonly useEventListener: UnwrapRef< + typeof import("@vueuse/core")["useEventListener"] + >; + readonly useEventSource: UnwrapRef< + typeof import("@vueuse/core")["useEventSource"] + >; + readonly useEyeDropper: UnwrapRef< + typeof import("@vueuse/core")["useEyeDropper"] + >; + readonly useFavicon: UnwrapRef; + readonly useFetch: UnwrapRef; + readonly useFileDialog: UnwrapRef< + typeof import("@vueuse/core")["useFileDialog"] + >; + readonly useFileSystemAccess: UnwrapRef< + typeof import("@vueuse/core")["useFileSystemAccess"] + >; + readonly useFocus: UnwrapRef; + readonly useFocusWithin: UnwrapRef< + typeof import("@vueuse/core")["useFocusWithin"] + >; + readonly useFps: UnwrapRef; + readonly useFullscreen: UnwrapRef< + typeof import("@vueuse/core")["useFullscreen"] + >; + readonly useGamepad: UnwrapRef; + readonly useGeolocation: UnwrapRef< + typeof import("@vueuse/core")["useGeolocation"] + >; + readonly useIdle: UnwrapRef; + readonly useImage: UnwrapRef; + readonly useInfiniteScroll: UnwrapRef< + typeof import("@vueuse/core")["useInfiniteScroll"] + >; + readonly useIntersectionObserver: UnwrapRef< + typeof import("@vueuse/core")["useIntersectionObserver"] + >; + readonly useInterval: UnwrapRef< + typeof import("@vueuse/core")["useInterval"] + >; + readonly useIntervalFn: UnwrapRef< + typeof import("@vueuse/core")["useIntervalFn"] + >; + readonly useKeyModifier: UnwrapRef< + typeof import("@vueuse/core")["useKeyModifier"] + >; + readonly useLastChanged: UnwrapRef< + typeof import("@vueuse/core")["useLastChanged"] + >; + readonly useLink: UnwrapRef; + readonly useLocalStorage: UnwrapRef< + typeof import("@vueuse/core")["useLocalStorage"] + >; + readonly useMagicKeys: UnwrapRef< + typeof import("@vueuse/core")["useMagicKeys"] + >; + readonly useManualRefHistory: UnwrapRef< + typeof import("@vueuse/core")["useManualRefHistory"] + >; + readonly useMediaControls: UnwrapRef< + typeof import("@vueuse/core")["useMediaControls"] + >; + readonly useMediaQuery: UnwrapRef< + typeof import("@vueuse/core")["useMediaQuery"] + >; + readonly useMemoize: UnwrapRef; + readonly useMemory: UnwrapRef; + readonly useMounted: UnwrapRef; + readonly useMouse: UnwrapRef; + readonly useMouseInElement: UnwrapRef< + typeof import("@vueuse/core")["useMouseInElement"] + >; + readonly useMousePressed: UnwrapRef< + typeof import("@vueuse/core")["useMousePressed"] + >; + readonly useMutationObserver: UnwrapRef< + typeof import("@vueuse/core")["useMutationObserver"] + >; + readonly useNavigatorLanguage: UnwrapRef< + typeof import("@vueuse/core")["useNavigatorLanguage"] + >; + readonly useNetwork: UnwrapRef; + readonly useNow: UnwrapRef; + readonly useObjectUrl: UnwrapRef< + typeof import("@vueuse/core")["useObjectUrl"] + >; + readonly useOffsetPagination: UnwrapRef< + typeof import("@vueuse/core")["useOffsetPagination"] + >; + readonly useOnline: UnwrapRef; + readonly usePageLeave: UnwrapRef< + typeof import("@vueuse/core")["usePageLeave"] + >; + readonly useParallax: UnwrapRef< + typeof import("@vueuse/core")["useParallax"] + >; + readonly useParentElement: UnwrapRef< + typeof import("@vueuse/core")["useParentElement"] + >; + readonly usePerformanceObserver: UnwrapRef< + typeof import("@vueuse/core")["usePerformanceObserver"] + >; + readonly usePermission: UnwrapRef< + typeof import("@vueuse/core")["usePermission"] + >; + readonly usePointer: UnwrapRef; + readonly usePointerLock: UnwrapRef< + typeof import("@vueuse/core")["usePointerLock"] + >; + readonly usePointerSwipe: UnwrapRef< + typeof import("@vueuse/core")["usePointerSwipe"] + >; + readonly usePreferredColorScheme: UnwrapRef< + typeof import("@vueuse/core")["usePreferredColorScheme"] + >; + readonly usePreferredContrast: UnwrapRef< + typeof import("@vueuse/core")["usePreferredContrast"] + >; + readonly usePreferredDark: UnwrapRef< + typeof import("@vueuse/core")["usePreferredDark"] + >; + readonly usePreferredLanguages: UnwrapRef< + typeof import("@vueuse/core")["usePreferredLanguages"] + >; + readonly usePreferredReducedMotion: UnwrapRef< + typeof import("@vueuse/core")["usePreferredReducedMotion"] + >; + readonly usePrevious: UnwrapRef< + typeof import("@vueuse/core")["usePrevious"] + >; + readonly useRafFn: UnwrapRef; + readonly useRefHistory: UnwrapRef< + typeof import("@vueuse/core")["useRefHistory"] + >; + readonly useResizeObserver: UnwrapRef< + typeof import("@vueuse/core")["useResizeObserver"] + >; + readonly useRoute: UnwrapRef; + readonly useRouter: UnwrapRef; + readonly useScreenOrientation: UnwrapRef< + typeof import("@vueuse/core")["useScreenOrientation"] + >; + readonly useScreenSafeArea: UnwrapRef< + typeof import("@vueuse/core")["useScreenSafeArea"] + >; + readonly useScriptTag: UnwrapRef< + typeof import("@vueuse/core")["useScriptTag"] + >; + readonly useScroll: UnwrapRef; + readonly useScrollLock: UnwrapRef< + typeof import("@vueuse/core")["useScrollLock"] + >; + readonly useSessionStorage: UnwrapRef< + typeof import("@vueuse/core")["useSessionStorage"] + >; + readonly useShare: UnwrapRef; + readonly useSlots: UnwrapRef; + readonly useSorted: UnwrapRef; + readonly useSpeechRecognition: UnwrapRef< + typeof import("@vueuse/core")["useSpeechRecognition"] + >; + readonly useSpeechSynthesis: UnwrapRef< + typeof import("@vueuse/core")["useSpeechSynthesis"] + >; + readonly useStepper: UnwrapRef; + readonly useStorage: UnwrapRef; + readonly useStorageAsync: UnwrapRef< + typeof import("@vueuse/core")["useStorageAsync"] + >; + readonly useStyleTag: UnwrapRef< + typeof import("@vueuse/core")["useStyleTag"] + >; + readonly useSupported: UnwrapRef< + typeof import("@vueuse/core")["useSupported"] + >; + readonly useSwipe: UnwrapRef; + readonly useTemplateRefsList: UnwrapRef< + typeof import("@vueuse/core")["useTemplateRefsList"] + >; + readonly useTextDirection: UnwrapRef< + typeof import("@vueuse/core")["useTextDirection"] + >; + readonly useTextSelection: UnwrapRef< + typeof import("@vueuse/core")["useTextSelection"] + >; + readonly useTextareaAutosize: UnwrapRef< + typeof import("@vueuse/core")["useTextareaAutosize"] + >; + readonly useThrottle: UnwrapRef< + typeof import("@vueuse/core")["useThrottle"] + >; + readonly useThrottleFn: UnwrapRef< + typeof import("@vueuse/core")["useThrottleFn"] + >; + readonly useThrottledRefHistory: UnwrapRef< + typeof import("@vueuse/core")["useThrottledRefHistory"] + >; + readonly useTimeAgo: UnwrapRef; + readonly useTimeout: UnwrapRef; + readonly useTimeoutFn: UnwrapRef< + typeof import("@vueuse/core")["useTimeoutFn"] + >; + readonly useTimeoutPoll: UnwrapRef< + typeof import("@vueuse/core")["useTimeoutPoll"] + >; + readonly useTimestamp: UnwrapRef< + typeof import("@vueuse/core")["useTimestamp"] + >; + readonly useTitle: UnwrapRef; + readonly useToNumber: UnwrapRef< + typeof import("@vueuse/core")["useToNumber"] + >; + readonly useToString: UnwrapRef< + typeof import("@vueuse/core")["useToString"] + >; + readonly useToggle: UnwrapRef; + readonly useTransition: UnwrapRef< + typeof import("@vueuse/core")["useTransition"] + >; + readonly useUrlSearchParams: UnwrapRef< + typeof import("@vueuse/core")["useUrlSearchParams"] + >; + readonly useUserMedia: UnwrapRef< + typeof import("@vueuse/core")["useUserMedia"] + >; + readonly useVModel: UnwrapRef; + readonly useVModels: UnwrapRef; + readonly useVibrate: UnwrapRef; + readonly useVirtualList: UnwrapRef< + typeof import("@vueuse/core")["useVirtualList"] + >; + readonly useWakeLock: UnwrapRef< + typeof import("@vueuse/core")["useWakeLock"] + >; + readonly useWebNotification: UnwrapRef< + typeof import("@vueuse/core")["useWebNotification"] + >; + readonly useWebSocket: UnwrapRef< + typeof import("@vueuse/core")["useWebSocket"] + >; + readonly useWebWorker: UnwrapRef< + typeof import("@vueuse/core")["useWebWorker"] + >; + readonly useWebWorkerFn: UnwrapRef< + typeof import("@vueuse/core")["useWebWorkerFn"] + >; + readonly useWindowFocus: UnwrapRef< + typeof import("@vueuse/core")["useWindowFocus"] + >; + readonly useWindowScroll: UnwrapRef< + typeof import("@vueuse/core")["useWindowScroll"] + >; + readonly useWindowSize: UnwrapRef< + typeof import("@vueuse/core")["useWindowSize"] + >; + readonly watch: UnwrapRef; + readonly watchArray: UnwrapRef; + readonly watchAtMost: UnwrapRef< + typeof import("@vueuse/core")["watchAtMost"] + >; + readonly watchDebounced: UnwrapRef< + typeof import("@vueuse/core")["watchDebounced"] + >; + readonly watchDeep: UnwrapRef; + readonly watchEffect: UnwrapRef; + readonly watchIgnorable: UnwrapRef< + typeof import("@vueuse/core")["watchIgnorable"] + >; + readonly watchImmediate: UnwrapRef< + typeof import("@vueuse/core")["watchImmediate"] + >; + readonly watchOnce: UnwrapRef; + readonly watchPausable: UnwrapRef< + typeof import("@vueuse/core")["watchPausable"] + >; + readonly watchPostEffect: UnwrapRef< + typeof import("vue")["watchPostEffect"] + >; + readonly watchSyncEffect: UnwrapRef< + typeof import("vue")["watchSyncEffect"] + >; + readonly watchThrottled: UnwrapRef< + typeof import("@vueuse/core")["watchThrottled"] + >; + readonly watchTriggerable: UnwrapRef< + typeof import("@vueuse/core")["watchTriggerable"] + >; + readonly watchWithFilter: UnwrapRef< + typeof import("@vueuse/core")["watchWithFilter"] + >; + readonly whenever: UnwrapRef; + } +} diff --git a/vue3/src/typings/components.d.ts b/vue3/src/typings/components.d.ts new file mode 100644 index 00000000..418010e9 --- /dev/null +++ b/vue3/src/typings/components.d.ts @@ -0,0 +1,117 @@ +/* eslint-disable */ +/* prettier-ignore */ +// @ts-nocheck +// Generated by unplugin-vue-components +// Read more: https://github.com/vuejs/core/pull/3399 +import '@vue/runtime-core' + +export {}; + +declare module "@vue/runtime-core" { + export interface GlobalComponents { + AppMain: typeof import("./../layout/components/AppMain.vue")["default"]; + BarChart: typeof import("./../views/dashboard/components/BarChart.vue")["default"]; + Breadcrumb: typeof import("./../components/Breadcrumb/index.vue")["default"]; + DeptTree: typeof import("./../views/system/user/components/dept-tree.vue")["default"]; + Dictionary: typeof import("./../components/Dictionary/index.vue")["default"]; + DictItem: typeof import("./../views/system/dict/components/dict-item.vue")["default"]; + ElAlert: typeof import("element-plus/es")["ElAlert"]; + ElBreadcrumb: typeof import("element-plus/es")["ElBreadcrumb"]; + ElBreadcrumbItem: typeof import("element-plus/es")["ElBreadcrumbItem"]; + ElButton: typeof import("element-plus/es")["ElButton"]; + ElCard: typeof import("element-plus/es")["ElCard"]; + ElCheckbox: typeof import("element-plus/es")["ElCheckbox"]; + ElCheckboxGroup: typeof import("element-plus/es")["ElCheckboxGroup"]; + ElCol: typeof import("element-plus/es")["ElCol"]; + ElDatePicker: typeof import("element-plus/es")["ElDatePicker"]; + ElDialog: typeof import("element-plus/es")["ElDialog"]; + ElDivider: typeof import("element-plus/es")["ElDivider"]; + ElDropdown: typeof import("element-plus/es")["ElDropdown"]; + ElDropdownItem: typeof import("element-plus/es")["ElDropdownItem"]; + ElDropdownMenu: typeof import("element-plus/es")["ElDropdownMenu"]; + ElForm: typeof import("element-plus/es")["ElForm"]; + ElFormItem: typeof import("element-plus/es")["ElFormItem"]; + ElIcon: typeof import("element-plus/es")["ElIcon"]; + ElImage: typeof import("element-plus/es")["ElImage"]; + ElInput: typeof import("element-plus/es")["ElInput"]; + ElInputNumber: typeof import("element-plus/es")["ElInputNumber"]; + ElLink: typeof import("element-plus/es")["ElLink"]; + ElMenu: typeof import("element-plus/es")["ElMenu"]; + ElMenuItem: typeof import("element-plus/es")["ElMenuItem"]; + ElOption: typeof import("element-plus/es")["ElOption"]; + ElPagination: typeof import("element-plus/es")["ElPagination"]; + ElPopover: typeof import("element-plus/es")["ElPopover"]; + ElRadio: typeof import("element-plus/es")["ElRadio"]; + ElRadioButton: typeof import("element-plus/es")["ElRadioButton"]; + ElRadioGroup: typeof import("element-plus/es")["ElRadioGroup"]; + ElRate: typeof import("element-plus/es")["ElRate"]; + ElRow: typeof import("element-plus/es")["ElRow"]; + ElScrollbar: typeof import("element-plus/es")["ElScrollbar"]; + ElSelect: typeof import("element-plus/es")["ElSelect"]; + ElSubMenu: typeof import("element-plus/es")["ElSubMenu"]; + ElSwitch: typeof import("element-plus/es")["ElSwitch"]; + ElTable: typeof import("element-plus/es")["ElTable"]; + ElTableColumn: typeof import("element-plus/es")["ElTableColumn"]; + ElTabPane: typeof import("element-plus/es")["ElTabPane"]; + ElTabs: typeof import("element-plus/es")["ElTabs"]; + ElTag: typeof import("element-plus/es")["ElTag"]; + ElTooltip: typeof import("element-plus/es")["ElTooltip"]; + ElTree: typeof import("element-plus/es")["ElTree"]; + ElTreeSelect: typeof import("element-plus/es")["ElTreeSelect"]; + ElUpload: typeof import("element-plus/es")["ElUpload"]; + FixedThead: typeof import("./../views/demo/table/dynamic-table/components/FixedThead.vue")["default"]; + FunnelChart: typeof import("./../views/dashboard/components/FunnelChart.vue")["default"]; + GithubCorner: typeof import("./../components/GithubCorner/index.vue")["default"]; + Hamburger: typeof import("./../components/Hamburger/index.vue")["default"]; + IconSelect: typeof import("./../components/IconSelect/index.vue")["default"]; + IEpArrowDown: typeof import("~icons/ep/arrow-down")["default"]; + IEpCaretBottom: typeof import("~icons/ep/caret-bottom")["default"]; + IEpCaretTop: typeof import("~icons/ep/caret-top")["default"]; + IEpClose: typeof import("~icons/ep/close")["default"]; + IEpCollection: typeof import("~icons/ep/collection")["default"]; + IEpDelete: typeof import("~icons/ep/delete")["default"]; + IEpDownload: typeof import("~icons/ep/download")["default"]; + IEpEdit: typeof import("~icons/ep/edit")["default"]; + IEpPicture: typeof import("~icons/ep/picture")["default"]; + IEpPlus: typeof import("~icons/ep/plus")["default"]; + IEpPosition: typeof import("~icons/ep/position")["default"]; + IEpRefresh: typeof import("~icons/ep/refresh")["default"]; + IEpRefreshLeft: typeof import("~icons/ep/refresh-left")["default"]; + IEpSearch: typeof import("~icons/ep/search")["default"]; + IEpSetting: typeof import("~icons/ep/setting")["default"]; + IEpSortDown: typeof import("~icons/ep/sort-down")["default"]; + IEpSortUp: typeof import("~icons/ep/sort-up")["default"]; + IEpTop: typeof import("~icons/ep/top")["default"]; + IEpUploadFilled: typeof import("~icons/ep/upload-filled")["default"]; + Item: typeof import("./../layout/components/Sidebar/Item.vue")["default"]; + LangSelect: typeof import("./../components/LangSelect/index.vue")["default"]; + LeftMenu: typeof import("./../layout/components/Sidebar/LeftMenu.vue")["default"]; + Link: typeof import("./../layout/components/Sidebar/Link.vue")["default"]; + Logo: typeof import("./../layout/components/Sidebar/Logo.vue")["default"]; + MultiUpload: typeof import("./../components/Upload/MultiUpload.vue")["default"]; + NavBar: typeof import("./../layout/components/NavBar/index.vue")["default"]; + NavRight: typeof import("./../layout/components/NavBar/NavRight.vue")["default"]; + Pagination: typeof import("./../components/Pagination/index.vue")["default"]; + PieChart: typeof import("./../views/dashboard/components/PieChart.vue")["default"]; + RadarChart: typeof import("./../views/dashboard/components/RadarChart.vue")["default"]; + RightPanel: typeof import("./../components/RightPanel/index.vue")["default"]; + RouterLink: typeof import("vue-router")["RouterLink"]; + RouterView: typeof import("vue-router")["RouterView"]; + ScrollPane: typeof import("./../layout/components/TagsView/ScrollPane.vue")["default"]; + Settings: typeof import("./../layout/components/Settings/index.vue")["default"]; + Sidebar: typeof import("./../layout/components/Sidebar/index.vue")["default"]; + SidebarItem: typeof import("./../layout/components/Sidebar/SidebarItem.vue")["default"]; + SingleUpload: typeof import("./../components/Upload/SingleUpload.vue")["default"]; + SizeSelect: typeof import("./../components/SizeSelect/index.vue")["default"]; + SvgIcon: typeof import("./../components/SvgIcon/index.vue")["default"]; + SwitchRoles: typeof import("./../views/demo/permission/components/SwitchRoles.vue")["default"]; + TagInput: typeof import("./../components/TagInput/index.vue")["default"]; + TagsView: typeof import("./../layout/components/TagsView/index.vue")["default"]; + TopMenu: typeof import("./../layout/components/Sidebar/TopMenu.vue")["default"]; + UnfixedThead: typeof import("./../views/demo/table/dynamic-table/components/UnfixedThead.vue")["default"]; + WangEditor: typeof import("./../components/WangEditor/index.vue")["default"]; + } + export interface ComponentCustomProperties { + vLoading: typeof import("element-plus/es")["ElLoadingDirective"]; + } +} diff --git a/vue3/src/typings/env.d.ts b/vue3/src/typings/env.d.ts new file mode 100644 index 00000000..f6231980 --- /dev/null +++ b/vue3/src/typings/env.d.ts @@ -0,0 +1,20 @@ +/// + +declare module "*.vue" { + import { DefineComponent } from "vue"; + // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types + const component: DefineComponent<{}, {}, any>; + export default component; +} + +interface ImportMetaEnv { + /** 应用端口 */ + VITE_APP_PORT: string; + /** API 基础路径 */ + VITE_APP_BASE_API: string; + VITE_APP_API_URL: string; +} + +interface ImportMeta { + readonly env: ImportMetaEnv; +} diff --git a/vue3/src/typings/global.d.ts b/vue3/src/typings/global.d.ts new file mode 100644 index 00000000..c4bb3362 --- /dev/null +++ b/vue3/src/typings/global.d.ts @@ -0,0 +1,89 @@ +declare global { + /** + * 分页查询参数 + */ + interface PageQuery { + pageNum: number; + pageSize: number; + } + + /** + * 分页响应对象 + */ + interface PageResult { + /** 数据列表 */ + list: T; + /** 总数 */ + total: number; + } + + /** + * 页签对象 + */ + interface TagView { + /** 页签名称 */ + name: string; + /** 页签标题 */ + title: string; + /** 页签路由路径 */ + path: string; + /** 页签路由完整路径 */ + fullPath: string; + /** 页签图标 */ + icon?: string; + /** 是否固定页签 */ + affix?: boolean; + /** 是否开启缓存 */ + keepAlive?: boolean; + /** 路由查询参数 */ + query?: any; + } + + /** + * 系统设置 + */ + interface AppSettings { + /** 系统标题 */ + title: string; + /** 系统版本 */ + version: string; + /** 是否显示设置 */ + showSettings: boolean; + /** 是否固定头部 */ + fixedHeader: boolean; + /** 是否显示多标签导航 */ + tagsView: boolean; + /** 是否显示侧边栏Logo */ + sidebarLogo: boolean; + /** 导航栏布局(left|top|mix) */ + layout: string; + /** 主题颜色 */ + themeColor: string; + /** 主题模式(dark|light) */ + theme: string; + /** 布局大小(default |large |small) */ + size: string; + /** 语言( zh-cn| en) */ + language: string; + /** 水印配置 */ + watermark: { + /** 是否开启水印 */ + enabled: boolean; + /** 水印内容 */ + content: string; + }; + } + + /** + * 组件数据源 + */ + interface OptionType { + /** 值 */ + value: string | number; + /** 文本 */ + label: string; + /** 子列表 */ + children?: OptionType[]; + } +} +export {}; diff --git a/vue3/src/typings/router.d.ts b/vue3/src/typings/router.d.ts new file mode 100644 index 00000000..99e187bf --- /dev/null +++ b/vue3/src/typings/router.d.ts @@ -0,0 +1,22 @@ +import "vue-router"; + +declare module "vue-router" { + // https://router.vuejs.org/zh/guide/advanced/meta.html#typescript + // 可以通过扩展 RouteMeta 接口来输入 meta 字段 + interface RouteMeta { + /** 菜单名称 */ + title?: string; + /** 菜单图标 */ + icon?: string; + /** 菜单是否隐藏 */ + hidden?: boolean; + /** 是否固定页签 */ + affix?: boolean; + /** 是否缓存页面 */ + keepAlive?: boolean; + /** 是否在面包屑上隐藏 */ + breadcrumb?: boolean; + /** 拥有菜单权限的角色编码集合 */ + roles?: string[]; + } +} diff --git a/vue3/src/typings/shims-vue.d.ts b/vue3/src/typings/shims-vue.d.ts new file mode 100644 index 00000000..abbc9312 --- /dev/null +++ b/vue3/src/typings/shims-vue.d.ts @@ -0,0 +1 @@ +declare module "xlsx/xlsx.mjs"; diff --git a/vue3/src/utils/i18n.ts b/vue3/src/utils/i18n.ts new file mode 100644 index 00000000..17ed904a --- /dev/null +++ b/vue3/src/utils/i18n.ts @@ -0,0 +1,12 @@ +// translate router.meta.title, be used in breadcrumb sidebar tagsview +import i18n from "@/lang/index"; + +export function translateRouteTitle(title: any) { + // 判断是否存在国际化配置,如果没有原生返回 + const hasKey = i18n.global.te("route." + title); + if (hasKey) { + const translatedTitle = i18n.global.t("route." + title); + return translatedTitle; + } + return title; +} diff --git a/vue3/src/utils/index.ts b/vue3/src/utils/index.ts new file mode 100644 index 00000000..0d626608 --- /dev/null +++ b/vue3/src/utils/index.ts @@ -0,0 +1,39 @@ +/** + * Check if an element has a class + * @param {HTMLElement} ele + * @param {string} cls + * @returns {boolean} + */ +export function hasClass(ele: HTMLElement, cls: string) { + return !!ele.className.match(new RegExp("(\\s|^)" + cls + "(\\s|$)")); +} + +/** + * Add class to element + * @param {HTMLElement} ele + * @param {string} cls + */ +export function addClass(ele: HTMLElement, cls: string) { + if (!hasClass(ele, cls)) ele.className += " " + cls; +} + +/** + * Remove class from element + * @param {HTMLElement} ele + * @param {string} cls + */ +export function removeClass(ele: HTMLElement, cls: string) { + if (hasClass(ele, cls)) { + const reg = new RegExp("(\\s|^)" + cls + "(\\s|$)"); + ele.className = ele.className.replace(reg, " "); + } +} + +/** + * @param {string} path + * @returns {Boolean} + */ +export function isExternal(path: string) { + const isExternal = /^(https?:|http?:|mailto:|tel:)/.test(path); + return isExternal; +} diff --git a/vue3/src/utils/request.ts b/vue3/src/utils/request.ts new file mode 100644 index 00000000..d5277513 --- /dev/null +++ b/vue3/src/utils/request.ts @@ -0,0 +1,63 @@ +import axios, { InternalAxiosRequestConfig, AxiosResponse } from "axios"; +import { useUserStoreHook } from "@/store/modules/user"; + +// 创建 axios 实例 +const service = axios.create({ + baseURL: import.meta.env.VITE_APP_BASE_API, + timeout: 50000, + headers: { "Content-Type": "application/json;charset=utf-8" }, +}); + +// 请求拦截器 +service.interceptors.request.use( + (config: InternalAxiosRequestConfig) => { + const userStore = useUserStoreHook(); + if (userStore.token) { + config.headers.Authorization = userStore.token; + } + return config; + }, + (error: any) => { + return Promise.reject(error); + } +); + +// 响应拦截器 +service.interceptors.response.use( + (response: AxiosResponse) => { + const { code, msg } = response.data; + if (code === "00000") { + return response.data; + } + // 响应数据为二进制流处理(Excel导出) + if (response.data instanceof ArrayBuffer) { + return response; + } + + ElMessage.error(msg || "系统出错"); + return Promise.reject(new Error(msg || "Error")); + }, + (error: any) => { + if (error.response.data) { + const { code, msg } = error.response.data; + // token 过期,重新登录 + if (code === "A0230") { + ElMessageBox.confirm("当前页面已失效,请重新登录", "提示", { + confirmButtonText: "确定", + type: "warning", + }).then(() => { + const userStore = useUserStoreHook(); + userStore.resetToken().then(() => { + location.reload(); + }); + }); + } else { + ElMessage.error(msg || "系统出错"); + } + } + return Promise.reject(error.message); + } +); + +// 导出 axios 实例 +export default service; diff --git a/vue3/src/utils/scroll-to.ts b/vue3/src/utils/scroll-to.ts new file mode 100644 index 00000000..c4e48fc2 --- /dev/null +++ b/vue3/src/utils/scroll-to.ts @@ -0,0 +1,69 @@ +const easeInOutQuad = (t: number, b: number, c: number, d: number) => { + t /= d / 2; + if (t < 1) { + return (c / 2) * t * t + b; + } + t--; + return (-c / 2) * (t * (t - 2) - 1) + b; +}; + +// requestAnimationFrame for Smart Animating http://goo.gl/sx5sts +const requestAnimFrame = (function () { + return ( + window.requestAnimationFrame || + (window as any).webkitRequestAnimationFrame || + (window as any).mozRequestAnimationFrame || + function (callback) { + window.setTimeout(callback, 1000 / 60); + } + ); +})(); + +/** + * Because it's so fucking difficult to detect the scrolling element, just move them all + * @param {number} amount + */ +const move = (amount: number) => { + document.documentElement.scrollTop = amount; + (document.body.parentNode as HTMLElement).scrollTop = amount; + document.body.scrollTop = amount; +}; + +const position = () => { + return ( + document.documentElement.scrollTop || + (document.body.parentNode as HTMLElement).scrollTop || + document.body.scrollTop + ); +}; + +/** + * @param {number} to + * @param {number} duration + * @param {Function} callback + */ +export const scrollTo = (to: number, duration: number, callback?: any) => { + const start = position(); + const change = to - start; + const increment = 20; + let currentTime = 0; + duration = typeof duration === "undefined" ? 500 : duration; + const animateScroll = function () { + // increment the time + currentTime += increment; + // find the value with the quadratic in-out easing function + const val = easeInOutQuad(currentTime, start, change, duration); + // move the document.body + move(val); + // do the animation unless its over + if (currentTime < duration) { + requestAnimFrame(animateScroll); + } else { + if (callback && typeof callback === "function") { + // the animation is done so lets callback + callback(); + } + } + }; + animateScroll(); +}; diff --git a/vue3/src/views/dashboard/components/BarChart.vue b/vue3/src/views/dashboard/components/BarChart.vue new file mode 100644 index 00000000..dc089b1c --- /dev/null +++ b/vue3/src/views/dashboard/components/BarChart.vue @@ -0,0 +1,194 @@ + + + + + diff --git a/vue3/src/views/dashboard/components/FunnelChart.vue b/vue3/src/views/dashboard/components/FunnelChart.vue new file mode 100644 index 00000000..30fedb97 --- /dev/null +++ b/vue3/src/views/dashboard/components/FunnelChart.vue @@ -0,0 +1,106 @@ + + + + diff --git a/vue3/src/views/dashboard/components/PieChart.vue b/vue3/src/views/dashboard/components/PieChart.vue new file mode 100644 index 00000000..e8dd6702 --- /dev/null +++ b/vue3/src/views/dashboard/components/PieChart.vue @@ -0,0 +1,79 @@ + + + + diff --git a/vue3/src/views/dashboard/components/RadarChart.vue b/vue3/src/views/dashboard/components/RadarChart.vue new file mode 100644 index 00000000..2081bf24 --- /dev/null +++ b/vue3/src/views/dashboard/components/RadarChart.vue @@ -0,0 +1,100 @@ + + + + diff --git a/vue3/src/views/dashboard/index.vue b/vue3/src/views/dashboard/index.vue new file mode 100644 index 00000000..fbb43625 --- /dev/null +++ b/vue3/src/views/dashboard/index.vue @@ -0,0 +1,291 @@ + + + + + diff --git a/vue3/src/views/demo/api/apifox.vue b/vue3/src/views/demo/api/apifox.vue new file mode 100644 index 00000000..e625213a --- /dev/null +++ b/vue3/src/views/demo/api/apifox.vue @@ -0,0 +1,27 @@ + + + + diff --git a/vue3/src/views/demo/api/knife4j.vue b/vue3/src/views/demo/api/knife4j.vue new file mode 100644 index 00000000..4929cc6c --- /dev/null +++ b/vue3/src/views/demo/api/knife4j.vue @@ -0,0 +1,27 @@ + + + + diff --git a/vue3/src/views/demo/api/swagger.vue b/vue3/src/views/demo/api/swagger.vue new file mode 100644 index 00000000..dd6dc9d8 --- /dev/null +++ b/vue3/src/views/demo/api/swagger.vue @@ -0,0 +1,27 @@ + + + + diff --git a/vue3/src/views/demo/dict.vue b/vue3/src/views/demo/dict.vue new file mode 100644 index 00000000..fcb6e060 --- /dev/null +++ b/vue3/src/views/demo/dict.vue @@ -0,0 +1,32 @@ + + + + diff --git a/vue3/src/views/demo/icon-selector.vue b/vue3/src/views/demo/icon-selector.vue new file mode 100644 index 00000000..6a419e2f --- /dev/null +++ b/vue3/src/views/demo/icon-selector.vue @@ -0,0 +1,17 @@ + + + + diff --git a/vue3/src/views/demo/icons.vue b/vue3/src/views/demo/icons.vue new file mode 100644 index 00000000..5fd397fe --- /dev/null +++ b/vue3/src/views/demo/icons.vue @@ -0,0 +1,156 @@ + + + + + diff --git a/vue3/src/views/demo/internal-doc.vue b/vue3/src/views/demo/internal-doc.vue new file mode 100644 index 00000000..df51bacc --- /dev/null +++ b/vue3/src/views/demo/internal-doc.vue @@ -0,0 +1,28 @@ + + diff --git a/vue3/src/views/demo/multi-level/children/children/level3-1.vue b/vue3/src/views/demo/multi-level/children/children/level3-1.vue new file mode 100644 index 00000000..888f58e9 --- /dev/null +++ b/vue3/src/views/demo/multi-level/children/children/level3-1.vue @@ -0,0 +1,5 @@ + diff --git a/vue3/src/views/demo/multi-level/children/children/level3-2.vue b/vue3/src/views/demo/multi-level/children/children/level3-2.vue new file mode 100644 index 00000000..a99c98e9 --- /dev/null +++ b/vue3/src/views/demo/multi-level/children/children/level3-2.vue @@ -0,0 +1,5 @@ + diff --git a/vue3/src/views/demo/multi-level/children/level2.vue b/vue3/src/views/demo/multi-level/children/level2.vue new file mode 100644 index 00000000..abcc3a7e --- /dev/null +++ b/vue3/src/views/demo/multi-level/children/level2.vue @@ -0,0 +1,7 @@ + diff --git a/vue3/src/views/demo/multi-level/level1.vue b/vue3/src/views/demo/multi-level/level1.vue new file mode 100644 index 00000000..b26146d7 --- /dev/null +++ b/vue3/src/views/demo/multi-level/level1.vue @@ -0,0 +1,15 @@ + diff --git a/vue3/src/views/demo/signature.vue b/vue3/src/views/demo/signature.vue new file mode 100644 index 00000000..c63fc444 --- /dev/null +++ b/vue3/src/views/demo/signature.vue @@ -0,0 +1,186 @@ + + + diff --git a/vue3/src/views/demo/upload.vue b/vue3/src/views/demo/upload.vue new file mode 100644 index 00000000..7c8051ac --- /dev/null +++ b/vue3/src/views/demo/upload.vue @@ -0,0 +1,37 @@ + + + diff --git a/vue3/src/views/demo/wang-editor.vue b/vue3/src/views/demo/wang-editor.vue new file mode 100644 index 00000000..d7ff4bb8 --- /dev/null +++ b/vue3/src/views/demo/wang-editor.vue @@ -0,0 +1,19 @@ + + + + diff --git a/vue3/src/views/demo/websocket.vue b/vue3/src/views/demo/websocket.vue new file mode 100644 index 00000000..23546a90 --- /dev/null +++ b/vue3/src/views/demo/websocket.vue @@ -0,0 +1,266 @@ + + + + + + diff --git a/vue3/src/views/error-page/401.vue b/vue3/src/views/error-page/401.vue new file mode 100644 index 00000000..79b11aa5 --- /dev/null +++ b/vue3/src/views/error-page/401.vue @@ -0,0 +1,113 @@ + + + + + diff --git a/oms-vue/src/views/error/404.vue b/vue3/src/views/error-page/404.vue similarity index 76% rename from oms-vue/src/views/error/404.vue rename to vue3/src/views/error-page/404.vue index 96f075c1..4e689952 100644 --- a/oms-vue/src/views/error/404.vue +++ b/vue3/src/views/error-page/404.vue @@ -1,157 +1,193 @@ + + + + + - - diff --git a/vue3/src/views/redirect/index.vue b/vue3/src/views/redirect/index.vue new file mode 100644 index 00000000..4215bf69 --- /dev/null +++ b/vue3/src/views/redirect/index.vue @@ -0,0 +1,15 @@ + + + diff --git a/vue3/src/views/system/dept/index.vue b/vue3/src/views/system/dept/index.vue new file mode 100644 index 00000000..268c4953 --- /dev/null +++ b/vue3/src/views/system/dept/index.vue @@ -0,0 +1,316 @@ + + diff --git a/vue3/src/views/system/dict/components/dict-item.vue b/vue3/src/views/system/dict/components/dict-item.vue new file mode 100644 index 00000000..6a68e892 --- /dev/null +++ b/vue3/src/views/system/dict/components/dict-item.vue @@ -0,0 +1,326 @@ + + + + diff --git a/vue3/src/views/system/dict/index.vue b/vue3/src/views/system/dict/index.vue new file mode 100644 index 00000000..5740dce3 --- /dev/null +++ b/vue3/src/views/system/dict/index.vue @@ -0,0 +1,323 @@ + + + + diff --git a/vue3/src/views/system/menu/index.vue b/vue3/src/views/system/menu/index.vue new file mode 100644 index 00000000..bca9f991 --- /dev/null +++ b/vue3/src/views/system/menu/index.vue @@ -0,0 +1,508 @@ + + + diff --git a/vue3/src/views/system/role/index.vue b/vue3/src/views/system/role/index.vue new file mode 100644 index 00000000..17742b7a --- /dev/null +++ b/vue3/src/views/system/role/index.vue @@ -0,0 +1,402 @@ + + + diff --git a/vue3/src/views/system/user/components/dept-tree.vue b/vue3/src/views/system/user/components/dept-tree.vue new file mode 100644 index 00000000..6394b328 --- /dev/null +++ b/vue3/src/views/system/user/components/dept-tree.vue @@ -0,0 +1,69 @@ + + + + diff --git a/vue3/src/views/system/user/index.vue b/vue3/src/views/system/user/index.vue new file mode 100644 index 00000000..80ca5c4e --- /dev/null +++ b/vue3/src/views/system/user/index.vue @@ -0,0 +1,660 @@ + + + + diff --git a/vue3/tsconfig.json b/vue3/tsconfig.json new file mode 100644 index 00000000..6d1e993c --- /dev/null +++ b/vue3/tsconfig.json @@ -0,0 +1,35 @@ +{ + "compilerOptions": { + "target": "esnext", + "useDefineForClassFields": true, + "module": "esnext", + "moduleResolution": "node", + "strict": true, + "noLib": false, + "sourceMap": true, + "resolveJsonModule": true, + "esModuleInterop": true, + "lib": ["esnext", "dom"], + "baseUrl": ".", + "allowJs": true, + "paths": { + "@/*": ["src/*"] + }, + "types": ["vite/client", "unplugin-icons/types/vue", "element-plus/global"], + "skipLibCheck": true /* Skip type checking all .d.ts files. */, + "allowSyntheticDefaultImports": true /* 允许默认导入 */, + "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, + + "jsx": "preserve", + "jsxFactory": "h", + "jsxFragmentFactory": "Fragment" + }, + "include": [ + "src/**/*.ts", + "src/**/*.vue", + "src/typings/**/*.d.ts", + "mock/**/*.ts", + "vite.config.ts" + ], + "exclude": ["node_modules", "dist", "**/*.js"] +} diff --git a/vue3/uno.config.ts b/vue3/uno.config.ts new file mode 100644 index 00000000..346dc505 --- /dev/null +++ b/vue3/uno.config.ts @@ -0,0 +1,35 @@ +// uno.config.ts +import { + defineConfig, + presetAttributify, + presetIcons, + presetTypography, + presetUno, + presetWebFonts, + transformerDirectives, + transformerVariantGroup, +} from "unocss"; + +export default defineConfig({ + shortcuts: { + "flex-center": "flex justify-center items-center", + }, + theme: { + colors: { + primary: "var(--el-color-primary)", + primary_dark: "var(--el-color-primary-light-5)", + }, + }, + presets: [ + presetUno(), + presetAttributify(), + presetIcons(), + presetTypography(), + presetWebFonts({ + fonts: { + // ... + }, + }), + ], + transformers: [transformerDirectives(), transformerVariantGroup()], +}); diff --git a/vue3/vite.config.ts b/vue3/vite.config.ts new file mode 100644 index 00000000..16123a8e --- /dev/null +++ b/vue3/vite.config.ts @@ -0,0 +1,220 @@ +import vue from "@vitejs/plugin-vue"; +import { UserConfig, ConfigEnv, loadEnv, defineConfig } from "vite"; + +import AutoImport from "unplugin-auto-import/vite"; +import Components from "unplugin-vue-components/vite"; +import { ElementPlusResolver } from "unplugin-vue-components/resolvers"; + +import Icons from "unplugin-icons/vite"; +import IconsResolver from "unplugin-icons/resolver"; + +import { createSvgIconsPlugin } from "vite-plugin-svg-icons"; +import mockDevServerPlugin from "vite-plugin-mock-dev-server"; + +import vueJsx from "@vitejs/plugin-vue-jsx"; + +import UnoCSS from "unocss/vite"; +import { resolve } from "path"; + +const pathSrc = resolve(__dirname, "src"); +// https://cn.vitejs.dev/config +export default defineConfig(({ mode }: ConfigEnv): UserConfig => { + const env = loadEnv(mode, process.cwd()); + return { + resolve: { + alias: { + "@": pathSrc, + }, + }, + css: { + // CSS 预处理器 + preprocessorOptions: { + // 定义全局 SCSS 变量 + scss: { + javascriptEnabled: true, + additionalData: ` + @use "@/styles/variables.scss" as *; + `, + }, + }, + }, + server: { + // 允许IP访问 + host: "0.0.0.0", + // 应用端口 (默认:3000) + port: Number(env.VITE_APP_PORT), + // 运行是否自动打开浏览器 + open: true, + proxy: { + /** + * env.VITE_APP_BASE_API: /dev-api + */ + [env.VITE_APP_BASE_API]: { + changeOrigin: true, + // 线上接口地址 + target: "http://vapi.youlai.tech", + // 开发接口地址 + //target: "http://localhost:8989", + rewrite: (path) => + path.replace(new RegExp("^" + env.VITE_APP_BASE_API), ""), + }, + }, + }, + plugins: [ + vue(), + // MOCK 服务,开启 MOCK 放开注释即可 + // mockDevServerPlugin(), + vueJsx(), + UnoCSS({ + hmrTopLevelAwait: false, + }), + // 自动导入参考: https://github.com/sxzz/element-plus-best-practices/blob/main/vite.config.ts + AutoImport({ + // 自动导入 Vue 相关函数,如:ref, reactive, toRef 等 + imports: ["vue", "@vueuse/core", "pinia", "vue-router"], + // 自动导入 Element Plus 相关函数,如:ElMessage, ElMessageBox... (带样式) + resolvers: [ElementPlusResolver(), IconsResolver({})], + eslintrc: { + enabled: false, + filepath: "./.eslintrc-auto-import.json", + globalsPropValue: true, + }, + vueTemplate: true, + // 配置文件生成位置(false:关闭自动生成) + dts: false, + // dts: "src/typings/auto-imports.d.ts", + }), + + Components({ + resolvers: [ + // 自动导入 Element Plus 组件 + ElementPlusResolver(), + // 自动注册图标组件 + IconsResolver({ enabledCollections: ["ep"] }), + ], + // 指定自定义组件位置(默认:src/components) + dirs: ["src/components", "src/**/components"], + // 配置文件位置 (false:关闭自动生成) + dts: false, + // dts: "src/typings/components.d.ts", + }), + + Icons({ + autoInstall: true, + }), + createSvgIconsPlugin({ + // 指定需要缓存的图标文件夹 + iconDirs: [resolve(pathSrc, "assets/icons")], + // 指定symbolId格式 + symbolId: "icon-[dir]-[name]", + }), + ], + // 预加载项目必需的组件 + optimizeDeps: { + include: [ + "vue", + "vue-router", + "pinia", + "axios", + "element-plus/es/components/form/style/css", + "element-plus/es/components/form-item/style/css", + "element-plus/es/components/button/style/css", + "element-plus/es/components/input/style/css", + "element-plus/es/components/input-number/style/css", + "element-plus/es/components/switch/style/css", + "element-plus/es/components/upload/style/css", + "element-plus/es/components/menu/style/css", + "element-plus/es/components/col/style/css", + "element-plus/es/components/icon/style/css", + "element-plus/es/components/row/style/css", + "element-plus/es/components/tag/style/css", + "element-plus/es/components/dialog/style/css", + "element-plus/es/components/loading/style/css", + "element-plus/es/components/radio/style/css", + "element-plus/es/components/radio-group/style/css", + "element-plus/es/components/popover/style/css", + "element-plus/es/components/scrollbar/style/css", + "element-plus/es/components/tooltip/style/css", + "element-plus/es/components/dropdown/style/css", + "element-plus/es/components/dropdown-menu/style/css", + "element-plus/es/components/dropdown-item/style/css", + "element-plus/es/components/sub-menu/style/css", + "element-plus/es/components/menu-item/style/css", + "element-plus/es/components/divider/style/css", + "element-plus/es/components/card/style/css", + "element-plus/es/components/link/style/css", + "element-plus/es/components/breadcrumb/style/css", + "element-plus/es/components/breadcrumb-item/style/css", + "element-plus/es/components/table/style/css", + "element-plus/es/components/tree-select/style/css", + "element-plus/es/components/table-column/style/css", + "element-plus/es/components/select/style/css", + "element-plus/es/components/option/style/css", + "element-plus/es/components/pagination/style/css", + "element-plus/es/components/tree/style/css", + "element-plus/es/components/alert/style/css", + "element-plus/es/components/radio-button/style/css", + "element-plus/es/components/checkbox-group/style/css", + "element-plus/es/components/checkbox/style/css", + "element-plus/es/components/tabs/style/css", + "element-plus/es/components/tab-pane/style/css", + "element-plus/es/components/rate/style/css", + "element-plus/es/components/date-picker/style/css", + "element-plus/es/components/notification/style/css", + "element-plus/es/components/image/style/css", + "element-plus/es/components/statistic/style/css", + "element-plus/es/components/watermark/style/css", + "element-plus/es/components/config-provider/style/css", + "@vueuse/core", + "sortablejs", + "path-to-regexp", + "echarts", + "@wangeditor/editor", + "@wangeditor/editor-for-vue", + "vue-i18n", + ], + }, + // 构建配置 + build: { + chunkSizeWarningLimit: 2000, // 消除打包大小超过500kb警告 + minify: "terser", // Vite 2.6.x 以上需要配置 minify: "terser", terserOptions 才能生效 + terserOptions: { + compress: { + keep_infinity: true, // 防止 Infinity 被压缩成 1/0,这可能会导致 Chrome 上的性能问题 + drop_console: true, // 生产环境去除 console + drop_debugger: true, // 生产环境去除 debugger + }, + format: { + comments: false, // 删除注释 + }, + }, + rollupOptions: { + output: { + // manualChunks: { + // "vue-i18n": ["vue-i18n"], + // }, + // 用于从入口点创建的块的打包输出格式[name]表示文件名,[hash]表示该文件内容hash值 + entryFileNames: "js/[name].[hash].js", + // 用于命名代码拆分时创建的共享块的输出命名 + chunkFileNames: "js/[name].[hash].js", + // 用于输出静态资源的命名,[ext]表示文件扩展名 + assetFileNames: (assetInfo: any) => { + const info = assetInfo.name.split("."); + let extType = info[info.length - 1]; + // console.log('文件信息', assetInfo.name) + if ( + /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/i.test(assetInfo.name) + ) { + extType = "media"; + } else if (/\.(png|jpe?g|gif|svg)(\?.*)?$/.test(assetInfo.name)) { + extType = "img"; + } else if (/\.(woff2?|eot|ttf|otf)(\?.*)?$/i.test(assetInfo.name)) { + extType = "fonts"; + } + return `${extType}/[name].[hash].[ext]`; + }, + }, + }, + }, + }; +});