Browse Source

首次提交

ytf 3 years ago
commit
55498e68bf
100 changed files with 29671 additions and 0 deletions
  1. BIN
      seller/.DS_Store
  2. 24 0
      seller/.circleci/config.yml
  3. 35 0
      seller/.dockerignore
  4. 16 0
      seller/.editorconfig
  5. 3 0
      seller/.eslintignore
  6. 39 0
      seller/.eslintrc.js
  7. 5 0
      seller/.firebaserc
  8. 7 0
      seller/.prettierignore
  9. 11 0
      seller/.prettierrc
  10. 9 0
      seller/.stylelintrc.json
  11. 46 0
      seller/CODE_OF_CONDUCT.md
  12. 12 0
      seller/Dockerfile
  13. 11 0
      seller/Dockerfile.dev
  14. 11 0
      seller/Dockerfile.hub
  15. 21 0
      seller/LICENSE
  16. 131 0
      seller/README.md
  17. 102 0
      seller/README.ru-RU.md
  18. 121 0
      seller/README.zh-CN.md
  19. 26 0
      seller/appveyor.yml
  20. 119 0
      seller/config/config.js
  21. 33 0
      seller/config/plugin.config.js
  22. 638 0
      seller/config/router.config.js
  23. 14 0
      seller/docker/docker-compose.dev.yml
  24. 21 0
      seller/docker/docker-compose.yml
  25. 22 0
      seller/docker/nginx.conf
  26. 13 0
      seller/firebase.json
  27. 9 0
      seller/functions/index.js
  28. 117 0
      seller/functions/matchMock.js
  29. 23 0
      seller/functions/package.json
  30. 15 0
      seller/jest-puppeteer.config.js
  31. 4 0
      seller/jest.config.js
  32. 10 0
      seller/jsconfig.json
  33. 13 0
      seller/netlify.toml
  34. 26089 0
      seller/package-lock.json
  35. 129 0
      seller/package.json
  36. BIN
      seller/public/.DS_Store
  37. BIN
      seller/public/favicon.png
  38. BIN
      seller/public/pc_diy_img/adv_floor_02_goods.png
  39. BIN
      seller/public/pc_diy_img/adv_floor_02_left.png
  40. BIN
      seller/public/pc_diy_img/adv_floor_02_right.png
  41. 636 0
      seller/report.20210127.220406.16200.0.001.json
  42. 635 0
      seller/report.20210129.112020.12784.0.001.json
  43. 3 0
      seller/scripts/generateMock.js
  44. 46 0
      seller/scripts/lint-prettier.js
  45. 56 0
      seller/scripts/prettier.js
  46. BIN
      seller/src/.DS_Store
  47. BIN
      seller/src/assets/.DS_Store
  48. BIN
      seller/src/assets/add_goods_step.png
  49. BIN
      seller/src/assets/alipay.png
  50. BIN
      seller/src/assets/apply_fail.png
  51. BIN
      seller/src/assets/apply_pending.png
  52. BIN
      seller/src/assets/apply_success.png
  53. 1 0
      seller/src/assets/area.json
  54. BIN
      seller/src/assets/balance_bj.png
  55. BIN
      seller/src/assets/bill/1_cur.png
  56. BIN
      seller/src/assets/bill/1_no.png
  57. BIN
      seller/src/assets/bill/1_pass.png
  58. BIN
      seller/src/assets/bill/2_cur.png
  59. BIN
      seller/src/assets/bill/2_no.png
  60. BIN
      seller/src/assets/bill/2_pass.png
  61. BIN
      seller/src/assets/bill/3_cur.png
  62. BIN
      seller/src/assets/bill/3_no.png
  63. BIN
      seller/src/assets/bill/3_pass.png
  64. BIN
      seller/src/assets/bill/4_cur.png
  65. BIN
      seller/src/assets/bill/4_no.png
  66. BIN
      seller/src/assets/bill/4_pass.png
  67. BIN
      seller/src/assets/bill/detail_total_icon.png
  68. BIN
      seller/src/assets/check_error.png
  69. BIN
      seller/src/assets/check_lock.png
  70. BIN
      seller/src/assets/check_pending.png
  71. BIN
      seller/src/assets/check_success.png
  72. BIN
      seller/src/assets/coupons_bj.png
  73. 8 0
      seller/src/assets/css/account.less
  74. 98 0
      seller/src/assets/css/order.less
  75. 289 0
      seller/src/assets/css/promotion.less
  76. BIN
      seller/src/assets/del_icon.png
  77. BIN
      seller/src/assets/del_icon_hover.png
  78. BIN
      seller/src/assets/del_seckill_goods.png
  79. BIN
      seller/src/assets/express_empty.png
  80. BIN
      seller/src/assets/home_basic/email.png
  81. BIN
      seller/src/assets/home_basic/exchange_num.png
  82. BIN
      seller/src/assets/home_basic/exchange_num_2.png
  83. BIN
      seller/src/assets/home_basic/return_num.png
  84. BIN
      seller/src/assets/home_basic/return_num_2.png
  85. BIN
      seller/src/assets/home_basic/sld_goods_num.png
  86. BIN
      seller/src/assets/home_basic/sld_goods_num_2.png
  87. BIN
      seller/src/assets/home_basic/sld_goods_num_new.png
  88. BIN
      seller/src/assets/home_basic/sld_goods_num_new_2.png
  89. BIN
      seller/src/assets/home_basic/sld_member_num.png
  90. BIN
      seller/src/assets/home_basic/sld_member_num_2.png
  91. BIN
      seller/src/assets/home_basic/sld_member_num_new.png
  92. BIN
      seller/src/assets/home_basic/sld_member_num_new_2.png
  93. BIN
      seller/src/assets/home_basic/sld_order_amount.png
  94. BIN
      seller/src/assets/home_basic/sld_order_amount_2.png
  95. BIN
      seller/src/assets/home_basic/sld_order_num.png
  96. BIN
      seller/src/assets/home_basic/sld_order_num_2.png
  97. BIN
      seller/src/assets/home_basic/sld_vendor_num.png
  98. BIN
      seller/src/assets/home_basic/sld_vendor_num_2.png
  99. BIN
      seller/src/assets/home_basic/sld_vendor_num_new.png
  100. 0 0
      seller/src/assets/home_basic/sld_vendor_num_new_2.png

BIN
seller/.DS_Store


+ 24 - 0
seller/.circleci/config.yml

@@ -0,0 +1,24 @@
1
+version: 2
2
+jobs:
3
+  build:
4
+    docker:
5
+      - image: circleci/node:latest
6
+    steps:
7
+      - checkout
8
+      - run: npm install
9
+      - run: npm run build
10
+  test:
11
+    docker:
12
+      - image: circleci/node:latest-browsers
13
+    steps:
14
+      - checkout
15
+      - run: npm install
16
+      - run: 
17
+          command : npm run test:all
18
+          no_output_timeout : 30m
19
+workflows:
20
+  version: 2
21
+  build_and_test:
22
+    jobs:
23
+      - build
24
+      - test

+ 35 - 0
seller/.dockerignore

@@ -0,0 +1,35 @@
1
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2
+
3
+# dependencies
4
+**/node_modules
5
+/src/utils/request-temp.js
6
+
7
+# production
8
+/.vscode
9
+
10
+# misc
11
+.DS_Store
12
+npm-debug.log*
13
+yarn-error.log
14
+
15
+/coverage
16
+.idea
17
+yarn.lock
18
+package-lock.json
19
+*bak
20
+.vscode
21
+
22
+# visual studio code
23
+.history
24
+*.log
25
+
26
+functions/mock
27
+.temp/**
28
+
29
+# umi
30
+.umi
31
+.umi-production
32
+
33
+# screenshot
34
+screenshot
35
+.firebase

+ 16 - 0
seller/.editorconfig

@@ -0,0 +1,16 @@
1
+# http://editorconfig.org
2
+root = true
3
+
4
+[*]
5
+indent_style = space
6
+indent_size = 2
7
+end_of_line = lf
8
+charset = utf-8
9
+trim_trailing_whitespace = true
10
+insert_final_newline = true
11
+
12
+[*.md]
13
+trim_trailing_whitespace = false
14
+
15
+[Makefile]
16
+indent_style = tab

+ 3 - 0
seller/.eslintignore

@@ -0,0 +1,3 @@
1
+/functions/mock/**
2
+/scripts
3
+/config

+ 39 - 0
seller/.eslintrc.js

@@ -0,0 +1,39 @@
1
+module.exports = {
2
+  parser: 'babel-eslint',
3
+  extends: ['airbnb', 'prettier', 'plugin:compat/recommended'],
4
+  env: {
5
+    browser: true,
6
+    node: true,
7
+    es6: true,
8
+    mocha: true,
9
+    jest: true,
10
+    jasmine: true,
11
+  },
12
+  globals: {
13
+    APP_TYPE: true,
14
+    page: true,
15
+  },
16
+  rules: {
17
+    'react/jsx-filename-extension': [1, { extensions: ['.js'] }],
18
+    'react/jsx-wrap-multilines': 0,
19
+    'react/prop-types': 0,
20
+    'react/forbid-prop-types': 0,
21
+    'react/jsx-one-expression-per-line': 0,
22
+    'import/no-unresolved': [2, { ignore: ['^@/', '^umi/'] }],
23
+    'import/no-extraneous-dependencies': [
24
+      2,
25
+      {
26
+        optionalDependencies: true,
27
+        devDependencies: ['**/tests/**.js', '/mock/**.js', '**/**.test.js'],
28
+      },
29
+    ],
30
+    'jsx-a11y/no-noninteractive-element-interactions': 0,
31
+    'jsx-a11y/click-events-have-key-events': 0,
32
+    'jsx-a11y/no-static-element-interactions': 0,
33
+    'jsx-a11y/anchor-is-valid': 0,
34
+    'linebreak-style': 0,
35
+  },
36
+  settings: {
37
+    polyfills: ['fetch', 'promises', 'url'],
38
+  },
39
+};

