Bläddra i källkod

中泽项目初始化

zjm
suomingxiang 5 månader sedan
incheckning
01f2aebf4c
100 ändrade filer med 15653 tillägg och 0 borttagningar
  1. 31
    0
      .gitignore
  2. 3
    0
      .prettierrc
  3. 70
    0
      README.md
  4. 12
    0
      config/common.js
  5. 72
    0
      config/pageVars.js
  6. 42
    0
      config/pathVars.js
  7. 127
    0
      config/webpack.charts.dev.js
  8. 99
    0
      config/webpack.charts.dist.js
  9. 168
    0
      config/webpack.dev.js
  10. 161
    0
      config/webpack.prod.js
  11. Binär
      dev/static/car.xlsx
  12. Binär
      dev/static/car1.xlsx
  13. Binär
      dev/static/car2.xlsx
  14. Binär
      dev/static/car3.xlsx
  15. 13
    0
      dev/static/css/swiper-bundle.min.css
  16. Binär
      dev/static/font/FZLTHJW.TTF
  17. 65
    0
      dev/static/font/iconfont.css
  18. 43
    0
      dev/static/font/iconfont.svg
  19. Binär
      dev/static/font/iconfont.ttf
  20. Binär
      dev/static/font/iconfont.woff
  21. Binär
      dev/static/font/iconfont.woff2
  22. Binär
      dev/static/images/about/five.jpg
  23. Binär
      dev/static/images/about/fivem.jpg
  24. Binär
      dev/static/images/about/one1.jpg
  25. Binär
      dev/static/images/about/three.jpg
  26. Binär
      dev/static/images/about/threem.jpg
  27. Binär
      dev/static/images/about/two1.jpg
  28. 1
    0
      dev/static/images/icon-1.svg
  29. 1
    0
      dev/static/images/icon.svg
  30. Binär
      dev/static/images/index/banner1.jpg
  31. Binär
      dev/static/images/index/banner1m.jpg
  32. Binär
      dev/static/images/index/car1.png
  33. Binär
      dev/static/images/index/five.png
  34. Binär
      dev/static/images/index/five_ma.png
  35. Binär
      dev/static/images/index/five_phone.png
  36. Binär
      dev/static/images/index/four.jpg
  37. Binär
      dev/static/images/index/four1.jpg
  38. Binär
      dev/static/images/index/four2.jpg
  39. Binär
      dev/static/images/index/four3.jpg
  40. Binär
      dev/static/images/index/four4.jpg
  41. Binär
      dev/static/images/index/four5.jpg
  42. Binär
      dev/static/images/index/three.jpg
  43. Binär
      dev/static/images/index/twol1.jpg
  44. Binär
      dev/static/images/index/twolbg.jpg
  45. Binär
      dev/static/images/index/twor1.jpg
  46. Binär
      dev/static/images/index/twor2.jpg
  47. Binär
      dev/static/images/index/twor3.jpg
  48. Binär
      dev/static/images/index/twor4.jpg
  49. Binär
      dev/static/images/news/news1.png
  50. Binär
      dev/static/images/product/product1.png
  51. Binär
      dev/static/images/product/product2.png
  52. Binär
      dev/static/images/product/product3.png
  53. Binär
      dev/static/images/product/product4.png
  54. Binär
      dev/static/images/product/product5.png
  55. Binär
      dev/static/images/product/product6.png
  56. Binär
      dev/static/images/product/product_banner1.png
  57. Binär
      dev/static/images/serve/five.jpg
  58. Binär
      dev/static/images/serve/servebk.jpg
  59. Binär
      dev/static/images/serve/servebkm.jpg
  60. Binär
      dev/static/images/serve/two1.jpg
  61. Binär
      dev/static/images/serve/two2.jpg
  62. Binär
      dev/static/images/serve/twos1.jpg
  63. Binär
      dev/static/images/wx.png
  64. 500
    0
      dev/static/json/carDetail.json
  65. 1132
    0
      dev/static/json/custom_map_config.json
  66. 175
    0
      dev/static/json/getProvince.json
  67. 110
    0
      dev/static/json/lbsArea.json
  68. 690
    0
      dev/static/json/mPmsInfo.json
  69. 690
    0
      dev/static/json/pPmsInfo.json
  70. 1
    0
      dev/static/json/pmsInfo.json
  71. 102
    0
      dev/static/lib/animate.min.css
  72. 2
    0
      dev/static/lib/wow.min.js
  73. 5674
    0
      package-lock.json
  74. 49
    0
      package.json
  75. Binär
      src/pages/404/404-mobile.jpg
  76. Binär
      src/pages/404/404.jpg
  77. 19
    0
      src/pages/404/App.js
  78. Binär
      src/pages/404/images/numBg.png
  79. 93
    0
      src/pages/404/index.css
  80. 31
    0
      src/pages/404/index.html
  81. 19
    0
      src/pages/404/index.js
  82. 171
    0
      src/pages/about/App.js
  83. 20
    0
      src/pages/about/images/720d.svg
  84. Binär
      src/pages/about/images/numBg.png
  85. 236
    0
      src/pages/about/index.html
  86. 15
    0
      src/pages/about/index.js
  87. 573
    0
      src/pages/about/index.less
  88. 79
    0
      src/pages/common/components/Select.css
  89. 125
    0
      src/pages/common/components/Select.js
  90. 1
    0
      src/pages/common/components/icon.svg
  91. 999
    0
      src/pages/common/css/common.less
  92. 2839
    0
      src/pages/common/css/index.css
  93. Binär
      src/pages/common/images/logoB.png
  94. Binär
      src/pages/common/images/logoW.png
  95. Binär
      src/pages/common/images/logoWm.png
  96. 220
    0
      src/pages/common/js/Common.js
  97. 113
    0
      src/pages/common/js/utils.js
  98. 0
    0
      src/pages/common/tpl/bottomBar.tpl
  99. 67
    0
      src/pages/common/tpl/footer.tpl
  100. 0
    0
      src/pages/common/tpl/header.tpl

+ 31
- 0
.gitignore Visa fil

@@ -0,0 +1,31 @@
1
+# ---> macOS
2
+# General
3
+.DS_Store
4
+.AppleDouble
5
+.LSOverride
6
+
7
+# Icon must end with two \r
8
+Icon
9
+
10
+
11
+# Thumbnails
12
+._*
13
+
14
+# Files that might appear in the root of a volume
15
+.DocumentRevisions-V100
16
+.fseventsd
17
+.Spotlight-V100
18
+.TemporaryItems
19
+.Trashes
20
+.VolumeIcon.icns
21
+.com.apple.timemachine.donotpresent
22
+
23
+# Directories potentially created on remote AFP share
24
+.AppleDB
25
+.AppleDesktop
26
+Network Trash Folder
27
+Temporary Items
28
+.apdisk
29
+
30
+node_modules
31
+dist

+ 3
- 0
.prettierrc Visa fil

@@ -0,0 +1,3 @@
1
+{
2
+  "semi": true
3
+}

+ 70
- 0
README.md Visa fil

@@ -0,0 +1,70 @@
1
+## 命令说明:
2
+
3
+```
4
+//安装库
5
+npm install 
6
+
7
+//编译第三方库
8
+npm run dll 
9
+
10
+//测试页面
11
+npm run dev
12
+
13
+//发布项目
14
+npm run dist
15
+
16
+//测试图表
17
+npm run chart-dev
18
+
19
+//发布图表
20
+npm run chart-dist
21
+
22
+
23
+//运行本地服务 用来访问本地已发布的页面
24
+npm run server
25
+
26
+```
27
+
28
+
29
+## 目录说明:
30
+
31
++ dll 预编译目录、将第三方库,编译后,开发测试过程会更快。
32
++ src 源文件目录
33
++ dist 项目发布目录
34
++ dev 项目开发目录,如需要测试demo1时,可运行 npm run dev,然后访问127.0.0.1:3000/demo1.html
35
++ dev/static 静态资源目录,即该目录下的资源不会走webapck。
36
++ 本环境使用webpack-dev-server,开发时,会将目录指向dev目录。而发布时会将static目录复制到dist目录下,因此将static放在dev下刚好可以保证在开发目录下与发布目录下可以同样的方式访问static目录。
37
++ src/pages/demo1、src/pages/demo2分别对应可视化页面,建议按页面整理html、css、图片等源文件
38
+src/pages/common/为公共目录,可存放跨页面共享的相关资源
39
+
40
++ charts 为图表目录
41
++ charts/chart1、charts/chart2 分别对应一个图表,该图表的所有资源均在对应的目录下。
42
+
43
++ charts_tests 为图表测试目录,其下的子目录与charts下的子目录对应。
44
+如需要测试chart1时,可运行 npm run chart-dev,然后访问127.0.0.1:3000/chart1.html
45
+注意:不需要在charts_tests下的每个图表目录下创建index.html页,只需创建index.js,如果没有index.html页,会自动调用模版页 template.html
46
+
47
++ chartsDist 为图表发布目录
48
+
49
+## 新增功能
50
++ 简单的html拼接(非模版引擎方式)
51
+用于站网类项目开发,可以将共公的html块提取的共公的文件中 tpl文件(用其他的扩展名也行,但不要使用html,会与HtmlWebpackPlugin中用到的html冲突)。然后在需要的页面中  <%= require('../common/tpl/header.tpl') %> 引入。
52
+ >> 注:为什么可以在hhtml中用<%= %>引入,见官方说明:https://github.com/jantimon/html-webpack-plugin/blob/main/docs/template-option.md
53
+ ···
54
+  {
55
+    test: /\.tpl$/i,
56
+    use: [{
57
+        loader: 'raw-loader',
58
+        options: {
59
+            esModule: false,
60
+        },
61
+    }]
62
+}
63
+ ···
64
+
65
+## 注意事项:
66
++ 需要修改resolve.alias,请到config/common.js中修改
67
++ 该环境目前使用的库基本上都是最新版本,详见package.json,后续升级需要注意各种版本兼容问题  2022-3-8
68
++ 安装第三方库使用 npm install xx --save  安装环境依赖库时使用 npm install xx --save-dev。切记不要乱用。
69
++ 环境及目录搭建好后,建议将示例删掉。
70
+

+ 12
- 0
config/common.js Visa fil

@@ -0,0 +1,12 @@
1
+const path = require("path");
2
+const common = {
3
+    resolve: {
4
+        alias: {
5
+            chartsDir: path.resolve(__dirname, '../src/charts/'),
6
+            pagesDir: path.resolve(__dirname, '../src/pages/'),
7
+            pagesCommonDir: path.resolve(__dirname, '../src/pages/common/')
8
+        }
9
+    }
10
+}
11
+
12
+module.exports = common;

+ 72
- 0
config/pageVars.js Visa fil

@@ -0,0 +1,72 @@
1
+const fs = require('fs');
2
+const glob = require("glob");
3
+const pathVars = require("./pathVars");
4
+
5
+function getPages() {
6
+    let files = glob.sync(pathVars.srcPath + "/pages/*/index.html");
7
+    //let files = glob.sync(pathVars.srcPath + "/pages/light/index.html");
8
+
9
+    //console.log(files);
10
+    let pageAry = [];
11
+    files.forEach((filePath) => {
12
+        //将单个文件路径(/src/pages/news/detail/index.html)路径拆分成数组
13
+        let tempAry = filePath.split('/');
14
+        let chunkName = tempAry[tempAry.length - 2];
15
+        //let htmlName = chunkName + "/index.html";
16
+        let htmlName = chunkName + ".html";
17
+        let entryJs = pathVars.pagesPath + "/" + chunkName + "/index.js";
18
+
19
+        let obj = {};
20
+        obj["filePath"] = filePath;
21
+        obj["chunkName"] = chunkName;
22
+        obj["htmlName"] = htmlName;
23
+        obj["entryJs"] = entryJs;
24
+        pageAry.push(obj);
25
+    });
26
+    return pageAry;
27
+}
28
+
29
+function getCharts(){
30
+    let files = glob.sync(pathVars.srcPath + "/charts/chart*/Chart*.js");
31
+    let chartsAry=[];
32
+    files.forEach((filePath) => {
33
+        let tempAry = filePath.split('/');
34
+        let chunkName = tempAry[tempAry.length - 2];
35
+        let obj = {};
36
+        obj["chunkName"] = chunkName;
37
+        obj["entryJs"] = filePath;
38
+        chartsAry.push(obj);
39
+    });
40
+    return chartsAry;
41
+}
42
+
43
+function getChartsTest() {
44
+    let template = pathVars.chartsTestPath + "/template.html"
45
+    let files = glob.sync(pathVars.srcPath + "/charts_test/chart*/index.js");
46
+    let chartsAry = [];
47
+    files.forEach((filePath) => {
48
+        let tempAry = filePath.split('/');
49
+        let chunkName = tempAry[tempAry.length - 2];
50
+
51
+        //目录下有index.html时,使用index.html作为html模版页,没有时使用template.html作为html模版页
52
+        let htmlPath = pathVars.srcPath + "/charts_test/" + chunkName + "/index.html";
53
+        try {
54
+            fs.statSync(htmlPath).isFile();
55
+        } catch (e) {
56
+            htmlPath = template;
57
+        }
58
+        let obj = {};
59
+        obj["chunkName"] = chunkName;
60
+        obj["entryJs"] = filePath;
61
+        obj["htmlName"] = chunkName + ".html";
62
+        obj["htmlPath"] = htmlPath;
63
+        chartsAry.push(obj);
64
+    });
65
+    return chartsAry;
66
+}
67
+
68
+module.exports = {
69
+    getPages,
70
+    getCharts,
71
+    getChartsTest
72
+};

+ 42
- 0
config/pathVars.js Visa fil

@@ -0,0 +1,42 @@
1
+const path = require('path');
2
+const pathVars = {};
3
+
4
+//项目根目录
5
+/* eslint-disable*/
6
+pathVars.rootPath = path.resolve(__dirname, '../');
7
+/* eslint-enable*/
8
+
9
+//源文件目录
10
+pathVars.srcPath = path.resolve(pathVars.rootPath, './src');
11
+
12
+//预编译文件存放目录
13
+pathVars.dllPath = path.resolve(pathVars.rootPath, './dll');
14
+
15
+//开发测试目录
16
+pathVars.devPath = path.resolve(pathVars.rootPath, './dev');
17
+
18
+//发布目录
19
+pathVars.distPath = path.resolve(pathVars.rootPath, './dist');
20
+
21
+//js发布目录
22
+pathVars.distJsPath = path.resolve(pathVars.rootPath, './dist-js');
23
+
24
+//node_modules目录
25
+pathVars.nodeModulesPath = path.resolve(pathVars.rootPath, './node_modules');
26
+
27
+//页面目录
28
+pathVars.pagesPath = path.resolve(pathVars.rootPath, './src/pages');
29
+
30
+//图表目录
31
+pathVars.chartsPath = path.resolve(pathVars.rootPath, './src/charts');
32
+
33
+//图表测试目录
34
+pathVars.chartsTestPath = path.resolve(pathVars.rootPath, './src/charts_test');
35
+
36
+//图表发布目录
37
+pathVars.chartsDistPath = path.resolve(pathVars.rootPath, './chartsDist');
38
+
39
+//静态资源目录
40
+pathVars.staticPath = path.resolve(pathVars.rootPath, './src/static');
41
+
42
+module.exports = pathVars;

+ 127
- 0
config/webpack.charts.dev.js Visa fil

@@ -0,0 +1,127 @@
1
+const path = require("path");
2
+const webpack = require('webpack');
3
+const HtmlWebpackPlugin = require("html-webpack-plugin");
4
+const HappyPack = require('happypack');
5
+const os = require('os');
6
+const happyThreadPool = HappyPack.ThreadPool({
7
+    size: os.cpus().length
8
+});
9
+
10
+const common = require("./common");
11
+const pathVars = require("./pathVars");
12
+const pageVars = require("./pageVars");
13
+
14
+//---------------------------------- output -----------------------------------//
15
+const entryConfig = {};
16
+
17
+let pages = pageVars.getChartsTest();
18
+pages.forEach((page) => {
19
+    entryConfig[page["chunkName"]] = page["entryJs"];
20
+});
21
+
22
+//---------------------------------- output -----------------------------------//
23
+
24
+let outputConfig = {
25
+    path: pathVars.devPath,
26
+   // publicPath: "./", // 表示资源的发布地址,当配置过该属性后,打包文件中所有通过相对路径引用的资源都会被配置的路径所替换(如:css中背景图的路径)
27
+    filename: "[name]/index.js",
28
+    assetModuleFilename: 'chartImages/[name]_[hash][ext][query]'
29
+};
30
+
31
+
32
+//---------------------------------- plugin -----------------------------------//
33
+let pluginConfig = [
34
+    new webpack.ProvidePlugin({
35
+        'THREE': require.resolve('three')
36
+    }),
37
+    new webpack.DllReferencePlugin({
38
+        context: pathVars.rootPath,
39
+        manifest: require(pathVars.dllPath + '/manifest.json')
40
+    }),
41
+    new HappyPack({
42
+        id: 'babel',
43
+        loaders: ["babel-loader"],
44
+        threadPool: happyThreadPool
45
+    })
46
+];
47
+
48
+pages.forEach(function (page) {
49
+    let htmlPlugin = new HtmlWebpackPlugin({
50
+        title: 'chartTest',
51
+        template: page["htmlPath"],
52
+        filename: page["htmlName"],
53
+        inject: 'body',
54
+        chunks: [page["chunkName"]]
55
+    });
56
+    pluginConfig.push(htmlPlugin);
57
+});
58
+
59
+module.exports = {
60
+    mode: 'development',
61
+    entry: entryConfig,
62
+    output: outputConfig,
63
+    resolve: common.resolve,
64
+    devServer: {
65
+        compress: true,
66
+        static: {
67
+            directory: pathVars.devPath,
68
+            publicPath: "/"
69
+        },
70
+        hot: true,
71
+        host: 'localhost',
72
+        port: 3000
73
+    },
74
+    module: {
75
+        rules: [{
76
+                test: /\.(css|less)$/,
77
+                include: [pathVars.srcPath],
78
+                exclude: [pathVars.nodeModulesPath],
79
+                use: [{
80
+                        options: {
81
+                            /* 解决css背景图路径问题 由于图片目录已经定好了,因此这里可以用固定的相对路径*/
82
+                            publicPath: '../'
83
+                        },
84
+                    },
85
+                    //"css-loader?modules&localIdentName=[name]__[local]-[hash:base64:5]",
86
+                    "css-loader",
87
+                    "less-loader"
88
+                ],
89
+            },
90
+            {
91
+                test: /\.js$/,
92
+                exclude: pathVars.nodeModulesPath,
93
+                include: pathVars.srcPath,
94
+                use: ['babel-loader']
95
+                //use: ["happypack/loader?id=babel"]
96
+            },
97
+            {
98
+                test: /\.(png|jpg|gif|woff|svg|eot|ttf|woff2)$/,
99
+                type: 'asset/resource',
100
+                parser: {
101
+                    dataUrlCondition: {
102
+                        maxSize: 10 * 1024
103
+                    }
104
+                }
105
+            },
106
+            {
107
+                test: /\.(glsl|vs|fs|vert|frag)$/,
108
+                exclude: [pathVars.nodeModulesPath, pathVars.dllPath],
109
+                use: ["raw-loader", "glslify-loader"]
110
+            }
111
+        ]
112
+    },
113
+    plugins: pluginConfig,
114
+    optimization: {
115
+        runtimeChunk: 'single',
116
+        splitChunks: {
117
+            chunks: "all",
118
+            cacheGroups: {
119
+                vendor: {
120
+                    test: /[\\/]node_modules[\\/]/,
121
+                    name: 'vendor',
122
+                    chunks: 'all'
123
+                }
124
+            }
125
+        }
126
+    }
127
+};

+ 99
- 0
config/webpack.charts.dist.js Visa fil

@@ -0,0 +1,99 @@
1
+const path = require("path");
2
+const webpack = require('webpack');
3
+const TerserPlugin = require("terser-webpack-plugin");
4
+const HappyPack = require('happypack');
5
+const os = require('os');
6
+const happyThreadPool = HappyPack.ThreadPool({
7
+    size: os.cpus().length
8
+});
9
+
10
+const common = require("./common");
11
+const pathVars = require("./pathVars");
12
+const pageVars = require("./pageVars");
13
+
14
+//---------------------------------- output -----------------------------------//
15
+const entryConfig = {};
16
+
17
+let charts = pageVars.getCharts();
18
+
19
+charts.forEach((chartItem) => {
20
+    entryConfig[chartItem["chunkName"]] = chartItem["entryJs"];
21
+});
22
+console.log("entryConfig", entryConfig);
23
+//---------------------------------- output -----------------------------------//
24
+
25
+let outputConfig = {
26
+    path: pathVars.chartsDistPath,
27
+    publicPath: "./", // 表示资源的发布地址,当配置过该属性后,打包文件中所有通过相对路径引用的资源都会被配置的路径所替换(如:css中背景图的路径)
28
+    filename: "[name].js",
29
+    library: "[name]",
30
+    libraryExport: 'default',
31
+    umdNamedDefine: true,
32
+    // es umd
33
+    libraryTarget: "umd",
34
+    
35
+    assetModuleFilename: 'chartImages/[name]_[hash][ext][query]'
36
+};
37
+
38
+
39
+//---------------------------------- plugin -----------------------------------//
40
+let pluginConfig = [
41
+    new HappyPack({
42
+        id: 'babel',
43
+        loaders: ["babel-loader"],
44
+        threadPool: happyThreadPool
45
+    })
46
+];
47
+
48
+module.exports = {
49
+    mode: 'production',
50
+    entry: entryConfig,
51
+    output: outputConfig,
52
+    resolve: common.resolve,
53
+    module: {
54
+        rules: [{
55
+                test: /\.(css|less)$/,
56
+                include: [pathVars.srcPath],
57
+                exclude: [pathVars.nodeModulesPath],
58
+                use: [{
59
+                        options: {
60
+                            /* 解决css背景图路径问题 由于图片目录已经定好了,因此这里可以用固定的相对路径*/
61
+                            publicPath: '../'
62
+                        },
63
+                    },
64
+                    //"css-loader?modules&localIdentName=[name]__[local]-[hash:base64:5]",
65
+                    "css-loader",
66
+                    "less-loader"
67
+                ],
68
+            },
69
+            {
70
+                test: /\.js$/,
71
+                exclude: pathVars.nodeModulesPath,
72
+                include: pathVars.srcPath,
73
+                use: ['babel-loader']
74
+                //use: ["happypack/loader?id=babel"]
75
+            },
76
+            {
77
+                test: /\.(png|jpg|gif|woff|svg|eot|ttf|woff2)$/,
78
+                type: 'asset/resource',
79
+                parser: {
80
+                    dataUrlCondition: {
81
+                        maxSize: 10 * 1024
82
+                    }
83
+                }
84
+            },
85
+            {
86
+                test: /\.(glsl|vs|fs|vert|frag)$/,
87
+                exclude: [pathVars.nodeModulesPath, pathVars.dllPath],
88
+                use: ["raw-loader", "glslify-loader"]
89
+            }
90
+        ]
91
+    },
92
+    plugins: pluginConfig,
93
+    optimization: {
94
+        minimize: true,
95
+        minimizer: [
96
+            new TerserPlugin()
97
+        ]
98
+    }
99
+};

+ 168
- 0
config/webpack.dev.js Visa fil

