xcx 4 gadus atpakaļ
revīzija
4eea1a904b
68 mainītis faili ar 19859 papildinājumiem un 0 dzēšanām
  1. 48
    0
      .babelrc
  2. 9
    0
      .editorconfig
  3. 5
    0
      .eslintignore
  4. 29
    0
      .eslintrc.js
  5. 17
    0
      .gitignore
  6. 10
    0
      .postcssrc.js
  7. 30
    0
      README.md
  8. 41
    0
      build/build.js
  9. 54
    0
      build/check-versions.js
  10. 101
    0
      build/utils.js
  11. 22
    0
      build/vue-loader.conf.js
  12. 92
    0
      build/webpack.base.conf.js
  13. 95
    0
      build/webpack.dev.conf.js
  14. 149
    0
      build/webpack.prod.conf.js
  15. 7
    0
      config/dev.env.js
  16. 90
    0
      config/index.js
  17. 4
    0
      config/prod.env.js
  18. 7
    0
      config/test.env.js
  19. 20
    0
      index.html
  20. 15832
    0
      package-lock.json
  21. 101
    0
      package.json
  22. 20
    0
      src/App.vue
  23. 155
    0
      src/assets/css/reset.scss
  24. 49
    0
      src/components/ScrollY/index.vue
  25. 2
    0
      src/components/ScrollY/page.scss
  26. 90
    0
      src/components/common/TabSwiper/index.vue
  27. 59
    0
      src/components/common/TabSwiper/page.scss
  28. 37
    0
      src/components/demo copy 2/index.vue
  29. 2
    0
      src/components/demo copy 2/page.scss
  30. 79
    0
      src/components/index/Banner/index.vue
  31. 20
    0
      src/components/index/Banner/page.scss
  32. 65
    0
      src/components/index/ZuQiuGuoGuanBanQuanChang/index.vue
  33. 111
    0
      src/components/index/ZuQiuGuoGuanBanQuanChang/page.scss
  34. 99
    0
      src/components/index/ZuQiuGuoGuanBiFen/index.vue
  35. 189
    0
      src/components/index/ZuQiuGuoGuanBiFen/page.scss
  36. 369
    0
      src/components/index/ZuQiuGuoGuanHunHeTouZhu/index.vue
  37. 203
    0
      src/components/index/ZuQiuGuoGuanHunHeTouZhu/page.scss
  38. 65
    0
      src/components/index/ZuQiuGuoGuanShengPingFu/index.vue
  39. 111
    0
      src/components/index/ZuQiuGuoGuanShengPingFu/page.scss
  40. 37
    0
      src/components/index/demo copy 4/index.vue
  41. 2
    0
      src/components/index/demo copy 4/page.scss
  42. 23
    0
      src/main.js
  43. 84
    0
      src/pages/CaiMinGuanLi/ShouYe/index.vue
  44. 90
    0
      src/pages/CaiMinGuanLi/ShouYe/page.scss
  45. 32
    0
      src/pages/CaiMinGuanLi/index.vue
  46. 3
    0
      src/pages/CaiMinGuanLi/page.scss
  47. 63
    0
      src/pages/SignIn/ShouYe/index.vue
  48. 12
    0
      src/pages/SignIn/ShouYe/page.scss
  49. 32
    0
      src/pages/SignIn/index.vue
  50. 3
    0
      src/pages/SignIn/page.scss
  51. 98
    0
      src/pages/WoDe/ShouYe/index.vue
  52. 132
    0
      src/pages/WoDe/ShouYe/page.scss
  53. 32
    0
      src/pages/WoDe/index.vue
  54. 3
    0
      src/pages/WoDe/page.scss
  55. 74
    0
      src/pages/index.vue
  56. 101
    0
      src/pages/index/ShouYe/index.vue
  57. 142
    0
      src/pages/index/ShouYe/page.scss
  58. 32
    0
      src/pages/index/index.vue
  59. 3
    0
      src/pages/index/page.scss
  60. 71
    0
      src/pages/page.scss
  61. 66
    0
      src/router/index.js
  62. 12
    0
      src/store/common/index.js
  63. 50
    0
      src/store/index.js
  64. 22
    0
      src/store/index/index.js
  65. 42
    0
      src/store/user/index.js
  66. 11
    0
      src/util/Api.js
  67. 99
    0
      src/util/PublicMethod.js
  68. 0
    0
      static/.gitkeep

+ 48
- 0
.babelrc Parādīt failu

@@ -0,0 +1,48 @@
1
+{
2
+  "presets": [
3
+    [
4
+      "env",
5
+      {
6
+        "modules": false,
7
+        "targets": {
8
+          "browsers": [
9
+            "> 1%",
10
+            "last 2 versions",
11
+            "not ie <= 8"
12
+          ]
13
+        }
14
+      }
15
+    ],
16
+    [
17
+      "es2015",
18
+      {
19
+        "modules": false
20
+      }
21
+    ],
22
+    "stage-2"
23
+  ],
24
+  "plugins": [
25
+    "transform-vue-jsx",
26
+    "transform-runtime",
27
+    [
28
+      "component",
29
+      {
30
+        "libraryName": "element-ui",
31
+        "styleLibraryName": "theme-chalk"
32
+      }
33
+    ]
34
+  ],
35
+  "env": {
36
+    "test": {
37
+      "presets": [
38
+        "env",
39
+        "stage-2"
40
+      ],
41
+      "plugins": [
42
+        "transform-vue-jsx",
43
+        "transform-es2015-modules-commonjs",
44
+        "dynamic-import-node"
45
+      ]
46
+    }
47
+  }
48
+}

+ 9
- 0
.editorconfig Parādīt failu

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

+ 5
- 0
.eslintignore Parādīt failu