+ 5 - 0
seller/.firebaserc

@@ -0,0 +1,5 @@
1
+{
2
+  "projects": {
3
+    "default": "antd-pro"
4
+  }
5
+}

+ 7 - 0
seller/.prettierignore

@@ -0,0 +1,7 @@
1
+**/*.md
2
+**/*.svg
3
+**/*.ejs
4
+**/*.html
5
+package.json
6
+.umi
7
+.umi-production

+ 11 - 0
seller/.prettierrc

@@ -0,0 +1,11 @@
1
+{
2
+  "singleQuote": true,
3
+  "trailingComma": "es5",
4
+  "printWidth": 100,
5
+  "overrides": [
6
+    {
7
+      "files": ".prettierrc",
8
+      "options": { "parser": "json" }
9
+    }
10
+  ]
11
+}

+ 9 - 0
seller/.stylelintrc.json

@@ -0,0 +1,9 @@
1
+{
2
+  "extends": ["stylelint-config-standard", "stylelint-config-prettier"],
3
+  "rules": {
4
+    "declaration-empty-line-before": null,
5
+    "no-descending-specificity": null,
6
+    "selector-pseudo-class-no-unknown": null,
7
+    "selector-pseudo-element-colon-notation": null
8
+  }
9
+}

+ 46 - 0
seller/CODE_OF_CONDUCT.md

@@ -0,0 +1,46 @@
1
+# Contributor Covenant Code of Conduct
2
+
3
+## Our Pledge
4
+
5
+In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
6
+
7
+## Our Standards
8
+
9
+Examples of behavior that contributes to creating a positive environment include:
10
+
11
+* Using welcoming and inclusive language
12
+* Being respectful of differing viewpoints and experiences
13
+* Gracefully accepting constructive criticism
14
+* Focusing on what is best for the community
15
+* Showing empathy towards other community members
16
+
17
+Examples of unacceptable behavior by participants include:
18
+
19
+* The use of sexualized language or imagery and unwelcome sexual attention or advances
20
+* Trolling, insulting/derogatory comments, and personal or political attacks
21
+* Public or private harassment
22
+* Publishing others' private information, such as a physical or electronic address, without explicit permission
23
+* Other conduct which could reasonably be considered inappropriate in a professional setting
24
+
25
+## Our Responsibilities
26
+
27
+Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
28
+
29
+Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
30
+
31
+## Scope
32
+
33
+This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
34
+
35
+## Enforcement
36
+
37
+Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at afc163@gmail.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
38
+
39
+Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
40
+
41
+## Attribution
42
+
43
+This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
44
+
45
+[homepage]: http://contributor-covenant.org
46
+[version]: http://contributor-covenant.org/version/1/4/

+ 12 - 0
seller/Dockerfile

@@ -0,0 +1,12 @@
1
+FROM circleci/node:latest-browsers
2
+
3
+WORKDIR /usr/src/app/
4
+USER root
5
+COPY package.json ./
6
+RUN yarn
7
+
8
+COPY ./ ./
9
+
10
+RUN npm run test:all
11
+
12
+CMD ["npm", "run", "build"]

+ 11 - 0
seller/Dockerfile.dev

@@ -0,0 +1,11 @@
1
+FROM node:latest
2
+
3
+WORKDIR /usr/src/app/
4
+
5
+COPY package.json ./
6
+RUN npm install --silent --no-cache
7
+
8
+COPY ./ ./
9
+
10
+
11
+CMD ["npm", "run", "start"]

+ 11 - 0
seller/Dockerfile.hub

@@ -0,0 +1,11 @@
1
+FROM nginx
2
+
3
+WORKDIR /usr/src/app/
4
+
5
+COPY ./docker/nginx.conf /etc/nginx/conf.d/default.conf
6
+
7
+COPY ./dist  /usr/share/nginx/html/
8
+
9
+EXPOSE 80
10
+
11
+CMD ["nginx", "-g", "daemon off;"]

+ 21 - 0
seller/LICENSE

@@ -0,0 +1,21 @@
1
+MIT License
2
+
3
+Copyright (c) 2018 Alipay.inc
4
+
5
+Permission is hereby granted, free of charge, to any person obtaining a copy
6
+of this software and associated documentation files (the "Software"), to deal
7
+in the Software without restriction, including without limitation the rights
8
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+copies of the Software, and to permit persons to whom the Software is
10
+furnished to do so, subject to the following conditions:
11
+
12
+The above copyright notice and this permission notice shall be included in all
13
+copies or substantial portions of the Software.
14
+
15
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+SOFTWARE.

File diff suppressed because it is too large
+ 131 - 0
seller/README.md


File diff suppressed because it is too large
+ 102 - 0
seller/README.ru-RU.md


File diff suppressed because it is too large
+ 121 - 0
seller/README.zh-CN.md


+ 26 - 0
seller/appveyor.yml

@@ -0,0 +1,26 @@
1
+# Test against the latest version of this Node.js version
2
+environment:
3
+  nodejs_version: "8"
4
+
5
+# this is how to allow failing jobs in the matrix
6
+matrix:
7
+  fast_finish: true     # set this flag to immediately finish build once one of the jobs fails.
8
+
9
+# Install scripts. (runs after repo cloning)
10
+install:
11
+  # Get the latest stable version of Node.js or io.js
12
+  - ps: Install-Product node $env:nodejs_version
13
+  # install modules
14
+  - npm install
15
+  # Output useful info for debugging.
16
+  - node --version
17
+  - npm --version
18
+
19
+# Post-install test scripts.
20
+test_script:
21
+  - npm run lint
22
+  - npm run test:all
23
+  - npm run build
24
+
25
+# Don't actually build.
26
+build: off

+ 119 - 0
seller/config/config.js

@@ -0,0 +1,119 @@
1
+// https://umijs.org/config/
2
+import os from 'os';
3
+import pageRoutes from './router.config';
4
+import webpackPlugin from './plugin.config';
5
+import defaultSettings from '../src/defaultSettings';
6
+
7
+const plugins = [
8
+  [
9
+    'umi-plugin-react',
10
+    {
11
+      antd: true,
12
+      dva: {
13
+        hmr: true,
14
+      },
15
+      targets: {
16
+        ie: 11,
17
+      },
18
+      locale: {
19
+        enable: true, // default false
20
+        default: 'zh-CN', // default zh-CN
21
+        baseNavigator: true, // default true, when it is true, will use `navigator.language` overwrite default
22
+      },
23
+      dynamicImport: {
24
+        loadingComponent: './components/PageLoading/index',
25
+      },
26
+      pwa: {
27
+        workboxPluginMode: 'InjectManifest',
28
+        workboxOptions: {
29
+          importWorkboxFrom: 'local',
30
+        },
31
+      },
32
+      ...(!process.env.TEST && os.platform() === 'darwin'
33
+        ? {
34
+            dll: {
35
+              include: ['dva', 'dva/router', 'dva/saga', 'dva/fetch'],
36
+              exclude: ['@babel/runtime'],
37
+            },
38
+          }
39
+        : {}),
40
+    },
41
+  ],
42
+];
43
+
44
+// 针对 preview.pro.ant.design 的 GA 统计代码
45
+// 业务上不需要这个
46
+if (process.env.APP_TYPE === 'site') {
47
+  plugins.push([
48
+    'umi-plugin-ga',
49
+    {
50
+      code: 'UA-72788897-6',
51
+    },
52
+  ]);
53
+}
54
+
55
+export default {
56
+  // add for transfer to umi
57
+  plugins,
58
+  targets: {
59
+    ie: 11,
60
+  },
61
+  define: {
62
+    APP_TYPE: process.env.APP_TYPE || '',
63
+  },
64
+  // 路由配置
65
+  routes: pageRoutes,
66
+  // Theme for antd
67
+  // https://ant.design/docs/react/customize-theme-cn
68
+  theme: {
69
+    'primary-color': defaultSettings.primaryColor,
70
+  },
71
+  externals: {
72
+    '@antv/data-set': 'DataSet',
73
+  },
74
+  // proxy: {
75
+  //   '/server/api/': {
76
+  //     target: 'https://preview.pro.ant.design/',
77
+  //     changeOrigin: true,
78
+  //     pathRewrite: { '^/server': '' },
79
+  //   },
80
+  // },
81
+  ignoreMomentLocale: true,
82
+  lessLoaderOptions: {
83
+    javascriptEnabled: true,
84
+  },
85
+  disableRedirectHoist: true,
86
+  cssLoaderOptions: {
87
+    modules: true,
88
+    getLocalIdent: (context, localIdentName, localName) => {
89
+      if (
90
+        context.resourcePath.includes('node_modules') ||
91
+        context.resourcePath.includes('ant.design.pro.less') ||
92
+        context.resourcePath.includes('global.less')
93
+      ) {
94
+        return localName;
95
+      }
96
+      const match = context.resourcePath.match(/src(.*)/);
97
+      if (match && match[1]) {
98
+        const antdProPath = match[1].replace('.less', '');
99
+        const arr = antdProPath
100
+          .split('/')
101
+          .map(a => a.replace(/([A-Z])/g, '-$1'))
102
+          .map(a => a.toLowerCase());
103
+        return `antd-pro${arr.join('-')}-${localName}`.replace(/--/g, '-');
104
+        // return `${localName}`;
105
+      }
106
+      return localName;
107
+    },
108
+  },
109
+  manifest: {
110
+    basePath: '/',
111
+  },
112
+  runtimePublicPath:true,
113
+  hash:true,
114
+  base: '/base/',
115
+  publicPath: '/base/',
116
+  cssPublicPath: '/base/',
117
+  history: 'browser',
118
+  chainWebpack: webpackPlugin,
119
+};