@@ -0,0 +1,168 @@
1
+const path = require("path");
2
+const webpack = require("webpack");
3
+const MiniCssExtractPlugin = require("mini-css-extract-plugin");
4
+const HtmlWebpackPlugin = require("html-webpack-plugin");
5
+const HappyPack = require("happypack");
6
+const os = require("os");
7
+const happyThreadPool = HappyPack.ThreadPool({
8
+  size: os.cpus().length,
9
+});
10
+
11
+const common = require("./common");
12
+const pathVars = require("./pathVars");
13
+const pageVars = require("./pageVars");
14
+
15
+//---------------------------------- output -----------------------------------//
16
+const packageJson = require("./../package.json");
17
+const entryConfig = {
18
+  /*第三方库*/
19
+  //vendor: Object.keys(packageJson.dependencies)
20
+};
21
+
22
+let pages = pageVars.getPages();
23
+//console.log("pages", pages);
24
+pages.forEach(function (page) {
25
+  entryConfig[page["chunkName"]] = page["entryJs"];
26
+});
27
+
28
+//---------------------------------- output -----------------------------------//
29
+
30
+let outputConfig = {
31
+  path: pathVars.distPath,
32
+  //publicPath: "./", // 表示资源的发布地址,当配置过该属性后,打包文件中所有通过相对路径引用的资源都会被配置的路径所替换(如:css中背景图的路径)
33
+  filename: "[name]/index.js",
34
+  assetModuleFilename: "images/[name]_[hash][ext][query]",
35
+  //chunkFilename: '[name]/index_[hash].chunk.js'
36
+};
37
+
38
+//---------------------------------- plugin -----------------------------------//
39
+let pluginConfig = [
40
+  // new webpack.ProvidePlugin({
41
+  //   THREE: require.resolve("three"),
42
+  // }),
43
+  // new webpack.DllReferencePlugin({
44
+  //   context: pathVars.rootPath,
45
+  //   manifest: require(pathVars.dllPath + "/manifest.json"),
46
+  // }),
47
+  new MiniCssExtractPlugin({
48
+    filename: "[name]/index.css",
49
+  }),
50
+  new HappyPack({
51
+    id: "babel",
52
+    loaders: ["babel-loader"],
53
+    threadPool: happyThreadPool,
54
+  }),
55
+];
56
+
57
+pages.forEach(function (page) {
58
+  let htmlPlugin = new HtmlWebpackPlugin({
59
+    title: "page1",
60
+    template: page["filePath"],
61
+    filename: page["htmlName"],
62
+    inject: "body",
63
+    chunks: [page["chunkName"]],
64
+  });
65
+  console.log(page);
66
+  pluginConfig.push(htmlPlugin);
67
+});
68
+
69
+//console.log("pluginConfig", pluginConfig);
70
+
71
+module.exports = {
72
+  cache: {
73
+    type: "filesystem",
74
+ },
75
+  mode: "development",
76
+  entry: entryConfig,
77
+  //output属性与webpack-dev-server有冲突
78
+  output: outputConfig,
79
+  resolve: common.resolve,
80
+  devServer: {
81
+    compress: true,
82
+    static: {
83
+      directory: pathVars.devPath,
84
+      publicPath: "/",
85
+    },
86
+    hot: true,
87
+    // host: "localhost",
88
+    // host: '192.168.1.115',
89
+    host: '192.168.1.63',
90
+    port: 6002,
91
+    proxy: {
92
+      '/api': {  // 代理路径
93
+          target: 'http://192.168.1.33:9100', // 目标地址
94
+          changeOrigin: true, // 允许跨域
95
+          pathRewrite: { '^/api': '' }, // 重写路径
96
+      },
97
+  },
98
+  },
99
+  module: {
100
+    rules: [
101
+      {
102
+        test: /\.(css|less)$/,
103
+        include: [pathVars.srcPath],
104
+        exclude: [pathVars.nodeModulesPath],
105
+        use: [
106
+          {
107
+            loader: MiniCssExtractPlugin.loader,
108
+            options: {
109
+              /* 解决css背景图路径问题 由于图片目录已经定好了,因此这里可以用固定的相对路径*/
110
+              publicPath: "../",
111
+            },
112
+          },
113
+          //"css-loader?modules&localIdentName=[name]__[local]-[hash:base64:5]",
114
+          "css-loader",
115
+          "less-loader",
116
+        ],
117
+      },
118
+      {
119
+        test: /\.tpl$/i,
120
+        use: [
121
+          {
122
+            loader: "raw-loader",
123
+            options: {
124
+              esModule: false,
125
+            },
126
+          },
127
+        ],
128
+      },
129
+      {
130
+        test: /\.js$/,
131
+        exclude: pathVars.nodeModulesPath,
132
+        include: pathVars.srcPath,
133
+        use: ["babel-loader"],
134
+        //use: ["happypack/loader?id=babel"]
135
+      },
136
+      {
137
+        test: /\.(png|jpg|gif|woff|svg|eot|ttf|woff2)$/,
138
+        type: "asset/resource",
139
+        parser: {
140
+          dataUrlCondition: {
141
+            maxSize: 10 * 1024,
142
+          },
143
+        },
144
+        //利用HappyPack打包,图片会损坏。暂时不使用
145
+        //use: ["happypack/loader?id=url"]
146
+      },
147
+      {
148
+        test: /\.(glsl|vs|fs|vert|frag)$/,
149
+        exclude: [pathVars.nodeModulesPath, pathVars.dllPath],
150
+        use: ["raw-loader", "glslify-loader"],
151
+      },
152
+    ],
153
+  },
154
+  plugins: pluginConfig,
155
+  optimization: {
156
+    runtimeChunk: "single",
157
+    splitChunks: {
158
+      chunks: "all",
159
+      cacheGroups: {
160
+        vendor: {
161
+          test: /[\\/]node_modules[\\/]/,
162
+          name: "vendor",
163
+          chunks: "all",
164
+        },
165
+      },
166
+    },
167
+  },
168
+};

+ 161
- 0
config/webpack.prod.js Visa fil

@@ -0,0 +1,161 @@
1
+const path = require("path");
2
+const webpack = require('webpack');
3
+const TerserPlugin = require("terser-webpack-plugin");
4
+const CopyWebpackPlugin = require("copy-webpack-plugin");
5
+const {
6
+    CleanWebpackPlugin
7
+} = require("clean-webpack-plugin");
8
+const MiniCssExtractPlugin = require('mini-css-extract-plugin');
9
+const HtmlWebpackPlugin = require("html-webpack-plugin");
10
+const HappyPack = require('happypack');
11
+const os = require('os');
12
+const happyThreadPool = HappyPack.ThreadPool({
13
+    size: os.cpus().length
14
+});
15
+
16
+const common = require("./common");
17
+const pathVars = require("./pathVars");
18
+const pageVars = require("./pageVars");
19
+
20
+//---------------------------------- output -----------------------------------//
21
+const packageJson = require("./../package.json");
22
+const entryConfig = {};
23
+
24
+let pages = pageVars.getPages();
25
+console.log("pages", pages);
26
+pages.forEach(function (page) {
27
+    entryConfig[page["chunkName"]] = page["entryJs"];
28
+});
29
+
30
+//---------------------------------- output -----------------------------------//
31
+
32
+let outputConfig = {
33
+    path: pathVars.distPath,
34
+    publicPath: "./", // 表示资源的发布地址,当配置过该属性后,打包文件中所有通过相对路径引用的资源都会被配置的路径所替换(如:css中背景图的路径)
35
+    filename: "[name]/index.js",
36
+    assetModuleFilename: 'images/[name]_[hash][ext][query]'
37
+    //chunkFilename: '[name]/index_[hash].chunk.js'
38
+};
39
+
40
+let pluginConfig = [
41
+    new CleanWebpackPlugin({
42
+        cleanOnceBeforeBuildPatterns: [pathVars.distPath + '/*'],
43
+    }),
44
+    // new webpack.ProvidePlugin({
45
+    //     'THREE': require.resolve('three')
46
+    // }),
47
+    new MiniCssExtractPlugin({
48
+        filename: "[name]/index.css",
49
+    }),
50
+    new HappyPack({
51
+        id: 'babel',
52
+        loaders: ["babel-loader"],
53
+        threadPool: happyThreadPool
54
+    }),
55
+    new CopyWebpackPlugin({
56
+        patterns: [{
57
+            from: pathVars.devPath,
58
+            to: pathVars.distPath
59
+        }]
60
+    })
61
+];
62
+pages.forEach(function (page) {
63
+    let htmlPlugin = new HtmlWebpackPlugin({
64
+        title: 'page1',
65
+        template: page["filePath"],
66
+        filename: page["htmlName"],
67
+        inject: 'body',
68
+        chunks: [page["chunkName"]]
69
+        //chunks: ["manifest", "vendor", "common", page["chunkName"]],
70
+        //chunksSortMode: 'dependency'
71
+    });
72
+    pluginConfig.push(htmlPlugin);
73
+});
74
+
75
+
76
+module.exports = {
77
+    mode: 'production',
78
+    entry: entryConfig,
79
+    output: outputConfig,
80
+    resolve: common.resolve,
81
+    module: {
82
+        rules: [{
83
+                test: /\.(css|less)$/,
84
+                include: [pathVars.srcPath],
85
+                exclude: [pathVars.nodeModulesPath],
86
+                use: [{
87
+                        loader: MiniCssExtractPlugin.loader,
88
+                        options: {
89
+                            /* 解决css背景图路径问题 由于图片目录已经定好了,因此这里可以用固定的相对路径*/
90
+                            publicPath: '../'
91
+                        },
92
+                    },
93
+                    //"css-loader?modules&localIdentName=[name]__[local]-[hash:base64:5]",
94
+                    "css-loader",
95
+                    "less-loader"
96
+                ],
97
+            },
98
+            {
99
+                test: /\.tpl$/i,
100
+                use: [{
101
+                    loader: 'raw-loader',
102
+                    options: {
103
+                        esModule: false,
104
+                    },
105
+                }]
106
+            },
107
+            {
108
+                test: /\.js$/,
109
+                exclude: pathVars.nodeModulesPath,
110
+                include: pathVars.srcPath,
111
+                //use: ['babel-loader'],
112
+                use: ["happypack/loader?id=babel"]
113
+            },
114
+            {
115
+                test: /\.(png|jpg|gif|woff|svg|eot|ttf|woff2)$/,
116
+                type: 'asset/resource',
117
+                parser: {
118
+                    dataUrlCondition: {
119
+                        maxSize: 10 * 1024
120
+                    }
121
+                }
122
+                //利用HappyPack打包,图片会损坏。暂时不使用
123
+                //use: ["happypack/loader?id=url"]
124
+            },
125
+            {
126
+                test: /\.(glsl|vs|fs|vert|frag)$/,
127
+                exclude: [pathVars.nodeModulesPath, pathVars.dllPath],
128
+                use: ["raw-loader", "glslify-loader"]
129
+            }
130
+        ]
131
+    },
132
+    plugins: pluginConfig,
133
+    optimization: {
134
+        //minimize: true,
135
+        minimizer: [
136
+            new TerserPlugin()
137
+        ],
138
+        usedExports: true,
139
+        runtimeChunk: 'single',
140
+        splitChunks: {
141
+            chunks: "all",
142
+            cacheGroups: {
143
+                vendor: {
144
+                    test: /[\\/]node_modules[\\/]/,
145
+                    name: 'vendor',
146
+                    chunks: 'all',
147
+                    priority: -10,
148
+                    reuseExistingChunk: true,
149
+                },
150
+                // 其他不是node_modules中的模块
151
+                default: {
152
+                    name:"common",
153
+                    minChunks: 2, //如果有被引用不少于2次
154
+                    priority: -20,
155
+                    reuseExistingChunk: true,
156
+                }
157
+            }
158
+
159
+        }
160
+    }
161
+};

Binär
dev/static/car.xlsx Visa fil


Binär
dev/static/car1.xlsx Visa fil


Binär
dev/static/car2.xlsx Visa fil


Binär
dev/static/car3.xlsx Visa fil


+ 13
- 0
dev/static/css/swiper-bundle.min.css
Filskillnaden har hållits tillbaka eftersom den är för stor
Visa fil


Binär
dev/static/font/FZLTHJW.TTF Visa fil


+ 65
- 0
dev/static/font/iconfont.css Visa fil

@@ -0,0 +1,65 @@
1
+@font-face {
2
+  font-family: "iconfont"; /* Project id 4773851 */
3
+  src: 
4
+       url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAqcAAsAAAAAElQAAApNAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHFQGYACESgqVSJEnATYCJAM0CxwABCAFhGcHgRsbVA+jooZyUkxkf4VxC0+kQhqzmmPlZ8qq11WNPGyUBgsJoAEJAJAkAAAwxawAAMAFaCC04AARRGtl9cws0IXIIfo4VkDqZYAskY2KsKgiHJBQsewAL5dtn9Yl8yrCfJXUrrpOaVeyN3sJ3TGeN5bBGBxC4rAIXYenU//FbOroCoWDQ13igrpBYNZ9c1jOhM3D5iT0THqdmURmUnlNPXzhm0AnXrGJe+Q5S/Ov8wYQGPj3/+/nqniTNE5/eCMlWvti9783uUPfhpmnHRolspAQl0SDkMVDo0dSIUQUYle7XkjieQR6O60Z2rt3cg5zl3kM0DSCmRzozeOytxwm7smKT3hobXXYdcu9xoCK9MCbgIfy08d/yiCSVBlzoCNndxW8RfVhMfe3kb8Zl14vzJ9QIWNryVLjub/7mazCVpn2bm2L68BiC/efUH6l6BRdYcmVTsiEvvL/wC8QpX76Z6YOiy1qsnsDo0ZWKTq9QS21wy9P1AgdxVGPTCm/AC9/GAqoAUMDZTAqUAVGAypgsUAd2GCgHiwENIB1AtVgCBJI/CYk0PIHq44XOol05bcT5DsAZQ4Y62m5rAiJhREVodaI08ZQ18tEKTQeikUlD5+4gMWhSbNHj56t+AZS1whZmciMIKUus3pOHanu3nVg2+PWAmvLTYn3Tm4JzA5q1S4JO3p6qhcrFAA/YDxQs/mYnBpWQVoqHTGFg/XAtKTUTCGw7mDILQv8Z76hEmJJcQQy3UMksA1/JeCqqosgJ0QSGFqUBVIzyFjHAsYShty/Cc/b4WQ0NiApTp0u57NqIiV50cbxIw5gFxHiZZjpt1YUZkBKEFeBjRWxxaOOBRAUtCRy7oLrXFTDRLT1UjIF4FyqQCoRdrOd6Z89e/qLxT5f+m3mKxos+Voqf+pjz7BGYXiao053ebWyT43WNRC51V01RZC1kttWxLru5PakJNU0wXA8KcTCjq0m4qCGxVQCQLxu6MiyRHx56gCPXgoChXnTngN7+o3FuhXNqlnEyTlIw6XfzJrXK7ASLetEMuRtozNeht3FvPee7c//gHhMxgzz29BbWzxNdLUjNX9PDoqGri21U1ppVIbNwzAj2iWP0AEP++SMjwfBSm06kgZ8+InxwfCtcGk48lb9uQmltrhX65VCf/IT25v3Xl/zelChNl16gV0p+mD0nXDg6bD6VNvDWXomo9BYfuZWyxFCStd18FbeuXDez8jRK7Ri5tguuhfNVrkRrLZfkxuVacWKk+6vUrJERrOkcf9i/xuN2OnBmYmsQaF5c8nDOQcMt+YzaWY7N+0wcYq0b1Ys0ebeKU9x8h9y1TvRO1VnI7qHC1VNtgoKBrGRuRysHifwLGhJF5wcix22TmtG95TbJUEhIgLsfKcpmgR1oUiezki7SnE1Gx20K3OSrzltrYQ6G/M2IwdpQ/mcquHXEMCOc4B2FevXY2IHgF/a02+F98JwE/t6k976xr/csK9/3spe0lf8hf38CAuWtPNngMnGuUmHfBvEoyCnsM8x63/h30LYESXxR4G9yd7uPyN+rzK+tZrYqUbx2MiSjiI7D6OPPyJJwWX2Haz1cw6OpXwqpCgL7SfnIUVj+hw/FDwdGzIGyQmUwk+gP/PRzlH6vaqicG+BfWqFUxfPLTwDXfDerBCxARoSkhevwkbPzlQVw/pJR/olACFmGChyy1zZ2c4cT1EeFJTAtojG0VSNMsAaIRrYqIENKKNgFZyOJYGhYF5Rjifb6cz2yAqZSp9c7gNlCp9PUc6J2rZLFX6fHGSu6Ok9G4+ZMGlZTa148+JpNa3srl5nvMr4buIk0Pxu73Z+Nj/Az+cbZR/eZ7D8qcSxMFGQTpwLjzvl9UpSwGdPt6UAMhWnFpuhnyeJ1+jEqLGhtAh/u1K5TDiBDQz8SBpUIC1gYtmYTijlvl0DfbCOWVw0/KNygsW/flxStNg25sGvdqq+RadtnqJtadZOadHqrkaz5V7HIx7KNEMNogtxQ+5m49jahiW9vfogp2rpg6oxRC+N4BmBICfR/ejqbZHe/NF5o6qZwDimofFV6isWj42Nmm8aT3vZyMgugrGooaGxwfNRAK5PfLy8qqrsxIY1YEebjnqdVzF1kDMwz7xyt1XD//l6Q2Fjf3b0XRuf/uNAZDC3nr1XFGD7pQHosPjQNRfnsviS9HXHi/8Z7tcjw0y217fMNaPM1bdf23gbf/psymLc0IkfyiJUlUBFZZXFlq6iSgQS9T8M3CvrKVi1xRYvy5a/Cqx7mw9dAtB9Ik6Wk+Wnu+JtAg88dQFo/vF4rpJJIzjg586Y8y6cBetiwazLhsxtW76exx/bnik3oNtTDbZ8g7NdNgPfJmKxCvT+ZScM6HhG9DfELE0iJyJzBB1zi/XCvF+wmpv/vWmGxMeUB8QrRfBB8XGR11R+Fxnx/F2d259/k3QiBmPbtdRJLkcz35FvcW6SBwwm+oajk0mvyEz676LZIEStP0+hi+nr9j1keiqvFh9IXPZhSBaZLmSg6N5JbJQgl6cTcEbagWT21q1LE8QJ09pb7wla/uT+2UK819Z1aIIoYen6zbshcHMJ6uwggVj+FpYSmPIRRcxClkiFp/YDKFW/RHH+HzmOj1EKSQWr45lKDG4dsX9ky9PyTyX8KgFJ8dn/jxDHHuSS4kIEIzLeT4gNTtOpVfI3yRrtxmm3jARBemT2c9oUc0yYd5Z5KWbcUbWeZrq8JX7bTCG9UiXD4cKehXF6vdqEv4PFTGktV8r8HoUs3Sydc1kbLlT019QZRnTM5ARpZxrS2hoW6oBFmeH5IVPk/8/+n19bfmlTPhQvemh/qOW3BQbPezqiMxUqBuEMe5rFmGnO3EoLtKAJRtj3DLMaM5b1x0440RML/S7VuqW63+xRYX+pJ3fphjXVakYcAmP+AL5XoDjP5uULwzOk4nz5w2u3vPcJASavvT307FZ2ugtZJ1e8NpolfuaHsCKJeOs/eeljWkPKJneyXlSNya+NPWbP5/Chb6v5lV9bdBov/j72USDGDB/TPoaroJW83MER2jXXp9JN1N7+tmEqKGVXZIX36K/oA0JOIWvy/mDnm6BnPTgw5yz0mY990SGLh9ak3EjSWEWy1mrfEriZVAa7Sa21h/S22K09WKQyjNDSZa33BBLmeyHJzAuSzffuWwI/SGWpL1Kb75/0TsXs9gbro2ybNI9aMXHHvMRgOFuUvT3VNhWcnEovNdUexayXI7dW7+ugKYkV6mvbj9EwQ1iyvevBdFEgqwgzLWPbxVgtdWSVbiu0JZawjWhcFGMrjHCX2JNQYMaP5pd3SrOSAkchfS85qWmJeM/0tHVD+O7TEKrfkrStXbP6IuEG44FIVYnZuwuA4laBmMq9LKPJj7vNxSirLOmw45mwtJ2/tRzg1LAbkLmhKVLkKFFFHU200UUfQ4wxxUxzA1PmeRhXQj2X+ITiam6rh+uWbqDgIwVaHLOJB+GnORHetMhbF8dutL/1YZRyCRyPvEzENJEn7muHaUzx5Xc+AAAAAA==') format('woff2'),
5
+       url('iconfont.woff?t=1734012910808') format('woff'),
6
+       url('iconfont.ttf?t=1734012910808') format('truetype'),
7
+       url('iconfont.svg?t=1734012910808#iconfont') format('svg');
8
+}
9
+
10
+.iconfont {
11
+  font-family: "iconfont" !important;
12
+  font-size: 16px;
13
+  font-style: normal;
14
+  -webkit-font-smoothing: antialiased;
15
+  -moz-osx-font-smoothing: grayscale;
16
+}
17
+
18
+.icon-youjian:before {
19
+  content: "\e804";
20
+}
21
+
22
+.icon-dianhua:before {
23
+  content: "\e67b";
24
+}
25
+
26
+.icon-dadian-1:before {
27
+  content: "\e602";
28
+}
29
+
30
+.icon-xiala:before {
31
+  content: "\e60d";
32
+}
33
+
34
+.icon-logo:before {
35
+  content: "\e60c";
36
+}
37
+
38
+.icon-guanbi:before {
39
+  content: "\e676";
40
+}
41
+
42
+.icon-arrow-right:before {
43
+  content: "\e601";
44
+}
45
+
46
+.icon-weixin:before {
47
+  content: "\e707";
48
+}
49
+
50
+.icon-weibo:before {
51
+  content: "\e619";
52
+}
53
+
54
+.icon-jiantou:before {
55
+  content: "\e63a";
56
+}
57
+
58
+.icon-kuaishou:before {
59
+  content: "\e657";
60
+}
61
+
62
+.icon-douyin:before {
63
+  content: "\e600";
64
+}
65
+

+ 43
- 0
dev/static/font/iconfont.svg Visa fil