@@ -0,0 +1,5 @@
1
+/build/
2
+/config/
3
+/dist/
4
+/*.js
5
+/test/unit/coverage/

+ 29
- 0
.eslintrc.js Parādīt failu

@@ -0,0 +1,29 @@
1
+// https://eslint.org/docs/user-guide/configuring
2
+
3
+module.exports = {
4
+  root: true,
5
+  parserOptions: {
6
+    parser: 'babel-eslint'
7
+  },
8
+  env: {
9
+    browser: true,
10
+  },
11
+  extends: [
12
+    // https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention
13
+    // consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules.
14
+    'plugin:vue/essential', 
15
+    // https://github.com/standard/standard/blob/master/docs/RULES-en.md
16
+    'standard'
17
+  ],
18
+  // required to lint *.vue files
19
+  plugins: [
20
+    'vue'
21
+  ],
22
+  // add your custom rules here
23
+  rules: {
24
+    // allow async-await
25
+    'generator-star-spacing': 'off',
26
+    // allow debugger during development
27
+    'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
28
+  }
29
+}

+ 17
- 0
.gitignore Parādīt failu

@@ -0,0 +1,17 @@
1
+.DS_Store
2
+node_modules/
3
+/dist/
4
+npm-debug.log*
5
+yarn-debug.log*
6
+yarn-error.log*
7
+/test/unit/coverage/
8
+/test/e2e/reports/
9
+selenium-debug.log
10
+
11
+# Editor directories and files
12
+.idea
13
+.vscode
14
+*.suo
15
+*.ntvs*
16
+*.njsproj
17
+*.sln

+ 10
- 0
.postcssrc.js Parādīt failu

@@ -0,0 +1,10 @@
1
+// https://github.com/michael-ciniawsky/postcss-load-config
2
+
3
+module.exports = {
4
+  "plugins": {
5
+    "postcss-import": {},
6
+    "postcss-url": {},
7
+    // to edit target browsers: use "browserslist" field in package.json
8
+    "autoprefixer": {}
9
+  }
10
+}

+ 30
- 0
README.md Parādīt failu

@@ -0,0 +1,30 @@
1
+# caipiao
2
+
3
+> A Vue.js project
4
+
5
+## Build Setup
6
+
7
+``` bash
8
+# install dependencies
9
+npm install
10
+
11
+# serve with hot reload at localhost:8080
12
+npm run dev
13
+
14
+# build for production with minification
15
+npm run build
16
+
17
+# build for production and view the bundle analyzer report
18
+npm run build --report
19
+
20
+# run unit tests
21
+npm run unit
22
+
23
+# run e2e tests
24
+npm run e2e
25
+
26
+# run all tests
27
+npm test
28
+```
29
+
30
+For a detailed explanation on how things work, check out the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader).

+ 41
- 0
build/build.js Parādīt failu

@@ -0,0 +1,41 @@
1
+'use strict'
2
+require('./check-versions')()
3
+
4
+process.env.NODE_ENV = 'production'
5
+
6
+const ora = require('ora')
7
+const rm = require('rimraf')
8
+const path = require('path')
9
+const chalk = require('chalk')
10
+const webpack = require('webpack')
11
+const config = require('../config')
12
+const webpackConfig = require('./webpack.prod.conf')
13
+
14
+const spinner = ora('building for production...')
15
+spinner.start()
16
+
17
+rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
18
+  if (err) throw err
19
+  webpack(webpackConfig, (err, stats) => {
20
+    spinner.stop()
21
+    if (err) throw err
22
+    process.stdout.write(stats.toString({
23
+      colors: true,
24
+      modules: false,
25
+      children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build.
26
+      chunks: false,
27
+      chunkModules: false
28
+    }) + '\n\n')
29
+
30
+    if (stats.hasErrors()) {
31
+      console.log(chalk.red('  Build failed with errors.\n'))
32
+      process.exit(1)
33
+    }
34
+
35
+    console.log(chalk.cyan('  Build complete.\n'))
36
+    console.log(chalk.yellow(
37
+      '  Tip: built files are meant to be served over an HTTP server.\n' +
38
+      '  Opening index.html over file:// won\'t work.\n'
39
+    ))
40
+  })
41
+})

+ 54
- 0
build/check-versions.js Parādīt failu

@@ -0,0 +1,54 @@
1
+'use strict'
2
+const chalk = require('chalk')
3
+const semver = require('semver')
4
+const packageConfig = require('../package.json')
5
+const shell = require('shelljs')
6
+
7
+function exec (cmd) {
8
+  return require('child_process').execSync(cmd).toString().trim()
9
+}
10
+
11
+const versionRequirements = [
12
+  {
13
+    name: 'node',
14
+    currentVersion: semver.clean(process.version),
15
+    versionRequirement: packageConfig.engines.node
16
+  }
17
+]
18
+
19
+if (shell.which('npm')) {
20
+  versionRequirements.push({
21
+    name: 'npm',
22
+    currentVersion: exec('npm --version'),
23
+    versionRequirement: packageConfig.engines.npm
24
+  })
25
+}
26
+
27
+module.exports = function () {
28
+  const warnings = []
29
+
30
+  for (let i = 0; i < versionRequirements.length; i++) {
31
+    const mod = versionRequirements[i]
32
+
33
+    if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
34
+      warnings.push(mod.name + ': ' +
35
+        chalk.red(mod.currentVersion) + ' should be ' +
36
+        chalk.green(mod.versionRequirement)
37
+      )
38
+    }
39
+  }
40
+
41
+  if (warnings.length) {
42
+    console.log('')
43
+    console.log(chalk.yellow('To use this template, you must update following to modules:'))
44
+    console.log()
45
+
46
+    for (let i = 0; i < warnings.length; i++) {
47
+      const warning = warnings[i]
48
+      console.log('  ' + warning)
49
+    }
50
+
51
+    console.log()
52
+    process.exit(1)
53
+  }
54
+}

+ 101
- 0
build/utils.js Parādīt failu

@@ -0,0 +1,101 @@
1
+'use strict'
2
+const path = require('path')
3
+const config = require('../config')
4
+const ExtractTextPlugin = require('extract-text-webpack-plugin')
5
+const packageConfig = require('../package.json')
6
+
7
+exports.assetsPath = function (_path) {
8
+  const assetsSubDirectory = process.env.NODE_ENV === 'production'
9
+    ? config.build.assetsSubDirectory
10
+    : config.dev.assetsSubDirectory
11
+
12
+  return path.posix.join(assetsSubDirectory, _path)
13
+}
14
+
15
+exports.cssLoaders = function (options) {
16
+  options = options || {}
17
+
18
+  const cssLoader = {
19
+    loader: 'css-loader',
20
+    options: {
21
+      sourceMap: options.sourceMap
22
+    }
23
+  }
24
+
25
+  const postcssLoader = {
26
+    loader: 'postcss-loader',
27
+    options: {
28
+      sourceMap: options.sourceMap
29
+    }
30
+  }
31
+
32
+  // generate loader string to be used with extract text plugin
33
+  function generateLoaders (loader, loaderOptions) {
34
+    const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader]
35
+
36
+    if (loader) {
37
+      loaders.push({
38
+        loader: loader + '-loader',
39
+        options: Object.assign({}, loaderOptions, {
40
+          sourceMap: options.sourceMap
41
+        })
42
+      })
43
+    }
44
+
45
+    // Extract CSS when that option is specified
46
+    // (which is the case during production build)
47
+    if (options.extract) {
48
+      return ExtractTextPlugin.extract({
49
+        use: loaders,
50
+        fallback: 'vue-style-loader'
51
+      })
52
+    } else {
53
+      return ['vue-style-loader'].concat(loaders)
54
+    }
55
+  }
56
+
57
+  // https://vue-loader.vuejs.org/en/configurations/extract-css.html
58
+  return {
59
+    css: generateLoaders(),
60
+    postcss: generateLoaders(),
61
+    less: generateLoaders('less'),
62
+    sass: generateLoaders('sass', { indentedSyntax: true }),
63
+    scss: generateLoaders('sass'),
64
+    stylus: generateLoaders('stylus'),
65
+    styl: generateLoaders('stylus')
66
+  }
67
+}
68
+
69
+// Generate loaders for standalone style files (outside of .vue)
70
+exports.styleLoaders = function (options) {
71
+  const output = []
72
+  const loaders = exports.cssLoaders(options)
73
+
74
+  for (const extension in loaders) {
75
+    const loader = loaders[extension]
76
+    output.push({
77
+      test: new RegExp('\\.' + extension + '$'),
78
+      use: loader
79
+    })
80
+  }
81
+
82
+  return output
83
+}
84
+
85
+exports.createNotifierCallback = () => {
86
+  const notifier = require('node-notifier')
87
+
88
+  return (severity, errors) => {
89
+    if (severity !== 'error') return
90
+
91
+    const error = errors[0]
92
+    const filename = error.file && error.file.split('!').pop()
93
+
94
+    notifier.notify({
95
+      title: packageConfig.name,
96
+      message: severity + ': ' + error.name,
97
+      subtitle: filename || '',
98
+      icon: path.join(__dirname, 'logo.png')
99
+    })
100
+  }
101
+}

+ 22
- 0
build/vue-loader.conf.js Parādīt failu

@@ -0,0 +1,22 @@
1
+'use strict'
2
+const utils = require('./utils')
3
+const config = require('../config')
4
+const isProduction = process.env.NODE_ENV === 'production'
5
+const sourceMapEnabled = isProduction
6
+  ? config.build.productionSourceMap
7
+  : config.dev.cssSourceMap
8
+
9
+module.exports = {
10
+  loaders: utils.cssLoaders({
11
+    sourceMap: sourceMapEnabled,
12
+    extract: isProduction
13
+  }),
14
+  cssSourceMap: sourceMapEnabled,
15
+  cacheBusting: config.dev.cacheBusting,
16
+  transformToRequire: {
17
+    video: ['src', 'poster'],
18
+    source: 'src',
19
+    img: 'src',
20
+    image: 'xlink:href'
21
+  }
22
+}

+ 92
- 0
build/webpack.base.conf.js Parādīt failu

@@ -0,0 +1,92 @@
1
+'use strict'
2
+const path = require('path')
3
+const utils = require('./utils')
4
+const config = require('../config')
5
+const vueLoaderConfig = require('./vue-loader.conf')
6
+
7
+function resolve (dir) {
8
+  return path.join(__dirname, '..', dir)
9
+}
10
+
11
+const createLintingRule = () => ({
12
+  test: /\.(js|vue)$/,
13
+  loader: 'eslint-loader',
14
+  enforce: 'pre',
15
+  include: [resolve('src'), resolve('test')],
16
+  options: {
17
+    formatter: require('eslint-friendly-formatter'),
18
+    emitWarning: !config.dev.showEslintErrorsInOverlay
19
+  }
20
+})
21
+
22
+module.exports = {
23
+  context: path.resolve(__dirname, '../'),
24
+  entry: {
25
+    app: './src/main.js'
26
+  },
27
+  output: {
28
+    path: config.build.assetsRoot,
29
+    filename: '[name].js',
30
+    publicPath: process.env.NODE_ENV === 'production'
31
+      ? config.build.assetsPublicPath
32
+      : config.dev.assetsPublicPath
33
+  },
34
+  resolve: {
35
+    extensions: ['.js', '.vue', '.json'],
36
+    alias: {
37
+      'vue$': 'vue/dist/vue.esm.js',
38
+      '@': resolve('src'),
39
+    }
40
+  },
41
+  module: {
42
+    rules: [
43
+      ...(config.dev.useEslint ? [createLintingRule()] : []),
44
+      {
45
+        test: /\.vue$/,
46
+        loader: 'vue-loader',
47
+        options: vueLoaderConfig
48
+      },
49
+      {
50
+        test: /\.js$/,
51
+        loader: 'babel-loader',
52
+        include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]
53
+      },
54
+      {
55
+        test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
56
+        loader: 'url-loader',
57
+        options: {
58
+          limit: 10000,
59
+          name: utils.assetsPath('img/[name].[hash:7].[ext]')
60
+        }
61
+      },
62
+      {
63
+        test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
64
+        loader: 'url-loader',
65
+        options: {
66
+          limit: 10000,
67
+          name: utils.assetsPath('media/[name].[hash:7].[ext]')
68
+        }
69
+      },
70
+      {
71
+        test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
72
+        loader: 'url-loader',
73
+        options: {
74
+          limit: 10000,
75
+          name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
76
+        }
77
+      }
78
+    ]
79
+  },
80
+  node: {
81
+    // prevent webpack from injecting useless setImmediate polyfill because Vue
82
+    // source contains it (although only uses it if it's native).
83
+    setImmediate: false,
84
+    // prevent webpack from injecting mocks to Node native modules
85
+    // that does not make sense for the client
86
+    dgram: 'empty',
87
+    fs: 'empty',
88
+    net: 'empty',
89
+    tls: 'empty',
90
+    child_process: 'empty'
91
+  }
92
+}

+ 95
- 0
build/webpack.dev.conf.js Parādīt failu

@@ -0,0 +1,95 @@
1
+'use strict'
2
+const utils = require('./utils')
3
+const webpack = require('webpack')
4
+const config = require('../config')
5
+const merge = require('webpack-merge')
6
+const path = require('path')
7
+const baseWebpackConfig = require('./webpack.base.conf')
8
+const CopyWebpackPlugin = require('copy-webpack-plugin')
9
+const HtmlWebpackPlugin = require('html-webpack-plugin')
10
+const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
11
+const portfinder = require('portfinder')
12
+
13
+const HOST = process.env.HOST
14
+const PORT = process.env.PORT && Number(process.env.PORT)
15
+
16
+const devWebpackConfig = merge(baseWebpackConfig, {
17
+  module: {
18
+    rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true })
19
+  },
20
+  // cheap-module-eval-source-map is faster for development
21
+  devtool: config.dev.devtool,
22
+
23
+  // these devServer options should be customized in /config/index.js
24
+  devServer: {
25
+    clientLogLevel: 'warning',
26
+    historyApiFallback: {
27
+      rewrites: [
28
+        { from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') },
29
+      ],
30
+    },
31
+    hot: true,
32
+    contentBase: false, // since we use CopyWebpackPlugin.
33
+    compress: true,
34
+    host: HOST || config.dev.host,
35
+    port: PORT || config.dev.port,
36
+    open: config.dev.autoOpenBrowser,
37
+    overlay: config.dev.errorOverlay
38
+      ? { warnings: false, errors: true }
39
+      : false,
40
+    publicPath: config.dev.assetsPublicPath,
41
+    proxy: config.dev.proxyTable,
42
+    quiet: true, // necessary for FriendlyErrorsPlugin
43
+    watchOptions: {
44
+      poll: config.dev.poll,
45
+    }
46
+  },
47
+  plugins: [
48
+    new webpack.DefinePlugin({
49
+      'process.env': require('../config/dev.env')
50
+    }),
51
+    new webpack.HotModuleReplacementPlugin(),
52
+    new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update.
53
+    new webpack.NoEmitOnErrorsPlugin(),
54
+    // https://github.com/ampedandwired/html-webpack-plugin
55
+    new HtmlWebpackPlugin({
56
+      filename: 'index.html',
57
+      template: 'index.html',
58
+      inject: true
59
+    }),
60
+    // copy custom static assets
61
+    new CopyWebpackPlugin([
62
+      {
63
+        from: path.resolve(__dirname, '../static'),
64
+        to: config.dev.assetsSubDirectory,
65
+        ignore: ['.*']
66
+      }
67
+    ])
68
+  ]
69
+})
70
+
71
+module.exports = new Promise((resolve, reject) => {
72
+  portfinder.basePort = process.env.PORT || config.dev.port
73
+  portfinder.getPort((err, port) => {
74
+    if (err) {
75
+      reject(err)
76
+    } else {
77
+      // publish the new Port, necessary for e2e tests
78
+      process.env.PORT = port
79
+      // add port to devServer config
80
+      devWebpackConfig.devServer.port = port
81
+
82
+      // Add FriendlyErrorsPlugin
83
+      devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({
84
+        compilationSuccessInfo: {
85
+          messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`],
86
+        },
87
+        onErrors: config.dev.notifyOnErrors
88
+        ? utils.createNotifierCallback()
89
+        : undefined
90
+      }))
91
+
92
+      resolve(devWebpackConfig)
93
+    }
94
+  })
95
+})

+ 149
- 0
build/webpack.prod.conf.js Parādīt failu

@@ -0,0 +1,149 @@
1
+'use strict'
2
+const path = require('path')
3
+const utils = require('./utils')
4
+const webpack = require('webpack')
5
+const config = require('../config')
6
+const merge = require('webpack-merge')
7
+const baseWebpackConfig = require('./webpack.base.conf')
8
+const CopyWebpackPlugin = require('copy-webpack-plugin')
9
+const HtmlWebpackPlugin = require('html-webpack-plugin')
10
+const ExtractTextPlugin = require('extract-text-webpack-plugin')
11
+const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')
12
+const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
13
+
14
+const env = process.env.NODE_ENV === 'testing'
15
+  ? require('../config/test.env')
16
+  : require('../config/prod.env')
17
+
18
+const webpackConfig = merge(baseWebpackConfig, {
19
+  module: {
20
+    rules: utils.styleLoaders({
21
+      sourceMap: config.build.productionSourceMap,
22
+      extract: true,
23
+      usePostCSS: true
24
+    })
25
+  },
26
+  devtool: config.build.productionSourceMap ? config.build.devtool : false,
27
+  output: {
28
+    path: config.build.assetsRoot,
29
+    filename: utils.assetsPath('js/[name].[chunkhash].js'),
30
+    chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')
31
+  },
32
+  plugins: [
33
+    // http://vuejs.github.io/vue-loader/en/workflow/production.html
34
+    new webpack.DefinePlugin({
35
+      'process.env': env
36
+    }),
37
+    new UglifyJsPlugin({
38
+      uglifyOptions: {
39
+        compress: {
40
+          warnings: false
41
+        }
42
+      },
43
+      sourceMap: config.build.productionSourceMap,
44
+      parallel: true
45
+    }),
46
+    // extract css into its own file
47
+    new ExtractTextPlugin({
48
+      filename: utils.assetsPath('css/[name].[contenthash].css'),
49
+      // Setting the following option to `false` will not extract CSS from codesplit chunks.
50
+      // Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack.
51
+      // It's currently set to `true` because we are seeing that sourcemaps are included in the codesplit bundle as well when it's `false`, 
52
+      // increasing file size: https://github.com/vuejs-templates/webpack/issues/1110
53
+      allChunks: true,
54
+    }),
55
+    // Compress extracted CSS. We are using this plugin so that possible
56
+    // duplicated CSS from different components can be deduped.
57
+    new OptimizeCSSPlugin({
58
+      cssProcessorOptions: config.build.productionSourceMap
59
+        ? { safe: true, map: { inline: false } }
60
+        : { safe: true }
61
+    }),
62
+    // generate dist index.html with correct asset hash for caching.
63
+    // you can customize output by editing /index.html
64
+    // see https://github.com/ampedandwired/html-webpack-plugin
65
+    new HtmlWebpackPlugin({
66
+      filename: process.env.NODE_ENV === 'testing'
67
+        ? 'index.html'
68
+        : config.build.index,
69
+      template: 'index.html',
70
+      inject: true,
71
+      minify: {
72
+        removeComments: true,
73
+        collapseWhitespace: true,
74
+        removeAttributeQuotes: true
75
+        // more options:
76
+        // https://github.com/kangax/html-minifier#options-quick-reference
77
+      },
78
+      // necessary to consistently work with multiple chunks via CommonsChunkPlugin
79
+      chunksSortMode: 'dependency'
80
+    }),
81
+    // keep module.id stable when vendor modules does not change
82
+    new webpack.HashedModuleIdsPlugin(),
83
+    // enable scope hoisting
84
+    new webpack.optimize.ModuleConcatenationPlugin(),
85
+    // split vendor js into its own file
86
+    new webpack.optimize.CommonsChunkPlugin({
87
+      name: 'vendor',
88
+      minChunks (module) {
89
+        // any required modules inside node_modules are extracted to vendor
90
+        return (
91
+          module.resource &&
92
+          /\.js$/.test(module.resource) &&
93
+          module.resource.indexOf(
94
+            path.join(__dirname, '../node_modules')
95
+          ) === 0
96
+        )
97
+      }
98
+    }),
99
+    // extract webpack runtime and module manifest to its own file in order to
100
+    // prevent vendor hash from being updated whenever app bundle is updated
101
+    new webpack.optimize.CommonsChunkPlugin({
102
+      name: 'manifest',
103
+      minChunks: Infinity
104
+    }),
105
+    // This instance extracts shared chunks from code splitted chunks and bundles them
106
+    // in a separate chunk, similar to the vendor chunk
107
+    // see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk
108
+    new webpack.optimize.CommonsChunkPlugin({
109
+      name: 'app',
110
+      async: 'vendor-async',
111
+      children: true,
112
+      minChunks: 3
113
+    }),
114
+
115
+    // copy custom static assets
116
+    new CopyWebpackPlugin([
117
+      {
118
+        from: path.resolve(__dirname, '../static'),
119
+        to: config.build.assetsSubDirectory,
120
+        ignore: ['.*']
121
+      }
122
+    ])
123
+  ]
124
+})
125
+
126
+if (config.build.productionGzip) {
127
+  const CompressionWebpackPlugin = require('compression-webpack-plugin')
128
+
129
+  webpackConfig.plugins.push(
130
+    new CompressionWebpackPlugin({
131
+      asset: '[path].gz[query]',
132
+      algorithm: 'gzip',
133
+      test: new RegExp(
134
+        '\\.(' +
135
+        config.build.productionGzipExtensions.join('|') +
136
+        ')$'
137
+      ),
138
+      threshold: 10240,
139
+      minRatio: 0.8
140
+    })
141
+  )
142
+}
143
+
144
+if (config.build.bundleAnalyzerReport) {
145
+  const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
146
+  webpackConfig.plugins.push(new BundleAnalyzerPlugin())
147
+}
148
+
149
+module.exports = webpackConfig

+ 7
- 0
config/dev.env.js Parādīt failu

@@ -0,0 +1,7 @@
1
+'use strict'
2
+const merge = require('webpack-merge')
3
+const prodEnv = require('./prod.env')
4
+
5
+module.exports = merge(prodEnv, {
6
+  NODE_ENV: '"development"'
7
+})

+ 90
- 0
config/index.js Parādīt failu

@@ -0,0 +1,90 @@
1
+'use strict'
2
+// Template version: 1.3.1
3
+// see http://vuejs-templates.github.io/webpack for documentation.
4
+
5
+const path = require('path')
6
+
7
+module.exports = {
8
+  dev: {
9
+
10
+    // Paths
11
+    assetsSubDirectory: 'static',
12
+    assetsPublicPath: '/',
13
+    proxyTable: {
14
+      // '/api': {
15
+      //   target: 'http://114.67.101.226:8080',
16
+      //   changeOrigin: false, // 如果接口跨域,需要进行这个参数配置
17
+      //   pathRewrite: { '^/api': '' }
18
+      // },
19
+      // '/app-api': {
20
+      //   target: 'http://ycapi.jcjyhn.com',
21
+      //   changeOrigin: true, // 如果接口跨域,需要进行这个参数配置
22
+      // },
23
+      // '/app-api': {
24
+      //   target: 'http://101.132.102.231:8085',
25
+      //   changeOrigin: true, // 如果接口跨域,需要进行这个参数配置
26
+      // },
27
+    },
28
+
29
+    // Various Dev Server settings
30
+    host: '0.0.0.0', // can be overwritten by process.env.HOST
31
+    port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
32
+    autoOpenBrowser: false,
33
+    errorOverlay: true,
34
+    notifyOnErrors: true,
35
+    poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
36
+
37
+    // Use Eslint Loader?
38
+    // If true, your code will be linted during bundling and
39
+    // linting errors and warnings will be shown in the console.
40
+    useEslint: true,
41
+    // If true, eslint errors and warnings will also be shown in the error overlay
42
+    // in the browser.
43
+    showEslintErrorsInOverlay: false,
44
+
45
+    /**
46
+     * Source Maps
47
+     */
48
+
49
+    // https://webpack.js.org/configuration/devtool/#development
50
+    devtool: 'source-map',
51
+
52
+    // If you have problems debugging vue-files in devtools,
53
+    // set this to false - it *may* help
54
+    // https://vue-loader.vuejs.org/en/options.html#cachebusting
55
+    cacheBusting: true,
56
+
57
+    cssSourceMap: true
58
+  },
59
+
60
+  build: {
61
+    // Template for index.html
62
+    index: path.resolve(__dirname, '../dist/index.html'),
63
+
64
+    // Paths
65
+    assetsRoot: path.resolve(__dirname, '../dist'),
66
+    assetsSubDirectory: 'static',
67
+    assetsPublicPath: './',
68
+
69
+    /**
70
+     * Source Maps
71
+     */
72
+
73
+    productionSourceMap: true,
74
+    // https://webpack.js.org/configuration/devtool/#production
75
+    devtool: '#source-map',
76
+
77
+    // Gzip off by default as many popular static hosts such as
78
+    // Surge or Netlify already gzip all static assets for you.
79
+    // Before setting to `true`, make sure to:
80
+    // npm install --save-dev compression-webpack-plugin
81
+    productionGzip: false,
82
+    productionGzipExtensions: ['js', 'css'],
83
+
84
+    // Run the build command with an extra argument to
85
+    // View the bundle analyzer report after build finishes:
86
+    // `npm run build --report`
87
+    // Set to `true` or `false` to always turn it on or off
88
+    bundleAnalyzerReport: process.env.npm_config_report
89
+  }
90
+}

+ 4
- 0
config/prod.env.js Parādīt failu

@@ -0,0 +1,4 @@
1
+'use strict'
2
+module.exports = {
3
+  NODE_ENV: '"production"'
4
+}

+ 7
- 0
config/test.env.js Parādīt failu

@@ -0,0 +1,7 @@
1
+'use strict'
2
+const merge = require('webpack-merge')
3
+const devEnv = require('./dev.env')
4
+
5
+module.exports = merge(devEnv, {
6
+  NODE_ENV: '"testing"'
7
+})

+ 20
- 0
index.html Parādīt failu

@@ -0,0 +1,20 @@
1
+<!DOCTYPE html>
2
+<html>
3
+
4
+<head>
5
+  <meta charset='utf-8'>
6
+  <meta content='width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0' name='viewport'>
7
+  <meta name="referrer" content="no-referrer">
8
+  <link rel="stylesheet" href="//at.alicdn.com/t/font_2039339_sluz8v4akb.css">
9
+  <title>牛彩</title>
10
+  <script>
11
+    let Width = document.documentElement.clientWidth / 375 * 100
12
+    document.getElementsByTagName('html')[0].style.fontSize = Width + 'px'
13
+  </script>
14
+</head>
15
+
16
+<body>
17
+  <div id='app'></div>
18
+</body>
19
+
20
+</html>

+ 15832
- 0
package-lock.json
Failā izmaiņas netiks attēlotas, jo tās ir par lielu
Parādīt failu


+ 101
- 0
package.json Parādīt failu

