fangq il y a 4 ans
commit
a0feecb6a4
100 fichiers modifiés avec 999 ajouts et 0 suppressions
  1. 9 0
      .editorconfig
  2. 13 0
      .env.development
  3. 13 0
      .env.production
  4. 6 0
      .eslintignore
  5. 25 0
      .eslintrc.js
  6. 18 0
      .gitignore
  7. 8 0
      .postcssrc.js
  8. 3 0
      Dockerfile
  9. 11 0
      README.md
  10. 14 0
      babel.config.js
  11. 24 0
      jest.config.js
  12. 9 0
      jsconfig.json
  13. 17 0
      nginx.conf
  14. 73 0
      package.json
  15. 8 0
      postcss.config.js
  16. BIN
      public/favicon.ico
  17. 37 0
      public/index.html
  18. 33 0
      src/App.vue
  19. BIN
      src/assets/img/address.png
  20. BIN
      src/assets/img/alpay.png
  21. BIN
      src/assets/img/avatar.png
  22. BIN
      src/assets/img/buyer.png
  23. BIN
      src/assets/img/car.png
  24. BIN
      src/assets/img/def.png
  25. BIN
      src/assets/img/default-verify-error.jpg
  26. BIN
      src/assets/img/downArrow.png
  27. BIN
      src/assets/img/example-img/Business-license.png
  28. BIN
      src/assets/img/example-img/idcard1.png
  29. BIN
      src/assets/img/example-img/idcard2.png
  30. BIN
      src/assets/img/home/afterSale.png
  31. BIN
      src/assets/img/home/customerPrice.png
  32. BIN
      src/assets/img/home/ic-arrow-narrow-down.png
  33. BIN
      src/assets/img/home/ic-arrow-narrow-up.png
  34. BIN
      src/assets/img/home/payCount.png
  35. BIN
      src/assets/img/home/payCustomers.png
  36. BIN
      src/assets/img/home/pendingDelivery.png
  37. BIN
      src/assets/img/home/pendingPayment.png
  38. BIN
      src/assets/img/home/pendingReview.png
  39. BIN
      src/assets/img/home/refundAmount.png
  40. BIN
      src/assets/img/home/totalOrderAmount.png
  41. BIN
      src/assets/img/horn.png
  42. BIN
      src/assets/img/icons.png
  43. BIN
      src/assets/img/index_z354723.png
  44. BIN
      src/assets/img/invoice.png
  45. BIN
      src/assets/img/line.png
  46. BIN
      src/assets/img/link-send.png
  47. BIN
      src/assets/img/login-bg.png
  48. BIN
      src/assets/img/login-logo.png
  49. BIN
      src/assets/img/message.png
  50. 1 0
      src/assets/img/message.svg
  51. BIN
      src/assets/img/micro-page/ad-1.png
  52. BIN
      src/assets/img/micro-page/ad-2.png
  53. BIN
      src/assets/img/micro-page/ad-3.png
  54. BIN
      src/assets/img/micro-page/ad-4.png
  55. BIN
      src/assets/img/micro-page/card.png
  56. BIN
      src/assets/img/micro-page/carousel-swiper-active.png
  57. BIN
      src/assets/img/micro-page/carousel-swiper.png
  58. BIN
      src/assets/img/micro-page/class.png
  59. BIN
      src/assets/img/micro-page/def.png
  60. BIN
      src/assets/img/micro-page/lateral-sliding-active.png
  61. BIN
      src/assets/img/micro-page/lateral-sliding.png
  62. BIN
      src/assets/img/micro-page/menu.png
  63. BIN
      src/assets/img/micro-page/micro-create-header.png
  64. BIN
      src/assets/img/micro-page/micro-create-header1.png
  65. BIN
      src/assets/img/micro-page/notice.png
  66. BIN
      src/assets/img/micro-page/one-line-one-active.png
  67. BIN
      src/assets/img/micro-page/one-line-one.png
  68. BIN
      src/assets/img/micro-page/p-ad-def.png
  69. BIN
      src/assets/img/micro-page/p-hotarea-active.png
  70. BIN
      src/assets/img/micro-page/p-hotarea.png
  71. BIN
      src/assets/img/micro-page/p-image-ad-active.png
  72. BIN
      src/assets/img/micro-page/p-image-ad.png
  73. BIN
      src/assets/img/micro-page/p-link-active.png
  74. BIN
      src/assets/img/micro-page/p-link.png
  75. BIN
      src/assets/img/micro-page/p-notice-active.png
  76. BIN
      src/assets/img/micro-page/p-notice.png
  77. BIN
      src/assets/img/micro-page/p-prod-list-active.png
  78. BIN
      src/assets/img/micro-page/p-prod-list.png
  79. BIN
      src/assets/img/micro-page/p-promotion-active.png
  80. BIN
      src/assets/img/micro-page/p-promotion.png
  81. BIN
      src/assets/img/micro-page/p-search-active.png
  82. BIN
      src/assets/img/micro-page/p-search.png
  83. BIN
      src/assets/img/micro-page/p-tabs-active.png
  84. BIN
      src/assets/img/micro-page/p-tabs.png
  85. BIN
      src/assets/img/micro-page/p-text-active.png
  86. BIN
      src/assets/img/micro-page/p-text.png
  87. BIN
      src/assets/img/msg.png
  88. BIN
      src/assets/img/question-mark.png
  89. BIN
      src/assets/img/remarks.png
  90. BIN
      src/assets/img/revise.png
  91. BIN
      src/assets/img/success.png
  92. BIN
      src/assets/img/time.png
  93. BIN
      src/assets/img/unread-up.png
  94. BIN
      src/assets/img/upArrow.png
  95. BIN
      src/assets/img/upload-on.png
  96. BIN
      src/assets/img/upload.png
  97. BIN
      src/assets/img/userImg.jpg
  98. BIN
      src/assets/img/weixinpay.png
  99. BIN
      src/assets/img/yami.png
  100. 677 0
      src/assets/scss/_base.scss