@@ -0,0 +1,43 @@
1
+<?xml version="1.0" standalone="no"?>
2
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3
+<svg xmlns="http://www.w3.org/2000/svg">
4
+  <metadata>Created by iconfont</metadata>
5
+  <defs>
6
+  <font id="iconfont" horiz-adv-x="1024">
7
+    <font-face
8
+      font-family="iconfont"
9
+      font-weight="400"
10
+      font-stretch="normal"
11
+      units-per-em="1024"
12
+      ascent="896"
13
+      descent="-128"
14
+    />
15
+      <missing-glyph />
16
+      
17
+      <glyph glyph-name="youjian" unicode="&#59396;" d="M628.992 288.149333c-57.749333-46.272-93.781333-69.226667-129.728-69.226667-34.517333 0-69.376 21.504-123.285333 63.509333L55.082667 0.042667l903.701333 0L632.661333 290.901333C631.466667 290.026667 630.122667 288.938667 628.992 288.149333zM248.405333 381.141333C172.224 439.893333 84.352 507.882667 0 574.570667L0 42.24c0-1.706667 0.810667-3.136 0.981333-4.714667l323.52 284.714667C301.056 340.544 275.904 359.893333 248.405333 381.141333zM1021.482667 29.866667C1022.784 33.728 1024 37.781333 1024 42.24L1024 597.162667c-101.269333-78.762667-247.829333-192.917333-340.394667-265.962667L1021.482667 29.866667zM960 767.978667 64 767.978667c-23.36 0-64-40.682667-64-64l0-50.432c94.378667-75.136 196.885333-154.218667 283.733333-221.205333 47.893333-36.970667 90.816-70.186667 124.693333-96.64 91.306667-71.616 91.306667-71.616 184.512 2.901333C677.226667 405.973333 904 582.442667 1024 675.776L1024 703.914667C1024 727.36 983.381333 767.978667 960 767.978667z"  horiz-adv-x="1024" />
18
+      
19
+      <glyph glyph-name="dianhua" unicode="&#59003;" d="M864.6 213.2L691.5 339.4c-6.3 4.6-14.9 4.1-20.6-1.2l-96.1-89.7c-81 62.2-148.9 141-199.2 231.3l102.5 78c6.2 4.7 8.2 13.2 4.7 20.1l-95.2 191.8c-4 8-13.7 11.3-21.8 7.3L162.4 676c-0.7-0.3-1.1-0.9-1.7-1.3l-0.2-0.2c-1.7-1.2-3.2-2.7-4.3-4.4 0-0.1-0.1-0.1-0.1-0.2-1-1.6-1.7-3.3-2.1-5.2-0.1-0.5-0.1-1.1-0.2-1.6-0.1-1.4-0.2-2.7 0-4.1 0.1-0.5-0.1-0.9 0-1.4 65.6-303 278.8-552.2 561.7-656.4 0.4-0.2 0.8-0.1 1.3-0.2 1.1-0.3 2.2-0.4 3.3-0.5 0.9-0.1 1.9-0.2 2.8-0.1 1.4 0.1 2.7 0.6 4.1 1.1 0.6 0.2 1.2 0.3 1.8 0.7 1.3 0.7 2.3 1.6 3.4 2.6 0.6 0.5 1.2 0.9 1.7 1.5 0.2 0.2 0.4 0.3 0.6 0.5l133.8 183.6c5.1 7.4 3.5 17.6-3.7 22.8z"  horiz-adv-x="1024" />
20
+      
21
+      <glyph glyph-name="dadian-1" unicode="&#58882;" d="M512.448 829.12H511.552a348.032 348.032 0 0 1-346.88-347.648c0-188.8 119.488-338.496 325.952-532.48 0.384-0.448 0.448-1.024 0.832-1.28 3.072-3.328 6.72-5.504 10.688-6.912 0.896-0.32 1.92-0.32 2.88-0.512 2.24-0.576 4.48-1.408 6.72-1.408L512-61.056l0.256-0.064c2.304 0 4.48 0.832 6.72 1.408 0.96 0.192 1.984 0.192 2.88 0.512a26.816 26.816 0 0 1 10.688 6.848c0.384 0.32 0.448 0.896 0.832 1.28 206.464 194.048 326.016 343.744 326.016 532.544a348.032 348.032 0 0 1-346.944 347.648zM512 299.776a183.744 183.744 0 0 0-183.552 183.552A183.68 183.68 0 0 0 512 666.88a183.68 183.68 0 0 0 183.552-183.488A183.744 183.744 0 0 0 512 299.776z"  horiz-adv-x="1024" />
22
+      
23
+      <glyph glyph-name="xiala" unicode="&#58893;" d="M556.352 156.288a54.656 54.656 0 0 0-45.696-20.64 59.744 59.744 0 0 0-43.936 20.64L78.752 546.368a50.72 50.72 0 1 0 71.712 71.744l361.088-371.2 361.952 371.2a50.72 50.72 0 0 0 71.712-71.744z m0 0"  horiz-adv-x="1024" />
24
+      
25
+      <glyph glyph-name="logo" unicode="&#58892;" d="M1806.364335 432.405842c-7.870869-7.870869-11.019216-18.102998-11.019216-33.057648v-44.863951c0-14.95465 3.148347-25.186779 11.019216-33.057648 7.870869-7.870869 18.102998-11.019216 33.057648-11.019216h91.302075c14.167563 0 25.186779 3.148347 32.270562 11.019216 7.870869 7.870869 11.019216 18.102998 11.019216 33.057648v44.863951c0 14.95465-3.148347 25.186779-11.019216 33.057648-7.870869 7.870869-18.102998 11.019216-32.270562 11.019216h-91.302075c-14.95465 0-25.186779-3.148347-33.057648-11.019216m28.335127-74.773252v39.354343c0 6.296695 3.148347 8.657955 9.445042 9.445042h81.069946c6.296695 0 8.657955-3.148347 9.445043-9.445042v-40.928516c0-6.296695-3.148347-8.657955-9.445043-9.445043h-81.069946c-6.296695 1.574174-9.445042 5.509608-9.445042 11.019216M1389.208301 432.405842c-7.870869-7.870869-11.019216-18.102998-11.019216-33.057648v-44.863951c0-14.95465 3.148347-25.186779 11.019216-33.057648 7.870869-7.870869 18.102998-11.019216 33.057648-11.019216h91.302076c14.167563 0 25.186779 3.148347 32.270561 11.019216 7.870869 7.870869 11.019216 18.102998 11.019216 33.057648v44.863951c0 14.95465-3.148347 25.186779-11.019216 33.057648-7.870869 7.870869-18.102998 11.019216-32.270561 11.019216h-92.089163c-14.167563 0-25.186779-3.148347-32.270561-11.019216m28.335127-73.986165v38.567256c0 6.296695 3.148347 8.657955 9.445042 9.445042h81.069947c6.296695 0 8.657955-3.148347 9.445042-9.445042v-40.928516c0-6.296695-3.148347-8.657955-9.445042-9.445043h-81.069947c-6.296695 1.574174-9.445042 6.296695-9.445042 11.806303M1585.980015 443.425058v-36.993083h70.050731v-96.024596h39.354342V406.431975h70.837817v36.993083zM2008.645657 443.425058v-133.017679h39.354343V406.431975H2125.134512c0.787087 0 3.148347-0.787087 4.722521-3.148347 1.574174-1.574174 2.361261-3.935434 2.361261-6.296695v-86.579554h39.354342V399.348194c0 14.95465-3.148347 25.186779-11.019216 33.057648l-3.148347-3.148348 3.148347 3.148348c-7.083782 7.083782-15.741737 10.232129-28.335126 11.019216h-123.572637zM1232.578017 443.425058h-17.315911c-11.019216-0.787087-19.677171-3.935434-26.760953-11.019216-7.870869-7.870869-11.019216-18.102998-11.019216-33.057648v-88.940815h39.354343v36.993082h93.663336v35.418909h-93.663336v16.528824c0 1.574174 0 3.935434 0.787087 4.722521 0.787087 0.787087 1.574174 1.574174 3.935434 2.36126h118.850115v36.993083h-107.830899zM789.448117 654.364335C635.96618 654.364335 511.606457 530.004612 511.606457 377.309762s124.359723-277.054573 277.054573-277.054574 277.054573 124.359723 277.054573 277.054574-123.572636 277.054573-276.267486 277.054573z m0-524.986933c-136.953113 0-247.93236 110.19216-247.93236 247.145273s110.19216 247.93236 247.145273 247.93236 247.93236-110.19216 247.93236-247.145273c0.787087-136.166026-110.19216-247.145273-247.145273-247.93236zM725.694081 510.32744H646.198309c-9.445042 0-15.741737-4.722521-20.464258-10.232129L588.740968 447.360492c-4.722521-7.083782-3.935434-14.95465 1.574174-22.038432l36.993082-51.160646c7.870869-10.232129 23.612606-10.232129 31.483475 0L739.074558 486.714835c6.296695 8.657955 0 23.612606-13.380477 23.612605zM774.493467 499.308224L663.51422 347.400461c-5.509608-7.870869-5.509608-14.95465 0-22.825519l37.780169-51.160645c7.870869-10.232129 22.825519-10.232129 31.483474 0.787087l153.481937 211.726364c8.657955 11.806303 1.574174 24.399693-9.445042 24.399692H794.957725c-7.870869 0-15.741737-3.935434-20.464258-11.019216zM773.70638 172.667179l-35.418909 48.799385c-5.509608 7.870869-6.296695 14.95465 0 23.612606l188.900846 258.951576c5.509608 7.870869 16.528824 7.870869 22.038432 0.787086L991.729439 447.360492c4.722521-7.870869 2.361261-15.741737-1.574174-21.251345L897.279016 299.388163l-92.089162-126.720984c-9.445042-11.806303-23.612606-10.232129-31.483474 0z"  horiz-adv-x="2677" />
26
+      
27
+      <glyph glyph-name="guanbi" unicode="&#58998;" d="M581.945335 384L948.498428 750.609255a48.008087 48.008087 0 0 1 0 67.519096l-2.010634 1.965703a47.996855 47.996855 0 0 1-67.507862 0L512.370675 453.024263 145.772652 820.094054a48.008087 48.008087 0 0 1-67.519095 0l-1.999401-1.999401a47.10948 47.10948 0 0 1 0-67.519095l366.598023-366.575558L76.254156 17.401977a47.985623 47.985623 0 0 1 0-67.519095l1.999401-1.999401a48.008087 48.008087 0 0 1 67.519095 0l366.598023 366.598023 366.609257-366.598023a47.996855 47.996855 0 0 1 67.507862 0l2.010634 1.999401a48.008087 48.008087 0 0 1 0 67.519095z"  horiz-adv-x="1024" />
28
+      
29
+      <glyph glyph-name="arrow-right" unicode="&#58881;" d="M325.048 802.489l-60.03-59.435 357.181-359.631-360.184-356.603 59.522-59.93 420.207 416.043z"  horiz-adv-x="1024" />
30
+      
31
+      <glyph glyph-name="weixin" unicode="&#59143;" d="M684.2624 559.360922c10.256998 0 20.405555-0.753152 30.472294-1.873715C687.354982 684.973773 551.049933 779.695104 395.467162 779.695104c-173.940736 0-316.424704-118.557184-316.424704-269.103923 0-86.8992 47.403622-158.259405 126.61801-213.608038l-31.648051-95.184896 110.615859 55.468339c39.581082-7.834419 71.337677-15.888896 110.837965-15.888896 9.929523 0 19.775181 0.490189 29.539021 1.257677-6.182093 21.154816-9.763738 43.312435-9.763738 66.302054C415.242342 447.174861 533.955994 559.360922 684.2624 559.360922zM514.125517 645.150822c23.825613 0 39.60873-15.673958 39.60873-39.484314 0-23.715123-15.783117-39.607091-39.60873-39.607091-23.716147 0-47.513088 15.891968-47.513088 39.607091C466.612429 629.477888 490.40937 645.150822 514.125517 645.150822zM292.671693 566.060544c-23.713075 0-47.648154 15.891968-47.648154 39.607091 0 23.810253 23.934054 39.484314 47.648154 39.484314 23.715123 0 39.499264-15.673958 39.499264-39.484314C332.170957 581.95241 316.386816 566.060544 292.671693 566.060544zM973.059686 312.739021c0 126.504141-126.593434 229.620736-268.773478 229.620736-150.553088 0-269.128499-103.116493-269.128499-229.620736 0-126.72215 118.576538-229.620736 269.128499-229.620736 31.510938 0 63.294157 7.945933 94.942208 15.877632l86.79127-47.525376-23.796941 79.073894C925.73696 178.193715 973.059686 241.378714 973.059686 312.739021zM617.027379 352.331776c-15.755469 0-31.648051 15.673958-31.648051 31.661056 0 15.766118 15.892582 31.643648 31.648051 31.643648 23.934054 0 39.60873-15.877632 39.60873-31.643648C656.636109 368.005734 640.961434 352.331776 617.027379 352.331776zM791.077581 352.331776c-15.647027 0-31.430144 15.673958-31.430144 31.661056 0 15.766118 15.783117 31.643648 31.430144 31.643648 23.715123 0 39.605658-15.877632 39.605658-31.643648C830.684262 368.005734 814.793626 352.331776 791.077581 352.331776z"  horiz-adv-x="1024" />
32
+      
33
+      <glyph glyph-name="weibo" unicode="&#58905;" d="M721.989632 427.966464c-33.468416 6.36928-17.53088 24.694784-17.53088 24.694784s32.671744 54.194176-6.381568 93.247488c-48.607232 48.607232-166.549504-6.383616-166.549504-6.383616-44.627968-13.549568-32.669696 6.383616-26.302464 41.44128 0 40.644608-14.342144 109.96736-134.674432 68.524032-119.535616-40.63232-222.337024-184.875008-222.337024-184.875008-71.723008-95.62112-62.1568-168.937472-62.1568-168.937472 17.528832-163.364864 191.258624-207.992832 325.933056-218.353664 141.85472-11.159552 333.099008 48.605184 391.272448 172.136448C861.442048 372.975616 755.456 421.582848 721.989632 427.966464L721.989632 427.966464zM422.356992 122.748928c-141.058048-6.367232-255.00672 64.54272-255.00672 158.58688 0 94.029824 113.948672 168.93952 255.00672 175.321088 141.04576 6.367232 255.004672-51.009536 255.004672-145.03936C677.361664 217.571328 563.402752 129.130496 422.356992 122.748928L422.356992 122.748928zM394.463232 395.282432c-141.85472-16.734208-125.917184-149.815296-125.917184-149.815296s-0.796672-41.428992 38.258688-62.951424c82.88256-44.623872 168.142848-17.528832 211.175424 37.462016C561.012736 275.748864 536.303616 411.219968 394.463232 395.282432L394.463232 395.282432zM358.59456 208.816128c-26.28608-3.18464-47.81056 11.956224-47.81056 34.260992 0 22.319104 19.134464 45.422592 45.422592 47.81056 30.281728 3.198976 50.212864-14.342144 50.212864-36.651008C406.419456 231.917568 384.897024 212.000768 358.59456 208.816128L358.59456 208.816128zM442.27584 279.744512c-9.568256-6.383616-19.918848-5.588992-24.70912 2.387968-5.572608 7.962624-3.18464 20.713472 5.586944 27.09504 10.350592 7.962624 21.510144 5.574656 26.300416-2.400256C454.230016 298.866688 450.250752 286.908416 442.27584 279.744512L442.27584 279.744512zM791.324672 485.330944c11.145216 0 20.713472 8.771584 22.306816 19.931136 0 0.796672 0.796672 1.591296 0.796672 2.387968 16.734208 155.389952-127.496192 128.305152-127.496192 128.305152-12.752896 0-23.115776-10.36288-23.115776-23.117824 0-12.750848 10.364928-23.115776 23.115776-23.115776 103.583744 23.115776 80.480256-81.276928 80.480256-81.276928C767.410176 495.693824 777.775104 485.330944 791.324672 485.330944L791.324672 485.330944zM773.781504 756.314112c-49.403904 11.941888-101.195776 1.970176-115.539968-1.214464-0.796672 0-2.404352-0.600064-3.198976-0.600064-0.796672 0-0.796672-0.698368-0.796672-0.698368-14.34624-3.995648-24.696832-17.487872-24.696832-32.628736 0-18.325504 15.140864-33.452032 33.466368-33.452032 0 0 18.325504 2.402304 31.0784 7.192576 11.956224 4.775936 115.554304 3.198976 167.346176-82.868224 27.89376-62.951424 11.956224-105.189376 10.36288-112.367616 0 0-7.17824-15.939584-7.17824-32.673792 0-18.325504 15.140864-31.049728 34.275328-31.049728 15.142912 0 28.690432-0.755712 31.873024 27.916288l0.796672 0C986.56256 660.48 863.830016 735.586304 773.781504 756.314112L773.781504 756.314112z"  horiz-adv-x="1024" />
34
+      
35
+      <glyph glyph-name="jiantou" unicode="&#58938;" d="M548.352 654.848L716.8 486.4a32.768 32.768 0 0 0 0-46.592 30.72 30.72 0 0 0-45.568 0l-116.736 115.2v-464.896a32.768 32.768 0 1 0-65.024 0V555.008L372.736 435.2a39.424 39.424 0 0 0-45.568 6.656 32.768 32.768 0 0 0 0 46.592l162.816 166.4a35.328 35.328 0 0 0 58.368 0z"  horiz-adv-x="1024" />
36
+      
37
+      <glyph glyph-name="kuaishou" unicode="&#58967;" d="M461.15 335.04c4.59 0.27 325.27 26.47 346.62 23.05 21.34-3.41 106.73-0.87 110.99-34.15 4.2-32.87 0-64.88 0-64.88s-189.53-33.3-193.8-37.56c-4.27-4.27-19.64-19.64-18.78-42.69 0.85-23.05 0.85-112.69 1.71-115.25 0.85-2.56 5.12-19.64 37.56-16.22 25.52 2.69 51.04 11.71 60.77 15.44a5.926 5.926 0 0 1 3.79 6.01l-1.73 23.05c-0.27 3.57-3.61 6.11-7.12 5.4l-48.88-9.78v92.2l158.35 28.72c3.39 0.61 6.53-1.92 6.64-5.36l5.28-156.14s9.01-38.82-57.58-52.48-226.24-53.79-241.61-54.64c-15.37-0.85-40.98-0.85-67.45 5.98-18.69 4.82-41.64 13.48-53.51 18.15-4.05 1.59-5.46 6.58-2.89 10.09l58.24 79.15c2.13 2.9 3.28 6.4 3.28 9.99v87.35c0 4.5-1.73 8.82-4.83 12.08L431.52 293.59a15.695 15.695 0 0 0-4.15 13.2c1.57 10.36 8.14 26.74 33.78 28.25zM376.75 281.45a14.04 14.04 0 0 1-8.05 4.12L144.72 318.4c-3.15 0.6-6.39 0.25-9.29-1.1-9.74-4.51-31.13-17.97-37.98-51.21v-263.17s3.2-52.51 75.56-76.84 160.72-46.1 160.72-46.1 49.3-9.6 69.15 30.73c19.85 40.34 114.61 155.59 114.61 155.59v69.79L376.75 281.45z m-58.38-313.73c-23.05 0.64-117.02 13.55-146.63 40.34-26.89 24.33-13.45 215.78-13.45 215.78s0.48 22.19 13.45 19.85l149.19-26.89s18.57-10.89 18.57-26.25v-206.82s1.92-16.65-21.13-16.01z m637.42 612.13c0 102.2-78.91 185.05-176.24 185.05-55.52 0-105.01-26.98-137.32-69.1C616.44 807.27 523.96 889.78 413.79 889.78c-130.13 0-235.62-115.1-235.62-257.09 0-141.99 105.49-257.09 235.62-257.09 6.86 0 13.63 0.43 20.34 1.06l352.06 18.33c1.55 0.06 3.1 0.14 4.64 0.24l4.91 0.26-0.12 0.13c89.8 8.52 160.17 87.73 160.17 184.23z m-497.02-91.56c-65.85 0-119.24 61.44-119.24 137.24 0 75.79 53.39 137.24 119.24 137.24s119.24-61.44 119.24-137.24c0-75.8-53.38-137.24-119.24-137.24z m348.78 6.4c-43.42 0-78.63 40.52-78.63 90.5s35.2 90.5 78.63 90.5c43.42 0 78.63-40.52 78.63-90.5s-35.21-90.5-78.63-90.5z"  horiz-adv-x="1024" />
38
+      
39
+      <glyph glyph-name="douyin" unicode="&#58880;" d="M937.4 472.1c-84 0-165.7 27.3-232.9 77.8v-352.3c0-179.9-138.6-325.6-309.6-325.6S85.3 17.700000000000045 85.3 197.60000000000002c0 179.9 138.6 325.6 309.6 325.6 17.1 0 33.7-1.5 49.9-4.3v-186.6c-15.5 6.1-32 9.2-48.6 9.2-76.3 0-138.2-65-138.2-145.3 0-80.2 61.9-145.3 138.2-145.3 76.2 0 138.1 65.1 138.1 145.3V896H707c0-134.5 103.7-243.5 231.6-243.5v-180.3l-1.2-0.1"  horiz-adv-x="1024" />
40
+      
41
+    </font>
42
+  </defs>
43
+</svg>

Binär
dev/static/font/iconfont.ttf Visa fil


Binär
dev/static/font/iconfont.woff Visa fil


Binär
dev/static/font/iconfont.woff2 Visa fil


Binär
dev/static/images/about/five.jpg Visa fil


Binär
dev/static/images/about/fivem.jpg Visa fil


Binär
dev/static/images/about/one1.jpg Visa fil


Binär
dev/static/images/about/three.jpg Visa fil


Binär
dev/static/images/about/threem.jpg Visa fil


Binär
dev/static/images/about/two1.jpg Visa fil


+ 1
- 0
dev/static/images/icon-1.svg Visa fil

@@ -0,0 +1 @@
1
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1679477930257" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2765" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M917.284001 297.722752c-5.406127-5.437849-13.06762-8.396227-21.479197-8.396227-9.611915 0-18.953677 3.844561-25.713638 10.543124L511.980046 659.992589 153.873018 299.91672c-6.729262-6.745634-16.072047-10.619872-25.654286-10.619872-8.470929 0-16.131399 2.989077-21.598924 8.457626-12.301164 12.435217-11.32493 33.69031 2.192945 47.312562l376.764969 378.821815c6.758937 6.788613 15.860223 10.723226 25.052582 10.8143l3.425006 0c8.981559-0.301875 17.814738-4.205788 24.423249-10.8143l376.733247-378.852514C928.728658 331.382363 929.690566 310.113967 917.284001 297.722752" fill="#fff" p-id="2766"></path></svg>

+ 1
- 0
dev/static/images/icon.svg Visa fil

@@ -0,0 +1 @@
1
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1679477930257" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2765" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M917.284001 297.722752c-5.406127-5.437849-13.06762-8.396227-21.479197-8.396227-9.611915 0-18.953677 3.844561-25.713638 10.543124L511.980046 659.992589 153.873018 299.91672c-6.729262-6.745634-16.072047-10.619872-25.654286-10.619872-8.470929 0-16.131399 2.989077-21.598924 8.457626-12.301164 12.435217-11.32493 33.69031 2.192945 47.312562l376.764969 378.821815c6.758937 6.788613 15.860223 10.723226 25.052582 10.8143l3.425006 0c8.981559-0.301875 17.814738-4.205788 24.423249-10.8143l376.733247-378.852514C928.728658 331.382363 929.690566 310.113967 917.284001 297.722752" fill="#666" p-id="2766"></path></svg>

Binär
dev/static/images/index/banner1.jpg Visa fil


Binär
dev/static/images/index/banner1m.jpg Visa fil


Binär
dev/static/images/index/car1.png Visa fil


Binär
dev/static/images/index/five.png Visa fil


Binär
dev/static/images/index/five_ma.png Visa fil


Binär
dev/static/images/index/five_phone.png Visa fil


Binär
dev/static/images/index/four.jpg Visa fil


Binär
dev/static/images/index/four1.jpg Visa fil


Binär
dev/static/images/index/four2.jpg Visa fil


Binär
dev/static/images/index/four3.jpg Visa fil


Binär
dev/static/images/index/four4.jpg Visa fil


Binär
dev/static/images/index/four5.jpg Visa fil


Binär
dev/static/images/index/three.jpg Visa fil


Binär
dev/static/images/index/twol1.jpg Visa fil


Binär
dev/static/images/index/twolbg.jpg Visa fil


Binär
dev/static/images/index/twor1.jpg Visa fil


Binär
dev/static/images/index/twor2.jpg Visa fil


Binär
dev/static/images/index/twor3.jpg Visa fil


Binär
dev/static/images/index/twor4.jpg Visa fil


Binär
dev/static/images/news/news1.png Visa fil


Binär
dev/static/images/product/product1.png Visa fil


Binär
dev/static/images/product/product2.png Visa fil


Binär
dev/static/images/product/product3.png Visa fil


Binär
dev/static/images/product/product4.png Visa fil


Binär
dev/static/images/product/product5.png Visa fil


Binär
dev/static/images/product/product6.png Visa fil


Binär
dev/static/images/product/product_banner1.png Visa fil


Binär
dev/static/images/serve/five.jpg Visa fil


Binär
dev/static/images/serve/servebk.jpg Visa fil


Binär
dev/static/images/serve/servebkm.jpg Visa fil


Binär
dev/static/images/serve/two1.jpg Visa fil


Binär
dev/static/images/serve/two2.jpg Visa fil


Binär
dev/static/images/serve/twos1.jpg Visa fil


Binär
dev/static/images/wx.png Visa fil


+ 500
- 0
dev/static/json/carDetail.json Visa fil