@@ -0,0 +1,101 @@
1
+{
2
+  "name": "caipiao",
3
+  "version": "1.0.0",
4
+  "description": "A Vue.js project",
5
+  "author": "xuchengxiang <xcx18267901393@dingtalk.com>",
6
+  "private": true,
7
+  "scripts": {
8
+    "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
9
+    "start": "npm run dev",
10
+    "unit": "jest --config test/unit/jest.conf.js --coverage",
11
+    "e2e": "node test/e2e/runner.js",
12
+    "test": "npm run unit && npm run e2e",
13
+    "lint": "eslint --ext .js,.vue src test/unit test/e2e/specs",
14
+    "build": "node build/build.js"
15
+  },
16
+  "dependencies": {
17
+    "axios": "^0.18.0",
18
+    "exports-loader": "^0.7.0",
19
+    "js-md5": "^0.7.3",
20
+    "script-loader": "^0.7.2",
21
+    "vue": "^2.5.2",
22
+    "vue-amap": "^0.5.10",
23
+    "vue-awesome-swiper": "^3.1.3",
24
+    "vue-qr": "^1.5.2",
25
+    "vue-router": "^3.0.1",
26
+    "vue-scroller": "^2.2.4",
27
+    "vuex": "^3.0.1"
28
+  },
29
+  "devDependencies": {
30
+    "autoprefixer": "^7.1.2",
31
+    "babel-core": "^6.22.1",
32
+    "babel-eslint": "^8.2.1",
33
+    "babel-helper-vue-jsx-merge-props": "^2.0.3",
34
+    "babel-jest": "^21.0.2",
35
+    "babel-loader": "^7.1.1",
36
+    "babel-plugin-component": "^1.1.1",
37
+    "babel-plugin-dynamic-import-node": "^1.2.0",
38
+    "babel-plugin-syntax-jsx": "^6.18.0",
39
+    "babel-plugin-transform-es2015-modules-commonjs": "^6.26.0",
40
+    "babel-plugin-transform-runtime": "^6.22.0",
41
+    "babel-plugin-transform-vue-jsx": "^3.5.0",
42
+    "babel-preset-env": "^1.3.2",
43
+    "babel-preset-es2015": "^6.24.1",
44
+    "babel-preset-stage-2": "^6.22.0",
45
+    "babel-register": "^6.22.0",
46
+    "better-scroll": "^0.1.15",
47
+    "chalk": "^2.0.1",
48
+    "chromedriver": "^2.27.2",
49
+    "copy-webpack-plugin": "^4.0.1",
50
+    "cross-spawn": "^5.0.1",
51
+    "css-loader": "^0.28.0",
52
+    "eslint": "^4.15.0",
53
+    "eslint-config-standard": "^10.2.1",
54
+    "eslint-friendly-formatter": "^3.0.0",
55
+    "eslint-loader": "^1.7.1",
56
+    "eslint-plugin-import": "^2.7.0",
57
+    "eslint-plugin-node": "^5.2.0",
58
+    "eslint-plugin-promise": "^3.4.0",
59
+    "eslint-plugin-standard": "^3.0.1",
60
+    "eslint-plugin-vue": "^4.0.0",
61
+    "extract-text-webpack-plugin": "^3.0.0",
62
+    "file-loader": "^1.1.4",
63
+    "friendly-errors-webpack-plugin": "^1.6.1",
64
+    "html-webpack-plugin": "^2.30.1",
65
+    "jest": "^22.0.4",
66
+    "jest-serializer-vue": "^0.3.0",
67
+    "nightwatch": "^0.9.12",
68
+    "node-notifier": "^5.1.2",
69
+    "node-sass": "^4.14.1",
70
+    "optimize-css-assets-webpack-plugin": "^3.2.0",
71
+    "ora": "^1.2.0",
72
+    "portfinder": "^1.0.13",
73
+    "postcss-import": "^11.0.0",
74
+    "postcss-loader": "^2.0.8",
75
+    "postcss-url": "^7.2.1",
76
+    "rimraf": "^2.6.0",
77
+    "sass-loader": "^7.1.0",
78
+    "selenium-server": "^3.0.1",
79
+    "semver": "^5.3.0",
80
+    "shelljs": "^0.7.6",
81
+    "uglifyjs-webpack-plugin": "^1.1.1",
82
+    "url-loader": "^0.5.8",
83
+    "vue-jest": "^1.0.2",
84
+    "vue-loader": "^13.3.0",
85
+    "vue-style-loader": "^3.0.1",
86
+    "vue-template-compiler": "^2.5.2",
87
+    "webpack": "^3.6.0",
88
+    "webpack-bundle-analyzer": "^2.9.0",
89
+    "webpack-dev-server": "^2.9.1",
90
+    "webpack-merge": "^4.1.0"
91
+  },
92
+  "engines": {
93
+    "node": ">= 6.0.0",
94
+    "npm": ">= 3.0.0"
95
+  },
96
+  "browserslist": [
97
+    "> 1%",
98
+    "last 2 versions",
99
+    "not ie <= 8"
100
+  ]
101
+}

+ 20
- 0
src/App.vue Parādīt failu

@@ -0,0 +1,20 @@
1
+<template>
2
+  <div id="app">
3
+    <router-view></router-view>
4
+  </div>
5
+</template>
6
+
7
+<script>
8
+import './assets/css/reset.scss'
9
+export default {
10
+  name: 'App'
11
+}
12
+</script>
13
+
14
+<style>
15
+#app {
16
+  width: 100%;
17
+  height: 100%;
18
+  position: relative;
19
+}
20
+</style>

+ 155
- 0
src/assets/css/reset.scss Parādīt failu

@@ -0,0 +1,155 @@
1
+html,
2
+body {
3
+  width: 100%;
4
+  height: 100%;
5
+  margin: 0;
6
+  padding: 0;
7
+  position: relative;
8
+  overflow: hidden;
9
+  -webkit-touch-callout: none;
10
+  -webkit-text-size-adjust: 100%;
11
+  overflow-x: auto;
12
+
13
+  * {
14
+    margin: 0;
15
+    padding: 0;
16
+    font-family: "微软雅黑";
17
+    -webkit-tap-highlight-color: rgba(255, 0, 0, 0);
18
+    -webkit-font-smoothing: antialiased;
19
+    -moz-osx-font-smoothing: grayscale;
20
+    color: #333;
21
+    font-size: .13rem;
22
+  }
23
+
24
+  a {
25
+    text-decoration: none;
26
+  }
27
+
28
+  a:hover {
29
+    cursor: pointer;
30
+  }
31
+
32
+  em {
33
+    font-style: normal;
34
+  }
35
+
36
+  li {
37
+    list-style: none;
38
+  }
39
+
40
+  img {
41
+    border: 0;
42
+    vertical-align: middle;
43
+  }
44
+
45
+  table {
46
+    border-collapse: collapse;
47
+    border-spacing: 0;
48
+  }
49
+
50
+  p {
51
+    word-wrap: break-word;
52
+  }
53
+
54
+  input,
55
+  button,
56
+  a {
57
+    outline: 0 none !important;
58
+  }
59
+
60
+  input,
61
+  textarea {
62
+    border: 0;
63
+    -webkit-appearance: none;
64
+  }
65
+
66
+  input[type="input"] {
67
+    -webkit-appearance: none;
68
+  }
69
+
70
+  input[type="checkbox"] {
71
+    -webkit-appearance: checkbox;
72
+  }
73
+
74
+  input::-ms-clear {
75
+    display: none;
76
+  }
77
+
78
+  input::-webkit-search-cancel-button {
79
+    display: none;
80
+  }
81
+
82
+  input:focus,
83
+  textarea:focus,
84
+  select:focus {
85
+    outline: none;
86
+  }
87
+
88
+  textarea {
89
+    resize: none;
90
+  }
91
+
92
+  select {
93
+    direction: rtl;
94
+  }
95
+
96
+  select option {
97
+    direction: ltr;
98
+  }
99
+
100
+  .centerLabel {
101
+    display: block;
102
+    position: absolute;
103
+    left: 50%;
104
+    top: 50%;
105
+    transform: translate(-50%, -50%);
106
+    -webkit-transform: translate(-50%, -50%);
107
+  }
108
+
109
+  .flex-h {
110
+    display: flex;
111
+    display: -webkit-flex;
112
+  }
113
+
114
+  .flex-v {
115
+    display: flex;
116
+    display: -webkit-flex;
117
+    flex-direction: column;
118
+    -webkit-flex-direction: column;
119
+  }
120
+
121
+  .flex-item {
122
+    flex: 1;
123
+    -webkit-flex: 1;
124
+    position: relative;
125
+    overflow: hidden;
126
+  }
127
+
128
+  .text-line2 {
129
+    overflow: hidden;
130
+    text-overflow: ellipsis;
131
+    display: -webkit-box;
132
+    -webkit-box-orient: vertical;
133
+    -webkit-line-clamp: 2;
134
+  }
135
+
136
+  img.cover {
137
+    width: 100%;
138
+    height: 100%;
139
+    object-fit: cover;
140
+  }
141
+
142
+  img.contain {
143
+    width: 100%;
144
+    height: 100%;
145
+    object-fit: contain;
146
+  }
147
+
148
+  .MainPage,
149
+  .Page {
150
+    width: 100%;
151
+    height: 100%;
152
+    position: relative;
153
+    overflow: hidden;
154
+  }
155
+}

+ 49
- 0
src/components/ScrollY/index.vue Parādīt failu

@@ -0,0 +1,49 @@
1
+<template>
2
+  <div class="components demo">
3
+    <scroller :on-refresh="Refresh" :on-infinite="LoadMore">
4
+      <div v-for="item in 100" :key="item">{{item}}</div>
5
+    </scroller>
6
+  </div>
7
+</template>
8
+
9
+<script>
10
+/*
11
+  页面名称:
12
+*/
13
+export default {
14
+  name: 'demo',
15
+  props: ['data'],
16
+  data () {
17
+    return {
18
+    }
19
+  },
20
+  computed: {
21
+  },
22
+  components: {
23
+  },
24
+  created () {
25
+    // console.log(this.$route)
26
+  },
27
+  mounted () {
28
+    this.$nextTick(() => {
29
+    })
30
+  },
31
+  methods: {
32
+    Refresh (done) { // 页面下拉刷新
33
+      window.setTimeout(() => {
34
+        done()
35
+      }, 1000)
36
+    },
37
+    LoadMore (done) { // 页面上拉加载
38
+      window.setTimeout(() => {
39
+        done && done(true)
40
+      }, 1000)
41
+    }
42
+  }
43
+}
44
+</script>
45
+
46
+<!-- Add "scoped" attribute to limit CSS to this component only -->
47
+<style lang="scss" scoped>
48
+@import 'page.scss';
49
+</style>

+ 2
- 0
src/components/ScrollY/page.scss Parādīt failu

@@ -0,0 +1,2 @@
1
+.components {
2
+}

+ 90
- 0
src/components/common/TabSwiper/index.vue Parādīt failu

@@ -0,0 +1,90 @@
1
+<template>
2
+  <div class="components TabSwiper flex-v">
3
+    <!-- 导航 -->
4
+    <nav class="flex-h">
5
+      <a class="flex-item" v-for="(item, index) in List" :key="index" :class="{'active': NavActiveId === item.id}" @click="CutNav(item, index)">
6
+        <span>{{item.name}}</span>
7
+      </a>
8
+    </nav>
9
+
10
+    <!-- 内容 -->
11
+    <div class="flex-item">
12
+      <div>
13
+        <swiper :options="SwiperOptions" ref="MySwiper">
14
+          <swiper-slide v-for="(item, index) in List" :key="index">
15
+            <div class="SwiperItem">
16
+              <scroller :on-refresh="Refresh">
17
+                <div class="Container">
18
+                  <slot :name="`SwiperItem-${item.id}`"></slot>
19
+                </div>
20
+              </scroller>
21
+            </div>
22
+          </swiper-slide>
23
+        </swiper>
24
+      </div>
25
+    </div>
26
+  </div>
27
+</template>
28
+
29
+<script>
30
+/*
31
+  页面名称:
32
+*/
33
+import 'swiper/dist/css/swiper.css'
34
+import { swiper, swiperSlide } from 'vue-awesome-swiper'
35
+export default {
36
+  name: 'TabSwiper',
37
+  props: {
38
+    List: {
39
+      default: () => {
40
+        return []
41
+      },
42
+      type: Array
43
+    }
44
+  },
45
+  data () {
46
+    let _that = this
47
+    return {
48
+      NavActiveId: this.List.length ? this.List[0].id : null,
49
+      SwiperOptions: {
50
+        on: {
51
+          transitionEnd () {
52
+            _that.NavActiveId = _that.List[_that.MySwiper.activeIndex].id
53
+            _that.$emit('Change', _that.NavActiveId)
54
+          }
55
+        }
56
+      }
57
+    }
58
+  },
59
+  computed: {
60
+    MySwiper () {
61
+      return this.$refs.MySwiper.swiper
62
+    }
63
+  },
64
+  components: {
65
+    swiper,
66
+    swiperSlide
67
+  },
68
+  created () {
69
+  },
70
+  mounted () {
71
+    this.$nextTick(() => {
72
+    })
73
+  },
74
+  methods: {
75
+    CutNav (item, index) { // 切换nav
76
+      this.NavActiveId = item.id
77
+      this.MySwiper.slideTo(index, 0, false)
78
+      this.$emit('Change', this.NavActiveId)
79
+    },
80
+    Refresh (done) { // 页面下拉刷新
81
+      this.$emit('Refresh', { done, id: this.NavActiveId })
82
+    }
83
+  }
84
+}
85
+</script>
86
+
87
+<!-- Add "scoped" attribute to limit CSS to this component only -->
88
+<style lang="scss" scoped>
89
+@import "page.scss";
90
+</style>

+ 59
- 0
src/components/common/TabSwiper/page.scss Parādīt failu

@@ -0,0 +1,59 @@
1
+.components.TabSwiper {
2
+  width: 100%;
3
+  height: 100%;
4
+  > nav {
5
+    align-items: center;
6
+    border-bottom: 0.01rem solid #f7f7f7;
7
+    > a {
8
+      position: relative;
9
+      overflow: hidden;
10
+      text-align: center;
11
+      > span {
12
+        font-size: 0.14rem;
13
+        line-height: 0.4rem;
14
+        color: #666;
15
+        display: inline-block;
16
+        position: relative;
17
+      }
18
+      &.active {
19
+        > span {
20
+          color: #ff5200;
21
+          &::after {
22
+            content: "";
23
+            width: 100%;
24
+            height: 0.02rem;
25
+            background: #ff5200;
26
+            display: block;
27
+            position: absolute;
28
+            left: 50%;
29
+            transform: translateX(-50%);
30
+            -webkit-transform: translateX(-50%);
31
+            bottom: 0;
32
+          }
33
+        }
34
+      }
35
+    }
36
+  }
37
+  > .flex-item {
38
+    position: relative;
39
+    overflow: hidden;
40
+    > div {
41
+      width: 100%;
42
+      position: absolute;
43
+      left: 0;
44
+      top: 0;
45
+      bottom: 0;
46
+      overflow: hidden;
47
+      > div {
48
+        width: 100%;
49
+        height: 100%;
50
+        position: relative;
51
+        .SwiperItem {
52
+          width: 100%;
53
+          height: 100%;
54
+          position: relative;
55
+        }
56
+      }
57
+    }
58
+  }
59
+}

+ 37
- 0
src/components/demo copy 2/index.vue Parādīt failu

@@ -0,0 +1,37 @@
1
+<template>
2
+  <div class="components demo">
3
+    <router-link tag="a" :to="{name: 'test1'}">to test1</router-link>
4
+  </div>
5
+</template>
6
+
7
+<script>
8
+/*
9
+  页面名称:
10
+*/
11
+export default {
12
+  name: 'demo',
13
+  props: ['data'],
14
+  data () {
15
+    return {
16
+    }
17
+  },
18
+  computed: {
19
+  },
20
+  components: {
21
+  },
22
+  created () {
23
+    // console.log(this.$route)
24
+  },
25
+  mounted () {
26
+    this.$nextTick(() => {
27
+    })
28
+  },
29
+  methods: {
30
+  }
31
+}
32
+</script>
33
+
34
+<!-- Add "scoped" attribute to limit CSS to this component only -->
35
+<style lang="scss" scoped>
36
+@import 'page.scss';
37
+</style>

+ 2
- 0
src/components/demo copy 2/page.scss Parādīt failu

@@ -0,0 +1,2 @@
1
+.components {
2
+}

+ 79
- 0
src/components/index/Banner/index.vue Parādīt failu

@@ -0,0 +1,79 @@
1
+<template>
2
+  <div class="components Banner">
3
+    <swiper :options="SwiperOptions" ref="MySwiper">
4
+      <swiper-slide v-for="(item, index) in Banner" :key="index">
5
+        <div class="SwiperItem">
6
+          <img :src="item.img" class="centerLabel cover" alt="">
7
+        </div>
8
+      </swiper-slide>
9
+    </swiper>
10
+  </div>
11
+</template>
12
+
13
+<script>
14
+/*
15
+  页面名称:
16
+*/
17
+import 'swiper/dist/css/swiper.css'
18
+import { swiper, swiperSlide } from 'vue-awesome-swiper'
19
+import { createNamespacedHelpers } from 'vuex'
20
+const { mapState: mapIndexState } = createNamespacedHelpers('index')
21
+export default {
22
+  name: 'Banner',
23
+  props: {
24
+    List: { // 列表数据
25
+      default: () => {
26
+        return []
27
+      },
28
+      type: Array
29
+    }
30
+  },
31
+  data () {
32
+    return {
33
+      SwiperOptions: {
34
+        effect: 'coverflow',
35
+        autoplay: {
36
+          delay: 3000,
37
+          stopOnLastSlide: false,
38
+          disableOnInteraction: false
39
+        },
40
+        loop: true,
41
+        slidesPerView: 1.3,
42
+        centeredSlides: true,
43
+        coverflowEffect: {
44
+          rotate: 0,
45
+          stretch: -10,
46
+          depth: 0,
47
+          modifier: 2,
48
+          slideShadows: false
49
+        }
50
+      }
51
+    }
52
+  },
53
+  computed: {
54
+    ...mapIndexState({
55
+      Banner: x => x.Banner // banner列表
56
+    }),
57
+    MySwiper () {
58
+      return this.$refs.MySwiper.swiper
59
+    }
60
+  },
61
+  components: {
62
+    swiper,
63
+    swiperSlide
64
+  },
65
+  created () {
66
+  },
67
+  mounted () {
68
+    this.$nextTick(() => {
69
+    })
70
+  },
71
+  methods: {
72
+  }
73
+}
74
+</script>
75
+
76
+<!-- Add "scoped" attribute to limit CSS to this component only -->
77
+<style lang="scss" scoped>
78
+@import "page.scss";
79
+</style>

+ 20
- 0
src/components/index/Banner/page.scss Parādīt failu