+ 33 - 0
seller/config/plugin.config.js

@@ -0,0 +1,33 @@
1
+// Change theme plugin
2
+
3
+import MergeLessPlugin from 'antd-pro-merge-less';
4
+import AntDesignThemePlugin from 'antd-theme-webpack-plugin';
5
+import path from 'path';
6
+
7
+export default config => {
8
+  // pro 和 开发环境再添加这个插件
9
+  if (process.env.APP_TYPE === 'site' || process.env.NODE_ENV !== 'production') {
10
+    // 将所有 less 合并为一个供 themePlugin使用
11
+    const outFile = path.join(__dirname, '../.temp/ant-design-pro.less');
12
+    const stylesDir = path.join(__dirname, '../src/');
13
+
14
+    config.plugin('merge-less').use(MergeLessPlugin, [
15
+      {
16
+        stylesDir,
17
+        outFile,
18
+      },
19
+    ]);
20
+
21
+    config.plugin('ant-design-theme').use(AntDesignThemePlugin, [
22
+      {
23
+        antDir: path.join(__dirname, '../node_modules/antd'),
24
+        stylesDir,
25
+        varFile: path.join(__dirname, '../node_modules/antd/lib/style/themes/default.less'),
26
+        mainLessFile: outFile, //     themeVariables: ['@primary-color'],
27
+        indexFileName: 'index.html',
28
+        generateOne: true,
29
+        lessUrl: 'https://gw.alipayobjects.com/os/lib/less.js/3.8.1/less.min.js',
30
+      },
31
+    ]);
32
+  }
33
+};

+ 638 - 0
seller/config/router.config.js