@@ -0,0 +1,500 @@
1
+{
2
+  "data": [
3
+    {
4
+      "data": [
5
+        {
6
+          "data": [
7
+            {
8
+              "name": "品牌",
9
+              "value": "萨瓦纳"
10
+            },
11
+            {
12
+              "name": "系列",
13
+              "value": "萨瓦纳VX3"
14
+            },
15
+            {
16
+              "name": "版本",
17
+              "value": "尊享型"
18
+            },
19
+            {
20
+              "name": "用途",
21
+              "value": "家用座驾"
22
+            },
23
+            {
24
+              "name": "驱动型式",
25
+              "value": "4×4"
26
+            },
27
+            {
28
+              "name": "发动机型号",
29
+              "value": "4G20TI3"
30
+            },
31
+            {
32
+              "name": "轴距(mm)",
33
+              "value": 2790
34
+            }
35
+          ],
36
+          "name": "基本信息"
37
+        },
38
+        {
39
+          "data": [
40
+            {
41
+              "name": "发动机生产厂家",
42
+              "value": "北汽福田汽车股份有限公司"
43
+            },
44
+            {
45
+              "name": "发动机型号",
46
+              "value": "4G20TI3"
47
+            },
48
+            {
49
+              "name": "发动机排放",
50
+              "value": "国Ⅴ"
51
+            },
52
+            {
53
+              "name": "燃油种类",
54
+              "value": "柴油"
55
+            }
56
+          ],
57
+          "name": "发动机"
58
+        },
59
+        {
60
+          "data": [
61
+            {
62
+              "name": "变速器型号",
63
+              "value": "6HP21"
64
+            },
65
+            {
66
+              "name": "变速器型式",
67
+              "value": "AT"
68
+            }
69
+          ],
70
+          "name": "变速箱"
71
+        },
72
+        {
73
+          "data": [
74
+            {
75
+              "name": "驾驶室",
76
+              "value": "五座版"
77
+            },
78
+            {
79
+              "name": "仪表板",
80
+              "value": "普通仪表板(连体中平台)"
81
+            }
82
+          ],
83
+          "name": "内部配置"
84
+        },
85
+        {
86
+          "data": [
87
+            {
88
+              "name": "轮胎",
89
+              "value": "265/65R17"
90
+            },
91
+            {
92
+              "name": "前制动器",
93
+              "value": "盘式"
94
+            },
95
+            {
96
+              "name": "后制动器",
97
+              "value": "盘式"
98
+            },
99
+            {
100
+              "name": "驻车制动型式",
101
+              "value": "轮边手制动"
102
+            }
103
+          ],
104
+          "name": "车轮制动"
105
+        },
106
+        {
107
+          "data": [
108
+            {
109
+              "name": "转向系统",
110
+              "value": "动力转向-"
111
+            },
112
+            {
113
+              "name": "驱动型式",
114
+              "value": "4×4"
115
+            },
116
+            {
117
+              "name": "轴距(mm)",
118
+              "value": 2790
119
+            }
120
+          ],
121
+          "name": "底盘及转向"
122
+        }
123
+      ],
124
+      "price": "178800.00",
125
+      "name": "萨瓦纳 2017款  2.0T 四驱汽油尊享版5座"
126
+    },
127
+    {
128
+      "data": [
129
+        {
130
+          "data": [
131
+            {
132
+              "name": "品牌",
133
+              "value": "萨瓦纳"
134
+            },
135
+            {
136
+              "name": "系列",
137
+              "value": "萨瓦纳VX3"
138
+            },
139
+            {
140
+              "name": "版本",
141
+              "value": "尊享型"
142
+            },
143
+            {
144
+              "name": "用途",
145
+              "value": "家用座驾"
146
+            },
147
+            {
148
+              "name": "驱动型式",
149
+              "value": "4×4"
150
+            },
151
+            {
152
+              "name": "发动机型号",
153
+              "value": "4G20TI3"
154
+            },
155
+            {
156
+              "name": "轴距(mm)",
157
+              "value": 2790
158
+            }
159
+          ],
160
+          "name": "基本信息"
161
+        },
162
+        {
163
+          "data": [
164
+            {
165
+              "name": "发动机生产厂家",
166
+              "value": "北汽福田汽车股份有限公司"
167
+            },
168
+            {
169
+              "name": "发动机型号",
170
+              "value": "4G20TI3"
171
+            },
172
+            {
173
+              "name": "发动机排放",
174
+              "value": "国Ⅴ"
175
+            },
176
+            {
177
+              "name": "燃油种类",
178
+              "value": "柴油"
179
+            }
180
+          ],
181
+          "name": "发动机"
182
+        },
183
+        {
184
+          "data": [
185
+            {
186
+              "name": "变速器型号",
187
+              "value": "6HP21"
188
+            },
189
+            {
190
+              "name": "变速器型式",
191
+              "value": "AT"
192
+            }
193
+          ],
194
+          "name": "变速箱"
195
+        },
196
+        {
197
+          "data": [
198
+            {
199
+              "name": "驾驶室",
200
+              "value": "七座版"
201
+            },
202
+            {
203
+              "name": "仪表板",
204
+              "value": "普通仪表板(连体中平台)"
205
+            }
206
+          ],
207
+          "name": "内部配置"
208
+        },
209
+        {
210
+          "data": [
211
+            {
212
+              "name": "轮胎",
213
+              "value": "265/65R17"
214
+            },
215
+            {
216
+              "name": "前制动器",
217
+              "value": "盘式"
218
+            },
219
+            {
220
+              "name": "后制动器",
221
+              "value": "盘式"
222
+            },
223
+            {
224
+              "name": "驻车制动型式",
225
+              "value": "轮边手制动"
226
+            }
227
+          ],
228
+          "name": "车轮制动"
229
+        },
230
+        {
231
+          "data": [
232
+            {
233
+              "name": "转向系统",
234
+              "value": "动力转向-"
235
+            },
236
+            {
237
+              "name": "驱动型式",
238
+              "value": "4×4"
239
+            },
240
+            {
241
+              "name": "轴距(mm)",
242
+              "value": 2790
243
+            }
244
+          ],
245
+          "name": "底盘及转向"
246
+        }
247
+      ],
248
+      "price": "182800.00",
249
+      "name": "萨瓦纳 2017款  2.0T 四驱汽油尊享版7座"
250
+    },
251
+    {
252
+      "data": [
253
+        {
254
+          "data": [
255
+            {
256
+              "name": "品牌",
257
+              "value": "萨瓦纳"
258
+            },
259
+            {
260
+              "name": "系列",
261
+              "value": "萨瓦纳VX3"
262
+            },
263
+            {
264
+              "name": "版本",
265
+              "value": "至尊版"
266
+            },
267
+            {
268
+              "name": "用途",
269
+              "value": "家用座驾"
270
+            },
271
+            {
272
+              "name": "驱动型式",
273
+              "value": "4×4"
274
+            },
275
+            {
276
+              "name": "发动机型号",
277
+              "value": "4G20TI3"
278
+            },
279
+            {
280
+              "name": "轴距(mm)",
281
+              "value": 2790
282
+            }
283
+          ],
284
+          "name": "基本信息"
285
+        },
286
+        {
287
+          "data": [
288
+            {
289
+              "name": "发动机生产厂家",
290
+              "value": "北汽福田汽车股份有限公司"
291
+            },
292
+            {
293
+              "name": "发动机型号",
294
+              "value": "4G20TI3"
295
+            },
296
+            {
297
+              "name": "发动机排放",
298
+              "value": "国Ⅴ"
299
+            },
300
+            {
301
+              "name": "燃油种类",
302
+              "value": "柴油"
303
+            }
304
+          ],
305
+          "name": "发动机"
306
+        },
307
+        {
308
+          "data": [
309
+            {
310
+              "name": "变速器型号",
311
+              "value": "6HP21"
312
+            },
313
+            {
314
+              "name": "变速器型式",
315
+              "value": "AT"
316
+            }
317
+          ],
318
+          "name": "变速箱"
319
+        },
320
+        {
321
+          "data": [
322
+            {
323
+              "name": "驾驶室",
324
+              "value": "五座版"
325
+            },
326
+            {
327
+              "name": "仪表板",
328
+              "value": "普通仪表板(连体中平台)"
329
+            }
330
+          ],
331
+          "name": "内部配置"
332
+        },
333
+        {
334
+          "data": [
335
+            {
336
+              "name": "轮胎",
337
+              "value": "265/65R17"
338
+            },
339
+            {
340
+              "name": "前制动器",
341
+              "value": "盘式"
342
+            },
343
+            {
344
+              "name": "后制动器",
345
+              "value": "盘式"
346
+            },
347
+            {
348
+              "name": "驻车制动型式",
349
+              "value": "轮边手制动"
350
+            }
351
+          ],
352
+          "name": "车轮制动"
353
+        },
354
+        {
355
+          "data": [
356
+            {
357
+              "name": "转向系统",
358
+              "value": "动力转向-"
359
+            },
360
+            {
361
+              "name": "驱动型式",
362
+              "value": "4×4"
363
+            },
364
+            {
365
+              "name": "轴距(mm)",
366
+              "value": 2790
367
+            }
368
+          ],
369
+          "name": "底盘及转向"
370
+        }
371
+      ],
372
+      "price": "182800.00",
373
+      "name": "萨瓦纳 2017款  2.0T 四驱汽油至尊版5座"
374
+    },
375
+    {
376
+      "data": [
377
+        {
378
+          "data": [
379
+            {
380
+              "name": "品牌",
381
+              "value": "萨瓦纳"
382
+            },
383
+            {
384
+              "name": "系列",
385
+              "value": "萨瓦纳VX3"
386
+            },
387
+            {
388
+              "name": "版本",
389
+              "value": "至尊版"
390
+            },
391
+            {
392
+              "name": "用途",
393
+              "value": "日常代步载物车"
394
+            },
395
+            {
396
+              "name": "驱动型式",
397
+              "value": "4×4"
398
+            },
399
+            {
400
+              "name": "发动机型号",
401
+              "value": "4G20TI3"
402
+            },
403
+            {
404
+              "name": "轴距(mm)",
405
+              "value": 2790
406
+            }
407
+          ],
408
+          "name": "基本信息"
409
+        },
410
+        {
411
+          "data": [
412
+            {
413
+              "name": "发动机生产厂家",
414
+              "value": "北汽福田汽车股份有限公司"
415
+            },
416
+            {
417
+              "name": "发动机型号",
418
+              "value": "4G20TI3"
419
+            },
420
+            {
421
+              "name": "发动机排放",
422
+              "value": "国Ⅴ"
423
+            },
424
+            {
425
+              "name": "燃油种类",
426
+              "value": "柴油"
427
+            }
428
+          ],
429
+          "name": "发动机"
430
+        },
431
+        {
432
+          "data": [
433
+            {
434
+              "name": "变速器型号",
435
+              "value": "6HP21"
436
+            },
437
+            {
438
+              "name": "变速器型式",
439
+              "value": "AT"
440
+            }
441
+          ],
442
+          "name": "变速箱"
443
+        },
444
+        {
445
+          "data": [
446
+            {
447
+              "name": "驾驶室",
448
+              "value": "七座版"
449
+            },
450
+            {
451
+              "name": "仪表板",
452
+              "value": "普通仪表板(连体中平台)"
453
+            }
454
+          ],
455
+          "name": "内部配置"
456
+        },
457
+        {
458
+          "data": [
459
+            {
460
+              "name": "轮胎",
461
+              "value": "265/65R17"
462
+            },
463
+            {
464
+              "name": "前制动器",
465
+              "value": "盘式"
466
+            },
467
+            {
468
+              "name": "后制动器",
469
+              "value": "盘式"
470
+            },
471
+            {
472
+              "name": "驻车制动型式",
473
+              "value": "轮边手制动"
474
+            }
475
+          ],
476
+          "name": "车轮制动"
477
+        },
478
+        {
479
+          "data": [
480
+            {
481
+              "name": "转向系统",
482
+              "value": "动力转向-"
483
+            },
484
+            {
485
+              "name": "驱动型式",
486
+              "value": "4×4"
487
+            },
488
+            {
489
+              "name": "轴距(mm)",
490
+              "value": 2790
491
+            }
492
+          ],
493
+          "name": "底盘及转向"
494
+        }
495
+      ],
496
+      "price": "186800.00",
497
+      "name": "萨瓦纳 2017款  2.0T 四驱汽油至尊版7座"
498
+    }
499
+  ]
500
+}

+ 1132
- 0
dev/static/json/custom_map_config.json
Filskillnaden har hållits tillbaka eftersom den är för stor
Visa fil


+ 175
- 0
dev/static/json/getProvince.json Visa fil

@@ -0,0 +1,175 @@
1
+{
2
+    "status": 0,
3
+    "data": [
4
+        {
5
+            "dmpId": "b48ff4c1-0ef1-4ae2-b225-9607e5403973",
6
+            "id": "79",
7
+            "provinceName": "安徽省"
8
+        },
9
+        {
10
+            "dmpId": "4720b1ab-2c54-4483-9949-85dbe26d70e9",
11
+            "id": "70",
12
+            "provinceName": "澳门特别行政区"
13
+        },
14
+        {
15
+            "dmpId": "8b31d63f-d4f7-4ad9-a8ae-2e44785f8a92",
16
+            "id": "69",
17
+            "provinceName": "北京市"
18
+        },
19
+        {
20
+            "dmpId": "1132b8f8-1842-4bad-8dd3-fe1545173e5f",
21
+            "id": "83",
22
+            "provinceName": "福建省"
23
+        },
24
+        {
25
+            "dmpId": "09e3bfd6-55cd-4c83-919d-a9e57cb9a45e",
26
+            "id": "94",
27
+            "provinceName": "甘肃省"
28
+        },
29
+        {
30
+            "dmpId": "58495ad8-71d9-40d0-93fa-faacaa81e39b",
31
+            "id": "87",
32
+            "provinceName": "广东省"
33
+        },
34
+        {
35
+            "dmpId": "53c3559c-0eb9-4bd1-8bce-8cab2306c31f",
36
+            "id": "89",
37
+            "provinceName": "广西壮族自治区"
38
+        },
39
+        {
40
+            "dmpId": "81dcc255-a603-41a1-910b-975838c0238f",
41
+            "id": "90",
42
+            "provinceName": "贵州省"
43
+        },
44
+        {
45
+            "dmpId": "729444c5-2c11-4577-a648-d0abe1ab0898",
46
+            "id": "88",
47
+            "provinceName": "海南省"
48
+        },
49
+        {
50
+            "dmpId": "e06e867c-83c3-47d3-afda-ec9edea6fe2d",
51
+            "id": "74",
52
+            "provinceName": "河北省"
53
+        },
54
+        {
55
+            "dmpId": "c6a8d32a-72f5-48f0-8b54-9c158c6ac9d9",
56
+            "id": "86",
57
+            "provinceName": "河南省"
58
+        },
59
+        {
60
+            "dmpId": "d095cd02-0411-4f84-bb7d-920c922f3770",
61
+            "id": "77",
62
+            "provinceName": "黑龙江省"
63
+        },
64
+        {
65
+            "dmpId": "3f71bb32-d5cd-4e49-8725-3539e0ea7890",
66
+            "id": "85",
67
+            "provinceName": "湖北省"
68
+        },
69
+        {
70
+            "dmpId": "396cd2a4-4bf6-4a1b-a461-7bbb8b919854",
71
+            "id": "84",
72
+            "provinceName": "湖南省"
73
+        },
74
+        {
75
+            "dmpId": "6299c992-0ebf-42e1-8a08-2069a2f89a1c",
76
+            "id": "76",
77
+            "provinceName": "吉林省"
78
+        },
79
+        {
80
+            "dmpId": "61faa23f-3147-4af8-a4f9-2326638d21b6",
81
+            "id": "78",
82
+            "provinceName": "江苏省"
83
+        },
84
+        {
85
+            "dmpId": "05272271-a6f3-41eb-8cef-98a6a8e1994d",
86
+            "id": "82",
87
+            "provinceName": "江西省"
88
+        },
89
+        {
90
+            "dmpId": "abc673bc-2307-4ba6-9601-4232737d414f",
91
+            "id": "75",
92
+            "provinceName": "辽宁省"
93
+        },
94
+        {
95
+            "dmpId": "47d05ee4-4842-463e-86bc-d771adc5e723",
96
+            "id": "72",
97
+            "provinceName": "内蒙古自治区"
98
+        },
99
+        {
100
+            "dmpId": "282353e1-7f9c-4e36-aee9-1621528c25a6",
101
+            "id": "95",
102
+            "provinceName": "宁夏回族自治区"
103
+        },
104
+        {
105
+            "dmpId": "aebce5d1-2684-430e-92e7-ede38cfc7508",
106
+            "id": "96",
107
+            "provinceName": "青海省"
108
+        },
109
+        {
110
+            "dmpId": "4e00ea12-a40d-4d9a-8a7b-7ecca8f80ec6",
111
+            "id": "80",
112
+            "provinceName": "山东省"
113
+        },
114
+        {
115
+            "dmpId": "051e3a2e-7756-4940-b300-3b779ae744f4",
116
+            "id": "73",
117
+            "provinceName": "山西省"
118
+        },
119
+        {
120
+            "dmpId": "925582bd-369e-4cae-8fab-0f4f5baffbb7",
121
+            "id": "93",
122
+            "provinceName": "陕西省"
123
+        },
124
+        {
125
+            "dmpId": "3909c717-0f09-439d-9168-0a262260af3e",
126
+            "id": "102",
127
+            "provinceName": "上海市"
128
+        },
129
+        {
130
+            "dmpId": "18ed1838-80c9-4b54-9e5f-a3e5980639b4",
131
+            "id": "91",
132
+            "provinceName": "四川省"
133
+        },
134
+        {
135
+            "dmpId": "53c43b53-de03-4dc4-bd12-caa0efa91721",
136
+            "id": "99",
137
+            "provinceName": "台湾省"
138
+        },
139
+        {
140
+            "dmpId": "4e2d8653-5b8f-464e-aa7b-da718a9e0457",
141
+            "id": "71",
142
+            "provinceName": "天津市"
143
+        },
144
+        {
145
+            "dmpId": "eebb25d8-20ad-4a7f-9222-203f0b139d27",
146
+            "id": "98",
147
+            "provinceName": "西藏自治区"
148
+        },
149
+        {
150
+            "dmpId": "d690749f-b78b-4a10-abad-4ee2672606e7",
151
+            "id": "101",
152
+            "provinceName": "香港特别行政区"
153
+        },
154
+        {
155
+            "dmpId": "fa000574-fe60-43ca-9fbc-f9ae7261a237",
156
+            "id": "97",
157
+            "provinceName": "新疆维吾尔自治区"
158
+        },
159
+        {
160
+            "dmpId": "452b846b-01c1-4e9c-823b-58013f9a4f7c",
161
+            "id": "92",
162
+            "provinceName": "云南省"
163
+        },
164
+        {
165
+            "dmpId": "8421df1b-3899-4085-bd84-5fe7d1f6ae59",
166
+            "id": "81",
167
+            "provinceName": "浙江省"
168
+        },
169
+        {
170
+            "dmpId": "93d6253a-61ec-427e-b2e6-aaff555e4dbf",
171
+            "id": "100",
172
+            "provinceName": "重庆市"
173
+        }
174
+    ]
175
+}

+ 110
- 0
dev/static/json/lbsArea.json Visa fil

@@ -0,0 +1,110 @@
1
+[
2
+    {
3
+        "北京市": 8
4
+    },
5
+    {
6
+        "天津市": 8
7
+    },
8
+    {
9
+        "河北": 8
10
+    },
11
+    {
12
+        "山西": 8
13
+    },
14
+    {
15
+        "内蒙古": 8
16
+    },
17
+    {
18
+        "辽宁":""
19
+    },
20
+    {
21
+        "吉林": 824
22
+    },
23
+    {
24
+        "黑龙江": 829
25
+    },
26
+    {
27
+        "上海市": 12
28
+    },
29
+    {
30
+        "江苏": 10
31
+    },
32
+    {
33
+        "浙江": 10
34
+    },
35
+    {
36
+        "安徽": 10
37
+    },
38
+    {
39
+        "福建": 10
40
+    },
41
+    {
42
+        "江西": 824
43
+    },
44
+    {
45
+        "山东": 824
46
+    },
47
+    {
48
+        "河南省": 12
49
+    },
50
+    {
51
+        "湖北": 829
52
+    },
53
+    {
54
+        "湖南": 829
55
+    },
56
+    {
57
+        "广东": 829
58
+    },
59
+    {
60
+        "广西": ""
61
+    },
62
+    {
63
+        "海南": 829
64
+    },
65
+    {
66
+        "重庆市": ""
67
+    },
68
+    {
69
+        "四川": ""
70
+    },
71
+    {
72
+        "贵州": 12
73
+    },
74
+    {
75
+        "云南": ""
76
+    },
77
+    {
78
+        "西藏": ""
79
+    },
80
+    {
81
+        "陕西": ""
82
+    },
83
+    {
84
+        "甘肃": ""
85
+    },
86
+    {
87
+        "青海": ""
88
+    },
89
+    {
90
+        "宁夏": ""
91
+    },
92
+    {
93
+        "新疆": 824
94
+    },
95
+    {
96
+        "台湾": ""
97
+    },
98
+    {
99
+        "香港": ""
100
+    },
101
+    {
102
+        "澳门": ""
103
+    },
104
+    {
105
+        "美国": ""
106
+    },
107
+    {
108
+        "英国": ""
109
+    }
110
+]

+ 690
- 0
dev/static/json/mPmsInfo.json Visa fil