@@ -0,0 +1,20 @@
1
+.components.Banner {
2
+  width: 100%;
3
+  height: 100%;
4
+  position: relative;
5
+  overflow: hidden;
6
+  > div {
7
+    width: 100%;
8
+    height: 100%;
9
+    position: relative;
10
+    overflow: hidden;
11
+    .SwiperItem {
12
+      width: 100%;
13
+      height: 100%;
14
+      position: relative;
15
+      overflow: hidden;
16
+      background: #f7f7f7;
17
+      border-radius: 0.1rem;
18
+    }
19
+  }
20
+}

+ 65
- 0
src/components/index/ZuQiuGuoGuanBanQuanChang/index.vue Parādīt failu

@@ -0,0 +1,65 @@
1
+<template>
2
+  <div class="components ZuQiuGuoGuanBanQuanChang">
3
+    <ul>
4
+      <li v-for="(item, index) in 5" :key="index">
5
+        <div class="Title flex-h">
6
+          <div class="flex-item">
7
+            <div>
8
+              <span>莫斯科火车头 VS 克拉斯诺达尔</span>
9
+            </div>
10
+          </div>
11
+          <span>瑞典超<em>21:58(截)</em></span>
12
+        </div>
13
+        <div class="Detail flex-h">
14
+          <span>001</span>
15
+          <div class="flex-item flex-h">
16
+            <div class="flex-item">
17
+              <div class="flex-h">
18
+                <a class="flex-item">胜1.41</a>
19
+                <a class="flex-item">平1.41</a>
20
+                <a class="flex-item">负1.41</a>
21
+              </div>
22
+              <div class="flex-h">
23
+                <a class="flex-item">胜1.41</a>
24
+                <a class="flex-item">平1.41</a>
25
+                <a class="flex-item">负1.41</a>
26
+              </div>
27
+            </div>
28
+          </div>
29
+        </div>
30
+      </li>
31
+    </ul>
32
+
33
+  </div>
34
+</template>
35
+
36
+<script>
37
+/*
38
+  页面名称:足球-过关-混合投注
39
+*/
40
+export default {
41
+  name: 'ZuQiuGuoGuanBanQuanChang',
42
+  props: ['data'],
43
+  data () {
44
+    return {
45
+    }
46
+  },
47
+  computed: {
48
+  },
49
+  components: {
50
+  },
51
+  created () {
52
+  },
53
+  mounted () {
54
+    this.$nextTick(() => {
55
+    })
56
+  },
57
+  methods: {
58
+  }
59
+}
60
+</script>
61
+
62
+<!-- Add "scoped" attribute to limit CSS to this component only -->
63
+<style lang="scss" scoped>
64
+@import "page.scss";
65
+</style>

+ 111
- 0
src/components/index/ZuQiuGuoGuanBanQuanChang/page.scss Parādīt failu

@@ -0,0 +1,111 @@
1
+.components.ZuQiuGuoGuanBanQuanChang {
2
+  padding: 0 0.15rem;
3
+  position: relative;
4
+  overflow: hidden;
5
+  > ul {
6
+    > li {
7
+      border-top: 0.01rem solid #f7f7f7;
8
+      padding: 0.15rem 0;
9
+      &:first-child {
10
+        border-top: none;
11
+      }
12
+      > .Title {
13
+        align-items: center;
14
+        > div {
15
+          position: relative;
16
+          overflow: hidden;
17
+          margin-left: 0.2rem;
18
+          > div {
19
+            width: 100%;
20
+            position: relative;
21
+            overflow: hidden;
22
+            > span {
23
+              font-size: 0.12rem;
24
+              color: #333;
25
+              line-height: 0.2rem;
26
+              display: block;
27
+              white-space: nowrap;
28
+              overflow: hidden;
29
+              text-overflow: ellipsis;
30
+            }
31
+          }
32
+        }
33
+        > span {
34
+          font-size: 0.1rem;
35
+          color: #999;
36
+          margin-left: 0.1rem;
37
+          > em {
38
+            font-size: 0.1rem;
39
+            color: #3f63e5;
40
+          }
41
+        }
42
+      }
43
+      > .Detail {
44
+        align-items: center;
45
+        margin-top: 0.05rem;
46
+        > span {
47
+          font-size: 0.1rem;
48
+          color: #999;
49
+          margin-right: 0.4rem;
50
+        }
51
+        > div.flex-item {
52
+          > div.flex-item {
53
+            position: relative;
54
+            overflow: hidden;
55
+            > div.flex-h {
56
+              margin-top: 0.05rem;
57
+              align-items: center;
58
+              &:first-child {
59
+                margin-top: 0;
60
+              }
61
+              > span {
62
+                font-size: 0.1rem;
63
+                width: 0.16rem;
64
+                line-height: 0.16rem;
65
+                text-align: center;
66
+                border: 0.01rem solid #999;
67
+                color: #999;
68
+                border-radius: 100%;
69
+                margin-right: 0.1rem;
70
+                &.Yellow {
71
+                  color: #fff;
72
+                  background: #ff5100;
73
+                  border-color: #ff5100;
74
+                }
75
+                &.Blue {
76
+                  color: #fff;
77
+                  background: #3f63e5;
78
+                  border-color: #3f63e5;
79
+                }
80
+              }
81
+              > a {
82
+                text-align: center;
83
+                border: 0.01rem solid #999;
84
+                margin-left: 0.05rem;
85
+                font-size: 0.13rem;
86
+                line-height: 0.22rem;
87
+                &.active {
88
+                  color: #fff;
89
+                  background: #ff5100;
90
+                  border-color: #ff5100;
91
+                }
92
+              }
93
+            }
94
+          }
95
+          > a {
96
+            font-size: 0.1rem;
97
+            color: #ff5100;
98
+            line-height: 0.2rem;
99
+            border: 0.01rem solid #999;
100
+            margin-left: 0.05rem;
101
+            position: relative;
102
+            overflow: hidden;
103
+            padding: 0 0.02rem;
104
+            padding-top: 0.04rem;
105
+            margin-right: 0.2rem;
106
+          }
107
+        }
108
+      }
109
+    }
110
+  }
111
+}

+ 99
- 0
src/components/index/ZuQiuGuoGuanBiFen/index.vue Parādīt failu

@@ -0,0 +1,99 @@
1
+<template>
2
+  <div class="components ZuQiuGuoGuanBiFen">
3
+    <ul>
4
+      <li v-for="(item, index) in 5" :key="index">
5
+        <div class="Title flex-h">
6
+          <div class="flex-item">
7
+            <div>
8
+              <span>莫斯科火车头 VS 克拉斯诺达尔</span>
9
+            </div>
10
+          </div>
11
+          <span>瑞典超<em>21:58(截)</em></span>
12
+        </div>
13
+        <div class="Detail flex-h">
14
+          <span>001</span>
15
+          <div class="flex-item flex-h">
16
+            <div class="flex-item">
17
+              <div>
18
+                <a @click="ShowMore = true">点击选择投注选项</a>
19
+                <span>2:1</span>
20
+                <span>2:1</span>
21
+                <span>2:1</span>
22
+                <span>2:1</span>
23
+              </div>
24
+            </div>
25
+          </div>
26
+        </div>
27
+      </li>
28
+    </ul>
29
+
30
+    <!-- 选项 -->
31
+    <div class="MoreTab" v-if="ShowMore">
32
+      <div>
33
+        <div>
34
+          <span>莫斯科火车头 VS 克拉斯诺达尔</span>
35
+          <nav class="flex-h">
36
+            <a class="flex-item" :class="{'active': NavActiveIndex === 0}" @click="NavActiveIndex = 0"><span>主胜</span></a>
37
+            <a class="flex-item" :class="{'active': NavActiveIndex === 1}" @click="NavActiveIndex = 1"><span>平</span></a>
38
+            <a class="flex-item" :class="{'active': NavActiveIndex === 2}" @click="NavActiveIndex = 2"><span>负</span></a>
39
+          </nav>
40
+          <div class="Content">
41
+            <div v-show="NavActiveIndex === 0">
42
+              <a v-for="(item, index) in 20" :key="index">2:1</a>
43
+              <a>全选</a>
44
+              <a>清除</a>
45
+            </div>
46
+            <div v-show="NavActiveIndex === 1">
47
+              <a v-for="(item, index) in 20" :key="index">2:1</a>
48
+              <a>全选</a>
49
+              <a>清除</a>
50
+            </div>
51
+            <div v-show="NavActiveIndex === 2">
52
+              <a v-for="(item, index) in 20" :key="index">2:1</a>
53
+              <a>全选</a>
54
+              <a>清除</a>
55
+            </div>
56
+          </div>
57
+          <div class="flex-h">
58
+            <a class="flex-item" @click="ShowMore = false">取消</a>
59
+            <a class="flex-item">确认</a>
60
+          </div>
61
+        </div>
62
+      </div>
63
+    </div>
64
+
65
+  </div>
66
+</template>
67
+
68
+<script>
69
+/*
70
+  页面名称:足球-过关-混合投注
71
+*/
72
+export default {
73
+  name: 'ZuQiuGuoGuanBiFen',
74
+  props: ['data'],
75
+  data () {
76
+    return {
77
+      ShowMore: false,
78
+      NavActiveIndex: 0
79
+    }
80
+  },
81
+  computed: {
82
+  },
83
+  components: {
84
+  },
85
+  created () {
86
+  },
87
+  mounted () {
88
+    this.$nextTick(() => {
89
+    })
90
+  },
91
+  methods: {
92
+  }
93
+}
94
+</script>
95
+
96
+<!-- Add "scoped" attribute to limit CSS to this component only -->
97
+<style lang="scss" scoped>
98
+@import "page.scss";
99
+</style>

+ 189
- 0
src/components/index/ZuQiuGuoGuanBiFen/page.scss Parādīt failu

@@ -0,0 +1,189 @@
1
+.components.ZuQiuGuoGuanBiFen {
2
+  padding: 0 0.15rem;
3
+  position: relative;
4
+  overflow: hidden;
5
+  > ul {
6
+    > li {
7
+      border-top: 0.01rem solid #f7f7f7;
8
+      padding: 0.15rem 0;
9
+      &:first-child {
10
+        border-top: none;
11
+      }
12
+      > .Title {
13
+        align-items: center;
14
+        > div {
15
+          position: relative;
16
+          overflow: hidden;
17
+          margin-left: 0.2rem;
18
+          > div {
19
+            width: 100%;
20
+            position: relative;
21
+            overflow: hidden;
22
+            > span {
23
+              font-size: 0.12rem;
24
+              color: #333;
25
+              line-height: 0.2rem;
26
+              display: block;
27
+              white-space: nowrap;
28
+              overflow: hidden;
29
+              text-overflow: ellipsis;
30
+            }
31
+          }
32
+        }
33
+        > span {
34
+          font-size: 0.1rem;
35
+          color: #999;
36
+          margin-left: 0.1rem;
37
+          > em {
38
+            font-size: 0.1rem;
39
+            color: #3f63e5;
40
+          }
41
+        }
42
+      }
43
+      > .Detail {
44
+        align-items: center;
45
+        margin-top: 0.1rem;
46
+        > span {
47
+          font-size: 0.1rem;
48
+          color: #999;
49
+          margin-right: 0.4rem;
50
+        }
51
+        > div.flex-item {
52
+          > div.flex-item {
53
+            position: relative;
54
+            overflow: hidden;
55
+            > div {
56
+              font-size: 0;
57
+              text-align: center;
58
+              > * {
59
+                display: inline-block;
60
+                vertical-align: middle;
61
+                margin-left: 0.1rem;
62
+                &:first-child {
63
+                  margin-left: 0;
64
+                }
65
+              }
66
+              > a {
67
+                font-size: 0.12rem;
68
+                line-height: 0.2rem;
69
+                padding: 0 0.1rem;
70
+                border: 0.01rem solid #ccc;
71
+              }
72
+              > span {
73
+                font-size: 0.12rem;
74
+                color: #ff5100;
75
+                line-height: 0.22rem;
76
+              }
77
+            }
78
+          }
79
+          > a {
80
+            font-size: 0.1rem;
81
+            color: #ff5100;
82
+            line-height: 0.2rem;
83
+            border: 0.01rem solid #999;
84
+            margin-left: 0.05rem;
85
+            position: relative;
86
+            overflow: hidden;
87
+            padding: 0 0.02rem;
88
+            padding-top: 0.04rem;
89
+            margin-right: 0.2rem;
90
+          }
91
+        }
92
+      }
93
+    }
94
+  }
95
+  > .MoreTab {
96
+    width: 100%;
97
+    position: fixed;
98
+    z-index: 10;
99
+    left: 0;
100
+    top: 0.7rem;
101
+    bottom: 0.4rem;
102
+    background: rgba(0, 0, 0, 0.7);
103
+    > div {
104
+      padding: 0.15rem;
105
+      position: relative;
106
+      overflow: hidden;
107
+      > div {
108
+        background: #fff;
109
+        border-radius: 0.06rem;
110
+        position: relative;
111
+        overflow: hidden;
112
+        > span {
113
+          display: block;
114
+          font-size: 0.14rem;
115
+          text-align: center;
116
+          line-height: 0.4rem;
117
+          border-bottom: 0.01rem solid #f7f7f7;
118
+        }
119
+        > nav {
120
+          align-items: center;
121
+          border-bottom: 0.01rem solid #f7f7f7;
122
+          > a {
123
+            text-align: center;
124
+            font-size: 0;
125
+            &.active {
126
+              > span {
127
+                color: #ff5100;
128
+                &::after {
129
+                  content: "";
130
+                  width: 100%;
131
+                  display: block;
132
+                  height: 0.02rem;
133
+                  background: #ff5100;
134
+                  position: absolute;
135
+                  left: 50%;
136
+                  transform: translateX(-50%);
137
+                  -webkit-transform: translateX(-50%);
138
+                  bottom: 0;
139
+                }
140
+              }
141
+            }
142
+            > span {
143
+              display: inline-block;
144
+              font-size: 0.12rem;
145
+              line-height: 0.3rem;
146
+              position: relative;
147
+              color: #333;
148
+              min-width: 0.3rem;
149
+            }
150
+          }
151
+        }
152
+        > .Content {
153
+          padding: 0.15rem;
154
+          position: relative;
155
+          overflow: hidden;
156
+          > div {
157
+            width: 100%;
158
+            position: relative;
159
+            overflow: hidden;
160
+            font-size: 0;
161
+            > a {
162
+              display: inline-block;
163
+              font-size: 0.12rem;
164
+              width: 0.7rem;
165
+              text-align: center;
166
+              border: 0.01rem solid #ccc;
167
+              margin-top: 0.05rem;
168
+              margin-left: 0.05rem;
169
+              line-height: 0.24rem;
170
+            }
171
+          }
172
+        }
173
+        > div.flex-h {
174
+          border-top: 0.01rem solid #f7f7f7;
175
+          margin-top: 0.1rem;
176
+          > a {
177
+            font-size: 0.14rem;
178
+            text-align: center;
179
+            line-height: 0.4rem;
180
+            border-left: 0.01rem solid #f7f7f7;
181
+            &:first-child {
182
+              border-left: none;
183
+            }
184
+          }
185
+        }
186
+      }
187
+    }
188
+  }
189
+}

+ 369
- 0
src/components/index/ZuQiuGuoGuanHunHeTouZhu/index.vue Parādīt failu