@@ -0,0 +1,638 @@
1
+export default [
2
+  // user
3
+  {
4
+    path: '/user',
5
+    component: '../layouts/UserLayout',
6
+    routes: [
7
+      { path: '/user', redirect: '/user/login' },
8
+      { path: '/user/login', component: './User/Login' },
9
+    ],
10
+  },
11
+  // 商户入驻路由
12
+  {
13
+    path: '/apply',
14
+    component: '../layouts/BasicLayout',
15
+    Routes: ['src/pages/CheckSettle'],
16
+    routes: [
17
+      // { path: '/apply', redirect: '/user/login' },
18
+      //start
19
+      //入驻
20
+      {
21
+        path: '/apply/settled',
22
+        icon: 'usergroup-add',
23
+        name: '',
24
+        component: './settledManage/settled/index',
25
+      },
26
+      //入驻协议
27
+      {
28
+        path: '/apply/settled_protocol',
29
+        icon: 'file-done',
30
+        name: 'apply_protocol',
31
+        component: './settledManage/protocol/index',
32
+      },
33
+      //店铺基本信息
34
+      {
35
+        path: '/apply/base_info',
36
+        icon: 'trophy',
37
+        name: 'apply_base_info',
38
+        component: './settledManage/baseInfo/index',
39
+      },
40
+      //经营信息
41
+      {
42
+        path: '/apply/business_info',
43
+        icon: 'dollar',
44
+        name: 'apply_business_info',
45
+        component: './settledManage/businessInfo/index',
46
+      },
47
+      //店铺开通
48
+      {
49
+        path: '/apply/open_up',
50
+        icon: 'control',
51
+        name: 'apply_open_up',
52
+        component: './settledManage/openUp/open_up',
53
+      },
54
+    ],
55
+  },
56
+  //PC装修页面
57
+  {
58
+    path: '/diy/decorate_pc_home_to_edit',
59
+    component: '../layouts/UserLayout',
60
+    Routes: ['src/pages/CheckLogin'],
61
+    routes: [
62
+      { path: '/diy/decorate_pc_home_to_edit', component: './diy/pc_diy/edit_diy_page' },
63
+    ],
64
+  },
65
+  // app
66
+  {
67
+    path: '/',
68
+    component: '../layouts/BasicLayout',
69
+    Routes: ['src/pages/CheckLogin'],
70
+    routes: [
71
+      { path: '/', redirect: '/basic/simple_stat' },
72
+      //概况页
73
+      {
74
+        path: '/basic/simple_stat',
75
+        icon: 'setting',
76
+        name: 'basic_simple_stat',
77
+        component: './basic/simple_stat',
78
+      },
79
+      //商品列表
80
+      {
81
+        path: '/goods/goods_list',
82
+        icon: 'shopping',
83
+        name: 'goods_goods_list',
84
+        component: './goods/goods_list',
85
+      },
86
+      //发布商品
87
+      {
88
+        path: '/goods/goods_list_to_add',
89
+        icon: '',
90
+        name: '',
91
+        component: './goods/add_goods',
92
+      },
93
+      //仓库中商品
94
+      {
95
+        path: '/goods/goods_storage_list',
96
+        icon: 'project',
97
+        name: 'goods_goods_storage_list',
98
+        component: './goods/goods_storage_lists_title',
99
+      },
100
+      //仓库中商品_发布商品
101
+      {
102
+        path: '/goods/goods_storage_list_to_add',
103
+        icon: '',
104
+        name: '',
105
+        component: './goods/add_goods',
106
+      },
107
+      //待审核商品
108
+      {
109
+        path: '/goods/goods_check_list',
110
+        icon: 'audit',
111
+        name: 'goods_goods_check_list',
112
+        component: './goods/goods_check_lists_title',
113
+      },
114
+      //待审核商品_发布商品
115
+      {
116
+        path: '/goods/goods_check_list_to_add',
117
+        icon: '',
118
+        name: '',
119
+        component: './goods/add_goods',
120
+      },
121
+      //关联版式
122
+      {
123
+        path: '/goods/related_template',
124
+        icon: 'api',
125
+        name: 'goods_related_template',
126
+        component: './goods/related_template',
127
+      },
128
+      //编辑关联版式
129
+      {
130
+        path: '/goods/related_template_to_edit',
131
+        name: '',
132
+        component: './goods/edit_related_template',
133
+      },
134
+      //自定义属性组
135
+      {
136
+        path: '/goods/attribute_group',
137
+        icon: 'layout',
138
+        name: 'goods_attribute_group',
139
+        component: './goods/attribute_group',
140
+      },
141
+      //自定义属性列表
142
+      {
143
+        path: '/goods/attribute_group_to_detail',
144
+        name: '',
145
+        component: './goods/attribute_list',
146
+      },
147
+      //运费模板
148
+      {
149
+        path: '/express/transport',
150
+        icon: 'read',
151
+        name: 'express_transport',
152
+        component: './express/transport',
153
+      },
154
+      //新增运费模板
155
+      {
156
+        path: '/express/transport_to_add',
157
+        icon: 'setting',
158
+        name: '',
159
+        component: './express/add_transport',
160
+      },
161
+      //免运费设置
162
+      {
163
+        path: '/express/setting',
164
+        icon: 'schedule',
165
+        name: 'express_setting',
166
+        component: './express/setting',
167
+      },
168
+      //物流公司
169
+      {
170
+        path: '/express/express_list',
171
+        icon: 'control',
172
+        name: 'express_express_list',
173
+        component: './express/express_list',
174
+      },
175
+      //订单列表
176
+      {
177
+        path: '/order/order_lists',
178
+        icon: 'container',
179
+        name: 'order_order_lists',
180
+        component: './order/order_lists',
181
+      },
182
+      //拼团订单列表
183
+      {
184
+        path: '/order/spell_group_order_lists',
185
+        icon: 'solution',
186
+        name: 'spell_group__order_lists',
187
+        component: './order/spell_group/order_lists',
188
+      },
189
+      //拼团订单详情
190
+      {
191
+        path: '/order/spell_group_order_detail',
192
+        icon: '',
193
+        name: '',
194
+        component: './order/order_detail',
195
+      },
196
+      //订单详情
197
+      {
198
+        path: '/order/order_lists_to_detail',
199
+        name: '',
200
+        component: './order/order_detail',
201
+      },
202
+      //订单发货
203
+      {
204
+        path: '/order/order_deliver',
205
+        icon: 'rocket',
206
+        name: 'order_order_deliver',
207
+        component: './order/order_deliver',
208
+      },
209
+      //评价管理
210
+      {
211
+        path: '/order/evaluation',
212
+        icon: 'message',
213
+        name: 'order_evaluation',
214
+        component: './order/evaluation',
215
+      },
216
+      //地址管理
217
+      {
218
+        path: '/order/address_list',
219
+        icon: 'environment',
220
+        name: 'order_address_list',
221
+        component: './order/address_list',
222
+      },
223
+      //优惠券
224
+      {
225
+        path: '/promotion/coupon_list',
226
+        icon: 'red-envelope',
227
+        name: 'promotion_coupon_list',
228
+        component: './promotion/coupon/coupon_list',
229
+      },
230
+      //添加优惠券
231
+      {
232
+        path: '/promotion/coupon_list_to_add',
233
+        icon: '',
234
+        name: '',
235
+        component: './promotion/coupon/add_coupon',
236
+      },
237
+      //优惠券详情
238
+      {
239
+        path: '/promotion/coupon_list_to_view',
240
+        icon: '',
241
+        name: '',
242
+        component: './promotion/coupon/view_coupon',
243
+      },
244
+      //优惠券领取列表
245
+      {
246
+        path: '/promotion/coupon_list_to_receive_list',
247
+        icon: '',
248
+        name: '',
249
+        component: './promotion/coupon/member_receive_lists',
250
+      },
251
+      // //满优惠
252
+      // {
253
+      //   path: '/promotion/full_discount',
254
+      //   icon: 'gift',
255
+      //   name: 'promotion_full_discount',
256
+      //   component: './promotion/full/discount',
257
+      // },
258
+      //满减活动
259
+      {
260
+        path: '/promotion/full_acm',
261
+        icon: 'fire',
262
+        name: 'promotion_full_acm',
263
+        component: './promotion/full/full_acm_list',
264
+      },
265
+      //发布满减活动
266
+      {
267
+        path: '/promotion/full_acm_to_add',
268
+        icon: '',
269
+        name: '',
270
+        component: './promotion/full/add_full_acm',
271
+      },
272
+      //阶梯满减
273
+      {
274
+        path: '/promotion/full_asm',
275
+        icon: 'gold',
276
+        name: 'promotion_full_asm',
277
+        component: './promotion/full/full_asm_list',
278
+      },
279
+      //发布阶梯满减活动
280
+      {
281
+        path: '/promotion/full_asm_to_add',
282
+        icon: '',
283
+        name: '',
284
+        component: './promotion/full/add_full_asm',
285
+      },
286
+      //满N元折扣
287
+      {
288
+        path: '/promotion/full_ald',
289
+        icon: 'money-collect',
290
+        name: 'promotion_full_ald',
291
+        component: './promotion/full/full_ald_list',
292
+      },
293
+      //发布满N元折扣活动
294
+      {
295
+        path: '/promotion/full_ald_to_add',
296
+        icon: '',
297
+        name: '',
298
+        component: './promotion/full/add_full_ald',
299
+      },
300
+      //满N件折扣
301
+      {
302
+        path: '/promotion/full_nld',
303
+        icon: 'medicine-box',
304
+        name: 'promotion_full_nld',
305
+        component: './promotion/full/full_nld_list',
306
+      },
307
+      //发布满N元折扣活动
308
+      {
309
+        path: '/promotion/full_nld_to_add',
310
+        icon: '',
311
+        name: '',
312
+        component: './promotion/full/add_full_nld',
313
+      },
314
+      //秒杀活动
315
+      {
316
+        path: '/promotion/seckill',
317
+        icon: 'thunderbolt',
318
+        name: 'promotion_seckill',
319
+        component: './promotion/seckill/list',
320
+      },
321
+      //参加秒杀活动
322
+      {
323
+        path: '/promotion/seckill_to_add',
324
+        icon: '',
325
+        name: '',
326
+        component: './promotion/seckill/add_seckill',
327
+      },
328
+      //参加秒杀活动的商品列表
329
+      {
330
+        path: '/promotion/seckill_bind_goods',
331
+        icon: '',
332
+        name: '',
333
+        component: './promotion/seckill/joined_goods_list',
334
+      },
335
+      //拼团活动列表
336
+      {
337
+        path: '/promotion/spell_group',
338
+        icon: 'flag',
339
+        name: 'promotion_spell_group',
340
+        component: './promotion/spell_group/all_list',
341
+      },
342
+      //发布拼团活动
343
+      {
344
+        path: '/promotion/spell_group_to_add',
345
+        icon: '',
346
+        name: '',
347
+        component: './promotion/spell_group/add_spell_group',
348
+      },
349
+      //拼团详情
350
+      {
351
+        path: '/promotion/spell_group_to_view',
352
+        icon: '',
353
+        name: '',
354
+        component: './promotion/spell_group/view_spell_group',
355
+      },
356
+      //拼团的商品列表
357
+      {
358
+        path: '/promotion/spell_group_bind_goods',
359
+        icon: '',
360
+        name: '',
361
+        component: './promotion/spell_group/joined_goods_list',
362
+      },
363
+      //拼团活动订单
364
+      {
365
+        path: '/promotion/spell_group_order',
366
+        icon: '',
367
+        name: '',
368
+        component: './promotion/spell_group/order_lists',
369
+      },
370
+      //拼团活动订单详情
371
+      {
372
+        path: '/promotion/spell_group_order_to_detail',
373
+        icon: '',
374
+        name: '',
375
+        component: './order/order_detail',
376
+      },
377
+      //拼团团队列表
378
+      {
379
+        path: '/promotion/spell_group_team_list',
380
+        icon: '',
381
+        name: '',
382
+        component: './promotion/spell_group/team_list',
383
+      },
384
+      //阶梯团活动
385
+      {
386
+        path: '/promotion/ladder_group',
387
+        icon: 'build',
388
+        name: 'promotion_ladder_group',
389
+        component: './promotion/ladder_group/all_list',
390
+      },
391
+      //参加阶梯团活动
392
+      {
393
+        path: '/promotion/ladder_group_to_add',
394
+        icon: '',
395
+        name: '',
396
+        component: './promotion/ladder_group/add_ladder_group',
397
+      },
398
+      //阶梯团详情
399
+      {
400
+        path: '/promotion/ladder_group_to_view',
401
+        icon: '',
402
+        name: '',
403
+        component: './promotion/ladder_group/view_ladder_group',
404
+      },
405
+      //阶梯团——团队列表
406
+      {
407
+        path: '/promotion/ladder_group_team_list',
408
+        icon: '',
409
+        name: '',
410
+        component: './promotion/ladder_group/team_list',
411
+      },
412
+      //预售活动
413
+      {
414
+        path: '/promotion/presale',
415
+        icon: 'gift',
416
+        name: 'promotion_presale',
417
+        component: './promotion/presale/list',
418
+      },
419
+      //预售查看详情
420
+      {
421
+        path: '/promotion/presale_to_view',
422
+        icon: '',
423
+        name: '',
424
+        component: './promotion/presale/view_presale',
425
+      },
426
+      //预售的商品列表
427
+      {
428
+        path: '/promotion/presale_bind_goods',
429
+        icon: '',
430
+        name: '',
431
+        component: './promotion/presale/joined_goods_list',
432
+      },
433
+      //新建预售活动
434
+      {
435
+        path: '/promotion/presale_to_add',
436
+        icon: '',
437
+        name: '',
438
+        component: './promotion/presale/add_presale',
439
+      },
440
+      
441
+      //店铺设置
442
+      {
443
+        path: '/store/setting',
444
+        icon: 'shop',
445
+        name: 'store_setting',
446
+        component: './store/setting',
447
+      },
448
+      //店铺信息
449
+      {
450
+        path: '/store/info',
451
+        icon: 'profile',
452
+        name: 'store_info',
453
+        component: './store/info',
454
+      },
455
+      // 店铺分类
456
+      {
457
+        path: '/store/category',
458
+        icon: 'appstore',
459
+        name: 'store_category',
460
+        component: './store/category',
461
+      },
462
+      //品牌申请
463
+      {
464
+        path: '/store/brand_lists',
465
+        icon: 'trademark',
466
+        name: 'store_brand_lists',
467
+        component: './store/brand_lists',
468
+      },
469
+      // 模板列表
470
+      {
471
+        path: '/diy/tpl_lists',
472
+        icon: 'home',
473
+        name: 'diy_tpl_lists',
474
+        component: './diy/pc_diy/tpl_lists',
475
+      },
476
+      // 实例化模版
477
+      {
478
+        path: '/diy/instance_template_lists',
479
+        icon: 'profile',
480
+        name: 'diy_instance_template_lists',
481
+        component: './diy/pc_diy/instance_template_lists',
482
+      },
483
+      // 新增/编辑模版
484
+      {
485
+        path: '/diy/instance_template_lists_to_edit',
486
+        name: '',
487
+        component: './diy/pc_diy/add_template',
488
+      },
489
+      // 店铺PC端首页装修
490
+      {
491
+        path: '/diy/decorate_pc_home',
492
+        icon: 'desktop',
493
+        name: 'diy_decorate_pc_home',
494
+        component: './diy/pc_diy/diy_lists',
495
+      },
496
+      // 店铺移动端首页装修
497
+      {
498
+        path: '/diy/decorate_mhome',
499
+        icon: 'mobile',
500
+        name: 'diy_decorate_mhome',
501
+        component: './diy/m_diy/m_diy_lists',
502
+      },
503
+      // 店铺移动端装修页面
504
+      {
505
+        path: '/diy/decorate_mhome_to_edit',
506
+        name: '',
507
+        component: './diy/m_diy/edit_m_diy_page',
508
+      },
509
+      // 消息接收设置
510
+      {
511
+        path: '/store/msg_setting',
512
+        icon: 'setting',
513
+        name: 'store_msg_setting',
514
+        component: './store/msg_setting',
515
+      },
516
+      // 消息接收设置
517
+      {
518
+        path: '/store/msg_lists',
519
+        icon: 'bell',
520
+        name: 'store_msg_lists',
521
+        component: './store/msg_lists',
522
+      },
523
+      //售后管理——仅退款
524
+      {
525
+        path: '/service/refund_lists',
526
+        icon: 'transaction',
527
+        name: 'service_refund_lists',
528
+        component: './service/refund_lists',
529
+      },
530
+      //售后管理——退货退款
531
+      {
532
+        path: '/service/return_lists',
533
+        icon: 'export',
534
+        name: 'service_return_lists',
535
+        component: './service/return_lists',
536
+      },
537
+      //售后管理——仅退款——退款详情
538
+      {
539
+        path: '/service/refund_lists_to_detail',
540
+        name: '',
541
+        component: './service/detail',
542
+      },
543
+      //售后管理——退货退款——退款详情
544
+      {
545
+        path: '/service/return_lists_to_detail',
546
+        name: '',
547
+        component: './service/detail',
548
+      },
549
+      //账号——权限阻
550
+      {
551
+        path: '/account/group',
552
+        icon: 'trademark',
553
+        name: 'account_group',
554
+        component: './account/group',
555
+      },
556
+      //账号——子账号管理
557
+      {
558
+        path: '/account/member',
559
+        icon: 'contacts',
560
+        name: 'account_member',
561
+        component: './account/member',
562
+      },
563
+      //结算——结算账号
564
+      {
565
+        path: '/bill/account',
566
+        icon: 'property-safety',
567
+        name: 'bill_account',
568
+        component: './bill/account_lists',
569
+      },
570
+      //结算——结算账单
571
+      {
572
+        path: '/bill/lists',
573
+        icon: 'transaction',
574
+        name: 'bill_list',
575
+        component: './bill/lists',
576
+      },
577
+      //结算——结算账单详情
578
+      {
579
+        path: '/bill/lists_to_detail',
580
+        icon: 'transaction',
581
+        name: '',
582
+        component: './bill/detail',
583
+      },
584
+
585
+      //积分商城——发布商品
586
+      {
587
+        path: '/point/goods_list_to_add',
588
+        icon: 'export',
589
+        name: '',
590
+        component: './point/goods/add_goods',
591
+      },
592
+      //积分商城——商品列表
593
+      {
594
+        path: '/point/goods_list',
595
+        icon: 'shopping',
596
+        name: 'point_goods_list',
597
+        component: './point/goods/goods_list',
598
+      },
599
+      //积分商城——导入商城商品
600
+      {
601
+        path: '/point/goods_list_to_import',
602
+        icon: '',
603
+        name: '',
604
+        component: './point/goods/select_mall_goods',
605
+      },
606
+      //积分商城——订单管理
607
+      {
608
+        path: '/point/order_list',
609
+        icon: 'profile',
610
+        name: 'point_order_list',
611
+        component: './point/order/order_lists',
612
+      },
613
+      //积分商城——订单详情
614
+      {
615
+        path: '/point/order_list_to_detail',
616
+        name: '',
617
+        component: './point/order/order_detail',
618
+      },
619
+      //积分商城——结算管理
620
+      {
621
+        path: '/point/bill_list',
622
+        icon: 'pay-circle',
623
+        name: 'point_bill_list',
624
+        component: './point/bill/lists',
625
+      },
626
+      //积分商城——结算详情
627
+      {
628
+        path: '/point/bill_list_to_detail',
629
+        name: '',
630
+        component: './point/bill/detail',
631
+      },
632
+      
633
+      {
634
+        component: '404',
635
+      },
636
+    ],
637
+  },
638
+];