@@ -0,0 +1,690 @@
1
+[
2
+    {"x":233.53, "y":116.18
3
+    },
4
+    {"x":273.84, "y":61.35
5
+    },
6
+    {"x":198.74, "y":207.03
7
+    },
8
+    {"x":227.16, "y":164.85
9
+    },
10
+    {"x":204.82, "y":119.74
11
+    },
12
+    {"x":241.46, "y":138.41
13
+    },
14
+    {"x":241.95, "y":136.89
15
+    },
16
+    {"x":228.12, "y":153.14
17
+    },
18
+    {"x":214.01, "y":181.98
19
+    },
20
+    {"x":229.26, "y":105.38
21
+    },
22
+    {"x":183.79, "y":105.11
23
+    },
24
+    {"x":212.21, "y":184.36
25
+    },
26
+    {"x":176.74, "y":115.44
27
+    },
28
+    {"x":205.73, "y":114.94
29
+    },
30
+    {"x":229.41, "y":117.89
31
+    },
32
+    {"x":165.85, "y":177.45
33
+    },
34
+    {"x":250.61, "y":91.3
35
+    },
36
+    {"x":234.94, "y":153.53
37
+    },
38
+    {"x":166.43, "y":161.49
39
+    },
40
+    {"x":211.53, "y":86.63
41
+    },
42
+    {"x":189.42, "y":93.86
43
+    },
44
+    {"x":121.78, "y":71.4
45
+    },
46
+    {"x":178.45, "y":146.95
47
+    },
48
+    {"x":221.46, "y":146.73
49
+    },
50
+    {"x":205.85, "y":180.82
51
+    },
52
+    {"x":220.66, "y":124.69
53
+    },
54
+    {"x":266.65, "y":51.08
55
+    },
56
+    {"x":100.05, "y":71.06
57
+    },
58
+    {"x":211.38, "y":181.64
59
+    },
60
+    {"x":272.51, "y":58.85
61
+    },
62
+    {"x":219.72, "y":98.23
63
+    },
64
+    {"x":162.66, "y":170.91
65
+    },
66
+    {"x":215.22, "y":133.69
67
+    },
68
+    {"x":112.82, "y":62.41
69
+    },
70
+    {"x":223.65, "y":135.62
71
+    },
72
+    {"x":182.46, "y":163.08
73
+    },
74
+    {"x":179.09, "y":112.85
75
+    },
76
+    {"x":242.56, "y":59.66
77
+    },
78
+    {"x":183.26, "y":147.28
79
+    },
80
+    {"x":173.13, "y":156.11
81
+    },
82
+    {"x":199.89, "y":88.41
83
+    },
84
+    {"x":225.41, "y":91.1
85
+    },
86
+    {"x":224.3, "y":90.11
87
+    },
88
+    {"x":197.68, "y":190.05
89
+    },
90
+    {"x":203.21, "y":131.07
91
+    },
92
+    {"x":231.44, "y":135.26
93
+    },
94
+    {"x":186.56, "y":140.92
95
+    },
96
+    {"x":194.57, "y":182.62
97
+    },
98
+    {"x":226.79, "y":159.12
99
+    },
100
+    {"x":221.19, "y":152.43
101
+    },
102
+    {"x":238.59, "y":134.14
103
+    },
104
+    {"x":209.05, "y":128.99
105
+    },
106
+    {"x":102.83, "y":66.27
107
+    },
108
+    {"x":229.03, "y":173.15
109
+    },
110
+    {"x":274.6, "y":56.83
111
+    },
112
+    {"x":240.31, "y":152.79
113
+    },
114
+    {"x":225.95, "y":134.88
115
+    },
116
+    {"x":218.45, "y":159.88
117
+    },
118
+    {"x":258.56, "y":71.92
119
+    },
120
+    {"x":127.57, "y":76.15
121
+    },
122
+    {"x":125.68, "y":77.28
123
+    },
124
+    {"x":207.74, "y":105.22
125
+    },
126
+    {"x":187.11, "y":102.78
127
+    },
128
+    {"x":218.8, "y":125.52
129
+    },
130
+    {"x":251.68, "y":40.39
131
+    },
132
+    {"x":206.11, "y":87.91
133
+    },
134
+    {"x":95.26, "y":107.34
135
+    },
136
+    {"x":214.02, "y":146.57
137
+    },
138
+    {"x":195.92, "y":121.85
139
+    },
140
+    {"x":142.79, "y":76.58
141
+    },
142
+    {"x":147.81, "y":72.32
143
+    },
144
+    {"x":263.48, "y":64.35
145
+    },
146
+    {"x":231.79, "y":94.98
147
+    },
148
+    {"x":220.12, "y":121.41
149
+    },
150
+    {"x":200.34, "y":124.54
151
+    },
152
+    {"x":81.57, "y":95.01
153
+    },
154
+    {"x":238.67, "y":141.19
155
+    },
156
+    {"x":159.55, "y":93.17
157
+    },
158
+    {"x":250.91, "y":75.04
159
+    },
160
+    {"x":187.42, "y":113.17
161
+    },
162
+    {"x":108.32, "y":57.47
163
+    },
164
+    {"x":258.76, "y":29.9
165
+    },
166
+    {"x":211.9, "y":91.44
167
+    },
168
+    {"x":253.36, "y":62.67
169
+    },
170
+    {"x":166.56, "y":168.24
171
+    },
172
+    {"x":241.41, "y":96.85
173
+    },
174
+    {"x":185.99, "y":120.8
175
+    },
176
+    {"x":227.26, "y":97.34
177
+    },
178
+    {"x":227.9, "y":95.59
179
+    },
180
+    {"x":209.63, "y":103.78
181
+    },
182
+    {"x":240.91, "y":108.47
183
+    },
184
+    {"x":207.69, "y":156.95
185
+    },
186
+    {"x":214.45, "y":140.37
187
+    },
188
+    {"x":236.23, "y":159.29
189
+    },
190
+    {"x":240.61, "y":148.38
191
+    },
192
+    {"x":225.11, "y":141.99
193
+    },
194
+    {"x":188.83, "y":115.53
195
+    },
196
+    {"x":216.25, "y":115.62
197
+    },
198
+    {"x":186.18, "y":164.9
199
+    },
200
+    {"x":181.9, "y":118.67
201
+    },
202
+    {"x":181.71, "y":151.61
203
+    },
204
+    {"x":205.41, "y":141.84
205
+    },
206
+    {"x":219.4, "y":151.92
207
+    },
208
+    {"x":191.11, "y":121.84
209
+    },
210
+    {"x":230.91, "y":140.01
211
+    },
212
+    {"x":225.19, "y":125.72
213
+    },
214
+    {"x":231.1, "y":122.84
215
+    },
216
+    {"x":136.98, "y":148.91
217
+    },
218
+    {"x":136.85, "y":148.91
219
+    },
220
+    {"x":213.12, "y":151.8
221
+    },
222
+    {"x":189.16, "y":186.77
223
+    },
224
+    {"x":189.28, "y":135.15
225
+    },
226
+    {"x":191.53, "y":87.83
227
+    },
228
+    {"x":117.36, "y":82.84
229
+    },
230
+    {"x":233.65, "y":137.19
231
+    },
232
+    {"x":205.65, "y":151.07
233
+    },
234
+    {"x":189.33, "y":115.87
235
+    },
236
+    {"x":212.53, "y":125.2
237
+    },
238
+    {"x":185.94, "y":132.13
239
+    },
240
+    {"x":188.64, "y":142.64
241
+    },
242
+    {"x":212.15, "y":180.72
243
+    },
244
+    {"x":192.21, "y":114.46
245
+    },
246
+    {"x":224.75, "y":92.21
247
+    },
248
+    {"x":198.59, "y":109.79
249
+    },
250
+    {"x":264.39, "y":74.19
251
+    },
252
+    {"x":215.7, "y":119.85
253
+    },
254
+    {"x":217.78, "y":88.35
255
+    },
256
+    {"x":202.45, "y":149.61
257
+    },
258
+    {"x":166.91, "y":97.65
259
+    },
260
+    {"x":225.81, "y":122.53
261
+    },
262
+    {"x":160.48, "y":174.53
263
+    },
264
+    {"x":226.4, "y":103.6
265
+    },
266
+    {"x":180.07, "y":138.93
267
+    },
268
+    {"x":210.1, "y":100.49
269
+    },
270
+    {"x":200.44, "y":158.0
271
+    },
272
+    {"x":198.91, "y":143.36
273
+    },
274
+    {"x":215.99, "y":181.74
275
+    },
276
+    {"x":179.59, "y":141.91
277
+    },
278
+    {"x":233.22, "y":127.82
279
+    },
280
+    {"x":226.73, "y":89.82
281
+    },
282
+    {"x":223.73, "y":157.85
283
+    },
284
+    {"x":252.83, "y":80.83
285
+    },
286
+    {"x":134.03, "y":146.92
287
+    },
288
+    {"x":222.83, "y":179.06
289
+    },
290
+    {"x":171.48, "y":163.4
291
+    },
292
+    {"x":180.31, "y":180.1
293
+    },
294
+    {"x":214.32, "y":117.06
295
+    },
296
+    {"x":217.56, "y":156.67
297
+    },
298
+    {"x":116.74, "y":69.06
299
+    },
300
+    {"x":234.34, "y":137.95
301
+    },
302
+    {"x":126.51, "y":148.96
303
+    },
304
+    {"x":126.51, "y":148.95
305
+    },
306
+    {"x":233.57, "y":116.33
307
+    },
308
+    {"x":176.63, "y":165.61
309
+    },
310
+    {"x":129.07, "y":39.26
311
+    },
312
+    {"x":155.65, "y":138.95
313
+    },
314
+    {"x":178.52, "y":159.14
315
+    },
316
+    {"x":208.21, "y":106.6
317
+    },
318
+    {"x":210.34, "y":115.75
319
+    },
320
+    {"x":165.23, "y":184.43
321
+    },
322
+    {"x":225.55, "y":148.56
323
+    },
324
+    {"x":178.75, "y":168.62
325
+    },
326
+    {"x":208.99, "y":95.39
327
+    },
328
+    {"x":236.91, "y":83.72
329
+    },
330
+    {"x":248.32, "y":85.52
331
+    },
332
+    {"x":197.8, "y":178.26
333
+    },
334
+    {"x":236.61, "y":144.06
335
+    },
336
+    {"x":252.61, "y":64.55
337
+    },
338
+    {"x":139.2, "y":145.53
339
+    },
340
+    {"x":145.77, "y":146.67
341
+    },
342
+    {"x":166.47, "y":121.39
343
+    },
344
+    {"x":225.5, "y":117.9
345
+    },
346
+    {"x":198.35, "y":175.04
347
+    },
348
+    {"x":212.25, "y":161.04
349
+    },
350
+    {"x":201.6, "y":169.58
351
+    },
352
+    {"x":221.84, "y":175.12
353
+    },
354
+    {"x":204.84, "y":179.63
355
+    },
356
+    {"x":170.71, "y":171.09
357
+    },
358
+    {"x":204.2, "y":97.04
359
+    },
360
+    {"x":174.75, "y":103.07
361
+    },
362
+    {"x":215.6, "y":141.46
363
+    },
364
+    {"x":184.14, "y":159.36
365
+    },
366
+    {"x":206.08, "y":168.79
367
+    },
368
+    {"x":190.29, "y":128.65
369
+    },
370
+    {"x":223.88, "y":180.04
371
+    },
372
+    {"x":216.17, "y":181.69
373
+    },
374
+    {"x":211.24, "y":184.29
375
+    },
376
+    {"x":226.79, "y":141.71
377
+    },
378
+    {"x":245.61, "y":83.99
379
+    },
380
+    {"x":226.22, "y":100.67
381
+    },
382
+    {"x":209.73, "y":118.0
383
+    },
384
+    {"x":193.74, "y":173.09
385
+    },
386
+    {"x":217.8, "y":174.58
387
+    },
388
+    {"x":230.4, "y":172.17
389
+    },
390
+    {"x":224.33, "y":114.3
391
+    },
392
+    {"x":234.73, "y":131.77
393
+    },
394
+    {"x":184.45, "y":151.17
395
+    },
396
+    {"x":209.15, "y":120.17
397
+    },
398
+    {"x":225.62, "y":109.35
399
+    },
400
+    {"x":223.4, "y":116.49
401
+    },
402
+    {"x":173.26, "y":110.61
403
+    },
404
+    {"x":165.98, "y":106.12
405
+    },
406
+    {"x":197.18, "y":201.62
407
+    },
408
+    {"x":201.47, "y":197.99
409
+    },
410
+    {"x":147.57, "y":111.15
411
+    },
412
+    {"x":229.61, "y":108.58
413
+    },
414
+    {"x":224.22, "y":92.35
415
+    },
416
+    {"x":224.97, "y":131.26
417
+    },
418
+    {"x":232.12, "y":125.61
419
+    },
420
+    {"x":214.12, "y":184.16
421
+    },
422
+    {"x":208.89, "y":172.72
423
+    },
424
+    {"x":237.81, "y":155.62
425
+    },
426
+    {"x":198.97, "y":118.74
427
+    },
428
+    {"x":210.57, "y":142.76
429
+    },
430
+    {"x":235.79, "y":140.31
431
+    },
432
+    {"x":210.66, "y":156.13
433
+    },
434
+    {"x":199.65, "y":153.96
435
+    },
436
+    {"x":201.64, "y":191.17
437
+    },
438
+    {"x":232.08, "y":130.83
439
+    },
440
+    {"x":229.07, "y":104.22
441
+    },
442
+    {"x":214.51, "y":126.25
443
+    },
444
+    {"x":226.57, "y":178.35
445
+    },
446
+    {"x":233.34, "y":113.25
447
+    },
448
+    {"x":223.63, "y":178.77
449
+    },
450
+    {"x":218.02, "y":114.62
451
+    },
452
+    {"x":236.79, "y":105.97
453
+    },
454
+    {"x":211.05, "y":117.52
455
+    },
456
+    {"x":274.51, "y":68.72
457
+    },
458
+    {"x":200.96, "y":184.16
459
+    },
460
+    {"x":155.27, "y":129.0
461
+    },
462
+    {"x":174.34, "y":175.1
463
+    },
464
+    {"x":212.75, "y":185.86
465
+    },
466
+    {"x":176.65, "y":140.68
467
+    },
468
+    {"x":245.46, "y":62.4
469
+    },
470
+    {"x":257.87, "y":81.9
471
+    },
472
+    {"x":179.74, "y":106.97
473
+    },
474
+    {"x":188.8, "y":177.39
475
+    },
476
+    {"x":209.0, "y":152.74
477
+    },
478
+    {"x":236.36, "y":127.07
479
+    },
480
+    {"x":242.63, "y":85.52
481
+    },
482
+    {"x":178.88, "y":144.77
483
+    },
484
+    {"x":187.91, "y":97.2
485
+    },
486
+    {"x":216.05, "y":104.27
487
+    },
488
+    {"x":233.23, "y":166.11
489
+    },
490
+    {"x":232.8, "y":92.42
491
+    },
492
+    {"x":177.01, "y":178.34
493
+    },
494
+    {"x":238.49, "y":144.99
495
+    },
496
+    {"x":259.97, "y":57.05
497
+    },
498
+    {"x":181.73, "y":137.26
499
+    },
500
+    {"x":221.8, "y":110.77
501
+    },
502
+    {"x":209.38, "y":181.4
503
+    },
504
+    {"x":182.27, "y":148.4
505
+    },
506
+    {"x":208.06, "y":144.97
507
+    },
508
+    {"x":229.94, "y":137.64
509
+    },
510
+    {"x":237.75, "y":139.84
511
+    },
512
+    {"x":203.73, "y":189.36
513
+    },
514
+    {"x":210.77, "y":145.87
515
+    },
516
+    {"x":208.3, "y":139.8
517
+    },
518
+    {"x":232.23, "y":168.95
519
+    },
520
+    {"x":227.57, "y":112.35
521
+    },
522
+    {"x":221.45, "y":115.32
523
+    },
524
+    {"x":214.1, "y":157.57
525
+    },
526
+    {"x":243.45, "y":88.65
527
+    },
528
+    {"x":236.54, "y":90.27
529
+    },
530
+    {"x":226.37, "y":129.46
531
+    },
532
+    {"x":220.25, "y":103.97
533
+    },
534
+    {"x":209.68, "y":161.07
535
+    },
536
+    {"x":232.59, "y":150.17
537
+    },
538
+    {"x":210.28, "y":133.95
539
+    },
540
+    {"x":168.24, "y":187.49
541
+    },
542
+    {"x":171.6, "y":109.72
543
+    },
544
+    {"x":196.45, "y":122.01
545
+    },
546
+    {"x":213.73, "y":123.59
547
+    },
548
+    {"x":201.81, "y":179.09
549
+    },
550
+    {"x":189.06, "y":163.62
551
+    },
552
+    {"x":206.02, "y":174.56
553
+    },
554
+    {"x":181.71, "y":144.41
555
+    },
556
+    {"x":217.68, "y":167.04
557
+    },
558
+    {"x":233.2, "y":83.5
559
+    },
560
+    {"x":253.58, "y":76.76
561
+    },
562
+    {"x":247.09, "y":84.34
563
+    },
564
+    {"x":191.56, "y":138.36
565
+    },
566
+    {"x":204.13, "y":118.13
567
+    },
568
+    {"x":232.85, "y":122.3
569
+    },
570
+    {"x":164.43, "y":156.53
571
+    },
572
+    {"x":256.39, "y":82.65
573
+    },
574
+    {"x":243.4, "y":72.86
575
+    },
576
+    {"x":185.03, "y":142.56
577
+    },
578
+    {"x":189.76, "y":156.76
579
+    },
580
+    {"x":216.42, "y":107.21
581
+    },
582
+    {"x":137.73, "y":137.12
583
+    },
584
+    {"x":216.45, "y":110.04
585
+    },
586
+    {"x":205.93, "y":159.53
587
+    },
588
+    {"x":213.38, "y":120.4
589
+    },
590
+    {"x":210.93, "y":154.47
591
+    },
592
+    {"x":200.97, "y":93.12
593
+    },
594
+    {"x":217.57, "y":143.26
595
+    },
596
+    {"x":146.55, "y":91.43
597
+    },
598
+    {"x":187.72, "y":148.13
599
+    },
600
+    {"x":198.77, "y":139.5
601
+    },
602
+    {"x":234.4, "y":149.62
603
+    },
604
+    {"x":172.54, "y":101.28
605
+    },
606
+    {"x":195.74, "y":187.38
607
+    },
608
+    {"x":249.74, "y":78.4
609
+    },
610
+    {"x":197.66, "y":157.15
611
+    },
612
+    {"x":196.95, "y":120.38
613
+    },
614
+    {"x":227.68, "y":140.41
615
+    },
616
+    {"x":187.68, "y":99.72
617
+    },
618
+    {"x":246.43, "y":181.45
619
+    },
620
+    {"x":240.34, "y":85.78
621
+    },
622
+    {"x":233.96, "y":134.51
623
+    },
624
+    {"x":253.83, "y":71.11
625
+    },
626
+    {"x":211.28, "y":154.27
627
+    },
628
+    {"x":211.29, "y":112.21
629
+    },
630
+    {"x":241.59, "y":81.2
631
+    },
632
+    {"x":221.01, "y":129.86
633
+    },
634
+    {"x":194.84, "y":189.22
635
+    },
636
+    {"x":206.84, "y":186.34
637
+    },
638
+    {"x":213.03, "y":103.41
639
+    },
640
+    {"x":105.71, "y":82.68
641
+    },
642
+    {"x":122.83, "y":52.98
643
+    },
644
+    {"x":185.42, "y":98.18
645
+    },
646
+    {"x":95.85, "y":131.69
647
+    },
648
+    {"x":182.62, "y":126.92
649
+    },
650
+    {"x":212.37, "y":135.9
651
+    },
652
+    {"x":175.81, "y":145.04
653
+    },
654
+    {"x":237.34, "y":112.47
655
+    },
656
+    {"x":244.57, "y":87.06
657
+    },
658
+    {"x":213.05, "y":172.88
659
+    },
660
+    {"x":230.17, "y":136.22
661
+    },
662
+    {"x":214.63, "y":129.44
663
+    },
664
+    {"x":280.99, "y":61.4
665
+    },
666
+    {"x":215.52, "y":114.42
667
+    },
668
+    {"x":272.36, "y":52.66
669
+    },
670
+    {"x":225.11, "y":154.44
671
+    },
672
+    {"x":218.03, "y":138.74
673
+    },
674
+    {"x":229.68, "y":146.44
675
+    },
676
+    {"x":218.24, "y":143.65
677
+    },
678
+    {"x":258.26, "y":48.17
679
+    },
680
+    {"x":197.49, "y":164.94
681
+    },
682
+    {"x":191.82, "y":164.78
683
+    },
684
+    {"x":182.79, "y":170.79
685
+    },
686
+    {"x":256.86, "y":51.64
687
+    },
688
+    {"x":222.86, "y":171.17
689
+    }
690
+]

+ 690
- 0
dev/static/json/pPmsInfo.json Visa fil

@@ -0,0 +1,690 @@
1
+[
2
+    {"x":920.27, "y":543.71
3
+    },
4
+    {"x":1037.74, "y":383.37
5
+    },
6
+    {"x":818.86, "y":809.41
7
+    },
8
+    {"x":901.7, "y":686.05
9
+    },
10
+    {"x":836.6, "y":554.14
11
+    },
12
+    {"x":943.36, "y":608.73
13
+    },
14
+    {"x":944.78, "y":604.28
15
+    },
16
+    {"x":904.51, "y":651.82
17
+    },
18
+    {"x":863.37, "y":736.16
19
+    },
20
+    {"x":907.83, "y":512.12
21
+    },
22
+    {"x":775.3, "y":511.35
23
+    },
24
+    {"x":858.12, "y":743.11
25
+    },
26
+    {"x":754.75, "y":541.56
27
+    },
28
+    {"x":839.23, "y":540.1
29
+    },
30
+    {"x":908.24, "y":548.72
31
+    },
32
+    {"x":723.02, "y":722.89
33
+    },
34
+    {"x":970.04, "y":470.94
35
+    },
36
+    {"x":924.37, "y":652.95
37
+    },
38
+    {"x":724.71, "y":676.23
39
+    },
40
+    {"x":856.14, "y":457.3
41
+    },
42
+    {"x":791.72, "y":478.43
43
+    },
44
+    {"x":594.59, "y":412.75
45
+    },
46
+    {"x":759.73, "y":633.7
47
+    },
48
+    {"x":885.08, "y":633.05
49
+    },
50
+    {"x":839.58, "y":732.75
51
+    },
52
+    {"x":882.76, "y":568.59
53
+    },
54
+    {"x":1016.78, "y":353.32
55
+    },
56
+    {"x":531.25, "y":411.77
57
+    },
58
+    {"x":855.71, "y":735.17
59
+    },
60
+    {"x":1033.86, "y":376.06
61
+    },
62
+    {"x":880.01, "y":491.22
63
+    },
64
+    {"x":713.72, "y":703.77
65
+    },
66
+    {"x":866.91, "y":594.94
67
+    },
68
+    {"x":568.48, "y":386.45
69
+    },
70
+    {"x":891.45, "y":600.55
71
+    },
72
+    {"x":771.41, "y":680.87
73
+    },
74
+    {"x":761.61, "y":533.97
75
+    },
76
+    {"x":946.57, "y":378.42
77
+    },
78
+    {"x":773.74, "y":634.68
79
+    },
80
+    {"x":744.23, "y":660.48
81
+    },
82
+    {"x":822.22, "y":462.51
83
+    },
84
+    {"x":896.6, "y":470.36
85
+    },
86
+    {"x":893.37, "y":467.48
87
+    },
88
+    {"x":815.77, "y":759.74
89
+    },
90
+    {"x":831.89, "y":587.27
91
+    },
92
+    {"x":914.18, "y":599.52
93
+    },
94
+    {"x":783.38, "y":616.06
95
+    },
96
+    {"x":806.71, "y":738.03
97
+    },
98
+    {"x":900.62, "y":669.3
99
+    },
100
+    {"x":884.3, "y":649.73
101
+    },
102
+    {"x":935.02, "y":596.24
103
+    },
104
+    {"x":848.93, "y":581.18
105
+    },
106
+    {"x":539.35, "y":397.74
107
+    },
108
+    {"x":907.13, "y":710.32
109
+    },
110
+    {"x":1039.94, "y":370.13
111
+    },
112
+    {"x":940.03, "y":650.77
113
+    },
114
+    {"x":898.15, "y":598.41
115
+    },
116
+    {"x":876.3, "y":671.52
117
+    },
118
+    {"x":993.21, "y":414.28
119
+    },
120
+    {"x":611.45, "y":426.64
121
+    },
122
+    {"x":605.95, "y":429.94
123
+    },
124
+    {"x":845.1, "y":511.68
125
+    },
126
+    {"x":784.99, "y":504.52
127
+    },
128
+    {"x":877.33, "y":571.03
129
+    },
130
+    {"x":973.15, "y":322.05
131
+    },
132
+    {"x":840.34, "y":461.04
133
+    },
134
+    {"x":517.29, "y":517.87
135
+    },
136
+    {"x":863.4, "y":632.58
137
+    },
138
+    {"x":810.65, "y":560.3
139
+    },
140
+    {"x":655.81, "y":427.89
141
+    },
142
+    {"x":670.45, "y":415.45
143
+    },
144
+    {"x":1007.55, "y":392.13
145
+    },
146
+    {"x":915.2, "y":481.73
147
+    },
148
+    {"x":881.18, "y":559.02
149
+    },
150
+    {"x":823.54, "y":568.16
151
+    },
152
+    {"x":477.39, "y":481.8
153
+    },
154
+    {"x":935.24, "y":616.87
155
+    },
156
+    {"x":704.65, "y":476.42
157
+    },
158
+    {"x":970.92, "y":423.4
159
+    },
160
+    {"x":785.88, "y":534.91
161
+    },
162
+    {"x":555.36, "y":372.02
163
+    },
164
+    {"x":993.8, "y":291.4
165
+    },
166
+    {"x":857.23, "y":471.36
167
+    },
168
+    {"x":978.05, "y":387.21
169
+    },
170
+    {"x":725.1, "y":695.96
171
+    },
172
+    {"x":943.22, "y":487.18
173
+    },
174
+    {"x":781.7, "y":557.23
175
+    },
176
+    {"x":901.99, "y":488.61
177
+    },
178
+    {"x":903.86, "y":483.51
179
+    },
180
+    {"x":850.62, "y":507.45
181
+    },
182
+    {"x":941.78, "y":521.18
183
+    },
184
+    {"x":844.94, "y":662.96
185
+    },
186
+    {"x":864.66, "y":614.46
187
+    },
188
+    {"x":928.13, "y":669.78
189
+    },
190
+    {"x":940.88, "y":637.9
191
+    },
192
+    {"x":895.73, "y":619.18
193
+    },
194
+    {"x":789.98, "y":541.8
195
+    },
196
+    {"x":869.89, "y":542.07
197
+    },
198
+    {"x":782.26, "y":686.19
199
+    },
200
+    {"x":769.81, "y":551.01
201
+    },
202
+    {"x":769.25, "y":647.34
203
+    },
204
+    {"x":838.32, "y":618.76
205
+    },
206
+    {"x":879.09, "y":648.23
207
+    },
208
+    {"x":796.63, "y":560.28
209
+    },
210
+    {"x":912.63, "y":613.4
211
+    },
212
+    {"x":895.95, "y":571.62
213
+    },
214
+    {"x":913.17, "y":563.18
215
+    },
216
+    {"x":638.88, "y":639.43
217
+    },
218
+    {"x":638.51, "y":639.43
219
+    },
220
+    {"x":860.78, "y":647.88
221
+    },
222
+    {"x":790.95, "y":750.17
223
+    },
224
+    {"x":791.31, "y":599.18
225
+    },
226
+    {"x":797.84, "y":460.8
227
+    },
228
+    {"x":581.69, "y":446.2
229
+    },
230
+    {"x":920.62, "y":605.16
231
+    },
232
+    {"x":839.0, "y":645.76
233
+    },
234
+    {"x":791.46, "y":542.81
235
+    },
236
+    {"x":859.05, "y":570.1
237
+    },
238
+    {"x":781.56, "y":590.36
239
+    },
240
+    {"x":789.45, "y":621.09
241
+    },
242
+    {"x":857.94, "y":732.47
243
+    },
244
+    {"x":799.83, "y":538.7
245
+    },
246
+    {"x":894.68, "y":473.62
247
+    },
248
+    {"x":818.42, "y":525.01
249
+    },
250
+    {"x":1010.2, "y":420.9
251
+    },
252
+    {"x":868.3, "y":554.46
253
+    },
254
+    {"x":874.35, "y":462.31
255
+    },
256
+    {"x":829.68, "y":641.47
257
+    },
258
+    {"x":726.12, "y":489.51
259
+    },
260
+    {"x":897.75, "y":562.28
261
+    },
262
+    {"x":707.37, "y":714.38
263
+    },
264
+    {"x":899.48, "y":506.93
265
+    },
266
+    {"x":764.47, "y":610.23
267
+    },
268
+    {"x":851.97, "y":497.82
269
+    },
270
+    {"x":823.81, "y":666.03
271
+    },
272
+    {"x":819.37, "y":623.21
273
+    },
274
+    {"x":869.14, "y":735.44
275
+    },
276
+    {"x":763.06, "y":618.98
277
+    },
278
+    {"x":919.35, "y":577.77
279
+    },
280
+    {"x":900.44, "y":466.62
281
+    },
282
+    {"x":891.7, "y":665.57
283
+    },
284
+    {"x":976.51, "y":440.33
285
+    },
286
+    {"x":630.28, "y":633.62
287
+    },
288
+    {"x":889.09, "y":727.62
289
+    },
290
+    {"x":739.43, "y":681.81
291
+    },
292
+    {"x":765.16, "y":730.66
293
+    },
294
+    {"x":864.27, "y":546.28
295
+    },
296
+    {"x":873.71, "y":662.14
297
+    },
298
+    {"x":579.9, "y":405.92
299
+    },
300
+    {"x":922.61, "y":607.37
301
+    },
302
+    {"x":608.36, "y":639.59
303
+    },
304
+    {"x":608.37, "y":639.54
305
+    },
306
+    {"x":920.38, "y":544.17
307
+    },
308
+    {"x":754.45, "y":688.28
309
+    },
310
+    {"x":615.82, "y":318.77
311
+    },
312
+    {"x":693.29, "y":610.32
313
+    },
314
+    {"x":759.95, "y":669.36
315
+    },
316
+    {"x":846.46, "y":515.7
317
+    },
318
+    {"x":852.68, "y":542.47
319
+    },
320
+    {"x":721.22, "y":743.3
321
+    },
322
+    {"x":897.01, "y":638.41
323
+    },
324
+    {"x":760.61, "y":697.07
325
+    },
326
+    {"x":848.74, "y":482.91
327
+    },
328
+    {"x":930.12, "y":448.79
329
+    },
330
+    {"x":963.37, "y":454.04
331
+    },
332
+    {"x":816.13, "y":725.27
333
+    },
334
+    {"x":929.23, "y":625.25
335
+    },
336
+    {"x":975.87, "y":392.72
337
+    },
338
+    {"x":645.36, "y":629.56
339
+    },
340
+    {"x":664.49, "y":632.89
341
+    },
342
+    {"x":724.83, "y":558.96
343
+    },
344
+    {"x":896.87, "y":548.76
345
+    },
346
+    {"x":817.73, "y":715.87
347
+    },
348
+    {"x":858.25, "y":674.91
349
+    },
350
+    {"x":827.2, "y":699.89
351
+    },
352
+    {"x":886.18, "y":716.09
353
+    },
354
+    {"x":836.65, "y":729.27
355
+    },
356
+    {"x":737.19, "y":704.29
357
+    },
358
+    {"x":834.79, "y":487.73
359
+    },
360
+    {"x":748.95, "y":505.36
361
+    },
362
+    {"x":868.0, "y":617.66
363
+    },
364
+    {"x":776.34, "y":669.99
365
+    },
366
+    {"x":840.25, "y":697.57
367
+    },
368
+    {"x":794.26, "y":580.17
369
+    },
370
+    {"x":892.14, "y":730.47
371
+    },
372
+    {"x":869.66, "y":735.31
373
+    },
374
+    {"x":855.29, "y":742.89
375
+    },
376
+    {"x":900.61, "y":618.36
377
+    },
378
+    {"x":955.47, "y":449.58
379
+    },
380
+    {"x":898.95, "y":498.35
381
+    },
382
+    {"x":850.91, "y":549.03
383
+    },
384
+    {"x":804.31, "y":710.16
385
+    },
386
+    {"x":874.41, "y":714.52
387
+    },
388
+    {"x":911.14, "y":707.46
389
+    },
390
+    {"x":893.45, "y":538.21
391
+    },
392
+    {"x":923.76, "y":589.32
393
+    },
394
+    {"x":777.23, "y":646.05
395
+    },
396
+    {"x":849.21, "y":555.38
397
+    },
398
+    {"x":897.2, "y":523.74
399
+    },
400
+    {"x":890.72, "y":544.61
401
+    },
402
+    {"x":744.61, "y":527.42
403
+    },
404
+    {"x":723.41, "y":514.3
405
+    },
406
+    {"x":814.33, "y":793.57
407
+    },
408
+    {"x":826.83, "y":782.98
409
+    },
410
+    {"x":669.76, "y":529.0
411
+    },
412
+    {"x":908.83, "y":521.48
413
+    },
414
+    {"x":893.12, "y":474.03
415
+    },
416
+    {"x":895.31, "y":587.81
417
+    },
418
+    {"x":916.16, "y":571.28
419
+    },
420
+    {"x":863.71, "y":742.54
421
+    },
422
+    {"x":848.46, "y":709.07
423
+    },
424
+    {"x":932.72, "y":659.07
425
+    },
426
+    {"x":819.54, "y":551.2
427
+    },
428
+    {"x":853.36, "y":621.45
429
+    },
430
+    {"x":926.84, "y":614.29
431
+    },
432
+    {"x":853.62, "y":660.54
433
+    },
434
+    {"x":821.53, "y":654.22
435
+    },
436
+    {"x":827.33, "y":763.02
437
+    },
438
+    {"x":916.04, "y":586.57
439
+    },
440
+    {"x":907.26, "y":508.72
441
+    },
442
+    {"x":864.84, "y":573.18
443
+    },
444
+    {"x":899.98, "y":725.54
445
+    },
446
+    {"x":919.72, "y":535.16
447
+    },
448
+    {"x":891.42, "y":726.77
449
+    },
450
+    {"x":875.05, "y":539.15
451
+    },
452
+    {"x":929.77, "y":513.86
453
+    },
454
+    {"x":854.75, "y":547.65
455
+    },
456
+    {"x":1039.7, "y":404.92
457
+    },
458
+    {"x":825.34, "y":742.53
459
+    },
460
+    {"x":692.18, "y":581.2
461
+    },
462
+    {"x":747.76, "y":716.02
463
+    },
464
+    {"x":859.71, "y":747.49
465
+    },
466
+    {"x":754.49, "y":615.35
467
+    },
468
+    {"x":955.02, "y":386.44
469
+    },
470
+    {"x":991.19, "y":443.47
471
+    },
472
+    {"x":763.51, "y":516.77
473
+    },
474
+    {"x":789.89, "y":722.72
475
+    },
476
+    {"x":848.77, "y":650.63
477
+    },
478
+    {"x":928.5, "y":575.57
479
+    },
480
+    {"x":946.79, "y":454.05
481
+    },
482
+    {"x":761.0, "y":627.33
483
+    },
484
+    {"x":787.32, "y":488.22
485
+    },
486
+    {"x":869.31, "y":508.87
487
+    },
488
+    {"x":919.37, "y":689.74
489
+    },
490
+    {"x":918.14, "y":474.24
491
+    },
492
+    {"x":755.55, "y":725.5
493
+    },
494
+    {"x":934.71, "y":627.96
495
+    },
496
+    {"x":997.3, "y":370.8
497
+    },
498
+    {"x":769.29, "y":605.35
499
+    },
500
+    {"x":886.06, "y":527.89
501
+    },
502
+    {"x":849.87, "y":734.44
503
+    },
504
+    {"x":770.89, "y":637.95
505
+    },
506
+    {"x":846.04, "y":627.92
507
+    },
508
+    {"x":909.78, "y":606.49
509
+    },
510
+    {"x":932.55, "y":612.9
511
+    },
512
+    {"x":833.42, "y":757.72
513
+    },
514
+    {"x":853.94, "y":630.54
515
+    },
516
+    {"x":846.72, "y":612.78
517
+    },
518
+    {"x":916.47, "y":698.04
519
+    },
520
+    {"x":902.9, "y":532.51
521
+    },
522
+    {"x":885.05, "y":541.19
523
+    },
524
+    {"x":863.62, "y":664.75
525
+    },
526
+    {"x":949.17, "y":463.21
527
+    },
528
+    {"x":929.03, "y":467.93
529
+    },
530
+    {"x":899.38, "y":582.56
531
+    },
532
+    {"x":881.55, "y":508.0
533
+    },
534
+    {"x":850.74, "y":675.0
535
+    },
536
+    {"x":917.52, "y":643.11
537
+    },
538
+    {"x":852.5, "y":595.69
539
+    },
540
+    {"x":729.97, "y":752.25
541
+    },
542
+    {"x":739.79, "y":524.81
543
+    },
544
+    {"x":812.19, "y":560.76
545
+    },
546
+    {"x":862.56, "y":565.38
547
+    },
548
+    {"x":827.83, "y":727.69
549
+    },
550
+    {"x":790.65, "y":682.44
551
+    },
552
+    {"x":840.08, "y":714.46
553
+    },
554
+    {"x":769.23, "y":626.28
555
+    },
556
+    {"x":874.07, "y":692.46
557
+    },
558
+    {"x":919.31, "y":448.15
559
+    },
560
+    {"x":978.68, "y":428.44
561
+    },
562
+    {"x":959.79, "y":450.61
563
+    },
564
+    {"x":797.93, "y":608.59
565
+    },
566
+    {"x":834.57, "y":549.41
567
+    },
568
+    {"x":918.28, "y":561.62
569
+    },
570
+    {"x":718.89, "y":661.72
571
+    },
572
+    {"x":986.87, "y":445.67
573
+    },
574
+    {"x":949.04, "y":417.03
575
+    },
576
+    {"x":778.92, "y":620.85
577
+    },
578
+    {"x":792.7, "y":662.39
579
+    },
580
+    {"x":870.4, "y":517.47
581
+    },
582
+    {"x":641.06, "y":604.95
583
+    },
584
+    {"x":870.48, "y":525.75
585
+    },
586
+    {"x":839.83, "y":670.5
587
+    },
588
+    {"x":861.54, "y":556.07
589
+    },
590
+    {"x":854.39, "y":655.69
591
+    },
592
+    {"x":825.37, "y":476.28
593
+    },
594
+    {"x":873.75, "y":622.92
595
+    },
596
+    {"x":666.77, "y":471.33
597
+    },
598
+    {"x":786.77, "y":637.16
599
+    },
600
+    {"x":818.96, "y":611.92
601
+    },
602
+    {"x":922.79, "y":641.52
603
+    },
604
+    {"x":742.51, "y":500.15
605
+    },
606
+    {"x":810.14, "y":751.93
607
+    },
608
+    {"x":967.51, "y":433.24
609
+    },
610
+    {"x":815.71, "y":663.54
611
+    },
612
+    {"x":813.66, "y":556.0
613
+    },
614
+    {"x":903.21, "y":614.57
615
+    },
616
+    {"x":786.64, "y":495.58
617
+    },
618
+    {"x":957.86, "y":734.59
619
+    },
620
+    {"x":940.09, "y":454.82
621
+    },
622
+    {"x":921.51, "y":597.33
623
+    },
624
+    {"x":979.41, "y":411.92
625
+    },
626
+    {"x":855.41, "y":655.12
627
+    },
628
+    {"x":855.46, "y":532.11
629
+    },
630
+    {"x":943.74, "y":441.41
631
+    },
632
+    {"x":883.76, "y":583.72
633
+    },
634
+    {"x":807.5, "y":757.31
635
+    },
636
+    {"x":842.48, "y":748.91
637
+    },
638
+    {"x":860.5, "y":506.37
639
+    },
640
+    {"x":547.77, "y":445.74
641
+    },
642
+    {"x":597.64, "y":358.89
643
+    },
644
+    {"x":780.06, "y":491.09
645
+    },
646
+    {"x":519.01, "y":589.07
647
+    },
648
+    {"x":771.88, "y":575.12
649
+    },
650
+    {"x":858.6, "y":601.4
651
+    },
652
+    {"x":752.04, "y":628.12
653
+    },
654
+    {"x":931.35, "y":532.85
655
+    },
656
+    {"x":952.42, "y":458.54
657
+    },
658
+    {"x":860.58, "y":709.53
659
+    },
660
+    {"x":910.47, "y":602.31
661
+    },
662
+    {"x":865.19, "y":582.49
663
+    },
664
+    {"x":1058.56, "y":383.51
665
+    },
666
+    {"x":867.79, "y":538.57
667
+    },
668
+    {"x":1033.42, "y":357.96
669
+    },
670
+    {"x":895.71, "y":655.61
671
+    },
672
+    {"x":875.08, "y":609.7
673
+    },
674
+    {"x":909.04, "y":632.22
675
+    },
676
+    {"x":875.71, "y":624.06
677
+    },
678
+    {"x":992.33, "y":344.81
679
+    },
680
+    {"x":815.23, "y":686.31
681
+    },
682
+    {"x":798.71, "y":685.84
683
+    },
684
+    {"x":772.4, "y":703.41
685
+    },
686
+    {"x":988.26, "y":354.96
687
+    },
688
+    {"x":889.18, "y":704.53
689
+    }
690
+]