@@ -0,0 +1,369 @@
1
+<template>
2
+  <div class="components ZuQiuGuoGuanHunHeTouZhu">
3
+    <ul>
4
+      <li v-for="(item, index) in 5" :key="index">
5
+        <div class="Title flex-h">
6
+          <div class="flex-item">
7
+            <div>
8
+              <span>莫斯科火车头 VS 克拉斯诺达尔</span>
9
+            </div>
10
+          </div>
11
+          <span>瑞典超<em>21:58(截)</em></span>
12
+        </div>
13
+        <div class="Detail flex-h">
14
+          <span>001</span>
15
+          <div class="flex-item flex-h">
16
+            <div class="flex-item">
17
+              <div class="flex-h">
18
+                <span>0</span>
19
+                <a class="flex-item">胜1.41</a>
20
+                <a class="flex-item">平1.41</a>
21
+                <a class="flex-item">负1.41</a>
22
+              </div>
23
+              <div class="flex-h">
24
+                <span>+1</span>
25
+                <a class="flex-item">胜1.41</a>
26
+                <a class="flex-item">平1.41</a>
27
+                <a class="flex-item">负1.41</a>
28
+              </div>
29
+            </div>
30
+            <a @click="ShowMore = true">更多<br />选项</a>
31
+          </div>
32
+        </div>
33
+      </li>
34
+    </ul>
35
+
36
+    <!-- 更多选项 -->
37
+    <div class="MoreLayer" v-if="ShowMore">
38
+      <div>
39
+        <div>
40
+          <span>莫斯科火车头 VS 克拉斯诺达尔</span>
41
+          <ul>
42
+            <li>
43
+              <span>胜平负/让球</span>
44
+              <table>
45
+                <tr>
46
+                  <td><span>0</span></td>
47
+                  <td>
48
+                    <span>胜</span>
49
+                    <span>2.65</span>
50
+                  </td>
51
+                  <td>
52
+                    <span>平</span>
53
+                    <span>3.68</span>
54
+                  </td>
55
+                  <td>
56
+                    <span>负</span>
57
+                    <span>2.06</span>
58
+                  </td>
59
+                </tr>
60
+                <tr>
61
+                  <td><span>+1</span></td>
62
+                  <td>
63
+                    <span>胜</span>
64
+                    <span>1.56</span>
65
+                  </td>
66
+                  <td>
67
+                    <span>平</span>
68
+                    <span>4.10</span>
69
+                  </td>
70
+                  <td>
71
+                    <span>负</span>
72
+                    <span>3.95</span>
73
+                  </td>
74
+                </tr>
75
+              </table>
76
+            </li>
77
+
78
+            <li>
79
+              <span><em>单</em>比分</span>
80
+              <table>
81
+                <tr>
82
+                  <td rowspan="3">
83
+                    <span>主胜</span>
84
+                  </td>
85
+                  <td>
86
+                    <span>1:0</span>
87
+                    <span>13.00</span>
88
+                  </td>
89
+                  <td>
90
+                    <span>2:0</span>
91
+                    <span>17.00</span>
92
+                  </td>
93
+                  <td>
94
+                    <span>2:1</span>
95
+                    <span>8.75</span>
96
+                  </td>
97
+                  <td>
98
+                    <span>3:0</span>
99
+                    <span>30.00</span>
100
+                  </td>
101
+                  <td>
102
+                    <span>3:1</span>
103
+                    <span>19.00</span>
104
+                  </td>
105
+                </tr>
106
+                <tr>
107
+                  <td>
108
+                    <span>3:2</span>
109
+                    <span>20.00</span>
110
+                  </td>
111
+                  <td>
112
+                    <span>4:0</span>
113
+                    <span>80.00</span>
114
+                  </td>
115
+                  <td>
116
+                    <span>4:1</span>
117
+                    <span>42.00</span>
118
+                  </td>
119
+                  <td>
120
+                    <span>4:2</span>
121
+                    <span>50.00</span>
122
+                  </td>
123
+                  <td>
124
+                    <span>5:0</span>
125
+                    <span>200.00</span>
126
+                  </td>
127
+                </tr>
128
+                <tr>
129
+                  <td>
130
+                    <span>5:1</span>
131
+                    <span>125.00</span>
132
+                  </td>
133
+                  <td>
134
+                    <span>5:2</span>
135
+                    <span>150.00</span>
136
+                  </td>
137
+                  <td colspan="3">
138
+                    <span>胜其他</span>
139
+                    <span>42.00</span>
140
+                  </td>
141
+                </tr>
142
+                <tr>
143
+                  <td>
144
+                    <span>平</span>
145
+                  </td>
146
+                  <td>
147
+                    <span>0:0</span>
148
+                    <span>20.00</span>
149
+                  </td>
150
+                  <td>
151
+                    <span>1:1</span>
152
+                    <span>7.25</span>
153
+                  </td>
154
+                  <td>
155
+                    <span>2:2</span>
156
+                    <span>10.50</span>
157
+                  </td>
158
+                  <td>
159
+                    <span>3:3</span>
160
+                    <span>30.00</span>
161
+                  </td>
162
+                  <td>
163
+                    <span>平其他</span>
164
+                    <span>120.0</span>
165
+                  </td>
166
+                </tr>
167
+                <tr>
168
+                  <td rowspan="3">
169
+                    <span>主负</span>
170
+                  </td>
171
+                  <td>
172
+                    <span>0:1</span>
173
+                    <span>120.0</span>
174
+                  </td>
175
+                  <td>
176
+                    <span>0:2</span>
177
+                    <span>120.0</span>
178
+                  </td>
179
+                  <td>
180
+                    <span>0:3</span>
181
+                    <span>120.0</span>
182
+                  </td>
183
+                  <td>
184
+                    <span>0:4</span>
185
+                    <span>120.0</span>
186
+                  </td>
187
+                  <td>
188
+                    <span>0:5</span>
189
+                    <span>120.0</span>
190
+                  </td>
191
+                </tr>
192
+                <tr>
193
+                  <td>
194
+                    <span>1:2</span>
195
+                    <span>120.0</span>
196
+                  </td>
197
+                  <td>
198
+                    <span>1:3</span>
199
+                    <span>120.0</span>
200
+                  </td>
201
+                  <td>
202
+                    <span>1:4</span>
203
+                    <span>120.0</span>
204
+                  </td>
205
+                  <td>
206
+                    <span>1:5</span>
207
+                    <span>120.0</span>
208
+                  </td>
209
+                  <td>
210
+                    <span>2:3</span>
211
+                    <span>120.0</span>
212
+                  </td>
213
+                </tr>
214
+                <tr>
215
+                  <td>
216
+                    <span>2:4</span>
217
+                    <span>120.0</span>
218
+                  </td>
219
+                  <td>
220
+                    <span>2:5</span>
221
+                    <span>120.0</span>
222
+                  </td>
223
+                  <td colspan="3">
224
+                    <span>负其他</span>
225
+                    <span>120.0</span>
226
+                  </td>
227
+                </tr>
228
+              </table>
229
+            </li>
230
+
231
+            <li>
232
+              <span><em>单</em>进球数</span>
233
+              <table>
234
+                <tr>
235
+                  <td rowspan="2">
236
+                    <span>进球数</span>
237
+                  </td>
238
+                  <td>
239
+                    <span>0</span>
240
+                    <span>13.00</span>
241
+                  </td>
242
+                  <td>
243
+                    <span>1</span>
244
+                    <span>17.00</span>
245
+                  </td>
246
+                  <td>
247
+                    <span>2</span>
248
+                    <span>8.75</span>
249
+                  </td>
250
+                  <td>
251
+                    <span>3</span>
252
+                    <span>30.00</span>
253
+                  </td>
254
+                </tr>
255
+                <tr>
256
+                  <td>
257
+                    <span>4</span>
258
+                    <span>20.00</span>
259
+                  </td>
260
+                  <td>
261
+                    <span>5</span>
262
+                    <span>80.00</span>
263
+                  </td>
264
+                  <td>
265
+                    <span>6</span>
266
+                    <span>42.00</span>
267
+                  </td>
268
+                  <td>
269
+                    <span>7+</span>
270
+                    <span>50.00</span>
271
+                  </td>
272
+                </tr>
273
+              </table>
274
+            </li>
275
+
276
+            <li>
277
+              <span><em>单</em>半全场</span>
278
+              <table>
279
+                <tr>
280
+                  <td rowspan="3">
281
+                    <span>半全场</span>
282
+                  </td>
283
+                  <td>
284
+                    <span>胜-胜</span>
285
+                    <span>13.00</span>
286
+                  </td>
287
+                  <td>
288
+                    <span>胜-平</span>
289
+                    <span>17.00</span>
290
+                  </td>
291
+                  <td>
292
+                    <span>胜-负</span>
293
+                    <span>8.75</span>
294
+                  </td>
295
+                </tr>
296
+                <tr>
297
+                  <td>
298
+                    <span>平-胜</span>
299
+                    <span>20.00</span>
300
+                  </td>
301
+                  <td>
302
+                    <span>平-平</span>
303
+                    <span>80.00</span>
304
+                  </td>
305
+                  <td>
306
+                    <span>平-负</span>
307
+                    <span>42.00</span>
308
+                  </td>
309
+                </tr>
310
+                <tr>
311
+                  <td>
312
+                    <span>负-胜</span>
313
+                    <span>20.00</span>
314
+                  </td>
315
+                  <td>
316
+                    <span>负-平</span>
317
+                    <span>80.00</span>
318
+                  </td>
319
+                  <td>
320
+                    <span>负-负</span>
321
+                    <span>42.00</span>
322
+                  </td>
323
+                </tr>
324
+              </table>
325
+            </li>
326
+
327
+          </ul>
328
+          <div class="flex-h">
329
+            <a class="flex-item" @click="ShowMore = false">取消</a>
330
+            <a class="flex-item">确认</a>
331
+          </div>
332
+        </div>
333
+      </div>
334
+    </div>
335
+  </div>
336
+</template>
337
+
338
+<script>
339
+/*
340
+  页面名称:足球-过关-混合投注
341
+*/
342
+export default {
343
+  name: 'ZuQiuGuoGuanHunHeTouZhu',
344
+  props: ['data'],
345
+  data () {
346
+    return {
347
+      ShowMore: false
348
+    }
349
+  },
350
+  computed: {
351
+  },
352
+  components: {
353
+  },
354
+  created () {
355
+    // console.log(this.$route)
356
+  },
357
+  mounted () {
358
+    this.$nextTick(() => {
359
+    })
360
+  },
361
+  methods: {
362
+  }
363
+}
364
+</script>
365
+
366
+<!-- Add "scoped" attribute to limit CSS to this component only -->
367
+<style lang="scss" scoped>
368
+@import "page.scss";
369
+</style>

+ 203
- 0
src/components/index/ZuQiuGuoGuanHunHeTouZhu/page.scss Parādīt failu

@@ -0,0 +1,203 @@
1
+.components.ZuQiuGuoGuanHunHeTouZhu {
2
+  padding: 0 0.15rem;
3
+  position: relative;
4
+  overflow: hidden;
5
+  > ul {
6
+    > li {
7
+      border-top: 0.01rem solid #f7f7f7;
8
+      padding: 0.15rem 0;
9
+      &:first-child {
10
+        border-top: none;
11
+      }
12
+      > .Title {
13
+        align-items: center;
14
+        > div {
15
+          position: relative;
16
+          overflow: hidden;
17
+          margin-left: 0.2rem;
18
+          > div {
19
+            width: 100%;
20
+            position: relative;
21
+            overflow: hidden;
22
+            > span {
23
+              font-size: 0.12rem;
24
+              color: #333;
25
+              line-height: 0.2rem;
26
+              display: block;
27
+              white-space: nowrap;
28
+              overflow: hidden;
29
+              text-overflow: ellipsis;
30
+            }
31
+          }
32
+        }
33
+        > span {
34
+          font-size: 0.1rem;
35
+          color: #999;
36
+          margin-left: 0.1rem;
37
+          > em {
38
+            font-size: 0.1rem;
39
+            color: #3f63e5;
40
+          }
41
+        }
42
+      }
43
+      > .Detail {
44
+        align-items: center;
45
+        margin-top: 0.05rem;
46
+        > span {
47
+          font-size: 0.1rem;
48
+          color: #999;
49
+          margin-right: 0.4rem;
50
+        }
51
+        > div.flex-item {
52
+          > div.flex-item {
53
+            position: relative;
54
+            overflow: hidden;
55
+            > div.flex-h {
56
+              margin-top: 0.05rem;
57
+              align-items: center;
58
+              &:first-child {
59
+                margin-top: 0;
60
+              }
61
+              > span {
62
+                font-size: 0.1rem;
63
+                width: 0.16rem;
64
+                line-height: 0.16rem;
65
+                text-align: center;
66
+                border: 0.01rem solid #999;
67
+                color: #999;
68
+                border-radius: 100%;
69
+                margin-right: 0.1rem;
70
+                &.Yellow {
71
+                  color: #fff;
72
+                  background: #ff5100;
73
+                  border-color: #ff5100;
74
+                }
75
+                &.Blue {
76
+                  color: #fff;
77
+                  background: #3f63e5;
78
+                  border-color: #3f63e5;
79
+                }
80
+              }
81
+              > a {
82
+                text-align: center;
83
+                border: 0.01rem solid #999;
84
+                margin-left: 0.05rem;
85
+                font-size: 0.13rem;
86
+                line-height: 0.22rem;
87
+                &.active {
88
+                  color: #fff;
89
+                  background: #ff5100;
90
+                  border-color: #ff5100;
91
+                }
92
+              }
93
+            }
94
+          }
95
+          > a {
96
+            font-size: 0.1rem;
97
+            color: #ff5100;
98
+            line-height: 0.2rem;
99
+            border: 0.01rem solid #999;
100
+            margin-left: 0.05rem;
101
+            position: relative;
102
+            overflow: hidden;
103
+            padding: 0 0.02rem;
104
+            padding-top: 0.04rem;
105
+            margin-right: 0.2rem;
106
+          }
107
+        }
108
+      }
109
+    }
110
+  }
111
+  > .MoreLayer {
112
+    width: 100%;
113
+    position: fixed;
114
+    z-index: 10;
115
+    left: 0;
116
+    top: 0.7rem;
117
+    bottom: 0.4rem;
118
+    background: rgba(0, 0, 0, 0.7);
119
+    overflow-y: scroll;
120
+    -webkit-overflow-scrolling: touch;
121
+    > div {
122
+      padding: 0.15rem;
123
+      position: relative;
124
+      overflow: hidden;
125
+      > div {
126
+        background: #fff;
127
+        border-radius: 0.06rem;
128
+        position: relative;
129
+        overflow: hidden;
130
+        > span {
131
+          display: block;
132
+          font-size: 0.14rem;
133
+          text-align: center;
134
+          line-height: 0.4rem;
135
+          border-bottom: 0.01rem solid #f7f7f7;
136
+        }
137
+        > ul {
138
+          padding-bottom: 0.15rem;
139
+          > li {
140
+            margin-top: 0.1rem;
141
+            padding: 0 0.15rem;
142
+            > span {
143
+              font-size: 0.12rem;
144
+              line-height: 0.2rem;
145
+              color: #999;
146
+              display: block;
147
+              > em {
148
+                font-size: 0.12rem;
149
+                width: 0.16rem;
150
+                line-height: 0.16rem;
151
+                text-align: center;
152
+                background: #ff5100;
153
+                color: #fff;
154
+                margin-right: 0.05rem;
155
+                display: inline-block;
156
+              }
157
+            }
158
+            > table {
159
+              width: 100%;
160
+              box-sizing: border-box;
161
+              margin-top: 0.05rem;
162
+              border: 0.01rem solid #f7f7f7;
163
+              > tr {
164
+                > td {
165
+                  border: 0.01rem solid #f7f7f7;
166
+                  padding: 0.05rem 0;
167
+                  &.active {
168
+                    background: #ff5100;
169
+                    > span {
170
+                      color: #fff;
171
+                    }
172
+                  }
173
+                  > span {
174
+                    display: block;
175
+                    text-align: center;
176
+                    font-size: 0.12rem;
177
+                    line-height: 0.16rem;
178
+                    white-space: nowrap;
179
+                    overflow: hidden;
180
+                    text-overflow: ellipsis;
181
+                  }
182
+                }
183
+              }
184
+            }
185
+          }
186
+        }
187
+        > div {
188
+          border-top: 0.01rem solid #f7f7f7;
189
+          margin-top: 0.1rem;
190
+          > a {
191
+            font-size: 0.14rem;
192
+            text-align: center;
193
+            line-height: 0.4rem;
194
+            border-left: 0.01rem solid #f7f7f7;
195
+            &:first-child {
196
+              border-left: none;
197
+            }
198
+          }
199
+        }
200
+      }
201
+    }
202
+  }
203
+}

+ 65
- 0
src/components/index/ZuQiuGuoGuanShengPingFu/index.vue Parādīt failu

@@ -0,0 +1,65 @@
1
+<template>
2
+  <div class="components ZuQiuGuoGuanShengPingFu">
3
+    <ul>
4
+      <li v-for="(item, index) in 5" :key="index">
5
+        <div class="Title flex-h">
6
+          <div class="flex-item">
7
+            <div>
8
+              <span>莫斯科火车头 VS 克拉斯诺达尔</span>
9
+            </div>
10
+          </div>
11
+          <span>瑞典超<em>21:58(截)</em></span>
12
+        </div>
13
+        <div class="Detail flex-h">
14
+          <span>001</span>
15
+          <div class="flex-item flex-h">
16
+            <div class="flex-item">
17
+              <div class="flex-h">
18
+                <a class="flex-item">胜1.41</a>
19
+                <a class="flex-item">平1.41</a>
20
+                <a class="flex-item">负1.41</a>
21
+              </div>
22
+              <div class="flex-h">
23
+                <a class="flex-item">胜1.41</a>
24
+                <a class="flex-item">平1.41</a>
25
+                <a class="flex-item">负1.41</a>
26
+              </div>
27
+            </div>
28
+          </div>
29
+        </div>
30
+      </li>
31
+    </ul>
32
+
33
+  </div>
34
+</template>
35
+
36
+<script>
37
+/*
38
+  页面名称:足球-过关-混合投注
39
+*/
40
+export default {
41
+  name: 'ZuQiuGuoGuanShengPingFu',
42
+  props: ['data'],
43
+  data () {
44
+    return {
45
+    }
46
+  },
47
+  computed: {
48
+  },
49
+  components: {
50
+  },
51
+  created () {
52
+  },
53
+  mounted () {
54
+    this.$nextTick(() => {
55
+    })
56
+  },
57
+  methods: {
58
+  }
59
+}
60
+</script>
61
+
62
+<!-- Add "scoped" attribute to limit CSS to this component only -->
63
+<style lang="scss" scoped>
64
+@import "page.scss";
65
+</style>

+ 111
- 0
src/components/index/ZuQiuGuoGuanShengPingFu/page.scss Parādīt failu