+ 14 - 0
seller/docker/docker-compose.dev.yml

@@ -0,0 +1,14 @@
1
+version: "3.5"
2
+
3
+services:
4
+  ant-design-pro_dev:
5
+    ports:
6
+      - 8000:8000
7
+    build:
8
+      context: ../
9
+      dockerfile: Dockerfile.dev
10
+    container_name: "ant-design-pro_dev"
11
+    volumes:
12
+      - ../src:/usr/src/app/src
13
+      - ../config:/usr/src/app/config
14
+      - ../mock:/usr/src/app/mock

+ 21 - 0
seller/docker/docker-compose.yml

@@ -0,0 +1,21 @@
1
+version: "3.5"
2
+
3
+services:
4
+  ant-design-pro_build:
5
+    build: ../
6
+    container_name: "ant-design-pro_build"
7
+    volumes:
8
+      - dist:/usr/src/app/dist
9
+
10
+  ant-design-pro_web:
11
+    image: nginx
12
+    ports:
13
+      - 80:80
14
+    container_name: "ant-design-pro_web"
15
+    restart: unless-stopped
16
+    volumes:
17
+      - dist:/usr/share/nginx/html:ro
18
+      - ./nginx.conf:/etc/nginx/conf.d/default.conf
19
+
20
+volumes:
21
+  dist:

+ 22 - 0
seller/docker/nginx.conf

@@ -0,0 +1,22 @@
1
+server {
2
+    listen 80;
3
+    # gzip config
4
+    gzip on;
5
+    gzip_min_length 1k;
6
+    gzip_comp_level 9;
7
+    gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
8
+    gzip_vary on;
9
+    gzip_disable "MSIE [1-6]\.";
10
+
11
+    root /usr/share/nginx/html;
12
+
13
+    location / {
14
+        try_files $uri $uri/ /index.html;
15
+    }
16
+    location /api {
17
+        proxy_pass https://preview.pro.ant.design;
18
+        proxy_set_header   X-Forwarded-Proto $scheme;
19
+        proxy_set_header   Host              $http_host;
20
+        proxy_set_header   X-Real-IP         $remote_addr;
21
+    }
22
+}

+ 13 - 0
seller/firebase.json

@@ -0,0 +1,13 @@
1
+{
2
+  "hosting": {
3
+    "public": "dist",
4
+    "rewrites": [
5
+      { "source": "/api/**", "function": "api" },
6
+      {
7
+        "source": "**",
8
+        "destination": "/index.html"
9
+      }
10
+    ],
11
+    "ignore": ["firebase.json", "**/.*", "**/node_modules/**"]
12
+  }
13
+}

+ 9 - 0
seller/functions/index.js

@@ -0,0 +1,9 @@
1
+// [START functionsimport]
2
+const functions = require('firebase-functions');
3
+const express = require('express');
4
+const matchMock = require('./matchMock');
5
+const app = express();
6
+
7
+app.use(matchMock);
8
+
9
+exports.api = functions.https.onRequest(app);

+ 117 - 0
seller/functions/matchMock.js

@@ -0,0 +1,117 @@
1
+const mockFile = require('./mock/index');
2
+const pathToRegexp = require('path-to-regexp');
3
+const debug = console.log;
4
+const bodyParser = require('body-parser');
5
+
6
+const BODY_PARSED_METHODS = ['post', 'put', 'patch'];
7
+
8
+function parseKey(key) {
9
+  let method = 'get';
10
+  let path = key;
11
+  if (key.indexOf(' ') > -1) {
12
+    const splited = key.split(' ');
13
+    method = splited[0].toLowerCase();
14
+    path = splited[1]; // eslint-disable-line
15
+  }
16
+  return {
17
+    method,
18
+    path,
19
+  };
20
+}
21
+
22
+function createHandler(method, path, handler) {
23
+  return function(req, res, next) {
24
+    if (BODY_PARSED_METHODS.includes(method)) {
25
+      bodyParser.json({ limit: '5mb', strict: false })(req, res, () => {
26
+        bodyParser.urlencoded({ limit: '5mb', extended: true })(req, res, () => {
27
+          sendData();
28
+        });
29
+      });
30
+    } else {
31
+      sendData();
32
+    }
33
+
34
+    function sendData() {
35
+      if (typeof handler === 'function') {
36
+        handler(req, res, next);
37
+      } else {
38
+        res.json(handler);
39
+      }
40
+    }
41
+  };
42
+}
43
+
44
+function normalizeConfig(config) {
45
+  return Object.keys(config).reduce((memo, key) => {
46
+    const handler = config[key];
47
+    const { method, path } = parseKey(key);
48
+    const keys = [];
49
+    const re = pathToRegexp(path, keys);
50
+    memo.push({
51
+      method,
52
+      path,
53
+      re,
54
+      keys,
55
+      handler: createHandler(method, path, handler),
56
+    });
57
+    return memo;
58
+  }, []);
59
+}
60
+
61
+const mockData = normalizeConfig(mockFile);
62
+
63
+function matchMock(req) {
64
+  const { path: exceptPath } = req;
65
+  const exceptMethod = req.method.toLowerCase();
66
+  for (const mock of mockData) {
67
+    const { method, re, keys } = mock;
68
+    if (method === exceptMethod) {
69
+      const match = re.exec(req.path);
70
+      if (match) {
71
+        const params = {};
72
+
73
+        for (let i = 1; i < match.length; i = i + 1) {
74
+          const key = keys[i - 1];
75
+          const prop = key.name;
76
+          const val = decodeParam(match[i]);
77
+
78
+          if (val !== undefined || !hasOwnProperty.call(params, prop)) {
79
+            params[prop] = val;
80
+          }
81
+        }
82
+        req.params = params;
83
+        return mock;
84
+      }
85
+    }
86
+  }
87
+
88
+  function decodeParam(val) {
89
+    if (typeof val !== 'string' || val.length === 0) {
90
+      return val;
91
+    }
92
+
93
+    try {
94
+      return decodeURIComponent(val);
95
+    } catch (err) {
96
+      if (err instanceof URIError) {
97
+        err.message = `Failed to decode param ' ${val} '`;
98
+        err.status = err.statusCode = 400;
99
+      }
100
+
101
+      throw err;
102
+    }
103
+  }
104
+
105
+  return mockData.filter(({ method, re }) => {
106
+    return method === exceptMethod && re.test(exceptPath);
107
+  })[0];
108
+}
109
+module.exports = (req, res, next) => {
110
+  const match = matchMock(req);
111
+  if (match) {
112
+    debug(`mock matched: [${match.method}] ${match.path}`);
113
+    return match.handler(req, res, next);
114
+  } else {
115
+    return next();
116
+  }
117
+};