+ 1
- 0
dev/static/json/pmsInfo.json
Filskillnaden har hållits tillbaka eftersom den är för stor
Visa fil


+ 102
- 0
dev/static/lib/animate.min.css
Filskillnaden har hållits tillbaka eftersom den är för stor
Visa fil


+ 2
- 0
dev/static/lib/wow.min.js
Filskillnaden har hållits tillbaka eftersom den är för stor
Visa fil


+ 5674
- 0
package-lock.json
Filskillnaden har hållits tillbaka eftersom den är för stor
Visa fil


+ 49
- 0
package.json Visa fil

@@ -0,0 +1,49 @@
1
+{
2
+  "name": "foton-2023",
3
+  "version": "1.0.0",
4
+  "description": "",
5
+  "main": "index.js",
6
+  "scripts": {
7
+    "dll": "webpack --config config/webpack.dll.js",
8
+    "dev": "webpack-dev-server --config config/webpack.dev.js --progress",
9
+    "dist": "webpack --config config/webpack.prod.js",
10
+    "chart-dev": "webpack-dev-server --config config/webpack.charts.dev.js --progress",
11
+    "chart-dist": "webpack --config config/webpack.charts.dist.js",
12
+    "server": "http-server -a 192.168.1.59 -p 3001 -o ./dist"
13
+  },
14
+  "repository": {
15
+    "type": "git",
16
+    "url": ""
17
+  },
18
+  "author": "",
19
+  "license": "ISC",
20
+  "dependencies": {
21
+    "gsap": "^3.11.3",
22
+    "hammerjs": "^2.0.8",
23
+    "locomotive-scroll": "^4.1.4",
24
+    "swiper": "^8.4.6",
25
+    "vh-check": "^2.0.5"
26
+  },
27
+  "devDependencies": {
28
+    "@babel/core": "^7.17.5",
29
+    "@babel/preset-env": "^7.16.11",
30
+    "babel-loader": "^8.2.3",
31
+    "clean-webpack-plugin": "^4.0.0",
32
+    "copy-webpack-plugin": "^10.2.4",
33
+    "css-loader": "^6.6.0",
34
+    "glob": "^7.2.0",
35
+    "glslify-loader": "^2.0.0",
36
+    "happypack": "^5.0.1",
37
+    "html-loader": "^4.2.0",
38
+    "html-webpack-plugin": "^5.5.0",
39
+    "http-server": "^14.1.0",
40
+    "less": "^4.1.2",
41
+    "less-loader": "^10.2.0",
42
+    "mini-css-extract-plugin": "^2.5.3",
43
+    "raw-loader": "^4.0.2",
44
+    "style-loader": "^3.3.1",
45
+    "webpack": "^5.69.1",
46
+    "webpack-cli": "^4.9.2",
47
+    "webpack-dev-server": "^4.7.4"
48
+  }
49
+}

Binär
src/pages/404/404-mobile.jpg Visa fil


Binär
src/pages/404/404.jpg Visa fil


+ 19
- 0
src/pages/404/App.js Visa fil

@@ -0,0 +1,19 @@
1
+import Swiper from 'swiper/bundle'
2
+import gsap from 'gsap'
3
+import Hammer from 'hammerjs'
4
+import Common from '../common/js/Common'
5
+import { isMobile, scrollFun } from '../common/js/utils'
6
+
7
+export default class App {
8
+    constructor() {
9
+        this.initEvent()
10
+    }
11
+    initEvent(){
12
+        let btnList  = document.querySelectorAll('.btn')
13
+        btnList.forEach(item=>{
14
+            item.addEventListener('click',()=>{
15
+                history.go(-1)
16
+            })
17
+        })
18
+    }
19
+}

Binär
src/pages/404/images/numBg.png Visa fil


+ 93
- 0
src/pages/404/index.css Visa fil

@@ -0,0 +1,93 @@
1
+/* -----------------------------公共部分--------------------------- */
2
+body {
3
+  overflow-x: hidden;
4
+  background-color: #000;
5
+}
6
+
7
+.main {
8
+  width: 100vw;
9
+  /* height: 100vh; */
10
+  transition: transform 0.8s ease 0.1s;
11
+  display: flex;
12
+  justify-content: center;
13
+}
14
+
15
+@media screen and (min-width:800px){
16
+  .pc{
17
+    display:block;
18
+    width:100vw;
19
+    height:calc(100vh - 60px);
20
+  }
21
+  .back-img{
22
+    background: url('./404.jpg') no-repeat center;
23
+    background-size:cover;
24
+    width:100%;
25
+    height:100%;
26
+  }
27
+  .txt{
28
+    color: #fff;
29
+    font-size: 16px;
30
+    position: absolute;
31
+    top: 75%;
32
+    left: 50%;
33
+    transform: translateX(-50%);
34
+  }
35
+  .btn{
36
+    font-size: 16px;
37
+    position: absolute;
38
+    top: calc(75% + 60px);
39
+    left: 50%;
40
+    background: #fff;
41
+    transform: translateX(-50%);
42
+    width: 225px;
43
+    height: 60px;
44
+    border-radius: 50px;
45
+    text-align: center;
46
+    line-height: 60px;
47
+    cursor:pointer;
48
+  }
49
+  .mobile{
50
+    display:none;
51
+  }
52
+}
53
+
54
+@media screen and (max-width:800px){
55
+  .pc{
56
+    display:none;
57
+  }
58
+  .mobile{
59
+    display:block;
60
+    width:100vw;
61
+    height:calc(100vh - 60px);
62
+  }
63
+  .back-img{
64
+    background: url('./404-mobile.jpg') no-repeat center;
65
+    background-size:cover;
66
+    width:100%;
67
+    height:100%;
68
+  }
69
+  .txt{
70
+    color: #fff;
71
+    font-size: 16px;
72
+    position: absolute;
73
+    top: calc(50% + 50px + var(--vh-offset, 0px));
74
+    left: 50%;
75
+    white-space: nowrap;
76
+    font-size: 12px;
77
+    transform: translateX(-50%);
78
+  }
79
+  .btn{
80
+    top: calc(50% + 90px + var(--vh-offset, 0px));
81
+    left: 50%;
82
+    white-space: nowrap;
83
+    transform: translatex(-50%);
84
+    font-size: 12px;
85
+    position: absolute;
86
+    width: 125px;
87
+    height: 30px;
88
+    text-align: center;
89
+    background: #fff;
90
+    line-height: 30px;
91
+    border-radius: 50px;
92
+  }
93
+}

+ 31
- 0
src/pages/404/index.html Visa fil

@@ -0,0 +1,31 @@
1
+<!DOCTYPE html>
2
+<html lang="cn">
3
+    <head>
4
+        <meta charset="utf-8" />
5
+        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
6
+        <title></title>
7
+        <meta content="initial-scale=1.0,user-scalable=no,maximum-scale=1,width=device-width" name="viewport" />
8
+        <link href="./static/css/swiper-bundle.min.css" rel="stylesheet" type="text/css" />
9
+        <%= require('../common/tpl/headerLink.tpl') %>
10
+    </head>
11
+    <body class="third">
12
+        <!----------------------------- 导航 ----------------------------->
13
+        <%= require('../common/tpl/header.tpl') %>
14
+        <!----------------------------- 页面主体 ----------------------------->
15
+        <div class="main">
16
+            <div class="pc">
17
+                <div class="back-img">
18
+                    <div class="txt">很抱歉,您要访问的页面地址有误,或者该页面不存在。</div>
19
+                    <div class="btn">返回上一页</div>
20
+                </div>
21
+            </div>
22
+            <div class="mobile">
23
+                <div class="back-img">
24
+                    <div class="txt">很抱歉,您要访问的页面地址有误,或者该页面不存在。</div>
25
+                    <div class="btn">返回上一页</div>
26
+                </div>
27
+            </div>
28
+        </div>
29
+        <%= require('../common/tpl/bottomBar.tpl') %>
30
+    </body>
31
+</html>

+ 19
- 0
src/pages/404/index.js Visa fil

@@ -0,0 +1,19 @@
1
+import "./../common/css/common.less";
2
+import "./index.css";
3
+import App from './App.js';
4
+import vhCheck from "vh-check"; 
5
+
6
+// swiper的css目前环境解析不出来,放static下,不走webpack 
7
+//import 'swiper/swiper-bundle.css';
8
+
9
+vhCheck();
10
+// swiper的css目前环境解析不出来,放static下,不走webpack 
11
+//import 'swiper/swiper-bundle.css';
12
+
13
+
14
+ //禁止浏览器刷新后回到上一个页面滚动位置
15
+ if ('scrollRestoration' in history) {
16
+    history.scrollRestoration = 'manual';
17
+}
18
+
19
+new App();

+ 171
- 0
src/pages/about/App.js Visa fil

@@ -0,0 +1,171 @@
1
+import Swiper from 'swiper/bundle'
2
+import gsap from 'gsap'
3
+import LocomotiveScroll from 'locomotive-scroll';
4
+import Common from '../common/js/Common'
5
+import {
6
+    isMobile
7
+} from '../common/js/utils'
8
+
9
+export default class App {
10
+    constructor() {
11
+        let common = new Common(document.querySelector('.main'),5)   //导航菜单高亮,0是首页,后面的按顺序添加
12
+        this.isMobile = isMobile()
13
+        
14
+        this.scroll = new LocomotiveScroll();
15
+
16
+        // 图片及视频资源懒加载。防止阻塞js执行
17
+        let lazyDoms = document.querySelectorAll(".lazy");
18
+        let isMob=this.isMobile;
19
+        lazyDoms.forEach((item) => {
20
+            if (item.nodeName == "PICTURE") {
21
+                item.children[0].setAttribute("srcset", item.children[0].dataset.srcset);
22
+                item.children[1].setAttribute("src", item.children[1].dataset.src);
23
+            }
24
+            if (item.nodeName == "IMG") {
25
+                if(isMob){item.setAttribute("src", item.dataset.srcm);}
26
+                else{
27
+                    item.setAttribute("src", item.dataset.src);
28
+                }
29
+                
30
+            }
31
+            if (item.nodeName == "VIDEO") {
32
+                console.log(item, 'item---2')
33
+                item.setAttribute("src", item.dataset.src);
34
+                // item.load();
35
+            }
36
+        });
37
+        
38
+        this.swiperAll();
39
+        
40
+    }
41
+    //产品轮播
42
+    swiperAll() {
43
+        let isMobile = this.isMobile;
44
+        let mySwiper = new Swiper('.masterSwiper1', {
45
+            autoplay: false,//可选选项,自动滑动
46
+            // 如果需要前进后退按钮
47
+            navigation: {
48
+                nextEl: '.btn-nextP1',
49
+                prevEl: '.btn-prevP1',
50
+            }
51
+        });
52
+        let mySwiper2 = new Swiper('.masterSwiper2', {
53
+            autoplay: false,//可选选项,自动滑动
54
+            // 如果需要前进后退按钮
55
+            navigation: {
56
+                nextEl: '.btn-nextP2',
57
+                prevEl: '.btn-prevP2',
58
+            }
59
+        });
60
+        let mySwiper3 = new Swiper('.masterSwiper3', {
61
+            autoplay: false,//可选选项,自动滑动
62
+            // 如果需要前进后退按钮
63
+            navigation: {
64
+                nextEl: '.btn-nextP3',
65
+                prevEl: '.btn-prevP3',
66
+            }
67
+        });
68
+        let ckTypes = document.querySelectorAll(".oneTit");
69
+        let masterDivs = document.querySelectorAll(".masterDiv");
70
+        function masterShow(num){
71
+            masterDivs.forEach((item,index)=>{
72
+                if(index==num){
73
+                    item.classList.add("masterShow");
74
+                }else{
75
+                    item.classList.remove("masterShow");
76
+                }
77
+            })
78
+        }
79
+        
80
+        ckTypes.forEach((item,index)=>{
81
+            item.addEventListener("click", (e) => {
82
+                
83
+                item.parentNode.querySelectorAll(".oneTit").forEach(item=>{
84
+                    item.classList.remove("ckTit");
85
+                });
86
+                item.classList.add("ckTit");
87
+                masterShow(index)
88
+            });
89
+        });
90
+        let paddingH=60;
91
+        if(isMobile){
92
+            let twoSwiper = new Swiper('.twoSwiper', {
93
+                autoplay: false,//可选选项,自动滑动
94
+                spaceBetween: 10,
95
+                loop: true,
96
+                centeredSlides: true,
97
+                slidesPerView: 'auto',
98
+                // 如果需要前进后退按钮
99
+                navigation: {
100
+                    nextEl: '.btn-nextP4',
101
+                    prevEl: '.btn-prevP4',
102
+                }
103
+            });
104
+            paddingH=30;
105
+        }else{
106
+            let twoSwiper = new Swiper('.twoSwiper', {
107
+                autoplay: false,//可选选项,自动滑动
108
+                slidesPerView: 3,
109
+                spaceBetween: 10,
110
+                // 如果需要前进后退按钮
111
+                navigation: {
112
+                    nextEl: '.btn-nextP4',
113
+                    prevEl: '.btn-prevP4',
114
+                }
115
+            });
116
+        }
117
+        
118
+
119
+        //切换显示隐藏
120
+        let liTitleArray = document.querySelectorAll('.liTitle');
121
+        liTitleArray.forEach((child )=>{
122
+            child.addEventListener('click', (event) => {
123
+                // 获取被点击元素的父元素
124
+                let parentElement = event.currentTarget.parentNode;
125
+                let infoSonLi = parentElement.querySelector('.infoSonLi');
126
+                let actualHeight = infoSonLi.offsetHeight;
127
+                // 初始化子元素总高度
128
+                let childrenTotalHeight = paddingH;
129
+
130
+                // 遍历所有子元素,累加它们的高度
131
+                Array.from(infoSonLi.children).forEach(child => {
132
+                    childrenTotalHeight += child.offsetHeight;
133
+                });
134
+                let totalHeight = childrenTotalHeight;
135
+                if (parentElement.classList.contains("infoLiShow")) {
136
+                    parentElement.classList.remove('infoLiShow')
137
+                    gsap.to(infoSonLi,{paddingTop:0,height:0,duration:0.5})
138
+                    
139
+                }else{
140
+                    parentElement.classList.add('infoLiShow');
141
+                    gsap.to(infoSonLi,{paddingTop:paddingH,height:totalHeight,duration:0.5})
142
+                    // gsap.to(infoSonLi,{height:totalHeight,duration:1,onComplete: () => infoSonLi.style.height = 'auto'})
143
+                }
144
+            });
145
+        });
146
+        //添加表单动画
147
+        let liTits = document.querySelectorAll('.liTit');
148
+        liTits.forEach((val)=>{
149
+            val.style.height = val.offsetHeight+'px';
150
+            let liTitMove = val.querySelector('.liTitMove');
151
+            if(isMobile){
152
+                liTitMove.classList.remove("moveUp");
153
+                liTitMove.classList.add("fadeInUp");
154
+            }else{
155
+                // 获取 liTit 下的所有 div 元素
156
+                let divs = liTitMove.querySelector('div');
157
+                if(divs){
158
+                    // 克隆 div 元素
159
+                    let clonedDiv = divs.cloneNode(true);
160
+                    
161
+                    // 将克隆的 div 插入到 liTit 的后面
162
+                    divs.parentElement.appendChild(clonedDiv);;
163
+                }
164
+            }
165
+            
166
+        })
167
+    }
168
+    
169
+
170
+
171
+}

+ 20
- 0
src/pages/about/images/720d.svg Visa fil

@@ -0,0 +1,20 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
3
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
4
+	 viewBox="0 0 750 1330" style="enable-background:new 0 0 750 1330;" xml:space="preserve">
5
+<style type="text/css">
6
+	.st0{fill:none;}
7
+	.st1{font-family:'SourceHanSansCN-Bold-GBpc-EUC-H';}
8
+	.st2{font-size:163.8541px;}
9
+</style>
10
+<path d="M554.1,356.6c-14.6,0-26.5,11.5-26.5,25.7v0.6c0.1,14,11.9,25.2,26.3,25.1h0.2c14.6,0,26.5-11.5,26.5-25.8
11
+	C580.5,368.1,568.7,356.6,554.1,356.6z M554.1,394.9L554.1,394.9c-7.1,0.1-12.8-5.4-12.9-12.3v-0.3c0-6.9,5.8-12.6,12.9-12.6
12
+	c7.1,0,12.9,5.6,12.9,12.6C567,389.3,561.2,394.9,554.1,394.9z"/>
13
+<path d="M402.6,587.2"/>
14
+<path d="M350.7,581c-109.2-5.2-193.3-38-193.3-77.7c0-25.7,35.3-48.5,89.9-62.8c-45.8,12.3-74.8,30.7-74.8,51.4
15
+	c0,33.6,77.3,61.5,178.2,66.2 M414.8,579.7c109-5.2,193.3-38,193.3-77.8c0-25.7-35.3-48.5-89.9-62.7c45.6,12.3,74.8,30.7,74.8,51.4
16
+	c0,33.6-77.3,61.5-178.1,66.2"/>
17
+<rect x="157.5" y="373.1" class="st0" width="450.6" height="259.3"/>
18
+<text transform="matrix(1 0 0 1 230.6735 488.2739)" class="st1 st2">720</text>
19
+<polygon points="402.6,570.5 350.5,525.9 350.5,615.2 402.6,570.4 "/>
20
+</svg>

Binär
src/pages/about/images/numBg.png Visa fil


+ 236
- 0
src/pages/about/index.html Visa fil