@@ -0,0 +1,111 @@
1
+.components.ZuQiuGuoGuanShengPingFu {
2
+  padding: 0 0.15rem;
3
+  position: relative;
4
+  overflow: hidden;
5
+  > ul {
6
+    > li {
7
+      border-top: 0.01rem solid #f7f7f7;
8
+      padding: 0.15rem 0;
9
+      &:first-child {
10
+        border-top: none;
11
+      }
12
+      > .Title {
13
+        align-items: center;
14
+        > div {
15
+          position: relative;
16
+          overflow: hidden;
17
+          margin-left: 0.2rem;
18
+          > div {
19
+            width: 100%;
20
+            position: relative;
21
+            overflow: hidden;
22
+            > span {
23
+              font-size: 0.12rem;
24
+              color: #333;
25
+              line-height: 0.2rem;
26
+              display: block;
27
+              white-space: nowrap;
28
+              overflow: hidden;
29
+              text-overflow: ellipsis;
30
+            }
31
+          }
32
+        }
33
+        > span {
34
+          font-size: 0.1rem;
35
+          color: #999;
36
+          margin-left: 0.1rem;
37
+          > em {
38
+            font-size: 0.1rem;
39
+            color: #3f63e5;
40
+          }
41
+        }
42
+      }
43
+      > .Detail {
44
+        align-items: center;
45
+        margin-top: 0.05rem;
46
+        > span {
47
+          font-size: 0.1rem;
48
+          color: #999;
49
+          margin-right: 0.4rem;
50
+        }
51
+        > div.flex-item {
52
+          > div.flex-item {
53
+            position: relative;
54
+            overflow: hidden;
55
+            > div.flex-h {
56
+              margin-top: 0.05rem;
57
+              align-items: center;
58
+              &:first-child {
59
+                margin-top: 0;
60
+              }
61
+              > span {
62
+                font-size: 0.1rem;
63
+                width: 0.16rem;
64
+                line-height: 0.16rem;
65
+                text-align: center;
66
+                border: 0.01rem solid #999;
67
+                color: #999;
68
+                border-radius: 100%;
69
+                margin-right: 0.1rem;
70
+                &.Yellow {
71
+                  color: #fff;
72
+                  background: #ff5100;
73
+                  border-color: #ff5100;
74
+                }
75
+                &.Blue {
76
+                  color: #fff;
77
+                  background: #3f63e5;
78
+                  border-color: #3f63e5;
79
+                }
80
+              }
81
+              > a {
82
+                text-align: center;
83
+                border: 0.01rem solid #999;
84
+                margin-left: 0.05rem;
85
+                font-size: 0.13rem;
86
+                line-height: 0.22rem;
87
+                &.active {
88
+                  color: #fff;
89
+                  background: #ff5100;
90
+                  border-color: #ff5100;
91
+                }
92
+              }
93
+            }
94
+          }
95
+          > a {
96
+            font-size: 0.1rem;
97
+            color: #ff5100;
98
+            line-height: 0.2rem;
99
+            border: 0.01rem solid #999;
100
+            margin-left: 0.05rem;
101
+            position: relative;
102
+            overflow: hidden;
103
+            padding: 0 0.02rem;
104
+            padding-top: 0.04rem;
105
+            margin-right: 0.2rem;
106
+          }
107
+        }
108
+      }
109
+    }
110
+  }
111
+}

+ 37
- 0
src/components/index/demo copy 4/index.vue Parādīt failu

@@ -0,0 +1,37 @@
1
+<template>
2
+  <div class="components demo">
3
+    <router-link tag="a" :to="{name: 'test1'}">to test1</router-link>
4
+  </div>
5
+</template>
6
+
7
+<script>
8
+/*
9
+  页面名称:
10
+*/
11
+export default {
12
+  name: 'demo',
13
+  props: ['data'],
14
+  data () {
15
+    return {
16
+    }
17
+  },
18
+  computed: {
19
+  },
20
+  components: {
21
+  },
22
+  created () {
23
+    // console.log(this.$route)
24
+  },
25
+  mounted () {
26
+    this.$nextTick(() => {
27
+    })
28
+  },
29
+  methods: {
30
+  }
31
+}
32
+</script>
33
+
34
+<!-- Add "scoped" attribute to limit CSS to this component only -->
35
+<style lang="scss" scoped>
36
+@import 'page.scss';
37
+</style>

+ 2
- 0
src/components/index/demo copy 4/page.scss Parādīt failu

@@ -0,0 +1,2 @@
1
+.components {
2
+}

+ 23
- 0
src/main.js Parādīt failu

@@ -0,0 +1,23 @@
1
+// The Vue build version to load with the `import` command
2
+// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
3
+import Vue from 'vue'
4
+import App from './App'
5
+import router from './router'
6
+import store from './store'
7
+import ToolClass from './util/PublicMethod'
8
+import VueScroller from 'vue-scroller'
9
+
10
+Vue.use(VueScroller)
11
+
12
+Vue.prototype.ToolClass = ToolClass
13
+
14
+Vue.config.productionTip = false
15
+
16
+/* eslint-disable no-new */
17
+new Vue({
18
+  el: '#app',
19
+  router,
20
+  store,
21
+  components: { App },
22
+  template: '<App/>'
23
+})

+ 84
- 0
src/pages/CaiMinGuanLi/ShouYe/index.vue Parādīt failu

@@ -0,0 +1,84 @@
1
+<template>
2
+  <div class="Page flex-v">
3
+
4
+    <a class="flex-h">
5
+      <i class="iconfont iconyonghuguanli"></i>
6
+      <span class="flex-item">全部彩民</span>
7
+      <i class="iconfont iconjiantouright"></i>
8
+    </a>
9
+
10
+    <span>下单客户</span>
11
+
12
+    <!-- 内容 -->
13
+    <div class="flex-item">
14
+      <div>
15
+        <div class="Content">
16
+          <scroller :on-refresh="Refresh">
17
+            <div class="Container">
18
+              <ul>
19
+                <li v-for="(item, index) in 15" :key="index" class="flex-h">
20
+                  <div class="Icon">
21
+                    <img src="" class="centerLabel cover" alt="">
22
+                  </div>
23
+                  <div class="flex-item">
24
+                    <div>
25
+                      <span>叭叭叭</span>
26
+                      <span>2天前,下单2元未出票</span>
27
+                    </div>
28
+                  </div>
29
+                  <span>2.00</span>
30
+                </li>
31
+              </ul>
32
+            </div>
33
+          </scroller>
34
+        </div>
35
+      </div>
36
+    </div>
37
+  </div>
38
+</template>
39
+
40
+<script>
41
+import { mapMutations } from 'vuex'
42
+export default {
43
+  name: 'index',
44
+  data () {
45
+    return {
46
+    }
47
+  },
48
+  computed: {
49
+  },
50
+  components: {
51
+  },
52
+  created () {
53
+    this.EditMainData([ // 配置页面框架数据
54
+      { name: 'MainTitleClick', value: () => { } },
55
+      { name: 'MainHeaderTextColor', value: '#fff' },
56
+      { name: 'ShowMainTitleIcon', value: false },
57
+      { name: 'ShowMainHeader', value: true },
58
+      { name: 'ShowMainTabBar', value: true },
59
+      { name: 'MainHeaderTitle', value: '彩民管理' },
60
+      { name: 'MainTabBarActiveId', value: 2 },
61
+      { name: 'ShowMainHeaderBack', value: false }
62
+    ])
63
+  },
64
+  mounted () {
65
+    this.$nextTick(() => {
66
+    })
67
+  },
68
+  methods: {
69
+    ...mapMutations([
70
+      'EditMainData' // 配置页面框架数据
71
+    ]),
72
+    Refresh (done) { // 页面下拉刷新
73
+      window.setTimeout(() => {
74
+        done()
75
+      }, 1000)
76
+    }
77
+  }
78
+}
79
+</script>
80
+
81
+<!-- Add "scoped" attribute to limit CSS to this component only -->
82
+<style lang="scss" scoped>
83
+@import "page.scss";
84
+</style>

+ 90
- 0
src/pages/CaiMinGuanLi/ShouYe/page.scss Parādīt failu

@@ -0,0 +1,90 @@
1
+.Page {
2
+  background: #f2f2f2;
3
+  > a.flex-h {
4
+    align-items: center;
5
+    background: #fff;
6
+    padding: 0.1rem 0.15rem;
7
+    > i {
8
+      font-size: 0.2rem;
9
+      color: #999;
10
+      &:first-child {
11
+        width: 0.3rem;
12
+        line-height: 0.3rem;
13
+        text-align: center;
14
+        color: #fff;
15
+        background: #ff9c01;
16
+        border-radius: 0.02rem;
17
+      }
18
+    }
19
+    > span {
20
+      font-size: 0.15rem;
21
+      line-height: 0.3rem;
22
+      color: #333;
23
+      margin-left: 0.1rem;
24
+    }
25
+  }
26
+  > span {
27
+    display: block;
28
+    font-size: 0.15rem;
29
+    line-height: 0.4rem;
30
+    text-indent: 0.15rem;
31
+  }
32
+  > .flex-item {
33
+    position: relative;
34
+    > div {
35
+      width: 100%;
36
+      position: absolute;
37
+      left: 0;
38
+      top: 0;
39
+      bottom: 0;
40
+      > .Content {
41
+        width: 100%;
42
+        height: 100%;
43
+        position: relative;
44
+        overflow: hidden;
45
+        z-index: 2;
46
+        .Container {
47
+          position: relative;
48
+          > ul {
49
+            position: relative;
50
+            overflow: visible;
51
+            > li {
52
+              position: relative;
53
+              padding: 0.1rem 0.15rem;
54
+              background: #fff;
55
+              margin-bottom: 0.1rem;
56
+              align-items: center;
57
+              > .Icon {
58
+                width: 0.35rem;
59
+                height: 0.35rem;
60
+                position: relative;
61
+                overflow: hidden;
62
+                margin-right: 0.1rem;
63
+              }
64
+              > .flex-item {
65
+                position: relative;
66
+                > div {
67
+                  width: 100%;
68
+                  > span {
69
+                    display: block;
70
+                    font-size: 0.12rem;
71
+                    color: #999;
72
+                    line-height: 0.2rem;
73
+                    white-space: nowrap;
74
+                    &:first-child {
75
+                      font-size: 0.14rem;
76
+                      color: #333;
77
+                    }
78
+                  }
79
+                }
80
+              }
81
+              > span {
82
+                font-size: 0.16rem;
83
+              }
84
+            }
85
+          }
86
+        }
87
+      }
88
+    }
89
+  }
90
+}

+ 32
- 0
src/pages/CaiMinGuanLi/index.vue Parādīt failu

@@ -0,0 +1,32 @@
1
+<template>
2
+  <div class="Page">
3
+    <router-view></router-view>
4
+  </div>
5
+</template>
6
+
7
+<script>
8
+export default {
9
+  name: '',
10
+  data () {
11
+    return {
12
+    }
13
+  },
14
+  computed: {
15
+  },
16
+  components: {
17
+  },
18
+  created () {
19
+  },
20
+  mounted () {
21
+    this.$nextTick(() => {
22
+    })
23
+  },
24
+  methods: {
25
+  }
26
+}
27
+</script>
28
+
29
+<!-- Add "scoped" attribute to limit CSS to this component only -->
30
+<style lang="scss" scoped>
31
+@import "page.scss";
32
+</style>

+ 3
- 0
src/pages/CaiMinGuanLi/page.scss Parādīt failu

@@ -0,0 +1,3 @@
1
+.Page {
2
+  
3
+}

+ 63
- 0
src/pages/SignIn/ShouYe/index.vue Parādīt failu

@@ -0,0 +1,63 @@
1
+<template>
2
+  <div class="Page">
3
+
4
+    <!-- 背景 -->
5
+    <div class="Bg"></div>
6
+
7
+    <!-- 内容 -->
8
+    <div class="Content">
9
+      <scroller :on-refresh="Refresh" refreshLayerColor="#fff">
10
+        <div class="Container">
11
+
12
+        </div>
13
+      </scroller>
14
+    </div>
15
+
16
+  </div>
17
+</template>
18
+
19
+<script>
20
+import { mapMutations } from 'vuex'
21
+export default {
22
+  name: 'index',
23
+  data () {
24
+    return {
25
+    }
26
+  },
27
+  computed: {
28
+  },
29
+  components: {
30
+  },
31
+  created () {
32
+    this.EditMainData([ // 配置页面框架数据
33
+      { name: 'MainTitleClick', value: () => { } },
34
+      { name: 'MainHeaderTextColor', value: '#fff' },
35
+      { name: 'ShowMainTitleIcon', value: false },
36
+      { name: 'ShowMainHeader', value: true },
37
+      { name: 'ShowMainTabBar', value: true },
38
+      { name: 'MainHeaderTitle', value: '首页' },
39
+      { name: 'MainTabBarActiveId', value: 1 },
40
+      { name: 'ShowMainHeaderBack', value: false }
41
+    ])
42
+  },
43
+  mounted () {
44
+    this.$nextTick(() => {
45
+    })
46
+  },
47
+  methods: {
48
+    ...mapMutations([
49
+      'EditMainData' // 配置页面框架数据
50
+    ]),
51
+    Refresh (done) { // 页面下拉刷新
52
+      window.setTimeout(() => {
53
+        done()
54
+      }, 1000)
55
+    }
56
+  }
57
+}
58
+</script>
59
+
60
+<!-- Add "scoped" attribute to limit CSS to this component only -->
61
+<style lang="scss" scoped>
62
+@import "page.scss";
63
+</style>

+ 12
- 0
src/pages/SignIn/ShouYe/page.scss Parādīt failu

@@ -0,0 +1,12 @@
1
+.Page {
2
+  > .Content {
3
+    width: 100%;
4
+    height: 100%;
5
+    position: relative;
6
+    overflow: hidden;
7
+    z-index: 2;
8
+    .Container {
9
+      position: relative;
10
+    }
11
+  }
12
+}

+ 32
- 0
src/pages/SignIn/index.vue Parādīt failu

@@ -0,0 +1,32 @@
1
+<template>
2
+  <div class="Page">
3
+    <router-view></router-view>
4
+  </div>
5
+</template>
6
+
7
+<script>
8
+export default {
9
+  name: '',
10
+  data () {
11
+    return {
12
+    }
13
+  },
14
+  computed: {
15
+  },
16
+  components: {
17
+  },
18
+  created () {
19
+  },
20
+  mounted () {
21
+    this.$nextTick(() => {
22
+    })
23
+  },
24
+  methods: {
25
+  }
26
+}
27
+</script>
28
+
29
+<!-- Add "scoped" attribute to limit CSS to this component only -->
30
+<style lang="scss" scoped>
31
+@import "page.scss";
32
+</style>

+ 3
- 0
src/pages/SignIn/page.scss Parādīt failu

@@ -0,0 +1,3 @@
1
+.Page {
2
+  
3
+}

+ 98
- 0
src/pages/WoDe/ShouYe/index.vue Parādīt failu

@@ -0,0 +1,98 @@
1
+<template>
2
+  <div class="Page">
3
+
4
+    <!-- 顶部 -->
5
+    <div class="Top">
6
+      <div class="Title">
7
+        <span>个人中心</span>
8
+        <a class="iconfont iconshezhi"></a>
9
+      </div>
10
+      <div class="Info flex-h">
11
+        <div class="Icon">
12
+          <img src="" class="centerLabel cover" alt="">
13
+        </div>
14
+        <div class="flex-item flex-v">
15
+          <div class="flex-item flex-h">
16
+            <div class="flex-item">
17
+              <div>
18
+                <span>牛彩店铺 <em>(已认证)</em></span>
19
+              </div>
20
+            </div>
21
+            <span>营业额</span>
22
+            <em>6.20</em>
23
+            <i class="iconfont iconjiantouright"></i>
24
+          </div>
25
+          <div class="Desc">
26
+            <span>店铺营业时间为:9:00~21:00</span>
27
+            <span>休息时间不显示在购票选店列表内</span>
28
+          </div>
29
+        </div>
30
+      </div>
31
+    </div>
32
+
33
+    <!-- tab -->
34
+    <ul>
35
+      <li v-for="(item, index) in UserTab" :key="index" class="flex-h">
36
+        <div class="Icon">
37
+          <img :src="item.Icon" class="centerLabel contain" alt="">
38
+        </div>
39
+        <span class="flex-item">{{item.Name}}</span>
40
+        <i class="iconfont iconjiantouright"></i>
41
+      </li>
42
+    </ul>
43
+
44
+  </div>
45
+</template>
46
+
47
+<script>
48
+import { mapMutations } from 'vuex'
49
+export default {
50
+  name: 'index',
51
+  data () {
52
+    return {
53
+      UserTab: [
54
+        { Name: '出票管理', Icon: '', Router: '' },
55
+        { Name: '派奖管理', Icon: '', Router: '' },
56
+        { Name: '购彩订单', Icon: '', Router: '' },
57
+        { Name: '收款管理', Icon: '', Router: '' },
58
+        { Name: '彩种设置', Icon: '', Router: '' }
59
+      ]
60
+    }
61
+  },
62
+  computed: {
63
+  },
64
+  components: {
65
+  },
66
+  created () {
67
+    this.EditMainData([ // 配置页面框架数据
68
+      { name: 'MainTitleClick', value: () => { } },
69
+      { name: 'MainHeaderTextColor', value: '#fff' },
70
+      { name: 'ShowMainTitleIcon', value: false },
71
+      { name: 'ShowMainHeader', value: false },
72
+      { name: 'ShowMainTabBar', value: true },
73
+      { name: 'MainHeaderTitle', value: '个人中心' },
74
+      { name: 'MainTabBarActiveId', value: 3 },
75
+      { name: 'ShowMainHeaderBack', value: false }
76
+    ])
77
+  },
78
+  mounted () {
79
+    this.$nextTick(() => {
80
+    })
81
+  },
82
+  methods: {
83
+    ...mapMutations([
84
+      'EditMainData' // 配置页面框架数据
85
+    ]),
86
+    Refresh (done) { // 页面下拉刷新
87
+      window.setTimeout(() => {
88
+        done()
89
+      }, 1000)
90
+    }
91
+  }
92
+}
93
+</script>
94
+
95
+<!-- Add "scoped" attribute to limit CSS to this component only -->
96
+<style lang="scss" scoped>
97
+@import "page.scss";
98
+</style>