+ 9 - 0
.editorconfig

@@ -0,0 +1,9 @@
+root = true
+
+[*]
+charset = utf-8
+indent_style = space
+indent_size = 2
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true

+ 13 - 0
.env.development

@@ -0,0 +1,13 @@
+# just a flag
+ENV = 'development'
+
+// api接口请求地址
+VUE_APP_BASE_API = 'https://b2b2c-multishop.mall4j.com/apis'
+
+// 客服api接口请求地址
+VUE_APP_IM_API = 'https://b2b2c-im.mall4j.com'
+// 客服webstock接口请求地址
+VUE_APP_WS_IM_API = 'wss://b2b2c-im.mall4j.com'
+// 静态资源文件url
+VUE_APP_RESOURCES_URL = 'https://img.mall4j.com/'
+

+ 13 - 0
.env.production

@@ -0,0 +1,13 @@
+# just a flag
+ENV = 'production'
+
+// api接口请求地址
+VUE_APP_BASE_API = 'https://b2b2c-multishop.mall4j.com/apis'
+// 客服api接口请求地址
+VUE_APP_IM_API = 'https://b2b2c-im.mall4j.com'
+// 客服webstock接口请求地址
+VUE_APP_WS_IM_API = 'wss://b2b2c-im.mall4j.com'
+
+# 静态资源文件url
+VUE_APP_RESOURCES_URL = 'https://img.mall4j.com/'
+

+ 6 - 0
.eslintignore