@@ -0,0 +1,236 @@
1
+<!DOCTYPE html>
2
+<html lang="en">
3
+  <head>
4
+    <meta charset="utf-8" />
5
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
6
+    <title>关于卡文</title>
7
+    <meta name="description" content=""/>
8
+    <meta name="Keywords" content=""/>
9
+    <meta
10
+      content="initial-scale=1.0,user-scalable=no,maximum-scale=1,width=device-width"
11
+      name="viewport"
12
+    />
13
+    <link
14
+      href="./static/css/swiper-bundle.min.css"
15
+      rel="stylesheet"
16
+      type="text/css"
17
+    />
18
+    <%= require('../common/tpl/headerLink.tpl') %>
19
+  </head>
20
+
21
+  <body>
22
+    <%= require('../common/tpl/header.tpl') %>
23
+    
24
+    <div class="main">
25
+      <div class="one">
26
+        <div class="h3">企业文化</div>
27
+        <div class="chooseType">
28
+          <span class="oneTit btn2 ckTit h5R">使命</span>
29
+          <span class="h5R">/</span>
30
+          <span class="h5R oneTit btn2">核心价值观</span>
31
+          <span class="h5R">/</span>
32
+          <span class="h5R oneTit btn2">愿景</span>
33
+        </div>
34
+        <div class="swiperDiv">
35
+          <div class="masterDiv masterShow">
36
+            <div class="swiper masterSwiper1">
37
+              <div class="swiper-wrapper">
38
+                <div class="swiper-slide">
39
+                  <img class="lazy" data-src="./static/images/about/one1.jpg" data-srcM="./static/images/about/one1.jpg" alt="" />
40
+                  <div class="h4R">成为新能源技术领先的国际企业,具有创新能力、竞争优势和国际影响力</div>
41
+                </div>
42
+                <!-- 多个直接复制添加swiper-slide -->
43
+                <div class="swiper-slide">
44
+                  <img class="lazy" data-src="./static/images/about/one1.jpg" data-srcM="./static/images/about/one1.jpg" alt="" />
45
+                    <div class="h4R">成为新能源技术领先的国际企业,具有创新能力、竞争优势和国际影响力</div>
46
+                </div>
47
+              </div>
48
+              <!-- 如果需要导航按钮 -->
49
+              <div class="btn-prev btn-prevP1"><span class="icon iconfont icon-jiantou"></span></div>
50
+              <div class="btn-next btn-nextP1"><span class="icon iconfont icon-jiantou"></span></div>
51
+            </div>
52
+            <!-- <a href="" class="btn btnBlack">查看更多</a> -->
53
+          </div>
54
+          <div class="masterDiv">
55
+            <div class="swiper masterSwiper2">
56
+              <div class="swiper-wrapper">
57
+                <div class="swiper-slide">
58
+                  <img class="lazy" data-src="./static/images/about/one1.jpg" data-srcM="./static/images/about/one1.jpg" alt="" />
59
+                  <div class="h4R">成为新能源技术领先的国际企业,具有创新能力、竞争优势和国际影响力</div>
60
+                </div>
61
+                <!-- 多个直接复制添加swiper-slide -->
62
+                <div class="swiper-slide">
63
+                  <img class="lazy" data-src="./static/images/about/one1.jpg" data-srcM="./static/images/about/one1.jpg" alt="" />
64
+                    <div class="h4R">成为新能源技术领先的国际企业,具有创新能力、竞争优势和国际影响力</div>
65
+                </div>
66
+              </div>
67
+              <!-- 如果需要导航按钮 -->
68
+              <div class="btn-prev btn-prevP2"><span class="icon iconfont icon-jiantou"></span></div>
69
+              <div class="btn-next btn-nextP2"><span class="icon iconfont icon-jiantou"></span></div>
70
+            </div>
71
+            <!-- <a href="" class="btn btnBlack">查看更多</a> -->
72
+          </div>
73
+          <div class="masterDiv">
74
+            <div class="swiper masterSwiper3">
75
+              <div class="swiper-wrapper">
76
+                <div class="swiper-slide">
77
+                  <img class="lazy" data-src="./static/images/about/one1.jpg" data-srcM="./static/images/about/one1.jpg" alt="" />
78
+                  <div class="h4R">成为新能源技术领先的国际企业,具有创新能力、竞争优势和国际影响力</div>
79
+                </div>
80
+                <!-- 多个直接复制添加swiper-slide -->
81
+                <div class="swiper-slide">
82
+                  <img class="lazy" data-src="./static/images/about/one1.jpg" data-srcM="./static/images/about/one1.jpg" alt="" />
83
+                  <div class="h4R">成为新能源技术领先的国际企业,具有创新能力、竞争优势和国际影响力</div>
84
+                </div>
85
+              </div>
86
+              <!-- 如果需要导航按钮 -->
87
+              <div class="btn-prev btn-prevP3"><span class="icon iconfont icon-jiantou"></span></div>
88
+              <div class="btn-next btn-nextP3"><span class="icon iconfont icon-jiantou"></span></div>
89
+            </div>
90
+            <!-- <a href="" class="btn btnBlack">查看更多</a> -->
91
+          </div>
92
+        </div>
93
+
94
+      </div>
95
+      <div class="two" id="about1">
96
+        <div class="h3">品牌故事</div>
97
+        <div class="swiper twoSwiper">
98
+          <div class="swiper-wrapper">
99
+            <div class="swiper-slide">
100
+              <img class="lazy" data-src="./static/images/about/two1.jpg" data-srcM="./static/images/about/two1.jpg" alt="" />
101
+              <div class="swTxt">
102
+                <div class="h4">零碳卡文</div>
103
+                <div class="h6R">我们专注打造零碳产品和方案,让低碳惠及每一个人。</div>
104
+              </div>
105
+            </div>
106
+            <div class="swiper-slide">
107
+              <img class="lazy" data-src="./static/images/about/two1.jpg" data-srcM="./static/images/about/two1.jpg" alt="" />
108
+              <div class="swTxt">
109
+                <div class="h4">科技卡文</div>
110
+                <div class="h6R">我们坚信科技成就生态之美,追求创造超客户预期的价值。</div>
111
+              </div>
112
+            </div>
113
+            <div class="swiper-slide">
114
+              <img class="lazy" data-src="./static/images/about/two1.jpg" data-srcM="./static/images/about/two1.jpg" alt="" />
115
+              <div class="swTxt">
116
+                <div class="h4">生态卡文</div>
117
+                <div class="h6R">我们与合作伙伴是一体,共同打造具有革新意义的商业模式。</div>
118
+              </div>
119
+            </div>
120
+            <div class="swiper-slide">
121
+              <img class="lazy" data-src="./static/images/about/two1.jpg" data-srcM="./static/images/about/two1.jpg" alt="" />
122
+              <div class="swTxt">
123
+                <div class="h4">零碳卡文</div>
124
+                <div class="h6R">我们专注打造零碳产品和方案,让低碳惠及每一个人。</div>
125
+              </div>
126
+            </div>
127
+          </div>
128
+          <!-- 如果需要导航按钮 -->
129
+          <div class="btn-prev btn-prevP4"><span class="icon iconfont icon-jiantou"></span></div>
130
+          <div class="btn-next btn-nextP4"><span class="icon iconfont icon-jiantou"></span></div>
131
+        </div>
132
+      </div>
133
+      <div class="three">
134
+        <div class="h3">合作伙伴</div>
135
+        <div class="imgs">
136
+          <img class="lazy" data-src="./static/images/about/three.jpg" data-srcM="./static/images/about/threem.jpg" alt="" />
137
+        </div>
138
+      </div>
139
+      <div class="careersType" id="about2">
140
+        <div class="h3">可持续发展</div>
141
+        <div class="typeCon">
142
+            <div class="infoul">
143
+              <div class="infoLi">
144
+                      <div class="liTitle">
145
+                        <div class="h4R liTit">
146
+                          <div class="wow moveUp liTitMove" data-wow-delay="0.2s">
147
+                            <div>绿色能源解决方案</div>
148
+                          </div>
149
+                        </div>
150
+                        <div class="btn"><div class="btnjbg"></div></div>
151
+                      </div>
152
+                      <div class="infoSonLi">
153
+                        <div class="h6R">
154
+                          <div>我们建设绿色供应链体系,坚持使用可持续材料和环保工艺,实现资源的高效利用和循环再生,降低能源消耗和排放。</div>
155
+                        </div>
156
+                    </div>
157
+              </div>
158
+              <div class="infoLi">
159
+                      <div class="liTitle">
160
+                        <div class="h4R liTit">
161
+                          <div class="wow moveUp liTitMove" data-wow-delay="0.2s">
162
+                            <div>绿色供应链体系</div>
163
+                          </div>
164
+                        </div>
165
+                        <div class="btn"><div class="btnjbg"></div></div>
166
+                      </div>
167
+                      <div class="infoSonLi">
168
+                        <div class="h6R">
169
+                          <div>我们建设绿色供应链体系,坚持使用可持续材料和环保工艺,实现资源的高效利用和循环再生,降低能源消耗和排放。</div>
170
+                        </div>
171
+                    </div>
172
+              </div>
173
+              <div class="infoLi">
174
+                      <div class="liTitle">
175
+                        <div class="h4R liTit">
176
+                          <div class="wow moveUp liTitMove" data-wow-delay="0.2s">
177
+                            <div>绿色能源生态圈</div>
178
+                          </div>
179
+                        </div>
180
+                        <div class="btn"><div class="btnjbg"></div></div>
181
+                      </div>
182
+                      <div class="infoSonLi">
183
+                        <div class="h6R">
184
+                          <div>我们建设绿色供应链体系,坚持使用可持续材料和环保工艺,实现资源的高效利用和循环再生,降低能源消耗和排放。</div>
185
+                        </div>
186
+                    </div>
187
+              </div>
188
+              <div class="infoLi">
189
+                      <div class="liTitle">
190
+                        <div class="h4R liTit">
191
+                          <div class="wow moveUp liTitMove" data-wow-delay="0.2s">
192
+                            <div>碳资产管理</div>
193
+                          </div>
194
+                        </div>
195
+                        <div class="btn"><div class="btnjbg"></div></div>
196
+                      </div>
197
+                      <div class="infoSonLi">
198
+                        <div class="h6R">
199
+                          <div>我们建设绿色供应链体系,坚持使用可持续材料和环保工艺,实现资源的高效利用和循环再生,降低能源消耗和排放。</div>
200
+                        </div>
201
+                    </div>
202
+              </div>
203
+            </div>
204
+        </div>
205
+      </div>
206
+      <div class="five" id="about3">
207
+        <img class="lazy" data-src="./static/images/about/five.jpg" data-srcM="./static/images/about/fivem.jpg" alt="" />
208
+        <div class="fiveText">
209
+          <div class="h3">经销商加盟</div>
210
+          <div class="h6R">我们诚挚邀请您成为我们的经销商加盟伙伴,<br>期待您的加入,让我们一起携手开创更加光明的明天!</div>
211
+          <div class="h4R"><span class="iconfont icon-dianhua"></span>010-69756927</div>
212
+        </div>
213
+      </div>
214
+      <div class="six" id="about4">
215
+        <div class="h3">联系我们</div>
216
+        <div class="h6R">您可以通过以下方式与我们取得联系,期待与您的进一步沟通与合作,感谢您对我们的信任与支持!</div>
217
+        <div class="sixCon">
218
+          <div>
219
+            <div><span class="iconfont icon-dianhua"></span></div>
220
+            <div class="h6R">010-69756927</div>
221
+          </div>
222
+          <div>
223
+            <div><span class="iconfont icon-dadian-1"></span></div>
224
+            <div class="h6R">北京市昌平区未来科学城<br>南区英才南一街5号院2号楼9层901</div>
225
+          </div>
226
+          <div>
227
+            <div><span class="iconfont icon-youjian"></span></div>
228
+            <div class="h6R">chenliang27@foton.com.cn</div>
229
+          </div>
230
+        </div>
231
+      </div>
232
+    </div>
233
+    <%= require('../common/tpl/footer.tpl') %>
234
+    <%= require('../common/tpl/bottomBar.tpl') %>
235
+  </body>
236
+</html>

+ 15
- 0
src/pages/about/index.js Visa fil

@@ -0,0 +1,15 @@
1
+import "./../common/css/common.less";
2
+import "./index.less";
3
+import vhCheck from "vh-check"; //移动端浏览器100vh高度不一致
4
+import App from './App.js';
5
+
6
+// swiper的css目前环境解析不出来,放static下,不走webpack 
7
+//import 'swiper/swiper-bundle.css';
8
+
9
+vhCheck();
10
+//禁止浏览器刷新后回到上一个页面滚动位置
11
+if ('scrollRestoration' in history) {
12
+    history.scrollRestoration = 'manual';
13
+}
14
+
15
+new App();

+ 573
- 0
src/pages/about/index.less Visa fil

@@ -0,0 +1,573 @@
1
+
2
+//pc端样式
3
+.main {
4
+    width: 100%;
5
+    max-width: 1920px;
6
+    margin: 0 auto;
7
+}
8
+
9
+.one{
10
+  width: 100%;
11
+  max-width: 1720px;
12
+  margin: 0 auto;
13
+  text-align: center;
14
+  padding-top: 190px;
15
+  padding-bottom: 120px;
16
+  .chooseType{
17
+    display: flex;
18
+    justify-content: center;
19
+    margin-top: 54px;
20
+    margin-bottom: 40px;
21
+    .oneTit{
22
+      cursor: pointer;
23
+      padding: 0 50px;
24
+    }
25
+    .ckTit{
26
+      color: #48a038;
27
+    }
28
+  }
29
+  .swiperDiv{
30
+    width: 100%;
31
+    .masterDiv{
32
+      width: 100%;
33
+      display: none;
34
+    }
35
+    .masterShow{
36
+      display: block;
37
+    }
38
+    img{
39
+      width: 100%;
40
+      height: auto;
41
+    }
42
+    .btn-prev,.btn-next{
43
+      position: absolute;
44
+      top: 50%;
45
+      margin-top: -22px;
46
+      width: 44px;
47
+      height: 44px;
48
+      border: 1px solid #fff;
49
+      z-index: 2;
50
+      text-align: center;
51
+      color: #fff;
52
+      background: transparent;
53
+      transition: all .3s ease-in-out;
54
+      cursor: pointer;
55
+      span{
56
+        font-size: 36px;
57
+        display: inline-block;
58
+        transform: rotate(90deg);
59
+        line-height: 44px;
60
+
61
+      }
62
+      &:hover{
63
+        background: #48a038;
64
+        border-color: #48a038;
65
+      }
66
+    }
67
+    .btn-prev{
68
+      left: 40px;
69
+      transform: rotate(-180deg);
70
+    }
71
+    .btn-next{
72
+      right: 40px;
73
+    }
74
+    .swiper-button-disabled{
75
+      cursor: no-drop;
76
+      background: transparent;
77
+      color: #979292;
78
+      border-color: #979292;
79
+      &:hover{
80
+        background: transparent;
81
+        border-color: #979292;
82
+        color: #979292;
83
+      }
84
+    }
85
+    .btn{
86
+      margin-top: 90px;
87
+    }
88
+    .swiper-slide{
89
+      .h4R{
90
+        color: #ffffff;
91
+        position: absolute;
92
+        bottom: 58px;
93
+        left: 0px;
94
+        width: 100%;
95
+      }
96
+    }
97
+  }
98
+}
99
+.two{
100
+  width: 100%;
101
+  max-width: 1720px;
102
+  margin: 0 auto;
103
+  text-align: center;
104
+  padding-bottom: 260px;
105
+  .swiper{
106
+    margin-top: 50px;
107
+  }
108
+  .swiper-slide{
109
+    
110
+    img{
111
+      width: 100%;
112
+      display: block;
113
+    }
114
+    .swTxt{
115
+      position: absolute;
116
+      bottom: 0px;
117
+      left: 0px;
118
+      width: 100%;
119
+      padding: 36px 60px;
120
+      width: 100%;
121
+      box-sizing: border-box;
122
+      text-align: left;
123
+      color: #fff;
124
+      .h4{
125
+        margin-bottom: 15px;
126
+      }
127
+    }
128
+  }
129
+  .btn-prev,.btn-next{
130
+    position: absolute;
131
+    top: 50%;
132
+    margin-top: -22px;
133
+    width: 44px;
134
+    height: 44px;
135
+    border: 1px solid #000;
136
+    z-index: 2;
137
+    text-align: center;
138
+    color: #000;
139
+    background: transparent;
140
+    transition: all .3s ease-in-out;
141
+    cursor: pointer;
142
+    span{
143
+      font-size: 36px;
144
+      display: inline-block;
145
+      transform: rotate(90deg);
146
+      line-height: 44px;
147
+
148
+    }
149
+    &:hover{
150
+      background: #48a038;
151
+      border-color: #48a038;
152
+      color: #fff;
153
+    }
154
+  }
155
+  .btn-prev{
156
+    left: 40px;
157
+    transform: rotate(-180deg);
158
+  }
159
+  .btn-next{
160
+    right: 40px;
161
+  }
162
+  .swiper-button-disabled{
163
+    cursor: no-drop;
164
+    background: transparent;
165
+    color: #979292;
166
+    border-color: #979292;
167
+    &:hover{
168
+      background: transparent;
169
+      border-color: #979292;
170
+      color: #979292;
171
+    }
172
+  }
173
+}
174
+.three{
175
+  width: 100%;
176
+  max-width: 1720px;
177
+  margin: 0 auto;
178
+  text-align: center;
179
+  padding-bottom: 150px;
180
+  .imgs{
181
+    width: 100%;
182
+    display: flex;
183
+    justify-content: space-between;
184
+    margin-top: 50px;
185
+    img{
186
+      width: 100%;
187
+      display: block;
188
+    }
189
+  }
190
+}
191
+.careersType{
192
+  width: 100%;
193
+  text-align: center;
194
+  background: rgba(249, 249, 249, 1);
195
+  padding: 120px 0px;
196
+  .typeCon{
197
+      width: 100%;
198
+      max-width: 1300px;
199
+      margin: 0 auto;
200
+      text-align: left;
201
+      margin-top: 30px;
202
+      .infoul{
203
+          width: 100%;
204
+          .infoLi{
205
+              padding: 60px 0;
206
+              border-bottom:1px solid #9FA3A5;
207
+              width: 100%;
208
+              .liTitle{
209
+                  display: flex;
210
+                  width: 100%;
211
+                  justify-content: space-between;
212
+                  cursor: pointer;
213
+                  .liTit{
214
+                      width: calc(100% - 100px);
215
+                      overflow: hidden;
216
+                      display: flex;
217
+                      flex-wrap: wrap;
218
+                      &>div{
219
+                          width: 100%;
220
+                      }
221
+                  }
222
+                  .btn{
223
+                      width: 40px;
224
+                      height: 40px;
225
+                      display: flex;
226
+                      align-items: center;
227
+                      justify-content: center;
228
+                      background-color: #B2B5B7;
229
+                      color: #fff;
230
+                      cursor: pointer;
231
+                      transition: all .3s;
232
+                      position: relative;
233
+                      transform: scale(1);
234
+                      border: 0px solid #48a038;
235
+                      &::before{
236
+                          content: '';
237
+                          width: 10px;
238
+                          height: 2px;
239
+                          background-color: #fff;
240
+                          z-index: 2;
241
+                      }
242
+                      &::after{
243
+                          content: '';
244
+                          width: 2px;
245
+                          height: 10px;
246
+                          background-color: #fff;
247
+                          left: 50%;
248
+                          position: absolute;
249
+                          top: 50%;
250
+                          transform: translate(-50%, -50%);
251
+                      }
252
+                      .btnjbg{
253
+                          position: absolute;
254
+                          bottom: 0px;
255
+                          left: -1px;
256
+                          right: 0px;
257
+                          top: 0px;
258
+                          background-color: #48a038;
259
+                          -webkit-clip-path: inset(100%);
260
+                          clip-path: inset(100%);
261
+                          transition: clip-path .65s cubic-bezier(.19,1,.22,1), -webkit-clip-path .65s cubic-bezier(.19,1,.22,1);
262
+                      }
263
+                      &:hover{
264
+                        border: 0px solid #48a038;
265
+                      }
266
+                  }
267
+              }
268
+              
269
+              .infoSonLi{
270
+                  width: 100%;
271
+                  height: 0px;
272
+                  box-sizing: border-box;
273
+                  overflow: hidden;
274
+                  border-bottom: 1px dashed #000000;
275
+                  margin-bottom: 95px;
276
+                  // transition: all 0.3s ease-in-out;
277
+                  margin-top: 0px;
278
+                  
279
+                  &:last-child{
280
+                      border-bottom: 0px;
281
+                      margin-bottom: 0px;
282
+                      
283
+                  }
284
+                  .h4{
285
+                      margin-top: 80px;
286
+                      font-size: 28px;
287
+                      &:first-child{
288
+                          margin-top: 0;
289
+                          color: #0056a7;
290
+                      }
291
+                  }
292
+                  .h5R{
293
+                      margin-top: 40px;
294
+                  }
295
+                  .text{
296
+                      color: #9fa3a5;
297
+                  }
298
+                  .btn2{
299
+                      margin: 130px 0 140px;
300
+                  }
301
+              }
302
+          }
303
+          .infoLiShow{
304
+              .liTitle{
305
+                  .btn{
306
+                      // background-color: #0054A7;
307
+                      &::before{
308
+                          content: '';
309
+                          width: 10px;
310
+                          height: 2px;
311
+                          background-color: #fff;  
312
+                      }
313
+                      &::after{
314
+                          display: none;
315
+                      }
316
+                      .btnjbg{
317
+                        -webkit-clip-path: inset(0);
318
+                        clip-path: inset(0);
319
+                      }
320
+                  }
321
+              }
322
+              // @-webkit-keyframes textDown{
323
+              //     0%{height: 0%;}
324
+              //     100%{height: 100%;}
325
+              // }
326
+              // @keyframes textDown{
327
+              //     0%{height: 0%;}
328
+              //     100%{height: 100%;}
329
+              // }
330
+              
331
+              .infoSonLi{
332
+                // padding-top: 60px;
333
+              }
334
+          }
335
+      }
336
+  }
337
+}
338
+.five{
339
+  width: 100%;
340
+  max-width: 1720px;
341
+  margin: 0 auto;
342
+  text-align: center;
343
+  position: relative;
344
+  color: #ffffff;
345
+  img{
346
+    width: 100%;
347
+    display: block;
348
+  }
349
+  .fiveText{
350
+    position: absolute;
351
+    width: 100%;
352
+    top: 0px;
353
+    left: 0px;
354
+    padding-top: 75px;
355
+    .h6R{
356
+      margin-top: 26px;
357
+      margin-bottom: 35px;
358
+      br{
359
+        display: none;
360
+      }
361
+    }
362
+    .h4R{
363
+      span{
364
+        font-size: 24px;
365
+        margin-right: 10px;
366
+      }
367
+    }
368
+    
369
+  }
370
+}
371
+.six{
372
+  width: 100%;
373
+  max-width: 1300px;
374
+  margin: 0 auto;
375
+  text-align: center;
376
+  padding-top: 120px;
377
+  .h6R{
378
+    margin-top: 30px;
379
+    margin-bottom: 80px;
380
+  }
381
+  .sixCon{
382
+    display: flex;
383
+    width: 100%;
384
+    justify-content: space-around;
385
+    span{
386
+      display: inline-block;
387
+      padding-bottom: 30px;
388
+      font-size: 38px;
389
+      border-bottom: 1px solid #C9C9C9;
390
+      color: #707271;
391
+    }
392
+  }
393
+}
394
+
395
+
396
+@media screen and (min-width: 801px) and (max-width: 1400px) {
397
+  .main{
398
+      padding: 0px 20px;
399
+      box-sizing: border-box;
400
+      .careersType{
401
+          .typeCon,.h2{
402
+              padding-left: 20px;
403
+          padding-right: 20px;
404
+          box-sizing: border-box;
405
+          }
406
+          
407
+      }
408
+  }
409
+}
410
+.mTxt{
411
+  display: none;
412
+}
413
+//移动端样式
414
+@media screen and (max-width:800px) {
415
+  .pcTxt{
416
+    display: none;
417
+  }
418
+  .mTxt{
419
+    display: block;
420
+  }
421
+  .one{
422
+    padding-top: 110px;
423
+    padding-bottom: 110px;
424
+    .chooseType{
425
+      margin-top: 30px;
426
+      margin-bottom: 40px;
427
+      .oneTit{
428
+        padding: 0 21px;
429
+      }
430
+    }
431
+    .swiperDiv{
432
+      padding: 0 15px;
433
+      box-sizing: border-box;
434
+      .btn-prev,.btn-next{
435
+        margin-top: -12px;
436
+        width: 24px;
437
+        height: 24px;
438
+        display: none;
439
+        span{
440
+          font-size: 22px;
441
+          line-height: 24px;
442
+        }
443
+      }
444
+      .swiper-slide .h4R{
445
+        color: #333333;
446
+        position: relative;
447
+        bottom: auto;
448
+        left: auto;
449
+        width: 100%;
450
+        margin-top: 20px;
451
+        text-align: left;
452
+      }
453
+    }
454
+  }
455
+  .two{
456
+    padding-bottom: 110px;
457
+    .swiper{
458
+      margin-top: 30px;
459
+      .btn-prev,.btn-next{
460
+        display: none;
461
+      }
462
+    }
463
+    .swiper-slide{
464
+      width: 75%;
465
+      .swTxt{
466
+        padding: 30px 20px;
467
+        .h4{
468
+          margin-bottom: 5px;
469
+        }
470
+      }
471
+    }
472
+    
473
+  }
474
+  .three{
475
+    padding: 0px 15px 110px;
476
+    box-sizing: border-box;
477
+    .imgs{
478
+      margin-top: 40px;
479
+    }
480
+  }
481
+
482
+  .careersType{
483
+    padding: 110px 0px;
484
+    .typeCon{
485
+        padding: 0px 15px 0px;
486
+        margin-top: 10px;
487
+        box-sizing: border-box;
488
+        .infoul{
489
+            .infoLi{
490
+                padding: 30px 0;
491
+                .liTitle{
492
+                    align-items: center;
493
+                    .liTit{
494
+                        height: auto;
495
+                        line-height: 25px;
496
+                        width: calc(100% - 40px);
497
+                        overflow: initial;
498
+                    }
499
+                    .btn{
500
+                        width: 25px;
501
+                        height: 25px;
502
+                        left: 0px;
503
+                        .btnjbg{
504
+                            left: 0px;
505
+                        }
506
+                        &::before{
507
+                            content: '';
508
+                            width: 8px;
509
+                            height: 2px;
510
+                        }
511
+                        &::after{
512
+                            content: '';
513
+                            width: 2px;
514
+                            height: 8px;
515
+                        }
516
+                    }
517
+                }
518
+                .infoSonLi{
519
+                    margin-bottom: 75px;
520
+                    .text{
521
+                        margin-bottom: 0px;
522
+                    }
523
+                }
524
+            }
525
+        }
526
+    }
527
+}
528
+  .five{
529
+    .fiveText{
530
+      padding-top: 52px;
531
+      .h6R{
532
+        margin-top: 9px;
533
+        margin-bottom: 24px;
534
+        line-height: 27px;
535
+        br{
536
+          display: block;
537
+        }
538
+      }
539
+      .h4R{
540
+        font-size: 14px;
541
+        span{
542
+          font-size: 19px;
543
+          margin-right: 10px;
544
+        }
545
+      }
546
+    }
547
+  }
548
+  .six{
549
+    padding: 110px 15px;
550
+    box-sizing: border-box;
551
+    .h6R{
552
+      margin-top: 25px;
553
+      margin-bottom: 0px;
554
+    }
555
+    .sixCon{
556
+      justify-content: flex-start;
557
+      flex-wrap: wrap;
558
+      flex-direction: column;
559
+      align-items: center;
560
+      &>div{
561
+        margin-top: 50px;
562
+      }
563
+      span{
564
+        font-size: 19px;
565
+        padding-bottom: 15px;
566
+      }
567
+      .h6R{
568
+        margin-top: 16px;
569
+      }
570
+    }
571
+  }
572
+
573
+}