+ 23 - 0
seller/functions/package.json

@@ -0,0 +1,23 @@
1
+{
2
+  "name": "functions",
3
+  "description": "Cloud Functions for Firebase",
4
+  "scripts": {
5
+    "serve": "npm run mock && firebase serve --only functions",
6
+    "shell": "firebase functions:shell",
7
+    "start": "npm run shell",
8
+    "deploy": "firebase deploy --only functions",
9
+    "logs": "firebase functions:log",
10
+    "mock": "node ../scripts/generateMock.js"
11
+  },
12
+  "dependencies": {
13
+    "@babel/runtime": "^7.0.0",
14
+    "body-parser": "^1.18.3",
15
+    "express": "^4.16.3",
16
+    "firebase-admin": "^5.12.1",
17
+    "firebase-functions": "^2.0.5",
18
+    "mockjs": "^1.0.1-beta3",
19
+    "moment": "^2.22.2",
20
+    "path-to-regexp": "^2.2.1"
21
+  },
22
+  "private": true
23
+}

+ 15 - 0
seller/jest-puppeteer.config.js

@@ -0,0 +1,15 @@
1
+// ps https://github.com/GoogleChrome/puppeteer/issues/3120
2
+module.exports = {
3
+  launch: {
4
+    headless: false,
5
+    args: [
6
+      '--disable-gpu',
7
+      '--disable-dev-shm-usage',
8
+      '--disable-setuid-sandbox',
9
+      '--no-first-run',
10
+      '--no-sandbox',
11
+      '--no-zygote',
12
+      '--single-process',
13
+    ],
14
+  },
15
+};

+ 4 - 0
seller/jest.config.js

@@ -0,0 +1,4 @@
1
+module.exports = {
2
+  testURL: 'http://localhost:8000',
3
+  preset: 'jest-puppeteer',
4
+};

+ 10 - 0
seller/jsconfig.json

@@ -0,0 +1,10 @@
1
+{
2
+  "compilerOptions": {
3
+    "emitDecoratorMetadata": true,
4
+    "experimentalDecorators": true,
5
+    "baseUrl": ".",
6
+    "paths": {
7
+      "@/*": ["./src/*"]
8
+    }
9
+  }
10
+}

+ 13 - 0
seller/netlify.toml

@@ -0,0 +1,13 @@
1
+[[redirects]]
2
+  from = "/api/*"
3
+  to = "https://us-central1-antd-pro.cloudfunctions.net/api/api/:splat"
4
+  status = 200
5
+  force = true
6
+  [redirects.headers]
7
+    X-From = "Netlify"
8
+    X-Api-Key = "some-api-key-string"
9
+
10
+[[redirects]]
11
+  from = "/*"
12
+  to = "/index.html"
13
+  status = 200

File diff suppressed because it is too large
+ 26089 - 0
seller/package-lock.json


+ 129 - 0
seller/package.json

@@ -0,0 +1,129 @@
1
+{
2
+  "name": "ant-design-pro",
3
+  "version": "2.1.1",
4
+  "description": "An out-of-box UI solution for enterprise applications",
5
+  "private": true,
6
+  "scripts": {
7
+    "presite": "node ./scripts/generateMock.js && cd functions && npm install",
8
+    "start": "cross-env APP_TYPE=site umi dev --port=8108",
9
+    "start:no-mock": "cross-env MOCK=none umi dev",
10
+    "build": "umi build",
11
+    "site": "npm run presite && cross-env APP_TYPE=site npm run build && firebase deploy && npm run docker:push",
12
+    "analyze": "cross-env ANALYZE=1 umi build",
13
+    "lint:style": "stylelint \"src/**/*.less\" --syntax less",
14
+    "lint": "eslint --ext .js src mock tests && npm run lint:style",
15
+    "lint:fix": "eslint --fix --ext .js src mock tests && npm run lint:style",
16
+    "lint-staged": "lint-staged",
17
+    "lint-staged:js": "eslint --ext .js",
18
+    "tslint": "npm run tslint:fix",
19
+    "tslint:fix": "tslint --fix 'src/**/*.ts*'",
20
+    "test": "umi test",
21
+    "test:component": "umi test ./src/components",
22
+    "test:all": "node ./tests/run-tests.js",
23
+    "prettier": "node ./scripts/prettier.js",
24
+    "docker:dev": "docker-compose -f ./docker/docker-compose.dev.yml up",
25
+    "docker:build": "docker-compose -f ./docker/docker-compose.dev.yml build",
26
+    "docker-prod:dev": "docker-compose -f ./docker/docker-compose.yml up",
27
+    "docker-prod:build": "docker-compose -f ./docker/docker-compose.yml build",
28
+    "docker-hub:build": "docker build  -f Dockerfile.hub -t  ant-design-pro ./",
29
+    "docker:tag": "docker tag ant-design-pro chenshuai2144/ant-design-pro",
30
+    "docker:push": "npm run docker-hub:build && npm run docker:tag && docker push chenshuai2144/ant-design-pro"
31
+  },
32
+  "dependencies": {
33
+    "@antv/data-set": "^0.10.0",
34
+    "@babel/runtime": "^7.1.5",
35
+    "antd": "^3.16.6",
36
+    "bizcharts": "^3.4.3",
37
+    "bizcharts-plugin-slider": "^2.1.1-beta.1",
38
+    "classnames": "^2.2.6",
39
+    "dva": "^2.4.0",
40
+    "enquire-js": "^0.2.1",
41
+    "hash.js": "^1.1.5",
42
+    "jquery": "^3.5.1",
43
+    "lodash": "^4.17.10",
44
+    "lodash-decorators": "^6.0.0",
45
+    "memoize-one": "^5.0.0",
46
+    "moment": "^2.22.2",
47
+    "numeral": "^2.0.6",
48
+    "nzh": "^1.0.3",
49
+    "omit.js": "^1.0.0",
50
+    "path-to-regexp": "^2.4.0",
51
+    "prop-types": "^15.5.10",
52
+    "qrcode.react": "^0.9.3",
53
+    "qs": "^6.6.0",
54
+    "quill-delta-to-html": "^0.10.7",
55
+    "rc-animate": "^2.4.4",
56
+    "re-resizable": "^4.11.0",
57
+    "react": "^16.6.3",
58
+    "react-beautiful-dnd": "^10.1.1",
59
+    "react-color": "^2.14.1",
60
+    "react-container-query": "^0.11.0",
61
+    "react-copy-to-clipboard": "^5.0.1",
62
+    "react-custom-scrollbars": "^4.2.1",
63
+    "react-document-title": "^2.0.3",
64
+    "react-dom": "^16.6.3",
65
+    "react-fittext": "^1.0.0",
66
+    "react-marquee": "^1.0.0",
67
+    "react-media": "^1.8.0",
68
+    "react-quill": "^1.3.3",
69
+    "react-resizable": "^1.7.5",
70
+    "react-router-dom": "^4.3.1",
71
+    "react-slick": "^0.27.11",
72
+    "slick-carousel": "^1.8.1"
73
+  },
74
+  "devDependencies": {
75
+    "@types/react": "^16.7.7",
76
+    "@types/react-dom": "^16.0.10",
77
+    "antd-pro-merge-less": "^1.0.0",
78
+    "antd-theme-webpack-plugin": "^1.1.8",
79
+    "babel-eslint": "^10.0.1",
80
+    "cross-env": "^5.1.1",
81
+    "cross-port-killer": "^1.0.1",
82
+    "enzyme": "^3.7.0",
83
+    "eslint": "^5.4.0",
84
+    "eslint-config-airbnb": "^17.0.0",
85
+    "eslint-config-prettier": "^3.0.1",
86
+    "eslint-plugin-babel": "^5.3.0",
87
+    "eslint-plugin-compat": "^2.6.2",
88
+    "eslint-plugin-import": "^2.14.0",
89
+    "eslint-plugin-jsx-a11y": "^6.1.2",
90
+    "eslint-plugin-markdown": "^1.0.0-beta.6",
91
+    "eslint-plugin-react": "^7.11.1",
92
+    "gh-pages": "^2.0.1",
93
+    "husky": "^1.2.0",
94
+    "jest-puppeteer": "^3.5.1",
95
+    "lint-staged": "^8.1.0",
96
+    "merge-umi-mock-data": "^0.0.3",
97
+    "mockjs": "^1.0.1-beta3",
98
+    "prettier": "1.15.2",
99
+    "pro-download": "^1.0.1",
100
+    "stylelint": "^9.8.0",
101
+    "stylelint-config-prettier": "^4.0.0",
102
+    "stylelint-config-standard": "^18.0.0",
103
+    "tslint": "^5.10.0",
104
+    "tslint-config-prettier": "^1.10.0",
105
+    "tslint-react": "^3.6.0",
106
+    "umi": "^2.2.7",
107
+    "umi-plugin-ga": "^1.1.3",
108
+    "umi-plugin-react": "^1.2.0"
109
+  },
110
+  "optionalDependencies": {
111
+    "puppeteer": "^1.10.0"
112
+  },
113
+  "lint-staged": {
114
+    "**/*.{jsx}": "npm run lint-staged:js"
115
+  },
116
+  "engines": {
117
+    "node": ">=8.0.0"
118
+  },
119
+  "browserslist": [
120
+    "> 1%",
121
+    "last 2 versions",
122
+    "not ie <= 10"
123
+  ],
124
+  "husky": {
125
+    "hooks": {
126
+      "pre-commit": "npm run lint-staged"
127
+    }
128
+  }
129
+}