@@ -0,0 +1,6 @@
+/build/
+/config/
+/dist/
+/*.js
+/test/unit/coverage/
+/src/icons/iconfont.js

+ 25 - 0
.eslintrc.js

@@ -0,0 +1,25 @@
+// https://eslint.org/docs/user-guide/configuring
+
+module.exports = {
+  root: true,
+  parser: 'babel-eslint',
+  parserOptions: {
+    sourceType: 'module'
+  },
+  env: {
+    browser: true,
+  },
+  // https://github.com/standard/standard/blob/master/docs/RULES-en.md
+  extends: 'standard',
+  // required to lint *.vue files
+  plugins: [
+    'html'
+  ],
+  // add your custom rules here
+  rules: {
+    // allow async-await
+    'generator-star-spacing': 'off',
+    // allow debugger during development
+    'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
+  }
+}

+ 18 - 0
.gitignore

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

+ 8 - 0
.postcssrc.js

@@ -0,0 +1,8 @@
+// https://github.com/michael-ciniawsky/postcss-load-config
+
+module.exports = {
+  'plugins': {
+    // to edit target browsers: use "browserslist" field in package.json
+    'autoprefixer': {}
+  }
+}

+ 3 - 0
Dockerfile

@@ -0,0 +1,3 @@
+FROM nginx:1.20
+COPY ./dist /usr/share/nginx/html/dist
+COPY ./nginx.conf /etc/nginx/conf.d

+ 11 - 0
README.md

@@ -0,0 +1,11 @@
+## 协议和授权
+
+`mall4vs-bbc` 并非一个开源软件,作者保留全部的权利。 擅自窃用,即属严重侵权行为,与盗窃无异。产生的一切任何后果责任由侵权者自负。
+
+## 商业使用
+
+商用请联系 **广州蓝海创新科技有限公司** 获取授权,否则产生的一切任何后果责任由侵权者自负。
+
+## 🚫禁止
+
+将本项目的部分或全部代码和资源进行任何形式的再发行(上传GitHub、Gitee等任何公开发行的地方)

+ 14 - 0
babel.config.js

@@ -0,0 +1,14 @@
+module.exports = {
+  presets: [
+    // https://github.com/vuejs/vue-cli/tree/master/packages/@vue/babel-preset-app
+    '@vue/cli-plugin-babel/preset'
+  ],
+  'env': {
+    'development': {
+      // babel-plugin-dynamic-import-node plugin only does one thing by converting all import() to require().
+      // This plugin can significantly increase the speed of hot updates, when you have a large number of pages.
+      // https://panjiachen.github.io/vue-element-admin-site/guide/advanced/lazy-loading.html
+      'plugins': ['dynamic-import-node']
+    }
+  }
+}

+ 24 - 0
jest.config.js

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

+ 9 - 0
jsconfig.json

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

+ 17 - 0
nginx.conf

@@ -0,0 +1,17 @@
+server {
+    listen 80;
+    server_name b2b2c-multishop.mall4j.com;
+
+    location / {
+        root /usr/share/nginx/html/dist;
+    }
+
+    error_page 404 /404.html;
+        location = /404-light.html {
+    }
+
+    error_page 500 502 503 504 /50x.html;
+        location = /50x.html {
+    }
+}
+

+ 73 - 0
package.json

@@ -0,0 +1,73 @@
+{
+  "name": "admin-vue",
+  "version": "1.0.0",
+  "private": true,
+  "scripts": {
+    "dev": "vue-cli-service serve",
+    "lint": "eslint --ext .js,.vue src",
+    "build:prod": "vue-cli-service build",
+    "build": "gulp"
+  },
+  "dependencies": {
+    "axios": "0.18.1",
+    "big.js": "^5.2.2",
+    "core-js": "3.6.5",
+    "dompurify": "^2.3.3",
+    "echarts": "^5.2.0",
+    "element-resize-detector": "^1.2.3",
+    "element-ui": "2.15.7",
+    "js-base64": "^3.6.1",
+    "lodash": "4.17.5",
+    "moment": "^2.29.1",
+    "qrcode": "^1.4.4",
+    "video.js": "^7.8.4",
+    "videojs-contrib-hls": "^5.15.0",
+    "vue": "2.6.14",
+    "vue-baidu-map": "^0.21.22",
+    "vue-cookie": "1.1.4",
+    "vue-i18n": "8.24.5",
+    "vue-router": "3.5.2",
+    "vue-slicksort": "^1.1.3",
+    "vuedraggable": "2.23.2",
+    "vuex": "3.6.2"
+  },
+  "devDependencies": {
+    "@vue/cli-plugin-babel": "4.5.13",
+    "@vue/cli-plugin-unit-jest": "4.5.13",
+    "@vue/cli-service": "4.5.13",
+    "autoprefixer": "9.8.6",
+    "babel-eslint": "7.1.1",
+    "babel-jest": "^23.6.0",
+    "babel-plugin-dynamic-import-node": "^2.3.3",
+    "chalk": "^2.4.2",
+    "connect": "^3.6.6",
+    "crypto-js": "^4.1.1",
+    "eslint": "3.19.0",
+    "eslint-config-standard": "10.2.1",
+    "eslint-friendly-formatter": "3.0.0",
+    "eslint-loader": "1.7.1",
+    "eslint-plugin-html": "3.0.0",
+    "eslint-plugin-import": "2.7.0",
+    "eslint-plugin-node": "5.2.0",
+    "eslint-plugin-promise": "3.5.0",
+    "eslint-plugin-standard": "3.0.1",
+    "html-webpack-plugin": "^3.2.0",
+    "runjs": "^4.3.2",
+    "sass": "1.49.9",
+    "sass-loader": "10.2.0",
+    "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.14"
+  },
+  "engines": {
+    "node": ">= 8.11.1",
+    "npm": ">= 5.6.0"
+  },
+  "browserslist": [
+    "> 1%",
+    "last 2 versions",
+    "not ie <= 8"
+  ]
+}

+ 8 - 0
postcss.config.js

@@ -0,0 +1,8 @@
+// https://github.com/michael-ciniawsky/postcss-load-config
+
+module.exports = {
+  'plugins': {
+    // to edit target browsers: use "browserslist" field in package.json
+    'autoprefixer': {}
+  }
+}

BIN
public/favicon.ico


+ 37 - 0
public/index.html

@@ -0,0 +1,37 @@
+<!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">
+    <title></title>
+    <script>
+      var webConfigData = JSON.parse(localStorage.getItem('webConfigData'))
+      if (webConfigData) {
+        let lang = localStorage.getItem('lang')
+        if (lang !== 'en') {
+          document.title = webConfigData.bsTitleContentCn || ''
+        } else {
+          document.title = webConfigData.bsTitleContentEn || ''
+        }
+
+        let facicon = document.querySelector('link[rel="icon"]')
+        if (facicon !== null) {
+          facicon.href = webConfigData.bsTitleImg
+        } else {
+          facicon = document.createElement('link')
+          facicon.rel = 'icon'
+          facicon.href = webConfigData.bsTitleImg
+          document.head.appendChild(facicon)
+        }
+      }
+    </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>

+ 33 - 0
src/App.vue

@@ -0,0 +1,33 @@
+<template>
+  <transition name="fade">
+    <router-view></router-view>
+  </transition>
+</template>
+
+<script>
+export default {
+  mounted () {
+    // 检测浏览器路由改变页面不刷新问题,hash模式的工作原理是hashchange事件
+    window.addEventListener('hashchange', () => {
+      let currentPath = window.location.hash.slice(1)
+      if (this.$route.path !== currentPath) {
+        this.$router.push(currentPath)
+      }
+    }, false)
+  },
+  computed: {
+    key () {
+      return this.$route.path + Math.random()
+    }
+  }
+}
+</script>
+
+<style>
+.maxindex {
+  z-index: 99999!important;
+}
+.el-input__inner {
+  border-radius: 3px !important;
+}
+</style>

BIN
src/assets/img/address.png


BIN
src/assets/img/alpay.png


BIN
src/assets/img/avatar.png


BIN
src/assets/img/buyer.png


BIN
src/assets/img/car.png


BIN
src/assets/img/def.png


BIN
src/assets/img/default-verify-error.jpg


BIN
src/assets/img/downArrow.png


BIN
src/assets/img/example-img/Business-license.png


BIN
src/assets/img/example-img/idcard1.png


BIN
src/assets/img/example-img/idcard2.png


BIN
src/assets/img/home/afterSale.png


BIN
src/assets/img/home/customerPrice.png


BIN
src/assets/img/home/ic-arrow-narrow-down.png


BIN
src/assets/img/home/ic-arrow-narrow-up.png


BIN
src/assets/img/home/payCount.png


BIN
src/assets/img/home/payCustomers.png


BIN
src/assets/img/home/pendingDelivery.png


BIN
src/assets/img/home/pendingPayment.png


BIN
src/assets/img/home/pendingReview.png


BIN
src/assets/img/home/refundAmount.png


BIN
src/assets/img/home/totalOrderAmount.png


BIN
src/assets/img/horn.png


BIN
src/assets/img/icons.png


BIN
src/assets/img/index_z354723.png


BIN
src/assets/img/invoice.png


BIN
src/assets/img/line.png


BIN
src/assets/img/link-send.png


BIN
src/assets/img/login-bg.png


BIN
src/assets/img/login-logo.png


BIN
src/assets/img/message.png


+ 1 - 0
src/assets/img/message.svg

@@ -0,0 +1 @@
+<?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"><svg t="1541150803210" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="17693" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48"><defs><style type="text/css"></style></defs><path d="M776.704 436.736H291.84c-13.824 0-20.48 6.656-20.48 13.824 0 6.656 6.656 20.48 20.48 20.48h484.864c6.656 0 20.48-6.656 20.48-20.48-7.168-6.656-13.824-13.824-20.48-13.824zM701.44 600.576H359.936c-6.656 0-13.824 6.656-13.824 13.824 0 6.656 6.656 20.48 20.48 20.48h341.504c6.656 0 20.48-6.656 20.48-20.48-6.656-6.656-13.312-13.824-27.136-13.824z" p-id="17694" fill="#8a8a8a"></path><path d="M879.104 252.416H189.44c-47.616 0-81.92 34.304-81.92 75.264v416.256c0 40.96 34.304 81.92 81.92 81.92h225.28l95.744 122.88c6.656 6.656 13.824 13.824 20.48 13.824 6.656 0 20.48-6.656 20.48-13.824l95.744-122.88h225.28c20.48 0 34.304-6.656 54.784-20.48 20.48-13.824 27.136-34.304 27.136-61.44V327.68c-0.512-40.96-34.304-75.264-75.264-75.264z m27.136 498.688c0 6.656-6.656 13.824-6.656 20.48-6.656 0-6.656 6.656-20.48 6.656H640c-6.656 0-20.48 6.656-20.48 13.824l-81.92 116.224-81.92-116.224c-6.656-6.656-13.824-13.824-20.48-13.824H182.784c-13.824 0-27.136-13.824-27.136-27.136v-430.08c0-13.824 13.824-27.136 27.136-27.136H885.76c13.824 0 27.136 13.824 27.136 27.136l-6.656 430.08z" p-id="17695" fill="#8a8a8a"></path></svg>

BIN
src/assets/img/micro-page/ad-1.png


BIN
src/assets/img/micro-page/ad-2.png


BIN
src/assets/img/micro-page/ad-3.png


BIN
src/assets/img/micro-page/ad-4.png


BIN
src/assets/img/micro-page/card.png


BIN
src/assets/img/micro-page/carousel-swiper-active.png


BIN
src/assets/img/micro-page/carousel-swiper.png


BIN
src/assets/img/micro-page/class.png


BIN
src/assets/img/micro-page/def.png


BIN
src/assets/img/micro-page/lateral-sliding-active.png


BIN
src/assets/img/micro-page/lateral-sliding.png


BIN
src/assets/img/micro-page/menu.png


BIN
src/assets/img/micro-page/micro-create-header.png


BIN
src/assets/img/micro-page/micro-create-header1.png


BIN
src/assets/img/micro-page/notice.png


BIN
src/assets/img/micro-page/one-line-one-active.png


BIN
src/assets/img/micro-page/one-line-one.png


BIN
src/assets/img/micro-page/p-ad-def.png


BIN
src/assets/img/micro-page/p-hotarea-active.png


BIN
src/assets/img/micro-page/p-hotarea.png


BIN
src/assets/img/micro-page/p-image-ad-active.png


BIN
src/assets/img/micro-page/p-image-ad.png


BIN
src/assets/img/micro-page/p-link-active.png


BIN
src/assets/img/micro-page/p-link.png


BIN
src/assets/img/micro-page/p-notice-active.png


BIN
src/assets/img/micro-page/p-notice.png


BIN
src/assets/img/micro-page/p-prod-list-active.png


BIN
src/assets/img/micro-page/p-prod-list.png


BIN
src/assets/img/micro-page/p-promotion-active.png


BIN
src/assets/img/micro-page/p-promotion.png


BIN
src/assets/img/micro-page/p-search-active.png


BIN
src/assets/img/micro-page/p-search.png


BIN
src/assets/img/micro-page/p-tabs-active.png


BIN
src/assets/img/micro-page/p-tabs.png


BIN
src/assets/img/micro-page/p-text-active.png


BIN
src/assets/img/micro-page/p-text.png


BIN
src/assets/img/msg.png


BIN
src/assets/img/question-mark.png


BIN
src/assets/img/remarks.png


BIN
src/assets/img/revise.png


BIN
src/assets/img/success.png


BIN
src/assets/img/time.png


BIN
src/assets/img/unread-up.png


BIN
src/assets/img/upArrow.png


BIN
src/assets/img/upload-on.png


BIN
src/assets/img/upload.png


BIN
src/assets/img/userImg.jpg


BIN
src/assets/img/weixinpay.png


BIN
src/assets/img/yami.png


+ 677 - 0
src/assets/scss/_base.scss

@@ -0,0 +1,677 @@
+:root {
+  /* 订单列表固定表头的宽度增量 */
+  --tit-width-incremental: 130px;
+}
+
+*,
+*:before,
+*:after {
+  box-sizing: border-box;
+}
+body {
+  font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Arial, sans-serif;
+  font-size: 14px;
+  line-height: 1.15;
+  color: #303133;
+  background-color: #fff;
+}
+a {
+  color: mix(#fff, $--color-primary, 20%);
+  text-decoration: none;
+  &:focus,
+  &:hover {
+    color: $--color-primary;
+    text-decoration: underline;
+  }
+}
+img {
+  vertical-align: middle;
+  max-width: 100%;
+}
+
+
+/* Utils
+------------------------------ */
+.clearfix:before,
+.clearfix:after {
+  content: " ";
+  display: table;
+}
+.clearfix:after {
+  clear: both;
+}
+
+
+/* Animation
+------------------------------ */
+.fade-enter-active,
+.fade-leave-active {
+  transition: opacity .5s;
+}
+.fade-enter,
+.fade-leave-to {
+  opacity: 0;
+}
+
+
+/* Reset element-ui
+------------------------------ */
+.site-wrapper {
+  .el-pagination {
+    text-align: right;
+  }
+}
+
+
+/* Layout
+------------------------------ */
+.site-wrapper {
+  position: relative;
+  min-width: 1180px;
+}
+
+
+/* Sidebar fold
+------------------------------ */
+.site-content--tabs {
+  padding: 60px 20px 20px 20px !important;
+}
+.site-navbar {
+  background-color: #FFFFFF !important;
+  // border-bottom: 1px solid #EBEDF0;
+  color: #333333;
+}
+.site-sidebar--fold {
+  .site-navbar__header,
+  .site-navbar__brand,
+  .site-sidebar,
+  .site-sidebar__inner,
+  .el-menu.site-sidebar__menu {
+    width: 100px;
+  }
+  .site-navbar__body,
+  .site-content__wrapper {
+    margin-left: 100px;
+    border-bottom: 1px solid #EBEDF0;
+  }
+  .site-navbar__brand {
+    &-lg {
+      display: none;
+    }
+    &-mini {
+      display: inline-block;
+    }
+  }
+  .site-sidebar,
+  .site-sidebar__inner {
+    overflow: initial;
+  }
+  .site-sidebar__menu-icon {
+    margin-right: 10px !important;
+    font-size: 20px;
+  }
+  .site-content--tabs > .el-tabs > .el-tabs__header {
+    left: 100px;
+  }
+}
+// animation
+.site-navbar__header,
+.site-navbar__brand,
+.site-navbar__body,
+.site-sidebar,
+.site-sidebar__inner,
+.site-sidebar__menu.el-menu,
+.site-sidebar__menu-icon,
+.site-content__wrapper,
+.site-content--tabs > .el-tabs .el-tabs__header {
+  transition: inline-block .3s, left .3s, width .3s, margin-left .3s, font-size .3s;
+}
+
+/* Navbar
+------------------------------ */
+.site-navbar {
+  position: fixed;
+  top: 0;
+  right: 0;
+  left: 0;
+  z-index: 1030;
+  height: 50px;
+  // box-shadow: 0 2px 4px rgba(0, 0, 0, .08);
+  background-color: $navbar--background-color;
+
+  &--inverse {
+    .site-navbar__body {
+      background-color: transparent;
+    }
+    .el-menu {
+      > .el-menu-item,
+      > .el-submenu > .el-submenu__title {
+        color: #fff;
+        &:focus,
+        &:hover {
+          color: #fff;
+          background-color: mix(#000, $navbar--background-color, 15%);
+        }
+      }
+      > .el-menu-item.is-active,
+      > .el-submenu.is-active > .el-submenu__title {
+        border-bottom-color: mix(#fff, $navbar--background-color, 85%);
+      }
+      .el-menu-item i,
+      .el-submenu__title i,
+      .el-dropdown {
+        color: #fff;
+      }
+    }
+    .el-menu--popup-bottom-start {
+      background-color: $navbar--background-color;
+    }
+  }
+
+  &__header {
+    position: relative;
+    float: left;
+    // width: 180px;
+    height: 50px;
+    margin-left: 20px;
+    overflow: hidden;
+  }
+  &__brand {
+    display: table-cell;
+    vertical-align: middle;
+    // width: 230px;
+    height: 50px;
+    margin: 0;
+    // margin-left: 20px;
+    line-height: 50px;
+    font-size: 20px;
+    text-align: center;
+    text-transform: uppercase;
+    white-space: nowrap;
+    color: #fff;
+
+    &-lg,
+    &-mini {
+      margin: 0 5px;
+      color: #fff;
+      &:focus,
+      &:hover {
+        color: #fff;
+        text-decoration: none;
+      }
+    }
+    &-mini {
+      display: none;
+    }
+  }
+  &__switch {
+    font-size: 18px;
+    border-bottom: none !important;
+  }
+  &__avatar {
+    border-bottom: none !important;
+    * {
+      vertical-align: inherit;
+    }
+    .el-dropdown-link {
+      > img {
+        width: 36px;
+        height: auto;
+        margin-right: 5px;
+        border-radius: 100%;
+        vertical-align: middle;
+      }
+    }
+  }
+  &__body {
+    position: relative;
+    // margin-left: 210px;
+    // padding-right: 15px;
+    background-color: #fff;
+  }
+  &__menu {
+    float: left;
+    background-color: transparent;
+    border-bottom: 0;
+
+    &--right {
+      float: right;
+    }
+    a:focus,
+    a:hover {
+      text-decoration: none;
+    }
+    .el-menu-item,
+    .el-submenu > .el-submenu__title {
+      height: 50px;
+      line-height: 50px;
+    }
+    .el-submenu > .el-menu {
+      top: 55px;
+    }
+    .el-badge {
+      display: inline;
+      z-index: 2;
+      &__content {
+        line-height: 16px;
+      }
+    }
+  }
+}
+
+
+/* Sidebar
+------------------------------ */
+.site-sidebar {
+  position: fixed;
+  top: 50px;
+  left: 0;
+  bottom: 0;
+  z-index: 1020;
+  width: 250px;
+  overflow: hidden;
+
+  &--dark,
+  &--dark-popper {
+    background-color: $sidebar--background-color-dark;
+    .site-sidebar__menu.el-menu,
+    > .el-menu--popup {
+      background-color: $sidebar--background-color-dark;
+      .el-menu-item,
+      .el-submenu > .el-submenu__title {
+        color: $sidebar--color-text-dark;
+        &:focus,
+        &:hover {
+          color: mix(#fff, $sidebar--color-text-dark, 50%);
+          background-color: mix(#fff, $sidebar--background-color-dark, 2.5%);
+        }
+      }
+      .el-menu,
+      .el-submenu.is-opened {
+        background-color: mix(#000, $sidebar--background-color-dark, 15%);
+      }
+      .el-menu-item.is-active,
+      .el-submenu.is-active > .el-submenu__title {
+        color: mix(#fff, $sidebar--color-text-dark, 80%);
+      }
+    }
+  }
+  &__inner {
+    position: relative;
+    z-index: 1;
+    width: 250px;
+    height: 100%;
+    padding-bottom: 15px;
+    overflow-y: scroll;
+  }
+  &__menu.el-menu {
+    width: 100px;
+    border-right: 0;
+  }
+  &__menu-icon {
+    width: 24px;
+    margin-right: 5px;
+    text-align: center;
+    font-size: 16px;
+    color: inherit !important;
+  }
+}
+
+
+/* Content
+------------------------------ */
+.site-content {
+  position: relative;
+  padding: 15px;
+  background-color: #F5F6F9;
+
+  &__wrapper {
+    position: relative;
+    padding-top: 50px;
+    margin-left: 230px;
+    min-height: 100%;
+    background: $content--background-color;
+  }
+  &--tabs {
+    padding: 55px 0 0;
+  }
+  > .el-tabs {
+    > .el-tabs__header {
+      position: fixed;
+      top: 50px;
+      left: 230px;
+      right: 0;
+      z-index: 930;
+      padding: 0 55px 0 15px;
+      box-shadow: 0 2px 4px 0 rgba(0, 0, 0, .12), 0 0 6px 0 rgba(0, 0, 0, .04);
+      background-color: #fff;
+      > .el-tabs__nav-wrap {
+        margin-bottom: 0;
+        &:after {
+          display: none;
+        }
+      }
+    }
+    > .el-tabs__content {
+      padding: 0 15px 30px;
+      > .site-tabs__tools {
+        position: fixed;
+        top: 50px;
+        right: 0;
+        z-index: 931;
+        height: 40px;
+        padding: 0 12px;
+        font-size: 16px;
+        line-height: 40px;
+        background-color: $content--background-color;
+        cursor: pointer;
+        .el-icon--right {
+          margin-left: 0;
+        }
+      }
+    }
+  }
+}
+/* 卡片商品按钮样式*/
+.card-prod-bottom {
+  position: relative;
+  text-align: left;
+  .card-prod-name {
+    margin: auto;
+    padding: 0 6px;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+    width: 118px;
+    display: inline-block;
+  }
+  .card-prod-name-button {
+    position: absolute;
+    top: 24px;
+    right: 10px;
+  }
+}
+
+
+.element-error-message-zindex{
+  z-index:3000 !important;
+}
+
+// 新版规范全局统一样式
+// el-table 表格表头样式
+.table-header {
+  background-color: #f7f8fa !important;
+  color: #000;
+  height: 57px;
+}
+// .table-header:first-child .cell {
+//   padding-left: 20px;
+// }
+// el-table 表格行样式 - 多行文本/图文
+.table-row {
+  height: 100px;
+  text-align: center;
+}
+// el-table 表格行样式 - 单行文本展示
+.table-row-low {
+  height: 65px;
+}
+// el-table 表格单元格样式
+.table-cell {
+  padding: 0;
+}
+// 表格文字换行模式
+.el-table .cell {
+  line-height: 20px !important;
+  word-break: break-word !important;
+}
+
+// 表格第一列样式(内容&表头)
+.el-table tr > td:first-child > .cell,
+.el-table th.el-table__cell:first-child > .cell {
+  padding-left: 20px;
+}
+
+
+// 按钮样式
+.default-btn {
+  height: 32px;
+  line-height: 32px;
+  padding: 0 15px;
+  font-size: 13px;
+  background-color: #fff;
+  border: 1px solid #dcdfe6;
+  border-radius: 2px;
+  cursor: pointer;
+  display: inline-block;
+}
+.default-btn:hover {
+  color: #155bd4;
+  border-color: #155bd4;
+}
+.default-btn.primary-btn {
+  color: #ffffff;
+  background-color: #155bd4;
+  border-color: #155bd4;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+.default-btn.primary-btn:hover {
+  background: #447cdd;
+  border-color: #447cdd;
+}
+.default-btn.text-btn {
+  font-size: 14px;
+  padding: 0;
+  margin-right: 0;
+  border: none;
+  color: #155bd4;
+  background-color: unset;
+  word-break: keep-all;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+.default-btn.text-btn:hover {
+  color: #447cdd;
+}
+.default-btn.text-btn.disabled-btn {
+  color: #C0C4CC;
+  &:hover {
+    cursor: not-allowed;
+    color: #C0C4CC;
+  }
+}
+.default-btn.primary-btn.disabled-btn {
+  color: #ffffff;
+  background-color: #8aadea;
+  border-color: #8aadea;
+  &:hover {
+    background-color: #8aadea;
+    border-color: #8aadea;
+    cursor: not-allowed;
+  }
+}
+.default-btn.disabled-btn {
+  color: #999;
+  &:hover {
+    border-color: #dcdfe6;
+    cursor: not-allowed;
+  }
+}
+
+.default-btn + .default-btn {
+  margin-left: 20px;
+}
+
+// 状态展示
+.tag-text {
+  font-size: 14px;
+}
+
+// el-dialog 样式
+.el-dialog .el-dialog__header {
+  border-bottom: 1px solid #f0f0f0;
+}
+
+.el-dialog .el-dialog__body {
+  padding: 20px;
+}
+
+.el-dialog .el-dialog__footer {
+  border-top: 1px solid #f0f0f0;
+}
+
+// el-message-box 样式
+.el-message-box .el-message-box__message {
+  word-break: break-word;
+}
+
+// 列表布局样式
+// 搜索栏
+.search-bar {
+  padding: 25px 20px 0;
+  margin-bottom: 20px;
+  background-color: #F7F8FA;
+  .input-row {
+    display: block;
+    // 选择器(下拉框)  &  输入框 宽度
+    .el-form-item--small .el-form-item__content .el-select,
+    .el-form-item--small .el-form-item__content .el-input {
+      width: 200px;
+    }
+    // 日期选择器(范围)中间提示
+    .el-range-editor--small .el-range-separator {
+      line-height: 32px;
+    }
+  }
+  .el-form--inline .el-form-item {
+    margin-right: 20px !important;
+    margin-bottom: 25px;
+    .el-form-item__label-wrap {
+      margin-left: unset !important;
+    }
+  }
+}
+
+// 主体内容
+.main-container {
+  // 操作按钮
+  .operation-bar {
+    position: relative;
+    .el-checkbox {
+      padding-left: 20px;
+      margin-right: 10px;
+    }
+    .had-selected {
+      font-size: 12px;
+      margin-right: 10px;
+    }
+    .tag-text {
+      font-size: 12px;
+    }
+  }
+  // 表格
+  .table-con {
+    margin-top: 20px;
+    padding-bottom: 30px;
+    // 操作按钮容器
+    .text-btn-con {
+      width: 100%;
+      display: flex;
+      justify-content: center;
+    }
+    // 图片 + 文本
+    .table-cell-con {
+      display: flex;
+      align-items: center;
+      .table-cell-image {
+        width: 60px;
+        height: 60px;
+        margin-right: 10px;
+        img {
+          display: block;
+          width: 100%;
+          height: 100%;
+          object-fit: contain;
+        }
+      }
+      .table-cell-text {
+        flex: 1;
+        text-overflow: ellipsis;
+        -o-text-overflow: ellipsis;
+        -webkit-text-overflow: ellipsis;
+        -moz-text-overflow: ellipsis;
+        word-break: break-word;
+        display: -webkit-box;
+        -webkit-line-clamp: 2;
+        /* autoprefixer: ignore next */
+        -webkit-box-orient: vertical;
+        overflow: hidden;
+        line-height: 20px;
+      }
+    }
+    // 纯图片
+    .table-cell-image {
+      width: 60px;
+      height: 60px;
+      img {
+        display: block;
+        width: 100%;
+        height: 100%;
+        object-fit: contain;
+      }
+    }
+    // 纯文本
+    .table-cell-text {
+      text-overflow: ellipsis;
+      -o-text-overflow: ellipsis;
+      -webkit-text-overflow: ellipsis;
+      -moz-text-overflow: ellipsis;
+      word-break: break-word;
+      display: -webkit-box;
+      -webkit-line-clamp: 2;
+      /* autoprefixer: ignore next */
+      -webkit-box-orient: vertical;
+      overflow: hidden;
+      line-height: 20px;
+    }
+    .line-clamp-one {
+      -webkit-line-clamp: 1;
+    }
+  }
+}
+
+// 新增页面头部标题样式
+.new-page-title {
+  width: 100%;
+  height: 62px;
+  background: #F7F8FA;
+  box-sizing: border-box;
+  padding: 19px 20px;
+  display: flex;
+  align-items: center;
+  margin-bottom: 20px;
+  .line {
+    width: 4px;
+    height: 19px;
+    background: #155BD4;
+    opacity: 1;
+    border-radius: 2px;
+    margin-right: 10px;
+  }
+  .text {
+    font-size: 18px;
+    font-weight: bold;
+    color: #333333;
+    opacity: 1;
+  }
+}
+
+.text-left{
+  text-align: left !important;
+}
+

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff