123 files added
1 files modified
New file |
| | |
| | | # http://editorconfig.org |
| | | root = true |
| | | |
| | | [*] |
| | | charset = utf-8 |
| | | indent_style = space |
| | | indent_size = 2 |
| | | end_of_line = lf |
| | | insert_final_newline = true |
| | | trim_trailing_whitespace = true |
| | | |
| | | [*.md] |
| | | insert_final_newline = false |
| | | trim_trailing_whitespace = false |
New file |
| | |
| | | ### |
| | | # @Author: zhaoxiaoqiang 287285524@qq.com |
| | | # @Date: 2023-08-24 10:47:15 |
| | | # @LastEditors: zhaoxiaoqiang 287285524@qq.com |
| | | # @LastEditTime: 2023-08-24 15:31:13 |
| | | # @FilePath: \qyp_plat\.env.development |
| | | # @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE |
| | | ### |
| | | # just a flag |
| | | ENV = 'development' |
| | | |
| | | # base api |
| | | VUE_APP_BASE_API = '/dev-api' |
| | | # otherConfig |
| | | VUE_APP_ROUTERMENU = 'QYPROUTERS' |
New file |
| | |
| | | # just a flag |
| | | ENV = 'production' |
| | | |
| | | # base api |
| | | VUE_APP_BASE_API = '/prod-api' |
| | | # otherConfig |
| | | VUE_APP_ROUTERMENU = 'QYPROUTERS' |
New file |
| | |
| | | NODE_ENV = production |
| | | |
| | | # just a flag |
| | | ENV = 'staging' |
| | | |
| | | # base api |
| | | VUE_APP_BASE_API = '/stage-api' |
| | | |
New file |
| | |
| | | build/*.js |
| | | src/assets |
| | | public |
| | | dist |
New file |
| | |
| | | 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'] |
| | | } |
| | | } |
New file |
| | |
| | | .DS_Store |
| | | node_modules/ |
| | | dist/ |
| | | npm-debug.log* |
| | | yarn-debug.log* |
| | | yarn-error.log* |
| | | package-lock.json |
| | | tests/**/coverage/ |
| | | |
| | | # Editor directories and files |
| | | .idea |
| | | .vscode |
| | | *.suo |
| | | *.ntvs* |
| | | *.njsproj |
| | | *.sln |
New file |
| | |
| | | language: node_js |
| | | node_js: 10 |
| | | script: npm run test |
| | | notifications: |
| | | email: false |
New file |
| | |
| | | MIT License |
| | | |
| | | Copyright (c) 2017-present PanJiaChen |
| | | |
| | | Permission is hereby granted, free of charge, to any person obtaining a copy |
| | | of this software and associated documentation files (the "Software"), to deal |
| | | in the Software without restriction, including without limitation the rights |
| | | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
| | | copies of the Software, and to permit persons to whom the Software is |
| | | furnished to do so, subject to the following conditions: |
| | | |
| | | The above copyright notice and this permission notice shall be included in all |
| | | copies or substantial portions of the Software. |
| | | |
| | | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| | | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| | | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
| | | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
| | | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
| | | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
| | | SOFTWARE. |
| | |
| | | ## qyp_plat |
| | | ## qyp_finlean_plat |
| | | |
| | | 权益品项目后台 |
| | | 手机租赁平台端 |
| | | |
New file |
| | |
| | | const plugins = ["@vue/babel-plugin-transform-vue-jsx"] |
| | | // 生产环境移除console |
| | | if(process.env.NODE_ENV === 'production') { |
| | | plugins.push("transform-remove-console") |
| | | } |
| | | |
| | | module.exports = { |
| | | plugins:plugins, |
| | | 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. |
| | | // https://panjiachen.github.io/vue-element-admin-site/guide/advanced/lazy-loading.html |
| | | 'plugins': ['dynamic-import-node'] |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | module.exports = { |
| | | moduleFileExtensions: ['js', 'jsx', 'json', 'vue'], |
| | | transform: { |
| | | '^.+\\.vue$': 'vue-jest', |
| | | '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': |
| | | 'jest-transform-stub', |
| | | '^.+\\.jsx?$': 'babel-jest' |
| | | }, |
| | | moduleNameMapper: { |
| | | '^@/(.*)$': '<rootDir>/src/$1' |
| | | }, |
| | | snapshotSerializers: ['jest-serializer-vue'], |
| | | testMatch: [ |
| | | '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)' |
| | | ], |
| | | collectCoverageFrom: ['src/utils/**/*.{js,vue}', '!src/utils/auth.js', '!src/utils/request.js', 'src/components/**/*.{js,vue}'], |
| | | coverageDirectory: '<rootDir>/tests/unit/coverage', |
| | | // 'collectCoverage': true, |
| | | 'coverageReporters': [ |
| | | 'lcov', |
| | | 'text-summary' |
| | | ], |
| | | testURL: 'http://localhost/' |
| | | } |
New file |
| | |
| | | { |
| | | "compilerOptions": { |
| | | "baseUrl": "./", |
| | | "paths": { |
| | | "@/*": ["src/*"] |
| | | } |
| | | }, |
| | | "exclude": ["node_modules", "dist"] |
| | | } |
New file |
| | |
| | | { |
| | | "name": "vue-admin-template", |
| | | "version": "4.4.0", |
| | | "description": "A vue admin template with Element UI & axios & iconfont & permission control & lint", |
| | | "author": "Pan <panfree23@gmail.com>", |
| | | "scripts": { |
| | | "dev": "vue-cli-service serve --open", |
| | | "build:prod": "vue-cli-service build", |
| | | "build:stage": "vue-cli-service build --mode staging", |
| | | "preview": "node build/index.js --preview", |
| | | "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml", |
| | | "lint": "eslint --ext .js,.vue src", |
| | | "test:unit": "jest --clearCache && vue-cli-service test:unit", |
| | | "test:ci": "npm run lint && npm run test:unit" |
| | | }, |
| | | "dependencies": { |
| | | "axios": "0.18.1", |
| | | "blueimp-md5": "^2.19.0", |
| | | "core-js": "3.6.5", |
| | | "default-passive-events": "^2.0.0", |
| | | "echarts": "^4.9.0", |
| | | "element-ui": "^2.15.6", |
| | | "iconv-lite": "^0.6.3", |
| | | "js-cookie": "2.2.0", |
| | | "js-md5": "^0.7.3", |
| | | "moment": "^2.29.1", |
| | | "normalize.css": "7.0.0", |
| | | "nprogress": "0.2.0", |
| | | "path-to-regexp": "2.4.0", |
| | | "vue": "2.6.10", |
| | | "vue-count-to": "^1.0.13", |
| | | "vue-draggable-resizable": "^2.3.0", |
| | | "vue-pdf": "^4.3.0", |
| | | "vue-router": "3.0.6", |
| | | "vuex": "3.1.0" |
| | | }, |
| | | "devDependencies": { |
| | | "@vue/cli-plugin-babel": "4.4.4", |
| | | "@vue/cli-plugin-eslint": "4.4.4", |
| | | "@vue/cli-plugin-unit-jest": "4.4.4", |
| | | "@vue/cli-service": "4.4.4", |
| | | "@vue/test-utils": "1.0.0-beta.29", |
| | | "autoprefixer": "9.5.1", |
| | | "babel-eslint": "10.1.0", |
| | | "babel-jest": "23.6.0", |
| | | "babel-plugin-dynamic-import-node": "2.3.3", |
| | | "babel-plugin-transform-remove-console": "^6.9.4", |
| | | "chalk": "2.4.2", |
| | | "connect": "3.6.6", |
| | | "eslint": "6.7.2", |
| | | "eslint-plugin-vue": "6.2.2", |
| | | "html-webpack-plugin": "3.2.0", |
| | | "husky": "^6.0.0", |
| | | "mockjs": "1.0.1-beta3", |
| | | "runjs": "4.3.2", |
| | | "sass": "1.26.8", |
| | | "sass-loader": "8.0.2", |
| | | "script-ext-html-webpack-plugin": "2.1.3", |
| | | "serve-static": "1.13.2", |
| | | "svg-sprite-loader": "4.1.3", |
| | | "svgo": "1.2.2", |
| | | "vue-template-compiler": "2.6.10" |
| | | }, |
| | | "browserslist": [ |
| | | "> 1%", |
| | | "last 2 versions" |
| | | ], |
| | | "engines": { |
| | | "node": ">=8.9", |
| | | "npm": ">= 3.0.0" |
| | | }, |
| | | "license": "MIT" |
| | | } |
New file |
| | |
| | | // https://github.com/michael-ciniawsky/postcss-load-config |
| | | |
| | | module.exports = { |
| | | 'plugins': { |
| | | // to edit target browsers: use "browserslist" field in package.json |
| | | 'autoprefixer': {} |
| | | } |
| | | } |
New file |
| | |
| | | <!-- |
| | | * @Author: your name |
| | | * @Date: 2021-09-13 14:28:39 |
| | | * @LastEditTime: 2022-01-24 15:33:07 |
| | | * @LastEditors: zxq |
| | | * @Description: In User Settings Edit |
| | | * @FilePath: \ebike_plat\public\index.html |
| | | --> |
| | | |
| | | <!DOCTYPE html> |
| | | <html> |
| | | <head> |
| | | <meta charset="utf-8"> |
| | | <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> |
| | | <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> |
| | | <link rel="icon" href="<%= BASE_URL%>favicon.ico"> |
| | | <!-- <link rel="stylesheet" href="//at.alicdn.com/t/font_3151182_owhi10ehzy8.js"> --> |
| | | <title><%= webpackConfig.name %></title> |
| | | <script src='//at.alicdn.com/t/font_3151182_xzi644yltqm.js'></script> |
| | | |
| | | </head> |
| | | <body> |
| | | <noscript> |
| | | <strong>We're sorry but <%= webpackConfig.name %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong> |
| | | </noscript> |
| | | <div id="app"></div> |
| | | <!-- built files will be auto injected --> |
| | | </body> |
| | | </html> |
New file |
| | |
| | | <!-- |
| | | * @Author: your name |
| | | * @Date: 2021-09-13 14:28:39 |
| | | * @LastEditTime: 2023-05-04 17:13:25 |
| | | * @LastEditors: zxq |
| | | * @Description: In User Settings Edit |
| | | * @FilePath: \qyp_finlean_plat\src\App.vue |
| | | --> |
| | | <template> |
| | | <div id="app"> |
| | | <router-view /> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: 'App', |
| | | created(){ |
| | | } |
| | | } |
| | | </script> |
| | | <style> |
| | | /* .el-table thead{ |
| | | color: #000; |
| | | } */ |
| | | body .el-table th.gutter { |
| | | display: table-cell !important; |
| | | } |
| | | body { |
| | | overflow: hidden; |
| | | } |
| | | </style> |
New file |
| | |
| | | /* |
| | | * @Author: your name |
| | | * @Date: 2021-09-13 14:28:39 |
| | | * @LastEditTime: 2022-01-05 18:14:29 |
| | | * @LastEditors: zxq |
| | | * @Description:账户管理和角色管理接口 |
| | | * @FilePath: \comn_plat\src\api\account.js |
| | | */ |
| | | // 列表接口 |
| | | import request from '@/utils/request'; |
| | | |
| | | |
| | | //编辑保存用户信息/user/update |
| | | export function userUpdate(data) { |
| | | return request({ |
| | | url: '/user/updateStatus', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | //上传文件 |
| | | export function uploadFile(data) { |
| | | return request({ |
| | | url: '/public/uploadFile', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // ================= |
| | | //修改用户状态 |
| | | export function changeStatus(data) { |
| | | data['sysType'] =4; |
| | | return request({ |
| | | url: '/user/changeStatus', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 忘记密码 |
| | | export function forgetPwd(data) { |
| | | data['sysType'] =4; |
| | | return request({ |
| | | url: '/user/forgetPwd', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
New file |
| | |
| | | /* |
| | | * @Author: your name |
| | | * @Date: 2021-09-22 10:18:34 |
| | | * @LastEditTime: 2023-07-10 10:39:47 |
| | | * @LastEditors: zhaoxiaoqiang 287285524@qq.com |
| | | * @Description: In User Settings Edit |
| | | * @FilePath: \qyp_finlean_plat\src\api\credit.js |
| | | */ |
| | | // 列表接口 |
| | | import request from '@/utils/request'; |
| | | |
| | | |
| | | //项目初始化 |
| | | export function projectInit(data) { |
| | | return request({ |
| | | url: '/qyp/project/init', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | //新增项目 |
| | | export function projectAdd(data) { |
| | | return request({ |
| | | url: '/qyp/project/add', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | //项目详情 |
| | | export function projectDtl(data) { |
| | | return request({ |
| | | url: '/qyp/project/dtl', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | //项目详情 |
| | | export function projectUpdata(data) { |
| | | return request({ |
| | | url: '/qyp/project/update', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 推广位初始化qyp/promote/init |
| | | export function promoteInit(data) { |
| | | return request({ |
| | | url: '/qyp/promote/init', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 新增推广位 |
| | | export function promoteAdd(data) { |
| | | return request({ |
| | | url: '/qyp/promote/add', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 推广位详情 |
| | | export function promoteDtl(data) { |
| | | return request({ |
| | | url: '/qyp/promote/dtl', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 推广位编辑 |
| | | export function promotePpdate(data) { |
| | | return request({ |
| | | url: '/qyp/promote/update', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
New file |
| | |
| | | /* |
| | | * @Author: zxq |
| | | * @Date: 2021-12-23 15:19:23 |
| | | * @LastEditors: zxq |
| | | * @LastEditTime: 2022-07-05 14:34:37 |
| | | * @Description: Description |
| | | * @FilePath: \qyp-plat\src\api\latefee.js |
| | | */ |
| | | // |
| | | import request from '@/utils/request' |
| | | // 支付滞纳金 |
| | | export function lateFeePay(data) { |
| | | return request({ |
| | | url: '/lateFee/pay', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 支付滞纳金详情 |
| | | export function lateFeePayDtl(data) { |
| | | return request({ |
| | | url: '/lateFee/payDtl', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 支付初始化 |
| | | export function lateFeePayInit(data) { |
| | | return request({ |
| | | url: '/lateFee/payInit', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 利息支付 |
| | | export function interestPay(data) { |
| | | return request({ |
| | | url: '/interest/pay', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 利息支付详情 |
| | | export function interestPayDtl(data) { |
| | | return request({ |
| | | url: '/interest/payDtl', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 利息支付初始化 |
| | | export function interestPayInit(data) { |
| | | return request({ |
| | | url: '/interest/payInit', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 保理服务费支付 |
| | | export function serviceFeePay(data) { |
| | | return request({ |
| | | url: '/serviceFee/pay', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 保理服务费支付详情 |
| | | export function serviceFeePayDtl(data) { |
| | | return request({ |
| | | url: '/serviceFee/payDtl', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 保理服务费支付初始化 |
| | | export function serviceFeePayInit(data) { |
| | | return request({ |
| | | url: '/serviceFee/payInit', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | //放款支付 |
| | | export function loanPay(data) { |
| | | return request({ |
| | | url: '/loan/pay', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 房款支付详情 |
| | | export function loanPayDtl(data) { |
| | | return request({ |
| | | url: '/loan/payDtl', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 放款支付初始化 |
| | | export function loanPayInit(data) { |
| | | return request({ |
| | | url: '/loan/payInit', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 初始化订单搜索条件 |
| | | |
| | | export function orderInit(data) { |
| | | return request({ |
| | | url: '/order/pageInit', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 订单详情 |
| | | export function orderDtl(data) { |
| | | return request({ |
| | | url: '/order/dtl', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 放款机构初期服务费管理 |
| | | // 放款机构初期服务费管支付 |
| | | export function loanOrgEarlySerFeePay(data) { |
| | | return request({ |
| | | url: '/loanOrgEarlySerFee/pay', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 放款机构初期服务费管支付详情 |
| | | export function loanOrgEarlySerFeeDtl(data) { |
| | | return request({ |
| | | url: '/loanOrgEarlySerFee/payDtl', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 放款机构初期服务费管初始化 |
| | | export function loanOrgEarlySerFeeInit(data) { |
| | | return request({ |
| | | url: '/loanOrgEarlySerFee/payInit', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | |
| | | // 放款机构末期服务费管支付 |
| | | export function loanOrgLateSerFeePay(data) { |
| | | return request({ |
| | | url: '/loanOrgLateSerFee/pay', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 放款机构末期服务费管支付详情 |
| | | export function loanOrgLateSerFeeDtl(data) { |
| | | return request({ |
| | | url: '/loanOrgLateSerFee/payDtl', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 放款机构末期服务费管初始化 |
| | | export function loanOrgLateSerFeeInit(data) { |
| | | return request({ |
| | | url: '/loanOrgLateSerFee/payInit', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | |
| | | |
| | | // 租赁机构服务费管理支付 |
| | | export function rentOrgSerFeePay(data) { |
| | | return request({ |
| | | url: '/rentOrgSerFee/pay', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 租赁机构服务费管理支付详情 |
| | | export function rentOrgSerFeeDtl(data) { |
| | | return request({ |
| | | url: '/rentOrgSerFee/payDtl', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 租赁机构服务费管理支付初始化 |
| | | export function rentOrgSerFeeInit(data) { |
| | | return request({ |
| | | url: '/rentOrgSerFee/payInit', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 放款 |
| | | export function loanEnter(data) { |
| | | return request({ |
| | | url: '/loan/loan', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 放款订单导出 |
| | | export function loanExport(params) { |
| | | return request({ |
| | | url: '/loan/loanExport', |
| | | method: 'get', |
| | | params |
| | | }) |
| | | } |
| | | |
| | | // 蚂蚁服务费管理支付初始化 |
| | | export function antServiceFeePayInit(data) { |
| | | return request({ |
| | | url: '/antServiceFee/payInit', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | |
| | | // 蚂蚁服务费管理支付 |
| | | export function antServiceFeePay(data) { |
| | | return request({ |
| | | url: '/antServiceFee/pay', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | |
| | | // 蚂蚁服务费管理支付详情 |
| | | export function antServiceFeePayDtl(data) { |
| | | return request({ |
| | | url: '/antServiceFee/payDtl', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | |
| | | // 网商服务费支付初始化 |
| | | export function wsServiceFeePayInit(data) { |
| | | return request({ |
| | | url: '/wsServiceFee/payInit', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | |
| | | // 网商服务费支付 |
| | | export function wsServiceFeePay(data) { |
| | | return request({ |
| | | url: '/wsServiceFee/pay', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | |
| | | // 网商服务费支付详情 |
| | | export function wsServiceFeePayDtl(data) { |
| | | return request({ |
| | | url: '/wsServiceFee/payDtl', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | |
| | | // Vintage订单查询初始化 |
| | | export function numVintagePageInit(data) { |
| | | return request({ |
| | | url: '/count/numVintage/pageInit', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | |
| | | // Vintage金额查询初始化 |
| | | export function amtVintagePageInit(data) { |
| | | return request({ |
| | | url: '/count/amtVintage/pageInit', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | |
| | | // 订单审核 |
| | | export function orderApproveConfirm(data) { |
| | | return request({ |
| | | url: '/order/settle/approveConfirm', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 订单审核确认 |
| | | export function orderSettleApproval(data) { |
| | | return request({ |
| | | url: '/order/settle/approval', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 本金回款管理 每日回款 全部详情导出 |
| | | export function cashBackAllDtlExport(data) { |
| | | return request({ |
| | | url: '/cashBack/allDtlExport', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | |
| | | // 本金回款管理 账单日期 全部详情导出 |
| | | export function billDayAllDtlExport(data) { |
| | | return request({ |
| | | url: '/cashBack/billDay/allDtlExport', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
New file |
| | |
| | | /* |
| | | * @Author: your name |
| | | * @Date: 2021-09-16 17:39:48 |
| | | * @LastEditTime: 2023-08-25 10:09:01 |
| | | * @LastEditors: zhaoxiaoqiang 287285524@qq.com |
| | | * @Description:这个文件只用作列表和导出接口的使用 |
| | | * @FilePath: \qyp-plat\src\api\listapi.js |
| | | */ |
| | | import request from "@/utils/request"; |
| | | |
| | | let accountApi = { |
| | | // 用户列表 |
| | | userList(data) { |
| | | return request({ |
| | | url: "/user/list", |
| | | method: "post", |
| | | data, |
| | | }); |
| | | }, |
| | | |
| | | // 角色列表 |
| | | roleGetRoleList(data) { |
| | | return request({ |
| | | url: "/role/getRoleList", |
| | | method: "post", |
| | | data, |
| | | }); |
| | | }, |
| | | projectList(data) { |
| | | return request({ |
| | | url: "/qyp/project/list", |
| | | method: "post", |
| | | data, |
| | | }); |
| | | }, |
| | | promoteList(data) { |
| | | return request({ |
| | | url: "/qyp/promote/list", |
| | | method: "post", |
| | | data, |
| | | }); |
| | | }, |
| | | }; |
| | | export default accountApi; |
New file |
| | |
| | | /* |
| | | * @Author: zxq |
| | | * @Date: 2022-01-04 17:26:04 |
| | | * @LastEditors: zxq |
| | | * @LastEditTime: 2022-01-07 10:39:56 |
| | | * @Description: Description |
| | | * @FilePath: \comn_plat\src\api\order.js |
| | | */ |
| | | // 列表接口 |
| | | import request from '@/utils/request'; |
| | | //放款机构管理 新增/编辑 |
| | | export function loanOrgSave(data) { |
| | | return request({ |
| | | url: '/loanOrg/save', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | //放款机构管理 详情 |
| | | export function loanOrgDtl(data) { |
| | | return request({ |
| | | url: '/loanOrg/dtl', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | |
| | | //租赁机构管理 新增/编辑 |
| | | export function rentOrgSave(data) { |
| | | return request({ |
| | | url: '/rentOrg/save', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | |
| | | //租赁机构管理 详情 |
| | | export function rentOrgDtl(data) { |
| | | return request({ |
| | | url: '/rentOrg/dtl', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | |
| | | //金融产品管理 新增/编辑 |
| | | export function prodSave(data) { |
| | | return request({ |
| | | url: '/prod/save', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | |
| | | //金融产品管理 详情 |
| | | export function prodDtl(data) { |
| | | return request({ |
| | | url: '/prod/dtl', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | |
New file |
| | |
| | | /* |
| | | * @Author: your name |
| | | * @Date: 2021-09-22 10:18:34 |
| | | * @LastEditTime: 2022-01-05 15:24:07 |
| | | * @LastEditors: zxq |
| | | * @Description: In User Settings Edit |
| | | * @FilePath: \comn_plat\src\api\serve.js |
| | | */ |
| | | // 列表接口 |
| | | import request from '@/utils/request'; |
| | | //支付详情 |
| | | export function capOrderFee(data) { |
| | | return request({ |
| | | url: '/capOrderFee/dtl', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | //授服务费初始化 |
| | | export function capOrderFeeInit(data) { |
| | | return request({ |
| | | url: '/capOrderFee/init', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | //服务费支付 |
| | | export function capOrderFeePay(data) { |
| | | return request({ |
| | | url: '/capOrderFee/pay', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | //订单服务费支付初始化 |
| | | export function capOrderFeePayInit(data) { |
| | | return request({ |
| | | url: '/capOrderFee/payInit', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
New file |
| | |
| | | //用户信息及公共接口 |
| | | import request from '@/utils/request' |
| | | |
| | | export function login(data) { |
| | | return request({ |
| | | url: '/login', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | |
| | | export function getInfo(token) { |
| | | return request({ |
| | | url: '/vue-admin-template/user/info', |
| | | method: 'get', |
| | | params: { token } |
| | | }) |
| | | } |
| | | // 强制退出 |
| | | export function logout() { |
| | | return request({ |
| | | url: '/logout', |
| | | method: 'post' |
| | | }) |
| | | } |
| | | //更新用户密码 |
| | | export function updatePwd(data) { |
| | | return request({ |
| | | url: '/user/updatePwd', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 重置密码 |
| | | export function resetUserPwd(data) { |
| | | return request({ |
| | | url: '/user/resetUserPwd', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 更新当前用户信息 |
| | | export function userInitUpdate(data) { |
| | | return request({ |
| | | url: '/user/initUpdate', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | //新增用户 |
| | | export function userAdd(data) { |
| | | return request({ |
| | | url: '/user/add', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | //编辑保存用户信息/user/update |
| | | export function userUpdate(data) { |
| | | return request({ |
| | | url: '/user/update', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 期数初始化/ |
| | | export function pageInit(data) { //获取省市区 |
| | | return request({ |
| | | url: '/public/pageInit', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 角色列表 |
| | | export function roleGetRoleList(data) { |
| | | return request({ |
| | | url: '/role/getRoleList', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 角色列表init/role/setInit |
| | | export function setInit(data) { |
| | | return request({ |
| | | url: '/role/setInit', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 角色授权 |
| | | export function setPower(data) { |
| | | return request({ |
| | | url: '/role/setPower', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | //增加用户角色 |
| | | export function roleAdd(data) { |
| | | return request({ |
| | | url: '/role/add', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | //增加用户角色/role/update |
| | | export function roleUpdate(data) { |
| | | return request({ |
| | | url: '/role/update', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 删除角色 |
| | | export function roleDel(data) { |
| | | return request({ |
| | | url: '/role/delete', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // 用户角色初始化角色 |
| | | export function roleInitUpdate(data) { |
| | | return request({ |
| | | url: '/role/initUpdate', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | export function userManageDisabled(data) { |
| | | return request({ |
| | | url: '/user/disabledUser', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | // ================= |
| | | export function uploadFile(data) { //文件上传公共 |
| | | return request({ |
| | | url: '/pub/uploadFile', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | export function monthAmtVintagePageInit(data) { //获取省市区 |
| | | return request({ |
| | | url: '/count/monthAmtVintage/pageInit', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8" standalone="no"?> |
| | | <svg width="1361px" height="609px" viewBox="0 0 1361 609" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> |
| | | <!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch --> |
| | | <title>Group 21</title> |
| | | <desc>Created with Sketch.</desc> |
| | | <defs></defs> |
| | | <g id="Ant-Design-Pro-3.0" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> |
| | | <g id="账户密码登录-校验" transform="translate(-79.000000, -82.000000)"> |
| | | <g id="Group-21" transform="translate(77.000000, 73.000000)"> |
| | | <g id="Group-18" opacity="0.8" transform="translate(74.901416, 569.699158) rotate(-7.000000) translate(-74.901416, -569.699158) translate(4.901416, 525.199158)"> |
| | | <ellipse id="Oval-11" fill="#CFDAE6" opacity="0.25" cx="63.5748792" cy="32.468367" rx="21.7830479" ry="21.766008"></ellipse> |
| | | <ellipse id="Oval-3" fill="#CFDAE6" opacity="0.599999964" cx="5.98746479" cy="13.8668601" rx="5.2173913" ry="5.21330997"></ellipse> |
| | | <path d="M38.1354514,88.3520215 C43.8984227,88.3520215 48.570234,83.6838647 48.570234,77.9254015 C48.570234,72.1669383 43.8984227,67.4987816 38.1354514,67.4987816 C32.3724801,67.4987816 27.7006688,72.1669383 27.7006688,77.9254015 C27.7006688,83.6838647 32.3724801,88.3520215 38.1354514,88.3520215 Z" id="Oval-3-Copy" fill="#CFDAE6" opacity="0.45"></path> |
| | | <path d="M64.2775582,33.1704963 L119.185836,16.5654915" id="Path-12" stroke="#CFDAE6" stroke-width="1.73913043" stroke-linecap="round" stroke-linejoin="round"></path> |
| | | <path d="M42.1431708,26.5002681 L7.71190162,14.5640702" id="Path-16" stroke="#E0B4B7" stroke-width="0.702678964" opacity="0.7" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1.405357899873153,2.108036953469981"></path> |
| | | <path d="M63.9262187,33.521561 L43.6721326,69.3250951" id="Path-15" stroke="#BACAD9" stroke-width="0.702678964" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1.405357899873153,2.108036953469981"></path> |
| | | <g id="Group-17" transform="translate(126.850922, 13.543654) rotate(30.000000) translate(-126.850922, -13.543654) translate(117.285705, 4.381889)" fill="#CFDAE6"> |
| | | <ellipse id="Oval-4" opacity="0.45" cx="9.13482653" cy="9.12768076" rx="9.13482653" ry="9.12768076"></ellipse> |
| | | <path d="M18.2696531,18.2553615 C18.2696531,13.2142826 14.1798519,9.12768076 9.13482653,9.12768076 C4.08980114,9.12768076 0,13.2142826 0,18.2553615 L18.2696531,18.2553615 Z" id="Oval-4" transform="translate(9.134827, 13.691521) scale(-1, -1) translate(-9.134827, -13.691521) "></path> |
| | | </g> |
| | | </g> |
| | | <g id="Group-14" transform="translate(216.294700, 123.725600) rotate(-5.000000) translate(-216.294700, -123.725600) translate(106.294700, 35.225600)"> |
| | | <ellipse id="Oval-2" fill="#CFDAE6" opacity="0.25" cx="29.1176471" cy="29.1402439" rx="29.1176471" ry="29.1402439"></ellipse> |
| | | <ellipse id="Oval-2" fill="#CFDAE6" opacity="0.3" cx="29.1176471" cy="29.1402439" rx="21.5686275" ry="21.5853659"></ellipse> |
| | | <ellipse id="Oval-2-Copy" stroke="#CFDAE6" opacity="0.4" cx="179.019608" cy="138.146341" rx="23.7254902" ry="23.7439024"></ellipse> |
| | | <ellipse id="Oval-2" fill="#BACAD9" opacity="0.5" cx="29.1176471" cy="29.1402439" rx="10.7843137" ry="10.7926829"></ellipse> |
| | | <path d="M29.1176471,39.9329268 L29.1176471,18.347561 C23.1616351,18.347561 18.3333333,23.1796097 18.3333333,29.1402439 C18.3333333,35.1008781 23.1616351,39.9329268 29.1176471,39.9329268 Z" id="Oval-2" fill="#BACAD9"></path> |
| | | <g id="Group-9" opacity="0.45" transform="translate(172.000000, 131.000000)" fill="#E6A1A6"> |
| | | <ellipse id="Oval-2-Copy-2" cx="7.01960784" cy="7.14634146" rx="6.47058824" ry="6.47560976"></ellipse> |
| | | <path d="M0.549019608,13.6219512 C4.12262681,13.6219512 7.01960784,10.722722 7.01960784,7.14634146 C7.01960784,3.56996095 4.12262681,0.670731707 0.549019608,0.670731707 L0.549019608,13.6219512 Z" id="Oval-2-Copy-2" transform="translate(3.784314, 7.146341) scale(-1, 1) translate(-3.784314, -7.146341) "></path> |
| | | </g> |
| | | <ellipse id="Oval-10" fill="#CFDAE6" cx="218.382353" cy="138.685976" rx="1.61764706" ry="1.61890244"></ellipse> |
| | | <ellipse id="Oval-10-Copy-2" fill="#E0B4B7" opacity="0.35" cx="179.558824" cy="175.381098" rx="1.61764706" ry="1.61890244"></ellipse> |
| | | <ellipse id="Oval-10-Copy" fill="#E0B4B7" opacity="0.35" cx="180.098039" cy="102.530488" rx="2.15686275" ry="2.15853659"></ellipse> |
| | | <path d="M28.9985381,29.9671598 L171.151018,132.876024" id="Path-11" stroke="#CFDAE6" opacity="0.8"></path> |
| | | </g> |
| | | <g id="Group-10" opacity="0.799999952" transform="translate(1054.100635, 36.659317) rotate(-11.000000) translate(-1054.100635, -36.659317) translate(1026.600635, 4.659317)"> |
| | | <ellipse id="Oval-7" stroke="#CFDAE6" stroke-width="0.941176471" cx="43.8135593" cy="32" rx="11.1864407" ry="11.2941176"></ellipse> |
| | | <g id="Group-12" transform="translate(34.596774, 23.111111)" fill="#BACAD9"> |
| | | <ellipse id="Oval-7" opacity="0.45" cx="9.18534718" cy="8.88888889" rx="8.47457627" ry="8.55614973"></ellipse> |
| | | <path d="M9.18534718,17.4450386 C13.8657264,17.4450386 17.6599235,13.6143199 17.6599235,8.88888889 C17.6599235,4.16345787 13.8657264,0.332739156 9.18534718,0.332739156 L9.18534718,17.4450386 Z" id="Oval-7"></path> |
| | | </g> |
| | | <path d="M34.6597385,24.809694 L5.71666084,4.76878945" id="Path-2" stroke="#CFDAE6" stroke-width="0.941176471"></path> |
| | | <ellipse id="Oval" stroke="#CFDAE6" stroke-width="0.941176471" cx="3.26271186" cy="3.29411765" rx="3.26271186" ry="3.29411765"></ellipse> |
| | | <ellipse id="Oval-Copy" fill="#F7E1AD" cx="2.79661017" cy="61.1764706" rx="2.79661017" ry="2.82352941"></ellipse> |
| | | <path d="M34.6312443,39.2922712 L5.06366663,59.785082" id="Path-10" stroke="#CFDAE6" stroke-width="0.941176471"></path> |
| | | </g> |
| | | <g id="Group-19" opacity="0.33" transform="translate(1282.537219, 446.502867) rotate(-10.000000) translate(-1282.537219, -446.502867) translate(1142.537219, 327.502867)"> |
| | | <g id="Group-17" transform="translate(141.333539, 104.502742) rotate(275.000000) translate(-141.333539, -104.502742) translate(129.333539, 92.502742)" fill="#BACAD9"> |
| | | <circle id="Oval-4" opacity="0.45" cx="11.6666667" cy="11.6666667" r="11.6666667"></circle> |
| | | <path d="M23.3333333,23.3333333 C23.3333333,16.8900113 18.1099887,11.6666667 11.6666667,11.6666667 C5.22334459,11.6666667 0,16.8900113 0,23.3333333 L23.3333333,23.3333333 Z" id="Oval-4" transform="translate(11.666667, 17.500000) scale(-1, -1) translate(-11.666667, -17.500000) "></path> |
| | | </g> |
| | | <circle id="Oval-5-Copy-6" fill="#CFDAE6" cx="201.833333" cy="87.5" r="5.83333333"></circle> |
| | | <path d="M143.5,88.8126685 L155.070501,17.6038544" id="Path-17" stroke="#BACAD9" stroke-width="1.16666667"></path> |
| | | <path d="M17.5,37.3333333 L127.466252,97.6449735" id="Path-18" stroke="#BACAD9" stroke-width="1.16666667"></path> |
| | | <polyline id="Path-19" stroke="#CFDAE6" stroke-width="1.16666667" points="143.902597 120.302281 174.935455 231.571342 38.5 147.510847 126.366941 110.833333"></polyline> |
| | | <path d="M159.833333,99.7453842 L195.416667,89.25" id="Path-20" stroke="#E0B4B7" stroke-width="1.16666667" opacity="0.6"></path> |
| | | <path d="M205.333333,82.1372105 L238.719406,36.1666667" id="Path-24" stroke="#BACAD9" stroke-width="1.16666667"></path> |
| | | <path d="M266.723424,132.231988 L207.083333,90.4166667" id="Path-25" stroke="#CFDAE6" stroke-width="1.16666667"></path> |
| | | <circle id="Oval-5" fill="#C1D1E0" cx="156.916667" cy="8.75" r="8.75"></circle> |
| | | <circle id="Oval-5-Copy-3" fill="#C1D1E0" cx="39.0833333" cy="148.75" r="5.25"></circle> |
| | | <circle id="Oval-5-Copy-2" fill-opacity="0.6" fill="#D1DEED" cx="8.75" cy="33.25" r="8.75"></circle> |
| | | <circle id="Oval-5-Copy-4" fill-opacity="0.6" fill="#D1DEED" cx="243.833333" cy="30.3333333" r="5.83333333"></circle> |
| | | <circle id="Oval-5-Copy-5" fill="#E0B4B7" cx="175.583333" cy="232.75" r="5.25"></circle> |
| | | </g> |
| | | </g> |
| | | </g> |
| | | </g> |
| | | </svg> |
New file |
| | |
| | | @font-face {font-family: "iconfont"; |
| | | src: url('iconfont.eot?t=1618802174097'); /* IE9 */ |
| | | src: url('iconfont.eot?t=1618802174097#iefix') format('embedded-opentype'), /* IE6-IE8 */ |
| | | url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAABJ8AAsAAAAAKUQAABItAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCGIgq+PLAvATYCJAOBBAtEAAQgBYRtB4NXGyohM1KzGiD7rzEmMtS9QAiFVgPIKMUudQCAh+KZglgBIALOCqWHAaimaQCABLAADbAAgHU+w8tWJ/8MK+DAC4ADBQylhOf/57L7MTAvmZ+0XWa2rLoOEDTbXYsS8PjC8SsHBXU6sKVVrpf//53qu3LwPSvxcgROAdEpOSUWhIroIkhDT9rYGCw5MbQpIAUEvwOE6XHOf0mQtEiTgpfiVvD8vwQtntpGmQUrKi1yrMCkTDtXbNKZd+KdifO1w8atE4gGAHwjeDnVjDGoAMmEvbLJJ80p9mu4tt6V/p3By3ARKoAtYM0AgPqf5j6zkw9lcJgSCtMaUyMqVGaSv82bvIW3PJvFcpZTzi8R27pW/RSQFMEJh/KcOOHOnbxzJ+QZe0Los22ZJ9FXT7XYxshAtv17zAp4Y46oiRNXKFb8vDcUkNLFIGrWnEWriLH4UmG6Q/v3bifO5WBrWiviDC+4pkVdwhHr0/oJXOQ/vWr1F4PGGfxLLtszexfTmlo1jTSNtWwqhqVOAcPrgQEGAQvqitA9h4lhEHdSkWvZVi8tkpp+zUgTYKazrxs66qSzLrrqpp32OmijrXoNqgSFUh0hIyel0v9fPIPF4YmISVCgPP4YAc6yhepuaAK0PzqiCUrKiCABYkiABBIghQTIQLQDchDtgQJEB6AE0QaoQLQFahD1QAOiAWhBVIEORAB6EAUwgCiBEUQdMIEQYAaRAQuIHFhBpMAGogLsIDRwgDDACcICFwgH3CA88ICIgBdEDHwgEuBH4j5wurMzzgBeQtoGRFwD8JFb13B6dCWDjBxzl3iWFBOAp9M6LBqFK2gSPEJEhhO/cZtgC4s6tLPxZapx9ywLoYjyOITMw65rURGsxpKKJImVqqiXsq7hpbvVjx+QmLZ5XlppXy9fD3NFctbFd+jSvh0keWqT7mAwq7PNisFF4ptxReuHNGiWCFj/lHnIq2kQWxbDm+3Nwm3VjTZyrZ7rq4JsLntvQHZDMVx+U/qYJ8TrYYCTN5hV15TS+rZrH9rR29+ZLgvulnM7XhwRfCvs4XDP8oye/kzH75oe/tG39pOGu3/8PRW/b3tFT36kqeTc+zZmBzXXh9Jnr7amKq9s0gJIK0FC62FwqCEsOLWkmlodSUKJ71STXiavcIdQWKMFmHZYUcYiA7OTiutdSexqPjHkK0FOkLE4ArzMEEjyGjlEb9caYYPvugjXXmsBNc1Dzza2RpErEgE1qcXRJo2ThEASHKGanuHLXWnk1JhAhKXkMCs6CKXEpVBS5eXwnHfRL5IJcXNC5ak6dnYweoiehnEoOblsipimGIgwi3VCLEsqo6IUsG2ZGMZyzBlaIkU5O7Sx0hPIIsCZKMRYDKFXonGhCsurYuxsGZ8cj+jBaKQVhbXcnFwyfXSuqbNVs9447NxQosVVQk8NKVkkjDpiVFQzxwjLRpi/hCdH2J0A73JDtHJyr2xwASAoerUzQeRcml2CpcSZGjKONmMgeqqlr7JBwiEuOyZ2dSG+fCoQDpSGINAlayk4B+JsVyQ603XWCkVli7HDQPZ2GMjwNQtw+Y1RrgzC1ztWlOfqGLuKGhm6qIP5LbDA7bC8JFK7Mbg3PsAgJw9iLY6skiC5XcTSz1uWk05QkCVhHmgkEQFrjIClW6WKCbAivq3FgVkkIWE+AjKwVyeHQeU0DY8XNCa6TehsvMPJyxchgGEZdkgYVKbx65eKoixHj3ZaeKTL4tp6X/RE7G+5aAksXxQ7LKvA2zmp65I6tO0Gay5xZRjCxZ5t29FHV8wCOdFZuGgSXZbO9xSf22BZgm6axjCGv4C1Lhwb4i5Ztj1bu3BUOXaRnG9Wm9YQ9u5kjuWCLBeUxVhYJaqMnIxNdGej+Tk7v281n2OhqhXPQICpdLt5JuKGeLduvBDPkPJAp068FzOEoT7+gcTdm6Igs8se62o5CHE5a+z2uDag/xzlLVqwHKpuy/AozNe0bIkqWvKpnnyYZwLAAMjONzEJdJ3+Xn1cxlwYdswc3LQEGfR5u+8lSRtkzm6Wzy1nDMEUr0+tVts+WsJcmFSltHpYYMuWwJzB2pBKpfV9fXCNKjENwll9qCXhM0avi8NtmW0UL4+st46x9WAJtSyxYKk0WvRBbOjTzuuEAaMHYAAg1hURIPRaJXqCFeGYYVg94he0S+EdHjUsq68cTpFFTiFQlTjPe8cm9J695JZzxwbPpmq43bvI4LMwKY6xluSk0NPxNlNkcWKwQI911iara3gfFkQiS8ELQlz2K8x3jt91vM/77iFrt6NjCkT5+lXwmoq0R9dOAainrz8moD+8ehKpA0ZhUdTU7ZbllmbIiCCsOT8mFylX7sGzgoRyYLN+FYGhbZyHqNfJbt1sNBGPAEJ6K8jZnhzqoyAEVLvZXpZD5ZYsodSGcETgkLVEkx5ZAyw4XhSOPRl9TwzhoGmak7Y7vhmh8oo61vZXpwgnjElGiZaEEjVFQE+g9UocqytEz/IVBUIu2izNXLZ0xuZR8meM6JEEbgQ/9gbCN9PISWGHE2gH8YndKwY+ClJWSMZCE0x1cCfkbSaP8MQDfZVCPg4DueKtKcmbVErvRJWmBISjEIL0mutCnIo5OkAgjhj8ebYrKlpzJP7cV2pywNNcVTYMerbusqZ5UcXaWSrlLSYILyHacqBocA3Rg4jKBu0tNa4iVUzeG+KpLF4jssSt46oa9ea2rllXIJ+GFp1paIVyobppyGL6dSB2ieRsf9he9KT+16+gKWdJK5axnbOE736wMGNYxkKWh55EAu7vW0ZiYv2MbYuU/W/mVe4a8H7Gb2bzB5xH6pCFvliXZg1887OpHdYt2L+/w6QHL8369tetpX274HKTmfNXjnC183opF+X1totPY9DAv6HGIld4vuyXPB+4nkAaPHFxHyzPupyVRtM/wCzdl7xBoxZodnTQsJQ909n/d4Vqer5NG7l4pj8zzm3cVFKHRx7RxarP4RpddrjB33C4bPQ8sKbM4/I8lv1D1iPdxSnxhjz0oOl+b+m58PW8dFZ6ByUyiZ44ESVyNvKNkOQ8fyd/Xmt3+mxj1r1Zn7zj+tt3dHl97I0zntNcdGdH1DhQePjwucIGzz+C//3/xHDv2LHL7262M+S1Eydem+PPfGGDv7/2wIpX/dSpcHjBDSQdaES/Rp0+43iN/KCfR/b0biOle3aXEGmsj3r/fcrnAXHTJhH8bBs3geihfO+/P5wizHf0RGrTRo0qu6NHl6OcP87gZCb6KPYomhfLi9ZzXHXYTgI5M9ti+//esVCkmr2yUSj6rdvAfiemWv7bt0ikWvVyXakNZ3FsItQKtAtViL16/jCWgnWF4w76jIijqIZqM6MoB22ZhegRDvJPQvQIx9Iz/hZr/5mOy/AtVoYrVwxWW3DZlERmCTLkP4QU29BCoWkH0WEp068kGJ2QsuklelGSvIQQ99h9WsIeGy/jXnEaJAa5Y+AWopXdVzZCxOoKouKKwoRPWCmuJL926segjqgjvXSEzqYfFDafkK9ZarGb2M1VYnJMyd1J7LRYuqWI2MNeukZOyLlK7vd4ThEa1jB+AFURKsyQfBFrzLMEzl+sWMPYQdTiyyd3dgDs5TD5DJnMlWIsE8WWvyw8P7Hw2QHSjIljzEjAvQFr3HoJxSeYInqOVqgOr84LB5hZfWZliKmXcC7Ce/AyCYUxiW/++gjGzM6MoTwp2DFxYiBjFkMJzh6Rvx6CzetBFIJV++8nz38JgWpD2Som5FQDkskw7V1bFKM6/3tbcQW+lVy0yK4/Lvzo0X10ivsuee5L+K2kgH6uKv5R9a1yNdHP6eT3HTqkqTo5B1Zugjr40w8eHJOq+Ivz1/U5AAj5fWiIbwhan5YUpfGnB4OD/42HzJ07yDqjeDhfetnEafCuXfC01KjW+9XdO0davoT/MxxDRmcGKWebXa3uCYntSIWn7do1rSwm70+ewm/8fbFY4O96UCTesPCCz3heKf1HntPU9vC2aU60Z7YnqL3LZNYmRxS5z1sAloibsN4i8xHQ9C5JAqTJJVirbGAQkwqW9snS2bE7J/uMI+Aihb8njJp5eEBmplZ88ggNxTaoIbcZGunSfbK3PXj2b9QJ8ytqhOb3zod6GnuBSQF6rkQ5+GYWMlOl0lIq+zFG5lXduu+UidMTvRDU1MMdMjcbjeitjzFlZ4xFuqxMiV/ABXirtAS6F3kW9G8q3rNHUbDXfX5RL1ac1DS9pV0nRDIzd3Xcd1Ho22woC+JlZr99UnyX7wsOVPHS8/PjTjXBXG/PJJAJaB/qSvKqiSuT77pHXuJGj3nFJxnkAvq0afjdCMHfzTlN7NK/m3Irn3nFOKeqpE1vp0mM3MsL/Safy8vSEZ5BzkKtXAvvuklRxGBAsvVSg2G+tF5iF9Lfj4jdNTlGk1cQ0P6A46CZ9aBgAngnvfCAe4wtWKNfRC7S6wS8k79+nVQvWl+d+oLtalw/q2QIdLHNSQvLY12GrgteIDYvBCfwKxLztGgrcYt05eyr+JpRa8esWy265XnxxTcwAvr1C4r8At84ZHtDPQmEN9jh+tk+ZJdnF8bO1uPZaDvbc/atRHvrWVvO4Xkx7s++JV/ykGX7kD5MtjeZ5a7HefXPxBTASiWMIeVKVQEkh1SqFAUqpZx4KpVwrKO3p18lEle3SwO3ZIkG3r0H6QPeiOaDz1+i3sXwFgru+4dqrvCjNRI+6CzRRDPjZckphKaPzVnvRHu0M4eFrsNBi3HhI3KNi8Bl4dBCwknSQtvVJCBto8pAboB3U0lOw0E3GztvylngTHlHT+wuUJchkH4tap5Ax0R78ygvyjkuIFAd+Ml2mBx2lmIUhUe/j4YoChjd0kneW4ZZxSPTQb5ocUbEpskvhf37kjqAkBWgEIkUgc00+gkDFQlgLtWxr1/4q3eTMIJeDOR0HrmKYd6SvFTWE0EOhHlWHpEfhI2/dcvo79vGneSTAgonjYxwsn4OCJtkHBn5mS9cSD7IYy2eggtSBMzQS4PnZyorLlRU3KrzI7SwXg+rrQWHmaYk/OqCSzJAZ1qGWsuZOtMzm+ClS2HYTTMAzhqLPgVeTxM8W1c3SAcF7qkdynxomgQCjVXoQfTH1B/MPz5xAmaAXGK4RT0XyLD2HlFSjZSoiYmMWOvU7rDOyPLWu3p2tZYnFmgPtGvswT8NzO3dY1VYL20IDqYc9+UTh/PpC9nk5QTBVqq7J+efdZowEKsvhD4HiYEwlNBZwN/9beyH7IyXekgEMoTovmk1rMDOgkrPC2RpOLPnNr0rpBoWDbU6cY2l9WkoWS5Phtyo24GSacgQu4P2NI1BY0w9aUmi9BYht8yGEE4h815x4wfXvPNMVs7+U1H2N+n7enB/pW29zk9FjjIaFbxQRAs/AcD4BdEiGK/SOxiEFLkl8HW0VSOgbQ38Pl613RT4GPoxrjKxiLR4NHwLTRH7kgmILSJDufAJNEcC20bBu9rmwSMjh4T11j/vzsWI4dOLyQuGt2eR//Ht9+9pm3+9M9caE4hpvlQHJP4xZ0kuZxdpfm73ZfbHpaZD3bvXo76nQRqUQY2Ulf7cLmlQSpUSjyzoWqSzbsR6aTY+SHcqRulebKqeGujp+hV1vCq1Ewzw1dOV4FvXch90I/jRbPxXd9r4172Q0VNrmt5iRZ/2d+48SIJYHC/CRugU86kTTf8MmlPps2m8yzv4YCeI3XpbrH0CB17FZUKh90RKKI+ZeOzdH6QpitxjAhGtDVF+s9ko0WXXEWaljpk8IBHrMyYcXYa1IshROyed0o//DGgsJfmahc6HfQe8wJ68sLO2ldCeHCe1UFeCQUHbI08pgnoeyuL0R6JAGlQhIRefLQEiZM008HI3Nt7KlKyzNp+e3TYOF98i/St3Tze3tLa1d3T+8fxNdnX39DYUSnXqNWijrXba66CjTjrroqtuLvJbbZ4pBkf1D3mU2EltMPZsHUOXJ3CJlS4YcEKI1qFao9PdYDhhiv2JbV8NnOuLiUcCH6/ISmxKelCtnM5iU1G8NflueMJGRioLaJYutf14c3EsXU72xDLfmk98NQ7gh6p9GAzyqd5LGRvnrQJXqAdCDxq4YEWjRp3A/tS7GtsKkTA3s+6cLWtpM6+QPWLdwK3lZEznyujOGQi5ekFufLIZqBYbNYIdpKp7gRO3quxg2ikMjoOwEbXGWYcaPLirwYPcycGMNu14MP1RdqkEAA==') format('woff2'), |
| | | url('iconfont.woff?t=1618802174097') format('woff'), |
| | | url('iconfont.ttf?t=1618802174097') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ |
| | | url('iconfont.svg?t=1618802174097#iconfont') format('svg'); /* iOS 4.1- */ |
| | | } |
| | | |
| | | .iconfont { |
| | | font-family: "iconfont" !important; |
| | | font-size: 16px; |
| | | font-style: normal; |
| | | -webkit-font-smoothing: antialiased; |
| | | -moz-osx-font-smoothing: grayscale; |
| | | } |
| | | |
| | | .iconoutdent:before { |
| | | content: "\e83b"; |
| | | } |
| | | |
| | | .iconkabao:before { |
| | | content: "\e833"; |
| | | } |
| | | |
| | | .iconlishixinxi:before { |
| | | content: "\e834"; |
| | | } |
| | | |
| | | .iconwenjianshenbaochenggong:before { |
| | | content: "\e835"; |
| | | } |
| | | |
| | | .iconshujutongji:before { |
| | | content: "\e836"; |
| | | } |
| | | |
| | | .iconzhexiantu:before { |
| | | content: "\e837"; |
| | | } |
| | | |
| | | .iconshujutu-tiaoxing:before { |
| | | content: "\e838"; |
| | | } |
| | | |
| | | .iconzhengmingxinxi:before { |
| | | content: "\e839"; |
| | | } |
| | | |
| | | .iconwenjian1:before { |
| | | content: "\e83a"; |
| | | } |
| | | |
| | | .iconzichanbaoguanli:before { |
| | | content: "\e831"; |
| | | } |
| | | |
| | | .icondingdanguanli:before { |
| | | content: "\e832"; |
| | | } |
| | | |
| | | .iconchanpinxinxi:before { |
| | | content: "\e82e"; |
| | | } |
| | | |
| | | .iconuser:before { |
| | | content: "\e82f"; |
| | | } |
| | | |
| | | .iconxiaoshouwangluo:before { |
| | | content: "\e830"; |
| | | } |
| | | |
| | | .iconxuanze:before { |
| | | content: "\e829"; |
| | | } |
| | | |
| | | .iconstore:before { |
| | | content: "\e82a"; |
| | | } |
| | | |
| | | .iconzhanghaoguanli:before { |
| | | content: "\e82b"; |
| | | } |
| | | |
| | | .icondingweiweizhi:before { |
| | | content: "\e82c"; |
| | | } |
| | | |
| | | .iconscanning:before { |
| | | content: "\e82d"; |
| | | } |
| | | |
| | | .iconxiugaimima:before { |
| | | content: "\e827"; |
| | | } |
| | | |
| | | .icontuichudenglu:before { |
| | | content: "\e828"; |
| | | } |
| | | |
| | | .iconzuojiantou:before { |
| | | content: "\e825"; |
| | | } |
| | | |
| | | .iconyou:before { |
| | | content: "\e826"; |
| | | } |
| | | |
| | | .iconquxiao:before { |
| | | content: "\e822"; |
| | | } |
| | | |
| | | .iconjia:before { |
| | | content: "\e823"; |
| | | } |
| | | |
| | | .iconsousuo:before { |
| | | content: "\e824"; |
| | | } |
| | | |
| | | .iconyewushuju_h:before { |
| | | content: "\e81c"; |
| | | } |
| | | |
| | | .iconyewushuju:before { |
| | | content: "\e81d"; |
| | | } |
| | | |
| | | .iconchechangguanli:before { |
| | | content: "\e81e"; |
| | | } |
| | | |
| | | .icongerenzhongxin_h:before { |
| | | content: "\e81f"; |
| | | } |
| | | |
| | | .iconchechangguanli_h:before { |
| | | content: "\e820"; |
| | | } |
| | | |
| | | .icongerenzhongxin:before { |
| | | content: "\e821"; |
| | | } |
| | | |
New file |
| | |
| | | !function(c){var h,l,a,t,i,v,o='<svg><symbol id="iconoutdent" viewBox="0 0 1024 1024"><path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8z m-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56z m504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8z m0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4 0.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1c-4.5 3.5-4.5 10.3 0 13.8z" ></path></symbol><symbol id="iconkabao" viewBox="0 0 1024 1024"><path d="M232.876 477.424c-10.986-24.126-12.016-51.124-2.898-76.02L281.7 259.3c9.494-25.618 28.274-45.874 52.942-57.2 24.668-11.328 52.272-12.372 77.722-2.936L764.222 327.23c52.602 18.792 80.192 77.062 61.338 129.83l-56.5-20.188c7.72-21.612-3.58-45.478-25.192-53.2L391.68 255.486c-10.59-3.924-21.896-3.496-31.998 1.142a41.348 41.348 0 0 0-21.66 23.36L286.34 421.986c-3.68 10.05-3.268 20.888 1.142 30.574l-54.606 24.864z" fill="#20263B" ></path><path d="M904 1024H120C53.832 1024 0 970.168 0 904V120C0 53.832 53.832 0 120 0h784c66.168 0 120 53.832 120 120v784c0 66.168-53.832 120-120 120zM120 4C56.038 4 4 56.038 4 120v784c0 63.962 52.038 116 116 116h784c63.962 0 116-52.038 116-116V120c0-63.962-52.038-116-116-116H120z" fill="#C8CFD6" ></path><path d="M752 832H272c-44.112 0-80-35.888-80-80V492c0-44.112 35.888-80 80-80h480c44.112 0 80 35.888 80 80v260c0 44.112-35.888 80-80 80zM272 472c-11.028 0-20 8.972-20 20v260c0 11.028 8.972 20 20 20h480c11.028 0 20-8.972 20-20V492c0-11.028-8.972-20-20-20H272z" fill="#20263B" ></path><path d="M710 572H314c-16.568 0-30-13.432-30-30s13.432-30 30-30h396c16.568 0 30 13.432 30 30s-13.432 30-30 30z" fill="#FF4B07" ></path></symbol><symbol id="iconlishixinxi" viewBox="0 0 1024 1024"><path d="M904 1024H120C53.832 1024 0 970.168 0 904V120C0 53.832 53.832 0 120 0h784c66.168 0 120 53.832 120 120v784c0 66.168-53.832 120-120 120zM120 4C56.038 4 4 56.038 4 120v784c0 63.962 52.038 116 116 116h784c63.962 0 116-52.038 116-116V120c0-63.962-52.038-116-116-116H120z" fill="#C8CFD6" ></path><path d="M722 771.998c11.028 0 20-8.97 20-19.998V338c0-11.028-8.972-20-20-20H608.442l-8.75-49.57c-1.68-9.52-9.96-16.43-19.692-16.43H444c-9.732 0-18.014 6.91-19.694 16.43l-8.75 49.57H302c-11.028 0-20 8.972-20 20v414c0 11.028 8.972 19.998 20 19.998h420m0 60H302c-44.184 0-80-35.814-80-79.998V338c0-44.182 35.818-80 80-80h63.218c6.62-37.506 39.374-66 78.782-66h136c39.406 0 72.16 28.494 78.78 66H722c44.182 0 80 35.818 80 80v414c0 44.184-35.818 79.998-80 79.998z" fill="#20263B" ></path><path d="M648.3 481.99l0.1 60-272.13 0.462-0.1-60z" fill="#3C8EFE" ></path><path d="M580 394H444c-44.112 0-80-35.888-80-80v-42c0-44.112 35.888-80 80-80h136c44.112 0 80 35.888 80 80v42c0 44.112-35.888 80-80 80zM444 252c-11.028 0-20 8.972-20 20v42c0 11.028 8.972 20 20 20h136c11.028 0 20-8.972 20-20v-42c0-11.028-8.972-20-20-20H444z" fill="#20263B" ></path></symbol><symbol id="iconwenjianshenbaochenggong" viewBox="0 0 1024 1024"><path d="M904 1024H120C53.832 1024 0 970.168 0 904V120C0 53.832 53.832 0 120 0h784c66.168 0 120 53.832 120 120v784c0 66.168-53.832 120-120 120zM120 4C56.038 4 4 56.038 4 120v784c0 63.962 52.038 116 116 116h784c63.962 0 116-52.038 116-116V120c0-63.962-52.038-116-116-116H120z" fill="#C8CFD6" ></path><path d="M772.4 442h-86.8c-32.864 0-59.6-26.736-59.6-59.6V295c0-56.794 46.206-103 103-103s103 46.206 103 103v87.4c0 32.864-26.736 59.6-59.6 59.6zM686 382h86v-87c0-23.71-19.29-43-43-43s-43 19.29-43 43v87z" fill="#20263B" ></path><path d="M655.998 832c-3.588 0-7.192-0.642-10.638-1.952l-213.008-80.804-199.204 80.566a29.998 29.998 0 0 1-41.248-27.78c-0.04-36.364-0.032-40.614-0.018-47.15 0.008-4.258 0.018-9.49 0.018-25.282V295.416c-0.326-8.166-0.244-45.64 26.234-73.978 12.522-13.402 35.73-29.412 75.188-29.578 75.386-0.31 432.484 0.136 436.084 0.14l-0.078 60c-3.598-0.006-360.534-0.46-435.754-0.14-14.692 0.06-25.028 3.508-31.596 10.54-10.462 11.196-10.148 30.212-10.136 30.396 0.04 0.636 0.06 1.274 0.06 1.912V729.6c0 15.864-0.01 21.12-0.018 25.396l-0.004 2.52 168.876-68.3a29.976 29.976 0 0 1 21.888-0.238l183.224 69.506c-0.016-8.868-0.026-18.636-0.026-28.882 0.004-3.118 0.296-310.222 0.296-435.6h60c0 125.406-0.292 432.542-0.296 435.628 0 39.46 0.158 71.9 0.16 72.222A30.006 30.006 0 0 1 655.998 832z" fill="#20263B" ></path><path d="M415.768 583.566a29.904 29.904 0 0 1-21.004-8.582c-11.828-11.602-12.012-30.596-0.412-42.424l120.5-122.862c11.602-11.828 30.598-12.014 42.424-0.412 11.83 11.602 12.014 30.596 0.412 42.424l-120.5 122.86a29.904 29.904 0 0 1-21.42 8.996z" fill="#3C8EFE" ></path><path d="M415.778 583.546a29.89 29.89 0 0 1-20.608-8.204l-54.052-51.112c-12.038-11.384-12.57-30.372-1.186-42.41 11.382-12.04 30.372-12.57 42.41-1.186l54.052 51.114c12.038 11.382 12.57 30.372 1.186 42.408a29.908 29.908 0 0 1-21.802 9.39z" fill="#3C8EFE" ></path></symbol><symbol id="iconshujutongji" viewBox="0 0 1024 1024"><path d="M904 1024H120C53.832 1024 0 970.168 0 904V120C0 53.832 53.832 0 120 0h784c66.168 0 120 53.832 120 120v784c0 66.168-53.832 120-120 120zM120 4C56.038 4 4 56.038 4 120v784c0 63.962 52.038 116 116 116h784c63.962 0 116-52.038 116-116V120c0-63.962-52.038-116-116-116H120z" fill="#C8CFD6" ></path><path d="M697.67 541.708c-85.85 0-185.688-0.06-185.688-0.06-16.562-0.01-29.982-13.44-29.982-30v-289.71c0-16.568 13.432-30 30-30 176.288 0 319.708 143.42 319.708 319.708 0 16.542-13.39 29.962-29.934 30-21.71 0.048-61.16 0.062-104.104 0.062zM542 481.666c52.992 0.026 163.682 0.072 227.99 0.024-13.764-119.3-108.7-214.244-227.99-228.03v228.006z" fill="#3C8EFE" ></path><path d="M454.602 831.888c-144.744 0-262.5-117.758-262.5-262.502h60c0 111.66 90.84 202.502 202.5 202.502 111.658 0 202.5-90.842 202.5-202.502h60c0 144.744-117.758 262.502-262.5 262.502z" fill="#20263B" ></path><path d="M252.102 569.89h-60c0-144.744 117.756-262.502 262.5-262.502v60c-111.66 0-202.5 90.844-202.5 202.502z" fill="#20263B" ></path></symbol><symbol id="iconzhexiantu" viewBox="0 0 1024 1024"><path d="M904 1024H120C53.832 1024 0 970.168 0 904V120C0 53.832 53.832 0 120 0h784c66.168 0 120 53.832 120 120v784c0 66.168-53.832 120-120 120zM120 4C56.038 4 4 56.038 4 120v784c0 63.962 52.038 116 116 116h784c63.962 0 116-52.038 116-116V120c0-63.962-52.038-116-116-116H120z" fill="#C8CFD6" ></path><path d="M758 832c-16.568 0-30-13.432-30-30V418c0-16.568 13.432-30 30-30s30 13.432 30 30v384c0 16.568-13.432 30-30 30z m-164 0c-16.568 0-30-13.432-30-30V600c0-16.568 13.432-30 30-30s30 13.432 30 30v202c0 16.568-13.432 30-30 30z m-164 0c-16.568 0-30-13.432-30-30V528c0-16.568 13.432-30 30-30s30 13.432 30 30v274c0 16.568-13.432 30-30 30z m-164 0c-16.568 0-30-13.432-30-30V628c0-16.568 13.432-30 30-30s30 13.432 30 30v174c0 16.568-13.432 30-30 30z" fill="#20263B" ></path><path d="M222.008 532.844c-9.382 0-18.622-4.386-24.472-12.614-9.602-13.502-6.442-32.234 7.06-41.836l251.8-179.09c12.404-8.822 29.45-6.958 39.652 4.34l57.286 63.436 157.58-114.976H639.09c-16.568 0-30-13.432-30-30s13.432-30 30-30h163.838a30 30 0 0 1 17.682 54.236L566.866 431.48c-12.41 9.054-29.652 7.27-39.948-4.128l-57.504-63.678L239.372 527.29a29.868 29.868 0 0 1-17.364 5.554z" fill="#FF4B07" ></path></symbol><symbol id="iconshujutu-tiaoxing" viewBox="0 0 1024 1024"><path d="M904 1024H120c-66.2 0-120-53.8-120-120V120C0 53.8 53.8 0 120 0h784c66.2 0 120 53.8 120 120v784c0 66.2-53.8 120-120 120zM120 4C56 4 4 56 4 120v784c0 64 52 116 116 116h784c64 0 116-52 116-116V120c0-64-52-116-116-116H120z" fill="#C8CFD6" ></path><path d="M513 832c-53.4 0-97-43.6-97-97v-126c0-53.4 43.6-97 97-97s97 43.6 97 97v126c0 53.4-43.6 97-97 97z m0-260c-20.4 0-37 16.6-37 37v126c0 20.4 16.6 37 37 37s37-16.6 37-37v-126c0-20.4-16.6-37-37-37z" fill="#3C8EFE" ></path><path d="M289 832c-53.4 0-97-43.6-97-97v-264c0-53.4 43.6-97 97-97s97 43.6 97 97v264c0 53.4-43.6 97-97 97z m0-398c-20.4 0-37 16.6-37 37v264c0 20.4 16.6 37 37 37s37-16.6 37-37v-264c0-20.4-16.6-37-37-37zM735 832c-53.4 0-97-43.6-97-97v-446c0-53.4 43.6-97 97-97s97 43.6 97 97v446c0 53.4-43.6 97-97 97z m0-580c-20.4 0-37 16.6-37 37v446c0 20.4 16.6 37 37 37s37-16.6 37-37v-446c0-20.4-16.6-37-37-37z" fill="#20263B" ></path></symbol><symbol id="iconzhengmingxinxi" viewBox="0 0 1024 1024"><path d="M904 1024H120C53.832 1024 0 970.168 0 904V120C0 53.832 53.832 0 120 0h784c66.168 0 120 53.832 120 120v784c0 66.168-53.832 120-120 120zM120 4C56.038 4 4 56.038 4 120v784c0 63.962 52.038 116 116 116h784c63.962 0 116-52.038 116-116V120c0-63.962-52.038-116-116-116H120z" fill="#C8CFD6" ></path><path d="M793.334 512H654.666C633.346 512 616 494.654 616 473.334V300c0-59.552 48.45-108 108-108s108 48.448 108 108v173.334c0 21.32-17.346 38.666-38.666 38.666zM676 452h96V300c0-26.468-21.534-48-48-48s-48 21.532-48 48v152zM320.028 831.998c-70.512 0.008-127.94-57.342-128.028-127.906 0-0.028-0.03-90.036-0.03-122.686h60c0 32.646 0.03 122.638 0.03 122.638 0.046 37.474 30.572 67.954 68.064 67.954h157.208v60H320.028z" fill="#20263B" ></path><path d="M572.894 832C516.772 832 454 781.29 454 713.422V581.654h60v131.768C514 744.968 546.382 772 572.894 772v60zM366 511.996h-60v-217.5c0-56.518 45.054-102.5 100.432-102.5h315.23v60h-315.23c-22.294 0-40.432 19.066-40.432 42.5v217.5z" fill="#20263B" ></path><path d="M575.468 831.996H406.43v-60h169.038c22.294 0 40.432-19.064 40.432-42.5l0.146-373.278 60 0.024-0.146 373.266c0 56.508-45.052 102.488-100.432 102.488z" fill="#20263B" ></path><path d="M514 582h-60c0-5.514-4.486-10-10-10H339.216v-60H444c38.598 0 70 31.402 70 70z" fill="#20263B" ></path><path d="M252 582h-60c0-38.598 31.402-70 70-70h104.784v60H262c-5.514 0-10 4.486-10 10z" fill="#20263B" ></path><path d="M477.228 316H588v60H477.228z m-65.306 96H588v60H411.922z" fill="#3C8EFE" ></path></symbol><symbol id="iconwenjian1" viewBox="0 0 1024 1024"><path d="M904 1024H120C53.832 1024 0 970.168 0 904V120C0 53.832 53.832 0 120 0h784c66.168 0 120 53.832 120 120v784c0 66.168-53.832 120-120 120zM120 4C56.038 4 4 56.038 4 120v784c0 63.962 52.038 116 116 116h784c63.962 0 116-52.038 116-116V120c0-63.962-52.038-116-116-116H120z" fill="#C8CFD6" ></path><path d="M638.844 831.954h-344.35C237.978 831.954 192 785.974 192 729.46V291.952h60V729.46c0 23.43 19.062 42.492 42.494 42.492h344.35c23.432 0 42.494-19.062 42.494-42.492V294.494h60V729.46c0 56.514-45.978 102.494-102.494 102.494z" fill="#20263B" ></path><path d="M252 731.954h-60V294.446c0-56.516 45.978-102.494 102.494-102.494h344.348v60H294.494c-23.432 0-42.494 19.062-42.494 42.494v437.508z" fill="#20263B" ></path><path d="M752.258 351.946h-0.02l-136.342-0.056 0.024-60 136.22 0.056c10.976-0.114 19.838-9.114 19.768-20.104-0.068-10.874-8.972-19.778-19.848-19.848H631.882v-60H752.25c43.732 0.276 79.38 35.924 79.658 79.468 0.278 44.1-35.372 80.202-79.468 80.482l-0.182 0.002z" fill="#20263B" ></path><path d="M637.836 351.946H303.34c-16.532 0-29.948-13.374-30-29.904s13.278-29.99 29.81-30.094c10.876-0.07 19.78-8.974 19.85-19.85 0.034-5.336-2.012-10.366-5.762-14.162s-8.752-5.906-14.088-5.94l0.38-59.998c21.362 0.134 41.392 8.582 56.402 23.782 15.01 15.2 23.202 35.336 23.066 56.698a79.206 79.206 0 0 1-2.546 19.468h257.386v60z" fill="#20263B" ></path><path d="M602 572H470c-16.568 0-30-13.432-30-30s13.432-30 30-30h132c16.568 0 30 13.432 30 30s-13.432 30-30 30z m0 100H330c-16.568 0-30-13.432-30-30s13.432-30 30-30h272c16.568 0 30 13.432 30 30s-13.432 30-30 30z m0-208H470c-16.568 0-30-13.432-30-30s13.432-30 30-30h132c16.568 0 30 13.432 30 30s-13.432 30-30 30z" fill="#3C8EFE" ></path></symbol><symbol id="iconzichanbaoguanli" viewBox="0 0 1024 1024"><path d="M880 184H712v-64c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v64H384v-64c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v64H144c-17.7 0-32 14.3-32 32v664c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V216c0-17.7-14.3-32-32-32z m-40 656H184V256h128v48c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8v-48h256v48c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8v-48h128v584z" ></path><path d="M639.5 414h-45c-3 0-5.8 1.7-7.1 4.4L514 563.8h-2.8l-73.4-145.4c-1.4-2.7-4.1-4.4-7.1-4.4h-46c-1.3 0-2.7 0.3-3.8 1-3.9 2.1-5.3 7-3.2 10.9l89.3 164h-48.6c-4.4 0-8 3.6-8 8v21.3c0 4.4 3.6 8 8 8h65.1v33.7h-65.1c-4.4 0-8 3.6-8 8v21.3c0 4.4 3.6 8 8 8h65.1V752c0 4.4 3.6 8 8 8h41.3c4.4 0 8-3.6 8-8v-53.8h65.4c4.4 0 8-3.6 8-8v-21.3c0-4.4-3.6-8-8-8h-65.4v-33.7h65.4c4.4 0 8-3.6 8-8v-21.3c0-4.4-3.6-8-8-8h-49.1l89.3-164.1c0.6-1.2 1-2.5 1-3.8 0.1-4.4-3.4-8-7.9-8z" ></path></symbol><symbol id="icondingdanguanli" viewBox="0 0 1024 1024"><path d="M832 112H724V72c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v40H500V72c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v40H320c-17.7 0-32 14.3-32 32v120h-96c-17.7 0-32 14.3-32 32v632c0 17.7 14.3 32 32 32h512c17.7 0 32-14.3 32-32v-96h96c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zM664 888H232V336h218v174c0 22.1 17.9 40 40 40h174v338z m0-402H514V336h0.2L664 485.8v0.2z m128 274h-56V456L544 264H360v-80h68v32c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8v-32h152v32c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8v-32h68v576z" ></path></symbol><symbol id="iconchanpinxinxi" viewBox="0 0 1024 1024"><path d="M168.107 621.44l120.746 57.963L512.128 787.54l215.317-104.32 128.768-61.674a64 64 0 0 1-29.952 84.97L540.032 845.141a64 64 0 0 1-55.808 0l-286.23-138.624a64 64 0 0 1-29.887-85.077z m687.829-133.93a64 64 0 0 1-29.675 85.546L540.011 711.68a64 64 0 0 1-55.808 0L197.995 573.056a64 64 0 0 1-31.168-82.176L483.84 640.405l28.288 13.696 286.23-138.624-0.15-0.064 57.728-27.882zM540.032 185.791L826.24 324.395a64 64 0 0 1 0 115.2L540.032 578.219a64 64 0 0 1-55.808 0l-286.23-138.624a64 64 0 0 1 0-115.2l286.23-138.582a64 64 0 0 1 55.808 0z m-27.904 57.6l-286.23 138.603 286.23 138.624 286.23-138.624-286.23-138.603z" ></path></symbol><symbol id="iconuser" viewBox="0 0 1024 1024"><path d="M512 128c212.075 0 384 171.925 384 384S724.075 896 512 896 128 724.075 128 512s171.925-384 384-384z m0 64c-176.725 0-320 143.275-320 320 0 91.243 38.187 173.547 99.413 231.85l108.523-129.386a195.861 195.861 0 0 0 60.01 28.053l-117.93 140.651A318.507 318.507 0 0 0 512 832a318.507 318.507 0 0 0 161.237-43.52l-120.17-143.296a195.541 195.541 0 0 0 62.442-25.088L725.1 750.72A319.21 319.21 0 0 0 832 512c0-176.725-143.275-320-320-320z m0 106.667a154.07 154.07 0 0 1 76.373 287.914l-0.64 0.363-0.704 0.405a153.685 153.685 0 0 1-4.928 2.624l5.632-3.029A153.685 153.685 0 0 1 512 606.805a153.643 153.643 0 0 1-58.07-11.306l-0.213-0.086a153.173 153.173 0 0 1-5.653-2.453l5.888 2.56a153.195 153.195 0 0 1-20.97-10.475A154.07 154.07 0 0 1 512 298.667z m0 64a90.07 90.07 0 1 0 0 180.138 90.07 90.07 0 0 0 0-180.138z" ></path></symbol><symbol id="iconxiaoshouwangluo" viewBox="0 0 1024 1024"><path d="M512 149.333l6.89 0.064h0.875l6.187 0.214c39.168 1.472 76.715 9.173 111.723 22.101l-4.118-1.493c2.56 0.896 5.12 1.834 7.659 2.794l-3.541-1.301a367.701 367.701 0 0 1 20.16 8.15l-1.067-0.47a295.749 295.749 0 0 1 7.488 3.35l-6.4-2.902a488.108 488.108 0 0 1 8.277 3.776l-1.877-0.853a284.18 284.18 0 0 1 8.917 4.266l-7.04-3.413a361.813 361.813 0 0 1 32.918 17.6v0.021a363.008 363.008 0 0 1 29.61 19.904l-4.885-3.584a313.735 313.735 0 0 1 6.037 4.438l-1.152-0.854c2.155 1.6 4.31 3.243 6.443 4.907l-5.29-4.053c2.389 1.813 4.778 3.626 7.125 5.504l-1.835-1.451a411.909 411.909 0 0 1 8.213 6.613l-6.378-5.162a364.8 364.8 0 0 1 21.696 18.602l-1.323-1.216a468.326 468.326 0 0 1 5.845 5.483l-4.522-4.267a364.821 364.821 0 0 1 19.605 19.627l5.248 5.803 0.299 0.341a364.165 364.165 0 0 1 38.058 51.563l0.064 0.085 4.31 7.275a361.835 361.835 0 0 1 20.352 41.002l-2.432-5.653a357.355 357.355 0 0 1 10.069 25.472l-1.11-3.115a319.612 319.612 0 0 1 2.646 7.595l1.259 3.755 2.517 8.106a360.661 360.661 0 0 1 10.773 47.574c1.003 6.4 1.835 12.8 2.496 19.285l-0.32-3.008c0.32 3.03 0.64 6.059 0.875 9.11l-0.555-6.102a367.68 367.68 0 0 1 0.576 68.267l0.214-2.539-0.64 7.275 0.426-4.736a362.624 362.624 0 0 1-3.456 27.882 359.936 359.936 0 0 1-16.746 64.384 364.3 364.3 0 0 1-6.507 16.662l1.024-2.496a286.224 286.224 0 0 1-3.541 8.32v0.021a360.661 360.661 0 0 1-17.558 34.73l0.47-0.81a363.904 363.904 0 0 1-43.264 60.373l-0.278 0.299-4.01 4.437-6.187 6.614a364.843 364.843 0 0 1-14.101 13.866l5.61-5.333a364.8 364.8 0 0 1-21.397 19.243l1.173-1.003a453.414 453.414 0 0 1-7.914 6.443l6.72-5.462a363.968 363.968 0 0 1-24.086 18.347 362.325 362.325 0 0 1-33.685 20.885 395.355 395.355 0 0 1-17.728 9.067l1.685-0.81a360.619 360.619 0 0 1-18.645 8.362l6.848-2.944c-2.475 1.11-4.97 2.155-7.467 3.2l0.598-0.256a321.278 321.278 0 0 1-9.6 3.84l9.002-3.584a315.468 315.468 0 0 1-10.026 3.947l1.045-0.384a348.55 348.55 0 0 1-8.981 3.285l7.957-2.901a325.748 325.748 0 0 1-9.045 3.285l1.066-0.384a362.453 362.453 0 0 1-128.128 20.373l-6.165-0.17a361.344 361.344 0 0 1-111.723-22.123l4.118 1.493c-2.56-0.896-5.12-1.834-7.659-2.794l3.541 1.301a367.701 367.701 0 0 1-19.093-7.68l8 3.392a360.555 360.555 0 0 1-9.067-3.84l1.067 0.448a360.704 360.704 0 0 1-7.488-3.35l6.4 2.902a488.108 488.108 0 0 1-8.277-3.776l1.877 0.853c-2.987-1.365-5.973-2.816-8.96-4.266l7.083 3.413a361.813 361.813 0 0 1-32.918-17.6v-0.021a363.008 363.008 0 0 1-29.61-19.904l4.629 3.413a410.991 410.991 0 0 1-6.123-4.523l1.494 1.11a364.16 364.16 0 0 1-7.382-5.654l5.888 4.544a364.224 364.224 0 0 1-6.826-5.29l0.938 0.746a387.452 387.452 0 0 1-7.338-5.93l6.4 5.184a364.843 364.843 0 0 1-21.803-18.71l1.472 1.366a468.326 468.326 0 0 1-5.845-5.483l4.373 4.117a334.598 334.598 0 0 1-6.293-5.973v-0.021a356.693 356.693 0 0 1-13.163-13.483l-5.248-5.803-0.299-0.341a363.733 363.733 0 0 1-62.869-100.139l2.517 5.867a357.035 357.035 0 0 1-10.133-25.685l1.13 3.2a420.096 420.096 0 0 1-4.138-12.096 360.683 360.683 0 0 1-13.163-55.766 362.816 362.816 0 0 1-2.474-19.669l0.426 3.925c-0.341-2.88-0.618-5.76-0.853-8.682l0.427 4.757a367.68 367.68 0 0 1-0.427-66.923l-0.213 2.539c0.213-2.88 0.49-5.76 0.768-8.619l-0.555 6.08a362.603 362.603 0 0 1 3.52-28.202 359.936 359.936 0 0 1 16.747-64.214 343.488 343.488 0 0 1 6.506-16.725l-0.64 1.6a360.747 360.747 0 0 1 20.992-42.56l4.31-7.296a364.203 364.203 0 0 1 38.122-51.627l0.278-0.341 5.077-5.61a364.907 364.907 0 0 1 15.787-16.043l-2.176 2.069 4.906-4.672c2.731-2.56 5.504-5.077 8.32-7.552l-2.133 1.899 3.925-3.478-1.792 1.579a404.183 404.183 0 0 1 7.296-6.272l-5.504 4.693c2.134-1.834 4.267-3.669 6.443-5.461l-0.939 0.768a360.544 360.544 0 0 1 14.507-11.477l-4.117 3.136a366.25 366.25 0 0 1 12.629-9.344h-0.021a364.267 364.267 0 0 1 22.186-14.507l-6.421 3.968a362.581 362.581 0 0 1 23.787-13.803l-0.811 0.427a318.945 318.945 0 0 1 6.528-3.413l-5.717 2.986a395.123 395.123 0 0 1 8.96-4.608l-3.243 1.622a350.292 350.292 0 0 1 9.856-4.822l-6.613 3.2a300.091 300.091 0 0 1 8.789-4.202l-2.176 1.002a302.21 302.21 0 0 1 7.552-3.434L360 182.635a309.605 309.605 0 0 1 7.659-3.435l-2.283 1.003c6.08-2.71 12.267-5.227 18.517-7.595l-7.829 3.05a359.808 359.808 0 0 1 25.13-9.087A362.453 362.453 0 0 1 512 149.333zM369.067 667.52l-3.478 1.365a383.275 383.275 0 0 0-76.224 42.198 298.368 298.368 0 0 0 160.299 93.077 448.064 448.064 0 0 1-80.597-136.64z m285.888-0.021l-0.32 0.832a447.701 447.701 0 0 1-80.32 135.829 298.368 298.368 0 0 0 160.32-93.056 382.421 382.421 0 0 0-79.68-43.605zM512 640c-28.01 0-55.317 2.987-81.621 8.683A383.957 383.957 0 0 0 512 777.6a384.299 384.299 0 0 0 81.621-128.896A384.533 384.533 0 0 0 512 640zM252.01 364.885l-2.986 5.44A297.344 297.344 0 0 0 213.334 512c0 53.483 14.08 103.68 38.677 147.115a446.528 446.528 0 0 1 99.157-53.376A448.512 448.512 0 0 1 341.333 512c0-32.15 3.392-63.53 9.814-93.76a445.867 445.867 0 0 1-99.136-53.355z m519.98 0l-4.48 3.158a446.827 446.827 0 0 1-94.678 50.218A450.62 450.62 0 0 1 682.667 512c0 32.15-3.392 63.53-9.814 93.76a445.867 445.867 0 0 1 99.136 53.355A297.365 297.365 0 0 0 810.667 512c0-53.483-14.08-103.68-38.678-147.115z m-160.64 72.043l-4.651 1.045C576.192 444.544 544.49 448 512 448c-34.133 0-67.392-3.819-99.35-11.05a386.432 386.432 0 0 0-7.317 75.05c0 25.685 2.518 50.773 7.339 75.072A448.79 448.79 0 0 1 512 576c34.133 0 67.392 3.819 99.35 11.05 4.8-24.255 7.317-49.365 7.317-75.05 0-25.685-2.518-50.773-7.339-75.072zM512 246.4l-3.307 3.499A384.107 384.107 0 0 0 430.4 375.296C456.683 380.992 483.99 384 512 384c28.01 0 55.317-2.987 81.621-8.683A383.957 383.957 0 0 0 512 246.4z m-62.293-26.56l-2.624 0.576a298.432 298.432 0 0 0-157.718 92.48 382.421 382.421 0 0 0 79.68 43.605 447.915 447.915 0 0 1 80.64-136.661z m124.629 0l2.987 3.52a447.573 447.573 0 0 1 77.61 133.12 381.845 381.845 0 0 0 79.702-43.563 298.368 298.368 0 0 0-160.299-93.077z" ></path></symbol><symbol id="iconxuanze" viewBox="0 0 1024 1024"><path d="M512 149.333c200.299 0 362.667 162.368 362.667 362.667S712.299 874.667 512 874.667 149.333 712.299 149.333 512 311.701 149.333 512 149.333z m0 64c-164.95 0-298.667 133.718-298.667 298.667S347.051 810.667 512 810.667 810.667 676.949 810.667 512 676.949 213.333 512 213.333z m169.045 127.04l45.91 44.587-271.83 279.723L318.293 522.73l46.08-44.416 90.944 94.336 225.728-232.278z" ></path></symbol><symbol id="iconstore" viewBox="0 0 1024 1024"><path d="M746.667 810.667V608.02a138.24 138.24 0 0 0 64 10.24v192.406a64 64 0 0 1-64 64h-192V725.333h-64v149.334h-192a64 64 0 0 1-64-64V614.955a139.05 139.05 0 0 0 64 0v195.712h128V661.333h192v149.334h128V608.02zM725.653 192a64 64 0 0 1 54.976 31.253l101.76 170.838-0.277-0.022a110.72 110.72 0 0 1-182.08 122.966 120.299 120.299 0 0 1-87.765 37.824 120.47 120.47 0 0 1-90.582-40.896 120.47 120.47 0 0 1-90.56 40.896 120.427 120.427 0 0 1-87.765-37.824 110.72 110.72 0 0 1-175.787-133.76l85.568-157.782A64 64 0 0 1 309.397 192h416.256z m0 64H309.397l-86.912 160.213-1.493 2.304a46.72 46.72 0 0 0 74.197 56.384l46.315-52.97 48.363 51.136c10.688 11.328 25.386 17.792 41.258 17.792 16.555 0 31.83-7.04 42.582-19.243l48-54.357 47.978 54.357c10.752 12.203 26.027 19.243 42.582 19.243 15.872 0 30.549-6.464 41.216-17.75l48.32-51.2 46.378 52.971a46.72 46.72 0 0 0 76.864-51.819l-0.725-1.429L725.653 256z" ></path></symbol><symbol id="iconzhanghaoguanli" viewBox="0 0 1024 1024"><path d="M774.55 618.667a64 64 0 0 1 55.445 32l37.696 65.322a64 64 0 0 1 0 64l-37.696 65.323a64 64 0 0 1-55.446 32h-75.413a64 64 0 0 1-55.445-32l-37.696-65.323a64 64 0 0 1 0-64l37.696-65.322a64 64 0 0 1 55.445-32h75.413z m-385.153-37.078a254.331 254.331 0 0 0 61.227 26.944l-173.29 202.134h272.49l0.725 1.322 36.182 62.678H277.333a64 64 0 0 1-48.597-105.643l160.661-187.435zM774.55 682.667h-75.413l-37.717 65.322 37.717 65.323h75.413l37.718-65.323-37.718-65.322z m-39.04 32.554a32 32 0 1 1 0 64 32 32 0 0 1 0-64zM522.176 149.333c117.824 0 213.333 95.51 213.333 213.334S640 576 522.176 576s-213.333-95.51-213.333-213.333 95.509-213.334 213.333-213.334z m0 64a149.333 149.333 0 1 0 0 298.667 149.333 149.333 0 0 0 0-298.667z" ></path></symbol><symbol id="icondingweiweizhi" viewBox="0 0 1024 1024"><path d="M499.772 44.815c-178.055 0-322.44 145.167-322.44 324.367 0 89.51 36.142 170.586 94.45 229.316l227.99 229.376 228.051-229.376a324.307 324.307 0 0 0 94.389-229.256c0-179.2-144.324-324.367-322.44-324.367z m0 468.45a143.721 143.721 0 0 1-143.36-144.083v-0.12a143.661 143.661 0 0 1 143.3-144.083h0.06a143.721 143.721 0 0 1 143.36 144.083v0.12a143.661 143.661 0 0 1-143.18 144.023h-0.18z m-143.36 420.021a143.36 60.235 0 1 0 286.72 0 143.36 60.235 0 1 0-286.72 0z" ></path></symbol><symbol id="iconscanning" viewBox="0 0 1024 1024"><path d="M234.667 640v149.333h159.978v64H234.667a64 64 0 0 1-64-64V640h64z m618.666 0v149.333a64 64 0 0 1-64 64H629.312v-64h160.021V640h64zM768 480v64H256v-64h512z m21.333-309.333a64 64 0 0 1 64 64V384h-64V234.667h-160v-64h160z m-394.666 0v64h-160V384h-64V234.667a64 64 0 0 1 64-64h160z" ></path></symbol><symbol id="iconxiugaimima" viewBox="0 0 1024 1024"><path d="M512.704 106.667A181.333 181.333 0 0 1 694.037 288l-0.021 53.333h95.317a64 64 0 0 1 64 64v384a64 64 0 0 1-64 64H234.667a64 64 0 0 1-64-64v-384a64 64 0 0 1 64-64h96.682V288a181.333 181.333 0 0 1 181.334-181.333z m276.63 298.666H234.666v384h554.666v-384zM550.122 512v170.667h-64V512h64z m-37.419-341.333A117.333 117.333 0 0 0 395.371 288v53.333h234.666V288a117.333 117.333 0 0 0-117.333-117.333z" ></path></symbol><symbol id="icontuichudenglu" viewBox="0 0 1024 1024"><path d="M512 863.7c-47.2 0-93-9.2-136.1-27.5-41.6-17.6-79-42.8-111.1-74.9-32.1-32.1-57.3-69.5-74.9-111.1-18.2-43.1-27.5-88.9-27.5-136.1 0-117.3 58.4-226.2 156.2-291.3 14.7-9.8 34.6-5.8 44.4 8.9 9.8 14.7 5.8 34.6-8.9 44.4-79.9 53.2-127.7 142.1-127.7 238 0 76.3 29.7 148 83.7 202 53.9 53.9 125.7 83.7 202 83.7s148-29.7 202-83.7c53.9-53.9 83.7-125.7 83.7-202 0-95.2-47.2-183.9-126.4-237.1-14.7-9.9-18.5-29.8-8.7-44.4 9.9-14.7 29.8-18.6 44.4-8.7 96.8 65.2 154.7 173.7 154.7 290.2 0 47.2-9.2 93-27.5 136.1-17.6 41.6-42.8 79-74.9 111.1-32.1 32.1-69.5 57.3-111.1 74.9-43.3 18.3-89.1 27.5-136.3 27.5z" ></path><path d="M513 598.4c-17.6 0-32-14.3-32-31.9l-1.1-425.6c0-17.7 14.2-32 31.9-32.1h0.1c17.6 0 32 14.3 32 31.9l1.1 425.6c0 17.7-14.2 32.1-32 32.1 0.1 0 0 0 0 0z" ></path></symbol><symbol id="iconzuojiantou" viewBox="0 0 1024 1024"><path d="M304.265 546.133l214.8 214.801-48.264 48.265L173.602 512l297.2-297.199 48.264 48.265-214.801 214.8h549.068v68.267z" ></path></symbol><symbol id="iconyou" viewBox="0 0 1024 1024"><path d="M610.27 512L361.335 263.066 409.6 214.8 706.799 512 409.6 809.199l-48.265-48.265z" ></path></symbol><symbol id="iconquxiao" viewBox="0 0 1024 1024"><path d="M560.265 512L512 463.735l248.934-248.934 48.265 48.265L560.265 512l248.934 248.934-48.265 48.265L512 560.265 263.066 809.199 214.8 760.934 463.735 512 512 560.265 263.066 809.199 214.8 760.934 463.735 512 214.801 263.066l48.265-48.265L512 463.735l248.934-248.934 48.265 48.265z" ></path></symbol><symbol id="iconjia" viewBox="0 0 1024 1024"><path d="M546.133 477.867H819.2v68.266H546.133v307.2h-68.266v-307.2H204.8v-68.266h273.067V204.8h68.266z" ></path></symbol><symbol id="iconsousuo" viewBox="0 0 1024 1024"><path d="M740.25 696.183L846.848 801.93l-44.92 43.69-105.983-105.13A339.968 339.968 0 0 1 477.867 819.2c-188.519 0-341.334-152.815-341.334-341.333s152.815-341.334 341.334-341.334S819.2 289.348 819.2 477.867a339.968 339.968 0 0 1-78.95 218.316z m-262.383 54.75a273.067 273.067 0 1 0 0-546.133 273.067 273.067 0 0 0 0 546.133z" ></path></symbol><symbol id="iconyewushuju_h" viewBox="0 0 1024 1024"><path d="M694 384h98c22.092 0 40 17.908 40 40v368c0 22.092-17.908 40-40 40h-98c-22.092 0-40-17.908-40-40V424c0-22.092 17.908-40 40-40zM500 496h98c22.092 0 40 17.908 40 40v256c0 22.092-17.908 40-40 40h-98c-22.092 0-40-17.908-40-40V536c0-22.092 17.908-40 40-40zM304 616h88c22.092 0 40 17.91 40 40v136c0 22.092-17.908 40-40 40h-88c-22.092 0-40-17.908-40-40V656c0-22.09 17.908-40 40-40z" fill="#DFEAFF" ></path><path d="M658 252c-11.028 0-20 8.972-20 20v500h134V272c0-11.028-8.97-20-20-20h-94m0-60h94c44.184 0 80 35.818 80 80v540c0 11.046-8.954 20-20 20H598c-11.044 0-20-8.954-20-20V272c0-44.182 35.818-80 80-80z" fill="#0173FE" ></path><path d="M462 412c-11.028 0-20 8.972-20 20v340h136V432c0-11.028-8.97-20-20-20h-96m0-60h96c44.184 0 80 35.818 80 80v380c0 11.046-8.954 20-20 20H402c-11.044 0-20-8.954-20-20V432c0-44.182 35.818-80 80-80z" fill="#0173FE" ></path><path d="M272 572c-11.028 0-20 8.972-20 20v180h130V592c0-11.028-8.97-20-20-20h-90m0-60h90c44.184 0 80 35.818 80 80v220c0 11.046-8.954 20-20 20H212c-11.044 0-20-8.954-20-20V592c0-44.182 35.818-80 80-80z" fill="#0173FE" ></path></symbol><symbol id="iconyewushuju" viewBox="0 0 1024 1024"><path d="M658 252c-11 0-20 9-20 20v500h134V272c0-11-9-20-20-20h-94m0-60h94c44.2 0 80 35.8 80 80v540c0 11-9 20-20 20H598c-11 0-20-9-20-20V272c0-44.2 35.8-80 80-80z" fill="#CCCCCC" ></path><path d="M462 412c-11 0-20 9-20 20v340h136V432c0-11-9-20-20-20h-96m0-60h96c44.2 0 80 35.8 80 80v380c0 11-9 20-20 20H402c-11 0-20-9-20-20V432c0-44.2 35.8-80 80-80z" fill="#CCCCCC" ></path><path d="M272 572c-11 0-20 9-20 20v180h130v-180c0-11-9-20-20-20h-90m0-60h90c44.2 0 80 35.8 80 80v220c0 11-9 20-20 20H212c-11 0-20-9-20-20V592c0-44.2 35.8-80 80-80z" fill="#CCCCCC" ></path></symbol><symbol id="iconchechangguanli" viewBox="0 0 1024 1024"><path d="M304 252c-28.6 0-52 23.4-52 52s23.4 52 52 52 52-23.4 52-52-23.4-52-52-52m0-60c61.8 0 112 50.2 112 112s-50.2 112-112 112-112-50.2-112-112 50.2-112 112-112z m416 60c-28.6 0-52 23.4-52 52s23.4 52 52 52 52-23.4 52-52-23.4-52-52-52m0-60c61.8 0 112 50.2 112 112s-50.2 112-112 112-112-50.2-112-112 50.2-112 112-112zM304 668c-28.6 0-52 23.4-52 52s23.4 52 52 52 52-23.4 52-52-23.4-52-52-52m0-60c61.8 0 112 50.2 112 112s-50.2 112-112 112-112-50.2-112-112 50.2-112 112-112z m416 60c-28.6 0-52 23.4-52 52s23.4 52 52 52 52-23.4 52-52-23.4-52-52-52m0-60c61.8 0 112 50.2 112 112s-50.2 112-112 112-112-50.2-112-112 50.2-112 112-112z" fill="#CCCCCC" ></path><path d="M274 410h60v204h-60V410z m416 0h60v204h-60V410z m-280-136h204v60H410v-60z m0 416h204v60H410v-60z" fill="#CCCCCC" ></path></symbol><symbol id="icongerenzhongxin_h" viewBox="0 0 1024 1024"><path d="M506.5 216h121.25c13.392 0 24.25 10.858 24.25 24.25V313c0 53.572-43.428 97-97 97-53.57 0-97-43.428-97-97v-48.5c0-26.786 21.714-48.5 48.5-48.5zM490 650h242c55.228 0 100 44.774 100 100v42c0 22.092-17.908 40-40 40H430c-22.092 0-40-17.908-40-40v-42c0-55.228 44.77-100 100-100z" fill="#DFEAFF" ></path><path d="M432 252c-11.028 0-20 8.972-20 20v80c0 55.14 44.86 100 100 100s100-44.86 100-100v-80c0-11.028-8.97-20-20-20H432m0-60h160c44.184 0 80 35.818 80 80v80c0 88.366-71.634 160-160 160s-160-71.634-160-160v-80c0-44.182 35.818-80 80-80z m-90 436c-49.626 0-90 40.376-90 90v54h520v-54c0-49.626-40.374-90-90-90H342m0-60h340c82.844 0 150 67.158 150 150v74c0 22.092-17.908 40-40 40H232c-22.092 0-40-17.908-40-40v-74c0-82.842 67.158-150 150-150z" fill="#0173FE" ></path><path d="M592 740H432c-16.568 0-30-13.432-30-30s13.432-30 30-30h160c16.568 0 30 13.432 30 30s-13.432 30-30 30z" fill="#0173FE" ></path></symbol><symbol id="iconchechangguanli_h" viewBox="0 0 1024 1024"><path d="M442 442h308v308H442V442z" fill="#DFEAFF" ></path><path d="M304 252c-28.672 0-52 23.328-52 52 0 28.674 23.328 52 52 52 28.674 0 52-23.326 52-52 0-28.672-23.326-52-52-52m0-60c61.856 0 112 50.144 112 112s-50.144 112-112 112-112-50.144-112-112 50.144-112 112-112z m416 60c-28.672 0-52 23.328-52 52 0 28.674 23.328 52 52 52 28.674 0 52-23.326 52-52 0-28.672-23.326-52-52-52m0-60c61.856 0 112 50.144 112 112s-50.144 112-112 112-112-50.144-112-112 50.144-112 112-112zM304 668c-28.672 0-52 23.328-52 52 0 28.674 23.328 52 52 52 28.674 0 52-23.326 52-52 0-28.672-23.326-52-52-52m0-60c61.856 0 112 50.144 112 112 0 61.858-50.144 112-112 112s-112-50.142-112-112c0-61.856 50.144-112 112-112z m416 60c-28.672 0-52 23.328-52 52 0 28.674 23.328 52 52 52 28.674 0 52-23.326 52-52 0-28.672-23.326-52-52-52m0-60c61.856 0 112 50.144 112 112 0 61.858-50.144 112-112 112s-112-50.142-112-112c0-61.856 50.144-112 112-112z" fill="#0173FE" ></path><path d="M274 410h60v204h-60z m416 0h60v204h-60zM410 274h204v60H410z m0 416h204v60H410z" fill="#0173FE" ></path></symbol><symbol id="icongerenzhongxin" viewBox="0 0 1024 1024"><path d="M432 252c-11 0-20 9-20 20v80c0 55.2 44.8 100 100 100s100-44.8 100-100v-80c0-11-9-20-20-20h-160m0-60h160c44.2 0 80 35.8 80 80v80c0 88.4-71.6 160-160 160s-160-71.6-160-160v-80c0-44.2 35.8-80 80-80z m-90 436c-49.6 0-90 40.4-90 90v54h520v-54c0-49.6-40.4-90-90-90H342m0-60h340c82.8 0 150 67.2 150 150v74c0 22-18 40-40 40H232c-22 0-40-18-40-40v-74c0-82.8 67.2-150 150-150z" fill="#CCCCCC" ></path><path d="M592 740h-160c-16.6 0-30-13.4-30-30s13.4-30 30-30h160c16.6 0 30 13.4 30 30s-13.4 30-30 30z" fill="#CCCCCC" ></path></symbol></svg>',z=(z=document.getElementsByTagName("script"))[z.length-1].getAttribute("data-injectcss");if(z&&!c.__iconfont__svg__cssinject__){c.__iconfont__svg__cssinject__=!0;try{document.write("<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>")}catch(c){console&&console.log(c)}}function s(){i||(i=!0,a())}h=function(){var c,h,l,a;(a=document.createElement("div")).innerHTML=o,o=null,(l=a.getElementsByTagName("svg")[0])&&(l.setAttribute("aria-hidden","true"),l.style.position="absolute",l.style.width=0,l.style.height=0,l.style.overflow="hidden",c=l,(h=document.body).firstChild?(a=c,(l=h.firstChild).parentNode.insertBefore(a,l)):h.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(h,0):(l=function(){document.removeEventListener("DOMContentLoaded",l,!1),h()},document.addEventListener("DOMContentLoaded",l,!1)):document.attachEvent&&(a=h,t=c.document,i=!1,(v=function(){try{t.documentElement.doScroll("left")}catch(c){return void setTimeout(v,50)}s()})(),t.onreadystatechange=function(){"complete"==t.readyState&&(t.onreadystatechange=null,s())})}(window); |
New file |
| | |
| | | { |
| | | "id": "2456081", |
| | | "name": "停车场系统", |
| | | "font_family": "iconfont", |
| | | "css_prefix_text": "icon", |
| | | "description": "", |
| | | "glyphs": [ |
| | | { |
| | | "icon_id": "20714029", |
| | | "name": "菜单收起", |
| | | "font_class": "outdent", |
| | | "unicode": "e83b", |
| | | "unicode_decimal": 59451 |
| | | }, |
| | | { |
| | | "icon_id": "20713370", |
| | | "name": "服务费利润", |
| | | "font_class": "kabao", |
| | | "unicode": "e833", |
| | | "unicode_decimal": 59443 |
| | | }, |
| | | { |
| | | "icon_id": "20713371", |
| | | "name": "佣金待结算", |
| | | "font_class": "lishixinxi", |
| | | "unicode": "e834", |
| | | "unicode_decimal": 59444 |
| | | }, |
| | | { |
| | | "icon_id": "20713372", |
| | | "name": "佣金已结算", |
| | | "font_class": "wenjianshenbaochenggong", |
| | | "unicode": "e835", |
| | | "unicode_decimal": 59445 |
| | | }, |
| | | { |
| | | "icon_id": "20713373", |
| | | "name": "交易订单当月", |
| | | "font_class": "shujutongji", |
| | | "unicode": "e836", |
| | | "unicode_decimal": 59446 |
| | | }, |
| | | { |
| | | "icon_id": "20713374", |
| | | "name": "服务费收入", |
| | | "font_class": "zhexiantu", |
| | | "unicode": "e837", |
| | | "unicode_decimal": 59447 |
| | | }, |
| | | { |
| | | "icon_id": "20713375", |
| | | "name": "交易订单总金额", |
| | | "font_class": "shujutu-tiaoxing", |
| | | "unicode": "e838", |
| | | "unicode_decimal": 59448 |
| | | }, |
| | | { |
| | | "icon_id": "20713376", |
| | | "name": "交易订单总单量", |
| | | "font_class": "zhengmingxinxi", |
| | | "unicode": "e839", |
| | | "unicode_decimal": 59449 |
| | | }, |
| | | { |
| | | "icon_id": "20713377", |
| | | "name": "交易订单当月", |
| | | "font_class": "wenjian1", |
| | | "unicode": "e83a", |
| | | "unicode_decimal": 59450 |
| | | }, |
| | | { |
| | | "icon_id": "20713311", |
| | | "name": "代理结算", |
| | | "font_class": "zichanbaoguanli", |
| | | "unicode": "e831", |
| | | "unicode_decimal": 59441 |
| | | }, |
| | | { |
| | | "icon_id": "20713312", |
| | | "name": "订单管理", |
| | | "font_class": "dingdanguanli", |
| | | "unicode": "e832", |
| | | "unicode_decimal": 59442 |
| | | }, |
| | | { |
| | | "icon_id": "20713269", |
| | | "name": "首页", |
| | | "font_class": "chanpinxinxi", |
| | | "unicode": "e82e", |
| | | "unicode_decimal": 59438 |
| | | }, |
| | | { |
| | | "icon_id": "20713270", |
| | | "name": "账号列表", |
| | | "font_class": "user", |
| | | "unicode": "e82f", |
| | | "unicode_decimal": 59439 |
| | | }, |
| | | { |
| | | "icon_id": "20713271", |
| | | "name": "销售网络", |
| | | "font_class": "xiaoshouwangluo", |
| | | "unicode": "e830", |
| | | "unicode_decimal": 59440 |
| | | }, |
| | | { |
| | | "icon_id": "20712054", |
| | | "name": "选择", |
| | | "font_class": "xuanze", |
| | | "unicode": "e829", |
| | | "unicode_decimal": 59433 |
| | | }, |
| | | { |
| | | "icon_id": "20712055", |
| | | "name": "store", |
| | | "font_class": "store", |
| | | "unicode": "e82a", |
| | | "unicode_decimal": 59434 |
| | | }, |
| | | { |
| | | "icon_id": "20712111", |
| | | "name": "负责人", |
| | | "font_class": "zhanghaoguanli", |
| | | "unicode": "e82b", |
| | | "unicode_decimal": 59435 |
| | | }, |
| | | { |
| | | "icon_id": "20712412", |
| | | "name": "定位 位置", |
| | | "font_class": "dingweiweizhi", |
| | | "unicode": "e82c", |
| | | "unicode_decimal": 59436 |
| | | }, |
| | | { |
| | | "icon_id": "20712581", |
| | | "name": "scanning", |
| | | "font_class": "scanning", |
| | | "unicode": "e82d", |
| | | "unicode_decimal": 59437 |
| | | }, |
| | | { |
| | | "icon_id": "20711978", |
| | | "name": "修改密码", |
| | | "font_class": "xiugaimima", |
| | | "unicode": "e827", |
| | | "unicode_decimal": 59431 |
| | | }, |
| | | { |
| | | "icon_id": "20711979", |
| | | "name": "退出登录", |
| | | "font_class": "tuichudenglu", |
| | | "unicode": "e828", |
| | | "unicode_decimal": 59432 |
| | | }, |
| | | { |
| | | "icon_id": "20711854", |
| | | "name": "左箭头", |
| | | "font_class": "zuojiantou", |
| | | "unicode": "e825", |
| | | "unicode_decimal": 59429 |
| | | }, |
| | | { |
| | | "icon_id": "20711855", |
| | | "name": "右", |
| | | "font_class": "you", |
| | | "unicode": "e826", |
| | | "unicode_decimal": 59430 |
| | | }, |
| | | { |
| | | "icon_id": "20711830", |
| | | "name": "取消", |
| | | "font_class": "quxiao", |
| | | "unicode": "e822", |
| | | "unicode_decimal": 59426 |
| | | }, |
| | | { |
| | | "icon_id": "20711831", |
| | | "name": "加", |
| | | "font_class": "jia", |
| | | "unicode": "e823", |
| | | "unicode_decimal": 59427 |
| | | }, |
| | | { |
| | | "icon_id": "20711832", |
| | | "name": "搜索", |
| | | "font_class": "sousuo", |
| | | "unicode": "e824", |
| | | "unicode_decimal": 59428 |
| | | }, |
| | | { |
| | | "icon_id": "20711808", |
| | | "name": "业务数据_h", |
| | | "font_class": "yewushuju_h", |
| | | "unicode": "e81c", |
| | | "unicode_decimal": 59420 |
| | | }, |
| | | { |
| | | "icon_id": "20711809", |
| | | "name": "业务数据", |
| | | "font_class": "yewushuju", |
| | | "unicode": "e81d", |
| | | "unicode_decimal": 59421 |
| | | }, |
| | | { |
| | | "icon_id": "20711810", |
| | | "name": "车场管理", |
| | | "font_class": "chechangguanli", |
| | | "unicode": "e81e", |
| | | "unicode_decimal": 59422 |
| | | }, |
| | | { |
| | | "icon_id": "20711811", |
| | | "name": "个人中心_h", |
| | | "font_class": "gerenzhongxin_h", |
| | | "unicode": "e81f", |
| | | "unicode_decimal": 59423 |
| | | }, |
| | | { |
| | | "icon_id": "20711812", |
| | | "name": "车场管理_h", |
| | | "font_class": "chechangguanli_h", |
| | | "unicode": "e820", |
| | | "unicode_decimal": 59424 |
| | | }, |
| | | { |
| | | "icon_id": "20711813", |
| | | "name": "个人中心", |
| | | "font_class": "gerenzhongxin", |
| | | "unicode": "e821", |
| | | "unicode_decimal": 59425 |
| | | } |
| | | ] |
| | | } |
New file |
| | |
| | | <?xml version="1.0" standalone="no"?> |
| | | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > |
| | | <!-- |
| | | 2013-9-30: Created. |
| | | --> |
| | | <svg> |
| | | <metadata> |
| | | Created by iconfont |
| | | </metadata> |
| | | <defs> |
| | | |
| | | <font id="iconfont" horiz-adv-x="1024" > |
| | | <font-face |
| | | font-family="iconfont" |
| | | font-weight="500" |
| | | font-stretch="normal" |
| | | units-per-em="1024" |
| | | ascent="896" |
| | | descent="-128" |
| | | /> |
| | | <missing-glyph /> |
| | | |
| | | <glyph glyph-name="outdent" unicode="" d="M408 454h480c4.4 0 8 3.6 8 8v56c0 4.4-3.6 8-8 8H408c-4.4 0-8-3.6-8-8v-56c0-4.4 3.6-8 8-8z m-8-204c0-4.4 3.6-8 8-8h480c4.4 0 8 3.6 8 8v56c0 4.4-3.6 8-8 8H408c-4.4 0-8-3.6-8-8v-56z m504 486H120c-4.4 0-8-3.6-8-8v-56c0-4.4 3.6-8 8-8h784c4.4 0 8 3.6 8 8v56c0 4.4-3.6 8-8 8z m0-632H120c-4.4 0-8-3.6-8-8v-56c0-4.4 3.6-8 8-8h784c4.4 0 8 3.6 8 8v56c0 4.4-3.6 8-8 8zM115.4 377.1L271.7 254c5.8-4.6 14.4-0.5 14.4 6.9V507.1c0 7.4-8.5 11.5-14.4 6.9L115.4 390.9c-4.5-3.5-4.5-10.3 0-13.8z" horiz-adv-x="1024" /> |
| | | |
| | | |
| | | <glyph glyph-name="kabao" unicode="" d="M232.876 418.576c-10.986 24.126-12.016 51.124-2.898 76.02L281.7 636.7c9.494 25.618 28.274 45.874 52.942 57.2 24.668 11.328 52.272 12.372 77.722 2.936L764.222 568.77c52.602-18.792 80.192-77.062 61.338-129.83l-56.5 20.188c7.72 21.612-3.58 45.478-25.192 53.2L391.68 640.514c-10.59 3.924-21.896 3.496-31.998-1.142a41.348 41.348 0 0 1-21.66-23.36L286.34 474.014c-3.68-10.05-3.268-20.888 1.142-30.574l-54.606-24.864zM904-128H120C53.832-128 0-74.168 0-8V776C0 842.168 53.832 896 120 896h784c66.168 0 120-53.832 120-120v-784c0-66.168-53.832-120-120-120zM120 892C56.038 892 4 839.962 4 776v-784c0-63.962 52.038-116 116-116h784c63.962 0 116 52.038 116 116V776c0 63.962-52.038 116-116 116H120zM752 64H272c-44.112 0-80 35.888-80 80V404c0 44.112 35.888 80 80 80h480c44.112 0 80-35.888 80-80v-260c0-44.112-35.888-80-80-80zM272 424c-11.028 0-20-8.972-20-20v-260c0-11.028 8.972-20 20-20h480c11.028 0 20 8.972 20 20V404c0 11.028-8.972 20-20 20H272zM710 324H314c-16.568 0-30 13.432-30 30s13.432 30 30 30h396c16.568 0 30-13.432 30-30s-13.432-30-30-30z" horiz-adv-x="1024" /> |
| | | |
| | | |
| | | <glyph glyph-name="lishixinxi" unicode="" d="M904-128H120C53.832-128 0-74.168 0-8V776C0 842.168 53.832 896 120 896h784c66.168 0 120-53.832 120-120v-784c0-66.168-53.832-120-120-120zM120 892C56.038 892 4 839.962 4 776v-784c0-63.962 52.038-116 116-116h784c63.962 0 116 52.038 116 116V776c0 63.962-52.038 116-116 116H120zM722 124.002c11.028 0 20 8.97 20 19.998V558c0 11.028-8.972 20-20 20H608.442l-8.75 49.57c-1.68 9.52-9.96 16.43-19.692 16.43H444c-9.732 0-18.014-6.91-19.694-16.43l-8.75-49.57H302c-11.028 0-20-8.972-20-20v-414c0-11.028 8.972-19.998 20-19.998h420m0-60H302c-44.184 0-80 35.814-80 79.998V558c0 44.182 35.818 80 80 80h63.218c6.62 37.506 39.374 66 78.782 66h136c39.406 0 72.16-28.494 78.78-66H722c44.182 0 80-35.818 80-80v-414c0-44.184-35.818-79.998-80-79.998zM648.3 414.01l0.1-60-272.13-0.462-0.1 60zM580 502H444c-44.112 0-80 35.888-80 80v42c0 44.112 35.888 80 80 80h136c44.112 0 80-35.888 80-80v-42c0-44.112-35.888-80-80-80zM444 644c-11.028 0-20-8.972-20-20v-42c0-11.028 8.972-20 20-20h136c11.028 0 20 8.972 20 20v42c0 11.028-8.972 20-20 20H444z" horiz-adv-x="1024" /> |
| | | |
| | | |
| | | <glyph glyph-name="wenjianshenbaochenggong" unicode="" d="M904-128H120C53.832-128 0-74.168 0-8V776C0 842.168 53.832 896 120 896h784c66.168 0 120-53.832 120-120v-784c0-66.168-53.832-120-120-120zM120 892C56.038 892 4 839.962 4 776v-784c0-63.962 52.038-116 116-116h784c63.962 0 116 52.038 116 116V776c0 63.962-52.038 116-116 116H120zM772.4 454h-86.8c-32.864 0-59.6 26.736-59.6 59.6V601c0 56.794 46.206 103 103 103s103-46.206 103-103v-87.4c0-32.864-26.736-59.6-59.6-59.6zM686 514h86v87c0 23.71-19.29 43-43 43s-43-19.29-43-43v-87zM655.998 64c-3.588 0-7.192 0.642-10.638 1.952l-213.008 80.804-199.204-80.566a29.998 29.998 0 0 0-41.248 27.78c-0.04 36.364-0.032 40.614-0.018 47.15 0.008 4.258 0.018 9.49 0.018 25.282V600.584c-0.326 8.166-0.244 45.64 26.234 73.978 12.522 13.402 35.73 29.412 75.188 29.578 75.386 0.31 432.484-0.136 436.084-0.14l-0.078-60c-3.598 0.006-360.534 0.46-435.754 0.14-14.692-0.06-25.028-3.508-31.596-10.54-10.462-11.196-10.148-30.212-10.136-30.396 0.04-0.636 0.06-1.274 0.06-1.912V166.4c0-15.864-0.01-21.12-0.018-25.396l-0.004-2.52 168.876 68.3a29.976 29.976 0 0 0 21.888 0.238l183.224-69.506c-0.016 8.868-0.026 18.636-0.026 28.882 0.004 3.118 0.296 310.222 0.296 435.6h60c0-125.406-0.292-432.542-0.296-435.628 0-39.46 0.158-71.9 0.16-72.222A30.006 30.006 0 0 0 655.998 64zM415.768 312.434a29.904 29.904 0 0 0-21.004 8.582c-11.828 11.602-12.012 30.596-0.412 42.424l120.5 122.862c11.602 11.828 30.598 12.014 42.424 0.412 11.83-11.602 12.014-30.596 0.412-42.424l-120.5-122.86a29.904 29.904 0 0 0-21.42-8.996zM415.778 312.454a29.89 29.89 0 0 0-20.608 8.204l-54.052 51.112c-12.038 11.384-12.57 30.372-1.186 42.41 11.382 12.04 30.372 12.57 42.41 1.186l54.052-51.114c12.038-11.382 12.57-30.372 1.186-42.408a29.908 29.908 0 0 0-21.802-9.39z" horiz-adv-x="1024" /> |
| | | |
| | | |
| | | <glyph glyph-name="shujutongji" unicode="" d="M904-128H120C53.832-128 0-74.168 0-8V776C0 842.168 53.832 896 120 896h784c66.168 0 120-53.832 120-120v-784c0-66.168-53.832-120-120-120zM120 892C56.038 892 4 839.962 4 776v-784c0-63.962 52.038-116 116-116h784c63.962 0 116 52.038 116 116V776c0 63.962-52.038 116-116 116H120zM697.67 354.292c-85.85 0-185.688 0.06-185.688 0.06-16.562 0.01-29.982 13.44-29.982 30v289.71c0 16.568 13.432 30 30 30 176.288 0 319.708-143.42 319.708-319.708 0-16.542-13.39-29.962-29.934-30-21.71-0.048-61.16-0.062-104.104-0.062zM542 414.334c52.992-0.026 163.682-0.072 227.99-0.024-13.764 119.3-108.7 214.244-227.99 228.03v-228.006zM454.602 64.112c-144.744 0-262.5 117.758-262.5 262.502h60c0-111.66 90.84-202.502 202.5-202.502 111.658 0 202.5 90.842 202.5 202.502h60c0-144.744-117.758-262.502-262.5-262.502zM252.102 326.11h-60c0 144.744 117.756 262.502 262.5 262.502v-60c-111.66 0-202.5-90.844-202.5-202.502z" horiz-adv-x="1024" /> |
| | | |
| | | |
| | | <glyph glyph-name="zhexiantu" unicode="" d="M904-128H120C53.832-128 0-74.168 0-8V776C0 842.168 53.832 896 120 896h784c66.168 0 120-53.832 120-120v-784c0-66.168-53.832-120-120-120zM120 892C56.038 892 4 839.962 4 776v-784c0-63.962 52.038-116 116-116h784c63.962 0 116 52.038 116 116V776c0 63.962-52.038 116-116 116H120zM758 64c-16.568 0-30 13.432-30 30V478c0 16.568 13.432 30 30 30s30-13.432 30-30v-384c0-16.568-13.432-30-30-30z m-164 0c-16.568 0-30 13.432-30 30V296c0 16.568 13.432 30 30 30s30-13.432 30-30v-202c0-16.568-13.432-30-30-30z m-164 0c-16.568 0-30 13.432-30 30V368c0 16.568 13.432 30 30 30s30-13.432 30-30v-274c0-16.568-13.432-30-30-30z m-164 0c-16.568 0-30 13.432-30 30V268c0 16.568 13.432 30 30 30s30-13.432 30-30v-174c0-16.568-13.432-30-30-30zM222.008 363.156c-9.382 0-18.622 4.386-24.472 12.614-9.602 13.502-6.442 32.234 7.06 41.836l251.8 179.09c12.404 8.822 29.45 6.958 39.652-4.34l57.286-63.436 157.58 114.976H639.09c-16.568 0-30 13.432-30 30s13.432 30 30 30h163.838a30 30 0 0 0 17.682-54.236L566.866 464.52c-12.41-9.054-29.652-7.27-39.948 4.128l-57.504 63.678L239.372 368.71a29.868 29.868 0 0 0-17.364-5.554z" horiz-adv-x="1024" /> |
| | | |
| | | |
| | | <glyph glyph-name="shujutu-tiaoxing" unicode="" d="M904-128H120c-66.2 0-120 53.8-120 120V776C0 842.2 53.8 896 120 896h784c66.2 0 120-53.8 120-120v-784c0-66.2-53.8-120-120-120zM120 892C56 892 4 840 4 776v-784c0-64 52-116 116-116h784c64 0 116 52 116 116V776c0 64-52 116-116 116H120zM513 64c-53.4 0-97 43.6-97 97v126c0 53.4 43.6 97 97 97s97-43.6 97-97v-126c0-53.4-43.6-97-97-97z m0 260c-20.4 0-37-16.6-37-37v-126c0-20.4 16.6-37 37-37s37 16.6 37 37v126c0 20.4-16.6 37-37 37zM289 64c-53.4 0-97 43.6-97 97v264c0 53.4 43.6 97 97 97s97-43.6 97-97v-264c0-53.4-43.6-97-97-97z m0 398c-20.4 0-37-16.6-37-37v-264c0-20.4 16.6-37 37-37s37 16.6 37 37v264c0 20.4-16.6 37-37 37zM735 64c-53.4 0-97 43.6-97 97v446c0 53.4 43.6 97 97 97s97-43.6 97-97v-446c0-53.4-43.6-97-97-97z m0 580c-20.4 0-37-16.6-37-37v-446c0-20.4 16.6-37 37-37s37 16.6 37 37v446c0 20.4-16.6 37-37 37z" horiz-adv-x="1024" /> |
| | | |
| | | |
| | | <glyph glyph-name="zhengmingxinxi" unicode="" d="M904-128H120C53.832-128 0-74.168 0-8V776C0 842.168 53.832 896 120 896h784c66.168 0 120-53.832 120-120v-784c0-66.168-53.832-120-120-120zM120 892C56.038 892 4 839.962 4 776v-784c0-63.962 52.038-116 116-116h784c63.962 0 116 52.038 116 116V776c0 63.962-52.038 116-116 116H120zM793.334 384H654.666C633.346 384 616 401.346 616 422.666V596c0 59.552 48.45 108 108 108s108-48.448 108-108v-173.334c0-21.32-17.346-38.666-38.666-38.666zM676 444h96V596c0 26.468-21.534 48-48 48s-48-21.532-48-48v-152zM320.028 64.002c-70.512-0.008-127.94 57.342-128.028 127.906 0 0.028-0.03 90.036-0.03 122.686h60c0-32.646 0.03-122.638 0.03-122.638 0.046-37.474 30.572-67.954 68.064-67.954h157.208v-60H320.028zM572.894 64C516.772 64 454 114.71 454 182.578V314.346h60v-131.768C514 151.032 546.382 124 572.894 124v-60zM366 384.004h-60v217.5c0 56.518 45.054 102.5 100.432 102.5h315.23v-60h-315.23c-22.294 0-40.432-19.066-40.432-42.5v-217.5zM575.468 64.004H406.43v60h169.038c22.294 0 40.432 19.064 40.432 42.5l0.146 373.278 60-0.024-0.146-373.266c0-56.508-45.052-102.488-100.432-102.488zM514 314h-60c0 5.514-4.486 10-10 10H339.216v60H444c38.598 0 70-31.402 70-70zM252 314h-60c0 38.598 31.402 70 70 70h104.784v-60H262c-5.514 0-10-4.486-10-10zM477.228 580H588v-60H477.228z m-65.306-96H588v-60H411.922z" horiz-adv-x="1024" /> |
| | | |
| | | |
| | | <glyph glyph-name="wenjian1" unicode="" d="M904-128H120C53.832-128 0-74.168 0-8V776C0 842.168 53.832 896 120 896h784c66.168 0 120-53.832 120-120v-784c0-66.168-53.832-120-120-120zM120 892C56.038 892 4 839.962 4 776v-784c0-63.962 52.038-116 116-116h784c63.962 0 116 52.038 116 116V776c0 63.962-52.038 116-116 116H120zM638.844 64.046h-344.35C237.978 64.046 192 110.026 192 166.54V604.048h60V166.54c0-23.43 19.062-42.492 42.494-42.492h344.35c23.432 0 42.494 19.062 42.494 42.492V601.506h60V166.54c0-56.514-45.978-102.494-102.494-102.494zM252 164.046h-60V601.554c0 56.516 45.978 102.494 102.494 102.494h344.348v-60H294.494c-23.432 0-42.494-19.062-42.494-42.494v-437.508zM752.258 544.054h-0.02l-136.342 0.056 0.024 60 136.22-0.056c10.976 0.114 19.838 9.114 19.768 20.104-0.068 10.874-8.972 19.778-19.848 19.848H631.882v60H752.25c43.732-0.276 79.38-35.924 79.658-79.468 0.278-44.1-35.372-80.202-79.468-80.482l-0.182-0.002zM637.836 544.054H303.34c-16.532 0-29.948 13.374-30 29.904s13.278 29.99 29.81 30.094c10.876 0.07 19.78 8.974 19.85 19.85 0.034 5.336-2.012 10.366-5.762 14.162s-8.752 5.906-14.088 5.94l0.38 59.998c21.362-0.134 41.392-8.582 56.402-23.782 15.01-15.2 23.202-35.336 23.066-56.698a79.206 79.206 0 0 0-2.546-19.468h257.386v-60zM602 324H470c-16.568 0-30 13.432-30 30s13.432 30 30 30h132c16.568 0 30-13.432 30-30s-13.432-30-30-30z m0-100H330c-16.568 0-30 13.432-30 30s13.432 30 30 30h272c16.568 0 30-13.432 30-30s-13.432-30-30-30z m0 208H470c-16.568 0-30 13.432-30 30s13.432 30 30 30h132c16.568 0 30-13.432 30-30s-13.432-30-30-30z" horiz-adv-x="1024" /> |
| | | |
| | | |
| | | <glyph glyph-name="zichanbaoguanli" unicode="" d="M880 712H712v64c0 4.4-3.6 8-8 8h-56c-4.4 0-8-3.6-8-8v-64H384v64c0 4.4-3.6 8-8 8h-56c-4.4 0-8-3.6-8-8v-64H144c-17.7 0-32-14.3-32-32v-664c0-17.7 14.3-32 32-32h736c17.7 0 32 14.3 32 32V680c0 17.7-14.3 32-32 32z m-40-656H184V640h128v-48c0-4.4 3.6-8 8-8h56c4.4 0 8 3.6 8 8v48h256v-48c0-4.4 3.6-8 8-8h56c4.4 0 8 3.6 8 8v48h128v-584zM639.5 482h-45c-3 0-5.8-1.7-7.1-4.4L514 332.2h-2.8l-73.4 145.4c-1.4 2.7-4.1 4.4-7.1 4.4h-46c-1.3 0-2.7-0.3-3.8-1-3.9-2.1-5.3-7-3.2-10.9l89.3-164h-48.6c-4.4 0-8-3.6-8-8v-21.3c0-4.4 3.6-8 8-8h65.1v-33.7h-65.1c-4.4 0-8-3.6-8-8v-21.3c0-4.4 3.6-8 8-8h65.1V144c0-4.4 3.6-8 8-8h41.3c4.4 0 8 3.6 8 8v53.8h65.4c4.4 0 8 3.6 8 8v21.3c0 4.4-3.6 8-8 8h-65.4v33.7h65.4c4.4 0 8 3.6 8 8v21.3c0 4.4-3.6 8-8 8h-49.1l89.3 164.1c0.6 1.2 1 2.5 1 3.8 0.1 4.4-3.4 8-7.9 8z" horiz-adv-x="1024" /> |
| | | |
| | | |
| | | <glyph glyph-name="dingdanguanli" unicode="" d="M832 784H724V824c0 4.4-3.6 8-8 8h-56c-4.4 0-8-3.6-8-8v-40H500V824c0 4.4-3.6 8-8 8h-56c-4.4 0-8-3.6-8-8v-40H320c-17.7 0-32-14.3-32-32v-120h-96c-17.7 0-32-14.3-32-32v-632c0-17.7 14.3-32 32-32h512c17.7 0 32 14.3 32 32v96h96c17.7 0 32 14.3 32 32V752c0 17.7-14.3 32-32 32zM664 8H232V560h218v-174c0-22.1 17.9-40 40-40h174v-338z m0 402H514V560h0.2L664 410.2v-0.2z m128-274h-56V440L544 632H360v80h68v-32c0-4.4 3.6-8 8-8h56c4.4 0 8 3.6 8 8v32h152v-32c0-4.4 3.6-8 8-8h56c4.4 0 8 3.6 8 8v32h68v-576z" horiz-adv-x="1024" /> |
| | | |
| | | |
| | | <glyph glyph-name="chanpinxinxi" unicode="" d="M168.107 274.56l120.746-57.963L512.128 108.46l215.317 104.32 128.768 61.674a64 64 0 0 0-29.952-84.97L540.032 50.859a64 64 0 0 0-55.808 0l-286.23 138.624a64 64 0 0 0-29.887 85.077z m687.829 133.93a64 64 0 0 0-29.675-85.546L540.011 184.32a64 64 0 0 0-55.808 0L197.995 322.944a64 64 0 0 0-31.168 82.176L483.84 255.595l28.288-13.696 286.23 138.624-0.15 0.064 57.728 27.882zM540.032 710.209L826.24 571.605a64 64 0 0 0 0-115.2L540.032 317.781a64 64 0 0 0-55.808 0l-286.23 138.624a64 64 0 0 0 0 115.2l286.23 138.582a64 64 0 0 0 55.808 0z m-27.904-57.6l-286.23-138.603 286.23-138.624 286.23 138.624-286.23 138.603z" horiz-adv-x="1024" /> |
| | | |
| | | |
| | | <glyph glyph-name="user" unicode="" d="M512 768c212.075 0 384-171.925 384-384S724.075 0 512 0 128 171.925 128 384s171.925 384 384 384z m0-64c-176.725 0-320-143.275-320-320 0-91.243 38.187-173.547 99.413-231.85l108.523 129.386a195.861 195.861 0 0 1 60.01-28.053l-117.93-140.651A318.507 318.507 0 0 1 512 64a318.507 318.507 0 0 1 161.237 43.52l-120.17 143.296a195.541 195.541 0 0 1 62.442 25.088L725.1 145.28A319.21 319.21 0 0 1 832 384c0 176.725-143.275 320-320 320z m0-106.667a154.07 154.07 0 0 0 76.373-287.914l-0.64-0.363-0.704-0.405a153.685 153.685 0 0 0-4.928-2.624l5.632 3.029A153.685 153.685 0 0 0 512 289.195a153.643 153.643 0 0 0-58.07 11.306l-0.213 0.086a153.173 153.173 0 0 0-5.653 2.453l5.888-2.56a153.195 153.195 0 0 0-20.97 10.475A154.07 154.07 0 0 0 512 597.333z m0-64a90.07 90.07 0 1 1 0-180.138 90.07 90.07 0 0 1 0 180.138z" horiz-adv-x="1024" /> |
| | | |
| | | |
| | | <glyph glyph-name="xiaoshouwangluo" unicode="" d="M512 746.667l6.89-0.064h0.875l6.187-0.214c39.168-1.472 76.715-9.173 111.723-22.101l-4.118 1.493c2.56-0.896 5.12-1.834 7.659-2.794l-3.541 1.301a367.701 367.701 0 0 0 20.16-8.15l-1.067 0.47a295.749 295.749 0 0 0 7.488-3.35l-6.4 2.902a488.108 488.108 0 0 0 8.277-3.776l-1.877 0.853a284.18 284.18 0 0 0 8.917-4.266l-7.04 3.413a361.813 361.813 0 0 0 32.918-17.6v-0.021a363.008 363.008 0 0 0 29.61-19.904l-4.885 3.584a313.735 313.735 0 0 0 6.037-4.438l-1.152 0.854c2.155-1.6 4.31-3.243 6.443-4.907l-5.29 4.053c2.389-1.813 4.778-3.626 7.125-5.504l-1.835 1.451a411.909 411.909 0 0 0 8.213-6.613l-6.378 5.162a364.8 364.8 0 0 0 21.696-18.602l-1.323 1.216a468.326 468.326 0 0 0 5.845-5.483l-4.522 4.267a364.821 364.821 0 0 0 19.605-19.627l5.248-5.803 0.299-0.341a364.165 364.165 0 0 0 38.058-51.563l0.064-0.085 4.31-7.275a361.835 361.835 0 0 0 20.352-41.002l-2.432 5.653a357.355 357.355 0 0 0 10.069-25.472l-1.11 3.115a319.612 319.612 0 0 0 2.646-7.595l1.259-3.755 2.517-8.106a360.661 360.661 0 0 0 10.773-47.574c1.003-6.4 1.835-12.8 2.496-19.285l-0.32 3.008c0.32-3.03 0.64-6.059 0.875-9.11l-0.555 6.102a367.68 367.68 0 0 0 0.576-68.267l0.214 2.539-0.64-7.275 0.426 4.736a362.624 362.624 0 0 0-3.456-27.882 359.936 359.936 0 0 0-16.746-64.384 364.3 364.3 0 0 0-6.507-16.662l1.024 2.496a286.224 286.224 0 0 0-3.541-8.32v-0.021a360.661 360.661 0 0 0-17.558-34.73l0.47 0.81a363.904 363.904 0 0 0-43.264-60.373l-0.278-0.299-4.01-4.437-6.187-6.614a364.843 364.843 0 0 0-14.101-13.866l5.61 5.333a364.8 364.8 0 0 0-21.397-19.243l1.173 1.003a453.414 453.414 0 0 0-7.914-6.443l6.72 5.462a363.968 363.968 0 0 0-24.086-18.347 362.325 362.325 0 0 0-33.685-20.885 395.355 395.355 0 0 0-17.728-9.067l1.685 0.81a360.619 360.619 0 0 0-18.645-8.362l6.848 2.944c-2.475-1.11-4.97-2.155-7.467-3.2l0.598 0.256a321.278 321.278 0 0 0-9.6-3.84l9.002 3.584a315.468 315.468 0 0 0-10.026-3.947l1.045 0.384a348.55 348.55 0 0 0-8.981-3.285l7.957 2.901a325.748 325.748 0 0 0-9.045-3.285l1.066 0.384a362.453 362.453 0 0 0-128.128-20.373l-6.165 0.17a361.344 361.344 0 0 0-111.723 22.123l4.118-1.493c-2.56 0.896-5.12 1.834-7.659 2.794l3.541-1.301a367.701 367.701 0 0 0-19.093 7.68l8-3.392a360.555 360.555 0 0 0-9.067 3.84l1.067-0.448a360.704 360.704 0 0 0-7.488 3.35l6.4-2.902a488.108 488.108 0 0 0-8.277 3.776l1.877-0.853c-2.987 1.365-5.973 2.816-8.96 4.266l7.083-3.413a361.813 361.813 0 0 0-32.918 17.6v0.021a363.008 363.008 0 0 0-29.61 19.904l4.629-3.413a410.991 410.991 0 0 0-6.123 4.523l1.494-1.11a364.16 364.16 0 0 0-7.382 5.654l5.888-4.544a364.224 364.224 0 0 0-6.826 5.29l0.938-0.746a387.452 387.452 0 0 0-7.338 5.93l6.4-5.184a364.843 364.843 0 0 0-21.803 18.71l1.472-1.366a468.326 468.326 0 0 0-5.845 5.483l4.373-4.117a334.598 334.598 0 0 0-6.293 5.973v0.021a356.693 356.693 0 0 0-13.163 13.483l-5.248 5.803-0.299 0.341a363.733 363.733 0 0 0-62.869 100.139l2.517-5.867a357.035 357.035 0 0 0-10.133 25.685l1.13-3.2a420.096 420.096 0 0 0-4.138 12.096 360.683 360.683 0 0 0-13.163 55.766 362.816 362.816 0 0 0-2.474 19.669l0.426-3.925c-0.341 2.88-0.618 5.76-0.853 8.682l0.427-4.757a367.68 367.68 0 0 0-0.427 66.923l-0.213-2.539c0.213 2.88 0.49 5.76 0.768 8.619l-0.555-6.08a362.603 362.603 0 0 0 3.52 28.202 359.936 359.936 0 0 0 16.747 64.214 343.488 343.488 0 0 0 6.506 16.725l-0.64-1.6a360.747 360.747 0 0 0 20.992 42.56l4.31 7.296a364.203 364.203 0 0 0 38.122 51.627l0.278 0.341 5.077 5.61a364.907 364.907 0 0 0 15.787 16.043l-2.176-2.069 4.906 4.672c2.731 2.56 5.504 5.077 8.32 7.552l-2.133-1.899 3.925 3.478-1.792-1.579a404.183 404.183 0 0 0 7.296 6.272l-5.504-4.693c2.134 1.834 4.267 3.669 6.443 5.461l-0.939-0.768a360.544 360.544 0 0 0 14.507 11.477l-4.117-3.136a366.25 366.25 0 0 0 12.629 9.344h-0.021a364.267 364.267 0 0 0 22.186 14.507l-6.421-3.968a362.581 362.581 0 0 0 23.787 13.803l-0.811-0.427a318.945 318.945 0 0 0 6.528 3.413l-5.717-2.986a395.123 395.123 0 0 0 8.96 4.608l-3.243-1.622a350.292 350.292 0 0 0 9.856 4.822l-6.613-3.2a300.091 300.091 0 0 0 8.789 4.202l-2.176-1.002a302.21 302.21 0 0 0 7.552 3.434L360 713.365a309.605 309.605 0 0 0 7.659 3.435l-2.283-1.003c6.08 2.71 12.267 5.227 18.517 7.595l-7.829-3.05a359.808 359.808 0 0 0 25.13 9.087A362.453 362.453 0 0 0 512 746.667zM369.067 228.48l-3.478-1.365a383.275 383.275 0 0 1-76.224-42.198 298.368 298.368 0 0 1 160.299-93.077 448.064 448.064 0 0 0-80.597 136.64z m285.888 0.021l-0.32-0.832a447.701 447.701 0 0 0-80.32-135.829 298.368 298.368 0 0 1 160.32 93.056 382.421 382.421 0 0 1-79.68 43.605zM512 256c-28.01 0-55.317-2.987-81.621-8.683A383.957 383.957 0 0 1 512 118.4a384.299 384.299 0 0 1 81.621 128.896A384.533 384.533 0 0 1 512 256zM252.01 531.115l-2.986-5.44A297.344 297.344 0 0 1 213.334 384c0-53.483 14.08-103.68 38.677-147.115a446.528 446.528 0 0 0 99.157 53.376A448.512 448.512 0 0 0 341.333 384c0 32.15 3.392 63.53 9.814 93.76a445.867 445.867 0 0 0-99.136 53.355z m519.98 0l-4.48-3.158a446.827 446.827 0 0 0-94.678-50.218A450.62 450.62 0 0 0 682.667 384c0-32.15-3.392-63.53-9.814-93.76a445.867 445.867 0 0 0 99.136-53.355A297.365 297.365 0 0 1 810.667 384c0 53.483-14.08 103.68-38.678 147.115z m-160.64-72.043l-4.651-1.045C576.192 451.456 544.49 448 512 448c-34.133 0-67.392 3.819-99.35 11.05a386.432 386.432 0 0 1-7.317-75.05c0-25.685 2.518-50.773 7.339-75.072A448.79 448.79 0 0 0 512 320c34.133 0 67.392-3.819 99.35-11.05 4.8 24.255 7.317 49.365 7.317 75.05 0 25.685-2.518 50.773-7.339 75.072zM512 649.6l-3.307-3.499A384.107 384.107 0 0 1 430.4 520.704C456.683 515.008 483.99 512 512 512c28.01 0 55.317 2.987 81.621 8.683A383.957 383.957 0 0 1 512 649.6z m-62.293 26.56l-2.624-0.576a298.432 298.432 0 0 1-157.718-92.48 382.421 382.421 0 0 1 79.68-43.605 447.915 447.915 0 0 0 80.64 136.661z m124.629 0l2.987-3.52a447.573 447.573 0 0 0 77.61-133.12 381.845 381.845 0 0 1 79.702 43.563 298.368 298.368 0 0 1-160.299 93.077z" horiz-adv-x="1024" /> |
| | | |
| | | |
| | | <glyph glyph-name="xuanze" unicode="" d="M512 746.667c200.299 0 362.667-162.368 362.667-362.667S712.299 21.333 512 21.333 149.333 183.701 149.333 384 311.701 746.667 512 746.667z m0-64c-164.95 0-298.667-133.718-298.667-298.667S347.051 85.333 512 85.333 810.667 219.051 810.667 384 676.949 682.667 512 682.667z m169.045-127.04l45.91-44.587-271.83-279.723L318.293 373.27l46.08 44.416 90.944-94.336 225.728 232.278z" horiz-adv-x="1024" /> |
| | | |
| | | |
| | | <glyph glyph-name="store" unicode="" d="M746.667 85.333V287.98a138.24 138.24 0 0 1 64-10.24v-192.406a64 64 0 0 0-64-64h-192V170.667h-64v-149.334h-192a64 64 0 0 0-64 64V281.045a139.05 139.05 0 0 1 64 0v-195.712h128V234.667h192v-149.334h128V287.98zM725.653 704a64 64 0 0 0 54.976-31.253l101.76-170.838-0.277 0.022a110.72 110.72 0 0 0-182.08-122.966 120.299 120.299 0 0 0-87.765-37.824 120.47 120.47 0 0 0-90.582 40.896 120.47 120.47 0 0 0-90.56-40.896 120.427 120.427 0 0 0-87.765 37.824 110.72 110.72 0 0 0-175.787 133.76l85.568 157.782A64 64 0 0 0 309.397 704h416.256z m0-64H309.397l-86.912-160.213-1.493-2.304a46.72 46.72 0 0 1 74.197-56.384l46.315 52.97 48.363-51.136c10.688-11.328 25.386-17.792 41.258-17.792 16.555 0 31.83 7.04 42.582 19.243l48 54.357 47.978-54.357c10.752-12.203 26.027-19.243 42.582-19.243 15.872 0 30.549 6.464 41.216 17.75l48.32 51.2 46.378-52.971a46.72 46.72 0 0 1 76.864 51.819l-0.725 1.429L725.653 640z" horiz-adv-x="1024" /> |
| | | |
| | | |
| | | <glyph glyph-name="zhanghaoguanli" unicode="" d="M774.55 277.333a64 64 0 0 0 55.445-32l37.696-65.322a64 64 0 0 0 0-64l-37.696-65.323a64 64 0 0 0-55.446-32h-75.413a64 64 0 0 0-55.445 32l-37.696 65.323a64 64 0 0 0 0 64l37.696 65.322a64 64 0 0 0 55.445 32h75.413z m-385.153 37.078a254.331 254.331 0 0 1 61.227-26.944l-173.29-202.134h272.49l0.725-1.322 36.182-62.678H277.333a64 64 0 0 0-48.597 105.643l160.661 187.435zM774.55 213.333h-75.413l-37.717-65.322 37.717-65.323h75.413l37.718 65.323-37.718 65.322z m-39.04-32.554a32 32 0 1 0 0-64 32 32 0 0 0 0 64zM522.176 746.667c117.824 0 213.333-95.51 213.333-213.334S640 320 522.176 320s-213.333 95.51-213.333 213.333 95.509 213.334 213.333 213.334z m0-64a149.333 149.333 0 1 1 0-298.667 149.333 149.333 0 0 1 0 298.667z" horiz-adv-x="1024" /> |
| | | |
| | | |
| | | <glyph glyph-name="dingweiweizhi" unicode="" d="M499.772 851.185c-178.055 0-322.44-145.167-322.44-324.367 0-89.51 36.142-170.586 94.45-229.316l227.99-229.376 228.051 229.376a324.307 324.307 0 0 1 94.389 229.256c0 179.2-144.324 324.367-322.44 324.367z m0-468.45a143.721 143.721 0 0 0-143.36 144.083v0.12a143.661 143.661 0 0 0 143.3 144.083h0.06a143.721 143.721 0 0 0 143.36-144.083v-0.12a143.661 143.661 0 0 0-143.18-144.023h-0.18z m-143.36-420.021a143.36 60.235 0 1 1 286.72 0 143.36 60.235 0 1 1-286.72 0z" horiz-adv-x="1024" /> |
| | | |
| | | |
| | | <glyph glyph-name="scanning" unicode="" d="M234.667 256v-149.333h159.978v-64H234.667a64 64 0 0 0-64 64V256h64z m618.666 0v-149.333a64 64 0 0 0-64-64H629.312v64h160.021V256h64zM768 416v-64H256v64h512z m21.333 309.333a64 64 0 0 0 64-64V512h-64V661.333h-160v64h160z m-394.666 0v-64h-160V512h-64V661.333a64 64 0 0 0 64 64h160z" horiz-adv-x="1024" /> |
| | | |
| | | |
| | | <glyph glyph-name="xiugaimima" unicode="" d="M512.704 789.333A181.333 181.333 0 0 0 694.037 608l-0.021-53.333h95.317a64 64 0 0 0 64-64v-384a64 64 0 0 0-64-64H234.667a64 64 0 0 0-64 64v384a64 64 0 0 0 64 64h96.682V608a181.333 181.333 0 0 0 181.334 181.333z m276.63-298.666H234.666v-384h554.666v384zM550.122 384v-170.667h-64V384h64z m-37.419 341.333A117.333 117.333 0 0 1 395.371 608v-53.333h234.666V608a117.333 117.333 0 0 1-117.333 117.333z" horiz-adv-x="1024" /> |
| | | |
| | | |
| | | <glyph glyph-name="tuichudenglu" unicode="" d="M512 32.3c-47.2 0-93 9.2-136.1 27.5-41.6 17.6-79 42.8-111.1 74.9-32.1 32.1-57.3 69.5-74.9 111.1-18.2 43.1-27.5 88.9-27.5 136.1 0 117.3 58.4 226.2 156.2 291.3 14.7 9.8 34.6 5.8 44.4-8.9 9.8-14.7 5.8-34.6-8.9-44.4-79.9-53.2-127.7-142.1-127.7-238 0-76.3 29.7-148 83.7-202 53.9-53.9 125.7-83.7 202-83.7s148 29.7 202 83.7c53.9 53.9 83.7 125.7 83.7 202 0 95.2-47.2 183.9-126.4 237.1-14.7 9.9-18.5 29.8-8.7 44.4 9.9 14.7 29.8 18.6 44.4 8.7 96.8-65.2 154.7-173.7 154.7-290.2 0-47.2-9.2-93-27.5-136.1-17.6-41.6-42.8-79-74.9-111.1-32.1-32.1-69.5-57.3-111.1-74.9-43.3-18.3-89.1-27.5-136.3-27.5zM513 297.6c-17.6 0-32 14.3-32 31.9l-1.1 425.6c0 17.7 14.2 32 31.9 32.1h0.1c17.6 0 32-14.3 32-31.9l1.1-425.6c0-17.7-14.2-32.1-32-32.1 0.1 0 0 0 0 0z" horiz-adv-x="1024" /> |
| | | |
| | | |
| | | <glyph glyph-name="zuojiantou" unicode="" d="M304.265 349.867l214.8-214.801-48.264-48.265L173.602 384l297.2 297.199 48.264-48.265-214.801-214.8h549.068v-68.267z" horiz-adv-x="1024" /> |
| | | |
| | | |
| | | <glyph glyph-name="you" unicode="" d="M610.27 384L361.335 632.934 409.6 681.2 706.799 384 409.6 86.801l-48.265 48.265z" horiz-adv-x="1024" /> |
| | | |
| | | |
| | | <glyph glyph-name="quxiao" unicode="" d="M560.265 384L512 432.265l248.934 248.934 48.265-48.265L560.265 384l248.934-248.934-48.265-48.265L512 335.735 263.066 86.801 214.8 135.066 463.735 384 512 335.735 263.066 86.801 214.8 135.066 463.735 384 214.801 632.934l48.265 48.265L512 432.265l248.934 248.934 48.265-48.265z" horiz-adv-x="1024" /> |
| | | |
| | | |
| | | <glyph glyph-name="jia" unicode="" d="M546.133 418.133H819.2v-68.266H546.133v-307.2h-68.266v307.2H204.8v68.266h273.067V691.2h68.266z" horiz-adv-x="1024" /> |
| | | |
| | | |
| | | <glyph glyph-name="sousuo" unicode="" d="M740.25 199.817L846.848 94.07l-44.92-43.69-105.983 105.13A339.968 339.968 0 0 0 477.867 76.8c-188.519 0-341.334 152.815-341.334 341.333s152.815 341.334 341.334 341.334S819.2 606.652 819.2 418.133a339.968 339.968 0 0 0-78.95-218.316z m-262.383-54.75a273.067 273.067 0 1 1 0 546.133 273.067 273.067 0 0 1 0-546.133z" horiz-adv-x="1024" /> |
| | | |
| | | |
| | | <glyph glyph-name="yewushuju_h" unicode="" d="M694 512h98c22.092 0 40-17.908 40-40v-368c0-22.092-17.908-40-40-40h-98c-22.092 0-40 17.908-40 40V472c0 22.092 17.908 40 40 40zM500 400h98c22.092 0 40-17.908 40-40v-256c0-22.092-17.908-40-40-40h-98c-22.092 0-40 17.908-40 40V360c0 22.092 17.908 40 40 40zM304 280h88c22.092 0 40-17.91 40-40v-136c0-22.092-17.908-40-40-40h-88c-22.092 0-40 17.908-40 40V240c0 22.09 17.908 40 40 40zM658 644c-11.028 0-20-8.972-20-20v-500h134V624c0 11.028-8.97 20-20 20h-94m0 60h94c44.184 0 80-35.818 80-80v-540c0-11.046-8.954-20-20-20H598c-11.044 0-20 8.954-20 20V624c0 44.182 35.818 80 80 80zM462 484c-11.028 0-20-8.972-20-20v-340h136V464c0 11.028-8.97 20-20 20h-96m0 60h96c44.184 0 80-35.818 80-80v-380c0-11.046-8.954-20-20-20H402c-11.044 0-20 8.954-20 20V464c0 44.182 35.818 80 80 80zM272 324c-11.028 0-20-8.972-20-20v-180h130V304c0 11.028-8.97 20-20 20h-90m0 60h90c44.184 0 80-35.818 80-80v-220c0-11.046-8.954-20-20-20H212c-11.044 0-20 8.954-20 20V304c0 44.182 35.818 80 80 80z" horiz-adv-x="1024" /> |
| | | |
| | | |
| | | <glyph glyph-name="yewushuju" unicode="" d="M658 644c-11 0-20-9-20-20v-500h134V624c0 11-9 20-20 20h-94m0 60h94c44.2 0 80-35.8 80-80v-540c0-11-9-20-20-20H598c-11 0-20 9-20 20V624c0 44.2 35.8 80 80 80zM462 484c-11 0-20-9-20-20v-340h136V464c0 11-9 20-20 20h-96m0 60h96c44.2 0 80-35.8 80-80v-380c0-11-9-20-20-20H402c-11 0-20 9-20 20V464c0 44.2 35.8 80 80 80zM272 324c-11 0-20-9-20-20v-180h130v180c0 11-9 20-20 20h-90m0 60h90c44.2 0 80-35.8 80-80v-220c0-11-9-20-20-20H212c-11 0-20 9-20 20V304c0 44.2 35.8 80 80 80z" horiz-adv-x="1024" /> |
| | | |
| | | |
| | | <glyph glyph-name="chechangguanli" unicode="" d="M304 644c-28.6 0-52-23.4-52-52s23.4-52 52-52 52 23.4 52 52-23.4 52-52 52m0 60c61.8 0 112-50.2 112-112s-50.2-112-112-112-112 50.2-112 112 50.2 112 112 112z m416-60c-28.6 0-52-23.4-52-52s23.4-52 52-52 52 23.4 52 52-23.4 52-52 52m0 60c61.8 0 112-50.2 112-112s-50.2-112-112-112-112 50.2-112 112 50.2 112 112 112zM304 228c-28.6 0-52-23.4-52-52s23.4-52 52-52 52 23.4 52 52-23.4 52-52 52m0 60c61.8 0 112-50.2 112-112s-50.2-112-112-112-112 50.2-112 112 50.2 112 112 112z m416-60c-28.6 0-52-23.4-52-52s23.4-52 52-52 52 23.4 52 52-23.4 52-52 52m0 60c61.8 0 112-50.2 112-112s-50.2-112-112-112-112 50.2-112 112 50.2 112 112 112zM274 486h60v-204h-60V486z m416 0h60v-204h-60V486z m-280 136h204v-60H410v60z m0-416h204v-60H410v60z" horiz-adv-x="1024" /> |
| | | |
| | | |
| | | <glyph glyph-name="gerenzhongxin_h" unicode="" d="M506.5 680h121.25c13.392 0 24.25-10.858 24.25-24.25V583c0-53.572-43.428-97-97-97-53.57 0-97 43.428-97 97v48.5c0 26.786 21.714 48.5 48.5 48.5zM490 246h242c55.228 0 100-44.774 100-100v-42c0-22.092-17.908-40-40-40H430c-22.092 0-40 17.908-40 40v42c0 55.228 44.77 100 100 100zM432 644c-11.028 0-20-8.972-20-20v-80c0-55.14 44.86-100 100-100s100 44.86 100 100v80c0 11.028-8.97 20-20 20H432m0 60h160c44.184 0 80-35.818 80-80v-80c0-88.366-71.634-160-160-160s-160 71.634-160 160v80c0 44.182 35.818 80 80 80z m-90-436c-49.626 0-90-40.376-90-90v-54h520v54c0 49.626-40.374 90-90 90H342m0 60h340c82.844 0 150-67.158 150-150v-74c0-22.092-17.908-40-40-40H232c-22.092 0-40 17.908-40 40v74c0 82.842 67.158 150 150 150zM592 156H432c-16.568 0-30 13.432-30 30s13.432 30 30 30h160c16.568 0 30-13.432 30-30s-13.432-30-30-30z" horiz-adv-x="1024" /> |
| | | |
| | | |
| | | <glyph glyph-name="chechangguanli_h" unicode="" d="M442 454h308v-308H442V454zM304 644c-28.672 0-52-23.328-52-52 0-28.674 23.328-52 52-52 28.674 0 52 23.326 52 52 0 28.672-23.326 52-52 52m0 60c61.856 0 112-50.144 112-112s-50.144-112-112-112-112 50.144-112 112 50.144 112 112 112z m416-60c-28.672 0-52-23.328-52-52 0-28.674 23.328-52 52-52 28.674 0 52 23.326 52 52 0 28.672-23.326 52-52 52m0 60c61.856 0 112-50.144 112-112s-50.144-112-112-112-112 50.144-112 112 50.144 112 112 112zM304 228c-28.672 0-52-23.328-52-52 0-28.674 23.328-52 52-52 28.674 0 52 23.326 52 52 0 28.672-23.326 52-52 52m0 60c61.856 0 112-50.144 112-112 0-61.858-50.144-112-112-112s-112 50.142-112 112c0 61.856 50.144 112 112 112z m416-60c-28.672 0-52-23.328-52-52 0-28.674 23.328-52 52-52 28.674 0 52 23.326 52 52 0 28.672-23.326 52-52 52m0 60c61.856 0 112-50.144 112-112 0-61.858-50.144-112-112-112s-112 50.142-112 112c0 61.856 50.144 112 112 112zM274 486h60v-204h-60z m416 0h60v-204h-60zM410 622h204v-60H410z m0-416h204v-60H410z" horiz-adv-x="1024" /> |
| | | |
| | | |
| | | <glyph glyph-name="gerenzhongxin" unicode="" d="M432 644c-11 0-20-9-20-20v-80c0-55.2 44.8-100 100-100s100 44.8 100 100v80c0 11-9 20-20 20h-160m0 60h160c44.2 0 80-35.8 80-80v-80c0-88.4-71.6-160-160-160s-160 71.6-160 160v80c0 44.2 35.8 80 80 80z m-90-436c-49.6 0-90-40.4-90-90v-54h520v54c0 49.6-40.4 90-90 90H342m0 60h340c82.8 0 150-67.2 150-150v-74c0-22-18-40-40-40H232c-22 0-40 18-40 40v74c0 82.8 67.2 150 150 150zM592 156h-160c-16.6 0-30 13.4-30 30s13.4 30 30 30h160c16.6 0 30-13.4 30-30s-13.4-30-30-30z" horiz-adv-x="1024" /> |
| | | |
| | | |
| | | |
| | | |
| | | </font> |
| | | </defs></svg> |
New file |
| | |
| | | <template> |
| | | <el-breadcrumb class="app-breadcrumb" separator="/"> |
| | | <transition-group name="breadcrumb"> |
| | | <el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path+index"> |
| | | <span v-if="item.redirect==='noRedirect'||index==levelList.length-1" class="no-redirect">{{ item.meta.title }}</span> |
| | | <a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a> |
| | | </el-breadcrumb-item> |
| | | </transition-group> |
| | | </el-breadcrumb> |
| | | </template> |
| | | |
| | | <script> |
| | | import pathToRegexp from 'path-to-regexp' |
| | | |
| | | export default { |
| | | data() { |
| | | return { |
| | | levelList: null |
| | | } |
| | | }, |
| | | watch: { |
| | | $route() { |
| | | this.getBreadcrumb() |
| | | } |
| | | }, |
| | | created() { |
| | | this.getBreadcrumb() |
| | | }, |
| | | methods: { |
| | | getBreadcrumb() { |
| | | // only show routes with meta.title |
| | | let matched = this.$route.matched.filter(item => item.meta && item.meta.title) |
| | | // 利用reduce方法遍历数组,reduce第一个参数是遍历需要执行的函数,第二个参数是item的初始值 |
| | | let obj = {}; |
| | | matched = matched.reduce((prev, item) => { |
| | | if (!obj[item.meta.title]) { |
| | | prev.push(item) |
| | | obj[item.meta.title] = true |
| | | } |
| | | return prev |
| | | }, []) |
| | | const first = matched[0] |
| | | if (!this.isDashboard(first)) { |
| | | matched = [{ path: '/', meta: { title: '权益品后台管理' } }].concat(matched) |
| | | } |
| | | this.levelList = matched.filter(item => { |
| | | return item.meta && item.meta.title && item.meta.breadcrumb !== false |
| | | }) |
| | | let path = ''; |
| | | if(this.$router.options.routes[0]&&this.$router.options.routes[0].children[0]){ |
| | | path = this.$router.options.routes[0].children[0].path; |
| | | }else{ |
| | | path = this.$router.options.routes[0].path; |
| | | } |
| | | // this.levelList[1].redirect= 'noRedirect' |
| | | // if (this.levelList[2] && this.levelList.length >3 && this.levelList[2].path!='/finance/qyj-reconciliation' ){ |
| | | // this.levelList[2].redirect= 'noRedirect' |
| | | // } |
| | | this.levelList[0].path = path; |
| | | }, |
| | | isDashboard(route) { |
| | | const name = route && route.name |
| | | if (!name) { |
| | | return false |
| | | } |
| | | return name.trim().toLocaleLowerCase() === 'Dashboard'.toLocaleLowerCase() |
| | | }, |
| | | pathCompile(path) { |
| | | // To solve this problem https://github.com/PanJiaChen/vue-element-admin/issues/561 |
| | | const { params } = this.$route |
| | | var toPath = pathToRegexp.compile(path) |
| | | return toPath(params) |
| | | }, |
| | | handleLink(item) { |
| | | console.log(item) |
| | | const { redirect, path } = item |
| | | if (redirect) { |
| | | this.$router.push(redirect) |
| | | return |
| | | } |
| | | if(this.pathCompile(path)=='/order/dashboard-detail'){ |
| | | this.$router.push({path:this.pathCompile(path),query:{ |
| | | orderId:this.$route.query.orderId |
| | | }}) |
| | | }else{ |
| | | |
| | | if(path=='/finance/settleDetail'){ |
| | | this.$router.push({path:this.pathCompile(path),query:{ |
| | | id:this.$route.query.id |
| | | }}) |
| | | }else{ |
| | | this.$router.push(this.pathCompile(path)) |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .app-breadcrumb.el-breadcrumb { |
| | | display: inline-block; |
| | | font-size: 14px; |
| | | line-height: 50px; |
| | | margin-left: 8px; |
| | | |
| | | .no-redirect { |
| | | color: #97a8be; |
| | | cursor: text; |
| | | } |
| | | } |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <div style="padding: 0 15px;" @click="toggleClick"> |
| | | <svg |
| | | :class="{'is-active':isActive}" |
| | | class="hamburger" |
| | | viewBox="0 0 1024 1024" |
| | | xmlns="http://www.w3.org/2000/svg" |
| | | width="64" |
| | | height="64" |
| | | > |
| | | <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 0 0 0-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0 0 14.4 7z" /> |
| | | </svg> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: 'Hamburger', |
| | | props: { |
| | | isActive: { |
| | | type: Boolean, |
| | | default: false |
| | | } |
| | | }, |
| | | methods: { |
| | | toggleClick() { |
| | | this.$emit('toggleClick') |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .hamburger { |
| | | display: inline-block; |
| | | vertical-align: middle; |
| | | width: 20px; |
| | | height: 20px; |
| | | } |
| | | |
| | | .hamburger.is-active { |
| | | transform: rotate(180deg); |
| | | } |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <div v-if="isExternal" :style="styleExternalIcon" class="svg-external-icon svg-icon" v-on="$listeners" /> |
| | | <svg v-else :class="svgClass" aria-hidden="true" v-on="$listeners"> |
| | | <use :xlink:href="iconName" /> |
| | | </svg> |
| | | </template> |
| | | |
| | | <script> |
| | | // doc: https://panjiachen.github.io/vue-element-admin-site/feature/component/svg-icon.html#usage |
| | | import { isExternal } from '@/utils/validate' |
| | | |
| | | export default { |
| | | name: 'SvgIcon', |
| | | props: { |
| | | iconClass: { |
| | | type: String, |
| | | required: true |
| | | }, |
| | | className: { |
| | | type: String, |
| | | default: '' |
| | | } |
| | | }, |
| | | computed: { |
| | | isExternal() { |
| | | return isExternal(this.iconClass) |
| | | }, |
| | | iconName() { |
| | | return `#icon-${this.iconClass}` |
| | | }, |
| | | svgClass() { |
| | | if (this.className) { |
| | | return 'svg-icon ' + this.className |
| | | } else { |
| | | return 'svg-icon' |
| | | } |
| | | }, |
| | | styleExternalIcon() { |
| | | return { |
| | | mask: `url(${this.iconClass}) no-repeat 50% 50%`, |
| | | '-webkit-mask': `url(${this.iconClass}) no-repeat 50% 50%` |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .svg-icon { |
| | | width: 1em; |
| | | height: 1em; |
| | | vertical-align: -0.15em; |
| | | fill: currentColor; |
| | | overflow: hidden; |
| | | } |
| | | |
| | | .svg-external-icon { |
| | | background-color: currentColor; |
| | | mask-size: cover!important; |
| | | display: inline-block; |
| | | } |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <div class="margT"> |
| | | <el-pagination |
| | | background |
| | | :hide-on-single-page="true" |
| | | @current-change="handleCurrentChange" |
| | | @size-change="handleSizeChange" |
| | | layout="total,sizes,prev, pager, next, jumper" |
| | | :page-sizes="[10,20, 50]" |
| | | :page-size="defaultSize" |
| | | :total="currentSize" |
| | | :current-page.sync="currentPage" |
| | | ></el-pagination> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | props: { |
| | | currentSize:{ |
| | | type:Number, |
| | | default:0 |
| | | }, |
| | | defaultSize:{ |
| | | type:Number, |
| | | default:10 |
| | | }, |
| | | initialize:{ |
| | | type:Boolean, |
| | | default:false, |
| | | }, |
| | | currentPage:{ |
| | | type:Number, |
| | | default:1 |
| | | } |
| | | }, |
| | | name: "page", |
| | | data() { |
| | | return {}; |
| | | }, |
| | | watch:{ |
| | | initialize(val,old){ |
| | | if(val===true){ |
| | | this.currentPage=1; |
| | | this.$emit("successInit"); |
| | | this.$emit("update:initialize",false) |
| | | } |
| | | } |
| | | }, |
| | | methods: { |
| | | handleCurrentChange(val) { |
| | | this.$emit("pageSize", { data: val, type: "change" }); |
| | | }, |
| | | handleSizeChange(val) { |
| | | this.currentSync=1 |
| | | this.$emit("pageSize", { data: val, type: "size" }); |
| | | } |
| | | }, |
| | | created() {} |
| | | }; |
| | | </script> |
| | | <style scoped> |
| | | .margT{ |
| | | margin-top: 20px; |
| | | } |
| | | </style> |
New file |
| | |
| | | <!-- |
| | | * @Author: zxq |
| | | * @Date: 2022-01-20 16:48:10 |
| | | * @LastEditors: zxq |
| | | * @LastEditTime: 2022-05-25 09:21:08 |
| | | * @Description: Description |
| | | * @FilePath: \qyp-plat\src\components\fl-cardData.vue |
| | | --> |
| | | <template> |
| | | <div class="operational_indicator"> |
| | | <div class='operational_indicator_box'> |
| | | <div class="grid-content bg-purple" v-for="item in dataList" :key='item.id' > |
| | | <div :class="{'svniconclass':true,'svniconclass_shadow':isShadow,'svniconclass_border':!isShadow}"> |
| | | <svg |
| | | class="icon" |
| | | aria-hidden="true" |
| | | :style="item.style" |
| | | > |
| | | <use :xlink:href="'#icon-'+item.icon"></use> |
| | | </svg> |
| | | </div> |
| | | <div class="operational_indicator_data"> |
| | | <div> |
| | | {{item.title}} |
| | | </div> |
| | | <div> |
| | | <span> {{item.num}} </span> |
| | | <svg |
| | | class="icon" |
| | | v-if='item.status==1' |
| | | aria-hidden="true" |
| | | style="width:16px;height:16px;" |
| | | > |
| | | <!-- 优异 --> |
| | | <use xlink:href="#icon-youyi"></use> |
| | | <!-- 预警 --> |
| | | </svg> |
| | | <svg |
| | | v-else-if="item.status==2" |
| | | class="icon" |
| | | aria-hidden="true" |
| | | style="width:16px;height:16px;" |
| | | > |
| | | <use xlink:href="#icon-zhengchang"></use> |
| | | </svg> |
| | | <svg |
| | | v-else-if="item.status==3" |
| | | class="icon" |
| | | aria-hidden="true" |
| | | style="width:16px;height:16px;" |
| | | > |
| | | <use xlink:href="#icon-yujing"></use> |
| | | </svg> |
| | | <svg |
| | | v-else-if="item.status==4" |
| | | class="icon" |
| | | aria-hidden="true" |
| | | style="width:16px;height:16px;" |
| | | > |
| | | <use xlink:href="#icon-fengxian"></use> |
| | | </svg> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | props:{ |
| | | dataList:{ |
| | | type:Array, |
| | | default:()=>{ |
| | | return [] |
| | | } |
| | | }, |
| | | isShadow:{ |
| | | type:Boolean, |
| | | default:true |
| | | } |
| | | }, |
| | | data() { |
| | | return {}; |
| | | }, |
| | | created() {}, |
| | | mounted() {}, |
| | | methods: {} |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | .operational_indicator{ |
| | | .operational_indicator_box{ |
| | | display: flex; |
| | | justify-content:space-between; |
| | | align-items: center; |
| | | flex-wrap: wrap; |
| | | >div{ |
| | | width: 24%; |
| | | } |
| | | } |
| | | .svniconclass{ |
| | | width: 56px; |
| | | height: 56px; |
| | | background: #FFFFFF; |
| | | border-radius: 8px; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | margin-right: 20px; |
| | | } |
| | | .svniconclass_shadow{ |
| | | box-shadow: 0px 6px 16px 0px rgba(0, 5, 224, 0.08); |
| | | } |
| | | .svniconclass_border{ |
| | | border: 1px solid #E6E6E6; |
| | | } |
| | | .operational_indicator_data{ |
| | | >div{ |
| | | &:first-child{ |
| | | font-size: 12px; |
| | | font-weight: 400; |
| | | color: #24508C; |
| | | opacity: 0.65; |
| | | margin-bottom: 10px; |
| | | |
| | | } |
| | | &:last-child{ |
| | | font-size: 24px; |
| | | font-weight: bold; |
| | | color: #0B2C5F; |
| | | display: flex; |
| | | align-items: center; |
| | | span{ |
| | | display: inline-block; |
| | | margin-right: 8px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | .grid-content{ |
| | | //width: 24%; |
| | | // flex: 1; |
| | | padding: 22px 0; |
| | | background: #FFFFFF; |
| | | border-radius: 16px; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | margin-bottom: 20px; |
| | | &:not(:nth-child(4n)){ |
| | | // margin-right: 20px; |
| | | } |
| | | } |
| | | } |
| | | </style> |
New file |
| | |
| | | <!-- |
| | | * @Author: zxq |
| | | * @Date: 2022-01-21 15:55:24 |
| | | * @LastEditors: zxq |
| | | * @LastEditTime: 2022-05-25 09:21:26 |
| | | * @Description: Description |
| | | * @FilePath: \qyp-plat\src\components\fl-status.vue |
| | | --> |
| | | <template> |
| | | <div> |
| | | <!-- 优异 --> |
| | | <svg |
| | | class="icon" |
| | | v-if='status==1' |
| | | aria-hidden="true" |
| | | style="width:16px;height:16px;" |
| | | > |
| | | <use xlink:href="#icon-youyi"></use> |
| | | </svg> |
| | | <!-- 预警 --> |
| | | <svg |
| | | v-else-if="status==2" |
| | | class="icon" |
| | | aria-hidden="true" |
| | | style="width:16px;height:16px;" |
| | | > |
| | | <use xlink:href="#icon-yujing"></use> |
| | | </svg> |
| | | <!-- 风险 --> |
| | | <el-tooltip |
| | | v-else-if="status==3" |
| | | class="item" |
| | | effect="dark" |
| | | :content="warningContent" |
| | | placement="bottom" |
| | | > |
| | | <svg |
| | | class="icon" |
| | | aria-hidden="true" |
| | | style="width:16px;height:16px;" |
| | | > |
| | | <use xlink:href="#icon-fengxian"></use> |
| | | </svg> |
| | | </el-tooltip> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | props:{ |
| | | status:{ |
| | | type:Number, |
| | | default:1 |
| | | }, |
| | | warningContent:{ |
| | | type:String, |
| | | default:'预警:500 - 900' |
| | | } |
| | | }, |
| | | data() { |
| | | return { |
| | | |
| | | }; |
| | | }, |
| | | created() { |
| | | |
| | | }, |
| | | mounted() { |
| | | |
| | | }, |
| | | methods: { |
| | | |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | |
| | | </style> |
New file |
| | |
| | | <!-- |
| | | * @Author: zxq |
| | | * @Date: 2022-01-20 11:01:35 |
| | | * @LastEditors: zxq |
| | | * @LastEditTime: 2022-01-20 17:31:07 |
| | | * @Description: Description |
| | | * @FilePath: \ebike_plat\src\components\fl-tabs.vue |
| | | --> |
| | | <template> |
| | | <div class='tabs_page'> |
| | | <div class="container"> |
| | | <div class="tabs" :style='{"min-width":minWidth}'> |
| | | <div :class='{"tabs_item":true,"tabs_item_active":currentID==item.id}' v-for='item in containerList' @click='tabsClick(item.id)' :key='item.id'> |
| | | {{item.name}} |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | props:{ |
| | | containerList:{ |
| | | type:Array, |
| | | default:()=>{ |
| | | return [ |
| | | {id:1,name:'业务指标'}, |
| | | {id:2,name:'财务指标'}, |
| | | ] |
| | | } |
| | | }, |
| | | value:'', |
| | | 'minWidth':{ |
| | | type:Number, |
| | | default:222 |
| | | } |
| | | }, |
| | | watch: { |
| | | value(value) { |
| | | this.setCurrentName(value); |
| | | }, |
| | | }, |
| | | data() { |
| | | return { |
| | | currentID:this.value |
| | | }; |
| | | }, |
| | | created() { |
| | | |
| | | }, |
| | | mounted() { |
| | | if(this.currentID){ |
| | | this.activeID =this.containerList[0].id; |
| | | } |
| | | |
| | | }, |
| | | methods: { |
| | | tabsClick(id){ |
| | | this.setCurrentName(id) |
| | | this.$emit('tab-click',id); |
| | | }, |
| | | setCurrentName(value) { |
| | | this.currentID = value; |
| | | this.$emit('input', value); |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | .tabs_page{ |
| | | .tabs { |
| | | width: 222px; |
| | | height: 44px; |
| | | padding: 4px 10px; |
| | | background: #FFFFFF; |
| | | box-shadow: 0px 6px 20px 0px rgba(19, 23, 169, 0.1); |
| | | border-radius: 22px; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | cursor: pointer; |
| | | } |
| | | .tabs_item{ |
| | | width: 96px; |
| | | height: 36px; |
| | | text-align: center; |
| | | line-height: 36px; |
| | | font-size: 16px; |
| | | color: rgba(0, 0, 0, 0.85); |
| | | } |
| | | .tabs_item_active{ |
| | | width: 96px; |
| | | height: 36px; |
| | | text-align: center; |
| | | line-height: 36px; |
| | | color: #fff; |
| | | background: #207EFF; |
| | | border-radius: 18px; |
| | | } |
| | | .tab { |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | height: 54px; |
| | | width: 200px; |
| | | font-size: 1.25rem; |
| | | font-weight: 500; |
| | | border-radius: 99px; |
| | | cursor: pointer; |
| | | transition: color 0.15s ease-in; |
| | | } |
| | | |
| | | .notification { |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | width: 2rem; |
| | | height: 2rem; |
| | | margin-left: 0.75rem; |
| | | border-radius: 50%; |
| | | background-color: var(--secondary-color); |
| | | transition: 0.15s ease-in; |
| | | } |
| | | |
| | | input[type=radio]:checked + label { |
| | | color: var(--primary-color); |
| | | } |
| | | input[type=radio]:checked + label > .notification { |
| | | background-color: var(--primary-color); |
| | | color: #fff; |
| | | } |
| | | |
| | | input[id=radio-1]:checked ~ .glider { |
| | | transform: translateX(0); |
| | | } |
| | | |
| | | input[id=radio-2]:checked ~ .glider { |
| | | transform: translateX(100%); |
| | | } |
| | | |
| | | input[id=radio-3]:checked ~ .glider { |
| | | transform: translateX(200%); |
| | | } |
| | | |
| | | |
| | | .glider { |
| | | position: absolute; |
| | | display: flex; |
| | | height: 54px; |
| | | width: 200px; |
| | | background-color: var(--secondary-color); |
| | | z-index: 1; |
| | | border-radius: 99px; |
| | | transition: 0.25s ease-out; |
| | | } |
| | | |
| | | @media (max-width: 700px) { |
| | | .tabs { |
| | | transform: scale(0.6); |
| | | } |
| | | } |
| | | } |
| | | </style> |
New file |
| | |
| | | <!-- |
| | | * @Author: zxq |
| | | * @Date: 2022-04-08 14:11:32 |
| | | * @LastEditors: zxq |
| | | * @LastEditTime: 2023-06-07 17:20:33 |
| | | * @Description: Description |
| | | * @FilePath: \qyp_finlean_plat\src\components\previewPdf.vue |
| | | --> |
| | | <template> |
| | | <div class="preview-page"> |
| | | <el-link type="primary" @click="goSeepDf(url)" style="margin-right:16px;">{{ fileName }}</el-link> |
| | | <el-button type="text" size="small" :disabled='!url' @click="previewPdf">查 看</el-button> |
| | | <el-button type="text" size="small" :disabled='!url' @click="handleSeeLoanFile">下 载</el-button> |
| | | <el-dialog title="查看文件" :visible.sync="imgVisible" class='dialogImageUrlbox' width='60%' top='0' :modal="false" v-if="imgVisible" v-dialogDrag> |
| | | <div class='op_btn'> |
| | | <el-button-group class=''> |
| | | <el-button type="primary" icon="el-icon-arrow-left" size="mini" @click="prePage">上一页</el-button> |
| | | <el-button type="primary" size="mini" @click="nextPage">下一页<i class="el-icon-arrow-right el-icon--right"></i></el-button> |
| | | <el-button type="primary" size="mini" @click="clock">顺时针旋转<i class="el-icon-refresh-right"></i></el-button> |
| | | <el-button type="primary" size="mini" @click="counterClock">逆时针旋转<i class="el-icon-refresh-left"></i></el-button> |
| | | <el-button type="primary" icon="el-icon-zoom-in" size="mini" @click="scaleD">放大</el-button> |
| | | <el-button type="primary" size="mini" @click="scaleX">缩小<i class="el-icon-zoom-out"></i></el-button> |
| | | </el-button-group> |
| | | <span class='op_btn_page' style="marginLeft: 10px; color: #409EFF">{{ pageNum }} / {{ pageTotalNum }}</span> |
| | | </div> |
| | | <vue-draggable-resizable w="100%" h="100%" > |
| | | <pdf :page="pageNum" ref="pdf" :src="url" :rotate="pageRotate" @progress="loadedRatio = $event" @num-pages="pageTotalNum=$event"></pdf> |
| | | </vue-draggable-resizable> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | |
| | | import VueDraggableResizable from 'vue-draggable-resizable' |
| | | import pdf from 'vue-pdf' |
| | | export default { |
| | | components: { |
| | | pdf,VueDraggableResizable |
| | | }, |
| | | props:{ |
| | | url:'', |
| | | fileName:"" |
| | | }, |
| | | data() { |
| | | return { |
| | | imgVisible:false, |
| | | pageNum: 1, |
| | | scale: 100, // 放大 |
| | | pageTotalNum: 1, //总页数 |
| | | loadedRatio: 0, // 当前页面的加载进度,范围是0-1 ,等于1的时候代表当前页已经完全加载完成了 |
| | | pageRotate:0, |
| | | }; |
| | | }, |
| | | created() { |
| | | |
| | | }, |
| | | mounted() { |
| | | |
| | | }, |
| | | methods: { |
| | | // 上一页 |
| | | prePage() { |
| | | let page = this.pageNum |
| | | page = page > 1 ? page - 1 : this.pageTotalNum |
| | | this.pageNum = page |
| | | }, |
| | | // 下一页 |
| | | nextPage() { |
| | | let page = this.pageNum |
| | | page = page < this.pageTotalNum ? page + 1 : 1 |
| | | this.pageNum = page |
| | | }, |
| | | clock(){ |
| | | this.pageRotate += 90 |
| | | }, |
| | | counterClock(){ |
| | | this.pageRotate -= 90 |
| | | }, |
| | | handleSeeLoanFile(){ |
| | | var a = document.createElement("a"); //页面上创建一个标签 |
| | | var str = window.location.host; |
| | | if(window.location.hostname== "localhost"){ |
| | | str ='t.finlean.com' |
| | | } |
| | | a.setAttribute("href",`https://${str}/${this.url}`); |
| | | a.setAttribute("target", '_blank'); |
| | | a.click(); //出发a点击事件,下载文件 |
| | | }, |
| | | previewPdf(){ |
| | | this.imgVisible = true; |
| | | }, |
| | | //放大 |
| | | scaleD() { |
| | | this.scale += 5; |
| | | this.$refs.pdf.$el.style.width = parseInt(this.scale) + "%"; |
| | | }, |
| | | //缩小 |
| | | scaleX() { |
| | | // scale 是百分50%展示 不建议缩放 |
| | | if (this.scale == 50) { |
| | | return; |
| | | } |
| | | this.scale += -5; |
| | | this.$refs.pdf.$el.style.width = parseInt(this.scale) + "%"; |
| | | }, |
| | | goSeepDf(url){ |
| | | window.open(url); |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | .preview-page{ |
| | | .el-button--small{ |
| | | padding: 0 !important; |
| | | } |
| | | .el-dialog__body{ |
| | | height: 900px!important; |
| | | overflow: scroll !important; |
| | | position: relative; |
| | | } |
| | | .op_btn{ |
| | | width: 100%; |
| | | height: 50px; |
| | | background-color: #fff; |
| | | position:sticky; |
| | | top: -30px; |
| | | left: 30px; |
| | | z-index: 15000; |
| | | display: flex; |
| | | justify-content: flex-start; |
| | | align-items: center; |
| | | } |
| | | } |
| | | </style> |
New file |
| | |
| | | <!-- |
| | | * @Descripttion: 季度选择器 |
| | | * @version: 1.0 |
| | | * @Author: https://www.lervor.com/ |
| | | * @Date: 2021-12-06 |
| | | * @LastEditTime: 2021-12-09 |
| | | --> |
| | | <template> |
| | | <el-popover |
| | | trigger="focus" |
| | | v-model="pickerVisible" |
| | | popper-class="lervor-quarter-popover" |
| | | :disabled="disabled"> |
| | | <el-input |
| | | ref="reference" |
| | | slot="reference" |
| | | class="el-date-editor" |
| | | readonly |
| | | :disabled="disabled" |
| | | :size="size" |
| | | :placeholder="placeholder" |
| | | :value="displayValue" |
| | | :validateEvent="false" |
| | | :style="{ width }" |
| | | @mouseenter.native="handleMouseEnter" |
| | | @mouseleave.native="showClose = false"> |
| | | <i slot="prefix" |
| | | class="el-input__icon" |
| | | :class="triggerClass"> |
| | | </i> |
| | | <i slot="suffix" |
| | | class="el-input__icon" |
| | | :class="[showClose ? '' + clearIcon : '']" |
| | | @click="handleClickIcon" |
| | | @mousedown="handleMousedownIcon"> |
| | | </i> |
| | | </el-input> |
| | | <div class="lervor-quarter-picker"> |
| | | <div class="el-date-picker__header el-date-picker__header--bordered"> |
| | | <button |
| | | type="button" |
| | | aria-label="前一年" |
| | | class="el-picker-panel__icon-btn el-date-picker__prev-btn el-icon-d-arrow-left" |
| | | @click="prevYear"> |
| | | </button> |
| | | <span |
| | | role="button" |
| | | class="el-date-picker__header-label">{{ yearLabel }}</span> |
| | | <button v-if="year<new Date().getFullYear()" |
| | | type="button" |
| | | aria-label="后一年" |
| | | class="el-picker-panel__icon-btn el-date-picker__next-btn el-icon-d-arrow-right" |
| | | @click="nextYear"> |
| | | </button> |
| | | </div> |
| | | <div class="el-picker-panel__content" style="width: 200px; margin: 10px 15px;"> |
| | | <table class="lervor-quarter-table" @click="handleTableClick"> |
| | | <tbody> |
| | | <tr> |
| | | <td class="available" :class="getCellStyle(0)"> |
| | | <a class="cell">第一季度</a> |
| | | </td> |
| | | <td class="available" :class="getCellStyle(1)"> |
| | | <a class="cell">第二季度</a> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="available" :class="getCellStyle(2)"> |
| | | <a class="cell">第三季度</a> |
| | | </td> |
| | | <td class="available" :class="getCellStyle(3)"> |
| | | <a class="cell">第四季度</a> |
| | | </td> |
| | | </tr> |
| | | </tbody> |
| | | </table> |
| | | </div> |
| | | </div> |
| | | </el-popover> |
| | | </template> |
| | | |
| | | <script> |
| | | import { formatDate, prevYear, nextYear, range, nextDate, isDateObject, parseDate } from 'element-ui/src/utils/date-util' |
| | | import { hasClass } from 'element-ui/src/utils/dom' |
| | | |
| | | // 获取指定年份和季度的所有日期 |
| | | const datesInYearAndQuarter = (year, quarter) => { |
| | | const numOfDays = getDayCountOfQuarter(year, quarter) |
| | | const firstDay = new Date(year, quarter * 3, 1) |
| | | return range(numOfDays).map(n => nextDate(firstDay, n)) |
| | | } |
| | | |
| | | // 获取指定年份和季度总天数 |
| | | const getDayCountOfQuarter = (year, quarter) => { |
| | | switch(quarter) { |
| | | case 0: // 第一季度包含二月,需要对是否闰年进行判断处理 |
| | | if (year % 4 === 0 && year % 100 !== 0 || year % 400 === 0) { |
| | | return 91 |
| | | } else { |
| | | return 90 |
| | | } |
| | | case 1: |
| | | return 91 |
| | | default: |
| | | return 92 |
| | | } |
| | | } |
| | | |
| | | export default { |
| | | name: 'QuarterPicker', |
| | | props: { |
| | | size: String, |
| | | format: String, // 显示在输入框中的格式,引入季度:q(阿拉伯数字)、Q(中文数字) |
| | | valueFormat: String, |
| | | placeholder: String, |
| | | prefixIcon: String, |
| | | clearIcon: { |
| | | type: String, |
| | | default: 'el-icon-circle-close' |
| | | }, |
| | | disabled: Boolean, |
| | | clearable: { |
| | | type: Boolean, |
| | | default: true |
| | | }, |
| | | width: { // 组件宽度 |
| | | type: String, |
| | | default: '' |
| | | }, |
| | | disabledDate: {}, // 不可用的日期 |
| | | value: null |
| | | }, |
| | | data() { |
| | | return { |
| | | showClose: false, |
| | | pickerVisible: false, |
| | | date: new Date(), |
| | | quarterText: [ '一', '二', '三', '四' ] |
| | | } |
| | | }, |
| | | computed: { |
| | | triggerClass() { |
| | | return this.prefixIcon || 'el-icon-date' |
| | | }, |
| | | displayValue() { |
| | | if (!this.value) return null |
| | | // 季度,从0开始 |
| | | let quarter = parseInt(this.parsedValue.getMonth() / 3) |
| | | let fDate = formatDate(this.parsedValue, this.format) |
| | | fDate = fDate.replace(/q/, quarter + 1).replace(/Q/, this.quarterText[quarter]) |
| | | return fDate |
| | | }, |
| | | year() { |
| | | return this.date.getFullYear() |
| | | }, |
| | | yearLabel() { |
| | | return this.year + ' 年' |
| | | }, |
| | | parsedValue() { |
| | | if (!this.value) { |
| | | return this.value |
| | | } |
| | | if (isDateObject(this.value)) { |
| | | return this.value |
| | | } |
| | | // 非时间格式且设置了valueFormat,进行时间转换 |
| | | if (this.valueFormat) { |
| | | return parseDate(this.value, this.valueFormat) |
| | | } |
| | | // 非时间格式且未设置valueFormat,再尝试转换时间 |
| | | return new Date(this.value) |
| | | } |
| | | }, |
| | | watch: { |
| | | value(value) { |
| | | this.date = value ? this.parsedValue : new Date() |
| | | } |
| | | }, |
| | | methods: { |
| | | handleMouseEnter() { |
| | | if (this.disabled) return |
| | | if (this.value && this.clearable) { |
| | | this.showClose = true |
| | | } |
| | | }, |
| | | handleClickIcon(event) { |
| | | if (this.disabled) return |
| | | if (this.showClose) { |
| | | this.$emit('input', null) |
| | | this.$emit('change', null) |
| | | this.showClose = false |
| | | this.pickerVisible = false |
| | | this.$refs.reference.blur() |
| | | } |
| | | }, |
| | | handleMousedownIcon(event) { |
| | | // 阻止鼠标按下清空按钮,防止清空数据时季度选择面板闪现 |
| | | event.preventDefault() |
| | | }, |
| | | handleTableClick(event) { |
| | | let target = event.target |
| | | if (target.tagName === 'A') { |
| | | target = target.parentNode |
| | | } |
| | | if (target.tagName !== 'TD') return |
| | | if (hasClass(target, 'disabled')) return |
| | | const column = target.cellIndex |
| | | const row = target.parentNode.rowIndex |
| | | // 季度,从0开始 |
| | | const quarter = row * 2 + column |
| | | // 季度开始月份,从0开始 |
| | | const month = quarter * 3 |
| | | let newDate = new Date(this.year, month, 1) |
| | | if (this.valueFormat) { |
| | | newDate = formatDate(newDate, this.valueFormat) |
| | | } |
| | | this.pickerVisible = false |
| | | this.$emit('input', newDate) |
| | | this.$emit('change', newDate) |
| | | }, |
| | | prevYear() { |
| | | this.date = prevYear(this.date) |
| | | }, |
| | | nextYear() { |
| | | this.date = nextYear(this.date) |
| | | }, |
| | | getCellStyle(quarter) { |
| | | const style = {} |
| | | const today = new Date() |
| | | const date = this.parsedValue ? this.parsedValue : today |
| | | style.disabled = typeof this.disabledDate === 'function' |
| | | ? datesInYearAndQuarter(this.year, quarter).every(this.disabledDate) : false |
| | | // 当前选中的季度样式 |
| | | style.current = date.getFullYear() === this.year && parseInt(date.getMonth() / 3) === quarter |
| | | // 今日所在季度样式 |
| | | style.quarter = today.getFullYear() === this.year && parseInt(today.getMonth() / 3) === quarter |
| | | return style |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style> |
| | | .lervor-quarter-picker { |
| | | line-height: 30px; |
| | | } |
| | | .lervor-quarter-popover { |
| | | padding: 0; |
| | | } |
| | | .lervor-quarter-table { |
| | | font-size: 12px; |
| | | margin: -1px; |
| | | border-collapse: collapse; |
| | | width: 100%; |
| | | } |
| | | .lervor-quarter-table td { |
| | | text-align: center; |
| | | padding: 10px 3px; |
| | | /* cursor: pointer; */ |
| | | } |
| | | .lervor-quarter-table td .cell { |
| | | height: 32px; |
| | | display: block; |
| | | line-height: 32px; |
| | | color: #606266; |
| | | margin: 0 auto; |
| | | } |
| | | .lervor-quarter-table td .cell:hover { |
| | | color: #1890ff; |
| | | } |
| | | .lervor-quarter-table td.current:not(.disabled) .cell { |
| | | color: #409eff; |
| | | } |
| | | |
| | | .lervor-quarter-table td.quarter .cell { |
| | | color: #409eff; |
| | | font-weight: 700; |
| | | } |
| | | |
| | | .lervor-quarter-table td.disabled .cell { |
| | | background-color: #F5F7FA; |
| | | cursor: not-allowed; |
| | | color: #C0C4CC; |
| | | } |
| | | </style> |
New file |
| | |
| | | <!-- |
| | | * @Author: zxq |
| | | * @Date: 2022-07-19 10:32:01 |
| | | * @LastEditors: zxq |
| | | * @LastEditTime: 2023-01-03 11:08:50 |
| | | * @Description: Description |
| | | * @FilePath: \qyp-plat\src\components\secect.vue |
| | | --> |
| | | <template> |
| | | <el-select |
| | | multiple |
| | | filterable |
| | | :disabled="disabled" |
| | | v-model='selectedArr' |
| | | :loading="mulSelectLoading" |
| | | placeholder='请选择' |
| | | @change='changeSelect' |
| | | @remove-tag='removeTag'> |
| | | <el-option label='全部' value='all' @click.native='selectAll' v-if="selectOptions.length"></el-option> |
| | | <el-option v-for='item in selectOptions' :key='item.code' :label='item.name' :value='item.code'></el-option> |
| | | </el-select> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: 'MultipleSelect', |
| | | data() { |
| | | return { |
| | | selectedArr: [], |
| | | } |
| | | }, |
| | | created(){ |
| | | // this.changeSelect(['all']); |
| | | }, |
| | | props:{ |
| | | value:{ |
| | | type:Array|Number|String|Object, |
| | | default:{}|[] |
| | | }, |
| | | // 选项 |
| | | selectOptions:{ |
| | | type:Array, |
| | | default(){ |
| | | return [] |
| | | } |
| | | }, |
| | | // 是否禁用 |
| | | disabled:{ |
| | | type:Boolean, |
| | | default:false |
| | | }, |
| | | // 已选中选项 |
| | | mulSelecteds:{ |
| | | type:Array, |
| | | default(){ |
| | | return [] |
| | | } |
| | | }, |
| | | mulSelectLoading:{ |
| | | type:Boolean, |
| | | default:false |
| | | }, |
| | | collapseTags:{ |
| | | type:Boolean, |
| | | default:true |
| | | } |
| | | }, |
| | | methods: { |
| | | selectAll() { |
| | | if (this.selectedArr.length < this.selectOptions.length) { |
| | | this.selectedArr = [] |
| | | // this.selectOptions.map((item) => { |
| | | // this.selectedArr.push(item.code) |
| | | // }) |
| | | this.selectedArr.unshift('all'); |
| | | } else { |
| | | // 取消全部 |
| | | this.selectedArr = []; |
| | | } |
| | | this.$emit('input', this.selectedArr); |
| | | this.$emit('update:updateMultipleSelect',this.selectedArr); |
| | | }, |
| | | changeSelect(val) { |
| | | if (!val.includes('all') && val.length === this.selectOptions.length) { |
| | | // 如果选中所有不包含全部的选项改变成全部 |
| | | this.selectedArr =['all']; |
| | | } else if (val.includes('all') && (val.length - 1) < this.selectOptions.length) { |
| | | this.selectedArr = this.selectedArr.filter((item) => { return item !== 'all'}) |
| | | } |
| | | this.$emit('input', this.selectedArr); |
| | | }, |
| | | removeTag(val) { |
| | | if (val === 'all') { |
| | | this.selectedArr = []; |
| | | this.$emit('input', this.selectedArr); |
| | | this.$emit('update:updateMultipleSelect',this.selectedArr); |
| | | } |
| | | } |
| | | }, |
| | | watch:{ |
| | | value(val) { |
| | | this.selectedArr = val; |
| | | }, |
| | | selectedArr: { |
| | | handler(newVal,oldVal){ |
| | | if (newVal !== oldVal) { |
| | | // let checkIndex = newVal.indexOf('all'); |
| | | // if(checkIndex>-1){ |
| | | // newVal.splice(checkIndex, 1); |
| | | // } |
| | | this.$emit('input', newVal); |
| | | } |
| | | if (!newVal.includes('all') && newVal.length && (newVal.length === this.selectOptions.length)){ |
| | | this.selectedArr.unshift('all') |
| | | } |
| | | }, |
| | | immediate: true |
| | | } |
| | | } |
| | | } |
| | | </script> |
New file |
| | |
| | | <!-- |
| | | * @Author: zxq |
| | | * @Date: 2021-09-13 17:29:07 |
| | | * @LastEditTime: 2023-04-23 11:27:58 |
| | | * @LastEditors: zxq |
| | | * @Description: In User Settings Edit |
| | | * @FilePath: \qyp_finlean_plat\src\components\table.vue |
| | | --> |
| | | <template> |
| | | <div class="table_page"> |
| | | <div class="operate_btn"> |
| | | <el-button |
| | | v-for="btn in buttonsAction" |
| | | :key="btn.id" |
| | | :type="btn.type" |
| | | :size="btn.size" |
| | | :icon="btn.icon" |
| | | :style="btn.style" |
| | | @click="operateDo(btn)" |
| | | >{{ btn.label }}</el-button |
| | | > |
| | | </div> |
| | | <el-table |
| | | :cell-class-name="cellClassName" |
| | | :data="tableData" |
| | | :highlight-current-row="highlightCurrentRow" |
| | | ref="multipleTable" |
| | | @cell-mouse-leave="leave" |
| | | @selection-change="handleSelectionChange" |
| | | @cell-mouse-enter="handleMouseEnter" |
| | | @select-all="selectAll" |
| | | @cell-click="cellClick" |
| | | @select="select" |
| | | > |
| | | <el-table-column |
| | | v-if="hasSelection" |
| | | type="selection" |
| | | :border="border" |
| | | :selectable="selectHandle" |
| | | width="50" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | v-if="hasIndex" |
| | | type="index" |
| | | label="序号" |
| | | :border="border" |
| | | :selectable="selectHandle" |
| | | width="50" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <span>{{ scope.$index + 1 }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | v-for="(item, index) in tableColumns" |
| | | :key="item.index" |
| | | :label="item.lable" |
| | | :prop="item.prop" |
| | | :align="item.align" |
| | | :width="item.width" |
| | | :fixed="item.fixed" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="tooltipContent" |
| | | placement="top-start" |
| | | :ref="'tooltip' + scope.row.countDay" |
| | | manual |
| | | > |
| | | <template v-if="!item.render"> |
| | | <span |
| | | v-if="item.formatter" |
| | | v-html="item.formatter(scope.row)" |
| | | ></span> |
| | | <template v-else> |
| | | <span>{{ scope.row[item.prop] }}</span> |
| | | </template> |
| | | </template> |
| | | <template v-else> |
| | | <expand-dom |
| | | :column="item" |
| | | :row="scope.row" |
| | | :render="item.render" |
| | | :index="index" |
| | | ></expand-dom> |
| | | </template> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | <!--region 按钮操作组(waiting....)--> |
| | | <el-table-column |
| | | ref="fixedColumn" |
| | | label="操作" |
| | | align="center" |
| | | :width="operates.width" |
| | | :fixed="operates.fixed" |
| | | v-if="operates.list.filter((_x) => _x.show === true).length > 0" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <div class="operate-group"> |
| | | <template v-for="(btn, key) in operates.list"> |
| | | <div class="item" v-if="btn.show" :key="btn.id"> |
| | | <el-button |
| | | :type="btn.type" |
| | | size="mini" |
| | | :icon="btn.icon" |
| | | :disabled="btn.disabled" |
| | | :plain="btn.plain" |
| | | @click.native.prevent="btn.method(key, scope.row)" |
| | | >{{ btn.label }} |
| | | </el-button> |
| | | </div> |
| | | </template> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <div class="page_export"> |
| | | <div> |
| | | <span v-if="hasPagination">共 {{ totals }} 条</span> |
| | | <el-button |
| | | type="text" |
| | | v-if="exportUrl.url && filterBtnById(exportUrl.powerId)" |
| | | :disabled="tableData.length == 0" |
| | | :loading="exportLoading" |
| | | @click="exportFile(1)" |
| | | >全部导出</el-button |
| | | > |
| | | <el-button |
| | | v-if="exportOrderUrl.visible" |
| | | type="text" |
| | | :disabled="tableData.length == 0" |
| | | :loading="exportOrderLoading" |
| | | @click="exportFile(2)" |
| | | >导出订单明细</el-button |
| | | > |
| | | </div> |
| | | <div v-if="hasPagination" class="margT" style="margin-top: 20px"> |
| | | <el-pagination |
| | | :background="ebackground" |
| | | @current-change="pageChange" |
| | | @size-change="sizeChange" |
| | | layout="sizes,prev, pager, next, jumper" |
| | | :page-sizes="[100, 15, 10,5]" |
| | | :page-size="queryData.rows" |
| | | :total="totals" |
| | | :current-page.sync="queryData.page" |
| | | ></el-pagination> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <script> |
| | | /* |
| | | columns:render 需要操作 |
| | | columns:formatter 需要格式化代码, |
| | | 操作可以使用 operates 也可以使用columns render函数 |
| | | */ |
| | | import listApi from "../api/listapi"; |
| | | import downloadUrl from "@/utils/excelDownLoadConfig"; |
| | | import request from "@/utils/request"; |
| | | import { join } from "path"; |
| | | export default { |
| | | name: "ETable", |
| | | props: { |
| | | // 请求方法字符串 |
| | | httpUrl: { |
| | | require: true, |
| | | type: String, |
| | | default: "", |
| | | }, |
| | | // 是否选择框 |
| | | hasSelection: { |
| | | type: Boolean, |
| | | default: false, |
| | | }, |
| | | // 是否展示分页 |
| | | hasPagination: { |
| | | type: Boolean, |
| | | default: true, |
| | | }, |
| | | isHttp: { |
| | | type: Boolean, |
| | | default: true, |
| | | }, |
| | | // 不请求接口表格数据 |
| | | defaulTableData: { |
| | | require: true, |
| | | type: Array, |
| | | default: () => { |
| | | return []; |
| | | }, |
| | | }, |
| | | // 表头 |
| | | columns: { |
| | | require: true, |
| | | type: Array, |
| | | default: () => { |
| | | return []; |
| | | }, |
| | | }, |
| | | // 搜索字段 |
| | | searchData: { |
| | | type: Object, |
| | | default: () => { |
| | | return {}; |
| | | }, |
| | | }, |
| | | // 操作按钮 |
| | | operates: { |
| | | type: Object, |
| | | default: () => { |
| | | return { |
| | | list: [], |
| | | }; |
| | | }, |
| | | }, // 操作按钮组 === label: 文本,type :类型(primary / success / warning / danger / info / text),show:是否显示,icon:按钮图标,plain:是否朴素按钮,disabled:是否禁用,method:回调方法 |
| | | ebackground: { |
| | | type: Boolean, |
| | | default: true, |
| | | }, |
| | | buttonsAction: { |
| | | type: Array, |
| | | default: () => { |
| | | return []; |
| | | }, |
| | | }, |
| | | // 是否有边框 |
| | | border: { |
| | | type: Boolean, |
| | | default: false, |
| | | }, |
| | | // 高亮斑马紋 |
| | | highlightCurrentRow: { |
| | | type: Boolean, |
| | | default: false, |
| | | }, |
| | | nameUrl: { |
| | | require: true, |
| | | type: String, |
| | | default: "", |
| | | }, |
| | | // 导出路径 |
| | | exportUrl: { |
| | | type: Object, |
| | | default: () => { |
| | | return {}; |
| | | }, |
| | | |
| | | }, |
| | | //订单明细 导出路径 |
| | | exportOrderUrl: { |
| | | type: Object, |
| | | default: () => { |
| | | return {}; |
| | | }, |
| | | |
| | | }, |
| | | // 是否可以勾选 |
| | | disableSelectionObj: { |
| | | type: Object, |
| | | default: () => { |
| | | return {}; |
| | | }, |
| | | }, |
| | | // 是否显示序号 |
| | | hasIndex: { |
| | | type: Boolean, |
| | | default: false, |
| | | }, |
| | | isCheckAll: { |
| | | type: Boolean, |
| | | default: false, |
| | | }, |
| | | excludeList: { |
| | | type: Array, //多选已取消的数据 |
| | | default: () => [], |
| | | }, |
| | | checkedList: { |
| | | type: Array, //已选中的数据 |
| | | default: () => [], |
| | | }, |
| | | isFind: { |
| | | //进入是否执行查询 |
| | | type: Boolean, |
| | | default: true, |
| | | }, |
| | | IncludcChildren: { |
| | | type: Boolean, |
| | | default: false, |
| | | }, |
| | | itemsArr:{ |
| | | type:String, |
| | | default:'items' |
| | | }, |
| | | }, |
| | | components: { |
| | | expandDom: { |
| | | functional: true, |
| | | props: { |
| | | row: Object, |
| | | render: Function, |
| | | index: Number, |
| | | column: { |
| | | type: Object, |
| | | default: null, |
| | | }, |
| | | }, |
| | | render: (h, ctx) => { |
| | | const params = { |
| | | row: ctx.props.row, |
| | | index: ctx.props.index, |
| | | }; |
| | | if (ctx.props.column) params.column = ctx.props.column; |
| | | return ctx.props.render(h, params); |
| | | }, |
| | | }, |
| | | }, |
| | | data() { |
| | | return { |
| | | queryData: { |
| | | page: 1, |
| | | rows: 10, |
| | | }, |
| | | totals: 0, |
| | | tableData: [], |
| | | postUrl: "", |
| | | exportLoading: false, |
| | | tableColumns: [], |
| | | tooltipContent: "", |
| | | Istooltip: false, |
| | | exportOrderLoading:false |
| | | }; |
| | | }, |
| | | watch: { |
| | | searchData: { |
| | | handler: function (val, oldVal) { |
| | | if (this.IncludcChildren) { |
| | | // console.log(JSON.stringify(val)) |
| | | if (JSON.stringify(val) != "{}") { |
| | | this.getData(); |
| | | } else { |
| | | this.tableData = []; |
| | | } |
| | | } else { |
| | | this.getData(); |
| | | } |
| | | }, |
| | | deep: true, //true 深度监听 |
| | | }, |
| | | isCheckAll: { |
| | | // 当前的是否全部勾选 |
| | | handler: function (val) { |
| | | if (val) { |
| | | this.tableData.forEach((row) => { |
| | | this.$refs.multipleTable.toggleRowSelection( |
| | | row, |
| | | row.loanStatus == 2 ? false : true |
| | | ); |
| | | }); |
| | | } else { |
| | | this.$refs.multipleTable.clearSelection(); |
| | | } |
| | | }, |
| | | deep: true, |
| | | }, |
| | | defaulTableData: { |
| | | handler: function (val) { |
| | | if (!this.isHttp) { |
| | | this.tableData = val; |
| | | } |
| | | }, |
| | | deep: true, |
| | | }, |
| | | excludeList: { |
| | | handler: function (val, oldVal) { |
| | | // this.getData(); this.tableColumns = this.columns |
| | | }, |
| | | deep: true, //true 深度监听 |
| | | }, |
| | | columns: { |
| | | handler: function (val, oldVal) { |
| | | this.tableColumns = val; |
| | | }, |
| | | deep: true, //true 深度监听 |
| | | }, |
| | | }, |
| | | methods: { |
| | | pageChange(newPage) { |
| | | this.queryData.page = newPage; |
| | | this.getData(); |
| | | }, |
| | | sizeChange(newSize) { |
| | | this.queryData.rows = newSize; |
| | | this.getData(); |
| | | }, |
| | | getData(data) { |
| | | let dataInfo = { ...this.searchData, ...this.queryData }; |
| | | // if(data){ |
| | | // dataInfo=data |
| | | // }else{ |
| | | |
| | | // } |
| | | // localStorage.setItem( this.httpUrl, JSON.stringify(dataInfo)) |
| | | this.postUrl = this.httpUrl; |
| | | listApi[this.postUrl](dataInfo) |
| | | .then(({ body }) => { |
| | | if (this.nameUrl == "") { |
| | | this.tableData = body[this.itemsArr]; |
| | | if (this.isCheckAll) { |
| | | let checkListb = []; |
| | | this.$nextTick(() => { |
| | | this.tableData.forEach((row) => { |
| | | this.excludeList.forEach((r) => { |
| | | if (row.id == r) { |
| | | checkListb.push(row); |
| | | } |
| | | }); |
| | | // console.log(row) |
| | | this.$refs.multipleTable.toggleRowSelection(row, true); |
| | | }); |
| | | if (checkListb.length > 0) { |
| | | checkListb.forEach((row) => { |
| | | this.$refs.multipleTable.toggleRowSelection(row, false); |
| | | }); |
| | | } |
| | | }); |
| | | } else { |
| | | if (this.checkedList.length > 0) { |
| | | this.checkedList.forEach((item) => { |
| | | let currentRow = this.tableData.find((val) => { |
| | | return val.id == item; |
| | | }); |
| | | if (currentRow) { |
| | | this.$nextTick(() => { |
| | | this.$refs.multipleTable.toggleRowSelection( |
| | | currentRow, |
| | | true |
| | | ); |
| | | }); |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | |
| | | if (this.IncludcChildren && this.tableData.length > 0) { |
| | | //包含子数组 |
| | | let currentRow = this.tableData[0]; |
| | | this.tableColumns = this.columns.slice(0, 3); |
| | | |
| | | this.tableData.forEach((item, index) => { |
| | | var obj = {}; |
| | | if (currentRow.mobList.length < item.mobList.length) { |
| | | currentRow = item; |
| | | } |
| | | item.mobList.forEach((row) => { |
| | | obj = Object.assign(obj, { |
| | | [row.mobName]: row.rate, |
| | | denominator: row.denominator, |
| | | molecule: row.molecule, |
| | | }); |
| | | }); |
| | | this.tableData[index] = Object.assign(obj, item); |
| | | }); |
| | | currentRow.mobList.forEach((row) => { |
| | | this.tableColumns.push({ |
| | | lable: row.mobName + "", |
| | | prop: row.mobName, |
| | | align: "center", |
| | | width: "250", |
| | | }); |
| | | }); |
| | | this.tableColumns = this.unique(this.tableColumns); |
| | | } |
| | | this.totals = body.total; |
| | | this.$emit("getDataList", body); |
| | | } else if (this.nameUrl == "roleGetRoleList") { |
| | | this.tableData = body; |
| | | this.totals = body.total; |
| | | this.$emit("getDataList", body); |
| | | } else { |
| | | this.tableData = body[this.nameUrl].items; |
| | | this.totals = body[this.nameUrl].total; |
| | | this.$emit("getDataList", body[this.nameUrl].items); |
| | | } |
| | | }) |
| | | .catch((err) => { |
| | | this.tableData = []; |
| | | }); |
| | | }, |
| | | exportList(exportUrl) { |
| | | let objForms = JSON.parse(JSON.stringify(this.searchData)); |
| | | let objForm = JSON.parse(JSON.stringify(this.queryData)); |
| | | delete objForms.page; |
| | | delete objForms.rows; |
| | | delete objForm.page; |
| | | delete objForm.rows; |
| | | let data = {}; |
| | | if (typeof (exportUrl.amtType != "undefined")) { |
| | | data = { ...objForms, ...objForm, amtType: exportUrl.amtType }; |
| | | } else { |
| | | data = { ...objForms, ...objForm }; |
| | | } |
| | | listApi[exportUrl](data).then((res) => { |
| | | downloadUrl.configDate2(res, this.buttonsAction[0].exportName); |
| | | }); |
| | | }, |
| | | operateDo(btn) { |
| | | if (btn.id == "export") { |
| | | this.exportList(btn.exportUrl, btn.exportName); |
| | | } else { |
| | | this.$emit("operateDo", btn); |
| | | } |
| | | }, |
| | | cellClick(row, column, cell, event) { |
| | | this.$emit("cellClick", row, column, cell, event); |
| | | }, |
| | | handleSelectionChange(val) { |
| | | // 选中的所有选项 |
| | | // console.log(val) |
| | | this.$emit("handleSelectionChange", val); |
| | | }, |
| | | exportFile(index) { |
| | | if (this.tableData.length == 0) { |
| | | return false; |
| | | } |
| | | let objForms = JSON.parse(JSON.stringify(this.searchData)); |
| | | let objForm = JSON.parse(JSON.stringify(this.queryData)); |
| | | delete objForms.page; |
| | | delete objForms.rows; |
| | | delete objForm.page; |
| | | delete objForm.rows; |
| | | let data = { ...objForms, ...objForm }; |
| | | for(let key in data){ |
| | | if(Array.isArray(data[key])){ |
| | | data[key] = data[key].join(','); |
| | | } |
| | | } |
| | | |
| | | if(index==1){ |
| | | if (this.exportUrl.query) { |
| | | data = { ...data, ...this.exportUrl.query }; |
| | | } |
| | | this.exportLoading = true; |
| | | request({ |
| | | url: this.exportUrl.url, |
| | | method: "get", |
| | | params: { ...data }, |
| | | responseType: "arraybuffer", |
| | | }) |
| | | .then((res) => { |
| | | this.exportLoading = false; |
| | | downloadUrl.configDate2(res, this.exportUrl.name); |
| | | }) |
| | | .catch((err) => { |
| | | this.exportLoading = false; |
| | | }); |
| | | }else{ |
| | | this.exportOrderLoading = true; |
| | | request({ |
| | | url: this.exportOrderUrl.url, |
| | | method: "get", |
| | | params: {id:this.$route.query.id,...this.queryData}, |
| | | responseType: "arraybuffer", |
| | | }) |
| | | .then((res) => { |
| | | this.exportOrderLoading = false; |
| | | downloadUrl.configDate2(res, this.exportOrderUrl.name); |
| | | }) |
| | | .catch((err) => { |
| | | this.exportOrderLoading = false; |
| | | }); |
| | | } |
| | | |
| | | }, |
| | | selectHandle(row, rowIndex) { |
| | | // 通过true和false控制是否禁用,true: 不禁用,false:禁用 |
| | | // if (row.loanStatus == 2) { |
| | | // return false |
| | | // } else { |
| | | |
| | | // } |
| | | return true; |
| | | }, |
| | | select(selection, row) { |
| | | // 选中的selection,当前点击的 |
| | | this.$emit("singeSelect", selection, row); |
| | | }, |
| | | selectAll(e) { |
| | | // 有本页选中数据则返回本页选中数据,没有则返回当前页可以选中的数据 |
| | | let data = []; |
| | | if (e.length == 0) { |
| | | data = this.tableData |
| | | .map((row) => { |
| | | // if (row.loanStatus == 2) { |
| | | // return null; |
| | | // } else { |
| | | // return row.orderId; |
| | | // } |
| | | return row.id; |
| | | }) |
| | | .filter((m) => m); |
| | | } else { |
| | | data = e |
| | | .map((row) => { |
| | | return row.id; |
| | | }) |
| | | .filter((m) => m); |
| | | } |
| | | this.$emit("getSelectAll", data, e.length); |
| | | }, |
| | | unique(arr1) { |
| | | const res = new Map(); |
| | | return arr1.filter( |
| | | (item) => !res.has(item.prop) && res.set(item.prop, 1) |
| | | ); |
| | | }, |
| | | handleMouseEnter(row, column, cell, event) { |
| | | if (column.label && column.label.indexOf("MOB") >= 0) { |
| | | let currentRow = row.mobList.find((item) => { |
| | | return item.mobName == column.label; |
| | | }); |
| | | if (this.searchData.amtType && this.searchData.amtType == 1) { |
| | | this.tooltipContent = `订单剩余未还金额${currentRow.molecule}/放款金额${currentRow.denominator}`; |
| | | } else { |
| | | this.tooltipContent = `逾期订单数${currentRow.molecule}/在贷订单数${currentRow.denominator}`; |
| | | } |
| | | this.$refs["tooltip" + row.countDay][ |
| | | column.index - 1 |
| | | ].showPopper = true; |
| | | } |
| | | }, |
| | | cellClassName({ row, column, rowIndex, columnIndex }) { |
| | | row.index = rowIndex; |
| | | column.index = columnIndex; |
| | | }, |
| | | leave(row, column, cell) { |
| | | if (column.label && column.label.indexOf("MOB") >= 0) { |
| | | this.$refs["tooltip" + row.countDay][ |
| | | column.index - 1 |
| | | ].showPopper = false; |
| | | } |
| | | }, |
| | | }, |
| | | created() { |
| | | this.tableColumns = this.columns; |
| | | if (this.isHttp && this.isFind) { |
| | | // const storageData = JSON.parse(localStorage.getItem( this.httpUrl)) |
| | | // if (JSON.stringify(storageData) != 'null') { |
| | | // this.$emit('transfer',storageData) |
| | | // } |
| | | this.getData(); |
| | | } |
| | | }, |
| | | mounted() { |
| | | if (this.isHttp) { |
| | | this.postUrl = this.httpUrl; |
| | | } |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | .table_page { |
| | | box-sizing: border-box; |
| | | background-color: #fff; |
| | | .operate_btn { |
| | | margin-bottom: 12px; |
| | | } |
| | | .page_export { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | > div { |
| | | &:first-child { |
| | | > span { |
| | | display: inline-block; |
| | | color: #3c8efe; |
| | | font-size: 14px; |
| | | margin-right: 20px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | .el-table__header-wrapper .el-checkbox__input::after { |
| | | // content: '本页全选'; |
| | | // position: absolute; |
| | | // margin-left: 5px; |
| | | } |
| | | </style> |
New file |
| | |
| | | <!-- |
| | | * @Author: zxq |
| | | * @Date: 2022-01-05 18:44:53 |
| | | * @LastEditors: zhaoxiaoqiang 287285524@qq.com |
| | | * @LastEditTime: 2023-08-24 14:39:04 |
| | | * @Description: Description |
| | | * @FilePath: \qyp_finlean_plat\src\components\upload.vue |
| | | --> |
| | | <template> |
| | | <div style="width: 100%"> |
| | | <el-upload |
| | | action="#" |
| | | :limit="limit" |
| | | multiple |
| | | class="upload-demo" |
| | | :list-type="!isUploadOther?'picture-card':''" |
| | | :disabled="disabled" |
| | | :on-exceed="masterFileMax" |
| | | :before-upload="beforeAvatarUpload" |
| | | :http-request="uploadFileData" |
| | | :file-list="PicList" |
| | | :class="[uploadDisabled ? 'updispaly' : '']" |
| | | > |
| | | <el-button v-if="isUploadOther" size="small" icon="el-icon-plus" type="primary" >点击上传</el-button> |
| | | <i v-else slot="default" class="el-icon-plus"></i> |
| | | <div slot="file" slot-scope="{ file }"> |
| | | <template v-if="isUploadOther"> |
| | | <div class="pdf_style" v-if='file.url'> |
| | | <template |
| | | v-if=" |
| | | file.url |
| | | .substring(file.url.lastIndexOf('.')) |
| | | .split('.')[1] |
| | | .trim() != 'pdf' |
| | | " |
| | | > |
| | | <div :style="imgStyle" class="img_box"> |
| | | <img |
| | | class="el-upload-list__item-thumbnail" |
| | | :style="imgStyle" |
| | | :src="file.url" |
| | | alt="" |
| | | /> |
| | | <div class="el-upload-list__item-actions" :style="imgStyle"> |
| | | <span class="el-upload-list__item-preview"> |
| | | <i |
| | | class="el-icon-zoom-in" |
| | | style="color: #fff; font-size: 20px" |
| | | @click="handlePictureCardPreview(file)" |
| | | ></i> |
| | | <i |
| | | class="el-icon-delete" |
| | | style="color: #fff; font-size: 20px" |
| | | @click="handleRemoveLoanT(file)" |
| | | ></i> |
| | | </span> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <template v-else> |
| | | <div class="pdf_box"> |
| | | <span>{{ file.fileName }}</span> |
| | | <i |
| | | class="el-icon-delete delete_file" |
| | | style="color: #fff; font-size: 20px" |
| | | @click="handleRemoveLoanT(file)" |
| | | ></i> |
| | | </div> |
| | | </template> |
| | | </div> |
| | | </template> |
| | | <template v-else> |
| | | <img class="el-upload-list__item-thumbnail" :src="file.url" alt="" /> |
| | | <span class="el-upload-list__item-actions"> |
| | | <span class="el-upload-list__item-preview" @click="handlePictureCardPreview(file)"> |
| | | <i class="el-icon-zoom-in"></i> |
| | | </span> |
| | | <span v-if='!disabled' class="el-upload-list__item-delete" @click="handleRemoveLoanT(file)"> |
| | | <i class="el-icon-delete"></i> |
| | | </span> |
| | | </span> |
| | | </template> |
| | | </div> |
| | | </el-upload> |
| | | <el-dialog |
| | | title="查看图片" |
| | | :append-to-body="true" |
| | | top="0" |
| | | :visible.sync="imgVisible" |
| | | class="dialogImageUrlbox" |
| | | > |
| | | <img width="100%" :src="dialogImageUrl" alt="" /> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | <script> |
| | | import axios from "axios"; |
| | | import { uploadFile } from "@/api/user"; |
| | | import { imgShrink } from "@/utils/validate"; |
| | | import {showTipOfStatuCode} from '@/utils/statusCodeManage' |
| | | export default { |
| | | props: { |
| | | limit: { |
| | | type: Number | String, |
| | | default: "", |
| | | }, |
| | | disabled: { |
| | | type: Boolean, |
| | | default: false, |
| | | }, |
| | | defaultList: { |
| | | type: Array, |
| | | default: () => { |
| | | return []; |
| | | }, |
| | | }, |
| | | imgSize: { |
| | | type: Object, |
| | | default: () => { |
| | | return {}; |
| | | }, |
| | | }, |
| | | imgStyle: { |
| | | type: Object, |
| | | default: () => { |
| | | return { |
| | | width: "100px", |
| | | height: "100px", |
| | | }; |
| | | }, |
| | | }, |
| | | isUploadOther: { |
| | | type: Boolean, |
| | | default: false, |
| | | }, |
| | | }, |
| | | data() { |
| | | return { |
| | | PicList: [], |
| | | imgVisible: false, |
| | | dialogImageUrl: "", |
| | | uploadFileForm: { |
| | | suffix: "", |
| | | base64Data: "", |
| | | }, |
| | | uploadDisabled: false, |
| | | }; |
| | | }, |
| | | watch: { |
| | | defaultList: { |
| | | handler: function (val) { |
| | | this.PicList = val; |
| | | }, |
| | | deep: true, |
| | | }, |
| | | }, |
| | | methods: { |
| | | beforeAvatarUpload(file, type) { |
| | | var testmsg = !/\/(?:jpg|jpeg|png|pdf)/i.test(file.type); |
| | | const isLt5M = file.size / 1024 / 1024 < 100; |
| | | if (testmsg) { |
| | | this.$message.error("请检查文件格式"); |
| | | return false; |
| | | } |
| | | if (!isLt5M) { |
| | | this.$message.error("上传图片大小不能超过 100MB!"); |
| | | return false; |
| | | } |
| | | }, |
| | | uploadFileData(file, type) { |
| | | if(this.isUploadOther){ |
| | | var formData = new FormData(); //新建表单对象 |
| | | formData.append("file", file.file); //把文件对象添加到表单对象里 |
| | | formData.append("filename", file.file.name); //把文件名称添加到表单对象里 |
| | | axios.post("/sfPlat/pub/uploadLargeFile", formData).then(({ data }) => { |
| | | let { fileUrl, fileName, fileId } = data.body; |
| | | this.PicList.push({ |
| | | fileUrl: fileUrl, |
| | | fileName, |
| | | url: fileUrl, |
| | | fileId, |
| | | }); |
| | | this.$emit("sendList", this.PicList); |
| | | }) |
| | | .catch((err) => { |
| | | showTipOfStatuCode(err) |
| | | }); |
| | | }else{ |
| | | //上传图片 |
| | | const fileName = file.file.name; |
| | | this.uploadFileForm.suffix = fileName.substr(fileName.lastIndexOf(".") + 1, fileName.length); |
| | | imgShrink(file.file,this.imgSize.width,this.imgSize.height).then(resBase64 => { |
| | | this.uploadFileForm.base64Data = resBase64.split(",")[1]; |
| | | //直接拿到base64信息 |
| | | uploadFile(this.uploadFileForm).then(res => { |
| | | this.PicList.push({ |
| | | filePath: res.body.fileUrl, |
| | | fileName: fileName, |
| | | url: res.body.fileUrl, |
| | | fileId: res.body.fileId |
| | | }); |
| | | this.uploadDisabled = this.PicList.length >= 1 && this.limit==1 |
| | | this.$emit('sendList', this.PicList); |
| | | }); |
| | | }); |
| | | } |
| | | }, |
| | | handlePictureCardPreview(file) { |
| | | this.dialogImageUrl = file.url; |
| | | this.imgVisible = true; |
| | | }, |
| | | handleRemoveLoanT(file) { |
| | | const index = this.PicList.findIndex((item) => { |
| | | return item.fileId == file.fileId; |
| | | }); |
| | | this.PicList.splice(index, 1); |
| | | this.uploadDisabled = this.PicList.length >= 1 && this.limit == 1; |
| | | this.$emit("sendList", this.PicList); |
| | | }, |
| | | masterFileMax() { |
| | | this.$message.warning(`最多上传 ${this.limit} 个文件。`); |
| | | }, |
| | | }, |
| | | created() {}, |
| | | mounted() { |
| | | if (this.defaultList.length > 0) { |
| | | this.PicList = this.defaultList; |
| | | this.uploadDisabled = this.PicList.length >= 1 && this.limit == 1; |
| | | } |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | .updispaly { |
| | | .el-upload--picture-card { |
| | | display: none; |
| | | } |
| | | .el-upload { |
| | | width: 100% !important; |
| | | height: 100% !important; |
| | | } |
| | | .uplaod_img > .el-upload--picture-card { |
| | | width: 100% !important; |
| | | height: 100% !important; |
| | | } |
| | | } |
| | | .pdf_style{ |
| | | .img_box { |
| | | position: relative; |
| | | margin-right: 5px; |
| | | margin-bottom: 5px; |
| | | } |
| | | .el-upload-list__item { |
| | | width: inherit !important; |
| | | } |
| | | .el-upload-list__item-actions { |
| | | position: absolute !important; |
| | | top: 0 !important; |
| | | left: 0; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | opacity: 0; |
| | | background: rgba(0, 0, 0, 0.5); |
| | | } |
| | | |
| | | .img_box:hover .el-upload-list__item-actions { |
| | | opacity: 1; |
| | | } |
| | | .el-upload-list { |
| | | display: flex !important; |
| | | justify-content: flex-start !important; |
| | | align-items: center !important; |
| | | flex-wrap: wrap !important; |
| | | } |
| | | .pdf_box { |
| | | padding: 5px 0; |
| | | padding-right: 24px; |
| | | display: flex; |
| | | justify-content: flex-start; |
| | | align-items: center; |
| | | } |
| | | .delete_file { |
| | | display: inline-block; |
| | | margin-left: 12px; |
| | | opacity: 0; |
| | | } |
| | | .pdf_box:hover .delete_file { |
| | | opacity: 1; |
| | | color: #666 !important; |
| | | } |
| | | } |
| | | |
| | | </style> |
New file |
| | |
| | | <!-- |
| | | * @Author: zh |
| | | * @Date: 2022-01-05 18:44:53 |
| | | * @LastEditors: zxq |
| | | * @LastEditTime: 2022-04-08 15:01:23 |
| | | * @Description: Description |
| | | * @FilePath: \qyp-plat\src\components\uploadPdf.vue |
| | | --> |
| | | <template> |
| | | <div> |
| | | <el-upload action="#" :http-request="uploadFileData" :before-upload="beforeAvatarUpload" :file-list="fileList" :on-preview="openFile" :on-remove="removeFile"> |
| | | <el-button size="small" type="primary">点击上传</el-button> |
| | | <div slot="tip" class="el-upload__tip">只能上传pdf文件</div> |
| | | </el-upload> |
| | | <el-dialog title="查看批文" :visible.sync="imgVisible" class='dialogImageUrlbox' > |
| | | <el-button-group> |
| | | <el-button type="primary" icon="el-icon-arrow-left" size="mini" @click="prePage">上一页</el-button> |
| | | <el-button type="primary" size="mini" @click="nextPage">下一页<i class="el-icon-arrow-right el-icon--right"></i></el-button> |
| | | </el-button-group> |
| | | <div style="marginTop: 10px; color: #409EFF">{{ pageNum }} / {{ pageTotalNum }}</div> |
| | | <pdf :page="pageNum" :src="url" @progress="loadedRatio = $event" @num-pages="pageTotalNum=$event"></pdf> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import pdf from 'vue-pdf' |
| | | import { uploadFile } from "@/api/user"; |
| | | import { getBase64 } from "@/utils/validate"; |
| | | export default { |
| | | components: { |
| | | pdf, |
| | | }, |
| | | props: { |
| | | defaultList: { |
| | | type: Array, |
| | | default: () => { |
| | | return [] |
| | | } |
| | | }, |
| | | // isPrview:{ |
| | | // type: false, |
| | | // default: () => { |
| | | // return [] |
| | | // } |
| | | // } |
| | | }, |
| | | data() { |
| | | return { |
| | | url:'', |
| | | fileList: [], |
| | | imgVisible: false, |
| | | dialogImageUrl: '', |
| | | uploadFileForm: { |
| | | suffix: "", |
| | | base64Data: "" |
| | | }, |
| | | pageNum: 1, |
| | | pageTotalNum: 1, //总页数 |
| | | loadedRatio: 0, // 当前页面的加载进度,范围是0-1 ,等于1的时候代表当前页已经完全加载完成了 |
| | | }; |
| | | }, |
| | | watch: { |
| | | defaultList: { |
| | | handler: function (val) { |
| | | this.fileList = val; |
| | | }, |
| | | deep: true |
| | | } |
| | | }, |
| | | methods: { |
| | | // 上一页 |
| | | prePage() { |
| | | let page = this.pageNum |
| | | page = page > 1 ? page - 1 : this.pageTotalNum |
| | | this.pageNum = page |
| | | }, |
| | | // 下一页 |
| | | nextPage() { |
| | | let page = this.pageNum |
| | | page = page < this.pageTotalNum ? page + 1 : 1 |
| | | this.pageNum = page |
| | | }, |
| | | beforeAvatarUpload(file) { |
| | | if (file.type != 'application/pdf') { |
| | | this.$message.error("上传文件格式不对!"); |
| | | return false; |
| | | } |
| | | }, |
| | | uploadFileData(file) { |
| | | const fileName = file.file.name |
| | | this.uploadFileForm.suffix = fileName.substr(fileName.lastIndexOf(".") + 1, fileName.length) |
| | | getBase64(file.file).then(resBase64 => { |
| | | this.uploadFileForm.base64Data = resBase64.split(',')[1] |
| | | //直接拿到base64信息 |
| | | uploadFile(this.uploadFileForm).then(res => { |
| | | this.fileList.push({ |
| | | filePath: res.body.fileUrl, |
| | | fileName: fileName, |
| | | name:fileName, |
| | | uid: file.file.uid, |
| | | url: res.body.fileUrl, |
| | | fileId:res.body.fileId |
| | | }); |
| | | this.$emit('sendList', this.fileList); |
| | | }) |
| | | }) |
| | | }, |
| | | removeFile(file) { |
| | | const index = this.fileList.findIndex(item => { |
| | | return item.uid == file.uid; |
| | | }); |
| | | this.fileList.splice(index, 1); |
| | | this.$emit('sendList', this.fileList); |
| | | }, |
| | | openFile(file) { |
| | | const itemArr = this.fileList.find(item => { |
| | | return item.uid == file.uid; |
| | | }); |
| | | // const pdfUrl = process.env.NODE_ENV === 'development' ? 'https://t.finlean.com' : window.location.origin |
| | | this.url = itemArr.filePath |
| | | this.imgVisible=true |
| | | }, |
| | | }, |
| | | created() { |
| | | |
| | | }, |
| | | mounted() { |
| | | |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | </style> |
New file |
| | |
| | | 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) |
New file |
| | |
| | | <svg width="128" height="100" xmlns="http://www.w3.org/2000/svg"><path d="M27.429 63.638c0-2.508-.893-4.65-2.679-6.424-1.786-1.775-3.94-2.662-6.464-2.662-2.524 0-4.679.887-6.465 2.662-1.785 1.774-2.678 3.916-2.678 6.424 0 2.508.893 4.65 2.678 6.424 1.786 1.775 3.94 2.662 6.465 2.662 2.524 0 4.678-.887 6.464-2.662 1.786-1.775 2.679-3.916 2.679-6.424zm13.714-31.801c0-2.508-.893-4.65-2.679-6.424-1.785-1.775-3.94-2.662-6.464-2.662-2.524 0-4.679.887-6.464 2.662-1.786 1.774-2.679 3.916-2.679 6.424 0 2.508.893 4.65 2.679 6.424 1.785 1.774 3.94 2.662 6.464 2.662 2.524 0 4.679-.888 6.464-2.662 1.786-1.775 2.679-3.916 2.679-6.424zM71.714 65.98l7.215-27.116c.285-1.23.107-2.378-.536-3.443-.643-1.064-1.56-1.762-2.75-2.094-1.19-.33-2.333-.177-3.429.462-1.095.639-1.81 1.573-2.143 2.804l-7.214 27.116c-2.857.237-5.405 1.266-7.643 3.088-2.238 1.822-3.738 4.152-4.5 6.992-.952 3.644-.476 7.098 1.429 10.364 1.905 3.265 4.69 5.37 8.357 6.317 3.667.947 7.143.474 10.429-1.42 3.285-1.892 5.404-4.66 6.357-8.305.762-2.84.619-5.607-.429-8.305-1.047-2.697-2.762-4.85-5.143-6.46zm47.143-2.342c0-2.508-.893-4.65-2.678-6.424-1.786-1.775-3.94-2.662-6.465-2.662-2.524 0-4.678.887-6.464 2.662-1.786 1.774-2.679 3.916-2.679 6.424 0 2.508.893 4.65 2.679 6.424 1.786 1.775 3.94 2.662 6.464 2.662 2.524 0 4.679-.887 6.465-2.662 1.785-1.775 2.678-3.916 2.678-6.424zm-45.714-45.43c0-2.509-.893-4.65-2.679-6.425C68.68 10.01 66.524 9.122 64 9.122c-2.524 0-4.679.887-6.464 2.661-1.786 1.775-2.679 3.916-2.679 6.425 0 2.508.893 4.65 2.679 6.424 1.785 1.774 3.94 2.662 6.464 2.662 2.524 0 4.679-.888 6.464-2.662 1.786-1.775 2.679-3.916 2.679-6.424zm32 13.629c0-2.508-.893-4.65-2.679-6.424-1.785-1.775-3.94-2.662-6.464-2.662-2.524 0-4.679.887-6.464 2.662-1.786 1.774-2.679 3.916-2.679 6.424 0 2.508.893 4.65 2.679 6.424 1.785 1.774 3.94 2.662 6.464 2.662 2.524 0 4.679-.888 6.464-2.662 1.786-1.775 2.679-3.916 2.679-6.424zM128 63.638c0 12.351-3.357 23.78-10.071 34.286-.905 1.372-2.19 2.058-3.858 2.058H13.93c-1.667 0-2.953-.686-3.858-2.058C3.357 87.465 0 76.037 0 63.638c0-8.613 1.69-16.847 5.071-24.703C8.452 31.08 13 24.312 18.714 18.634c5.715-5.68 12.524-10.199 20.429-13.559C47.048 1.715 55.333.035 64 .035c8.667 0 16.952 1.68 24.857 5.04 7.905 3.36 14.714 7.88 20.429 13.559 5.714 5.678 10.262 12.446 13.643 20.301 3.38 7.856 5.071 16.09 5.071 24.703z"/></svg> |
New file |
| | |
| | | <svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M96.258 57.462h31.421C124.794 27.323 100.426 2.956 70.287.07v31.422a32.856 32.856 0 0 1 25.971 25.97zm-38.796-25.97V.07C27.323 2.956 2.956 27.323.07 57.462h31.422a32.856 32.856 0 0 1 25.97-25.97zm12.825 64.766v31.421c30.46-2.885 54.507-27.253 57.713-57.712H96.579c-2.886 13.466-13.146 23.726-26.292 26.291zM31.492 70.287H.07c2.886 30.46 27.253 54.507 57.713 57.713V96.579c-13.466-2.886-23.726-13.146-26.291-26.292z"/></svg> |
New file |
| | |
| | | <svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="128" height="128"><defs><style/></defs><path d="M512 128q69.675 0 135.51 21.163t115.498 54.997 93.483 74.837 73.685 82.006 51.67 74.837 32.17 54.827L1024 512q-2.347 4.992-6.315 13.483T998.87 560.17t-31.658 51.669-44.331 59.99-56.832 64.34-69.504 60.16-82.347 51.5-94.848 34.687T512 896q-69.675 0-135.51-21.163t-115.498-54.826-93.483-74.326-73.685-81.493-51.67-74.496-32.17-54.997L0 513.707q2.347-4.992 6.315-13.483t18.816-34.816 31.658-51.84 44.331-60.33 56.832-64.683 69.504-60.331 82.347-51.84 94.848-34.816T512 128.085zm0 85.333q-46.677 0-91.648 12.331t-81.152 31.83-70.656 47.146-59.648 54.485-48.853 57.686-37.675 52.821-26.325 43.99q12.33 21.674 26.325 43.52t37.675 52.351 48.853 57.003 59.648 53.845T339.2 767.02t81.152 31.488T512 810.667t91.648-12.331 81.152-31.659 70.656-46.848 59.648-54.186 48.853-57.344 37.675-52.651T927.957 512q-12.33-21.675-26.325-43.648t-37.675-52.65-48.853-57.345-59.648-54.186-70.656-46.848-81.152-31.659T512 213.334zm0 128q70.656 0 120.661 50.006T682.667 512 632.66 632.661 512 682.667 391.339 632.66 341.333 512t50.006-120.661T512 341.333zm0 85.334q-35.328 0-60.33 25.002T426.666 512t25.002 60.33T512 597.334t60.33-25.002T597.334 512t-25.002-60.33T512 426.666z"/></svg> |
New file |
| | |
| | | <svg width="128" height="64" xmlns="http://www.w3.org/2000/svg"><path d="M127.072 7.994c1.37-2.208.914-5.152-.914-6.87-2.056-1.717-4.797-1.226-6.396.982-.229.245-25.586 32.382-55.74 32.382-29.24 0-55.74-32.382-55.968-32.627-1.6-1.963-4.57-2.208-6.397-.49C-.17 3.086-.399 6.275 1.2 8.238c.457.736 5.94 7.36 14.62 14.72L4.17 35.96c-1.828 1.963-1.6 5.152.228 6.87.457.98 1.6 1.471 2.742 1.471s2.284-.49 3.198-1.472l12.564-13.983c5.94 4.416 13.021 8.587 20.788 11.53l-4.797 17.418c-.685 2.699.686 5.397 3.198 6.133h1.37c2.057 0 3.884-1.472 4.341-3.68L52.6 42.83c3.655.736 7.538 1.227 11.422 1.227 3.883 0 7.767-.49 11.422-1.227l4.797 17.173c.457 2.208 2.513 3.68 4.34 3.68.457 0 .914 0 1.143-.246 2.513-.736 3.883-3.434 3.198-6.133l-4.797-17.172c7.767-2.944 14.848-7.114 20.788-11.53l12.336 13.738c.913.981 2.056 1.472 3.198 1.472s2.284-.49 3.198-1.472c1.828-1.963 1.828-4.906.228-6.87l-11.65-13.001c9.366-7.36 14.849-14.474 14.849-14.474z"/></svg> |
New file |
| | |
| | | <svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M84.068 23.784c-1.02 0-1.877-.32-2.572-.96a8.588 8.588 0 0 1-1.738-2.237 11.524 11.524 0 0 1-1.042-2.621c-.232-.895-.348-1.641-.348-2.238V0h.278c.834 0 1.622.085 2.363.256.742.17 1.645.575 2.711 1.214 1.066.64 2.363 1.535 3.892 2.686 1.53 1.15 3.453 2.664 5.77 4.54 2.502 2.045 4.494 3.771 5.977 5.178 1.483 1.406 2.618 2.6 3.406 3.58.787.98 1.274 1.812 1.46 2.494.185.682.277 1.278.277 1.79v2.046H84.068zM127.3 84.01c.278.682.464 1.535.556 2.558.093 1.023-.37 2.003-1.39 2.94-.463.427-.88.832-1.25 1.215-.372.384-.696.704-.974.96a6.69 6.69 0 0 1-.973.767l-11.816-10.741a44.331 44.331 0 0 0 1.877-1.535 31.028 31.028 0 0 1 1.737-1.406c1.112-.938 2.317-1.343 3.615-1.215 1.297.128 2.363.405 3.197.83.927.427 1.923 1.173 2.989 2.239 1.065 1.065 1.876 2.195 2.432 3.388zM78.23 95.902c2.038 0 3.752-.511 5.143-1.534l-26.969 25.83H18.037c-1.761 0-3.684-.47-5.77-1.407a24.549 24.549 0 0 1-5.838-3.709 21.373 21.373 0 0 1-4.518-5.306c-1.204-2.003-1.807-4.07-1.807-6.202V16.495c0-1.79.44-3.665 1.32-5.626A18.41 18.41 0 0 1 5.04 5.562a21.798 21.798 0 0 1 5.213-3.964C12.198.533 14.237 0 16.37 0h53.24v15.984c0 1.62.278 3.367.834 5.242a16.704 16.704 0 0 0 2.572 5.179c1.159 1.577 2.665 2.898 4.518 3.964 1.853 1.066 4.078 1.598 6.673 1.598h20.295v42.325L85.458 92.45c1.02-1.364 1.529-2.856 1.529-4.476 0-2.216-.857-4.113-2.572-5.69-1.714-1.577-3.776-2.366-6.186-2.366H26.1c-2.409 0-4.448.789-6.116 2.366-1.668 1.577-2.502 3.474-2.502 5.69 0 2.217.834 4.092 2.502 5.626 1.668 1.535 3.707 2.302 6.117 2.302h52.13zM26.1 47.951c-2.41 0-4.449.789-6.117 2.366-1.668 1.577-2.502 3.473-2.502 5.69 0 2.216.834 4.092 2.502 5.626 1.668 1.534 3.707 2.302 6.117 2.302h52.13c2.409 0 4.47-.768 6.185-2.302 1.715-1.534 2.572-3.41 2.572-5.626 0-2.217-.857-4.113-2.572-5.69-1.714-1.577-3.776-2.366-6.186-2.366H26.1zm52.407 64.063l1.807-1.663 3.476-3.196a479.75 479.75 0 0 0 4.587-4.284 500.757 500.757 0 0 1 5.004-4.667c3.985-3.666 8.48-7.758 13.485-12.276l11.677 10.741-13.485 12.404-5.004 4.603-4.587 4.22a179.46 179.46 0 0 0-3.267 3.068c-.88.853-1.367 1.322-1.46 1.407-.463.341-.973.703-1.529 1.087-.556.383-1.112.703-1.668.959-.556.256-1.413.575-2.572.959a83.5 83.5 0 0 1-3.545 1.087 72.2 72.2 0 0 1-3.475.895c-1.112.256-1.946.426-2.502.511-1.112.17-1.854.043-2.224-.383-.371-.426-.464-1.151-.278-2.174.092-.511.278-1.279.556-2.302.278-1.023.602-2.067.973-3.132l1.042-3.005c.325-.938.58-1.577.765-1.918a10.157 10.157 0 0 1 2.224-2.941z"/></svg> |
New file |
| | |
| | | <svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M115.625 127.937H.063V12.375h57.781v12.374H12.438v90.813h90.813V70.156h12.374z"/><path d="M116.426 2.821l8.753 8.753-56.734 56.734-8.753-8.745z"/><path d="M127.893 37.982h-12.375V12.375H88.706V0h39.187z"/></svg> |
New file |
| | |
| | | <svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M.002 9.2c0 5.044 3.58 9.133 7.998 9.133 4.417 0 7.997-4.089 7.997-9.133 0-5.043-3.58-9.132-7.997-9.132S.002 4.157.002 9.2zM31.997.066h95.981V18.33H31.997V.066zm0 45.669c0 5.044 3.58 9.132 7.998 9.132 4.417 0 7.997-4.088 7.997-9.132 0-3.263-1.524-6.278-3.998-7.91-2.475-1.63-5.524-1.63-7.998 0-2.475 1.632-4 4.647-4 7.91zM63.992 36.6h63.986v18.265H63.992V36.6zm-31.995 82.2c0 5.043 3.58 9.132 7.998 9.132 4.417 0 7.997-4.089 7.997-9.132 0-5.044-3.58-9.133-7.997-9.133s-7.998 4.089-7.998 9.133zm31.995-9.131h63.986v18.265H63.992V109.67zm0-27.404c0 5.044 3.58 9.133 7.998 9.133 4.417 0 7.997-4.089 7.997-9.133 0-3.263-1.524-6.277-3.998-7.909-2.475-1.631-5.524-1.631-7.998 0-2.475 1.632-4 4.646-4 7.91zm31.995-9.13h31.991V91.4H95.987V73.135z"/></svg> |
New file |
| | |
| | | <svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M108.8 44.322H89.6v-5.36c0-9.04-3.308-24.163-25.6-24.163-23.145 0-25.6 16.881-25.6 24.162v5.361H19.2v-5.36C19.2 15.281 36.798 0 64 0c27.202 0 44.8 15.281 44.8 38.961v5.361zm-32 39.356c0-5.44-5.763-9.832-12.8-9.832-7.037 0-12.8 4.392-12.8 9.832 0 3.682 2.567 6.808 6.407 8.477v11.205c0 2.718 2.875 4.962 6.4 4.962 3.524 0 6.4-2.244 6.4-4.962V92.155c3.833-1.669 6.393-4.795 6.393-8.477zM128 64v49.201c0 8.158-8.645 14.799-19.2 14.799H19.2C8.651 128 0 121.359 0 113.201V64c0-8.153 8.645-14.799 19.2-14.799h89.6c10.555 0 19.2 6.646 19.2 14.799z"/></svg> |
New file |
| | |
| | | <svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M.006.064h127.988v31.104H.006V.064zm0 38.016h38.396v41.472H.006V38.08zm0 48.384h38.396v41.472H.006V86.464zM44.802 38.08h38.396v41.472H44.802V38.08zm0 48.384h38.396v41.472H44.802V86.464zM89.598 38.08h38.396v41.472H89.598zm0 48.384h38.396v41.472H89.598z"/><path d="M.006.064h127.988v31.104H.006V.064zm0 38.016h38.396v41.472H.006V38.08zm0 48.384h38.396v41.472H.006V86.464zM44.802 38.08h38.396v41.472H44.802V38.08zm0 48.384h38.396v41.472H44.802V86.464zM89.598 38.08h38.396v41.472H89.598zm0 48.384h38.396v41.472H89.598z"/></svg> |
New file |
| | |
| | | <svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M126.713 90.023c.858.985 1.287 2.134 1.287 3.447v29.553c0 1.423-.429 2.6-1.287 3.53-.858.93-1.907 1.395-3.146 1.395H97.824c-1.145 0-2.146-.465-3.004-1.395-.858-.93-1.287-2.107-1.287-3.53V93.47c0-.875.19-1.696.572-2.462.382-.766.906-1.368 1.573-1.806a3.84 3.84 0 0 1 2.146-.657h9.725V69.007a3.84 3.84 0 0 0-.43-1.806 3.569 3.569 0 0 0-1.143-1.313 2.714 2.714 0 0 0-1.573-.492h-36.47v23.149h9.725c1.144 0 2.145.492 3.004 1.478.858.985 1.287 2.134 1.287 3.447v29.553c0 .876-.191 1.696-.573 2.463-.38.766-.905 1.368-1.573 1.806a3.84 3.84 0 0 1-2.145.656H51.915a3.84 3.84 0 0 1-2.145-.656c-.668-.438-1.216-1.04-1.645-1.806a4.96 4.96 0 0 1-.644-2.463V93.47c0-1.313.43-2.462 1.288-3.447.858-.986 1.907-1.478 3.146-1.478h9.582v-23.15h-37.9c-.953 0-1.74.356-2.359 1.068-.62.711-.93 1.56-.93 2.544v19.538h9.726c1.239 0 2.264.492 3.074 1.478.81.985 1.216 2.134 1.216 3.447v29.553c0 1.423-.405 2.6-1.216 3.53-.81.93-1.835 1.395-3.074 1.395H4.29c-.476 0-.93-.082-1.358-.246a4.1 4.1 0 0 1-1.144-.657 4.658 4.658 0 0 1-.93-1.067 5.186 5.186 0 0 1-.643-1.395 5.566 5.566 0 0 1-.215-1.56V93.47c0-.437.048-.875.143-1.313a3.95 3.95 0 0 1 .429-1.15c.19-.328.429-.656.715-.984.286-.329.572-.602.858-.821.286-.22.62-.383 1.001-.493.382-.11.763-.164 1.144-.164h9.726V61.619c0-.985.31-1.833.93-2.544.619-.712 1.358-1.068 2.216-1.068h44.335V39.62h-9.582c-1.24 0-2.288-.492-3.146-1.477a5.09 5.09 0 0 1-1.287-3.448V5.14c0-1.423.429-2.627 1.287-3.612.858-.985 1.907-1.477 3.146-1.477h25.743c.763 0 1.478.246 2.145.739a5.17 5.17 0 0 1 1.573 1.888c.382.766.573 1.587.573 2.462v29.553c0 1.313-.43 2.463-1.287 3.448-.859.985-1.86 1.477-3.004 1.477h-9.725v18.389h42.762c.954 0 1.74.355 2.36 1.067.62.711.93 1.56.93 2.545v26.925h9.582c1.239 0 2.288.492 3.146 1.478z"/></svg> |
New file |
| | |
| | | <svg width="130" height="130" xmlns="http://www.w3.org/2000/svg"><path d="M63.444 64.996c20.633 0 37.359-14.308 37.359-31.953 0-17.649-16.726-31.952-37.359-31.952-20.631 0-37.36 14.303-37.358 31.952 0 17.645 16.727 31.953 37.359 31.953zM80.57 75.65H49.434c-26.652 0-48.26 18.477-48.26 41.27v2.664c0 9.316 21.608 9.325 48.26 9.325H80.57c26.649 0 48.256-.344 48.256-9.325v-2.663c0-22.794-21.605-41.271-48.256-41.271z" stroke="#979797"/></svg> |
New file |
| | |
| | | # 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' |
New file |
| | |
| | | <!-- |
| | | * @Author: your name |
| | | * @Date: 2021-09-13 14:28:39 |
| | | * @LastEditTime: 2023-05-04 17:13:46 |
| | | * @LastEditors: zxq |
| | | * @Description: In User Settings Edit |
| | | * @FilePath: \qyp_finlean_plat\src\layout\components\AppMain.vue |
| | | --> |
| | | <template> |
| | | <section :class="key=='/'?'set-app-main':'app-main'"> |
| | | <transition name="fade-transform" mode="out-in"> |
| | | <keep-alive :include="cachedViews"> |
| | | <router-view :key="key" /> |
| | | </keep-alive> |
| | | </transition> |
| | | </section> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: 'AppMain', |
| | | computed: { |
| | | cachedViews() { |
| | | return this.$store.state.tagsView.cachedViews |
| | | }, |
| | | key() { |
| | | return this.$route.path |
| | | } |
| | | }, |
| | | watch:{ |
| | | |
| | | }, |
| | | created(){ |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .app-main { |
| | | height: calc(100vh - 50px); |
| | | padding: 16px; |
| | | box-sizing: border-box; |
| | | width: 100%; |
| | | position: relative; |
| | | overflow-y:scroll; |
| | | position: relative; |
| | | } |
| | | .set-app-main { |
| | | height: calc(100vh - 50px); |
| | | padding: 0px; |
| | | box-sizing: border-box; |
| | | width: 100%; |
| | | position: relative; |
| | | overflow-y:hidden; |
| | | position: relative; |
| | | } |
| | | .app-footer{ |
| | | height: 72px; |
| | | width: 100%; |
| | | position: absolute; |
| | | /* bottom: 0; */ |
| | | left: 0; |
| | | background-color: #fff; |
| | | } |
| | | .fixed-header+.app-main { |
| | | padding-top: 50px; |
| | | } |
| | | |
| | | .hasTagsView { |
| | | .app-main { |
| | | /* 84 = navbar + tags-view = 50 + 34 */ |
| | | min-height: calc(100vh - 84px); |
| | | } |
| | | |
| | | .fixed-header+.app-main { |
| | | padding-top: 84px; |
| | | } |
| | | } |
| | | </style> |
| | | |
| | | <style lang="scss"> |
| | | .el-popup-parent--hidden { |
| | | .fixed-header { |
| | | padding-right: 15px; |
| | | } |
| | | } |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <div class="navbar"> |
| | | <hamburger :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" /> |
| | | <breadcrumb class="breadcrumb-container" /> |
| | | <div class="right-menu"> |
| | | <el-dropdown class="avatar-container" trigger="click"> |
| | | <div class="avatar-wrapper"> |
| | | <!-- <img :src="avatar+'?imageView2/1/w/80/h/80'" class="user-avatar"> --> |
| | | {{$store.state.user.name + '(' + $store.state.user.roleName +')'}} |
| | | <i class="el-icon-caret-bottom" /> |
| | | </div> |
| | | <el-dropdown-menu slot="dropdown" class="user-dropdown"> |
| | | <!-- <router-link to="/"> |
| | | <el-dropdown-item> |
| | | 订单管理 |
| | | </el-dropdown-item> |
| | | </router-link> --> |
| | | <el-dropdown-item divided @click.native="myInfo"> |
| | | <span style="display:block;">修改密码</span> |
| | | </el-dropdown-item> |
| | | <el-dropdown-item divided @click.native="logout"> |
| | | <span style="display:block;">退出</span> |
| | | </el-dropdown-item> |
| | | </el-dropdown-menu> |
| | | </el-dropdown> |
| | | </div> |
| | | <el-dialog title="修改密码" :visible.sync="dialogVisible" width="400px" :before-close="handleClose"> |
| | | <el-form ref="resetPasswForm" :model="resetPasswForm" :rules="resetPasswRules" class="login-form" auto-complete="on" label-position="left"> |
| | | <div class="login-cont1"> |
| | | <el-form-item prop="oldPwd"> |
| | | <el-input placeholder="请输入旧密码" v-model.trim="resetPasswForm.oldPwd" show-password auto-complete="new-password"></el-input> |
| | | </el-form-item> |
| | | <el-form-item prop="newPwd"> |
| | | <el-input placeholder="请输入6~16位新密码" v-model.trim="resetPasswForm.newPwd" show-password auto-complete="new-password"></el-input> |
| | | </el-form-item> |
| | | <el-form-item prop="confirmPwd"> |
| | | <el-input placeholder="请再次输入新密码" v-model.trim="resetPasswForm.confirmPwd" show-password auto-complete="new-password"></el-input> |
| | | </el-form-item> |
| | | <el-button :loading="loading" type="primary" style="width:100%;margin-bottom:30px;" @click.native.prevent="resetPwdBtn">重置密码</el-button> |
| | | </div> |
| | | </el-form> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { mapGetters } from 'vuex' |
| | | import Breadcrumb from '@/components/Breadcrumb' |
| | | import Hamburger from '@/components/Hamburger' |
| | | import { updatePwd } from '@/api/user' |
| | | |
| | | import md5 from 'js-md5'; |
| | | export default { |
| | | components: { |
| | | Breadcrumb, |
| | | Hamburger |
| | | }, |
| | | computed: { |
| | | ...mapGetters([ |
| | | 'sidebar', |
| | | 'avatar', |
| | | 'userId' |
| | | ]) |
| | | }, |
| | | data() { |
| | | var validatePass = (rule, value, callback) => { |
| | | if (value === '') { |
| | | callback(new Error('请输入密码')); |
| | | } else { |
| | | if (this.resetPasswForm.newPwd !== '') { |
| | | this.$refs.resetPasswForm.validateField('confirmPwd'); |
| | | } |
| | | callback(); |
| | | } |
| | | }; |
| | | var validatePass2 = (rule, value, callback) => { |
| | | if (value === '') { |
| | | callback(new Error('请再次输入密码')); |
| | | } else if (value !== this.resetPasswForm.newPwd) { |
| | | callback(new Error('两次输入密码不一致!')); |
| | | } else { |
| | | callback(); |
| | | } |
| | | }; |
| | | return { |
| | | dialogVisible: false, |
| | | resetPasswForm: { |
| | | confirmPwd: '', |
| | | newPwd: '', |
| | | oldPwd: '' |
| | | }, |
| | | loading: false, |
| | | resetPasswRules: { |
| | | oldPwd: [ |
| | | { required: true, message: '请输入旧密码', trigger: 'blur' } |
| | | ], |
| | | newPwd: [ |
| | | { required: true, message: '请输入新密码', trigger: 'blur' }, |
| | | { min: 6, max: 20, message: '长度6至20个字符', trigger: 'blur' }, |
| | | { validator: validatePass, trigger: 'blur' } |
| | | ], |
| | | confirmPwd: [ |
| | | { required: true, message: '请再次确认密码', trigger: 'blur' }, |
| | | { min: 6, max: 20, message: '长度6至20个字符', trigger: 'blur' }, |
| | | { validator: validatePass2, trigger: 'blur', required: true } |
| | | ] |
| | | }, |
| | | } |
| | | }, |
| | | methods: { |
| | | toggleSideBar() { |
| | | this.$store.dispatch('app/toggleSideBar') |
| | | }, |
| | | logout() { |
| | | this.$confirm('确认退出当前账号?', '提示', { |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.$store.dispatch('user/logout').then(() => { |
| | | this.$store.dispatch('tagsView/delAllViews',[])//清除tagViews |
| | | this.$router.push(`/login`) |
| | | }) |
| | | }) |
| | | |
| | | }, |
| | | myInfo() { |
| | | this.dialogVisible = true |
| | | }, |
| | | handleClose() { |
| | | this.$refs.resetPasswForm.resetFields(); |
| | | this.dialogVisible = false |
| | | }, |
| | | resetPwdBtn() { |
| | | this.$refs.resetPasswForm.validate(valid => { |
| | | if (!valid) return this.$message.error('数据填写有误,请检查!'); |
| | | var newPasData = {} |
| | | newPasData.newPwd = md5(this.avatar + this.resetPasswForm.newPwd) |
| | | newPasData.oldPwd = md5(this.avatar + this.resetPasswForm.oldPwd) |
| | | newPasData.confirmPwd = md5(this.avatar + this.resetPasswForm.confirmPwd) |
| | | newPasData.id = this.userId; |
| | | updatePwd(newPasData).then(res => { |
| | | this.$message.success('密码修改成功!'); |
| | | this.$refs.resetPasswForm.resetFields(); |
| | | this.dialogVisible = false |
| | | this.$store.dispatch('user/logout').then(() => { |
| | | this.$router.push(`/login?redirect=${this.$route.fullPath}`) |
| | | }) |
| | | }) |
| | | }) |
| | | }, |
| | | changAttr(e, type) { |
| | | if (type === 'focus') { |
| | | if (e) { |
| | | e.stopPropagation(); |
| | | e.preventDefault(); |
| | | } |
| | | setTimeout(() => { |
| | | this.readonly = false; |
| | | }, 100); |
| | | } else { |
| | | if (e) { |
| | | e.stopPropagation(); |
| | | } |
| | | this.readonly = true; |
| | | } |
| | | }, |
| | | clickEvt() { |
| | | if (this.$refs.password) { |
| | | this.$refs.password.$refs.input.onmousedown = (evt) => { |
| | | if (evt) { |
| | | evt.preventDefault(); |
| | | evt.stopPropagation(); |
| | | } |
| | | if (this.ruleForm.password === '' || this.readonly) { |
| | | this.$refs.password.$refs.input.blur(); |
| | | setTimeout(() => { |
| | | this.$refs.password.$refs.input.focus(); |
| | | }, 0); |
| | | } |
| | | return false; |
| | | }; |
| | | } |
| | | }, |
| | | }, |
| | | created() { |
| | | |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | $bg: #2d3a4b; |
| | | $dark_gray: #889aa4; |
| | | $light_gray: #eee; |
| | | .navbar { |
| | | height: 50px; |
| | | overflow: hidden; |
| | | position: relative; |
| | | background: #fff; |
| | | box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08); |
| | | |
| | | .hamburger-container { |
| | | line-height: 46px; |
| | | height: 100%; |
| | | float: left; |
| | | cursor: pointer; |
| | | transition: background 0.3s; |
| | | -webkit-tap-highlight-color: transparent; |
| | | |
| | | &:hover { |
| | | background: rgba(0, 0, 0, 0.025); |
| | | } |
| | | } |
| | | |
| | | .breadcrumb-container { |
| | | float: left; |
| | | } |
| | | |
| | | .right-menu { |
| | | float: right; |
| | | height: 100%; |
| | | line-height: 50px; |
| | | |
| | | &:focus { |
| | | outline: none; |
| | | } |
| | | |
| | | .right-menu-item { |
| | | display: inline-block; |
| | | padding: 0 8px; |
| | | height: 100%; |
| | | font-size: 18px; |
| | | color: #5a5e66; |
| | | vertical-align: text-bottom; |
| | | |
| | | &.hover-effect { |
| | | cursor: pointer; |
| | | transition: background 0.3s; |
| | | |
| | | &:hover { |
| | | background: rgba(0, 0, 0, 0.025); |
| | | } |
| | | } |
| | | } |
| | | |
| | | .avatar-container { |
| | | margin-right: 16px; |
| | | cursor: pointer; |
| | | -webkit-user-select: none; /*WebKit内核私有属性*/ |
| | | -moz-user-select: none; /*Firefox私有属性*/ |
| | | -ms-user-select: none; /*IE私有属性(IE10及以后)*/ |
| | | -khtml-user-select: none; /*KHTML内核私有属性*/ |
| | | -o-user-select: none; /*Opera私有属性*/ |
| | | user-select: none; /*CSS3属性*/ |
| | | .avatar-wrapper { |
| | | position: relative; |
| | | .user-avatar { |
| | | width: 40px; |
| | | height: 40px; |
| | | border-radius: 10px; |
| | | } |
| | | |
| | | .el-icon-caret-bottom { |
| | | cursor: pointer; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | /* reset element-ui css */ |
| | | .login-container { |
| | | .el-input { |
| | | display: inline-block; |
| | | // height: 47px; |
| | | width: 85%; |
| | | input { |
| | | background: transparent; |
| | | border: 0px; |
| | | -webkit-appearance: none; |
| | | border-radius: 0px; |
| | | padding: 12px 5px 12px 15px; |
| | | // color: $light_gray; |
| | | height: 47px; |
| | | // &:-webkit-autofill { |
| | | // box-shadow: 0 0 0px 1000px $cursor inset !important; |
| | | // // -webkit-text-fill-color: $cursor !important; |
| | | // } |
| | | } |
| | | } |
| | | .el-form { |
| | | width: 20%; |
| | | height: 440px; |
| | | background: #ffffff; |
| | | box-shadow: 0px 26px 50px 0px rgba(68, 145, 251, 0.24); |
| | | border-radius: 8px; |
| | | } |
| | | .el-form-item { |
| | | border: 1px solid rgba(255, 255, 255, 0.1); |
| | | border-radius: 5px; |
| | | color: #454545; |
| | | border: solid 1px #eee; |
| | | } |
| | | .login-cont { |
| | | width: 70%; |
| | | margin-top: 100px; |
| | | } |
| | | .login-cont1 { |
| | | width: 80%; |
| | | // margin-top: 100px; |
| | | } |
| | | } |
| | | </style> |
New file |
| | |
| | | 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 |
| | | // https://github.com/PanJiaChen/vue-element-admin/issues/1135 |
| | | 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) |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | <!-- |
| | | * @Author: your name |
| | | * @Date: 2021-09-13 14:28:39 |
| | | * @LastEditTime: 2021-09-24 17:15:01 |
| | | * @LastEditors: your name |
| | | * @Description: In User Settings Edit |
| | | * @FilePath: \cw_plat\src\layout\components\Sidebar\Item.vue |
| | | --> |
| | | <script> |
| | | export default { |
| | | name: 'MenuItem', |
| | | functional: true, |
| | | props: { |
| | | icon: { |
| | | type: String, |
| | | default: '' |
| | | }, |
| | | title: { |
| | | type: String, |
| | | default: '' |
| | | } |
| | | }, |
| | | render(h, context) { |
| | | const { icon, title } = context.props |
| | | const vnodes = [] |
| | | if (icon) { |
| | | if (icon.includes('el-icon')) { |
| | | vnodes.push(<i class={[icon, 'sub-el-icon']} />) |
| | | } else { |
| | | vnodes.push(<i class={[icon,'iconfont sub-el-icon']}></i>) |
| | | // vnodes.push(<i class={[icon, 'sub-el-icon']} />) |
| | | } |
| | | } |
| | | |
| | | if (title) { |
| | | vnodes.push(<span slot='title'>{(title)}</span>) |
| | | } |
| | | return vnodes |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .sub-el-icon { |
| | | color: currentColor; |
| | | width: 1em; |
| | | height: 1em; |
| | | } |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <component :is="type" v-bind="linkProps(to)"> |
| | | <slot /> |
| | | </component> |
| | | </template> |
| | | |
| | | <script> |
| | | import { isExternal } from '@/utils/validate' |
| | | |
| | | export default { |
| | | props: { |
| | | to: { |
| | | type: String, |
| | | required: true |
| | | } |
| | | }, |
| | | computed: { |
| | | isExternal() { |
| | | return isExternal(this.to) |
| | | }, |
| | | type() { |
| | | if (this.isExternal) { |
| | | return 'a' |
| | | } |
| | | return 'router-link' |
| | | } |
| | | }, |
| | | methods: { |
| | | linkProps(to) { |
| | | if (this.isExternal) { |
| | | return { |
| | | href: to, |
| | | target: '_blank', |
| | | rel: 'noopener' |
| | | } |
| | | } |
| | | return { |
| | | to: to |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </script> |
New file |
| | |
| | | <!-- |
| | | * @Author: your name |
| | | * @Date: 2021-09-13 14:28:39 |
| | | * @LastEditTime: 2023-04-21 11:40:40 |
| | | * @LastEditors: zxq |
| | | * @Description: In User Settings Edit |
| | | * @FilePath: \qyp_finlean_plat\src\layout\components\Sidebar\Logo.vue |
| | | --> |
| | | <template> |
| | | <div class="sidebar-logo-container" :class="{'collapse':collapse}"> |
| | | <transition name="sidebarLogoFade"> |
| | | <div v-if="collapse" key="collapse" class="sidebar-logo-link"> |
| | | <img :src="require('../../../assets/img/title.png')" class="sidebar-logo"> |
| | | <!-- <h1 class="sidebar-title">{{ title }} </h1> --> |
| | | </div> |
| | | <div v-else key="expand" class="sidebar-logo-link"> |
| | | <img :src="require('../../../assets/img/title.png')" class="sidebar-logo"> |
| | | <!-- <h1 class="sidebar-title">{{ title }} </h1> --> |
| | | </div> |
| | | </transition> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: 'SidebarLogo', |
| | | props: { |
| | | collapse: { |
| | | type: Boolean, |
| | | required: true |
| | | } |
| | | }, |
| | | data() { |
| | | return { |
| | | title: '权益品后台管理', |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .sidebarLogoFade-enter-active { |
| | | transition: opacity 1.5s; |
| | | } |
| | | |
| | | .sidebarLogoFade-enter, |
| | | .sidebarLogoFade-leave-to { |
| | | opacity: 0; |
| | | } |
| | | |
| | | .sidebar-logo-container { |
| | | position: relative; |
| | | width: 100%; |
| | | height: 50px; |
| | | line-height: 50px; |
| | | background:#304156; |
| | | text-align: center; |
| | | overflow: hidden; |
| | | |
| | | & .sidebar-logo-link { |
| | | height: 100%; |
| | | width: 100%; |
| | | |
| | | & .sidebar-logo { |
| | | // width: 32px; |
| | | height: 35px; |
| | | vertical-align: middle; |
| | | margin-right: 12px; |
| | | } |
| | | |
| | | & .sidebar-title { |
| | | display: inline-block; |
| | | margin: 0; |
| | | color: #fff; |
| | | font-weight: 600; |
| | | line-height: 50px; |
| | | font-size: 14px; |
| | | font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif; |
| | | vertical-align: middle; |
| | | } |
| | | } |
| | | |
| | | &.collapse { |
| | | .sidebar-logo { |
| | | margin-right: 0px; |
| | | } |
| | | } |
| | | } |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <div v-if="!item.hidden"> |
| | | <template v-if="hasOneShowingChild(item.children,item) && (!onlyOneChild.children||onlyOneChild.noShowingChildren)&&!item.alwaysShow"> |
| | | <app-link v-if="onlyOneChild.meta" :to="resolvePath(onlyOneChild.path)"> |
| | | <el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}"> |
| | | <item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="onlyOneChild.meta.title" /> |
| | | </el-menu-item> |
| | | </app-link> |
| | | </template> |
| | | |
| | | <el-submenu v-else ref="subMenu" :index="resolvePath(item.path)" popper-append-to-body> |
| | | <template slot="title"> |
| | | <item v-if="item.meta" :icon="item.meta && item.meta.icon" :title="item.meta.title"/> |
| | | </template> |
| | | <sidebar-item |
| | | v-for="child in item.children" |
| | | :key="child.path" |
| | | :is-nest="true" |
| | | :item="child" |
| | | :base-path="resolvePath(child.path)" |
| | | class="nest-menu" |
| | | /> |
| | | </el-submenu> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import path from 'path' |
| | | import { isExternal } from '@/utils/validate' |
| | | import Item from './Item' |
| | | import AppLink from './Link' |
| | | import FixiOSBug from './FixiOSBug' |
| | | |
| | | export default { |
| | | name: 'SidebarItem', |
| | | components: { Item, AppLink }, |
| | | mixins: [FixiOSBug], |
| | | props: { |
| | | // route object |
| | | item: { |
| | | type: Object, |
| | | required: true |
| | | }, |
| | | isNest: { |
| | | type: Boolean, |
| | | default: false |
| | | }, |
| | | basePath: { |
| | | type: String, |
| | | default: '' |
| | | } |
| | | }, |
| | | data() { |
| | | // To fix https://github.com/PanJiaChen/vue-admin-template/issues/237 |
| | | // TODO: refactor with render function |
| | | this.onlyOneChild = null |
| | | return {} |
| | | }, |
| | | |
| | | methods: { |
| | | hasOneShowingChild(children = [], parent) { |
| | | const showingChildren = children.filter(item => { |
| | | if (item.hidden) { |
| | | return false |
| | | } else { |
| | | // Temp set(will be used if only has one showing child) |
| | | this.onlyOneChild = item |
| | | return true |
| | | } |
| | | }) |
| | | |
| | | // When there is only one child router, the child router is displayed by default |
| | | if (showingChildren.length === 1) { |
| | | return true |
| | | } |
| | | |
| | | // Show parent if there are no child router to display |
| | | if (showingChildren.length === 0) { |
| | | this.onlyOneChild = { ... parent, path: '', noShowingChildren: true } |
| | | return true |
| | | } |
| | | |
| | | return false |
| | | }, |
| | | resolvePath(routePath) { |
| | | if (isExternal(routePath)) { |
| | | return routePath |
| | | } |
| | | if (isExternal(this.basePath)) { |
| | | return this.basePath |
| | | } |
| | | return path.resolve(this.basePath, routePath) |
| | | } |
| | | } |
| | | } |
| | | </script> |
New file |
| | |
| | | <template> |
| | | <div :class="{'has-logo':showLogo}"> |
| | | <logo :collapse="isCollapse" /> |
| | | <el-scrollbar wrap-class="scrollbar-wrapper"> |
| | | <el-menu |
| | | :default-active="activeMenu" |
| | | :collapse="isCollapse" |
| | | :background-color="variables.menuBg" |
| | | :text-color="variables.menuText" |
| | | :unique-opened="false" |
| | | :active-text-color="variables.menuActiveText" |
| | | :collapse-transition="false" |
| | | mode="vertical" |
| | | > |
| | | <sidebar-item v-for="route in routes" :key="route.path" :item="route" :base-path="route.path"/> |
| | | </el-menu> |
| | | </el-scrollbar> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { mapGetters } from 'vuex' |
| | | import Logo from './Logo' |
| | | import SidebarItem from './SidebarItem' |
| | | import variables from '@/styles/variables.scss' |
| | | |
| | | export default { |
| | | components: { SidebarItem, Logo }, |
| | | computed: { |
| | | ...mapGetters([ |
| | | 'sidebar' |
| | | ]), |
| | | routes() { |
| | | return this.$router.options.routes |
| | | }, |
| | | activeMenu() { |
| | | const route = this.$route |
| | | const { meta, path } = route |
| | | // if set path, the sidebar will highlight the path you set |
| | | if (meta.activeMenu) { |
| | | return meta.activeMenu |
| | | } |
| | | return path |
| | | }, |
| | | showLogo() { |
| | | return this.$store.state.settings.sidebarLogo |
| | | }, |
| | | variables() { |
| | | return variables |
| | | }, |
| | | isCollapse() { |
| | | return !this.sidebar.opened |
| | | } |
| | | } |
| | | } |
| | | </script> |
New file |
| | |
| | | <template> |
| | | <el-scrollbar ref="scrollContainer" :vertical="false" class="scroll-container" @wheel.native.prevent="handleScroll"> |
| | | <slot /> |
| | | </el-scrollbar> |
| | | </template> |
| | | |
| | | <script> |
| | | const tagAndTagSpacing = 4 // tagAndTagSpacing |
| | | |
| | | export default { |
| | | name: 'ScrollPane', |
| | | data() { |
| | | return { |
| | | left: 0 |
| | | } |
| | | }, |
| | | computed: { |
| | | scrollWrapper() { |
| | | return this.$refs.scrollContainer.$refs.wrap |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.scrollWrapper.addEventListener('scroll', this.emitScroll, true) |
| | | }, |
| | | beforeDestroy() { |
| | | this.scrollWrapper.removeEventListener('scroll', this.emitScroll) |
| | | }, |
| | | methods: { |
| | | handleScroll(e) { |
| | | const eventDelta = e.wheelDelta || -e.deltaY * 40 |
| | | const $scrollWrapper = this.scrollWrapper |
| | | $scrollWrapper.scrollLeft = $scrollWrapper.scrollLeft + eventDelta / 4 |
| | | }, |
| | | emitScroll() { |
| | | this.$emit('scroll') |
| | | }, |
| | | moveToTarget(currentTag) { |
| | | const $container = this.$refs.scrollContainer.$el |
| | | const $containerWidth = $container.offsetWidth |
| | | const $scrollWrapper = this.scrollWrapper |
| | | const tagList = this.$parent.$refs.tag |
| | | |
| | | let firstTag = null |
| | | let lastTag = null |
| | | |
| | | // find first tag and last tag |
| | | if (tagList.length > 0) { |
| | | firstTag = tagList[0] |
| | | lastTag = tagList[tagList.length - 1] |
| | | } |
| | | |
| | | if (firstTag === currentTag) { |
| | | $scrollWrapper.scrollLeft = 0 |
| | | } else if (lastTag === currentTag) { |
| | | $scrollWrapper.scrollLeft = $scrollWrapper.scrollWidth - $containerWidth |
| | | } else { |
| | | // find preTag and nextTag |
| | | const currentIndex = tagList.findIndex(item => item === currentTag) |
| | | const prevTag = tagList[currentIndex - 1] |
| | | const nextTag = tagList[currentIndex + 1] |
| | | |
| | | // the tag's offsetLeft after of nextTag |
| | | const afterNextTagOffsetLeft = nextTag.$el.offsetLeft + nextTag.$el.offsetWidth + tagAndTagSpacing |
| | | |
| | | // the tag's offsetLeft before of prevTag |
| | | const beforePrevTagOffsetLeft = prevTag.$el.offsetLeft - tagAndTagSpacing |
| | | |
| | | if (afterNextTagOffsetLeft > $scrollWrapper.scrollLeft + $containerWidth) { |
| | | $scrollWrapper.scrollLeft = afterNextTagOffsetLeft - $containerWidth |
| | | } else if (beforePrevTagOffsetLeft < $scrollWrapper.scrollLeft) { |
| | | $scrollWrapper.scrollLeft = beforePrevTagOffsetLeft |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | .scroll-container { |
| | | white-space: nowrap; |
| | | position: relative; |
| | | overflow: hidden; |
| | | width: 100%; |
| | | height:50px; |
| | | ::v-deep { |
| | | .el-scrollbar__bar { |
| | | bottom: 0px; |
| | | } |
| | | .el-scrollbar__wrap { |
| | | height: 49px; |
| | | } |
| | | } |
| | | } |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <div id="tags-view-container" class="tags-view-container"> |
| | | <scroll-pane ref="scrollPane" class="tags-view-wrapper" @scroll="handleScroll"> |
| | | <router-link |
| | | v-for="tag in visitedViews" |
| | | ref="tag" |
| | | :key="tag.path" |
| | | :class="isActive(tag)?'active':''" |
| | | :to="{ path: tag.path, query: tag.query, fullPath: tag.fullPath }" |
| | | tag="span" |
| | | class="tags-view-item" |
| | | @click.middle.native="!isAffix(tag)?closeSelectedTag(tag):''" |
| | | @contextmenu.prevent.native="openMenu(tag,$event)" |
| | | > |
| | | {{ tag.title }} |
| | | <span class="el-icon-close" @click.prevent.stop="closeSelectedTag(tag)" /> |
| | | </router-link> |
| | | </scroll-pane> |
| | | <ul v-show="visible" :style="{left:left+'px',top:top+'px'}" class="contextmenu"> |
| | | <li @click="refreshSelectedTag(selectedTag)">Refresh</li> |
| | | <li v-if="!isAffix(selectedTag)" @click="closeSelectedTag(selectedTag)">Close</li> |
| | | <li @click="closeOthersTags">Close Others</li> |
| | | <li @click="closeAllTags(selectedTag)">Close All</li> |
| | | </ul> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import ScrollPane from './ScrollPane' |
| | | |
| | | export default { |
| | | components: { ScrollPane }, |
| | | data() { |
| | | return { |
| | | visible: false, |
| | | top: 0, |
| | | left: 0, |
| | | selectedTag: {}, |
| | | affixTags: [] |
| | | } |
| | | }, |
| | | computed: { |
| | | visitedViews() { |
| | | return this.$store.state.tagsView.visitedViews |
| | | } |
| | | }, |
| | | watch: { |
| | | $route() { |
| | | this.addTags() |
| | | this.moveToCurrentTag() |
| | | }, |
| | | visible(value) { |
| | | if (value) { |
| | | document.body.addEventListener('click', this.closeMenu); |
| | | } else { |
| | | document.body.removeEventListener('click', this.closeMenu); |
| | | } |
| | | } |
| | | }, |
| | | mounted() { |
| | | |
| | | }, |
| | | created(){ |
| | | this.initTags() |
| | | this.addTags() |
| | | }, |
| | | methods: { |
| | | isActive(route) { |
| | | return route.path === this.$route.path |
| | | }, |
| | | isAffix(tag) { |
| | | return tag.meta && tag.meta.affix |
| | | }, |
| | | filterAffixTags(routes, basePath = '/') { |
| | | let tags = [] |
| | | // routes.forEach(route => { |
| | | // if (route.meta && route.meta.affix) { |
| | | // const tagPath = path.resolve(basePath, route.path) |
| | | // tags.push({ |
| | | // fullPath: tagPath, |
| | | // path: tagPath, |
| | | // name: route.name, |
| | | // meta: { ...route.meta } |
| | | // }) |
| | | // } |
| | | // if (route.children) { |
| | | // const tempTags = this.filterAffixTags(route.children, route.path) |
| | | // if (tempTags.length >= 1) { |
| | | // tags = [...tags, ...tempTags] |
| | | // } |
| | | // } |
| | | // }) |
| | | return tags |
| | | }, |
| | | initTags() { |
| | | // const affixTags = this.affixTags = this.filterAffixTags(this.routes) |
| | | // for (const tag of affixTags) { |
| | | // // Must have tag name |
| | | // if (tag.name) { |
| | | // this.$store.dispatch('tagsView/addVisitedView', tag) |
| | | // } |
| | | // } |
| | | }, |
| | | addTags() { |
| | | const { name } = this.$route |
| | | if (name) { |
| | | this.$store.dispatch('tagsView/addView', this.$route) |
| | | } |
| | | return false |
| | | }, |
| | | moveToCurrentTag() { |
| | | const tags = this.$refs.tag |
| | | this.$nextTick(() => { |
| | | for (const tag of tags) { |
| | | if (tag.to.path === this.$route.path) { |
| | | this.$refs.scrollPane.moveToTarget(tag) |
| | | // when query is different then update |
| | | if (tag.to.fullPath !== this.$route.fullPath) { |
| | | this.$store.dispatch('tagsView/updateVisitedView', this.$route) |
| | | } |
| | | break |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | refreshSelectedTag(view) { |
| | | this.$store.dispatch('tagsView/delCachedView', view).then(() => { |
| | | const { fullPath } = view |
| | | this.$nextTick(() => { |
| | | this.$router.replace({ |
| | | path: '/redirect' + fullPath |
| | | }) |
| | | }) |
| | | }) |
| | | }, |
| | | closeSelectedTag(view) { |
| | | console.log(view) |
| | | this.$store.dispatch('tagsView/delView', view).then(({ visitedViews }) => { |
| | | if (this.isActive(view)) { |
| | | this.toLastView(visitedViews, view) |
| | | } |
| | | }) |
| | | }, |
| | | closeOthersTags() { |
| | | this.$router.push(this.selectedTag) |
| | | this.$store.dispatch('tagsView/delOthersViews', this.selectedTag).then(() => { |
| | | this.moveToCurrentTag() |
| | | }) |
| | | }, |
| | | closeAllTags(view) { |
| | | this.$store.dispatch('tagsView/delAllViews').then(({ visitedViews }) => { |
| | | if (this.affixTags.some(tag => tag.path === view.path)) { |
| | | return |
| | | } |
| | | this.toLastView(visitedViews, view) |
| | | }) |
| | | }, |
| | | toLastView(visitedViews, view) { |
| | | const latestView = visitedViews.slice(-1)[0] |
| | | let path = ''; |
| | | if(this.$router.options.routes[0]&&this.$router.options.routes[0].children[0]){ |
| | | path = this.$router.options.routes[0].children[0].path; |
| | | }else{ |
| | | path = this.$router.options.routes[0].path; |
| | | } |
| | | console.log(latestView) |
| | | if (latestView) { |
| | | this.$router.push(latestView.fullPath) |
| | | } else { |
| | | this.$router.push(path) |
| | | // now the default is to redirect to the home page if there is no tags-view, |
| | | // you can adjust it according to your needs. |
| | | // if (view.name === 'Dashboard') { |
| | | // // to reload home page |
| | | // this.$router.replace({ path: '/redirect' + view.fullPath }) |
| | | // } else { |
| | | // this.$router.push('/') |
| | | // } |
| | | } |
| | | }, |
| | | openMenu(tag, e) { |
| | | const menuMinWidth = 105 |
| | | const offsetLeft = this.$el.getBoundingClientRect().left // container margin left |
| | | const offsetWidth = this.$el.offsetWidth // container width |
| | | const maxLeft = offsetWidth - menuMinWidth // left boundary |
| | | const left = e.clientX - offsetLeft + 15 // 15: margin right |
| | | |
| | | if (left > maxLeft) { |
| | | this.left = maxLeft |
| | | } else { |
| | | this.left = left |
| | | } |
| | | |
| | | this.top = e.clientY |
| | | this.visible = true |
| | | this.selectedTag = tag |
| | | }, |
| | | closeMenu() { |
| | | this.visible = false |
| | | }, |
| | | handleScroll() { |
| | | this.closeMenu() |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .tags-view-container { |
| | | height: 34px; |
| | | width: 100%; |
| | | background: #fff; |
| | | border-bottom: 1px solid #d8dce5; |
| | | box-shadow: 0 1px 3px 0 rgba(0, 0, 0, .12), 0 0 3px 0 rgba(0, 0, 0, .04); |
| | | .tags-view-wrapper { |
| | | .tags-view-item { |
| | | display: inline-block; |
| | | position: relative; |
| | | cursor: pointer; |
| | | height: 26px; |
| | | line-height: 26px; |
| | | border: 1px solid #d8dce5; |
| | | color: #495060; |
| | | background: #fff; |
| | | padding: 0 8px; |
| | | font-size: 12px; |
| | | margin-left: 5px; |
| | | margin-top: 4px; |
| | | &:first-of-type { |
| | | margin-left: 15px; |
| | | } |
| | | &:last-of-type { |
| | | margin-right: 15px; |
| | | } |
| | | &.active { |
| | | background-color: #409EFF; |
| | | color: #fff; |
| | | border-color: #409EFF; |
| | | &::before { |
| | | content: ''; |
| | | background: #fff; |
| | | display: inline-block; |
| | | width: 8px; |
| | | height: 8px; |
| | | border-radius: 50%; |
| | | position: relative; |
| | | margin-right: 2px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | .contextmenu { |
| | | margin: 0; |
| | | background: #fff; |
| | | z-index: 3000; |
| | | position: absolute; |
| | | list-style-type: none; |
| | | padding: 5px 0; |
| | | border-radius: 4px; |
| | | font-size: 12px; |
| | | font-weight: 400; |
| | | color: #333; |
| | | box-shadow: 2px 2px 3px 0 rgba(0, 0, 0, .3); |
| | | li { |
| | | margin: 0; |
| | | padding: 7px 16px; |
| | | cursor: pointer; |
| | | &:hover { |
| | | background: #eee; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </style> |
| | | |
| | | <style lang="scss"> |
| | | //reset element css of el-icon-close |
| | | .tags-view-wrapper { |
| | | .tags-view-item { |
| | | .el-icon-close { |
| | | width: 16px; |
| | | height: 16px; |
| | | vertical-align: 2px; |
| | | border-radius: 50%; |
| | | text-align: center; |
| | | transition: all .3s cubic-bezier(.645, .045, .355, 1); |
| | | transform-origin: 100% 50%; |
| | | &:before { |
| | | transform: scale(.6); |
| | | display: inline-block; |
| | | vertical-align: -3px; |
| | | } |
| | | &:hover { |
| | | background-color: #b4bccc; |
| | | color: #fff; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </style> |
New file |
| | |
| | | /* |
| | | * @Author: zxq |
| | | * @Date: 2022-03-11 09:23:58 |
| | | * @LastEditors: zxq |
| | | * @LastEditTime: 2023-03-06 17:24:46 |
| | | * @Description: Description |
| | | * @FilePath: \qyp-plat\src\layout\components\index.js |
| | | */ |
| | | export { default as Navbar } from './Navbar' |
| | | export { default as Sidebar } from './Sidebar' |
| | | export { default as AppMain } from './AppMain' |
| | | export { default as TagsView } from './TagsView/index.vue' |
New file |
| | |
| | | <!-- |
| | | * @Author: zxq |
| | | * @Date: 2022-03-11 09:23:58 |
| | | * @LastEditors: zxq |
| | | * @LastEditTime: 2023-03-07 10:01:53 |
| | | * @Description: Description |
| | | * @FilePath: \qyp-plat\src\layout\index.vue |
| | | --> |
| | | <template> |
| | | <div :class="classObj" class="app-wrapper"> |
| | | <div v-if="device==='mobile'&&sidebar.opened" class="drawer-bg" @click="handleClickOutside" /> |
| | | <sidebar class="sidebar-container" /> |
| | | <div class="main-container"> |
| | | <div :class="{'fixed-header':fixedHeader}"> |
| | | <navbar /> |
| | | <tags-view v-if="needTagsView" /> |
| | | </div> |
| | | <app-main /> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { Navbar, Sidebar, TagsView,AppMain } from './components'; |
| | | import ResizeMixin from './mixin/ResizeHandler'; |
| | | import { mapState } from 'vuex'; |
| | | export default { |
| | | name: 'Layout', |
| | | components: { |
| | | Navbar, |
| | | Sidebar, |
| | | TagsView, |
| | | AppMain |
| | | }, |
| | | mixins: [ResizeMixin], |
| | | computed: { |
| | | ...mapState({ |
| | | needTagsView: state => state.settings.tagsView,//是否展示tagView |
| | | }), |
| | | sidebar() { |
| | | return this.$store.state.app.sidebar |
| | | }, |
| | | device() { |
| | | return this.$store.state.app.device |
| | | }, |
| | | fixedHeader() { |
| | | return this.$store.state.settings.fixedHeader |
| | | }, |
| | | classObj() { |
| | | return { |
| | | hideSidebar: !this.sidebar.opened, |
| | | openSidebar: this.sidebar.opened, |
| | | withoutAnimation: this.sidebar.withoutAnimation, |
| | | mobile: this.device === 'mobile' |
| | | } |
| | | } |
| | | }, |
| | | methods: { |
| | | handleClickOutside() { |
| | | this.$store.dispatch('app/closeSideBar', { withoutAnimation: false }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | @import "~@/styles/mixin.scss"; |
| | | @import "~@/styles/variables.scss"; |
| | | |
| | | .app-wrapper { |
| | | @include clearfix; |
| | | position: relative; |
| | | height: 100%; |
| | | width: 100%; |
| | | &.mobile.openSidebar{ |
| | | position: fixed; |
| | | top: 0; |
| | | } |
| | | } |
| | | .drawer-bg { |
| | | background: #000; |
| | | opacity: 0.3; |
| | | width: 100%; |
| | | top: 0; |
| | | height: 100%; |
| | | position: absolute; |
| | | z-index: 999; |
| | | } |
| | | |
| | | .fixed-header { |
| | | position: fixed; |
| | | top: 0; |
| | | right: 0; |
| | | z-index: 9; |
| | | width: calc(100% - #{$sideBarWidth}); |
| | | transition: width 0.28s; |
| | | } |
| | | |
| | | .hideSidebar .fixed-header { |
| | | width: calc(100% - 54px) |
| | | } |
| | | |
| | | .mobile .fixed-header { |
| | | width: 100%; |
| | | } |
| | | </style> |
New file |
| | |
| | | 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 }) |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | /* |
| | | * @Author: zhouhao 787329763@qq.com |
| | | * @Date: 2022-03-09 09:43:24 |
| | | * @LastEditors: zhouhao 787329763@qq.com |
| | | * @LastEditTime: 2023-03-27 17:40:08 |
| | | * @FilePath: \qyp-plat\src\main.js |
| | | * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE |
| | | */ |
| | | |
| | | import Vue from 'vue' |
| | | |
| | | import 'normalize.css/normalize.css' // A modern alternative to CSS resets |
| | | |
| | | import ElementUI from 'element-ui' |
| | | import 'element-ui/lib/theme-chalk/index.css' |
| | | import locale from 'element-ui/lib/locale/lang/zh-CN' // lang i18n |
| | | |
| | | import '@/styles/index.scss' // global css |
| | | |
| | | import App from './App' |
| | | import store from './store' |
| | | import router from './router' |
| | | import filterBtnById from '@/utils/controlBtn'; |
| | | import '@/utils/directive' // 拖拽弹窗,在需要用到拖拽功能的弹窗标签上加v-dialogDrag |
| | | import validator from '@/utils//validator'; |
| | | import '@/icons' // icon |
| | | import '@/permission' // permission control |
| | | import '@/assets/iconfont/iconfont.css' |
| | | import '@/assets/iconfont/iconfont' |
| | | import 'default-passive-events' |
| | | import '@/utils/routerload' //路由加载 |
| | | import md5 from 'js-md5'; |
| | | |
| | | import VueDraggableResizable from 'vue-draggable-resizable' |
| | | Vue.component('vue-draggable-resizable', VueDraggableResizable) |
| | | Vue.prototype.$md5 = md5; |
| | | Vue.prototype.$tool = validator |
| | | Vue.use(ElementUI, { locale }) |
| | | Vue.use(filterBtnById); |
| | | // 如果想要中文版 element-ui,按如下方式声明 |
| | | // Vue.use(ElementUI) |
| | | |
| | | Vue.config.productionTip = false |
| | | |
| | | new Vue({ |
| | | el: '#app', |
| | | router, |
| | | store, |
| | | render: h => h(App) |
| | | }) |
New file |
| | |
| | | /* |
| | | * @Author: zxq |
| | | * @Date: 2021-12-23 15:19:23 |
| | | * @LastEditors: zhaoxiaoqiang 287285524@qq.com |
| | | * @LastEditTime: 2023-08-24 16:35:59 |
| | | * @Description: Description |
| | | * @FilePath: \qyp_finlean_plat\src\permission.js |
| | | */ |
| | | import router from './router' |
| | | import store from './store' |
| | | import { Message } from 'element-ui' |
| | | import NProgress from 'nprogress' // progress bar |
| | | import 'nprogress/nprogress.css' // progress bar style |
| | | import { getSessionId } from '@/utils/auth' // get token from cookie |
| | | import getPageTitle from '@/utils/get-page-title' |
| | | |
| | | NProgress.configure({ showSpinner: false }) // NProgress Configuration |
| | | |
| | | const whiteList = ['/login'] // no redirect whitelist |
| | | |
| | | router.beforeEach(async(to, from, next) => { |
| | | |
| | | // start progress bar |
| | | NProgress.start() |
| | | document.title = getPageTitle(to.meta.title) |
| | | const hasToken = getSessionId() |
| | | let _router = (JSON.parse(window.localStorage.getItem('qyp_routers'))); |
| | | if (hasToken && _router) { |
| | | if (to.path === '/login') { |
| | | next({ path: '/' }) |
| | | NProgress.done() |
| | | }else if(to.path=='/'){ |
| | | let path = _router[0].childPowerInfos[0].routePath; |
| | | next({ path: path }); |
| | | NProgress.done() |
| | | } else { |
| | | const hasGetUserInfo = store.getters.name |
| | | if (hasGetUserInfo) { |
| | | next() |
| | | } else { |
| | | try { |
| | | next() |
| | | } catch (error) { |
| | | // remove token and go to login page to re-login |
| | | await store.dispatch('user/resetToken') |
| | | Message.error(error || 'Has Error') |
| | | next(`/login?redirect=${to.path}`) |
| | | NProgress.done() |
| | | } |
| | | } |
| | | } |
| | | } else { |
| | | // /* has no token*/ |
| | | if (whiteList.indexOf(to.path) !== -1) { |
| | | // in the free login whitelist, go directly |
| | | next() |
| | | } else { |
| | | // other pages that do not have permission to access are redirected to the login page. |
| | | next(`/login`) |
| | | NProgress.done() |
| | | } |
| | | } |
| | | }) |
| | | |
| | | router.afterEach(() => { |
| | | // finish progress bar |
| | | NProgress.done() |
| | | }) |
New file |
| | |
| | | /* |
| | | * @Author: zxq |
| | | * @Date: 2021-12-23 15:19:24 |
| | | * @LastEditors: zhaoxiaoqiang 287285524@qq.com |
| | | * @LastEditTime: 2023-08-24 16:42:29 |
| | | * @Description: Description |
| | | * @FilePath: \sjzl-plat\src\router\index.js |
| | | */ |
| | | import Vue from 'vue' |
| | | import Router from 'vue-router' |
| | | |
| | | Vue.use(Router) |
| | | |
| | | /* Layout */ |
| | | import Layout from '@/layout' |
| | | |
| | | /** |
| | | * Note: sub-menu only appear when route children.length >= 1 |
| | | * Detail see: https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html |
| | | * |
| | | * hidden: true if set true, item will not show in the sidebar(default is false) |
| | | * alwaysShow: true if set true, will always show the root menu |
| | | * if not set alwaysShow, when item has more than one children route, |
| | | * it will becomes nested mode, otherwise not show the root menu |
| | | * redirect: noRedirect if set noRedirect will no redirect in the breadcrumb |
| | | * name:'router-name' the name is used by <keep-alive> (must set!!!) |
| | | * meta : { |
| | | roles: ['admin','editor'] control the page roles (you can set multiple roles) |
| | | title: 'title' the name show in sidebar and breadcrumb (recommend set) |
| | | icon: 'svg-name'/'el-icon-x' the icon show in the sidebar |
| | | breadcrumb: false if set false, the item will hidden in breadcrumb(default is true) |
| | | activeMenu: '/example/list' if set path, the sidebar will highlight the path you set |
| | | } |
| | | */ |
| | | |
| | | /** |
| | | * constantRoutes |
| | | * a base page that does not have permission requirements |
| | | * all roles can be accessed |
| | | */ |
| | | export const constantRoutes = [ |
| | | { |
| | | path: '/login', |
| | | component: () => import('@/views/login/index'), |
| | | hidden: true |
| | | } |
| | | // 404 page must be placed at the end !!! |
| | | // { path: '*', redirect: '/404', hidden: true } |
| | | ] |
| | | |
| | | const createRouter = () => new Router({ |
| | | // mode: 'history', // require service support |
| | | scrollBehavior: () => ({ y: 0 }), |
| | | routes: constantRoutes |
| | | }) |
| | | |
| | | const router = createRouter() |
| | | |
| | | // Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465 |
| | | export function resetRouter() { |
| | | const newRouter = createRouter() |
| | | router.matcher = newRouter.matcher // reset router |
| | | } |
| | | |
| | | export default router |
New file |
| | |
| | | /* |
| | | * @Author: your name |
| | | * @Date: 2021-09-13 14:28:39 |
| | | * @LastEditTime: 2023-03-06 17:30:29 |
| | | * @LastEditors: zxq |
| | | * @Description: In User Settings Edit |
| | | * @FilePath: \qyp-plat\src\settings.js |
| | | */ |
| | | module.exports = { |
| | | |
| | | title: '权益品后台管理', |
| | | |
| | | /** |
| | | * @type {boolean} true | false |
| | | * @description Whether fix the header |
| | | */ |
| | | fixedHeader: false, |
| | | |
| | | /** |
| | | * @type {boolean} true | false |
| | | * @description Whether show the logo in sidebar |
| | | */ |
| | | sidebarLogo: false, |
| | | /** |
| | | * @type {boolean} true | false |
| | | * @description Whether need tagsView |
| | | */ |
| | | tagsView: true |
| | | } |
New file |
| | |
| | | /* |
| | | * @Author: zxq |
| | | * @Date: 2022-03-11 09:23:58 |
| | | * @LastEditors: zxq |
| | | * @LastEditTime: 2023-03-06 17:26:31 |
| | | * @Description: Description |
| | | * @FilePath: \qyp-plat\src\store\getters.js |
| | | */ |
| | | |
| | | const getters = { |
| | | sidebar: state => state.app.sidebar, |
| | | device: state => state.app.device, |
| | | token: state => state.user.token, |
| | | avatar: state => state.user.avatar, |
| | | name: state => state.user.name, |
| | | userId:state => state.user.userId, |
| | | visitedViews: state => state.tagsView.visitedViews, |
| | | cachedViews: state => state.tagsView.cachedViews, |
| | | } |
| | | export default getters |
New file |
| | |
| | | /* |
| | | * @Author: zxq |
| | | * @Date: 2022-03-11 09:23:58 |
| | | * @LastEditors: zxq |
| | | * @LastEditTime: 2023-03-07 09:34:19 |
| | | * @Description: Description |
| | | * @FilePath: \qyp-plat\src\store\index.js |
| | | */ |
| | | import Vue from 'vue' |
| | | import Vuex from 'vuex' |
| | | import getters from './getters' |
| | | import app from './modules/app' |
| | | import settings from './modules/settings' |
| | | import user from './modules/user' |
| | | import tagsView from './modules/tagsView' |
| | | Vue.use(Vuex) |
| | | |
| | | const store = new Vuex.Store({ |
| | | modules: { |
| | | app, |
| | | settings, |
| | | user, |
| | | tagsView |
| | | }, |
| | | getters |
| | | }) |
| | | |
| | | export default store |
New file |
| | |
| | | import Cookies from 'js-cookie' |
| | | |
| | | const state = { |
| | | sidebar: { |
| | | opened: Cookies.get('sidebarStatus') ? !!+Cookies.get('sidebarStatus') : true, |
| | | withoutAnimation: false |
| | | }, |
| | | device: 'desktop' |
| | | } |
| | | |
| | | const mutations = { |
| | | TOGGLE_SIDEBAR: state => { |
| | | 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 |
| | | } |
| | | } |
| | | |
| | | const actions = { |
| | | toggleSideBar({ commit }) { |
| | | commit('TOGGLE_SIDEBAR') |
| | | }, |
| | | closeSideBar({ commit }, { withoutAnimation }) { |
| | | commit('CLOSE_SIDEBAR', withoutAnimation) |
| | | }, |
| | | toggleDevice({ commit }, device) { |
| | | commit('TOGGLE_DEVICE', device) |
| | | } |
| | | } |
| | | |
| | | export default { |
| | | namespaced: true, |
| | | state, |
| | | mutations, |
| | | actions |
| | | } |
New file |
| | |
| | | /* |
| | | * @Author: zxq |
| | | * @Date: 2022-03-11 09:23:58 |
| | | * @LastEditors: zxq |
| | | * @LastEditTime: 2023-03-07 09:51:30 |
| | | * @Description: Description |
| | | * @FilePath: \qyp-plat\src\store\modules\settings.js |
| | | */ |
| | | import defaultSettings from '@/settings' |
| | | |
| | | const { showSettings, fixedHeader, sidebarLogo,tagsView } = defaultSettings; |
| | | |
| | | const state = { |
| | | showSettings: showSettings, |
| | | fixedHeader: fixedHeader, |
| | | sidebarLogo: sidebarLogo, |
| | | tagsView:tagsView |
| | | } |
| | | |
| | | const mutations = { |
| | | CHANGE_SETTING: (state, { key, value }) => { |
| | | // eslint-disable-next-line no-prototype-builtins |
| | | if (state.hasOwnProperty(key)) { |
| | | state[key] = value |
| | | } |
| | | } |
| | | } |
| | | |
| | | const actions = { |
| | | changeSetting({ commit }, data) { |
| | | commit('CHANGE_SETTING', data) |
| | | } |
| | | } |
| | | |
| | | export default { |
| | | namespaced: true, |
| | | state, |
| | | mutations, |
| | | actions |
| | | } |
| | | |
New file |
| | |
| | | const state = { |
| | | visitedViews: [], |
| | | cachedViews: [] |
| | | } |
| | | |
| | | const mutations = { |
| | | 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.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 |
| | | } |
| | | } |
| | | }, |
| | | 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 |
| | | }) |
| | | }, |
| | | 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 { |
| | | // if index = -1, there is no cached tags |
| | | state.cachedViews = [] |
| | | } |
| | | }, |
| | | |
| | | DEL_ALL_VISITED_VIEWS: state => { |
| | | // keep affix tags |
| | | const affixTags = state.visitedViews.filter(tag => tag.meta.affix) |
| | | state.visitedViews = affixTags |
| | | }, |
| | | 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 |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | const actions = { |
| | | addView({ dispatch }, view) { |
| | | dispatch('addVisitedView', view) |
| | | dispatch('addCachedView', 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]) |
| | | }) |
| | | }, |
| | | 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) |
| | | } |
| | | } |
| | | |
| | | export default { |
| | | namespaced: true, |
| | | state, |
| | | mutations, |
| | | actions |
| | | } |
New file |
| | |
| | | import { login, logout } from '@/api/user' |
| | | import { getSessionId, setSessionId, removeSessionId,getUserName,setUserName,removeUserName |
| | | ,getAccount,setAccount,removeAccount,getRoleName,removeRoleName,setRoleName,removeBtnIds,getUserId,removeUserId,setUserId } from '@/utils/auth' |
| | | import { resetRouter } from '@/router' |
| | | import router from '@/router' |
| | | import meunUtils from '@/utils/MenuUtils'; |
| | | import md5 from 'js-md5'; |
| | | const getDefaultState = () => { |
| | | return { |
| | | sessionId: getSessionId(), |
| | | name: getUserName(), |
| | | avatar: getAccount(), |
| | | qyp_btnIds: JSON.parse(localStorage.getItem('qyp_btnIds')) , |
| | | roleName:getRoleName(), |
| | | userId:getUserId() |
| | | } |
| | | } |
| | | |
| | | const state = getDefaultState() |
| | | |
| | | const mutations = { |
| | | RESETQYP_STATE: (state) => { |
| | | Object.assign(state, getDefaultState()) |
| | | }, |
| | | SETQYP_SESSIONID: (state, getSessionId) => { |
| | | state.getSessionId = getSessionId |
| | | }, |
| | | SETQYP_NAME: (state, name) => { |
| | | state.name = name |
| | | }, |
| | | SETQYP_AVATAR: (state, avatar) => { |
| | | state.avatar = avatar |
| | | }, |
| | | SETQYP_bTNIDS: (state, btnIds) => { |
| | | state.qyp_btnIds = btnIds |
| | | }, |
| | | SETQYP_ROLENAME: (state, roleName) => { |
| | | state.roleName = roleName |
| | | }, |
| | | SETQYP_USERID: (state, userId) => { |
| | | state.userId = userId |
| | | } |
| | | |
| | | } |
| | | |
| | | const actions = { |
| | | // user login |
| | | login({ commit }, userInfo) { |
| | | const { username, password } = userInfo; |
| | | return new Promise((resolve, reject) => { |
| | | login({ userNo: username.trim(), password: md5(username.trim() + password),sysType:4}).then(({body}) => { |
| | | let allMenuList = body.roleInfo.powerInfos; |
| | | // 处理菜单 |
| | | localStorage.setItem('qyp_routers', JSON.stringify(allMenuList)) |
| | | localStorage.setItem('qyp_btnIds', JSON.stringify(body.roleInfo.btnInfos)); |
| | | let tempMenu = allMenuList; |
| | | let data = tempMenu ? tempMenu : []; |
| | | let _router = meunUtils(data); |
| | | router.addRoutes(_router); |
| | | router.options.routes=_router; |
| | | commit('SETQYP_bTNIDS', body.roleInfo.btnInfos) |
| | | commit('SETQYP_ROLENAME', body.roleName) |
| | | setRoleName(body.roleName) |
| | | commit('SETQYP_SESSIONID', body.sessionId) |
| | | setSessionId(body.sessionId) |
| | | commit('SETQYP_NAME', body.name) |
| | | setUserName(body.name) |
| | | commit('SETQYP_AVATAR', body.account) |
| | | setUserId(body.id) |
| | | commit('SETQYP_USERID', body.id) |
| | | setAccount(body.account) |
| | | resolve(true) |
| | | }).catch(error => { |
| | | reject(error) |
| | | }) |
| | | }) |
| | | }, |
| | | // user logout |
| | | logout({ commit, state }) { |
| | | return new Promise((resolve, reject) => { |
| | | logout().then(() => { |
| | | removeSessionId() // must remove token first |
| | | removeUserName() |
| | | removeAccount() |
| | | resetRouter() |
| | | removeRoleName() |
| | | removeBtnIds() |
| | | removeUserId(); |
| | | // dispatch('tagsView/delAllViews', null, { root: true }) |
| | | localStorage.removeItem("qyp_routers") |
| | | commit('RESETQYP_STATE') |
| | | resolve() |
| | | }).catch(error => { |
| | | reject(error) |
| | | }) |
| | | }) |
| | | }, |
| | | |
| | | // remove token |
| | | resetToken({ commit }) { |
| | | return new Promise(resolve => { |
| | | removeToken() // must remove token first |
| | | commit('RESETQYP_STATE') |
| | | resolve() |
| | | }) |
| | | } |
| | | } |
| | | |
| | | export default { |
| | | namespaced: true, |
| | | state, |
| | | mutations, |
| | | actions |
| | | } |
| | | |
New file |
| | |
| | | // 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; |
| | | } |
| | | |
| | | |
| | | // 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 |
| | | } |
| | | } |
| | | |
| | | // to fix el-date-picker css style |
| | | .el-range-separator { |
| | | box-sizing: content-box; |
| | | } |
| | | // ====上传商品展示图 |
| | | .uplaod_img{ |
| | | display: flex; |
| | | justify-content: flex-start; |
| | | align-items: center; |
| | | } |
| | | .uplaod_img>div{ |
| | | display: flex; |
| | | justify-content: flex-start; |
| | | align-items: center; |
| | | } |
| | | .uplaod_img>div>.el-upload{ |
| | | width: 82px !important; |
| | | height: 82px !important; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | } |
| | | .uplaod_img>div>.el-upload-list--picture-card{ |
| | | display: flex; |
| | | justify-content: flex-start; |
| | | flex-wrap: wrap; |
| | | } |
| | | .uplaod_img>div>.el-upload-list--picture-card>.el-upload-list__item{ |
| | | width: 82px !important; |
| | | height: 82px !important; |
| | | } |
| | | // ====上传商品轮播图 |
| | | .product_img{ |
| | | display: flex; |
| | | justify-content: flex-start; |
| | | align-items: center; |
| | | } |
| | | .product_img>div{ |
| | | display: flex; |
| | | justify-content: flex-start; |
| | | align-items: center; |
| | | flex-wrap: wrap; |
| | | } |
| | | .product_img>div>.el-upload{ |
| | | width: 150px !important; |
| | | height: 108.8px !important; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | } |
| | | .product_img>div>.el-upload-list--picture-card{ |
| | | display: flex; |
| | | justify-content: flex-start; |
| | | flex-wrap: wrap; |
| | | } |
| | | .product_img>div>.el-upload-list--picture-card>.el-upload-list__item{ |
| | | width: 150px !important; |
| | | height: 108.8px !important; |
| | | } |
| | | // ====上传商品详情图 |
| | | .productdeta_img{ |
| | | display: flex; |
| | | justify-content: flex-start; |
| | | align-items: center; |
| | | } |
| | | .productdeta_img>div{ |
| | | display: flex; |
| | | justify-content: flex-start; |
| | | align-items: center; |
| | | flex-wrap: wrap; |
| | | } |
| | | .productdeta_img>div>.el-upload{ |
| | | width: 125px !important; |
| | | height: 200px !important; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | } |
| | | .productdeta_img>div>.el-upload-list--picture-card{ |
| | | display: flex; |
| | | justify-content: flex-start; |
| | | flex-wrap: wrap; |
| | | } |
| | | .productdeta_img>div>.el-upload-list--picture-card>.el-upload-list__item{ |
| | | width: 125px !important; |
| | | height: 200px !important; |
| | | } |
| | | // .uplaod_img>.el-upload-list>.el-upload-list__item>div{ |
| | | // width: 100% !important; |
| | | // height: 100% !important; |
| | | // } |
| | | // .uplaod_img>.el-upload-list>.el-upload-list__item>div>img{ |
| | | // width: 100% !important; |
| | | // height: 100% !important; |
| | | // } |
New file |
| | |
| | | @import './variables.scss'; |
| | | @import './mixin.scss'; |
| | | @import './transition.scss'; |
| | | @import './element-ui.scss'; |
| | | @import './sidebar.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; |
| | | background-color: #eee; |
| | | } |
| | | |
| | | #app { |
| | | height: 100%; |
| | | } |
| | | |
| | | *, |
| | | *:before, |
| | | *:after { |
| | | box-sizing: inherit; |
| | | } |
| | | |
| | | a:focus, |
| | | a:active { |
| | | outline: none; |
| | | } |
| | | |
| | | a, |
| | | a:focus, |
| | | a:hover { |
| | | cursor: pointer; |
| | | color: inherit; |
| | | text-decoration: none; |
| | | } |
| | | |
| | | div:focus { |
| | | outline: none; |
| | | } |
| | | |
| | | .clearfix { |
| | | &:after { |
| | | visibility: hidden; |
| | | display: block; |
| | | font-size: 0; |
| | | content: " "; |
| | | clear: both; |
| | | height: 0; |
| | | } |
| | | } |
| | | |
| | | // main-container global css |
| | | .app-container { |
| | | padding: 20px; |
| | | } |
| | | |
| | | body .el-scrollbar__wrap { |
| | | overflow-x: hidden; |
| | | } |
| | | |
| | | .icon { |
| | | width: 48px; |
| | | height: 48px; |
| | | vertical-align: -0.15em; |
| | | fill: currentColor; |
| | | overflow: hidden; |
| | | } |
| | | |
| | | .el-select-dropdown .el-scrollbar .el-scrollbar__wrap { |
| | | overflow: scroll !important; |
| | | } |
| | | |
| | | .el-pagination { |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | margin-bottom: 10px; |
| | | position: relative; |
| | | } |
| | | |
| | | .el-pagination__total { |
| | | font-size: 12px; |
| | | position: absolute; |
| | | left: 0; |
| | | color: #3C8EFE; |
| | | } |
| | | |
| | | .el-table th.is-leaf { |
| | | border-bottom: 1px solid #F0F0F0; |
| | | } |
| | | |
| | | .el-table .cell { |
| | | color: rgba(0, 0, 0, 0.65); |
| | | } |
| | | |
| | | .el-table { |
| | | th { |
| | | background-color: #f7f6fb; |
| | | ; |
| | | } |
| | | } |
| | | |
| | | .form-flex { |
| | | width: 100%; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: flex-start; |
| | | } |
| | | |
| | | .search_from { |
| | | background: #FFFFFF; |
| | | border-radius: 4px; |
| | | margin-bottom: 16px; |
| | | padding: 32px 16px; |
| | | box-sizing: border-box; |
| | | } |
| | | |
| | | .el-pagination.is-background .el-pager li:not(.disabled).active { |
| | | color: #3C8EFE; |
| | | border-radius: 4px; |
| | | background-color: #fff; |
| | | border: solid 1px #3C8EFE; |
| | | } |
| | | |
| | | .el-pagination.is-background .btn-prev, |
| | | .el-pagination.is-background .btn-next, |
| | | .el-pagination.is-background .el-pager li { |
| | | background-color: #fff; |
| | | border: 1px solid #DDDEE1; |
| | | color: #606266; |
| | | min-width: 32px; |
| | | border-radius: 4px; |
| | | } |
| | | |
| | | .el-card { |
| | | border-radius: 4px; |
| | | } |
| | | |
| | | .el-dialog { |
| | | border-radius: 4px; |
| | | } |
| | | |
| | | body .el-table th.gutter { |
| | | display: table-cell !important |
| | | } |
| | | |
| | | .el-table { |
| | | overflow-y: auto !important; |
| | | } |
| | | |
| | | .iconfont { |
| | | margin: 0px 4px 0px 0px; |
| | | font-size: 16px !important; |
| | | } |
| | | |
| | | |
| | | .el-dialog__footer{ |
| | | padding: 12px 22px; |
| | | box-sizing: border-box; |
| | | border-top: solid 1px #F0F0F0;; |
| | | } |
| | | .el-dialog__header{ |
| | | padding: 12px 22px; |
| | | box-sizing: border-box; |
| | | border-bottom: solid 1px #F0F0F0;; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | } |
| | | .el-card__header { |
| | | color: #333; |
| | | padding: 16px 20px; |
| | | font-size: 16px; |
| | | background-color: #fff; |
| | | } |
| | | |
| | | |
| | | .el-table th { |
| | | font-size: 12px; |
| | | font-weight: 400; |
| | | background: #FAFAFA; |
| | | color: #000; |
| | | } |
| | | .table_box{ |
| | | padding: 16px; |
| | | box-sizing: border-box; |
| | | background-color: #FFFFFF; |
| | | border-radius: 4px; |
| | | } |
| | | // 样式提取 |
| | | .shadow_class{ |
| | | border-radius: 16px; |
| | | box-shadow: 0px 10px 26px 0px rgba(0, 42, 224, 0.06); |
| | | |
| | | } |
| | | .indicator_text{ |
| | | >div{ |
| | | &:first-child{ |
| | | font-size: 12px; |
| | | font-family: Microsoft YaHei; |
| | | font-weight: 400; |
| | | color: #24508C; |
| | | opacity: 0.65; |
| | | margin-bottom: 24px; |
| | | } |
| | | &:last-child{ |
| | | font-size: 20px; |
| | | font-family: Microsoft YaHei; |
| | | font-weight: 400; |
| | | color: #0B2C5F; |
| | | display: flex; |
| | | justify-content: flex-start; |
| | | align-items: center; |
| | | .el-progress-bar{ |
| | | width: 100px; |
| | | } |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | @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%; |
| | | } |
New file |
| | |
| | | #app { |
| | | |
| | | .main-container { |
| | | min-height: 100%; |
| | | transition: margin-left .28s; |
| | | margin-left: $sideBarWidth; |
| | | position: relative; |
| | | } |
| | | |
| | | .sidebar-container { |
| | | transition: width 0.28s; |
| | | width: $sideBarWidth !important; |
| | | background-color: $menuBg; |
| | | height: 100%; |
| | | position: fixed; |
| | | font-size: 0px; |
| | | top: 0; |
| | | bottom: 0; |
| | | left: 0; |
| | | z-index: 1001; |
| | | overflow: hidden; |
| | | |
| | | // reset element-ui css |
| | | .horizontal-collapse-transition { |
| | | transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out; |
| | | } |
| | | |
| | | .scrollbar-wrapper { |
| | | overflow-x: hidden !important; |
| | | } |
| | | |
| | | .el-scrollbar__bar.is-vertical { |
| | | right: 0px; |
| | | } |
| | | |
| | | .el-scrollbar { |
| | | height: 100%; |
| | | } |
| | | |
| | | &.has-logo { |
| | | .el-scrollbar { |
| | | height: calc(100% - 50px); |
| | | } |
| | | } |
| | | |
| | | .is-horizontal { |
| | | display: none; |
| | | } |
| | | |
| | | a { |
| | | display: inline-block; |
| | | width: 100%; |
| | | overflow: hidden; |
| | | } |
| | | |
| | | .svg-icon { |
| | | margin-right: 16px; |
| | | } |
| | | |
| | | .sub-el-icon { |
| | | margin-right: 12px; |
| | | margin-left: -2px; |
| | | } |
| | | |
| | | .el-menu { |
| | | border: none; |
| | | height: 100%; |
| | | width: 100% !important; |
| | | } |
| | | |
| | | // menu hover |
| | | .submenu-title-noDropdown, |
| | | .el-submenu__title { |
| | | &:hover { |
| | | background-color: $menuHover !important; |
| | | } |
| | | } |
| | | |
| | | .is-active>.el-submenu__title { |
| | | color: $subMenuActiveText !important; |
| | | } |
| | | |
| | | & .nest-menu .el-submenu>.el-submenu__title, |
| | | & .el-submenu .el-menu-item { |
| | | min-width: $sideBarWidth !important; |
| | | background-color: $subMenuBg !important; |
| | | |
| | | &:hover { |
| | | background-color: $subMenuHover !important; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .hideSidebar { |
| | | .sidebar-container { |
| | | width: 54px !important; |
| | | } |
| | | |
| | | .main-container { |
| | | margin-left: 54px; |
| | | } |
| | | |
| | | .submenu-title-noDropdown { |
| | | padding: 0 !important; |
| | | position: relative; |
| | | |
| | | .el-tooltip { |
| | | padding: 0 !important; |
| | | |
| | | .svg-icon { |
| | | margin-left: 20px; |
| | | } |
| | | |
| | | .sub-el-icon { |
| | | margin-left: 19px; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .el-submenu { |
| | | overflow: hidden; |
| | | |
| | | &>.el-submenu__title { |
| | | padding: 0 !important; |
| | | |
| | | .svg-icon { |
| | | margin-left: 20px; |
| | | } |
| | | |
| | | .sub-el-icon { |
| | | margin-left: 19px; |
| | | } |
| | | |
| | | .el-submenu__icon-arrow { |
| | | display: none; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .el-menu--collapse { |
| | | .el-submenu { |
| | | &>.el-submenu__title { |
| | | &>span { |
| | | height: 0; |
| | | width: 0; |
| | | overflow: hidden; |
| | | visibility: hidden; |
| | | display: inline-block; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .el-menu--collapse .el-menu .el-submenu { |
| | | min-width: $sideBarWidth !important; |
| | | } |
| | | |
| | | // mobile responsive |
| | | .mobile { |
| | | .main-container { |
| | | margin-left: 0px; |
| | | } |
| | | |
| | | .sidebar-container { |
| | | transition: transform .28s; |
| | | width: $sideBarWidth !important; |
| | | } |
| | | |
| | | &.hideSidebar { |
| | | .sidebar-container { |
| | | pointer-events: none; |
| | | transition-duration: 0.3s; |
| | | transform: translate3d(-$sideBarWidth, 0, 0); |
| | | } |
| | | } |
| | | } |
| | | |
| | | .withoutAnimation { |
| | | |
| | | .main-container, |
| | | .sidebar-container { |
| | | transition: none; |
| | | } |
| | | } |
| | | } |
| | | |
| | | // when menu collapsed |
| | | .el-menu--vertical { |
| | | &>.el-menu { |
| | | .svg-icon { |
| | | margin-right: 16px; |
| | | } |
| | | .sub-el-icon { |
| | | margin-right: 12px; |
| | | margin-left: -2px; |
| | | } |
| | | } |
| | | |
| | | .nest-menu .el-submenu>.el-submenu__title, |
| | | .el-menu-item { |
| | | &:hover { |
| | | // you can use $subMenuHover |
| | | background-color: $menuHover !important; |
| | | } |
| | | } |
| | | |
| | | // the scroll bar appears when the subMenu is too long |
| | | >.el-menu--popup { |
| | | max-height: 100vh; |
| | | overflow-y: auto; |
| | | |
| | | &::-webkit-scrollbar-track-piece { |
| | | background: #d3dce6; |
| | | } |
| | | |
| | | &::-webkit-scrollbar { |
| | | width: 6px; |
| | | } |
| | | |
| | | &::-webkit-scrollbar-thumb { |
| | | background: #99a9bf; |
| | | border-radius: 20px; |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | // global transition css |
| | | |
| | | /* fade */ |
| | | .fade-enter-active, |
| | | .fade-leave-active { |
| | | transition: opacity 0.28s; |
| | | } |
| | | |
| | | .fade-enter, |
| | | .fade-leave-active { |
| | | opacity: 0; |
| | | } |
| | | |
| | | /* fade-transform */ |
| | | .fade-transform-leave-active, |
| | | .fade-transform-enter-active { |
| | | transition: all .5s; |
| | | } |
| | | |
| | | .fade-transform-enter { |
| | | opacity: 0; |
| | | transform: translateX(-30px); |
| | | } |
| | | |
| | | .fade-transform-leave-to { |
| | | opacity: 0; |
| | | transform: translateX(30px); |
| | | } |
| | | |
| | | /* breadcrumb transition */ |
| | | .breadcrumb-enter-active, |
| | | .breadcrumb-leave-active { |
| | | transition: all .5s; |
| | | } |
| | | |
| | | .breadcrumb-enter, |
| | | .breadcrumb-leave-active { |
| | | opacity: 0; |
| | | transform: translateX(20px); |
| | | } |
| | | |
| | | .breadcrumb-move { |
| | | transition: all .5s; |
| | | } |
| | | |
| | | .breadcrumb-leave-active { |
| | | position: absolute; |
| | | } |
New file |
| | |
| | | // sidebar |
| | | $menuText:#bfcbd9; |
| | | $menuActiveText:#409EFF; |
| | | $subMenuActiveText:#f4f4f5; //https://github.com/ElemeFE/element/issues/12951 |
| | | |
| | | $menuBg:#304156; |
| | | $menuHover:#263445; |
| | | |
| | | $subMenuBg:#1f2d3d; |
| | | $subMenuHover:#001528; |
| | | |
| | | $sideBarWidth: 210px; |
| | | |
| | | // the :export directive is the magic sauce for webpack |
| | | // https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass |
| | | :export { |
| | | menuText: $menuText; |
| | | menuActiveText: $menuActiveText; |
| | | subMenuActiveText: $subMenuActiveText; |
| | | menuBg: $menuBg; |
| | | menuHover: $menuHover; |
| | | subMenuBg: $subMenuBg; |
| | | subMenuHover: $subMenuHover; |
| | | sideBarWidth: $sideBarWidth; |
| | | } |
New file |
| | |
| | | /* |
| | | * @Author: your name |
| | | * @Date: 2021-09-13 14:28:39 |
| | | * @LastEditTime: 2023-08-24 17:30:55 |
| | | * @LastEditors: zhaoxiaoqiang 287285524@qq.com |
| | | * @Description: In User Settings Edit |
| | | * @FilePath: \cw_plat\src\utils\MenuUtils.js |
| | | */ |
| | | |
| | | // import Main from '../views/Main.vue'; |
| | | import Layout from '@/layout' |
| | | export default (arr) => { |
| | | // 这里之所以要重新遍历一下,是因为,通常我们动态路由的时候,是获取服务端数据, |
| | | // 这个component属性是一个字符串,或者可能连字段名都是其他的key |
| | | // 所以这里要做一些转换 |
| | | // 结构创建 |
| | | let data = arr ? arr : [] |
| | | console.log(data) |
| | | for (let i = 0, j = data.length; i < j; i++) { |
| | | if (data[i].childPowerInfos == null || data[i].childPowerInfos.length == 0) { |
| | | data[i].childPowerInfos = [{ |
| | | "childPowerInfos": [], |
| | | "btnInfos": data[i].btnInfos, |
| | | "powerId": data[i].powerId, |
| | | "powerName": data[i].powerName, |
| | | "routePath": data[i].routePath, |
| | | "routeName": data[i].routeName, |
| | | "routeComp": data[i].routeComp, |
| | | "iconPath": data[i].iconPath |
| | | }]; |
| | | data[i].routePath = data[i].routePath.split('-')[0]; |
| | | data[i].routeName =data[i].routeName?data[i].routeName.split('-')[0]:""; |
| | | data[i].routeComp = null; |
| | | } else if (data[i].childPowerInfos.length == 1) { |
| | | data[i].powerName = data[i].powerName; |
| | | data[i].iconPath = data[i].iconPath; |
| | | } |
| | | } |
| | | return generaMenu(data,false); |
| | | }; |
| | | |
| | | /** |
| | | * 将登陆后返回的菜单目录结构转化为当前的所需要的目录结构 |
| | | * @param routers 转化后的菜单数组 |
| | | * @param data 菜单数据源 |
| | | */ |
| | | function generaMenu(data) { |
| | | let routers = []; |
| | | let arr = data ? data : [] |
| | | |
| | | arr.forEach(item => { |
| | | let menu = {}; |
| | | menu.path = item.routePath; |
| | | menu.name = item.routeName; |
| | | menu.meta ={icon: item.iconPath,title:item.powerName} |
| | | if (item.routeComp) { |
| | | menu.component = resolve => {require(['@/views' + item.routeComp + '.vue'], resolve); }; |
| | | } else { |
| | | menu.component = Layout; |
| | | } |
| | | if (item.childPowerInfos instanceof Array && item.childPowerInfos.length) { |
| | | menu.children = generaMenu(item.childPowerInfos,true); |
| | | } else { |
| | | // debugger |
| | | // menu.children = []; |
| | | } |
| | | routers.push(menu); |
| | | }); |
| | | return routers; |
| | | } |
New file |
| | |
| | | /* |
| | | * @Author: zxq |
| | | * @Date: 2021-12-23 15:19:24 |
| | | * @LastEditors: zhaoxiaoqiang 287285524@qq.com |
| | | * @LastEditTime: 2023-08-24 15:52:53 |
| | | * @Description: Description |
| | | * @FilePath: \comn_plat\src\utils\auth.js |
| | | */ |
| | | import Cookies from 'js-cookie' |
| | | |
| | | const sessionId = 'QYPSESSIONID' |
| | | |
| | | export function getSessionId() { |
| | | return Cookies.get(sessionId) |
| | | } |
| | | |
| | | export function setSessionId(token) { |
| | | return Cookies.set(sessionId, token) |
| | | } |
| | | |
| | | export function removeSessionId() { |
| | | return Cookies.remove(sessionId) |
| | | } |
| | | |
| | | |
| | | const userName = 'qyp_user_name' |
| | | export function getUserName() { |
| | | return Cookies.get(userName) |
| | | } |
| | | |
| | | export function setUserName(name) { |
| | | return Cookies.set(userName, name) |
| | | } |
| | | |
| | | export function removeUserName() { |
| | | return Cookies.remove(userName) |
| | | } |
| | | |
| | | const userAccount = 'qyp_user_account' |
| | | export function getAccount() { |
| | | return Cookies.get(userAccount) |
| | | } |
| | | |
| | | export function setAccount(account) { |
| | | return Cookies.set(userAccount, account) |
| | | } |
| | | |
| | | export function removeAccount() { |
| | | return Cookies.remove(userAccount) |
| | | } |
| | | |
| | | export function removeBtnIds() { |
| | | return localStorage.removeItem('qyp_btnIds') |
| | | } |
| | | const roleName = 'qyp_role_name' |
| | | export function getRoleName() { |
| | | return Cookies.get(roleName) |
| | | } |
| | | export function removeRoleName() { |
| | | return Cookies.remove(roleName) |
| | | } |
| | | |
| | | export function setRoleName(account) { |
| | | return Cookies.set(roleName, account) |
| | | } |
| | | const userId = 'qyp_userId' |
| | | export function getUserId() { |
| | | return Cookies.get(userId) |
| | | } |
| | | export function removeUserId() { |
| | | return Cookies.remove(userId) |
| | | } |
| | | |
| | | export function setUserId(account) { |
| | | return Cookies.set(userId, account) |
| | | } |
New file |
| | |
| | | /** |
| | | * 按钮的权限控制,按钮数据源来至后台,此方模块用户筛选数据是否显示 |
| | | * @param btnId string 按钮编号 |
| | | * @returns {boolean} true 代表此按钮显示,反之不显示 |
| | | */ |
| | | import store from '@/store' |
| | | |
| | | const filterBtnById = btnId => { |
| | | btnId = btnId; |
| | | if (store.state.user.qyp_btnIds && btnId) { |
| | | if (store.state.user.qyp_btnIds.findIndex(item=>item.code==btnId) !== -1) { |
| | | return true; |
| | | } else { |
| | | return false; |
| | | } |
| | | } else { |
| | | return true; |
| | | } |
| | | } |
| | | const install = Vue => { |
| | | if (install.installed) return |
| | | install.installed = true |
| | | Object.defineProperties(Vue.prototype, { |
| | | filterBtnById: { |
| | | get() { |
| | | return filterBtnById |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | export default {install} |
| | | //export default { |
| | | // filterBtnById (btnId, vm) { |
| | | // if (btnId) { |
| | | // if (vm.$store.state.app.platBtn.indexOf (btnId) !== -1) { |
| | | // return true; |
| | | // } else { |
| | | // return false; |
| | | // } |
| | | // } else { |
| | | // return true; |
| | | // } |
| | | // } |
| | | //}; |
New file |
| | |
| | | /* |
| | | * @Author: 小明丶 |
| | | * @Date: 2019-10-25 10:17:56 |
| | | * @LastEditors: 小明丶 |
| | | * @LastEditTime: 2019-10-29 11:11:29 |
| | | * @Description: |
| | | */ |
| | | /** |
| | | * 时间格式化函数,如果没有传递格式就返回时间戳 |
| | | * @param date Date 对象 |
| | | * @param fmt 格式规范 |
| | | * @returns {*} |
| | | */ |
| | | |
| | | export default function(date, fmt) { |
| | | if (!date) { |
| | | return null; |
| | | } |
| | | if (typeof date === 'string') { |
| | | date = new Date(date.replace(/-/g, '/')); |
| | | } |
| | | if (typeof date === 'number') { |
| | | date = new Date(date); |
| | | } |
| | | if (fmt === undefined) { |
| | | return Number(date); |
| | | } else { |
| | | var o = { |
| | | 'M+': date.getMonth() + 1, |
| | | 'D+': date.getDate(), |
| | | 'h+': date.getHours() % 12 === 0 ? 12 : date.getHours() % 12, |
| | | 'H+': date.getHours(), |
| | | 'm+': date.getMinutes(), |
| | | 's+': date.getSeconds(), |
| | | 'q+': Math.floor((date.getMonth() + 3) / 3), |
| | | S: date.getMilliseconds() |
| | | }; |
| | | var week = { |
| | | '0': '\u65e5', |
| | | '1': '\u4e00', |
| | | '2': '\u4e8c', |
| | | '3': '\u4e09', |
| | | '4': '\u56db', |
| | | '5': '\u4e94', |
| | | '6': '\u516d' |
| | | }; |
| | | if (/(Y+)/.test(fmt)) { |
| | | fmt = fmt.replace( |
| | | RegExp.$1, |
| | | (date.getFullYear() + '').substr(4 - RegExp.$1.length) |
| | | ); |
| | | } |
| | | if (/(E+)/.test(fmt)) { |
| | | fmt = fmt.replace( |
| | | RegExp.$1, |
| | | (RegExp.$1.length > 1 |
| | | ? RegExp.$1.length > 2 ? '\u661f\u671f' : '\u5468' |
| | | : '') + week[date.getDay() + ''] |
| | | ); |
| | | } |
| | | for (var k in o) { |
| | | if (new RegExp('(' + k + ')').test(fmt)) { |
| | | fmt = fmt.replace( |
| | | RegExp.$1, |
| | | RegExp.$1.length === 1 |
| | | ? o[k] |
| | | : ('00' + o[k]).substr(('' + o[k]).length) |
| | | ); |
| | | } |
| | | } |
| | | return fmt; |
| | | } |
| | | } |
New file |
| | |
| | | /* |
| | | * @Author: zhouhao 787329763@qq.com |
| | | * @Date: 2023-03-07 09:24:05 |
| | | * @LastEditors: zhouhao 787329763@qq.com |
| | | * @LastEditTime: 2023-03-07 09:24:21 |
| | | * @FilePath: \qyp-plat\src\utils\directive.js |
| | | * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE |
| | | */ |
| | | //directive.js文件 |
| | | |
| | | import Vue from 'vue' |
| | | |
| | | // v-dialogDrag: 弹窗拖拽 |
| | | Vue.directive('dialogDrag', { |
| | | bind(el, binding, vnode, oldVnode) { |
| | | const dialogHeaderEl = el.querySelector('.el-dialog__header') |
| | | const dragDom = el.querySelector('.el-dialog') |
| | | dialogHeaderEl.style.cursor = 'move' |
| | | |
| | | // 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null); |
| | | const sty = dragDom.currentStyle || window.getComputedStyle(dragDom, null) |
| | | |
| | | dialogHeaderEl.onmousedown = (e) => { |
| | | // 鼠标按下,计算当前元素距离可视区的距离 |
| | | const disX = e.clientX - dialogHeaderEl.offsetLeft |
| | | const disY = e.clientY - dialogHeaderEl.offsetTop |
| | | |
| | | // 获取到的值带px 正则匹配替换 |
| | | let styL, styT |
| | | |
| | | // 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px |
| | | if (sty.left.includes('%')) { |
| | | styL = +document.body.clientWidth * (+sty.left.replace(/\%/g, '') / 100) |
| | | styT = +document.body.clientHeight * (+sty.top.replace(/\%/g, '') / 100) |
| | | } else { |
| | | styL = +sty.left.replace(/\px/g, '') |
| | | styT = +sty.top.replace(/\px/g, '') |
| | | } |
| | | |
| | | document.onmousemove = function(e) { |
| | | // 通过事件委托,计算移动的距离 |
| | | const l = e.clientX - disX |
| | | const t = e.clientY - disY |
| | | |
| | | // 移动当前元素 |
| | | dragDom.style.left = `${l + styL}px` |
| | | dragDom.style.top = `${t + styT}px` |
| | | |
| | | // 将此时的位置传出去 |
| | | // binding.value({x:e.pageX,y:e.pageY}) |
| | | } |
| | | |
| | | document.onmouseup = function(e) { |
| | | document.onmousemove = null |
| | | document.onmouseup = null |
| | | } |
| | | } |
| | | } |
| | | }) |
| | | |
| | | // v-dialogDragWidth: 弹窗宽度拖大 拖小 |
| | | Vue.directive('dialogDragWidth', { |
| | | bind(el, binding, vnode, oldVnode) { |
| | | const dragDom = binding.value.$el.querySelector('.el-dialog') |
| | | |
| | | el.onmousedown = (e) => { |
| | | // 鼠标按下,计算当前元素距离可视区的距离 |
| | | const disX = e.clientX - el.offsetLeft |
| | | |
| | | document.onmousemove = function(e) { |
| | | e.preventDefault() // 移动时禁用默认事件 |
| | | |
| | | // 通过事件委托,计算移动的距离 |
| | | const l = e.clientX - disX |
| | | dragDom.style.width = `${l}px` |
| | | } |
| | | |
| | | document.onmouseup = function(e) { |
| | | document.onmousemove = null |
| | | document.onmouseup = null |
| | | } |
| | | } |
| | | } |
| | | }) |
New file |
| | |
| | | /* |
| | | * @Author: 小明丶 |
| | | * @Date: 2019-10-25 10:17:56 |
| | | * @LastEditors: zhaoxiaoqiang 287285524@qq.com |
| | | * @LastEditTime: 2023-07-28 16:27:12 |
| | | * @Description: |
| | | */ |
| | | /** |
| | | * 作者:c.k |
| | | * 文件说明: |
| | | * Creeated by c.k on 2018/2/7 |
| | | * |
| | | */ |
| | | import dateForm from './date' |
| | | |
| | | export default { |
| | | /** |
| | | * excel 文件下载参数配置 |
| | | * @param data 参数 |
| | | * @param apiuURL 访问地址 |
| | | * @returns {[null,null]} |
| | | */ |
| | | configDate: function(res, parFilename, from) { |
| | | console.log(res) |
| | | // console.log(parFilename) |
| | | let fileNamet =/\.{1}[A-Za-z]{1,}$/.exec(res.headers['content-disposition']) |
| | | let blob = new Blob([res.data], { |
| | | type: 'application/vnd.ms-excel' |
| | | }); |
| | | let fileName = ''; |
| | | let prefix = fileNamet[0]; |
| | | if(parFilename==undefined&& from !== 'overDay'){ |
| | | fileName = dateForm(new Date(), 'YYYY-MM-DD') + prefix; |
| | | } |
| | | if (parFilename != undefined && from !== 'overDay') { |
| | | fileName = parFilename + '_' + dateForm(new Date(), 'YYYYMMDDHHssmm') + prefix; |
| | | } |
| | | if (parFilename != undefined && from === 'overDay') { |
| | | fileName = `${parFilename}_${dateForm((dateForm(new Date()) - 24*60*60*1000), 'YYYYMMDD')}${prefix}` |
| | | console.log(fileName) |
| | | } |
| | | // let fileName = res.headers['content-disposition'].match(/fushun(\S*)xls/)[0]; |
| | | function downFile(blob, fileName) { |
| | | if (window.navigator.msSaveOrOpenBlob) { |
| | | navigator.msSaveBlob(blob, fileName); |
| | | console.log(1) |
| | | } else { |
| | | console.log(2) |
| | | // let objectUrl = URL.createObjectURL(blob); |
| | | // window.location.href = objectUrl; |
| | | let link = document.createElement('a'); |
| | | link.href = window.URL.createObjectURL(blob); |
| | | link.download = fileName; |
| | | // appendChild这个是为了解决火狐浏览器下载的兼容问题,火狐必须append到html中 |
| | | document.body.appendChild(link); |
| | | link.click(); |
| | | document.body.removeChild(link); |
| | | window.URL.revokeObjectURL(link.href); |
| | | } |
| | | } |
| | | |
| | | downFile(blob, fileName); |
| | | }, |
| | | configDate2: function(res, parFilename, from) { |
| | | console.log(res); |
| | | // let fileNamet =/\.{1}[A-Za-z]{1,}$/.exec(res.headers['content-disposition']); |
| | | let blob = new Blob([res.data], {type: 'application/vnd.ms-excel'}); |
| | | let fileName = parFilename?parFilename:""; |
| | | function downFile(blob, fileName) { |
| | | // console.log(blob) |
| | | if (window.navigator.msSaveOrOpenBlob) { |
| | | navigator.msSaveBlob(blob, fileName); |
| | | } else { |
| | | // let objectUrl = URL.createObjectURL(blob); |
| | | // window.location.href = objectUrl; |
| | | let link = document.createElement('a'); |
| | | link.href = window.URL.createObjectURL(blob); |
| | | link.download = fileName; |
| | | // appendChild这个是为了解决火狐浏览器下载的兼容问题,火狐必须append到html中 |
| | | document.body.appendChild(link); |
| | | link.click(); |
| | | document.body.removeChild(link); |
| | | window.URL.revokeObjectURL(link.href); |
| | | } |
| | | } |
| | | |
| | | downFile(blob, fileName); |
| | | }, |
| | | configDate3: function(res, parFilename, from) { |
| | | console.log(parFilename,123123) |
| | | let blob = new Blob([res], { |
| | | type: 'application/zip' |
| | | }); |
| | | let fileName = ''; |
| | | let prefix = '.zip'; |
| | | if (parFilename != undefined && from !== 'overDay') { |
| | | fileName = parFilename + '_' + dateForm(new Date(), 'YYYYMMDDHHssmm') + prefix; |
| | | } |
| | | if (parFilename != undefined && from === 'overDay') { |
| | | fileName = `${parFilename}_${dateForm((dateForm(new Date()) - 24*60*60*1000), 'YYYYMMDD')}${prefix}` |
| | | console.log(fileName) |
| | | } |
| | | // let fileName = res.headers['content-disposition'].match(/fushun(\S*)xls/)[0]; |
| | | function downFile(blob, fileName) { |
| | | if (window.navigator.msSaveOrOpenBlob) { |
| | | navigator.msSaveBlob(blob, fileName); |
| | | console.log(1) |
| | | } else { |
| | | console.log(2) |
| | | // let objectUrl = URL.createObjectURL(blob); |
| | | // window.location.href = objectUrl; |
| | | let link = document.createElement('a'); |
| | | link.href = window.URL.createObjectURL(blob); |
| | | link.download = fileName; |
| | | // appendChild这个是为了解决火狐浏览器下载的兼容问题,火狐必须append到html中 |
| | | document.body.appendChild(link); |
| | | link.click(); |
| | | document.body.removeChild(link); |
| | | window.URL.revokeObjectURL(link.href); |
| | | } |
| | | } |
| | | |
| | | downFile(blob, fileName); |
| | | }, |
| | | downexcelModel:function(url,name) { |
| | | var a = document.createElement("a"); //页面上创建一个标签 |
| | | var str = process.env.NODE_ENV == "development" ? "t.finlean.com" : window.location.host |
| | | a.style.display = "none"; |
| | | a.setAttribute("href",`https://${str}${url}`); |
| | | a.setAttribute("download", name); //设置a 标签的download 属性,并限定下载文件名。 |
| | | a.click(); //出发a点击事件,下载文件 |
| | | } |
| | | } |
New file |
| | |
| | | import defaultSettings from '@/settings' |
| | | |
| | | const title = defaultSettings.title || 'Vue Admin Template' |
| | | |
| | | export default function getPageTitle(pageTitle) { |
| | | if (pageTitle) { |
| | | return `${pageTitle} - ${title}` |
| | | } |
| | | return `${title}` |
| | | } |
New file |
| | |
| | | /** |
| | | * Created by PanJiaChen on 16/11/18. |
| | | */ |
| | | |
| | | /** |
| | | * Parse the time to string |
| | | * @param {(Object|string|number)} time |
| | | * @param {string} cFormat |
| | | * @returns {string | null} |
| | | */ |
| | | export function parseTime(time, cFormat) { |
| | | if (arguments.length === 0 || !time) { |
| | | return null |
| | | } |
| | | const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}' |
| | | let date |
| | | if (typeof time === 'object') { |
| | | date = time |
| | | } else { |
| | | if ((typeof time === 'string')) { |
| | | if ((/^[0-9]+$/.test(time))) { |
| | | // support "1548221490638" |
| | | time = parseInt(time) |
| | | } else { |
| | | // support safari |
| | | // https://stackoverflow.com/questions/4310953/invalid-date-in-safari |
| | | time = time.replace(new RegExp(/-/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(/{([ymdhisa])+}/g, (result, key) => { |
| | | const value = formatObj[key] |
| | | // Note: getDay() returns 0 on Sunday |
| | | if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value ] } |
| | | return value.toString().padStart(2, '0') |
| | | }) |
| | | return time_str |
| | | } |
| | | |
| | | /** |
| | | * @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 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 |
| | | } |
New file |
| | |
| | | /* |
| | | * @Author: 小明丶 |
| | | * @Date: 2019-10-25 10:17:56 |
| | | * @LastEditors: zxq |
| | | * @LastEditTime: 2022-01-06 14:38:14 |
| | | * @Description: |
| | | */ |
| | | /** |
| | | * Created by 陈伟 |
| | | * 2017/11/21. |
| | | * 登录所有传参数接口验签 |
| | | */ |
| | | import validator from './validator'; |
| | | import md5 from 'js-md5'; |
| | | |
| | | export default { |
| | | signForFormDataOrUrl (datas, isUrl, loginSessionID) { |
| | | if (validator.checkValEmpty(loginSessionID)) { // 判断登录的sessionId |
| | | return datas; |
| | | } |
| | | let params = {}; |
| | | if (datas === null || datas === '' || JSON.stringify(datas) =="{}") { // 如果参数为空 ,那就对sessinoId md5 jttechSign |
| | | params.jttechSign = md5 (loginSessionID); |
| | | return params; |
| | | } |
| | | let keySort = []; |
| | | params = datas; |
| | | if (params) { // 将参数中的 key 取出来放入到一个新数组里 |
| | | for (let key in params ) { |
| | | if(key != 'jttechSign'){ |
| | | keySort[keySort.length] = key; |
| | | } |
| | | } |
| | | } |
| | | if (isUrl) { // 如果为 post 请求 就 进行 sort 排序 |
| | | keySort.sort (); |
| | | } |
| | | // 普通参数的值(非空、非空字符串、非数组) |
| | | let ordinaryParamVal = ''; |
| | | for (let index in keySort) { |
| | | for (let param in params) { |
| | | if (param === keySort[index] && params[param] !== null && !Array.isArray (params[param])) { |
| | | if (params[param] instanceof String) { |
| | | if (params[param].toString ().replace (/(^\s*)|(\s*$)/g, '') !== '') { |
| | | ordinaryParamVal += params[param]; |
| | | } |
| | | } |
| | | else { |
| | | ordinaryParamVal += params[param]; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if (!validator.checkValEmpty (loginSessionID)) { |
| | | ordinaryParamVal = md5 (ordinaryParamVal + loginSessionID); |
| | | } |
| | | params.jttechSign = ordinaryParamVal; |
| | | return params; |
| | | } |
| | | }; |
New file |
| | |
| | | import axios from 'axios' |
| | | // import { MessageBox, Message } from 'element-ui' |
| | | import { Loading } from 'element-ui' |
| | | import { getSessionId } from '@/utils/auth' |
| | | import sign from '@/utils/loginSign'; |
| | | import {showTipOfStatuCode} from './statusCodeManage' |
| | | |
| | | |
| | | let loading //定义loading变量 |
| | | function startLoading() { //使用Element loading-start 方法 |
| | | loading = Loading.service({ |
| | | lock: true, |
| | | text: '加载中……', |
| | | background: 'rgba(0, 0, 0, 0.7)' |
| | | }) |
| | | } |
| | | function endLoading() { //使用Element loading-close 方法 |
| | | loading.close() |
| | | } |
| | | //那么 showFullScreenLoading() tryHideFullScreenLoading() 要干的事儿就是将同一时刻的请求合并。 |
| | | //声明一个变量 needLoadingRequestCount,每次调用showFullScreenLoading方法 needLoadingRequestCount + 1。 |
| | | //调用tryHideFullScreenLoading()方法,needLoadingRequestCount - 1。needLoadingRequestCount为 0 时,结束 loading。 |
| | | let needLoadingRequestCount = 0 |
| | | export function showFullScreenLoading() { |
| | | if (needLoadingRequestCount === 0) { |
| | | startLoading() |
| | | } |
| | | needLoadingRequestCount++ |
| | | } |
| | | |
| | | export function tryHideFullScreenLoading() { |
| | | if (needLoadingRequestCount <= 0) return |
| | | needLoadingRequestCount-- |
| | | if (needLoadingRequestCount === 0) { |
| | | endLoading() |
| | | } |
| | | } |
| | | |
| | | |
| | | // import StatusCodeManage from './statusCodeManage'; |
| | | // create an axios instance |
| | | const service = axios.create({ |
| | | baseURL: '/flp', |
| | | timeout: 300000 // request timeout |
| | | }) |
| | | |
| | | // request interceptor |
| | | let configs |
| | | service.interceptors.request.use( |
| | | config => { |
| | | configs=config |
| | | if (config.method === 'post') { |
| | | // post 封装数据 |
| | | if (typeof config.data !== 'object') { |
| | | config.data = {}; |
| | | } |
| | | } else if (config.method === 'get') { |
| | | // get 封装数据 |
| | | if (config.params === undefined) { |
| | | config.params = {}; |
| | | } |
| | | // config.params['mblNo'] = config.mblNo; |
| | | } |
| | | let sessionID = getSessionId(); |
| | | // 验签 用于所有没有登录并传递有电话号码的接口验签 |
| | | if (sessionID === null) { |
| | | } else { |
| | | // 参数签名 |
| | | // 必须由http或https开头的请求,才会进行自动签名组装 |
| | | if (config.params) { |
| | | config.params = sign.signForFormDataOrUrl( |
| | | config.params, |
| | | true, |
| | | sessionID |
| | | ); |
| | | } else if (config.data) { |
| | | config.data = sign.signForFormDataOrUrl( |
| | | config.data, |
| | | false, |
| | | sessionID |
| | | ); |
| | | } else { |
| | | if (config.method === 'GET') { |
| | | config.params = sign.signForFormDataOrUrl( |
| | | config.data, |
| | | false, |
| | | sessionID |
| | | ); |
| | | } else { |
| | | config.data = sign.signForFormDataOrUrl( |
| | | config.data, |
| | | false, |
| | | sessionID |
| | | ); |
| | | } |
| | | } |
| | | } |
| | | // ================end =================== |
| | | // if (store.getters.token) { |
| | | // // let each request carry token |
| | | // // ['X-Token'] is a custom headers key |
| | | // // please modify it according to the actual situation |
| | | // config.headers['X-Token'] = getSessionId() |
| | | // } |
| | | showFullScreenLoading() |
| | | return config |
| | | }, |
| | | error => { |
| | | // do something with request error |
| | | console.log(error) // for debug |
| | | tryHideFullScreenLoading() |
| | | return Promise.reject(error) |
| | | } |
| | | ) |
| | | |
| | | // response interceptor |
| | | service.interceptors.response.use( |
| | | /** |
| | | * If you want to get http information such as headers or status |
| | | * Please return response => response |
| | | */ |
| | | |
| | | /** |
| | | * Determine the request status by custom code |
| | | * Here is just an example |
| | | * You can also judge the status by HTTP Status Code |
| | | */ |
| | | response => { |
| | | const res = response.data; |
| | | tryHideFullScreenLoading() |
| | | if(configs.method=='get'){ |
| | | return response; |
| | | }else{ |
| | | return res; |
| | | } |
| | | |
| | | }, |
| | | error => { |
| | | tryHideFullScreenLoading() |
| | | showTipOfStatuCode(error); |
| | | return Promise.reject(error); |
| | | } |
| | | ) |
| | | |
| | | export default service |
New file |
| | |
| | | import meunUtils from '@/utils/MenuUtils'; |
| | | import router from '@/router' |
| | | let _router = (JSON.parse(window.localStorage.getItem('qyp_routers'))); |
| | | router.options.routes = []; |
| | | if (_router) { |
| | | let tempMenu = JSON.parse(window.localStorage.getItem('qyp_routers')); |
| | | let data = tempMenu ? tempMenu : []; |
| | | let _router = meunUtils(data); |
| | | router.addRoutes(_router); |
| | | router.options.routes = router.options.routes.concat(_router) |
| | | } |
New file |
| | |
| | | /* |
| | | * @Author: zhaoxiaoqiang 287285524@qq.com |
| | | * @Date: 2023-04-11 15:30:24 |
| | | * @LastEditors: zhaoxiaoqiang 287285524@qq.com |
| | | * @LastEditTime: 2023-07-11 16:23:02 |
| | | * @FilePath: \qyp_finlean_plat\src\utils\statusCodeManage.js |
| | | * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE |
| | | */ |
| | | import { Message } from 'element-ui'; |
| | | import router from '../router' |
| | | import { MessageBox } from 'element-ui'; |
| | | import { removeSessionId,removeUserName } from '@/utils/auth' |
| | | |
| | | |
| | | export function showTipOfStatuCode(error){ |
| | | // get请求的登录超时的拦截(用于excel和zip的下载拦截) |
| | | if ( |
| | | error.response.request.responseType === 'arraybuffer' |
| | | ) { |
| | | const blob = new Blob([error.response.data], { |
| | | type: 'text/plain' |
| | | }); |
| | | let downloadResult; |
| | | const reader = new FileReader(); |
| | | reader.readAsText(blob, 'utf-8'); |
| | | reader.onload = function (){ |
| | | downloadResult = JSON.parse(reader.result); |
| | | if ( |
| | | Number(downloadResult.status) === 90040006 || |
| | | Number(downloadResult.status) === 90040014 |
| | | ) { |
| | | // 单点登录控制 |
| | | // Cookies.remove('scene_stag_bus_user'); |
| | | // Cookies.remove('scene_stag_bus_sid'); |
| | | // router.push({name: 'login'}); |
| | | |
| | | MessageBox.alert('登录超时,请重新登录', '提示', { |
| | | confirmButtonText: '确定', |
| | | showClose:false, |
| | | callback: action => { |
| | | localStorage.removeItem("qyp_routers") |
| | | removeSessionId() |
| | | removeUserName() |
| | | router.push({path:'/login'}); |
| | | throw SyntaxError(); |
| | | } |
| | | }); |
| | | } else if (downloadResult.status === -999) { |
| | | Message.error('系统异常,请稍后重试'); |
| | | } else { |
| | | // Vue.prototype.$Modal.warning({ |
| | | // title: '提示', |
| | | // content:downloadResult.errMsg ? downloadResult.errMsg : downloadResult.message, |
| | | // }); |
| | | Message.error( downloadResult.errMsg ? downloadResult.errMsg : downloadResult.message) |
| | | } |
| | | }; |
| | | } else { |
| | | // 对应post的拦截 |
| | | const _errorCode = error.response.data.errorCode; |
| | | if (_errorCode === 99 || error.response.data.status === 90040006) { |
| | | // 单点登录控制 |
| | | // Cookies.remove('scene_stag_bus_user'); |
| | | // Cookies.remove('scene_stag_bus_sid'); |
| | | // router.push({name: 'login'}) |
| | | // Message.error('登录超时,请重新登录'); |
| | | MessageBox.alert('登录超时,请重新登录', '提示', { |
| | | confirmButtonText: '确定', |
| | | showClose:false, |
| | | callback: action => { |
| | | localStorage.removeItem("qyp_routers") |
| | | removeSessionId() |
| | | removeUserName() |
| | | router.push({path:'/login'}); |
| | | throw SyntaxError(); |
| | | } |
| | | }); |
| | | |
| | | } else if (_errorCode === 11004) { |
| | | // |
| | | this.alertModule('', error.response.data.errMsg); |
| | | } else if (_errorCode === -999) { |
| | | // |
| | | Message.error('系统异常,请稍后重试'); |
| | | } else { |
| | | let _msg = '网络异常,请稍后重试'; |
| | | if (error.response.data.errMsg) { |
| | | _msg = error.response.data.errMsg; |
| | | } else if (error.response.data.message) { |
| | | _msg = error.response.data.message; |
| | | } |
| | | Message.error( _msg); |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | /** |
| | | * Created by PanJiaChen on 16/11/18. |
| | | */ |
| | | |
| | | /** |
| | | * @param {string} path |
| | | * @returns {Boolean} |
| | | */ |
| | | |
| | | import checkData from '@/utils/validator.js' |
| | | 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 |
| | | } |
| | | |
| | | export var checkphone = (rule, value, callback) => { |
| | | if (value == "") { |
| | | callback(new Error("请输入手机号")); |
| | | } else if (!checkData.checkPhone(value)) {//引入methods中封装的检查手机格式的方法 |
| | | callback(new Error("请输入正确的手机号!")); |
| | | } else { |
| | | callback(); |
| | | } |
| | | }; |
| | | export var checkBankNo = (rule, value, callback) => { |
| | | if (value == "") { |
| | | callback(new Error("请输入银行卡号")); |
| | | } else if (!checkData.bankCard(value)) {//引入methods中封装的检查手机格式的方法 |
| | | callback(new Error("请输入正确的银行卡号!")); |
| | | } else { |
| | | callback(); |
| | | } |
| | | }; |
| | | export var checkIdCard = (rule, value, callback) => { |
| | | if (value == "") { |
| | | callback(new Error("身份证号不能为空")); |
| | | } else if (! /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/.test( value)) {//引入methods中封装的检查手机格式的方法 |
| | | callback(new Error("身份证号码格式错误!")); |
| | | } else { |
| | | callback(); |
| | | } |
| | | }; |
| | | export function getBase64(file) { //文件转base64 |
| | | return new Promise((resolve, reject) => { |
| | | let reader = new FileReader(); |
| | | let fileResult = ""; |
| | | reader.readAsDataURL(file); |
| | | //开始转 |
| | | reader.onload = function() { |
| | | fileResult = reader.result; |
| | | }; |
| | | //转 失败 |
| | | reader.onerror = function(error) { |
| | | reject(error); |
| | | }; |
| | | //转 结束 咱就 resolve 出去 |
| | | reader.onloadend = function() { |
| | | resolve(fileResult); |
| | | }; |
| | | }); |
| | | }; |
| | | |
| | | // 压缩图片 |
| | | export function imgShrink(file,imgWidth,imgHeight) { |
| | | return new Promise(function(resolve, reject) { |
| | | let imgResult = "" |
| | | var width = imgWidth //图像大小 |
| | | var height = imgHeight//图像大小 |
| | | let reader = new FileReader(); |
| | | reader.readAsDataURL(file); |
| | | reader.onload = function() { |
| | | let img = new Image(); |
| | | img.src = this.result; |
| | | let quality = 0.9, //图像质量 取值0-1 值越小,所绘制出的图像越模糊 |
| | | canvas = document.createElement("canvas"), |
| | | drawer = canvas.getContext("2d"); |
| | | img.onload = function () { |
| | | canvas.width = width||img.width; |
| | | canvas.height = height||img.height; |
| | | drawer.drawImage(img, 0, 0, canvas.width, canvas.height); |
| | | // 返回base64 |
| | | imgResult = canvas.toDataURL("image/png", quality); |
| | | resolve(imgResult); |
| | | } |
| | | }; |
| | | reader.onerror = function(error) { |
| | | reject(error); |
| | | }; |
| | | }); |
| | | } |
| | | |
| | | |
| | | export function compactObj (obj, fn) { |
| | | for (var i in obj) { |
| | | if (typeof obj[i] === 'object') { |
| | | compactObj(obj[i], fn) |
| | | } |
| | | if (fn(obj[i])) { |
| | | delete obj[i] |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 删除空对象 删除'', null, undefined |
| | | export function isEmpty (foo) { |
| | | if (typeof foo === 'object') { |
| | | for (var i in foo) { |
| | | return false |
| | | } |
| | | return true |
| | | } else { |
| | | return foo === '' || foo === null || foo === undefined |
| | | } |
| | | } |
| | | |
New file |
| | |
| | | /** |
| | | * 2018-3-9 |
| | | * 这是一个用于存放正则表达式和一些验证方法的插件 |
| | | * 除了存放了目前常用的正则之外,还根据这些正则封装了对应的验证方法 |
| | | */ |
| | | export default { |
| | | formatMoney(str) { |
| | | // 如果未空的话,默认采用0.00 |
| | | if (this.checkValEmpty(str)) { |
| | | return '0.00'; |
| | | } |
| | | // 金额格式化 |
| | | str = str + ''; |
| | | let newStr = ''; |
| | | let count = 0; |
| | | if (str.indexOf('.') === -1) { |
| | | for (let i = str.length - 1; i >= 0; i--) { |
| | | if (count % 3 === 0 && count !== 0) { |
| | | newStr = str.charAt(i) + ',' + newStr; |
| | | } else { |
| | | newStr = str.charAt(i) + newStr; |
| | | } |
| | | count++; |
| | | } |
| | | str = newStr + '.00'; // 自动补小数点后两位 |
| | | return str; |
| | | } else { |
| | | for (let i = str.indexOf('.') - 1; i >= 0; i--) { |
| | | if (count % 3 === 0 && count !== 0) { |
| | | newStr = str.charAt(i) + ',' + newStr; |
| | | } else { |
| | | newStr = str.charAt(i) + newStr; // 逐个字符相接起来 |
| | | } |
| | | count++; |
| | | } |
| | | str = newStr + (str + '00').substr((str + '00').indexOf('.'), 3); |
| | | return str; |
| | | } |
| | | }, |
| | | // 身份证中间 隐藏 |
| | | cardIDHide(cardid) { |
| | | // 身份证 中间用* 显示 |
| | | if (cardid) { |
| | | return cardid.replace(/^(.{6})(?:\d+)(.{4})$/, '$1****$2'); |
| | | } else { |
| | | return ''; |
| | | } |
| | | }, |
| | | checkEmail(email) { |
| | | // 验证邮箱格式 |
| | | let reg = /^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z]+)+$/; |
| | | return reg.test(email); |
| | | }, |
| | | checkVerifyCode(code) { |
| | | // 验证验证码格式 |
| | | let reg = /^\d{6}$/; |
| | | return reg.test(code); |
| | | }, |
| | | checkDynamicCode(code) { |
| | | // 验证邀请码格式 |
| | | let reg = /^[A-Za-z0-9]{4}$/; |
| | | return reg.test(code); |
| | | }, |
| | | // password check |
| | | checkPassword(password) { |
| | | // 验证密码格式 |
| | | let reg = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/; |
| | | return reg.test(password); |
| | | }, |
| | | // name check |
| | | checkName(name) { |
| | | // 验证用户名格式 |
| | | let reg = /^[\u4e00-\u9fa5]{2,17}$/; |
| | | return reg.test(name); |
| | | }, |
| | | // 账户名称的正则表达式 |
| | | checkUsername(name) { |
| | | let reg = /^[\u4e00-\u9fa50-9a-zA-Z]{4,16}$/; |
| | | return reg.test(name); |
| | | }, |
| | | // 银行卡的正则表达式 |
| | | checkBankNo(No) { |
| | | let reg = /^([1-9]{1})(\d{15}|\d{18})$/; |
| | | return reg.test(No); |
| | | }, |
| | | // 统一验证 |
| | | checkCommonField(name) { |
| | | let reg = /^[\u4e00-\u9fa50-9a-zA-Z]{4,30}$/; |
| | | return reg.test(name); |
| | | }, |
| | | // idCard check |
| | | checkIDCard(idCard) { |
| | | // 验证身份证格式 |
| | | if (idCard.length === 18) { |
| | | let reg = /^\d{17}[\d|X|x]$/; |
| | | return reg.test(idCard); |
| | | } else if (idCard.length === 15) { |
| | | let reg = /^\d{15}$/; |
| | | return reg.test(idCard); |
| | | } else { |
| | | return false; |
| | | } |
| | | }, |
| | | checkValEmpty(str) { |
| | | // 验证是否为空 |
| | | if ( |
| | | str === undefined || |
| | | str === null || |
| | | str.length <= 0 || |
| | | str === 'undefined' |
| | | ) { |
| | | return true; |
| | | } else { |
| | | return false; |
| | | } |
| | | }, |
| | | // 验证佣金输入金额 |
| | | checkCommission(commission) { |
| | | // 小于100且后面可以带4个小数点 |
| | | let reg = /^100$|^(\d|[1-9]\d)(\.\d{1,4})*$/; |
| | | //一亿以内,保留四位小数 |
| | | // /^([1-9]\d{0,7}|0)(\.\d{1,4})?$/ |
| | | // 如果通过的话,那么判断小数点的前几位数字 |
| | | return reg.test(commission); |
| | | }, |
| | | // 验证渠道编号是否符合规则--4-8位以内数字+字母,区分大小写 |
| | | checkChannelNo(channelNo) { |
| | | let reg = /^[\w\d]{4,8}$/; |
| | | return reg.test(channelNo); |
| | | }, |
| | | //验证是否包含空格 |
| | | checkSpace(val) { |
| | | let reg = /^\s+$/; |
| | | if (reg.test(val)) { |
| | | return true; |
| | | } else { |
| | | return false; |
| | | } |
| | | }, |
| | | //将发送请求中的参数格式化,如果为空则转为null |
| | | formatReq(obj) { |
| | | for (let i in obj) { |
| | | let item = obj[i]; |
| | | if (item === null) continue; |
| | | if ( |
| | | item === undefined || |
| | | item === '' || |
| | | item === 'undefined' || |
| | | item.length <= 0 || |
| | | JSON.stringify(item) == '{}' |
| | | ) { |
| | | obj[i] = null; |
| | | } |
| | | } |
| | | return obj; |
| | | }, |
| | | // 中文正则表达式 |
| | | checkChineseCharacter(str) { |
| | | let reg = /^[\u4e00-\u9fa5]{2,}$/; |
| | | return reg.test(str); |
| | | }, |
| | | cardIDHide(cardid) { |
| | | // 身份证 中间用* 显示 |
| | | if (cardid) { |
| | | return cardid.replace(/^(.{6})(?:\d+)(.{4})$/, '$1****$2'); |
| | | } else { |
| | | return ''; |
| | | } |
| | | }, |
| | | checkPhone(phone) { |
| | | // 验证电话号码格式 |
| | | let reg = /^1[3456789]\d{9}$/; |
| | | return reg.test(phone); |
| | | }, |
| | | checkEmail(email) { |
| | | // 验证邮箱格式 |
| | | let reg = /^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z]+)+$/; |
| | | return reg.test(email); |
| | | }, |
| | | checkVerifyCode(code) { |
| | | // 验证验证码格式 |
| | | let reg = /^\d{6}$/; |
| | | return reg.test(code); |
| | | }, |
| | | checkDynamicCode(code) { |
| | | // 验证邀请码格式 |
| | | let reg = /^[A-Za-z0-9]{4}$/; |
| | | return reg.test(code); |
| | | }, |
| | | // password check |
| | | checkPassword(password) { |
| | | // 验证密码格式 |
| | | let reg = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/; |
| | | return reg.test(password); |
| | | }, |
| | | // name check |
| | | checkName(name) { |
| | | // 验证用户名格式 |
| | | let reg = /^[\u4e00-\u9fa5]{2,17}$/; |
| | | return reg.test(name); |
| | | }, |
| | | // 账户名称的正则表达式 |
| | | checkUsername(name) { |
| | | let reg = /^[\u4e00-\u9fa50-9a-zA-Z]{4,16}$/; |
| | | return reg.test(name); |
| | | }, |
| | | // 统一验证 |
| | | checkCommonField(name) { |
| | | let reg = /^[\u4e00-\u9fa50-9a-zA-Z]{4,30}$/; |
| | | return reg.test(name); |
| | | }, |
| | | // idCard check |
| | | checkIDCard(idCard) { |
| | | // 验证身份证格式 |
| | | if (idCard.length === 18) { |
| | | let reg = /^\d{17}[\d|X|x]$/; |
| | | return reg.test(idCard); |
| | | } else if (idCard.length === 15) { |
| | | let reg = /^\d{15}$/; |
| | | return reg.test(idCard); |
| | | } else { |
| | | return false; |
| | | } |
| | | }, |
| | | checkValEmpty(str) { |
| | | // 验证是否为空 |
| | | if ( |
| | | str === undefined || |
| | | str === null || |
| | | str.length <= 0 || |
| | | str === 'undefined' |
| | | ) { |
| | | return true; |
| | | } else { |
| | | return false; |
| | | } |
| | | }, |
| | | // 验证佣金输入金额 |
| | | checkCommission(commission) { |
| | | // 小于100且后面可以带4个小数点 |
| | | let reg = /^100$|^(\d|[1-9]\d)(\.\d{1,4})*$/; |
| | | //一亿以内,保留四位小数 |
| | | // /^([1-9]\d{0,7}|0)(\.\d{1,4})?$/ |
| | | // 如果通过的话,那么判断小数点的前几位数字 |
| | | return reg.test(commission); |
| | | }, |
| | | // 验证渠道编号是否符合规则--4-8位以内数字+字母,区分大小写 |
| | | checkChannelNo(channelNo) { |
| | | let reg = /^[\w\d]{4,8}$/; |
| | | return reg.test(channelNo); |
| | | }, |
| | | //验证是否包含空格 |
| | | checkSpace(val) { |
| | | let reg = /^\s+$/; |
| | | if (reg.test(val)) { |
| | | return true; |
| | | } else { |
| | | return false; |
| | | } |
| | | }, |
| | | //电话脱敏 |
| | | //姓名脱敏 |
| | | // 自定义组件的整数的验证 |
| | | checkCustomNumberField(number) { |
| | | let reg = /^\d{1,9}$/; |
| | | return reg.test(number); |
| | | }, |
| | | // new password check (新版的密码规则,可以是纯数字, 但是必须包含数字,只能是数字或者数字+字母,6到16位) |
| | | checkNewPassword(password) { |
| | | let reg = /^(?=[a-zA-Z0-9]*[0-9])[a-zA-Z0-9]{6,16}$/; |
| | | return reg.test(password); |
| | | }, |
| | | debounce(method, delay) { |
| | | let timer = null; |
| | | return function () { |
| | | let context = this, |
| | | args = arguments; |
| | | |
| | | clearTimeout(timer); |
| | | timer = setTimeout(function () { |
| | | method.apply(context, args); |
| | | }, delay); |
| | | } |
| | | }, |
| | | //银行卡验证 |
| | | bankCard(iccid){ |
| | | let initCard = iccid; |
| | | var s1 = 0, |
| | | s2 = 0; |
| | | iccid = iccid.substring(0, iccid.length - 1); |
| | | var reverse = ''; |
| | | for (var i = iccid.length; i > 0; i--) { |
| | | reverse += iccid.charAt(i - 1); |
| | | } |
| | | for (i = 0; i < reverse.length; i++) { |
| | | var digit = parseInt(reverse.charAt(i), 10); |
| | | if (i % 2 != 0) { |
| | | // this is for odd digits, they are 1-indexed in the |
| | | // algorithm |
| | | s1 += digit; |
| | | } else { |
| | | // add 2 * digit for 0-4, add 2 * digit - 9 for 5-9 |
| | | s2 += 2 * digit; |
| | | if (digit >= 5) { |
| | | s2 -= 9; |
| | | } |
| | | } |
| | | } |
| | | var sum = 10 - ((s1 + s2) % 10); |
| | | if (sum === 10) { |
| | | sum = 0; |
| | | } |
| | | return iccid + sum == initCard; |
| | | } |
| | | }; |
New file |
| | |
| | | <template> |
| | | <div class="wscn-http404-container"> |
| | | <div class="wscn-http404"> |
| | | <div class="pic-404"> |
| | | <img class="pic-404__parent" src="@/assets/404_images/404.png" alt="404"> |
| | | <img class="pic-404__child left" src="@/assets/404_images/404_cloud.png" alt="404"> |
| | | <img class="pic-404__child mid" src="@/assets/404_images/404_cloud.png" alt="404"> |
| | | <img class="pic-404__child right" src="@/assets/404_images/404_cloud.png" alt="404"> |
| | | </div> |
| | | <div class="bullshit"> |
| | | <div class="bullshit__oops">OOPS!</div> |
| | | <div class="bullshit__info">All rights reserved |
| | | <a style="color:#20a0ff" href="https://wallstreetcn.com" target="_blank">wallstreetcn</a> |
| | | </div> |
| | | <div class="bullshit__headline">{{ message }}</div> |
| | | <div class="bullshit__info">Please check that the URL you entered is correct, or click the button below to return to the homepage.</div> |
| | | <a href="" class="bullshit__return-home">Back to home</a> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | |
| | | export default { |
| | | name: 'Page404', |
| | | computed: { |
| | | message() { |
| | | return 'The webmaster said that you can not enter this page...' |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .wscn-http404-container{ |
| | | transform: translate(-50%,-50%); |
| | | position: absolute; |
| | | top: 40%; |
| | | left: 50%; |
| | | } |
| | | .wscn-http404 { |
| | | position: relative; |
| | | width: 1200px; |
| | | padding: 0 50px; |
| | | overflow: hidden; |
| | | .pic-404 { |
| | | position: relative; |
| | | float: left; |
| | | width: 600px; |
| | | overflow: hidden; |
| | | &__parent { |
| | | width: 100%; |
| | | } |
| | | &__child { |
| | | position: absolute; |
| | | &.left { |
| | | width: 80px; |
| | | top: 17px; |
| | | left: 220px; |
| | | opacity: 0; |
| | | animation-name: cloudLeft; |
| | | animation-duration: 2s; |
| | | animation-timing-function: linear; |
| | | animation-fill-mode: forwards; |
| | | animation-delay: 1s; |
| | | } |
| | | &.mid { |
| | | width: 46px; |
| | | top: 10px; |
| | | left: 420px; |
| | | opacity: 0; |
| | | animation-name: cloudMid; |
| | | animation-duration: 2s; |
| | | animation-timing-function: linear; |
| | | animation-fill-mode: forwards; |
| | | animation-delay: 1.2s; |
| | | } |
| | | &.right { |
| | | width: 62px; |
| | | top: 100px; |
| | | left: 500px; |
| | | opacity: 0; |
| | | animation-name: cloudRight; |
| | | animation-duration: 2s; |
| | | animation-timing-function: linear; |
| | | animation-fill-mode: forwards; |
| | | animation-delay: 1s; |
| | | } |
| | | @keyframes cloudLeft { |
| | | 0% { |
| | | top: 17px; |
| | | left: 220px; |
| | | opacity: 0; |
| | | } |
| | | 20% { |
| | | top: 33px; |
| | | left: 188px; |
| | | opacity: 1; |
| | | } |
| | | 80% { |
| | | top: 81px; |
| | | left: 92px; |
| | | opacity: 1; |
| | | } |
| | | 100% { |
| | | top: 97px; |
| | | left: 60px; |
| | | opacity: 0; |
| | | } |
| | | } |
| | | @keyframes cloudMid { |
| | | 0% { |
| | | top: 10px; |
| | | left: 420px; |
| | | opacity: 0; |
| | | } |
| | | 20% { |
| | | top: 40px; |
| | | left: 360px; |
| | | opacity: 1; |
| | | } |
| | | 70% { |
| | | top: 130px; |
| | | left: 180px; |
| | | opacity: 1; |
| | | } |
| | | 100% { |
| | | top: 160px; |
| | | left: 120px; |
| | | opacity: 0; |
| | | } |
| | | } |
| | | @keyframes cloudRight { |
| | | 0% { |
| | | top: 100px; |
| | | left: 500px; |
| | | opacity: 0; |
| | | } |
| | | 20% { |
| | | top: 120px; |
| | | left: 460px; |
| | | opacity: 1; |
| | | } |
| | | 80% { |
| | | top: 180px; |
| | | left: 340px; |
| | | opacity: 1; |
| | | } |
| | | 100% { |
| | | top: 200px; |
| | | left: 300px; |
| | | opacity: 0; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | .bullshit { |
| | | position: relative; |
| | | float: left; |
| | | width: 300px; |
| | | padding: 30px 0; |
| | | overflow: hidden; |
| | | &__oops { |
| | | font-size: 32px; |
| | | font-weight: bold; |
| | | line-height: 40px; |
| | | color: #1482f0; |
| | | opacity: 0; |
| | | margin-bottom: 20px; |
| | | animation-name: slideUp; |
| | | animation-duration: 0.5s; |
| | | animation-fill-mode: forwards; |
| | | } |
| | | &__headline { |
| | | font-size: 20px; |
| | | line-height: 24px; |
| | | color: #222; |
| | | font-weight: bold; |
| | | opacity: 0; |
| | | margin-bottom: 10px; |
| | | animation-name: slideUp; |
| | | animation-duration: 0.5s; |
| | | animation-delay: 0.1s; |
| | | animation-fill-mode: forwards; |
| | | } |
| | | &__info { |
| | | font-size: 13px; |
| | | line-height: 21px; |
| | | color: grey; |
| | | opacity: 0; |
| | | margin-bottom: 30px; |
| | | animation-name: slideUp; |
| | | animation-duration: 0.5s; |
| | | animation-delay: 0.2s; |
| | | animation-fill-mode: forwards; |
| | | } |
| | | &__return-home { |
| | | display: block; |
| | | float: left; |
| | | width: 110px; |
| | | height: 36px; |
| | | background: #1482f0; |
| | | border-radius: 100px; |
| | | text-align: center; |
| | | color: #ffffff; |
| | | opacity: 0; |
| | | font-size: 14px; |
| | | line-height: 36px; |
| | | cursor: pointer; |
| | | animation-name: slideUp; |
| | | animation-duration: 0.5s; |
| | | animation-delay: 0.3s; |
| | | animation-fill-mode: forwards; |
| | | } |
| | | @keyframes slideUp { |
| | | 0% { |
| | | transform: translateY(60px); |
| | | opacity: 0; |
| | | } |
| | | 100% { |
| | | transform: translateY(0); |
| | | opacity: 1; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </style> |
New file |
| | |
| | | <!-- |
| | | * @Author: 小明丶 |
| | | * @Date: 2020-05-11 17:38:01 |
| | | * @LastEditors: zhaoxiaoqiang 287285524@qq.com |
| | | * @LastEditTime: 2023-08-24 15:43:52 |
| | | * @Description: 账户管理 |
| | | --> |
| | | <template> |
| | | <div class="account-list-page"> |
| | | <!-- 搜索栏 --> |
| | | <div class="search-box"> |
| | | <el-row> |
| | | <el-col :span="6"> |
| | | <span class="tit">查询表格</span> |
| | | </el-col> |
| | | <el-col :span="18"> |
| | | <div style="float:right;"> |
| | | <button class="btn-creat" v-if="this.filterBtnById(140201)" @click="showPop(null,1)">+ 新建</button> |
| | | <el-input |
| | | v-model="form.keyWord" |
| | | size="small" |
| | | style="width:280px;display: inline-block;" |
| | | @change="searchList" |
| | | placeholder="请输入用户名称/手机号" |
| | | > |
| | | <i slot="suffix" class="el-input__icon el-icon-search"></i> |
| | | </el-input> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <!-- 表格 --> |
| | | <Etable :searchData="defaultVal" :columns="column" httpUrl="userList"></Etable> |
| | | <!-- 新增弹出层 --> |
| | | <el-dialog :title="title" width="480px" :visible.sync="dialogFormVisible"> |
| | | <!-- :rules="rules" --> |
| | | <el-form :model="creatForm" ref="ruleForm"> |
| | | <el-form-item label="用户名称:" :label-width="formLabelWidth" prop="name"> |
| | | <el-input |
| | | v-model.trim="creatForm.name" |
| | | maxlength="20" |
| | | autocomplete="off" |
| | | placeholder="请输入用户名称" |
| | | style="width:200px" |
| | | ></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="用户手机号:" :label-width="formLabelWidth" prop="phone"> |
| | | <el-input |
| | | v-if="isCreat" |
| | | v-model.trim="creatForm.phone" |
| | | maxlength="11" |
| | | autocomplete="off" |
| | | placeholder="请输入用户手机号" |
| | | style="width:200px" |
| | | ></el-input> |
| | | <span v-else>{{creatForm.phone}}</span> |
| | | </el-form-item> |
| | | <el-form-item label="用户角色:" :label-width="formLabelWidth" prop="role"> |
| | | <el-select v-model="creatForm.role" placeholder="请选择" style="width:200px"> |
| | | <el-option |
| | | v-for="item in roleList" |
| | | :key="item.code" |
| | | :label="item.name" |
| | | :value="item.code"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="密码:" :label-width="formLabelWidth" v-show="title !== '编辑账户'" prop="password"> |
| | | <el-input |
| | | type = "password" |
| | | v-if="isCreat" |
| | | v-model.trim="creatForm.password" |
| | | maxlength="20" |
| | | autocomplete="off" |
| | | placeholder="请输入密码" |
| | | style="width:200px" |
| | | ></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="密码确认:" :label-width="formLabelWidth" v-show="title !== '编辑账户'" prop="resPassword"> |
| | | <el-input |
| | | type = "password" |
| | | v-if="isCreat" |
| | | v-model.trim="creatForm.resPassword" |
| | | maxlength="20" |
| | | autocomplete="off" |
| | | placeholder="再次输入密码" |
| | | style="width:200px" |
| | | ></el-input> |
| | | <span v-else>{{creatForm.resPassword}}</span> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button size="mini" @click="cancelCreat">取 消</el-button> |
| | | <el-button size="mini" type="primary" @click="confrimCreat">确 定</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | <script> |
| | | import md5 from "blueimp-md5"; |
| | | import Etable from "../../components/table.vue"; |
| | | import {roleGetRoleList,userAdd,userUpdate,userManageDisabled} from '@/api/user'; |
| | | // import myTable from "../../components/myTable/myTable"; |
| | | // import myApi from "../../api/api"; |
| | | export default { |
| | | components:{ |
| | | Etable |
| | | }, |
| | | data() { |
| | | return { |
| | | title: '',//弹出层title |
| | | rowsInfo: {},//选中操作某行行数据 |
| | | roleList: [], |
| | | isCreat: true, |
| | | dialogFormVisible: false, |
| | | formLabelWidth:'120px', |
| | | form: { |
| | | keyWord: null |
| | | }, |
| | | creatForm:{ |
| | | name:'', |
| | | phone:'', |
| | | password:null, |
| | | resPassword:null, |
| | | role:'' |
| | | },// 新建用户表单 |
| | | defaultVal: {}, |
| | | refresh: {}, |
| | | // tableData: { |
| | | // url: "userManageList", |
| | | // exportExcelUrl: { |
| | | // url: "hbOrderExport", |
| | | // fileName: "用户管理表格" |
| | | // }, |
| | | // exportPower: { |
| | | // show: false, |
| | | // btnId: "120102" |
| | | // }, |
| | | column: [ |
| | | { |
| | | prop: "userName", |
| | | lable: "用户名称", |
| | | align: "center" |
| | | }, |
| | | { |
| | | prop: "userNo", |
| | | lable: "用户手机号", |
| | | align: "center" |
| | | }, |
| | | { |
| | | prop: "roleName", |
| | | lable: "用户角色", |
| | | align: "center" |
| | | }, |
| | | { |
| | | lable: "停启用", |
| | | align: "center", |
| | | render: (h, params) => { |
| | | return h("div", [ |
| | | h("el-switch", { |
| | | props: { |
| | | value: params.row.status === 1, |
| | | "active-color": "#66DD42", |
| | | "inactive-color": "#eeeeee" |
| | | }, |
| | | on: { |
| | | change: () => { |
| | | params.row.status = params.row.status === 1 ? 0 : 1; |
| | | this.updateContract(params); |
| | | } |
| | | } |
| | | }) |
| | | ]); |
| | | } |
| | | }, |
| | | { |
| | | key: "", |
| | | name: "操作", |
| | | fixed: "right", |
| | | align: "center", |
| | | render: (h, params) => { |
| | | return h("div", [ |
| | | h( |
| | | "span", |
| | | { |
| | | style: { |
| | | "font-size": "12px", |
| | | "font-family": "Microsoft YaHei", |
| | | "font-weight": 400, |
| | | "text-decoration": "underline", |
| | | color: "rgba(60,142,254,1)", |
| | | cursor: "pointer", |
| | | display: this.filterBtnById(140202) |
| | | ? "inline-block" |
| | | : "none", |
| | | }, |
| | | on: { |
| | | click: () => { |
| | | this.showPop(params.row,2); |
| | | } |
| | | } |
| | | }, |
| | | "编辑" |
| | | ) |
| | | ]); |
| | | } |
| | | } |
| | | ] |
| | | // },// 表格数据 |
| | | }; |
| | | }, |
| | | watch: { |
| | | // dialogFormVisible: function(newVal) { |
| | | // if (!newVal) { |
| | | // this.creatForm.name = "" |
| | | // this.creatForm.phone = "" |
| | | // this.creatForm.password = '' |
| | | // this.creatForm.resPassword = '' |
| | | // this.creatForm.role = '' |
| | | // } |
| | | // } |
| | | }, |
| | | created(){ |
| | | roleGetRoleList().then(res => { |
| | | if (res) { |
| | | this.roleList = res.body.roles |
| | | } |
| | | }).catch(err => {}) |
| | | }, |
| | | methods: { |
| | | // 显示弹出层 |
| | | showPop(params, item) { |
| | | if (params && item != 1) { |
| | | this.creatForm.phone = params.userNo; |
| | | this.creatForm.role = params.roleId; |
| | | this.$set(this.creatForm,'role',params.roleId) |
| | | // this.creatForm.name = params.userName;; |
| | | this.$set(this.creatForm,'name',params.userName) |
| | | this.creatForm.password = params.password; |
| | | this.creatForm.resPassword = params.resPassword; |
| | | this.isCreat = false; |
| | | this.rowsInfo = params |
| | | this.title = '编辑账户' |
| | | } |
| | | if (item == 1) { |
| | | this.isCreat = true; |
| | | this.title = '新建账户' |
| | | |
| | | } |
| | | this.dialogFormVisible = true; |
| | | }, |
| | | /**搜索框**/ |
| | | searchList() { |
| | | this.qureys(); |
| | | }, |
| | | /**搜索用户列表**/ |
| | | qureys() { |
| | | let obj = {}; |
| | | obj = {...this.form}; |
| | | if (this.form.keyWord == "") { |
| | | obj.keyWord = null; |
| | | } |
| | | this.defaultVal = { ...obj }; |
| | | this.refresh = this.defaultVal; |
| | | }, |
| | | /**新建用户或编辑用户**/ |
| | | confrimCreat(){ |
| | | let v = this.$tool |
| | | if(v.checkValEmpty(this.creatForm.name)){ |
| | | this.$message.error('请输入用户名称'); |
| | | return |
| | | } |
| | | if(!v.checkName(this.creatForm.name)){ |
| | | this.$message.error('请输入正确用户名称'); |
| | | return |
| | | } |
| | | if(v.checkValEmpty(this.creatForm.phone)){ |
| | | this.$message.error('请输入用户手机号'); |
| | | return |
| | | } |
| | | if(!v.checkPhone(this.creatForm.phone)){ |
| | | this.$message.error('请输入正确的用户手机号'); |
| | | return |
| | | } |
| | | if(v.checkValEmpty(this.creatForm.role)){ |
| | | this.$message.error('请选择角色'); |
| | | return |
| | | } |
| | | if(v.checkValEmpty(this.creatForm.password) && this.isCreat){ |
| | | this.$message.error('请输入密码'); |
| | | return |
| | | } |
| | | if(!v.checkPassword(this.creatForm.password) && this.isCreat){ |
| | | this.$message.error('密码格式错误,请输入6~20位包含字母及数字'); |
| | | return |
| | | } |
| | | if(v.checkValEmpty(this.creatForm.resPassword) && this.isCreat){ |
| | | this.$message.error('请输入密码确认'); |
| | | return |
| | | } |
| | | if(this.creatForm.password!=this.creatForm.resPassword && this.isCreat){ |
| | | this.$message.error('密码输入不一致,请确认'); |
| | | return |
| | | } |
| | | if(this.title === '新建账户') { |
| | | let temPassWord = md5(this.creatForm.phone+this.creatForm.password) |
| | | let temconfirmPwd = md5(this.creatForm.phone+this.creatForm.resPassword) |
| | | let data = {userNo: this.creatForm.phone, userName: this.creatForm.name, roleId: this.creatForm.role, pwd: temPassWord, confirmPwd: temconfirmPwd} |
| | | userAdd(data).then(res => { |
| | | if(res) { |
| | | this.$notify({ |
| | | title: '提示', |
| | | message: '新增成功', |
| | | type: 'success' |
| | | }) |
| | | this.dialogFormVisible = false |
| | | this.qureys() |
| | | } |
| | | }).catch(err => { |
| | | this.dialogFormVisible = false |
| | | }) |
| | | } else if (this.title === '编辑账户') { |
| | | let data = {userName: this.creatForm.name, userId: this.rowsInfo.userId, roleId:this.creatForm.role} |
| | | userUpdate(data).then(res => { |
| | | if(res) { |
| | | this.$notify({ |
| | | title: '提示', |
| | | message: '编辑成功', |
| | | type: 'success' |
| | | }) |
| | | this.dialogFormVisible = false |
| | | this.qureys() |
| | | } |
| | | }).catch(err => {}) |
| | | } |
| | | // 提交请求关闭弹窗 |
| | | |
| | | }, |
| | | /**取消新建、编辑账户**/ |
| | | cancelCreat(){ |
| | | // this.creatForm.name = '' |
| | | // this.creatForm.phone = '' |
| | | this.creatForm = {}; |
| | | this.dialogFormVisible = false |
| | | }, |
| | | /**更新用户状态**/ |
| | | updateContract(params) { |
| | | let data = { |
| | | userId: params.row.userId |
| | | }; |
| | | userManageDisabled(data).then(res => { |
| | | if(res) { |
| | | this.$notify({ |
| | | title: '提示', |
| | | message: '状态更新成功', |
| | | type: 'success' |
| | | }) |
| | | //this.qureys() |
| | | } |
| | | }).catch(err => {}) |
| | | }, |
| | | } |
| | | }; |
| | | </script> |
| | | <style lang="scss" scoped> |
| | | .account-list-page { |
| | | & { |
| | | background: #fff; |
| | | box-sizing: border-box; |
| | | padding: 24px 16px 40px 16px; |
| | | } |
| | | .btn-creat { |
| | | margin-right: 16px; |
| | | outline: none; |
| | | border: 0; |
| | | color: #fff; |
| | | width: 64px; |
| | | height: 32px; |
| | | background: rgba(60, 142, 254, 1); |
| | | border-radius: 2px; |
| | | cursor: pointer; |
| | | } |
| | | } |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <div class="login-container"> |
| | | |
| | | <div class="login-card"> |
| | | <div class="img-mylogin"> |
| | | <div class="img-mylogin-t"> |
| | | </div> |
| | | </div> |
| | | <div class="login-form"> |
| | | <div class="title-container"> |
| | | <div class='title'>权益品后台管理</div> |
| | | </div> |
| | | <el-form ref="loginForm" :model="loginForm" :rules="loginRules" auto-complete="on" label-position="left" v-if="!findPass"> |
| | | <div class="login-cont"> |
| | | <el-form-item prop="username"> |
| | | <span class="svg-container"> |
| | | <svg-icon icon-class="user" /> |
| | | </span> |
| | | <el-input ref="username" v-model="loginForm.username" placeholder="请输入账号" name="username" type="text" tabindex="1" auto-complete="on" /> |
| | | </el-form-item> |
| | | <el-form-item prop="password"> |
| | | <span class="svg-container"> |
| | | <svg-icon icon-class="password" /> |
| | | </span> |
| | | <el-input :key="passwordType" ref="password" v-model="loginForm.password" :type="passwordType" placeholder="请输入密码" name="password" tabindex="2" auto-complete="on" @keyup.enter.native="handleLogin" /> |
| | | <span class="show-pwd" @click="showPwd(1)"> |
| | | <svg-icon :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'" /> |
| | | </span> |
| | | </el-form-item> |
| | | <el-button :loading="loading" type="primary" style="width:100%;margin-top:12px;" @click.native.prevent="handleLogin">登录</el-button> |
| | | </div> |
| | | </el-form> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import md5 from "js-md5"; |
| | | export default { |
| | | name: "Login", |
| | | data() { |
| | | var validatePass = (rule, value, callback) => { |
| | | if (value === "") { |
| | | callback(new Error("请输入密码")); |
| | | } else { |
| | | if (this.findPasswForm.newPwdT !== "") { |
| | | this.$refs.findPasswForm.validateField("newPwdT"); |
| | | } |
| | | callback(); |
| | | } |
| | | }; |
| | | var validatePass2 = (rule, value, callback) => { |
| | | if (value === "") { |
| | | callback(new Error("请再次输入密码")); |
| | | } else if (value !== this.findPasswForm.newPwd) { |
| | | callback(new Error("两次输入密码不一致!")); |
| | | } else { |
| | | callback(); |
| | | } |
| | | }; |
| | | return { |
| | | loginForm: { |
| | | username: "", |
| | | password: "" |
| | | }, |
| | | loginRules: { |
| | | username: [ |
| | | { required: true, message: "请输入登录账号", trigger: "blur" }, |
| | | ], |
| | | password: [ |
| | | { required: true, message: "请输入登录密码", trigger: "blur" } |
| | | ] |
| | | }, |
| | | findPasswRules: { |
| | | mblNo: [ |
| | | { required: true, message: "请输入手机号", trigger: "blur" }, |
| | | { min: 11, max: 11, message: "长度11个字符", trigger: "blur" } |
| | | ], |
| | | verCode: [{ required: true, message: "请输入验证码", trigger: "blur" }], |
| | | newPwd: [ |
| | | { required: true, message: "请输入新密码", trigger: "blur" }, |
| | | { min: 6, max: 20, message: "长度6至20个字符", trigger: "blur" }, |
| | | { validator: validatePass, trigger: "blur" } |
| | | ], |
| | | newPwdT: [ |
| | | { required: true, message: "请再次确认密码", trigger: "blur" }, |
| | | { min: 6, max: 20, message: "长度6至20个字符", trigger: "blur" }, |
| | | { validator: validatePass2, trigger: "blur", required: true } |
| | | ] |
| | | }, |
| | | //忘记密码 |
| | | findPasswForm: { |
| | | mblNo: "", |
| | | newPwd: "", |
| | | newPwdT: "", |
| | | verCode: "" |
| | | }, |
| | | loading: false, |
| | | passwordType: "password", |
| | | setpasswordType: "password", |
| | | redirect: undefined, |
| | | checked: false, //是否记密码 |
| | | show: true, |
| | | count: "", // 初始化次数 |
| | | timer: null, |
| | | findPass: false |
| | | }; |
| | | }, |
| | | watch: { |
| | | $route: { |
| | | handler: function (route) { |
| | | this.redirect = route.query && route.query.redirect; |
| | | }, |
| | | immediate: true |
| | | } |
| | | }, |
| | | methods: { |
| | | showPwd(type) { |
| | | if (type == 1) { |
| | | if (this.passwordType === "password") { |
| | | this.passwordType = ""; |
| | | } else { |
| | | this.passwordType = "password"; |
| | | } |
| | | this.$nextTick(() => { |
| | | this.$refs.password.focus(); |
| | | }); |
| | | } else { |
| | | if (this.setpasswordType === "password") { |
| | | this.setpasswordType = ""; |
| | | } else { |
| | | this.setpasswordType = "password"; |
| | | } |
| | | this.$nextTick(() => { |
| | | this.$refs.setpasswordType.focus(); |
| | | }); |
| | | } |
| | | }, |
| | | handleLogin() { |
| | | this.$refs.loginForm.validate(valid => { |
| | | if (valid) { |
| | | this.loading = true; |
| | | this.$store.dispatch("user/login", this.loginForm).then((res) => { |
| | | this.loading = false; |
| | | let path = ''; |
| | | if(this.$router.options.routes[0]&&this.$router.options.routes[0].children[0]){ |
| | | path = this.$router.options.routes[0].children[0].path; |
| | | }else{ |
| | | path = this.$router.options.routes[0].path; |
| | | } |
| | | this.$router.push({ path: path }); |
| | | }).catch(() => { |
| | | this.loading = false; |
| | | }); |
| | | } else { |
| | | console.log("error submit!!"); |
| | | return false; |
| | | } |
| | | }); |
| | | }, |
| | | getVerify() { |
| | | // 验证手机号 |
| | | if (this.checkPhone() == false) { |
| | | return false; |
| | | } else { |
| | | sendMsg({ mblNo: this.findPasswForm.mblNo, verCodeType: 1 }) |
| | | .then(res => { |
| | | const TIME_COUNT = 60; //更改倒计时时间 |
| | | if (!this.timer) { |
| | | this.count = TIME_COUNT; |
| | | this.show = false; |
| | | this.timer = setInterval(() => { |
| | | if (this.count > 0 && this.count <= TIME_COUNT) { |
| | | this.count--; |
| | | } else { |
| | | this.show = true; |
| | | clearInterval(this.timer); // 清除定时器 |
| | | this.timer = null; |
| | | } |
| | | }, 1000); |
| | | } |
| | | }) |
| | | .catch(err => { |
| | | this.count = 0; |
| | | }); |
| | | } |
| | | }, |
| | | checkPhone() { |
| | | let phone = this.findPasswForm.mblNo; |
| | | if (!/^1[3456789]\d{9}$/.test(phone)) { |
| | | this.$message.error("请填写正确的手机号"); |
| | | return false; |
| | | } |
| | | }, |
| | | findPassMths(isActuve) { |
| | | this.findPass = isActuve; |
| | | if (!this.findPass) { |
| | | this.$refs.findPasswForm.clearValidate(); |
| | | } else { |
| | | this.$refs.loginForm.clearValidate(); |
| | | } |
| | | }, |
| | | forgetPwd() { |
| | | //重置密码 |
| | | this.$refs.findPasswForm.validate(valid => { |
| | | if (!valid) return this.$message.error("数据填写有误,请检查!"); |
| | | var newPassForm = JSON.parse(JSON.stringify(this.findPasswForm)); |
| | | newPassForm.newPwd = md5( |
| | | this.findPasswForm.mblNo + this.findPasswForm.newPwd |
| | | ); |
| | | delete newPassForm.newPwdT; |
| | | newPassForm.verCodeType = 1; |
| | | forgetPwd(newPassForm).then(res => { |
| | | this.$refs.findPasswForm.resetFields(); |
| | | this.findPass = false; |
| | | this.$message.success("密码重置成功!"); |
| | | }); |
| | | }); |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | $bg: #2d3a4b; |
| | | $dark_gray: #889aa4; |
| | | $light_gray: #eee; |
| | | $cursor: #fff; |
| | | .login-container { |
| | | min-height: 100%; |
| | | width: 100%; |
| | | background-image: url("../../assets/img/loginbg.png"); |
| | | overflow: hidden; |
| | | background-size: 100% 100%; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | .login-title { |
| | | font-size: 24px; |
| | | font-family: Alibaba PuHuiTi; |
| | | font-weight: 400; |
| | | color: #243359; |
| | | line-height: 30px; |
| | | margin-right: -40px; |
| | | } |
| | | .login-card { |
| | | width: 60%; |
| | | min-width: 1000px; |
| | | height: 650px; |
| | | border-radius: 12px; |
| | | background-color: #fff; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: space-around; |
| | | .img-mylogin { |
| | | width: 476px; |
| | | height: 326px; |
| | | .login-title { |
| | | height: 80px; |
| | | text-align: center; |
| | | line-height: 80px; |
| | | } |
| | | .img-mylogin-t { |
| | | // width: 476px; |
| | | height: 326px; |
| | | background-image: url("../../assets/img/img_Login.png"); |
| | | overflow: hidden; |
| | | background-size: 100% 100%; |
| | | margin-top: 20px; |
| | | } |
| | | } |
| | | } |
| | | .login-form { |
| | | // width: 400px; |
| | | min-height: 326px; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: flex-start; |
| | | flex-direction: column; |
| | | box-sizing: border-box; |
| | | } |
| | | .el-input { |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: space-between; |
| | | flex: 1; |
| | | input { |
| | | background: transparent; |
| | | border: 0px; |
| | | -webkit-appearance: none; |
| | | border-radius: 0px; |
| | | padding: 12px 5px 12px 15px; |
| | | &:-webkit-autofill { |
| | | box-shadow: 0 0 0px 1000px $cursor inset !important; |
| | | } |
| | | } |
| | | } |
| | | .el-checkbox { |
| | | display: flex; |
| | | justify-content: flex-start; |
| | | align-items: center; |
| | | } |
| | | .tips { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | font-size: 14px; |
| | | margin-top: 15px; |
| | | } |
| | | |
| | | .svg-container { |
| | | padding: 6px 5px 6px 15px; |
| | | color: $dark_gray; |
| | | vertical-align: middle; |
| | | width: 30px; |
| | | display: inline-block; |
| | | } |
| | | |
| | | .title-container { |
| | | .title { |
| | | font-size: 32px; |
| | | margin-bottom: 82px; |
| | | color: #333333; |
| | | text-align: center; |
| | | font-weight: bold; |
| | | } |
| | | } |
| | | |
| | | .show-pwd { |
| | | position: absolute; |
| | | right: 10px; |
| | | top: 7px; |
| | | font-size: 16px; |
| | | color: $dark_gray; |
| | | cursor: pointer; |
| | | user-select: none; |
| | | } |
| | | .tips-1 { |
| | | text-align: center; |
| | | font-size: 14px; |
| | | margin-bottom: 10px; |
| | | } |
| | | .el-form { |
| | | width: 100%; |
| | | } |
| | | .el-form-item { |
| | | border-radius: 5px; |
| | | color: #454545; |
| | | border: solid 1px #d9d9d9; |
| | | } |
| | | .el-form-item__content { |
| | | line-height: 36px; |
| | | display: flex; |
| | | justify-content: flex-start; |
| | | align-items: center; |
| | | } |
| | | .el-form-item { |
| | | margin-bottom: 32px; |
| | | } |
| | | .main-title { |
| | | font-size: 28px; |
| | | font-family: PingFang SC; |
| | | font-weight: bold; |
| | | color: #ffffff; |
| | | line-height: 40px; |
| | | position: absolute; |
| | | top: 8%; |
| | | left: 5%; |
| | | img { |
| | | width: 330px; |
| | | height: 45px; |
| | | } |
| | | } |
| | | // .login-cont1 { |
| | | // .el-form-item { |
| | | // margin-bottom: 24px; |
| | | // } |
| | | // } |
| | | } |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <div class="main_index"> |
| | | <div class="search_from"> |
| | | <el-form |
| | | :model="formInline" |
| | | inline |
| | | label-width="100px" |
| | | class="form-flex" |
| | | size="small" |
| | | > |
| | | <div style="width: 90%"> |
| | | <el-form-item label="项目名称:"> |
| | | <el-input |
| | | v-model.trim="formInline.projName" |
| | | style="width: 240px" |
| | | @keyup.native="keyupEvent($event)" |
| | | type="tel" |
| | | clearable |
| | | placeholder="请输入" |
| | | ></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="创建时间:"> |
| | | <el-date-picker |
| | | v-model="createdTime" |
| | | style="width: 240px" |
| | | format="yyyy-MM-dd" |
| | | value-format="yyyy-MM-dd" |
| | | type="daterange" |
| | | range-separator="-" |
| | | start-placeholder="开始日期" |
| | | end-placeholder="结束日期" |
| | | > |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="项目状态:"> |
| | | <el-select |
| | | v-model="formInline.status" |
| | | style="width:240px" |
| | | clearable |
| | | placeholder="请选择" |
| | | > |
| | | <el-option label="全部" value="all"></el-option> |
| | | <el-option |
| | | v-for="item in relustObj.statusList" |
| | | :key="item.code" |
| | | :label="item.name" |
| | | :value="item.code" |
| | | ></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </div> |
| | | <el-form-item style="text-align: right;"> |
| | | <el-button type="primary" style="margin-left: 10px;margin-bottom: 8px;" v-if='filterBtnById("150102")' @click="addProduct">新 增</el-button> |
| | | <el-button type="primary" style="margin-left: 10px;margin-bottom: 8px;" @click="onSearch">查 询</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <div class="table_box"> |
| | | <Etable |
| | | hasIndex |
| | | httpUrl="projectList" |
| | | :columns="columns" |
| | | :searchData="searchData" |
| | | @getDataList="getDataList" |
| | | :exportUrl="{ |
| | | url: '/qyp/project/export', |
| | | powerId: '150103', |
| | | name: '项目列表', |
| | | }" |
| | | ></Etable> |
| | | </div> |
| | | <el-dialog top="8vh" title="新增商品" :visible.sync="addProd" width="60%"> |
| | | <!-- 新增商品名称 --> |
| | | |
| | | |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import Etable from "../../components/table.vue"; |
| | | import {projectInit,projectAdd,projectDtl,projectUpdata} from "@/api/credit"; |
| | | // import orderDetail from "./orderDetail.vue"; |
| | | import uploadImg from "@/components/upload.vue"; |
| | | import MultipleSelect from "../../components/secect.vue"; |
| | | import moment from 'moment'; |
| | | export default { |
| | | name: "order", |
| | | components: { Etable, MultipleSelect, uploadImg }, |
| | | data() { |
| | | let validateImage = (rule, value, callback) => { //验证器 |
| | | if (!this.payForm.prodListImages.length) { //为true代表图片在 false报错 |
| | | callback(new Error('请上传商品展示图片')); |
| | | } else { |
| | | callback(); |
| | | } |
| | | }; |
| | | let validateImage1 = (rule, value, callback) => { //验证器 |
| | | if (!this.payForm.prodImages.length) { //为true代表图片在 false报错 |
| | | callback(new Error('请上传商品轮播图')); |
| | | } else { |
| | | callback(); |
| | | } |
| | | }; |
| | | let validateImage2 = (rule, value, callback) => { //验证器 |
| | | if (!this.payForm.prodDescImages.length) { //为true代表图片在 false报错 |
| | | callback(new Error('请上传商品详情图片')); |
| | | } else { |
| | | callback(); |
| | | } |
| | | }; |
| | | return { |
| | | disabled: true, |
| | | payForm: { |
| | | prodImages: [], |
| | | prodListImages:[], |
| | | prodDescImages:"", |
| | | }, |
| | | licensePaths: [], |
| | | prodListImages:[], |
| | | prodDescImages:[], |
| | | payFormRule: { |
| | | prodListImage:[{ required: true, trigger: "change",validator: validateImage}], |
| | | prodImages:[{ required: true, trigger: "change",validator: validateImage1}], |
| | | prodDescImages:[{ required: true, trigger: "change",validator: validateImage2}], |
| | | desc: [{ required: true, message: "请输入商品简介", trigger: "blur" }], |
| | | status:[{ required: true, message: "请选择上架状态", trigger: "change" }] |
| | | }, |
| | | formInline: { |
| | | status:"all", |
| | | }, |
| | | searchData: {}, |
| | | columns: [ |
| | | { |
| | | lable: "项目名称", |
| | | prop: "projName", |
| | | align: "center", |
| | | width: "300", |
| | | }, |
| | | { |
| | | lable: "项目价格", |
| | | prop: "projPrice", |
| | | align: "center", |
| | | width: "180", |
| | | }, |
| | | { |
| | | lable: "项目链接", |
| | | prop: "projUrl", |
| | | align: "center", |
| | | width: "200", |
| | | }, |
| | | { |
| | | lable: "创建时间", |
| | | prop: "creTime", |
| | | align: "center", |
| | | width: "150", |
| | | }, |
| | | { |
| | | lable: "项目状态", |
| | | prop: "statusStr", |
| | | align: "center", |
| | | width: "180", |
| | | }, |
| | | { |
| | | lable: "项目描述", |
| | | prop: "projDesc", |
| | | align: "center", |
| | | }, |
| | | { |
| | | lable: "", |
| | | }, |
| | | { |
| | | lable: "操作", |
| | | align: "center", |
| | | width: "180", |
| | | fixed: "right", |
| | | render: (h, scope) => { |
| | | return h("div", [ |
| | | h( |
| | | "span", |
| | | { |
| | | style: { |
| | | cursor: "pointer", |
| | | color: "#3C8EFE", |
| | | display: this.filterBtnById(150101) |
| | | ? "inline-block" |
| | | : "none", |
| | | }, |
| | | on: { |
| | | click: () => { |
| | | |
| | | }, |
| | | }, |
| | | }, |
| | | "查看详情" |
| | | ), |
| | | h( |
| | | "span", |
| | | { |
| | | style: { |
| | | cursor: "pointer", |
| | | "margin-left": "8px", |
| | | color: "#3C8EFE", |
| | | display: this.filterBtnById(150104) |
| | | ? "inline-block" |
| | | : "none", |
| | | }, |
| | | on: { |
| | | click: () => { |
| | | |
| | | }, |
| | | }, |
| | | }, |
| | | "编辑" |
| | | ), |
| | | ]); |
| | | }, |
| | | }, |
| | | ], |
| | | relustObj: {}, |
| | | addProd:false, |
| | | createdTime:[] |
| | | } |
| | | }, |
| | | //生命周期 - 创建完成(可以访问当前this实例) |
| | | created() { |
| | | this.initSerch(); |
| | | }, |
| | | methods: { |
| | | keyupEvent(e) { |
| | | //只能输入整数 |
| | | e.target.value = e.target.value.replace(/[^\d]/g, ""); |
| | | }, |
| | | addPDH(){ |
| | | this.$refs['skuObj'].validate((valid) => { |
| | | if(valid){ |
| | | let {productAttr,prodName,prodFundType,prodOsType} = this.skuObj; |
| | | let data = {prodName,prodFundType,prodOsType,prodBrandCode:productAttr[1].value,prodModelCode:productAttr[2].value,prodType:productAttr[0].value}; |
| | | prodAdd(data).then((res)=>{ |
| | | this.addProd = false; |
| | | this.initSerch(); |
| | | }) |
| | | } |
| | | }) |
| | | }, |
| | | addPDHCancelBut(){ |
| | | this.$refs["skuObj"].resetFields(); |
| | | this.addProd = false; |
| | | }, |
| | | addProduct(){ |
| | | this.disabled = false; |
| | | }, |
| | | onSearch() { |
| | | if (this.createdTime && this.createdTime.length) { |
| | | this.formInline.creStartTime = this.createdTime[0]; |
| | | this.formInline.creEndTime = this.createdTime[1]; |
| | | } else { |
| | | this.formInline.creStartTime = null; |
| | | this.formInline.creEndTime = null; |
| | | } |
| | | let objForm = JSON.parse(JSON.stringify(this.formInline)); |
| | | for (let key in objForm) { |
| | | if (objForm[key] === "all") { |
| | | delete objForm[key]; |
| | | } |
| | | } |
| | | this.searchData = { ...objForm }; |
| | | }, |
| | | initSerch() { |
| | | projectInit().then(({ body }) => { |
| | | this.relustObj = body; |
| | | }); |
| | | }, |
| | | prodListInit() { |
| | | prodListInit().then(({ body }) => { |
| | | let prodList = body.items.map(f=>{ |
| | | return { |
| | | code:f.prodId, |
| | | name:f.prodName |
| | | } |
| | | }); |
| | | this.relustObj.prodList = prodList; |
| | | }); |
| | | }, |
| | | getDataList(e) { |
| | | }, |
| | | // prodDescSend(e){ |
| | | // //文件上传 |
| | | // this.payForm.prodDescImages = e.map((res) => { |
| | | // return res.filePath; |
| | | // }); |
| | | // this.$refs.prodDescImagesIplaod.clearValidate(); |
| | | // }, |
| | | // productShowUSend(e){ |
| | | // this.payForm.prodListImages = e.map((res) => { |
| | | // return res.filePath; |
| | | // }); |
| | | // this.$refs.productShowUpload.clearValidate(); |
| | | // }, |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | .main_index { |
| | | background-color: #f0f2f5; |
| | | .table_box_num { |
| | | margin-top: 5px; |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | align-items: center; |
| | | color: #666; |
| | | font-size: 14px; |
| | | font-weight: bold; |
| | | padding-right: 16px; |
| | | box-sizing: border-box; |
| | | span { |
| | | display: inline-block; |
| | | &:nth-child(even) { |
| | | margin-right: 20px; |
| | | color: #333; |
| | | } |
| | | } |
| | | } |
| | | .el-form-div { |
| | | width: 100%; |
| | | display: flex; |
| | | } |
| | | .tips{ |
| | | color: #f56c6c; |
| | | } |
| | | } |
| | | </style> |
| | | |
New file |
| | |
| | | <template> |
| | | <div class="promotion_page"> |
| | | <div class="search_from"> |
| | | <el-form |
| | | :model="formInline" |
| | | inline |
| | | label-width="140px" |
| | | class="form-flex" |
| | | size="small" |
| | | > |
| | | <div style="width: 90%"> |
| | | <el-form-item label="项目名称:"> |
| | | <el-select |
| | | v-model="formInline.status" |
| | | style="width:200px" |
| | | clearable |
| | | placeholder="请选择" |
| | | > |
| | | <el-option label="全部" value="all"></el-option> |
| | | <el-option |
| | | v-for="item in relustObj.projList" |
| | | :key="item.code" |
| | | :label="item.name" |
| | | :value="item.code" |
| | | ></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="推广位状态:"> |
| | | <el-select |
| | | v-model="formInline.status" |
| | | style="width:200px" |
| | | clearable |
| | | placeholder="请选择" |
| | | > |
| | | <el-option label="全部" value="all"></el-option> |
| | | <el-option |
| | | v-for="item in relustObj.statusList" |
| | | :key="item.code" |
| | | :label="item.name" |
| | | :value="item.code" |
| | | ></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="推广位名称:"> |
| | | <el-input |
| | | v-model.trim="formInline.promName" |
| | | style="width: 200px" |
| | | type="tel" |
| | | clearable |
| | | placeholder="请输入" |
| | | ></el-input> |
| | | </el-form-item> |
| | | <div> |
| | | <el-form-item label="项目创建时间:"> |
| | | <el-date-picker |
| | | v-model="createdTime" |
| | | style="width: 240px" |
| | | format="yyyy-MM-dd" |
| | | value-format="yyyy-MM-dd" |
| | | type="daterange" |
| | | range-separator="-" |
| | | start-placeholder="开始日期" |
| | | end-placeholder="结束日期" |
| | | > |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="推广位创建时间:"> |
| | | <el-date-picker |
| | | v-model="promotionCreatedTime" |
| | | style="width: 240px" |
| | | format="yyyy-MM-dd" |
| | | value-format="yyyy-MM-dd" |
| | | type="daterange" |
| | | range-separator="-" |
| | | start-placeholder="开始日期" |
| | | end-placeholder="结束日期" |
| | | > |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </div> |
| | | </div> |
| | | <el-form-item style="text-align: right;"> |
| | | <el-button type="primary" style="margin-left: 10px;margin-bottom: 8px;" v-if='filterBtnById("150102")' @click="addProduct">新 增</el-button> |
| | | <el-button type="primary" style="margin-left: 10px;margin-bottom: 8px;" @click="onSearch">查 询</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <div class="table_box"> |
| | | <Etable |
| | | hasIndex |
| | | httpUrl="promoteList" |
| | | :columns="columns" |
| | | :searchData="searchData" |
| | | @getDataList="getDataList" |
| | | :exportUrl="{ |
| | | url: '/qyp/promote/export', |
| | | powerId: '150103', |
| | | name: '项目列表', |
| | | }" |
| | | ></Etable> |
| | | </div> |
| | | <el-dialog top="8vh" title="新增商品" :visible.sync="addProd" width="60%"> |
| | | <!-- 新增商品名称 --> |
| | | |
| | | |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import Etable from "@/components/table.vue"; |
| | | import {promoteInit,promoteAdd,promoteDtl,promotePpdate} from "@/api/credit"; |
| | | import uploadImg from "@/components/upload.vue"; |
| | | import MultipleSelect from "@/components/secect.vue"; |
| | | export default { |
| | | name: "order", |
| | | components: { Etable, MultipleSelect, uploadImg }, |
| | | data() { |
| | | let validateImage = (rule, value, callback) => { //验证器 |
| | | if (!this.payForm.prodListImages.length) { //为true代表图片在 false报错 |
| | | callback(new Error('请上传商品展示图片')); |
| | | } else { |
| | | callback(); |
| | | } |
| | | }; |
| | | let validateImage1 = (rule, value, callback) => { //验证器 |
| | | if (!this.payForm.prodImages.length) { //为true代表图片在 false报错 |
| | | callback(new Error('请上传商品轮播图')); |
| | | } else { |
| | | callback(); |
| | | } |
| | | }; |
| | | let validateImage2 = (rule, value, callback) => { //验证器 |
| | | if (!this.payForm.prodDescImages.length) { //为true代表图片在 false报错 |
| | | callback(new Error('请上传商品详情图片')); |
| | | } else { |
| | | callback(); |
| | | } |
| | | }; |
| | | return { |
| | | disabled: true, |
| | | payForm: { |
| | | prodImages: [], |
| | | prodListImages:[], |
| | | prodDescImages:"", |
| | | }, |
| | | columns: [ |
| | | { |
| | | lable: "推广位链接", |
| | | prop: "promUrl", |
| | | align: "center", |
| | | width: "500", |
| | | }, |
| | | { |
| | | lable: "项目", |
| | | prop: "projName", |
| | | align: "center", |
| | | width: "180", |
| | | }, |
| | | { |
| | | lable: "代理", |
| | | prop: "agencyName", |
| | | align: "center", |
| | | width: "200", |
| | | }, |
| | | { |
| | | lable: "推广位名称", |
| | | prop: "promName", |
| | | align: "center", |
| | | width: "150", |
| | | }, |
| | | { |
| | | lable: "推广人姓名", |
| | | prop: "promoterName", |
| | | align: "center", |
| | | width: "180", |
| | | }, |
| | | { |
| | | lable: "推广人电话", |
| | | prop: "promoterMblNo", |
| | | align: "center", |
| | | width: "180", |
| | | }, |
| | | { |
| | | lable: "创建时间", |
| | | prop: "creTime", |
| | | align: "center", |
| | | width: "180", |
| | | }, |
| | | { |
| | | lable: "推广位状态", |
| | | prop: "statusStr", |
| | | align: "center", |
| | | width: "100", |
| | | }, |
| | | { |
| | | lable: "", |
| | | }, |
| | | { |
| | | lable: "操作", |
| | | align: "center", |
| | | width: "180", |
| | | fixed: "right", |
| | | render: (h, scope) => { |
| | | return h("div", [ |
| | | h( |
| | | "span", |
| | | { |
| | | style: { |
| | | cursor: "pointer", |
| | | color: "#3C8EFE", |
| | | display: this.filterBtnById(150101) |
| | | ? "inline-block" |
| | | : "none", |
| | | }, |
| | | on: { |
| | | click: () => { |
| | | |
| | | }, |
| | | }, |
| | | }, |
| | | "查看详情" |
| | | ), |
| | | h( |
| | | "span", |
| | | { |
| | | style: { |
| | | cursor: "pointer", |
| | | "margin-left": "8px", |
| | | color: "#3C8EFE", |
| | | display: this.filterBtnById(150104) |
| | | ? "inline-block" |
| | | : "none", |
| | | }, |
| | | on: { |
| | | click: () => { |
| | | |
| | | }, |
| | | }, |
| | | }, |
| | | "编辑" |
| | | ), |
| | | ]); |
| | | }, |
| | | }, |
| | | ], |
| | | licensePaths: [], |
| | | prodListImages:[], |
| | | prodDescImages:[], |
| | | payFormRule: { |
| | | prodListImage:[{ required: true, trigger: "change",validator: validateImage}], |
| | | prodImages:[{ required: true, trigger: "change",validator: validateImage1}], |
| | | prodDescImages:[{ required: true, trigger: "change",validator: validateImage2}], |
| | | desc: [{ required: true, message: "请输入商品简介", trigger: "blur" }], |
| | | status:[{ required: true, message: "请选择上架状态", trigger: "change" }] |
| | | }, |
| | | formInline: { |
| | | status:"all", |
| | | }, |
| | | searchData: {}, |
| | | |
| | | relustObj: {}, |
| | | addProd:false, |
| | | createdTime:[], |
| | | promotionCreatedTime:[] |
| | | } |
| | | }, |
| | | //生命周期 - 创建完成(可以访问当前this实例) |
| | | created() { |
| | | this.initSerch(); |
| | | }, |
| | | methods: { |
| | | keyupEvent(e) { |
| | | //只能输入整数 |
| | | e.target.value = e.target.value.replace(/[^\d]/g, ""); |
| | | }, |
| | | addPDH(){ |
| | | this.$refs['skuObj'].validate((valid) => { |
| | | if(valid){ |
| | | let {productAttr,prodName,prodFundType,prodOsType} = this.skuObj; |
| | | let data = {prodName,prodFundType,prodOsType,prodBrandCode:productAttr[1].value,prodModelCode:productAttr[2].value,prodType:productAttr[0].value}; |
| | | prodAdd(data).then((res)=>{ |
| | | this.addProd = false; |
| | | this.initSerch(); |
| | | }) |
| | | } |
| | | }) |
| | | }, |
| | | addPDHCancelBut(){ |
| | | this.$refs["skuObj"].resetFields(); |
| | | this.addProd = false; |
| | | }, |
| | | addProduct(){ |
| | | this.disabled = false; |
| | | }, |
| | | onSearch() { |
| | | if (this.createdTime && this.createdTime.length) { |
| | | this.formInline.projCreStartTime = this.createdTime[0]; |
| | | this.formInline.projCreEndTime = this.createdTime[1]; |
| | | } else { |
| | | this.formInline.projCreStartTime = null; |
| | | this.formInline.projCreEndTime = null; |
| | | } |
| | | if (this.promotionCreatedTime && this.promotionCreatedTime.length) { |
| | | this.formInline.promCreEndTime = this.createdTime[0]; |
| | | this.formInline.promCreStartTime = this.createdTime[1]; |
| | | } else { |
| | | this.formInline.promCreEndTime = null; |
| | | this.formInline.promCreStartTime = null; |
| | | } |
| | | let objForm = JSON.parse(JSON.stringify(this.formInline)); |
| | | for (let key in objForm) { |
| | | if (objForm[key] === "all") { |
| | | delete objForm[key]; |
| | | } |
| | | } |
| | | this.searchData = { ...objForm }; |
| | | }, |
| | | initSerch() { |
| | | promoteInit().then(({ body }) => { |
| | | this.relustObj = body; |
| | | }); |
| | | }, |
| | | prodListInit() { |
| | | prodListInit().then(({ body }) => { |
| | | let prodList = body.items.map(f=>{ |
| | | return { |
| | | code:f.prodId, |
| | | name:f.prodName |
| | | } |
| | | }); |
| | | this.relustObj.prodList = prodList; |
| | | }); |
| | | }, |
| | | getDataList(e) { |
| | | }, |
| | | // prodDescSend(e){ |
| | | // //文件上传 |
| | | // this.payForm.prodDescImages = e.map((res) => { |
| | | // return res.filePath; |
| | | // }); |
| | | // this.$refs.prodDescImagesIplaod.clearValidate(); |
| | | // }, |
| | | // productShowUSend(e){ |
| | | // this.payForm.prodListImages = e.map((res) => { |
| | | // return res.filePath; |
| | | // }); |
| | | // this.$refs.productShowUpload.clearValidate(); |
| | | // }, |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | .promotion_page { |
| | | background-color: #f0f2f5; |
| | | .table_box_num { |
| | | margin-top: 5px; |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | align-items: center; |
| | | color: #666; |
| | | font-size: 14px; |
| | | font-weight: bold; |
| | | padding-right: 16px; |
| | | box-sizing: border-box; |
| | | span { |
| | | display: inline-block; |
| | | &:nth-child(even) { |
| | | margin-right: 20px; |
| | | color: #333; |
| | | } |
| | | } |
| | | } |
| | | .el-form-div { |
| | | width: 100%; |
| | | display: flex; |
| | | } |
| | | .tips{ |
| | | color: #f56c6c; |
| | | } |
| | | } |
| | | </style> |
| | | |
New file |
| | |
| | | <template> |
| | | <div> |
| | | |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | data() { |
| | | return { |
| | | |
| | | }; |
| | | }, |
| | | created() { |
| | | |
| | | }, |
| | | mounted() { |
| | | |
| | | }, |
| | | methods: { |
| | | |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped lang="less"> |
| | | |
| | | </style> |
New file |
| | |
| | | <!-- |
| | | * @Author: zhaoxiaoqiang 287285524@qq.com |
| | | * @Date: 2023-08-24 15:16:23 |
| | | * @LastEditors: zhaoxiaoqiang 287285524@qq.com |
| | | * @LastEditTime: 2023-08-24 15:17:26 |
| | | * @FilePath: \qyp_plat\src\views\qyp-project-order\history.vue |
| | | * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE |
| | | --> |
| | | <template> |
| | | <div> |
| | | |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | data() { |
| | | return { |
| | | |
| | | }; |
| | | }, |
| | | created() { |
| | | |
| | | }, |
| | | mounted() { |
| | | |
| | | }, |
| | | methods: { |
| | | |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped lang="less"> |
| | | |
| | | </style> |
New file |
| | |
| | | <!-- |
| | | * @Author: zhaoxiaoqiang 287285524@qq.com |
| | | * @Date: 2023-08-24 15:16:23 |
| | | * @LastEditors: zhaoxiaoqiang 287285524@qq.com |
| | | * @LastEditTime: 2023-08-24 16:57:47 |
| | | * @FilePath: \qyp_plat\src\views\qyp-project-order\history.vue |
| | | * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE |
| | | --> |
| | | <template> |
| | | <div> |
| | | 12121212 |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | data() { |
| | | return { |
| | | |
| | | }; |
| | | }, |
| | | created() { |
| | | |
| | | }, |
| | | mounted() { |
| | | |
| | | }, |
| | | methods: { |
| | | |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped lang="less"> |
| | | |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <div> |
| | | |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | data() { |
| | | return { |
| | | |
| | | }; |
| | | }, |
| | | created() { |
| | | |
| | | }, |
| | | mounted() { |
| | | |
| | | }, |
| | | methods: { |
| | | |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped lang="less"> |
| | | |
| | | </style> |
New file |
| | |
| | | <!-- |
| | | * @Author: zhaoxiaoqiang 287285524@qq.com |
| | | * @Date: 2023-08-24 15:16:23 |
| | | * @LastEditors: zhaoxiaoqiang 287285524@qq.com |
| | | * @LastEditTime: 2023-08-24 15:17:08 |
| | | * @FilePath: \qyp_plat\src\views\qyp-project-order\history.vue |
| | | * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE |
| | | --> |
| | | <template> |
| | | <div> |
| | | |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | data() { |
| | | return { |
| | | |
| | | }; |
| | | }, |
| | | created() { |
| | | |
| | | }, |
| | | mounted() { |
| | | |
| | | }, |
| | | methods: { |
| | | |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped lang="less"> |
| | | |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <div class="role-list"> |
| | | <el-card class="search-box"> |
| | | <el-form ref="formInline" :model="searchBox" :label-width="100" size="small" inline> |
| | | <el-form-item label="日期" prop="time"> |
| | | <el-date-picker |
| | | v-model="searchBox.time" |
| | | type="daterange" |
| | | range-separator="-" |
| | | start-placeholder="开始日期" |
| | | style="width: 240px" |
| | | end-placeholder="结束日期" |
| | | > |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="角色名" prop="Role"> |
| | | <el-select |
| | | v-model="searchBox.Role" |
| | | clearable |
| | | style="width: 240px" |
| | | placeholder="请输入角色" |
| | | > |
| | | <el-option |
| | | v-for="item in roleList" |
| | | clearable |
| | | filterable |
| | | :value="item.dataId + ''" |
| | | :key="item.dataId + ''" |
| | | v-text="item.dataName" |
| | | ></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="状态" prop="Status"> |
| | | <el-select |
| | | v-model="searchBox.Status" |
| | | clearable |
| | | style="width: 240px" |
| | | placeholder="请输入状态" |
| | | > |
| | | <el-option |
| | | v-for="item in statusList" |
| | | clearable |
| | | filterable |
| | | :value="item.dataId + ''" |
| | | :key="item.dataId + ''" |
| | | v-text="item.statusText" |
| | | ></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item prop="Status"> |
| | | |
| | | <el-button |
| | | type="primary" |
| | | class="tablePageBtnStyle" |
| | | @click.native="searchFn" |
| | | >查询</el-button> |
| | | <el-button |
| | | type="primary" |
| | | class="tablePageBtnStyle" |
| | | @click.native="newAdd" |
| | | >+新增</el-button> |
| | | |
| | | <el-button @click="userEdit">取消</el-button> |
| | | </el-form-item> |
| | | |
| | | </el-form> |
| | | <!-- <div class="btnbox"> |
| | | <el-button |
| | | type="primary" |
| | | class="tablePageBtnStyle" |
| | | @click.native="searchFn" |
| | | >查询</el-button |
| | | > |
| | | <el-button |
| | | type="primary" |
| | | class="tablePageBtnStyle" |
| | | @click.native="newAdd" |
| | | >+新增</el-button |
| | | > |
| | | </div> --> |
| | | |
| | | </el-card> |
| | | <Etable |
| | | :columns="columns" |
| | | :defaultValue="defaultVal" |
| | | @changed="tableCall" |
| | | ></Etable> |
| | | <!--新增模态窗 --> |
| | | <el-dialog v-model="addModel" width="500px" :title="modelName"> |
| | | <el-form :model="formModelDat" :label-width="80"> |
| | | <el-form-item label="角色名"> |
| | | <el-input |
| | | v-model="formModelData.roleName" |
| | | placeholder="请输入角色名" |
| | | ></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="状态"> |
| | | <el-select v-model="formModelData.statusCheckbox"> |
| | | <el-option value="all">全部</el-option> |
| | | <el-option value="on">启用</el-option> |
| | | <el-option value="off">停用</el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="菜单权限"> |
| | | <el-radio-group v-model="formModelData.menuCheckbox"> |
| | | <el-radio label="0">订单查询</el-radio> |
| | | <el-radio label="1">财务管理</el-radio> |
| | | <el-radio label="2">订单处理</el-radio> |
| | | <el-radio label="3">门店管理</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item label="操作权限"> |
| | | <el-radio-group v-model="formModelData.operationCheckbox"> |
| | | <el-radio label="0">导出</el-radio> |
| | | <el-radio label="1">对账</el-radio> |
| | | <el-radio label="2">结算</el-radio> |
| | | <el-radio label="3">商户新增及审核</el-radio><br /> |
| | | <el-radio label="4">结算查询</el-radio> |
| | | <el-radio label="5">提前结清</el-radio> |
| | | <el-radio label="6">对账查询</el-radio> |
| | | <el-radio label="7">商户编辑及密码重置</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div slot="footer"> |
| | | <el-button @click="addModel = false">取消</el-button> |
| | | <el-button v-if="!showSave" type="primary" @click.native="newAdd" |
| | | >新增</el-button |
| | | > |
| | | <el-button v-if="showSave" type="primary" @click.native="userEdit" |
| | | >保存</el-button |
| | | > |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | <script> |
| | | import Etable from "../../components/table.vue"; |
| | | export default { |
| | | name: "role-list", |
| | | components:{Etable}, |
| | | data() { |
| | | return { |
| | | // 模态框的数据 |
| | | formModelData: { |
| | | statusCheckbox: "all", |
| | | roleName: "", |
| | | operationCheckbox: [], |
| | | menuCheckbox: [] |
| | | }, |
| | | //查询的数据盒子 |
| | | searchBox: { |
| | | // merId: Cookies.get('clouds2_plat_merId'), |
| | | time: [], |
| | | Status: "all", |
| | | Role: "" |
| | | }, |
| | | showSave: false, |
| | | addModel: false, |
| | | modelName: "新增角色", |
| | | roleList: [], //角色列表 |
| | | statusList: [ |
| | | { |
| | | dataId: "all", |
| | | statusText: "全部" |
| | | }, |
| | | { |
| | | dataId: "on", |
| | | statusText: "启用" |
| | | }, |
| | | { |
| | | dataId: "off", |
| | | statusText: "停用" |
| | | } |
| | | ], //状态列表 |
| | | |
| | | columns: [ |
| | | // { |
| | | // title: "序号", |
| | | // align: "center", |
| | | // key: "orderId", |
| | | // width: 200 |
| | | // }, |
| | | { |
| | | lable: "创建日期", |
| | | align: "center", |
| | | prop: "prodName", |
| | | width: 200 |
| | | }, |
| | | { |
| | | lable: "角色名", |
| | | align: "center", |
| | | prop: "nodeStatus", |
| | | width: 180 |
| | | }, |
| | | { |
| | | lable: "状态", |
| | | align: "center", |
| | | prop: "cusMblNo", |
| | | width: 200 |
| | | }, |
| | | { |
| | | lable: "", |
| | | align: "center" |
| | | }, |
| | | { |
| | | lable: "操作", |
| | | prop: "action", |
| | | width: 110, |
| | | fixed: "right", |
| | | align: "center", |
| | | render: (h, params) => { |
| | | let result = []; |
| | | result.push( |
| | | h( |
| | | "a", |
| | | { |
| | | style: { |
| | | color: "#357eff" |
| | | }, |
| | | on: { |
| | | click: () => { |
| | | this.userEdit(); |
| | | } |
| | | } |
| | | }, |
| | | "编辑" |
| | | ) |
| | | ); |
| | | return h("div", result); |
| | | } |
| | | } |
| | | ] |
| | | }; |
| | | }, |
| | | methods: { |
| | | searchFn() { |
| | | let obj = { ...this.searchBox }; |
| | | this.filt = { ...this.defaultVal }; |
| | | }, |
| | | newAdd() { |
| | | this.addModel = true; |
| | | let obj = this.formModelData; |
| | | }, |
| | | userEdit() { |
| | | this.addModel = true; |
| | | this.modelName = "编辑用户"; |
| | | this.showSave = true; |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | .role-list { |
| | | padding: 16px; |
| | | .search-box { |
| | | display: flex; |
| | | justify-content: lex-start; |
| | | align-items: lex-start; |
| | | flex-direction: row; |
| | | padding-top: 24px; |
| | | padding-right: 24px; |
| | | background-color: #ffffff; |
| | | margin-bottom: 15px; |
| | | } |
| | | .btnbox { |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | flex-direction: column; |
| | | .ivu-btn { |
| | | &:last-child { |
| | | margin-top: 20px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .user-num { |
| | | display: flex; |
| | | margin-bottom: 16px; |
| | | .user-num-title { |
| | | width: 80px; |
| | | text-align: right; |
| | | vertical-align: middle; |
| | | float: left; |
| | | font-size: 12px; |
| | | color: #495060; |
| | | line-height: 1; |
| | | padding: 10px 12px 10px 0; |
| | | box-sizing: border-box; |
| | | } |
| | | .user-number { |
| | | vertical-align: middle; |
| | | float: left; |
| | | font-size: 12px; |
| | | color: #495060; |
| | | line-height: 1; |
| | | padding: 10px 12px 10px 0; |
| | | box-sizing: border-box; |
| | | } |
| | | } |
| | | </style> |
New file |
| | |
| | | <!-- |
| | | * @Author: 小明丶 |
| | | * @Date: 2019-10-25 10:17:56 |
| | | * @LastEditors: zxq |
| | | * @LastEditTime: 2023-04-25 15:34:05 |
| | | * @Description: |
| | | --> |
| | | <template> |
| | | <div class="role-control-page"> |
| | | <el-row type="flex" align="top" justify="start" :gutter="16"> |
| | | <el-col :span="6"> |
| | | <el-card> |
| | | <div class="role-list-title"> |
| | | <span>角色列表</span> |
| | | <el-button type="primary" @click="addRoleModel = true" size="small">新增</el-button> |
| | | </div> |
| | | <div class="role-list-table"> |
| | | <Etable isFind httpUrl="roleGetRoleList" itemsArr="roles" highlightCurrentRow :columns="columns" :searchData="searchData" :hasPagination="false" @operateDo="operateDo" @cellClick="powerInit" border></Etable> |
| | | </div> |
| | | </el-card> |
| | | </el-col> |
| | | <el-col :span="18"> |
| | | <el-card> |
| | | <el-tabs value="操作权限"> |
| | | <el-tab-pane label="操作权限" name="操作权限"> |
| | | <el-collapse v-for="item in initList" :key="item.powerId"> |
| | | <el-collapse-item :name="item.powerId" :key="item.powerId"> |
| | | <template slot="title"> |
| | | {{ item.powerName }}<i class="header-icon el-icon-info"></i> |
| | | <el-checkbox :id="item.powerId + ''" class="input" type="checkbox" style="position: absolute; right: 25px" v-model="checkedList[item.powerId]" @change="getAll($event, item.powerId, 'power')" /> |
| | | </template> |
| | | <el-checkbox class="checkBox-item" v-for="el in item.btnInfos" @change="getAll($event, el.code, 'btn')" v-model="gnCheckedList[el.code]" :key="el.code" :label="el.code" :id="el.code + ''">{{ el.name }}</el-checkbox> |
| | | </el-collapse-item> |
| | | </el-collapse> |
| | | <div class="btn-box"> |
| | | <el-checkbox v-model="allChecked" type="checkbox" @change="allCheck"> |
| | | 全选 |
| | | </el-checkbox> |
| | | <el-button type="primary" style="margin-left: 20px" size="small" :loading="btnLoading" @click="submitFn">保存</el-button> |
| | | </div> |
| | | </el-tab-pane> |
| | | </el-tabs> |
| | | </el-card> |
| | | </el-col> |
| | | </el-row> |
| | | <!--新增模态窗--> |
| | | <el-dialog title="新增角色" width="500px" :visible.sync="addRoleModel" @on-visible-change="clearVal" class-name="vertical-center-modal"> |
| | | <div> |
| | | <el-input v-model="addRoleVal" :maxlength="32" placeholder="请输入角色名称" style="width: 100%"></el-input> |
| | | </div> |
| | | <div slot="footer"> |
| | | <el-button type="primary" size="small" :loading="roleAddModalLoading" @click="addRoleBut">新增</el-button> |
| | | <el-button size="small" @click="addRoleModel = false">取消</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | <!--编辑模态窗--> |
| | | <el-dialog title="编辑角色" width="500px" :visible.sync="editRoleModel" @on-visible-change="clearVal" class-name="vertical-center-modal"> |
| | | <div> |
| | | <el-input v-model="editRoleVal" placeholder="请输入角色名称" style="width: 100%"></el-input> |
| | | </div> |
| | | <div slot="footer"> |
| | | <el-button type="primary" size="small" :loading="roleEditModalLoading" @click="editRoleBut">保存</el-button> |
| | | <el-button size="small" @click="editRoleModel = false">取消</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | <!--删除模态窗--> |
| | | <el-dialog :visible.sync="removeModel" width="400px" class-name="vertical-center-modal"> |
| | | <p slot="title">删除角色</p> |
| | | <div style="display: flex; align-items: center"> |
| | | <i class="el-icon-info" style="color: red; font-size: 26px"></i> |
| | | <span style="margin-left: 20px">删除角色后无法恢复,请问是否确认?</span> |
| | | </div> |
| | | <div slot="footer"> |
| | | <el-button type="primary" size="small" :loading="roleEditModalLoading" @click="removeFn">确认</el-button> |
| | | <el-button size="small" @click="removeModel = false">取消</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | setInit, |
| | | setPower, |
| | | roleAdd, |
| | | roleUpdate, |
| | | roleDel, |
| | | roleInitUpdate, |
| | | } from "@/api/user"; |
| | | |
| | | import Etable from "../../components/table.vue"; |
| | | export default { |
| | | name: "role-management", |
| | | components: { Etable }, |
| | | data() { |
| | | return { |
| | | roleType: 1, //数据权限产品区分 |
| | | gnCheckedList: {}, //功能选项选中 |
| | | checkedList: {}, //控制主菜单的选中 |
| | | allChecked: false, //全选 |
| | | btnLoading: false, |
| | | loading: false, |
| | | initList: [], //初始化渲染list |
| | | btnList: [], //按钮权限 |
| | | powerList: [], //菜单权限 |
| | | addRoleVal: "", //新增角色名称 |
| | | roleId: "", //被编辑的角色ID |
| | | editRoleVal: "", //编辑角色名称 |
| | | addRoleModel: false, // 新增角色模态窗 |
| | | editRoleModel: false, // 编辑模态窗 |
| | | removeModel: false, //删除模态窗 |
| | | removeRoleModel: false, //删除莫泰传 |
| | | roleAddModalLoading: false, |
| | | roleEditModalLoading: false, |
| | | list: [], |
| | | columns: [ |
| | | { |
| | | lable: "角色名称", |
| | | prop: "name", |
| | | }, |
| | | { |
| | | lable: "", |
| | | align: "right", |
| | | render: (h, params) => { |
| | | return h( |
| | | "div", |
| | | { |
| | | style: |
| | | "display:flex;align-items:center;justify-content:flex-end;", |
| | | }, |
| | | [ |
| | | //编辑 |
| | | h( |
| | | "div", |
| | | { |
| | | on: { |
| | | click: () => { |
| | | this.editRoleVal = params.row.name; |
| | | this.editRoleModel = true; |
| | | this.roleId = params.row.code; |
| | | }, |
| | | }, |
| | | }, |
| | | [ |
| | | h("i", { |
| | | class: "el-icon-edit", |
| | | style: "margin-right:15px;cursor:pointer;font-size:16px;", |
| | | }), |
| | | ] |
| | | ), |
| | | //删除 |
| | | h( |
| | | "div", |
| | | { |
| | | on: { |
| | | click: () => { |
| | | this.removeModel = true; |
| | | this.roleId = params.row.roleId; |
| | | }, |
| | | }, |
| | | }, |
| | | [ |
| | | h("i", { |
| | | class: "el-icon-delete", |
| | | style: "cursor:pointer;font-size:16px;", |
| | | }), |
| | | ] |
| | | ), |
| | | ] |
| | | ); |
| | | }, |
| | | }, |
| | | ], |
| | | searchData: {}, |
| | | }; |
| | | }, |
| | | methods: { |
| | | //全选 |
| | | allCheck(e) { |
| | | // 按钮权限 |
| | | for (let key in this.gnCheckedList) { |
| | | this.gnCheckedList[key] = this.allChecked; |
| | | } |
| | | Object.keys(this.gnCheckedList).map((item) => |
| | | this.btnList.indexOf(Number(item)) < 0 |
| | | ? this.btnList.push(Number(item)) |
| | | : "" |
| | | ); |
| | | // // =================== |
| | | for (let key in this.checkedList) { |
| | | this.checkedList[key] = this.allChecked; |
| | | } |
| | | Object.keys(this.checkedList).map((item) => |
| | | this.powerList.indexOf(Number(item)) < 0 |
| | | ? this.powerList.push(Number(item)) |
| | | : "" |
| | | ); |
| | | if (!this.allChecked) { |
| | | this.btnList = []; |
| | | this.powerList = []; |
| | | } |
| | | this.$forceUpdate(); |
| | | }, |
| | | //选择角色 |
| | | powerInit(params) { |
| | | this.roleId = params.code; |
| | | let obj = { |
| | | roleId: params.code, |
| | | }; |
| | | setInit(obj).then((res) => { |
| | | if (res.body.btnList) { |
| | | this.btnList = res.body.btnList; |
| | | this.$forceUpdate(); |
| | | Object.keys(this.gnCheckedList).forEach((item) => { |
| | | this.gnCheckedList[item] = false; |
| | | this.btnList.forEach((el) => { |
| | | if (item == el) { |
| | | this.gnCheckedList[item] = true; |
| | | } |
| | | }); |
| | | }); |
| | | } |
| | | if (res.body.powerList) { |
| | | this.powerList = res.body.powerList; |
| | | Object.keys(this.checkedList).forEach((item) => { |
| | | this.checkedList[item] = false; |
| | | this.powerList.forEach((el) => { |
| | | if (item == el) { |
| | | this.checkedList[item] = true; |
| | | } |
| | | }); |
| | | }); |
| | | } |
| | | this.allChecked = Object.values(this.checkedList).every( |
| | | (item) => item == true |
| | | ); |
| | | }); |
| | | }, |
| | | clearVal() { |
| | | this.addRoleVal = ""; |
| | | }, |
| | | submitFn() { |
| | | if (!this.roleId) { |
| | | this.$message({ |
| | | message: "请先选择角色后再提交!", |
| | | type: "error", |
| | | }); |
| | | return; |
| | | } |
| | | let obj = { |
| | | powerList: this.powerList, |
| | | btnList: this.btnList, |
| | | roleId: this.roleId, |
| | | }; |
| | | setPower(obj).then( |
| | | (res) => { |
| | | this.$message({ |
| | | message: "保存成功", |
| | | type: "success", |
| | | }); |
| | | this.btnLoading = false; |
| | | }, |
| | | (err) => { |
| | | this.btnLoading = false; |
| | | } |
| | | ); |
| | | }, |
| | | //主菜单增加或者删除 |
| | | getAll(e, i, def) { |
| | | // 菜单权限 |
| | | if (def == "power") { |
| | | if (this.checkedList[i]) { |
| | | if (this.powerList.indexOf(i) < 0) { |
| | | this.powerList.push(i); |
| | | } |
| | | } else { |
| | | this.powerList.splice(this.powerList.indexOf(i), 1);//删除菜单ID |
| | | let str = `${i}`.substring(0,2);//要删除的id前两位 |
| | | let idArr = []; |
| | | this.powerList.forEach(m=>{ |
| | | let powerStr =`${m}`.substring(0,2); |
| | | if(str == powerStr ){ |
| | | idArr.push(m); |
| | | } |
| | | }) |
| | | if(idArr.length==1&&idArr[0]==`${str}00`){ |
| | | this.powerList.splice(this.powerList.indexOf(idArr[0]), 1); |
| | | } |
| | | } |
| | | } |
| | | // 按钮权限 |
| | | if (def == "btn") { |
| | | if (this.gnCheckedList[i]) { |
| | | if (this.btnList.indexOf(i) < 0) this.btnList.push(i); |
| | | } else { |
| | | this.btnList.splice(this.btnList.indexOf(i), 1); |
| | | } |
| | | } |
| | | this.$forceUpdate(); |
| | | // 选中所有 |
| | | this.allChecked = Object.values(this.checkedList).every( |
| | | (item) => item == true |
| | | ); |
| | | }, |
| | | //全选按钮 |
| | | addRoleBut() { |
| | | if (!this.addRoleVal) { |
| | | this.$Message.error("请输入角色名称!"); |
| | | return; |
| | | } |
| | | let reg = /^[\u4e00-\u9fa50-9a-zA-Z]{1,32}$/; |
| | | if (!reg.test(this.addRoleVal)) { |
| | | this.$Message.error("请输入正确的角色名称!"); |
| | | return; |
| | | } |
| | | let obj = { |
| | | roleName: this.addRoleVal, |
| | | }; |
| | | roleAdd(obj).then( |
| | | (res) => { |
| | | this.$message({ |
| | | message: "新建角色成功!", |
| | | type: "success", |
| | | }); |
| | | this.initList = []; |
| | | this.addRoleModel = false; |
| | | this.addRoleVal = ""; |
| | | this.searchData = { ...{} }; |
| | | this.init(); |
| | | }, |
| | | (err) => { } |
| | | ); |
| | | }, |
| | | editRoleBut() { |
| | | if (!this.editRoleVal) { |
| | | this.$Message.error("请输入角色名称!"); |
| | | return; |
| | | } |
| | | let reg = /^[\u4e00-\u9fa50-9a-zA-Z]{1,32}$/; |
| | | if (!reg.test(this.editRoleVal)) { |
| | | this.$Message.error("请输入正确的角色名称!"); |
| | | return; |
| | | } |
| | | let obj = { |
| | | roleName: this.editRoleVal, |
| | | roleId: this.roleId, |
| | | }; |
| | | |
| | | roleUpdate(obj).then( |
| | | () => { |
| | | this.$message({ |
| | | message: "保存成功!", |
| | | type: "success", |
| | | }); |
| | | this.initList = []; |
| | | this.editRoleModel = false; |
| | | this.editRoleVal = ""; |
| | | this.roleId = ""; |
| | | this.searchData = { ...{} }; |
| | | this.init(); |
| | | }, |
| | | (err) => { |
| | | // codeManage.showTipOfStatuCode(err, this);(err, this); |
| | | } |
| | | ); |
| | | }, |
| | | removeFn() { |
| | | this.removeModel = false; |
| | | let obj = { |
| | | roleId: this.roleId, |
| | | }; |
| | | roleDel(obj).then( |
| | | () => { |
| | | this.$message({ |
| | | message: "删除成功!", |
| | | type: "success", |
| | | }); |
| | | this.initList = []; |
| | | this.searchData = { ...{} }; |
| | | this.init(); |
| | | }, |
| | | (err) => { |
| | | // codeManage.showTipOfStatuCode(err, this);(err, this); |
| | | } |
| | | ); |
| | | }, |
| | | init() { |
| | | roleInitUpdate().then((res) => { |
| | | this.setCheckedList(res.body.powerInfos); |
| | | }); |
| | | }, |
| | | setCheckedList(powerInfos, fatherItem) { |
| | | // this.checkedList = []; |
| | | powerInfos.forEach((item, index) => { |
| | | this.checkedList[item.powerId] = false; |
| | | if (item.btnInfos) { |
| | | item.btnInfos.forEach((ite) => { |
| | | this.gnCheckedList[ite.code] = false; |
| | | }); |
| | | } |
| | | if (item.btnInfos) { |
| | | item.btnInfos.forEach((btn) => { |
| | | this.gnCheckedList[btn.code] = false; |
| | | }); |
| | | } |
| | | |
| | | if (item.childPowerInfos) { |
| | | this.setCheckedList(item.childPowerInfos, item); |
| | | } |
| | | if (fatherItem) { |
| | | let arrItem = item; |
| | | arrItem.powerName = fatherItem.powerName + "——" + item.powerName; |
| | | this.initList.push(arrItem); |
| | | } else { |
| | | if (!item.childPowerInfos || item.childPowerInfos.length == 0) { |
| | | this.initList.push(item); |
| | | } |
| | | } |
| | | }); |
| | | console.log(this.initList); |
| | | this.loading = true; |
| | | }, |
| | | operateDo() { }, |
| | | }, |
| | | created() { |
| | | this.init(); |
| | | }, |
| | | }; |
| | | </script> |
| | | <style lang="scss"> |
| | | .ivu-modal-content { |
| | | width: auto !important; |
| | | } |
| | | .el-collapse-item__header { |
| | | height: 38px; |
| | | line-height: 38px; |
| | | padding-left: 32px; |
| | | background-color: #f7f7f7; |
| | | } |
| | | .title_box { |
| | | flex: 1; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | margin-right: 15px; |
| | | } |
| | | .ivu-modal-body { |
| | | width: auto !important; |
| | | } |
| | | // .line { |
| | | // width: 100%; |
| | | // padding-left: 25px; |
| | | // border-bottom: 1px solid #dddee1; |
| | | // } |
| | | .box { |
| | | width: 100%; |
| | | margin-bottom: 15px; |
| | | background: #e9e9e9; |
| | | } |
| | | .ivu-checkbox-group { |
| | | padding-top: 15px; |
| | | padding-left: 25px; |
| | | } |
| | | .role-control-page { |
| | | .ivu-collapse-content > .ivu-collapse-content-box { |
| | | padding-bottom: 10px; |
| | | } |
| | | // .ivu-collapse-content { |
| | | // // padding: 0 16px; |
| | | // } |
| | | .role-list-title { |
| | | display: flex; |
| | | display: -webkit-flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | padding-bottom: 10px; |
| | | border-bottom: 1px solid #dddee1; |
| | | } |
| | | .role-list-table { |
| | | margin-top: 20px; |
| | | } |
| | | .ivu-card { |
| | | height: 90vh; |
| | | overflow-y: scroll; |
| | | } |
| | | .flex-layout { |
| | | display: flex; |
| | | justify-content: flex-start; |
| | | align-items: center; |
| | | flex-wrap: wrap; |
| | | } |
| | | .ivu-checkbox-wrapper { |
| | | width: 120px; |
| | | margin-right: 13%; |
| | | margin-bottom: 20px; |
| | | } |
| | | .btn-box { |
| | | margin-top: 20px; |
| | | display: flex; |
| | | display: -webkit-flex; |
| | | justify-content: flex-end; |
| | | align-items: center; |
| | | } |
| | | .dataPower-item { |
| | | border-bottom: 1px solid #dddee1; |
| | | padding-bottom: 20px; |
| | | margin-bottom: 80px; |
| | | } |
| | | .el-collapse-item__content { |
| | | padding: 12px 16px; |
| | | } |
| | | } |
| | | </style> |
New file |
| | |
| | | |
| | | const path = require('path') |
| | | const defaultSettings = require('./src/settings.js') |
| | | |
| | | function resolve(dir) { |
| | | return path.join(__dirname, dir) |
| | | } |
| | | |
| | | const name = defaultSettings.title || '权益品后台管理' // page title |
| | | const port = process.env.port || process.env.npm_config_port || 9528 // dev port |
| | | |
| | | module.exports = { |
| | | publicPath: './', |
| | | outputDir: 'dist', |
| | | assetsDir: 'static', |
| | | lintOnSave: false, |
| | | productionSourceMap: false, |
| | | devServer: { |
| | | open: true, // 设置是否自动打开浏览器 |
| | | hotOnly: true, // 是否开启热更新 |
| | | proxy: { |
| | | "/flp": { |
| | | target: "https://t.finlean.com", |
| | | ws: true, |
| | | changeOrigin: true, |
| | | }, |
| | | "/jttech": { |
| | | target: "https://t.finlean.com", |
| | | secure: false, |
| | | changeOrigin: true, |
| | | } |
| | | } |
| | | // before: require('./mock/mock-server.js') |
| | | }, |
| | | configureWebpack: { |
| | | // provide the app's title in webpack's name field, so that |
| | | // it can be accessed in index.html to inject the correct title. |
| | | name: name, |
| | | resolve: { |
| | | alias: { |
| | | '@': resolve('src') |
| | | } |
| | | } |
| | | }, |
| | | chainWebpack(config) { |
| | | config.plugin('preload').tap(() => [ |
| | | { |
| | | rel: 'preload', |
| | | fileBlacklist: [/\.map$/, /hot-update\.js$/, /runtime\..*\.js$/], |
| | | include: 'initial' |
| | | } |
| | | ]) |
| | | config.plugins.delete('prefetch') |
| | | config.module |
| | | .rule('svg') |
| | | .exclude.add(resolve('src/icons')) |
| | | .end() |
| | | config.module |
| | | .rule('icons') |
| | | .test(/\.svg$/) |
| | | .include.add(resolve('src/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 |
| | | priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app |
| | | test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm |
| | | }, |
| | | 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') |
| | | } |
| | | ) |
| | | } |
| | | } |