BIN
seller/public/.DS_Store


BIN
seller/public/favicon.png


BIN
seller/public/pc_diy_img/adv_floor_02_goods.png


BIN
seller/public/pc_diy_img/adv_floor_02_left.png


BIN
seller/public/pc_diy_img/adv_floor_02_right.png


File diff suppressed because it is too large
+ 636 - 0
seller/report.20210127.220406.16200.0.001.json


File diff suppressed because it is too large
+ 635 - 0
seller/report.20210129.112020.12784.0.001.json


+ 3 - 0
seller/scripts/generateMock.js

@@ -0,0 +1,3 @@
1
+const generateMock = require('merge-umi-mock-data');
2
+const path = require('path');
3
+generateMock(path.join(__dirname, '../mock'), path.join(__dirname, '../functions/mock/index.js'));

+ 46 - 0
seller/scripts/lint-prettier.js

@@ -0,0 +1,46 @@
1
+/**
2
+ * copy to https://github.com/facebook/react/blob/master/scripts/prettier/index.js
3
+ * prettier api doc https://prettier.io/docs/en/api.html
4
+ *----------*****--------------
5
+ *  lint file is prettier
6
+ *----------*****--------------
7
+ */
8
+
9
+const glob = require('glob');
10
+const prettier = require('prettier');
11
+const fs = require('fs');
12
+const prettierConfigPath = require.resolve('../.prettierrc');
13
+
14
+const files = process.argv.slice(2);
15
+
16
+let didError = false;
17
+let didWarn = false;
18
+
19
+files.forEach(file => {
20
+  const options = prettier.resolveConfig.sync(file, {
21
+    config: prettierConfigPath,
22
+  });
23
+  try {
24
+    const fileInfo = prettier.getFileInfo.sync(file);
25
+    if (fileInfo.ignored) {
26
+      return;
27
+    }
28
+    const input = fs.readFileSync(file, 'utf8');
29
+    const withParserOptions = {
30
+      ...options,
31
+      parser: fileInfo.inferredParser,
32
+    };
33
+    const isPrettier = prettier.check(input, withParserOptions);
34
+    if (!isPrettier) {
35
+      console.log(`\x1b[31m ${file} is no prettier, please use npm run prettier and git add !\x1b[0m`);
36
+      didWarn = true;
37
+    }
38
+  } catch (e) {
39
+    didError = true;
40
+  }
41
+});
42
+
43
+if (didWarn || didError) {
44
+  process.exit(1);
45
+}
46
+console.log('\x1b[32m lint prettier success!\x1b[0m');

+ 56 - 0
seller/scripts/prettier.js

@@ -0,0 +1,56 @@
1
+/**
2
+ * copy to https://github.com/facebook/react/blob/master/scripts/prettier/index.js
3
+ * prettier api doc https://prettier.io/docs/en/api.html
4
+ *----------*****--------------
5
+ *  prettier all js and all ts.
6
+ *----------*****--------------
7
+ */
8
+
9
+const glob = require('glob');
10
+const prettier = require('prettier');
11
+const fs = require('fs');
12
+const prettierConfigPath = require.resolve('../.prettierrc');
13
+
14
+let didError = false;
15
+
16
+let files = [];
17
+const jsFiles = glob.sync('src/**/*.js*', { ignore: ['**/node_modules/**', 'build/**'] });
18
+const tsFiles = glob.sync('src/**/*.ts*', { ignore: ['**/node_modules/**', 'build/**'] });
19
+const configFiles = glob.sync('config/**/*.js*', { ignore: ['**/node_modules/**', 'build/**'] });
20
+const lessFiles = glob.sync('src/**/*.less*', { ignore: ['**/node_modules/**', 'build/**'] });
21
+files = files.concat(jsFiles);
22
+files = files.concat(tsFiles);
23
+files = files.concat(configFiles);
24
+files = files.concat(lessFiles);
25
+if (!files.length) {
26
+  return;
27
+}
28
+
29
+files.forEach(file => {
30
+  const options = prettier.resolveConfig.sync(file, {
31
+    config: prettierConfigPath,
32
+  });
33
+  const fileInfo = prettier.getFileInfo.sync(file);
34
+  if (fileInfo.ignored) {
35
+    return;
36
+  }
37
+  try {
38
+    const input = fs.readFileSync(file, 'utf8');
39
+    const withParserOptions = {
40
+      ...options,
41
+      parser: fileInfo.inferredParser,
42
+    };
43
+    const output = prettier.format(input, withParserOptions);
44
+    if (output !== input) {
45
+      fs.writeFileSync(file, output, 'utf8');
46
+      console.log(`\x1b[34m ${file} is prettier`);
47
+    }
48
+  } catch (e) {
49
+    didError = true;
50
+  }
51
+});
52
+
53
+if (didError) {
54
+  process.exit(1);
55
+}
56
+console.log('\x1b[32m prettier success!');

BIN
seller/src/.DS_Store


BIN
seller/src/assets/.DS_Store


BIN
seller/src/assets/add_goods_step.png


BIN
seller/src/assets/alipay.png


BIN
seller/src/assets/apply_fail.png


BIN
seller/src/assets/apply_pending.png


BIN
seller/src/assets/apply_success.png


File diff suppressed because it is too large
+ 1 - 0
seller/src/assets/area.json


BIN
seller/src/assets/balance_bj.png


BIN
seller/src/assets/bill/1_cur.png


BIN
seller/src/assets/bill/1_no.png


BIN
seller/src/assets/bill/1_pass.png


BIN
seller/src/assets/bill/2_cur.png


BIN
seller/src/assets/bill/2_no.png


BIN
seller/src/assets/bill/2_pass.png


BIN
seller/src/assets/bill/3_cur.png


BIN
seller/src/assets/bill/3_no.png


BIN
seller/src/assets/bill/3_pass.png


BIN
seller/src/assets/bill/4_cur.png


BIN
seller/src/assets/bill/4_no.png


BIN
seller/src/assets/bill/4_pass.png


BIN
seller/src/assets/bill/detail_total_icon.png


BIN
seller/src/assets/check_error.png


BIN
seller/src/assets/check_lock.png


BIN
seller/src/assets/check_pending.png


BIN
seller/src/assets/check_success.png


BIN
seller/src/assets/coupons_bj.png


+ 8 - 0
seller/src/assets/css/account.less

@@ -0,0 +1,8 @@
1
+@import "~antd/lib/style/themes/default.less";
2
+
3
+.msg_item_split{
4
+  width: 100%;
5
+  border-bottom: 1px solid #f2f2f2;
6
+  margin-bottom: 20px;
7
+  padding-bottom: 20px;
8
+}

+ 98 - 0
seller/src/assets/css/order.less

@@ -0,0 +1,98 @@
1
+@import "~antd/lib/style/themes/default.less";
2
+
3
+.tableListForm {
4
+  :global {
5
+    .ant-form-item {
6
+      margin-bottom: 24px;
7
+      margin-right: 0;
8
+      display: flex;
9
+      > .ant-form-item-label {
10
+        width: auto;
11
+        line-height: 32px;
12
+        padding-right: 8px;
13
+      }
14
+    }
15
+    .ant-form-item-control-wrapper {
16
+      flex: 1;
17
+    }
18
+  }
19
+  .submitButtons {
20
+    white-space: nowrap;
21
+    margin-bottom: 10px;
22
+    display: inline-block;
23
+  }
24
+}
25
+
26
+@media screen and (max-width: @screen-lg) {
27
+  .tableListForm :global(.ant-form-item) {
28
+    margin-right: 24px;
29
+  }
30
+}
31
+
32
+@media screen and (max-width: @screen-md) {
33
+  .tableListForm :global(.ant-form-item) {
34
+    margin-right: 8px;
35
+  }
36
+}
37
+.select_width{
38
+  width: 100%;
39
+}
40
+.to_top{
41
+  margin-top: 30px;
42
+}
43
+.splitLine {
44
+  background: @border-color-split;
45
+  display: inline-block;
46
+  margin: 0 8px;
47
+  width: 1px;
48
+  height: 12px;
49
+}
50
+.formlabel{
51
+  label{
52
+    font-size: 14px;
53
+  }
54
+}
55
+.member_avatar{
56
+  width: 60px;
57
+  height: 60px;
58
+  vertical-align: middle;
59
+}
60
+.member_info{
61
+  display: inline-block;
62
+  margin-left: 10px;
63
+  vertical-align: middle;
64
+  span{
65
+    display: block;
66
+  }
67
+}
68
+.img_name{
69
+  display: inline-block;
70
+  vertical-align: middle;
71
+}
72
+.eval_pic_ul{
73
+  clear: both;
74
+  overflow: hidden;
75
+  display: inline-block;
76
+  vertical-align: middle;
77
+  margin-bottom: 0;
78
+  margin-left: 0;
79
+  padding-left: 0;
80
+  .eval_pic_li{
81
+    float: left;
82
+    list-style-type: none;
83
+    border: 1px solid #eee;
84
+    margin: 5px 6px 5px 0;
85
+    img{
86
+      width: 35px;
87
+      height: 35px;
88
+    }
89
+  }
90
+}
91
+
92
+.eva_part{
93
+  :global{
94
+    .ant-rate{
95
+      font-size: 17px !important;
96
+    }
97
+  }
98
+}

+ 289 - 0
seller/src/assets/css/promotion.less