+ 132
- 0
src/pages/WoDe/ShouYe/page.scss Parādīt failu

@@ -0,0 +1,132 @@
1
+.Page {
2
+  width: 100%;
3
+  height: 100%;
4
+  position: relative;
5
+  overflow-y: scroll;
6
+  -webkit-overflow-scrolling: touch;
7
+  background: #f2f2f2;
8
+  > .Top {
9
+    width: 100%;
10
+    position: relative;
11
+    overflow: hidden;
12
+    padding-bottom: 41.5%;
13
+    background-image: linear-gradient(#f2372e, #fe6a3a);
14
+    > .Title {
15
+      width: 100%;
16
+      position: absolute;
17
+      left: 0;
18
+      top: 0;
19
+      > span {
20
+        display: block;
21
+        font-size: 0.16rem;
22
+        color: #fff;
23
+        text-align: center;
24
+        line-height: 0.4rem;
25
+        position: relative;
26
+        z-index: 1;
27
+      }
28
+      > a {
29
+        display: inline-block;
30
+        position: absolute;
31
+        right: 0.15rem;
32
+        top: 0.05rem;
33
+        font-size: 0.26rem;
34
+        color: #fff;
35
+        line-height: 0.3rem;
36
+      }
37
+    }
38
+    > .Info {
39
+      position: absolute;
40
+      left: 0;
41
+      width: 100%;
42
+      bottom: 0.2rem;
43
+      z-index: 2;
44
+      > .Icon {
45
+        width: 0.6rem;
46
+        height: 0.6rem;
47
+        border-radius: 100%;
48
+        position: relative;
49
+        overflow: hidden;
50
+        border-radius: 100%;
51
+        border: 0.01rem solid #fff;
52
+        margin-right: 0.1rem;
53
+        margin-left: 0.15rem;
54
+      }
55
+      > .flex-item {
56
+        > .flex-h {
57
+          align-items: center;
58
+          > .flex-item {
59
+            > div {
60
+              width: 100%;
61
+              > span {
62
+                display: block;
63
+                font-size: 0.16rem;
64
+                color: #fff;
65
+                line-height: 0.2rem;
66
+                > em {
67
+                  font-size: 0.12rem;
68
+                  color: #fff;
69
+                  line-height: 0.2rem;
70
+                }
71
+              }
72
+            }
73
+          }
74
+          > span {
75
+            font-size: 0.12rem;
76
+            color: #fff;
77
+            line-height: 0.2rem;
78
+          }
79
+          > em {
80
+            font-size: 0.12rem;
81
+            color: #fff;
82
+            line-height: 0.2rem;
83
+            font-weight: bold;
84
+            margin-left: 0.05rem;
85
+          }
86
+          > i {
87
+            font-size: 0.12rem;
88
+            color: #fff;
89
+            line-height: 0.2rem;
90
+            margin-right: 0.15rem;
91
+          }
92
+        }
93
+        > .Desc {
94
+          > span {
95
+            display: block;
96
+            font-size: 0.1rem;
97
+            white-space: nowrap;
98
+            line-height: 0.16rem;
99
+            color: #fff;
100
+          }
101
+        }
102
+      }
103
+    }
104
+  }
105
+  > ul {
106
+    > li {
107
+      background: #fff;
108
+      margin-top: 0.1rem;
109
+      padding: 0.15rem;
110
+      position: relative;
111
+      align-items: center;
112
+      &:first-child {
113
+        margin-top: 0;
114
+      }
115
+      > .Icon {
116
+        width: 0.2rem;
117
+        height: 0.2rem;
118
+        position: relative;
119
+        overflow: hidden;
120
+        margin-right: 0.1rem;
121
+      }
122
+      > span {
123
+        font-size: 0.16rem;
124
+        line-height: 0.2rem;
125
+      }
126
+      > i {
127
+        font-size: 0.2rem;
128
+        color: #dadada;
129
+      }
130
+    }
131
+  }
132
+}

+ 32
- 0
src/pages/WoDe/index.vue Parādīt failu

@@ -0,0 +1,32 @@
1
+<template>
2
+  <div class="Page">
3
+    <router-view></router-view>
4
+  </div>
5
+</template>
6
+
7
+<script>
8
+export default {
9
+  name: '',
10
+  data () {
11
+    return {
12
+    }
13
+  },
14
+  computed: {
15
+  },
16
+  components: {
17
+  },
18
+  created () {
19
+  },
20
+  mounted () {
21
+    this.$nextTick(() => {
22
+    })
23
+  },
24
+  methods: {
25
+  }
26
+}
27
+</script>
28
+
29
+<!-- Add "scoped" attribute to limit CSS to this component only -->
30
+<style lang="scss" scoped>
31
+@import "page.scss";
32
+</style>

+ 3
- 0
src/pages/WoDe/page.scss Parādīt failu

@@ -0,0 +1,3 @@
1
+.Page {
2
+  
3
+}

+ 74
- 0
src/pages/index.vue Parādīt failu

@@ -0,0 +1,74 @@
1
+<template>
2
+  <div class="MainPage flex-v">
3
+
4
+    <!-- 头部 -->
5
+    <div class="MainHeaderPadding" v-if="ShowMainHeader" :style="{height: `${MainPaddingTop}px`}"></div>
6
+    <div class="MainHeader flex-h" v-if="ShowMainHeader">
7
+      <a class="MainBack iconfont iconjiantouleft" v-if="ShowMainHeaderBack" @click="$router.back(-1)"></a>
8
+      <span class="MainTitle">
9
+        <span @click="MainTitleClick()">{{MainHeaderTitle}}</span>
10
+        <a class="iconfont iconjiantoudown" @click="MainTitleClick()" v-if="ShowMainTitleIcon"></a>
11
+      </span>
12
+    </div>
13
+
14
+    <!-- 内容 -->
15
+    <div class="MainBody flex-item">
16
+      <router-view></router-view>
17
+    </div>
18
+
19
+    <!-- tabbar -->
20
+    <div class="TabBar flex-h" :style="{paddingBottom: `${MainPaddingBottom}px`}" v-if="ShowMainTabBar">
21
+      <div class="flex-item" v-for="(item, index) in MainTabBar" :key="index">
22
+        <router-link :to="{name: item.router}" :class="{'active': item.id === MainTabBarActiveId}">
23
+          <i class="iconfont" :class="item.icon"></i>
24
+          <span>{{item.name}}</span>
25
+        </router-link>
26
+      </div>
27
+    </div>
28
+
29
+  </div>
30
+</template>
31
+
32
+<script>
33
+import { mapState, mapMutations } from 'vuex'
34
+export default {
35
+  name: '',
36
+  data () {
37
+    return {
38
+    }
39
+  },
40
+  computed: {
41
+    ...mapState({
42
+      MainTitleClick: x => x.MainTitleClick, // 页面标题点击事件
43
+      ShowMainTitleIcon: x => x.ShowMainTitleIcon, // 显隐页面标题箭头图标
44
+      ShowMainHeaderBack: x => x.ShowMainHeaderBack, // 显隐头部返回按钮
45
+      MainTabBar: x => x.MainTabBar, // tabbar列表
46
+      MainTabBarActiveId: x => x.MainTabBarActiveId, // tabbar索引值
47
+      ShowMainHeader: x => x.ShowMainHeader, // 显隐页面头部
48
+      ShowMainTabBar: x => x.ShowMainTabBar, // 显隐页面tabbar
49
+      MainPaddingTop: x => x.MainPaddingTop, // 页面padding-top(不与系统顶部时间栏重叠)
50
+      MainPaddingBottom: x => x.MainPaddingBottom, // 页面padding-bottom(不与系统底部返回栏重叠)
51
+      MainHeaderTitle: x => x.MainHeaderTitle // 页面title
52
+    })
53
+  },
54
+  components: {
55
+  },
56
+  created () {
57
+    this.EditMainData({ name: 'MainPaddingBottom', value: 10 })
58
+  },
59
+  mounted () {
60
+    this.$nextTick(() => {
61
+    })
62
+  },
63
+  methods: {
64
+    ...mapMutations([
65
+      'EditMainData'
66
+    ])
67
+  }
68
+}
69
+</script>
70
+
71
+<!-- Add "scoped" attribute to limit CSS to this component only -->
72
+<style lang="scss" scoped>
73
+@import "page.scss";
74
+</style>

+ 101
- 0
src/pages/index/ShouYe/index.vue Parādīt failu

@@ -0,0 +1,101 @@
1
+<template>
2
+  <div class="Page flex-v">
3
+
4
+    <a class="flex-h">
5
+      <i class="iconfont icontongzhi"></i>
6
+      <span class="flex-item">关于彩民端提示风险问题的通知</span>
7
+      <i class="iconfont iconguanbi"></i>
8
+    </a>
9
+
10
+    <!-- 内容 -->
11
+    <div class="flex-item">
12
+      <div>
13
+        <div class="Content">
14
+          <scroller :on-refresh="Refresh">
15
+            <div class="Container">
16
+              <ul>
17
+                <li v-for="(item, index) in 15" :key="index">
18
+                  <div class="Res">
19
+                    <div class="Num flex-h">
20
+                      <div class="Icon">
21
+                        <img src="" class="centerLabel contain" alt="">
22
+                      </div>
23
+                      <span>双色球</span>
24
+                      <div class="flex-item">
25
+                        <ul>
26
+                          <li>01</li>
27
+                          <li>01</li>
28
+                          <li>01</li>
29
+                          <li>01</li>
30
+                          <li>01</li>
31
+                          <li class="active">01</li>
32
+                          <li class="active">01</li>
33
+                        </ul>
34
+                      </div>
35
+                    </div>
36
+                    <div class="Count flex-h">
37
+                      <span class="flex-item"><em>1</em>注<em>1</em>倍<em>2.00</em>元</span>
38
+                      <span>第202076期</span>
39
+                      <span>2020-08-14 18:43:22</span>
40
+                    </div>
41
+                  </div>
42
+                  <div class="Time flex-h">
43
+                    <span class="flex-item">截止时间:04:49:26</span>
44
+                    <a>查看详情</a>
45
+                  </div>
46
+                </li>
47
+              </ul>
48
+            </div>
49
+          </scroller>
50
+        </div>
51
+      </div>
52
+    </div>
53
+
54
+  </div>
55
+</template>
56
+
57
+<script>
58
+import { mapMutations } from 'vuex'
59
+export default {
60
+  name: 'index',
61
+  data () {
62
+    return {
63
+    }
64
+  },
65
+  computed: {
66
+  },
67
+  components: {
68
+  },
69
+  created () {
70
+    this.EditMainData([ // 配置页面框架数据
71
+      { name: 'MainTitleClick', value: () => { } },
72
+      { name: 'MainHeaderTextColor', value: '#fff' },
73
+      { name: 'ShowMainTitleIcon', value: false },
74
+      { name: 'ShowMainHeader', value: true },
75
+      { name: 'ShowMainTabBar', value: true },
76
+      { name: 'MainHeaderTitle', value: '订单管理' },
77
+      { name: 'MainTabBarActiveId', value: 1 },
78
+      { name: 'ShowMainHeaderBack', value: false }
79
+    ])
80
+  },
81
+  mounted () {
82
+    this.$nextTick(() => {
83
+    })
84
+  },
85
+  methods: {
86
+    ...mapMutations([
87
+      'EditMainData' // 配置页面框架数据
88
+    ]),
89
+    Refresh (done) { // 页面下拉刷新
90
+      window.setTimeout(() => {
91
+        done()
92
+      }, 1000)
93
+    }
94
+  }
95
+}
96
+</script>
97
+
98
+<!-- Add "scoped" attribute to limit CSS to this component only -->
99
+<style lang="scss" scoped>
100
+@import "page.scss";
101
+</style>

+ 142
- 0
src/pages/index/ShouYe/page.scss Parādīt failu

@@ -0,0 +1,142 @@
1
+.Page {
2
+  > a.flex-h {
3
+    align-items: center;
4
+    border-bottom: 0.01rem solid #f7f7f7;
5
+    padding: 0 0.15rem;
6
+    > i {
7
+      font-size: 0.15rem;
8
+      color: #999;
9
+      &:first-child {
10
+        color: #d91d36;
11
+      }
12
+    }
13
+    > span {
14
+      font-size: 0.1rem;
15
+      line-height: 0.28rem;
16
+      color: #d91d36;
17
+      margin-left: 0.05rem;
18
+    }
19
+  }
20
+  > .flex-item {
21
+    position: relative;
22
+    > div {
23
+      width: 100%;
24
+      position: absolute;
25
+      left: 0;
26
+      top: 0;
27
+      bottom: 0;
28
+      > .Content {
29
+        width: 100%;
30
+        height: 100%;
31
+        position: relative;
32
+        overflow: hidden;
33
+        z-index: 2;
34
+        .Container {
35
+          position: relative;
36
+          padding: 0 0.15rem;
37
+          > ul {
38
+            position: relative;
39
+            overflow: visible;
40
+            > li {
41
+              background: #fff;
42
+              border-radius: 0.06rem;
43
+              position: relative;
44
+              box-shadow: 0 0 0.02rem 0.02rem rgba(0, 0, 0, 0.05);
45
+              margin-bottom: 0.15rem;
46
+              &:first-child {
47
+                margin-top: 0.15rem;
48
+              }
49
+              > .Res {
50
+                position: relative;
51
+                border-bottom: 0.01rem solid #f7f7f7;
52
+                padding: 0.15rem;
53
+                > div.Num {
54
+                  align-items: center;
55
+                  > .Icon {
56
+                    width: 0.4rem;
57
+                    height: 0.4rem;
58
+                    position: relative;
59
+                    overflow: hidden;
60
+                    margin-right: 0.1rem;
61
+                  }
62
+                  > span {
63
+                    width: 0.55rem;
64
+                    font-size: 0.16rem;
65
+                    font-weight: bold;
66
+                    line-height: 0.2rem;
67
+                    margin-right: 0.1rem;
68
+                  }
69
+                  > .flex-item {
70
+                    > ul {
71
+                      width: 100%;
72
+                      font-size: 0;
73
+                      white-space: nowrap;
74
+                      > li {
75
+                        display: inline-block;
76
+                        vertical-align: middle;
77
+                        font-size: 0.1rem;
78
+                        color: #fff;
79
+                        width: 0.2rem;
80
+                        height: 0.2rem;
81
+                        line-height: 0.2rem;
82
+                        border-radius: 100%;
83
+                        text-align: center;
84
+                        background: #d91d36;
85
+                        margin-right: 0.05rem;
86
+                        &.active {
87
+                          background: #1b40c5;
88
+                        }
89
+                      }
90
+                    }
91
+                  }
92
+                }
93
+                > div.Count {
94
+                  align-items: center;
95
+                  margin-top: 0.05rem;
96
+                  > span {
97
+                    font-size: 0.1rem;
98
+                    color: #999;
99
+                    line-height: 0.2rem;
100
+                    white-space: nowrap;
101
+                    > em {
102
+                      color: #d91d36;
103
+                      font-size: 0.12rem;
104
+                      font-weight: bold;
105
+                    }
106
+                    &:first-child {
107
+                      margin-left: 0.5rem;
108
+                      font-size: 0.12rem;
109
+                      color: #333;
110
+                      font-weight: bold;
111
+                    }
112
+                    &:last-child {
113
+                      margin-left: 0.25rem;
114
+                    }
115
+                  }
116
+                }
117
+              }
118
+              > .Time {
119
+                align-items: center;
120
+                padding: 0.1rem 0.15rem;
121
+                > span {
122
+                  font-size: 0.12rem;
123
+                  color: #666;
124
+                  line-height: 0.2rem;
125
+                }
126
+                > a {
127
+                  font-size: 0.12rem;
128
+                  width: 0.8rem;
129
+                  border: 0.01rem solid #d91d36;
130
+                  border-radius: 0.04rem;
131
+                  line-height: 0.28rem;
132
+                  text-align: center;
133
+                  color: #d91d36;
134
+                }
135
+              }
136
+            }
137
+          }
138
+        }
139
+      }
140
+    }
141
+  }
142
+}

+ 32
- 0
src/pages/index/index.vue Parādīt failu

@@ -0,0 +1,32 @@
1
+<template>
2
+  <div class="Page">
3
+    <router-view></router-view>
4
+  </div>
5
+</template>
6
+
7
+<script>
8
+export default {
9
+  name: '',
10
+  data () {
11
+    return {
12
+    }
13
+  },
14
+  computed: {
15
+  },
16
+  components: {
17
+  },
18
+  created () {
19
+  },
20
+  mounted () {
21
+    this.$nextTick(() => {
22
+    })
23
+  },
24
+  methods: {
25
+  }
26
+}
27
+</script>
28
+
29
+<!-- Add "scoped" attribute to limit CSS to this component only -->
30
+<style lang="scss" scoped>
31
+@import "page.scss";
32
+</style>

+ 3
- 0
src/pages/index/page.scss Parādīt failu

@@ -0,0 +1,3 @@
1
+.Page {
2
+  
3
+}

+ 71
- 0
src/pages/page.scss Parādīt failu

@@ -0,0 +1,71 @@
1
+.MainPage {
2
+  width: 100%;
3
+  height: 100%;
4
+  position: relative;
5
+  overflow: hidden;
6
+  > .MainHeaderPadding {
7
+    position: relative;
8
+    overflow: hidden;
9
+    background: #D91D36;
10
+  }
11
+  > .MainHeader {
12
+    position: relative;
13
+    overflow: hidden;
14
+    background: #D91D36;
15
+    > .MainTitle {
16
+      width: 100%;
17
+      display: block;
18
+      text-align: center;
19
+      height: 0.4rem;
20
+      white-space: nowrap;
21
+      position: relative;
22
+      z-index: 1;
23
+      > * {
24
+        display: inline-block;
25
+        vertical-align: middle;
26
+        line-height: 0.4rem;
27
+        font-size: 0.17rem;
28
+        color: #fff;
29
+      }
30
+    }
31
+    > a {
32
+      display: inline-block;
33
+      position: absolute;
34
+      z-index: 2;
35
+      color: #fff;
36
+      &.MainBack {
37
+        font-size: 0.18rem;
38
+        line-height: 0.4rem;
39
+        top: 0;
40
+        left: 0.15rem;
41
+      }
42
+    }
43
+  }
44
+  > .TabBar {
45
+    align-items: center;
46
+    border-top: 0.01rem solid #f7f7f7;
47
+    > div {
48
+      text-align: center;
49
+      font-size: 0;
50
+      > a {
51
+        display: inline-block;
52
+        padding: 0.05rem 0;
53
+        &.active {
54
+          > * {
55
+            color: #D91D36;
56
+          }
57
+        }
58
+        > * {
59
+          display: block;
60
+          line-height: 0.2rem;
61
+          text-align: center;
62
+          font-size: 0.13rem;
63
+          color: #656565;
64
+        }
65
+        > i {
66
+          font-size: 0.2rem;
67
+        }
68
+      }
69
+    }
70
+  }
71
+}

+ 66
- 0
src/router/index.js Parādīt failu

@@ -0,0 +1,66 @@
1
+/* eslint-disable */
2
+import Vue from 'vue'
3
+import Router from 'vue-router'
4
+
5
+Vue.use(Router)
6
+
7
+let router = new Router({
8
+  routes: [{
9
+    path: '/', // 框架页
10
+    name: 'sys',
11
+    redirect: '/index',
12
+    component: resolve => (require(['@/pages/index'], resolve)),
13
+    children: [
14
+      {
15
+        path: '/index', // 首页
16
+        name: 'index',
17
+        redirect: '/index/ShouYe',
18
+        component: resolve => (require(['@/pages/index/index'], resolve)),
19
+        children: [
20
+          {
21
+            path: '/index/ShouYe', // 彩单管理
22
+            name: 'CaiDanGuanLi',
23
+            component: resolve => (require(['@/pages/index/ShouYe'], resolve))
24
+          }
25
+        ]
26
+      },
27
+      {
28
+        path: '/CaiMinGuanLi', // 彩民管理
29
+        name: 'CaiMinGuanLi',
30
+        redirect: '/CaiMinGuanLi/ShouYe',
31
+        component: resolve => (require(['@/pages/CaiMinGuanLi/index'], resolve)),
32
+        children: [
33
+          {
34
+            path: '/CaiMinGuanLi/ShouYe', // 彩民管理-首页
35
+            name: 'CaiMinGuanLiShouYe',
36
+            component: resolve => (require(['@/pages/CaiMinGuanLi/ShouYe'], resolve))
37
+          }
38
+        ]
39
+      },
40
+      {
41
+        path: '/WoDe', // 我的
42
+        name: 'WoDe',
43
+        redirect: '/WoDe/ShouYe',
44
+        component: resolve => (require(['@/pages/WoDe/index'], resolve)),
45
+        children: [
46
+          {
47
+            path: '/WoDe/ShouYe', // 个人中心
48
+            name: 'WoDeShouYe',
49
+            component: resolve => (require(['@/pages/WoDe/ShouYe'], resolve))
50
+          }
51
+        ]
52
+      },
53
+      {
54
+        path: '/SignIn', // 登录页
55
+        name: 'SignIn',
56
+        component: resolve => (require(['@/pages/SignIn'], resolve))
57
+      }
58
+    ]
59
+  }]
60
+})
61
+
62
+router.beforeEach((to, from, next) => {
63
+  next()
64
+})
65
+
66
+export default router

+ 12
- 0
src/store/common/index.js Parādīt failu

@@ -0,0 +1,12 @@
1
+
2
+// import Api from '../../util/Api'
3
+// import ToolClass from '../../util/PublicMethod'
4
+export default {
5
+  namespaced: true,
6
+  state: {
7
+  },
8
+  mutations: {
9
+  },
10
+  actions: {
11
+  }
12
+}

+ 50
- 0
src/store/index.js Parādīt failu

@@ -0,0 +1,50 @@
1
+/* eslint-disable */
2
+import Vue from 'vue'
3
+import Vuex from 'vuex'
4
+
5
+Vue.use(Vuex)
6
+
7
+const store = new Vuex.Store({
8
+  state: {
9
+    MainTitleClick: () => {}, // 页面标题点击事件
10
+    ShowMainTitleIcon: false, // 显隐页面标题箭头图标
11
+    ShowMainHeaderBack: true, // 显隐头部返回按钮
12
+    ShowMainHeader: false, // 显隐页面头部
13
+    ShowMainTabBar: false, // 显隐页面tabbar
14
+    MainPaddingTop: 0, // 页面padding-top(不与系统顶部时间栏重叠)
15
+    MainPaddingBottom: 0, // 页面padding-bottom(不与系统底部返回栏重叠)
16
+    MainHeaderTitle: '', // 页面title
17
+    MainTabBar: [ // tabbar列表
18
+      { name: '彩单管理', icon: 'iconcaidanguanli', id: 1, router: 'CaiDanGuanLi' },
19
+      { name: '彩民管理', icon: 'iconyonghuguanli', id: 2, router: 'CaiMinGuanLi' },
20
+      { name: '个人中心', icon: 'icongerenzhongxin', id: 3, router: 'WoDe' }
21
+    ],
22
+    MainTabBarActiveId: null // tabbar选中id
23
+  },
24
+  mutations: {
25
+    EditMainData (state, data) { // 修改页面数据
26
+      if (data.length === undefined) {
27
+        state[data.name] = data.value
28
+      } else {
29
+        data.map((item) => {
30
+          state[item.name] = item.value
31
+        })
32
+      }
33
+    }
34
+  },
35
+  actions: {
36
+  }
37
+})
38
+export const modules = {
39
+  common: () => require('./common/index').default,
40
+  index: () => require('./index/index').default,
41
+  user: () => require('./user/index').default
42
+}
43
+
44
+Object.keys(modules).forEach((modKey) => {
45
+  const modNS = modKey.split('/')
46
+  const getMod = modules[modKey]
47
+  store.registerModule(...modNS, getMod())
48
+})
49
+
50
+export default store

+ 22
- 0
src/store/index/index.js Parādīt failu

@@ -0,0 +1,22 @@
1
+
2
+// import Api from '../../util/Api'
3
+// import ToolClass from '../../util/PublicMethod'
4
+export default {
5
+  namespaced: true,
6
+  state: {
7
+    Banner: [
8
+      { img: 'https://t9.baidu.com/it/u=583874135,70653437&fm=79&app=86&size=h300&n=0&g=4n&f=jpeg?sec=1598711694&t=9a795fb6da2d62ef38c55e68a391aa73', id: '1' },
9
+      { img: 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1598117013838&di=5f38ae1156907f5dc2614ecea50be678&imgtype=0&src=http%3A%2F%2Ft7.baidu.com%2Fit%2Fu%3D1209016425%2C1621889291%26fm%3D79%26app%3D86%26f%3DJPEG%3Fw%3D1280%26h%3D975', id: '2' },
10
+      { img: 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1598117013838&di=2230f0d070d2c70d91435e245a71f1b1&imgtype=0&src=http%3A%2F%2Ft7.baidu.com%2Fit%2Fu%3D2088143748%2C2721931858%26fm%3D79%26app%3D86%26f%3DJPEG%3Fw%3D1280%26h%3D1095', id: '3' },
11
+      { img: 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1598117013836&di=ed7b3b993c39c1a00cae9da862664f7a&imgtype=0&src=http%3A%2F%2Ft7.baidu.com%2Fit%2Fu%3D2282583984%2C2334300095%26fm%3D79%26app%3D86%26f%3DJPEG%3Fw%3D1280%26h%3D1286', id: '4' },
12
+      { img: 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1598117013835&di=5a40fe5df098eecf123bfedfc736419a&imgtype=0&src=http%3A%2F%2Ft7.baidu.com%2Fit%2Fu%3D2908080642%2C1217220828%26fm%3D79%26app%3D86%26f%3DJPEG%3Fw%3D1280%26h%3D914', id: '5' },
13
+      { img: 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1598117013834&di=09f6b502f2bf29bb9608551c0b796330&imgtype=0&src=http%3A%2F%2Ft8.baidu.com%2Fit%2Fu%3D1246904158%2C3698690073%26fm%3D79%26app%3D86%26f%3DJPEG%3Fw%3D2000%26h%3D1500', id: '6' },
14
+      { img: 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1598117013833&di=a85335e1d520d2d09cb77c378b959fa4&imgtype=0&src=http%3A%2F%2Ft7.baidu.com%2Fit%2Fu%3D672419691%2C864051916%26fm%3D79%26app%3D86%26f%3DJPEG%3Fw%3D2000%26h%3D1333', id: '7' },
15
+      { img: 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1598117013833&di=082ea8330f0d35dc508685a0f6488981&imgtype=0&src=http%3A%2F%2Ft8.baidu.com%2Fit%2Fu%3D28852645%2C3452780177%26fm%3D79%26app%3D86%26f%3DJPEG%3Fw%3D1280%26h%3D899', id: '8' }
16
+    ]
17
+  },
18
+  mutations: {
19
+  },
20
+  actions: {
21
+  }
22
+}

+ 42
- 0
src/store/user/index.js Parādīt failu

@@ -0,0 +1,42 @@
1
+
2
+// import Api from '../../util/Api'
3
+// import ToolClass from '../../util/PublicMethod'
4
+export default {
5
+  namespaced: true,
6
+  state: {
7
+    UserInfo: null, // 用户信息
8
+    UserOrderList: [ // 用户订单
9
+      { createDate: '2020-08-14  15:10:20', dateNum: '202076期', type: '超级大乐透', amount: 2, id: 1, orderNum: 'TE202008140000146179970', status: '已撤单' },
10
+      { createDate: '2020-08-13  17:23:54', dateNum: '202076期', type: '双色球', amount: 2, id: 2, orderNum: 'TE202008140000146179970', status: '已下单' },
11
+      { createDate: '2020-08-13  17:23:54', dateNum: '202076期', type: '双色球', amount: 4, id: 3, orderNum: 'TE202008140000146179970', status: '已下单' },
12
+      { createDate: '2020-08-13  17:23:54', dateNum: '202076期', type: '双色球', amount: 2, id: 4, orderNum: 'TE202008140000146179970', status: '已下单' },
13
+      { createDate: '2020-08-13  17:23:54', dateNum: '202076期', type: '双色球', amount: 6, id: 5, orderNum: 'TE202008140000146179970', status: '已下单' },
14
+      { createDate: '2020-08-13  17:23:54', dateNum: '202076期', type: '双色球', amount: 8, id: 6, orderNum: 'TE202008140000146179970', status: '已下单' }
15
+    ],
16
+    UserAccountDetails: { // 用户账户明细
17
+      All: [
18
+        { type: '充值', id: '', createDate: '2020-08-15 12:00:00', amount: '+200' },
19
+        { type: '投注', id: '', createDate: '2020-08-15 12:00:00', amount: '-200' },
20
+        { type: '提现', id: '', createDate: '2020-08-15 12:00:00', amount: '+200' },
21
+        { type: '提现', id: '', createDate: '2020-08-15 12:00:00', amount: '+200' },
22
+        { type: '提现', id: '', createDate: '2020-08-15 12:00:00', amount: '+200' }
23
+      ],
24
+      Pay: [ // 充值
25
+        { type: '充值', id: '', createDate: '2020-08-15 12:00:00', amount: '+200' }
26
+      ],
27
+      Bet: [ // 投注
28
+        { type: '投注', id: '', createDate: '2020-08-15 12:00:00', amount: '-200' }
29
+      ],
30
+      SendPrize: [], // 派奖
31
+      WithDraw: [ // 提现
32
+        { type: '提现', id: '', createDate: '2020-08-15 12:00:00', amount: '+200' },
33
+        { type: '提现', id: '', createDate: '2020-08-15 12:00:00', amount: '+200' },
34
+        { type: '提现', id: '', createDate: '2020-08-15 12:00:00', amount: '+200' }
35
+      ]
36
+    }
37
+  },
38
+  mutations: {
39
+  },
40
+  actions: {
41
+  }
42
+}

+ 11
- 0
src/util/Api.js Parādīt failu

@@ -0,0 +1,11 @@
1
+
2
+const prefix = process.env.NODE_ENV === 'production' ? '' : '/api'
3
+
4
+const $api = {
5
+  ModifyDailyStatus: { // 修改动态状态
6
+    method: 'post',
7
+    url: `${prefix}/business/daily/modifyStatus`
8
+  }
9
+}
10
+
11
+export default $api

+ 99
- 0
src/util/PublicMethod.js Parādīt failu

@@ -0,0 +1,99 @@
1
+/* eslint-disable */
2
+import Axios from 'axios'
3
+const ToolClass = {
4
+  Axios (resolve, reject, target, context, payload = {}, code = 0, commit = null, params = null, hasdata = false) { // Axios
5
+    Axios({
6
+      method: target.method,
7
+      url: target.url,
8
+      ...payload
9
+    }).then(res => {
10
+      if (res.data.code - 0 === code - 0) {
11
+        if (commit !== null) {
12
+          context.commit(commit, params === null ? res.data.data : hasdata ? { ...params, data: res.data.data } : params)
13
+        }
14
+        resolve(res)
15
+      } else {
16
+        reject(res)
17
+      }
18
+    }).catch((res) => {
19
+      reject(res)
20
+    })
21
+  },
22
+  ChangeUrlParams (Arr, DeleteAll = false) {
23
+    if (DeleteAll) { // 只保留目标参数
24
+      window.history.pushState({}, 0, window.location.href.split('?')[0])
25
+    }
26
+    Arr.map((item) => {
27
+      window.history.pushState(null, null, this.ChangeUrlArg(window.location.href, item.name, item.value))
28
+    })
29
+  },
30
+  IsLeapYear (year) {
31
+    return !(year % (year % 100 ? 4 : 400))
32
+  },
33
+  DoubleNum (num) { // 单位数补位
34
+    return num > 9 ? num : `0${num}`
35
+  },
36
+  CheckEmail (target) { // 校验邮箱格式
37
+    let reg = /^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/
38
+    return reg.test(target)
39
+  },
40
+  GetUrlParams (name) { // 获取url参数
41
+    let query = window.location.search.substring(1)
42
+    let vars = query.split('&')
43
+    for (let i = 0; i < vars.length; i++) {
44
+      let pair = vars[i].split('=')
45
+      if (pair[0] == name) { return pair[1] }
46
+    }
47
+    return false
48
+  },
49
+  DateFormat (timestamp) { // 格式化时间
50
+    let Date = new Date(timestamp - 0)
51
+    let yy = new Date(timestamp).getFullYear()
52
+    let mm = new Date(timestamp).getMonth() + 1
53
+    let dd = new Date(timestamp).getDate()
54
+    let hh = Date.getHours()
55
+    let min = Date.getMinutes()
56
+    let ss = Date.getSeconds()
57
+    return `${yy}-${mm}-${dd} ${hh}:${min}:${ss}`
58
+  },
59
+  WindowClick (callback) { // window点击事件
60
+    let WindowClickFn = window.onclick
61
+    window.onclick = () => {
62
+      if (WindowClickFn) {
63
+        WindowClickFn()
64
+      }
65
+      callback()
66
+    }
67
+  },
68
+  DocumentKeyDown (callback) { // document键盘输入事件
69
+    let DocumentKeyDownFn = document.onkeydown
70
+    document.onkeydown = (e) => {
71
+      e = e || event
72
+      if (DocumentKeyDownFn) {
73
+        DocumentKeyDownFn()
74
+      }
75
+      callback(e)
76
+    }
77
+  },
78
+  CheckUrl (url) { // 校验url
79
+    let reg = /^(?=^.{3,255}$)[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$/
80
+    return reg.test(url)
81
+  },
82
+  ChangeUrlArg (url, arg, val) { // 替换url参数
83
+    let pattern = arg + '=([^&]*)'
84
+    let replaceText = arg + '=' + val
85
+    if (url.match(pattern)) {
86
+      let tmp = '/(' + arg + '=)([^&]*)/gi'
87
+      tmp = url.replace(eval(tmp), replaceText)
88
+      return tmp
89
+    } else {
90
+      if (url.match('[\?]')) {
91
+        return url + '&' + replaceText
92
+      } else {
93
+        return url + '?' + replaceText
94
+      }
95
+    }
96
+  }
97
+}
98
+
99
+export default ToolClass

+ 0
- 0
static/.gitkeep Parādīt failu