+ 79
- 0
src/pages/common/components/Select.css Visa fil

@@ -0,0 +1,79 @@
1
+.select-title {
2
+    padding-left: 10px;
3
+    width: calc(100%-10px);
4
+    height: 30px;
5
+    line-height: 30px;
6
+    color: #fff;
7
+    border-bottom: solid 1px #5B5B5B;
8
+}
9
+.select-title::after{
10
+    content: "";
11
+    display: block;
12
+    float: right;
13
+    width: 20px;
14
+    height: 100%;
15
+    /* background-color: aqua; */
16
+    background-image: url("./icon.svg");
17
+    background-repeat: no-repeat;
18
+    background-size: contain;
19
+    background-position: 50% 50%;
20
+}
21
+.select-title-open::after{
22
+    transform: scaleY(-1);
23
+}
24
+
25
+.select-dropList {
26
+    position: absolute;
27
+    top: 40px;
28
+    margin-top: 1px;
29
+    padding-top: 10px;
30
+    padding-bottom: 10px;
31
+    width: 100%;
32
+    height: 250px;
33
+    max-height: 400px;
34
+    overflow: hidden;
35
+    overflow-y: auto;
36
+    background-color: #181818;
37
+    z-index: 99;
38
+    transition: all 0.3s ease 0s;
39
+}
40
+
41
+.select-dropList::-webkit-scrollbar {
42
+    width: 3px;
43
+    /* background-color: #666; */
44
+}
45
+
46
+.select-dropList::-webkit-scrollbar-thumb {
47
+    background-color: #b5b5b5;
48
+}
49
+
50
+.select-dropList-close {
51
+    visibility: hidden;
52
+    opacity: 0;
53
+    transform: translateY(-40px);
54
+}
55
+
56
+.select-dropList-open {
57
+    visibility: visible;
58
+    opacity: 1;
59
+    transform: translateY(0px);
60
+}
61
+
62
+.select-listItem {
63
+    margin-left: 20px;
64
+    color: #999999;
65
+    font-size: 16px;
66
+    line-height: 30px;
67
+    cursor: pointer;
68
+}
69
+
70
+
71
+.select-listItem:hover {
72
+    color: #fff;
73
+}
74
+@media screen and (max-width:800px) {
75
+    .select-listItem{
76
+        font-size:12px;
77
+    }
78
+    
79
+}

+ 125
- 0
src/pages/common/components/Select.js Visa fil

@@ -0,0 +1,125 @@
1
+import "./Select.css";
2
+export default class Select {
3
+  /**
4
+   * @param {HTMLElement} dom 初始化组件的容器
5
+   * @param {Object[]}  data -  下拉列表数组
6
+   * @param {string} data[].value - 列表实际值
7
+   * @param {string} data[].label - 列表显示值
8
+   * @param {string} [defaultVal] - 默认标题
9
+   */
10
+  constructor(dom, data, defaultVal) {
11
+    this.dom = dom;
12
+    this.data = data;
13
+    this.defaultVal = defaultVal || "-请选择-";
14
+    this.createDom();
15
+  }
16
+
17
+  createDom() {
18
+    let title = document.createElement("div");
19
+    title.className = "select-title";
20
+    title.innerText = this.defaultVal;
21
+    this.dom.appendChild(title);
22
+    this.title = title;
23
+
24
+    //
25
+    let dropList = document.createElement("div");
26
+    dropList.className = "select-dropList";
27
+    dropList.classList.add("select-dropList-close");
28
+    dropList.classList.add("swiper-no-swiping");
29
+    dropList.dataset.flag = 0;
30
+    this.dom.appendChild(dropList);
31
+    this.dropList = dropList;
32
+    //
33
+    let data = this.data;
34
+    this.setData(data);
35
+    //
36
+    title.addEventListener("click", (e) => {
37
+      console.log(dropList.dataset);
38
+      if (this.data.length == 0) return;
39
+      if (dropList.dataset.flag == 0) {
40
+        this.open();
41
+      } else {
42
+        this.close();
43
+      }
44
+    });
45
+    //
46
+    dropList.addEventListener("click", (e) => {
47
+      this.close();
48
+      if (e.target.classList.contains("select-listItem")) {
49
+        let indexId = e.target.dataset.indexId;
50
+        //
51
+        this.toSelect(indexId);
52
+      }
53
+    });
54
+    //
55
+    document.addEventListener("click", (e) => {
56
+      //点击组件外部
57
+      if (!this.dom.contains(e.target)) {
58
+        this.close();
59
+      } else {
60
+        //console.log("---------");
61
+      }
62
+    });
63
+  }
64
+  //设置数据
65
+  setData(data) {
66
+    //清空容器
67
+    while (this.dropList.firstChild) {
68
+      this.dropList.removeChild(this.dropList.lastChild);
69
+    }
70
+    //
71
+    this.data = data;
72
+    data.forEach((item, index) => {
73
+      let listItem = document.createElement("div");
74
+      listItem.dataset.value = item["value"];
75
+      listItem.dataset.label = item["label"];
76
+      listItem.dataset.indexId = index;
77
+      listItem.innerText = item["label"];
78
+      listItem.className = "select-listItem";
79
+      this.dropList.appendChild(listItem);
80
+    });
81
+  }
82
+
83
+  reset(isClearData) {
84
+    this.title = this.defaultVal;
85
+    if (isClearData) {
86
+      this.data = [];
87
+      while (this.dropList.firstChild) {
88
+        this.dropList.removeChild(this.dropList.lastChild);
89
+      }
90
+    }
91
+  }
92
+
93
+  //选择某一项,并对外派发事件
94
+  toSelect(indexId) {
95
+    console.log(this.data, indexId, "fffffffffffffff");
96
+    let selectedData = this.data[indexId];
97
+    this.title.innerText = this.data[indexId].label;
98
+    this.sendEvent(selectedData);
99
+  }
100
+
101
+  open() {
102
+    this.dropList.dataset.flag = 1;
103
+    this.title.classList.add("select-title-open");
104
+    this.dropList.classList.remove("select-dropList-close");
105
+    this.dropList.classList.add("select-dropList-open");
106
+  }
107
+
108
+  close() {
109
+    this.dropList.dataset.flag = 0;
110
+    if (this.title.classList) {
111
+      this.title.classList.remove("select-title-open");
112
+    }
113
+    this.dropList.classList.remove("select-dropList-open");
114
+    this.dropList.classList.add("select-dropList-close");
115
+  }
116
+
117
+  sendEvent(data) {
118
+    let event = new CustomEvent("change", {
119
+      detail: {
120
+        value: data,
121
+      },
122
+    });
123
+    this.dom.dispatchEvent(event);
124
+  }
125
+}

+ 1
- 0
src/pages/common/components/icon.svg Visa fil

@@ -0,0 +1 @@
1
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1679477930257" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2765" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M917.284001 297.722752c-5.406127-5.437849-13.06762-8.396227-21.479197-8.396227-9.611915 0-18.953677 3.844561-25.713638 10.543124L511.980046 659.992589 153.873018 299.91672c-6.729262-6.745634-16.072047-10.619872-25.654286-10.619872-8.470929 0-16.131399 2.989077-21.598924 8.457626-12.301164 12.435217-11.32493 33.69031 2.192945 47.312562l376.764969 378.821815c6.758937 6.788613 15.860223 10.723226 25.052582 10.8143l3.425006 0c8.981559-0.301875 17.814738-4.205788 24.423249-10.8143l376.733247-378.852514C928.728658 331.382363 929.690566 310.113967 917.284001 297.722752" fill="#666" p-id="2766"></path></svg>

+ 999
- 0
src/pages/common/css/common.less
Filskillnaden har hållits tillbaka eftersom den är för stor
Visa fil


+ 2839
- 0
src/pages/common/css/index.css
Filskillnaden har hållits tillbaka eftersom den är för stor
Visa fil


Binär
src/pages/common/images/logoB.png Visa fil


Binär
src/pages/common/images/logoW.png Visa fil


Binär
src/pages/common/images/logoWm.png Visa fil


+ 220
- 0
src/pages/common/js/Common.js Visa fil

@@ -0,0 +1,220 @@
1
+/* 
2
+页面公共部分
3
+包含头部导航、页脚等
4
+ */
5
+
6
+import { isMobile } from "./utils";
7
+import gsap from 'gsap'
8
+import LocomotiveScroll from 'locomotive-scroll';
9
+export default class Common {
10
+  /* 
11
+    mainDom - 菜单展开时,需要往下移动的dom节点
12
+    curNavId - 当前栏目id,控制哪个栏目默认高亮。首页为:-1
13
+     */
14
+  constructor(mainDom, curNavId) {
15
+    this.mainDom = mainDom;
16
+    this.curNavId = curNavId;
17
+    this.isMobile = isMobile();
18
+    //判断是否移动端
19
+    if (this.isMobile) {
20
+      this.initHeaderM();
21
+      this.initFooterM();
22
+    } else {
23
+      this.headerMenu();
24
+    }
25
+    new WOW().init();
26
+    
27
+    // let goTop = document.querySelector(".goTopBtn");
28
+    // const scroll = new LocomotiveScroll();
29
+    // goTop.addEventListener("click", (e) => {
30
+    //   console.log('click');
31
+      
32
+    //   scroll.scrollTo(0);
33
+    //   console.log('click2');
34
+    // });
35
+    // window.requestUrl = 'https://www.foton.com.cn';
36
+    this.textAni();
37
+    
38
+  }
39
+  textAni(){
40
+    let mod = this.isMobile;
41
+    let texts=document.querySelectorAll(".aniTxtUp");
42
+    texts.forEach(text=>{
43
+      let txt=text.innerText;
44
+      let txtDiv=txt.split(' ');
45
+      text.innerHTML='';
46
+      let textNow='';
47
+      let delTime=0;
48
+
49
+      txtDiv.forEach(itemTxt=>{
50
+        if(mod){
51
+          textNow+=`<div class="wow wordInUp" data-wow-delay="`+delTime.toFixed(2)+`s">${itemTxt}</div> `;
52
+          delTime+=0.1;
53
+        }else{
54
+          textNow+=`<div>`;
55
+          let txtArr=itemTxt.split('');
56
+          txtArr.forEach(item=>{
57
+            // if(item===' '){
58
+            //   item='&nbsp;';
59
+            // }
60
+            textNow+=`<span class="wow wordInUp" data-wow-delay="`+delTime.toFixed(2)+`s">${item}</span>`;
61
+            delTime+=0.02;
62
+          })
63
+          textNow+=`</div> `
64
+        }
65
+        
66
+        
67
+      })
68
+      text.innerHTML=textNow;
69
+      
70
+      
71
+      
72
+    })
73
+  }
74
+  //pc头部菜单
75
+  headerMenu() {
76
+    // 获取所有匹配的元素
77
+    let menuItems = document.querySelectorAll(".menuOne");
78
+    let navItems = document.querySelectorAll(".menu .menuOne");
79
+
80
+    let logo = document.querySelector(".headerPC .logo");
81
+    logo.addEventListener("click", (e) => {
82
+      window.location.href ="/index.html"
83
+    });
84
+    
85
+    //设置一级菜单高亮
86
+    let curNavId=this.curNavId;
87
+    navItems.forEach((item, index) => {
88
+      item.dataset.id = index;
89
+      if (curNavId == index) {
90
+        item.classList.add("menuClicked");
91
+      }
92
+    });
93
+
94
+    // 为每个元素添加 mouseenter 事件监听器
95
+    menuItems.forEach(function(item) {
96
+      try {
97
+        item.addEventListener("mouseenter", (e) => {
98
+          let targetDom = item.querySelector(".menuSon");
99
+          if (targetDom?.classList?.contains("open")) {
100
+            console.log("元素有 open 类");
101
+          } else {
102
+            if(targetDom){targetDom.classList.add("open");
103
+            gsap.fromTo(targetDom, { yPercent: -10,opacity:0}, { yPercent: 0,opacity:1});}
104
+          }
105
+        });
106
+          
107
+          item.addEventListener("mouseleave", (e) => {
108
+            let targetDom = item.querySelector(".menuSon");
109
+          if (targetDom?.classList?.contains("open")) {
110
+            gsap.to(targetDom, {
111
+              yPercent: -10,opacity:0,
112
+              onComplete: () => {
113
+                targetDom.classList.remove("open");
114
+              }
115
+            })
116
+          } 
117
+          
118
+        });
119
+      } catch (error) {}
120
+    });
121
+    //向下滚动隐藏菜单,向上滚动显示菜单
122
+    // 获取滚动条位置并更新显示
123
+    let scrollyOld=0;
124
+    let headerDom = document.querySelector("header");
125
+    let careersType = document.querySelector(".careersType .titleBg");
126
+    let isMobile=this.isMobile;
127
+    function updateScrollChange() {
128
+      try {
129
+        
130
+        let scrollY = window.scrollY;
131
+        if(scrollyOld<scrollY&&!headerDom.classList.contains("hideHeader")){
132
+          headerDom.classList.add("hideHeader");
133
+          careersType.classList.remove("topType");
134
+        }else if(scrollyOld>scrollY&&headerDom.classList.contains("hideHeader")){
135
+          headerDom.classList.remove("hideHeader");
136
+          if(careersType&&!isMobile){
137
+            careersType.classList.add("topType");
138
+          }
139
+        }
140
+        scrollyOld=scrollY;
141
+      } catch (error) {}
142
+    }
143
+  
144
+      
145
+  // 添加滚动事件监听器
146
+  window.addEventListener('scroll', updateScrollChange);
147
+  
148
+    
149
+  }
150
+  
151
+  //移动端头部
152
+  initHeaderM() {
153
+    let navFlagBtn = document.querySelector(".headerMobile .navFlagBtn");
154
+    let navFlag = document.querySelector(".headerMobile .navFlag");
155
+    let navMenu = document.querySelector(".headerMobile .navMenu");
156
+    let logo = document.querySelector(".headerMobile .logo");
157
+    logo.addEventListener("click", (e) => {
158
+      window.location.href ="/index.html"
159
+    });
160
+
161
+    navMenu.addEventListener("click", (e) => {
162
+      console.log("click");
163
+      navFlagBtn.click();
164
+    });
165
+    
166
+    //0-关闭状态、1-为打开状态
167
+    navFlagBtn.addEventListener("click", (e) => {
168
+      let flag = parseInt(navFlagBtn.dataset.flag) || 0;
169
+      if (flag == 0) {
170
+        navFlagBtn.dataset.flag = 1;
171
+        navFlagBtn
172
+          .querySelector(".lineTop")
173
+          .classList.add("arrowDirectionDown");
174
+        navFlagBtn
175
+          .querySelector(".lineBottom")
176
+          .classList.add("arrowDirectionUp");
177
+        navFlagBtn
178
+          .querySelector(".lineCenter")
179
+          .classList.add("arrowDirectionCenter");
180
+        navFlag.classList.add("FlagOpen");
181
+        navFlagBtn.classList.add("btnOpen");
182
+        gsap.fromTo(navFlag, { xPercent: 100,opacity:0}, { xPercent: 0,opacity:1});
183
+      } else {
184
+        navFlagBtn.dataset.flag = 0;
185
+        navFlagBtn
186
+          .querySelector(".lineTop")
187
+          .classList.remove("arrowDirectionDown");
188
+        navFlagBtn
189
+          .querySelector(".lineBottom")
190
+          .classList.remove("arrowDirectionUp");
191
+        navFlagBtn
192
+          .querySelector(".lineCenter")
193
+          .classList.remove("arrowDirectionCenter");
194
+        gsap.to(navFlag, {
195
+            xPercent: 100,opacity:0,
196
+            onComplete: () => {
197
+              navFlag.classList.remove("FlagOpen");
198
+            }
199
+          });
200
+          navFlagBtn.classList.remove("btnOpen");
201
+      }
202
+    });
203
+  }
204
+
205
+  initFooterM(){
206
+    let menuItems = document.querySelectorAll(".footerClick");
207
+    menuItems.forEach(function(item) {
208
+        let targetDom = item.querySelector(".h7");
209
+        targetDom.setAttribute("href", "javascript:void(0)");
210
+        item.addEventListener("click", (e) => {
211
+          if (item?.classList?.contains("ckShow")) {
212
+            item.classList.remove("ckShow");
213
+          } else {
214
+           item.classList.add("ckShow");
215
+          }
216
+        });
217
+    });
218
+  }
219
+  
220
+}

+ 113
- 0
src/pages/common/js/utils.js Visa fil

@@ -0,0 +1,113 @@
1
+function isMobile() {
2
+    
3
+    let isMobile =  /Android|webOS|iPhone|iPad|iPod|BlackBerry|opera mini|opera mobile|appleWebkit.*mobile|mobile/i.test(
4
+        navigator.userAgent
5
+    );
6
+    if(window.innerWidth < 1080)isMobile=true;
7
+    return isMobile
8
+}
9
+
10
+//判断元素是否在可视区
11
+function isInViePortOfOne(el) {
12
+    const viewPortHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight
13
+    const offsetTop = el.offsetTop
14
+    const scollTop = document.documentElement.scrollTop
15
+    const top = offsetTop - scollTop
16
+    return top <= viewPortHeight && top >= 0
17
+}
18
+
19
+// 滚动时动画动态显示  (动画类,触发时距离视口底部距离, 元素消失时距离视口距离)
20
+function scrollFun(elements, Bot_show, Top_disp, if_loop = true) {
21
+    let doms = document.querySelectorAll(elements)
22
+    window.addEventListener('scroll', debounce(callback, 200))
23
+
24
+    function callback(params) {
25
+        doms.forEach((dom) => {
26
+            //视口高度
27
+            const viewPortHeight =
28
+                window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight
29
+            //元素在页面中位置
30
+            const offsetTop = getEleTop(dom)
31
+            //页面滚动高度
32
+            const scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop
33
+            //元素到视口顶部的距离;
34
+            const top = offsetTop - scrollTop
35
+            // console.log(top, Top_disp)
36
+            if (top <= viewPortHeight - Bot_show && top >= Top_disp) {
37
+                dom.classList.add('ani-fadeIn')
38
+            } else if (if_loop) {
39
+                //dom.classList.remove('ani-fadeIn')
40
+            }
41
+        })
42
+    }
43
+    // 主动触发一次滚动事件
44
+    const scrollEvent = new Event('scroll')
45
+    window.dispatchEvent(scrollEvent)
46
+}
47
+
48
+// 滚动时动画动态显示  (动画类,触发时距离视口底部距离, 元素消失时距离视口距离)
49
+function scrollFun2(wrpDoms, setHeightDoms, Bot_show, Top_disp, posi) {
50
+    let wrp_Doms = document.querySelectorAll(wrpDoms)
51
+    let height_Doms = document.querySelectorAll(setHeightDoms)
52
+    // let scale_Doms = document.querySelectorAll(setScaleDoms)
53
+    // 初始化位置
54
+    wrp_Doms.forEach((dom, index) => {
55
+        if (posi[index]) {
56
+            dom.style.top = posi[index]['y'] + 'px'
57
+            dom.style.left = posi[index]['x'] + 'px'
58
+        } else {
59
+            // dom.style.opacity = 0
60
+        }
61
+    })
62
+    document.querySelector('.cirs2').style.opacity = '0'
63
+    window.addEventListener('scroll', debounce(callback, 200))
64
+
65
+    function callback(params) {
66
+        height_Doms.forEach((dom, index) => {
67
+            //视口高度
68
+            const viewPortHeight =
69
+                window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight
70
+            //元素在页面中位置
71
+            const offsetTop = getEleTop(dom)
72
+            //页面滚动高度
73
+            const scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop
74
+            //元素到视口顶部的距离;
75
+            const top = offsetTop - scrollTop
76
+            // console.log(top, Top_disp)
77
+            if (top <= viewPortHeight - Bot_show && top >= Top_disp) {
78
+                dom.classList.add(posi[index]?.high ? 'rise_120' : 'rise_60')
79
+                dom.querySelector('.circle_big').classList.add('scale')
80
+            } else {
81
+                // dom.classList.remove('rise_120')
82
+                // dom.classList.remove('rise_60')
83
+            }
84
+        })
85
+    }
86
+    // 主动触发一次滚动事件
87
+    const scrollEvent = new Event('scroll')
88
+    window.dispatchEvent(scrollEvent)
89
+}
90
+
91
+// 获取面向document的绝对高度
92
+function getEleTop(dom) {
93
+    let top = dom.offsetTop
94
+    while (dom != document.body && dom.offsetParent) {
95
+        dom = dom.offsetParent
96
+        top += dom.offsetTop
97
+    }
98
+    return top
99
+}
100
+
101
+// 节流(单位时间执行一次)
102
+function debounce(fn, wait) {
103
+    let timer = null
104
+    return function (params) {
105
+        if (timer) return false
106
+        timer = setTimeout(() => {
107
+            fn()
108
+            timer = null
109
+        }, wait)
110
+    }
111
+}
112
+
113
+export { isMobile, scrollFun, scrollFun2 }

+ 0
- 0
src/pages/common/tpl/bottomBar.tpl Visa fil


+ 67
- 0
src/pages/common/tpl/footer.tpl Visa fil

@@ -0,0 +1,67 @@
1
+<footer>
2
+    <div class="wow fadeIn footer">
3
+        <div class="footerClick">
4
+            <a class="h7" href="./news.html"><span>产品</span></a>
5
+            <span class="icon iconfont icon-arrow-right"></span>
6
+            <div class="footerShow show1"><a class="h7R" href="./news.html"><span>新能源整车</span></a>
7
+            <a class="h7R" href="./news.html#structure"><span>核心零部件</span></a>
8
+            <a class="h7R" href="./news.html#structure"><span>充电站</span></a>
9
+            <a class="h7R" href="./news.html#structure"><span>软件服务</span></a></div>
10
+        </div>
11
+        <div class="footerClick">
12
+            <a class="h7" href="./aboutUs.html"><span>解决方案</span></a>
13
+            <span class="icon iconfont icon-arrow-right"></span>
14
+            <div class="footerShow show2"><a class="h7R" href="./aboutUs.html#introduction"><span>能源管理方案</span></a>
15
+            <a class="h7R" href="./aboutUs.html#structure"><span>智慧能源管理体系</span></a>
16
+            <a class="h7R" href="./aboutUs.html#structure"><span>租贸业务管理方案</span></a>
17
+            <a class="h7R" href="./aboutUs.html#structure"><span>二手车解决方案</span></a></div>
18
+        </div>
19
+        <div class="footerClick">
20
+            <a class="h7" href="./serve.html"><span>服务</span></a>
21
+            <span class="icon iconfont icon-arrow-right"></span>
22
+            <div class="footerShow show3"><a class="h7R" href="./serve.html"><span>购车流程</span></a>
23
+            <a class="h7R" href="./serve.html#serve2"><span>门店地图</span></a>
24
+            <a class="h7R" href="./serve.html#serve3"><span>门店预约体验</span></a>
25
+            <a class="h7R" href="./serve.html#serve4"><span>服务体系</span></a>
26
+            <a class="h7R" href="./serve.html#serve5"><span>用户留言</span></a></div>
27
+        </div>
28
+        <div class="footerClick">
29
+            <a class="h7" href="./aboutUs.html"><span>新闻资讯</span></a>
30
+            <span class="icon iconfont icon-arrow-right"></span>
31
+            <div class="footerShow show4"><a class="h7R" href="./aboutUs.html#introduction"><span>公司新闻</span></a>
32
+            <a class="h7R" href="./aboutUs.html#structure"><span>行业新闻</span></a></div>
33
+        </div>
34
+        <div class="footerClick">
35
+            <a class="h7" href="./about.html"><span>关于卡文</span></a>
36
+            <span class="icon iconfont icon-arrow-right"></span>
37
+            <div class="footerShow show5"><a class="h7R" href="./about.html#about1"><span>品牌故事</span></a>
38
+            <a class="h7R" href="./about.html#about2"><span>可持续发展</span></a>
39
+            <a class="h7R" href="./about.html#about3"><span>经销商加盟</span></a>
40
+            <a class="h7R" href="./about.html#about4"><span>联系我们</span></a></div>
41
+        </div>
42
+    </div>
43
+    <div class="footerIcon">
44
+        <div><span class="icon iconfont icon-weixin"></span></div>
45
+        <div><span class="icon iconfont icon-douyin"></span></div>
46
+        <div><span class="icon iconfont icon-weibo"></span></div>
47
+        <div><span class="icon iconfont icon-kuaishou"></span></div>
48
+    </div>
49
+    <div class="footerText">法律声明 <span></span>隐私政策 <br>版权公告 Copyright © 2024 北京卡文新能源汽车有限公司 <br><a href="https://beian.miit.gov.cn/#/Integrated/index">京ICP备2023038730号</a></div>
50
+    <!--<div class="goTop">
51
+        <div class="btn goTopBtn">
52
+                  <a href="javascript:void(0);">
53
+                    <div class="btnShow">
54
+                          <div class="btnMove">
55
+                            <div class="btnIcon"></div>
56
+                            <div class="btnIcon"></div>
57
+                          </div>
58
+                        </div>
59
+                  </a>
60
+                </div>
61
+    </div> -->
62
+</footer>
63
+<div class="chooseM">
64
+    <a href="">购车咨询</a>
65
+    <span></span>
66
+    <a href="./serveBooking.html">门店预约体验</a>
67
+</div>

+ 0
- 0
src/pages/common/tpl/header.tpl Visa fil


Vissa filer visades inte eftersom för många filer har ändrats

Laddar…
Avbryt
Spara