@@ -0,0 +1,289 @@
1
+.voucher_num{
2
+  color: #FF6A12;
3
+  cursor: pointer;
4
+}
5
+
6
+.full_activity{
7
+  .full_acm_activity{
8
+    .item{
9
+      padding-top: 15px;
10
+      .left{
11
+        width: 200px;
12
+        height: 32px;
13
+        line-height: 32px;
14
+        text-align: right;
15
+        padding-right: 20px;
16
+        font-size: 13px;
17
+      }
18
+      .right{
19
+        .reset_sel{
20
+          font-size: 13px;
21
+          cursor: pointer;
22
+          color: #FF711E;
23
+          margin-left: 20px;
24
+        }
25
+      }
26
+    }
27
+  }
28
+  .flex_zi{
29
+    flex:1;
30
+    justify-content: center;
31
+    align-items: center;
32
+  }
33
+  .flex_w{
34
+    display: flex;
35
+    width:900px;
36
+    border: 1px solid gray;
37
+    padding:5px  10px;
38
+    margin-top: 10px;
39
+    background:#eee;
40
+  }
41
+  .flex_w div{
42
+    margin-right: 10px;
43
+    text-align: center
44
+  }
45
+  .flex_wt{
46
+    display: flex;
47
+    width:900px;
48
+    border-bottom: 1px solid gray;
49
+    padding:5px 10px;
50
+    border-left:1px solid gray;
51
+    border-right:1px solid gray
52
+  }
53
+  .flex_wt div{
54
+    margin-right: 10px;
55
+    text-align: center;
56
+  }
57
+  .common_title_bg{
58
+    height: 36px;
59
+    line-height: 36px;
60
+    background: rgba(255, 75, 17, .05);
61
+    border-radius: 2px;
62
+    width: 100%;
63
+    .title{
64
+      color: #333;
65
+      font-size: 13px;
66
+      padding-left: 10px;
67
+    }
68
+    .del_ladder_pro{
69
+      display: none;
70
+      padding-right: 15px;
71
+      padding-top: 7px;
72
+    }
73
+  }
74
+
75
+  .common_title_bg:hover{
76
+    .del_ladder_pro{
77
+      display: inline-block;
78
+    }
79
+  }
80
+
81
+  .add_new{
82
+    margin-top: 15px;
83
+    height: 40px;
84
+    background: rgba(255, 113, 30, .1);
85
+    border-radius: 3px;
86
+    width: 100%;
87
+    .add_new_tip{
88
+      color: #FF7F40;
89
+      font-size: 12px;
90
+      margin-left: 10px;
91
+    }
92
+  }
93
+
94
+  .sel_goods{
95
+    padding-left: 24px;
96
+    .sel_tip{
97
+        font-size: 12px;
98
+        color: #999;
99
+    }
100
+    .reset_sel_goods{
101
+      cursor: pointer;
102
+      font-size: 12px;
103
+      color: #FF7F40;
104
+    }
105
+
106
+    .goods_info{
107
+      margin-left: 10px;
108
+      margin-top: 5px;
109
+      height: 60px;
110
+      padding: 10px;
111
+      max-width: 700px;
112
+      min-width: 260px;
113
+      background: #f8f8f8;
114
+      border-radius: 3px;
115
+      .left{
116
+        width: 40px !important;
117
+        height: 40px !important;
118
+        flex-shrink: 0;
119
+        border-radius: 3px;
120
+        padding-right: 0 !important;
121
+        margin-right: 10px;
122
+        overflow: hidden;
123
+        img{
124
+          max-width: 100%;
125
+          max-height: 100%;
126
+          border-radius: 3px;
127
+        }
128
+      }
129
+      .goods_name{
130
+        font-size: 13px;
131
+        color: #333;
132
+      }
133
+      .goods_price{
134
+        font-size: 12px;
135
+        color: #666;
136
+        margin-top: 3px;
137
+        white-space: nowrap;
138
+      }
139
+    }
140
+
141
+  }
142
+
143
+}
144
+
145
+.seckill{
146
+  .right_show_content{
147
+    height: 32px;
148
+    line-height: 32px;
149
+    font-size: 13px;
150
+  }
151
+  .sele_goods{
152
+    border: 1px solid #E6E6E6;
153
+    border-radius: 5px;
154
+    margin: 10px 0;
155
+    padding: 10px;
156
+    position: relative;
157
+    .del_spu{
158
+      position: absolute;
159
+      z-index: 2;
160
+      top: 0;
161
+      right: 0;
162
+      width: 28px;
163
+      height: 30px;
164
+    }
165
+    .goods_info{
166
+      height: 70px;
167
+      margin-bottom: 10px;
168
+      border-bottom: 1px solid #F4F3F8;
169
+      .goods_info_left{
170
+        .goods_img_wrap{
171
+          width: 60px;
172
+          height: 60px;
173
+          border-radius: 5px;
174
+          overflow: hidden;
175
+          flex-shrink: 0;
176
+          .goods_img{
177
+            max-width: 100%;
178
+            max-height: 100%;
179
+          }
180
+        }
181
+        .goods_name{
182
+          color: #333;
183
+          font-size: 12px;
184
+          margin-left: 10px;
185
+          padding-top: 5px;
186
+          max-width: 320px;
187
+        }
188
+      }
189
+      .goods_info_right{
190
+        height: 70px;
191
+        padding-bottom: 10px;
192
+        .batch_btn{
193
+          padding: 0 15px;
194
+          background: #FF711E;
195
+          border-radius: 3px;
196
+          height: 30px;
197
+          color: #fff;
198
+          margin-left: 10px;
199
+          font-size: 13px;
200
+          cursor: pointer;
201
+          .sel_all{
202
+            color: #fff;
203
+          }
204
+        }
205
+      }
206
+    }
207
+    .ladder_part{
208
+      padding: 10px;
209
+      background: #F8F7F9;
210
+      margin-bottom: 10px;
211
+      .deposit_part{
212
+        .tip{
213
+          display: inline-block;
214
+          color: #999;
215
+          font-size: 12px;
216
+          margin-left: 20px;
217
+        }
218
+      }
219
+      .ladder_item{
220
+        margin-top: 10px;
221
+        .left_title{
222
+          display: inline-block;
223
+          font-weight: bold;
224
+          color: #333;
225
+          margin-right: 20px;
226
+        }
227
+        .del{
228
+          margin-left: 10px;
229
+          display: flex;
230
+        }
231
+      }
232
+      .add_ladder{
233
+        margin-left: 72px;
234
+        margin-top: 10px;
235
+          .btn{
236
+            width: 84px;
237
+            height: 30px;
238
+            background: #FF711E;
239
+            border-radius: 2px;
240
+            font-size: 13px;
241
+            font-weight: bold;
242
+            color: #FFF;
243
+            margin-right: 20px;
244
+          }
245
+          .tip{
246
+            color: #999;
247
+            font-size: 12px;
248
+          }
249
+      }
250
+    }
251
+  }
252
+}
253
+
254
+.spell_group_team_wrap{
255
+  .member{
256
+    width: 60px;
257
+    height: 31px;
258
+    border-radius: 50%;
259
+    flex-shrink: 0;
260
+    margin: 0 10px 10px;
261
+    position: relative;
262
+    .avatar{
263
+      overflow: hidden;
264
+      background-size: cover;
265
+      background-position: center;
266
+      width: 31px;
267
+      height: 31px;
268
+      border-radius: 50%;
269
+      border:1px solid #eee;
270
+    }
271
+    .name{
272
+      position: absolute;
273
+      z-index: 2;
274
+      bottom: -12px;
275
+      width: 60px;
276
+      overflow: hidden;
277
+      text-overflow: ellipsis;
278
+      white-space:nowrap;
279
+      height: 14px;
280
+      line-height: 14px;
281
+      background: #FF711E;
282
+      border-radius: 7px;
283
+      font-size: 12px;
284
+      color: #fff;
285
+      text-align: center;
286
+      padding: 0 5px;
287
+    }
288
+  }
289
+}

BIN
seller/src/assets/del_icon.png


BIN
seller/src/assets/del_icon_hover.png


BIN
seller/src/assets/del_seckill_goods.png


BIN
seller/src/assets/express_empty.png


BIN
seller/src/assets/home_basic/email.png


BIN
seller/src/assets/home_basic/exchange_num.png


BIN
seller/src/assets/home_basic/exchange_num_2.png


BIN
seller/src/assets/home_basic/return_num.png


BIN
seller/src/assets/home_basic/return_num_2.png


BIN
seller/src/assets/home_basic/sld_goods_num.png


BIN
seller/src/assets/home_basic/sld_goods_num_2.png


BIN
seller/src/assets/home_basic/sld_goods_num_new.png


BIN
seller/src/assets/home_basic/sld_goods_num_new_2.png


BIN
seller/src/assets/home_basic/sld_member_num.png


BIN
seller/src/assets/home_basic/sld_member_num_2.png


BIN
seller/src/assets/home_basic/sld_member_num_new.png


BIN
seller/src/assets/home_basic/sld_member_num_new_2.png


BIN
seller/src/assets/home_basic/sld_order_amount.png


BIN
seller/src/assets/home_basic/sld_order_amount_2.png


BIN
seller/src/assets/home_basic/sld_order_num.png


BIN
seller/src/assets/home_basic/sld_order_num_2.png


BIN
seller/src/assets/home_basic/sld_vendor_num.png


BIN
seller/src/assets/home_basic/sld_vendor_num_2.png


BIN
seller/src/assets/home_basic/sld_vendor_num_new.png


+ 0 - 0
seller/src/assets/home_basic/sld_vendor_num_new_2.png


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