chao 1 год назад
Родитель
Сommit
fc9fe1d3a1
6 измененных файлов с 232 добавлено и 9 удалено
  1. 36 7
      package-lock.json
  2. 1 0
      package.json
  3. 14 0
      src/App.vue
  4. 3 0
      src/assets/main.css
  5. 2 2
      src/views/iframeRoute.vue
  6. 176 0
      vue.config.js

+ 36 - 7
package-lock.json

@@ -8,6 +8,7 @@
       "name": "course_resources",
       "version": "0.0.0",
       "dependencies": {
+        "axios": "^1.6.7",
         "element-plus": "^2.5.3",
         "pinia": "^2.1.7",
         "sass": "^1.70.0",
@@ -1083,8 +1084,17 @@
     "node_modules/asynckit": {
       "version": "0.4.0",
       "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
-      "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
-      "dev": true
+      "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+    },
+    "node_modules/axios": {
+      "version": "1.6.7",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz",
+      "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==",
+      "dependencies": {
+        "follow-redirects": "^1.15.4",
+        "form-data": "^4.0.0",
+        "proxy-from-env": "^1.1.0"
+      }
     },
     "node_modules/balanced-match": {
       "version": "1.0.2",
@@ -1207,7 +1217,6 @@
       "version": "1.0.8",
       "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
       "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
-      "dev": true,
       "dependencies": {
         "delayed-stream": "~1.0.0"
       },
@@ -1322,7 +1331,6 @@
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
       "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
-      "dev": true,
       "engines": {
         "node": ">=0.4.0"
       }
@@ -1488,6 +1496,25 @@
         "node": ">=8"
       }
     },
+    "node_modules/follow-redirects": {
+      "version": "1.15.5",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz",
+      "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==",
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://github.com/sponsors/RubenVerborgh"
+        }
+      ],
+      "engines": {
+        "node": ">=4.0"
+      },
+      "peerDependenciesMeta": {
+        "debug": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/foreground-child": {
       "version": "3.1.1",
       "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
@@ -1508,7 +1535,6 @@
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
       "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
-      "dev": true,
       "dependencies": {
         "asynckit": "^0.4.0",
         "combined-stream": "^1.0.8",
@@ -1890,7 +1916,6 @@
       "version": "1.52.0",
       "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
       "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
-      "dev": true,
       "engines": {
         "node": ">= 0.6"
       }
@@ -1899,7 +1924,6 @@
       "version": "2.1.35",
       "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
       "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
-      "dev": true,
       "dependencies": {
         "mime-db": "1.52.0"
       },
@@ -2253,6 +2277,11 @@
       "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==",
       "dev": true
     },
+    "node_modules/proxy-from-env": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+      "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+    },
     "node_modules/psl": {
       "version": "1.9.0",
       "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",

+ 1 - 0
package.json

@@ -10,6 +10,7 @@
     "test:unit": "vitest"
   },
   "dependencies": {
+    "axios": "^1.6.7",
     "element-plus": "^2.5.3",
     "pinia": "^2.1.7",
     "sass": "^1.70.0",

+ 14 - 0
src/App.vue

@@ -1,6 +1,20 @@
 <script setup>
+import { onMounted } from 'vue'
 import { RouterLink, RouterView } from 'vue-router'
 import Header from './views/header.vue';
+import axios from 'axios';
+
+onMounted(() => {
+  console.log(11)
+  let params = {
+    grantCode: "dbd3860f8e4045deb8fae3a33049840f",
+    redirectUri: "https://cloud.cocorobo.cn/testapi"
+  }
+  axios.post('//cloud.cocorobo.cn/api/getAccessToken', JSON.stringify(params)).then(res => {
+    console.log(res)
+  })
+})
+
 </script>
 
 <template>

+ 3 - 0
src/assets/main.css

@@ -1,5 +1,8 @@
 @import './base.css';
 
+*{
+  box-sizing: border-box;
+}
 #app {
   /* padding: 0 20px; */
   height: 100vh;

+ 2 - 2
src/views/iframeRoute.vue

@@ -58,7 +58,7 @@ onMounted(()=>{
 .el-page-header {
     padding: 20px 10%;
     background: #F0F2F5;
-    height: 100%;
+    height: calc(100% - 60px);
 
     .el-page-header__header {
         display: none;
@@ -66,7 +66,7 @@ onMounted(()=>{
 
     .el-page-header__main {
         width: 100%;
-        height: 100%;
+        height: calc(100% - 30px);
 
         .iframDiv {
             width: 100%;

+ 176 - 0
vue.config.js

@@ -0,0 +1,176 @@
+const path = require("path");
+const resolve = dir => path.join(__dirname, dir);
+//用于生产环境去除多余的css
+const PurgecssPlugin = require("purgecss-webpack-plugin");
+//全局文件路径
+const glob = require("glob-all");
+//压缩代码并去掉console
+const UglifyJsPlugin = require("uglifyjs-webpack-plugin");
+//代码打包zip
+const CompressionWebpackPlugin = require("compression-webpack-plugin");
+const productionGzipExtensions = /\.(js|css|json|txt|html|ico|svg)(\?.*)?$/i;
+module.exports = {
+  // 废弃baseUrl  一般运维会配置好的
+  publicPath: process.env.NODE_ENV === "production" ? "/" : "/",
+  //打包的输出目录
+//   outputDir: "dist/",
+  //保存时是否校验
+  lintOnSave: true,
+  //如果文件等设置
+  pages: {
+    index: {
+      entry: "src/main.js",
+      template: "public/index.html",
+      filename: "index.html"
+    }
+  },
+  //静态资源打包路径
+  assetsDir: "static",
+  //默认false 可以加快打包
+  productionSourceMap: false,
+  //打包后的启动文件
+  indexPath: "congfigtest.html",
+  //打包文件是否使用hash
+  filenameHashing: true,
+  runtimeCompiler: false,
+  transpileDependencies: [],
+  //打包的css路径及命名
+  css: {
+    modules: false,
+    //vue 文件中修改css 不生效 注释掉  extract:true
+    extract: {
+      filename: "style/[name].[hash:8].css",
+      chunkFilename: "style/[name].[hash:8].css"
+    },
+    sourceMap: false,
+    loaderOptions: {
+      css: {},
+      less: {
+        // 向全局less样式传入共享的全局变量
+        // data: `@import "~assets/less/variables.less";$src: "${process.env.VUE_APP_SRC}";`
+      },
+      // postcss 设置
+      postcss: {
+        plugins: [
+          require("postcss-px-to-viewport")({
+            viewportWidth: 750, // 视窗的宽度,对应的是我们设计稿的宽度,一般是750
+            viewportHeight: 1334, // 视窗的高度,根据750设备的宽度来指定,一般指定1334,也可以不配置
+            unitPrecision: 3, // 指定`px`转换为视窗单位值的小数位数(很多时候无法整除)
+            viewportUnit: "vw", // 指定需要转换成的视窗单位,建议使用vw
+            selectorBlackList: [".ignore", ".hairlines"], // 指定不转换为视窗单位的类,可以自定义,可以无限添加,建议定义一至两个通用的类名
+            minPixelValue: 1, // 小于或等于`1px`不转换为视窗单位,你也可以设置为你想要的值
+            mediaQuery: false // 允许在媒体查询中转换`px`
+          })
+        ]
+      }
+    }
+  },
+  //webpack 链式配置   默认已经配置好了  node_moudles/@vue
+  chainWebpack: config => {
+    // 修复HMR
+    config.resolve.symlinks(true);
+    // 修复Lazy loading routes  按需加载的问题,如果没有配置按需加载不需要写,会报错
+    // config.plugin("html").tap(args => {
+    //   args[0].chunksSortMode = "none";
+    //   return args;
+    // });
+    //添加别名
+    config.resolve.alias
+      .set("@", resolve("src"))
+      .set("assets", resolve("src/assets"))
+      .set("components", resolve("src/components"))
+      .set("layout", resolve("src/layout"))
+      .set("base", resolve("src/base"))
+      .set("static", resolve("src/static"));
+    // 压缩图片
+    config.module
+      .rule("images")
+      .use("image-webpack-loader")
+      .loader("image-webpack-loader")
+      .options({
+        mozjpeg: { progressive: true, quality: 65 },
+        optipng: { enabled: false },
+        pngquant: { quality: "65-90", speed: 4 },
+        gifsicle: { interlaced: false },
+        webp: { quality: 75 }
+      });
+  },
+  //webpack 配置
+  configureWebpack: config => {
+    const plugins = [];
+    //去掉不用的css 多余的css
+    plugins.push(
+      new PurgecssPlugin({
+        paths: glob.sync([path.join(__dirname, "./**/*.vue")]),
+        extractors: [
+          {
+            extractor: class Extractor {
+              static extract(content) {
+                const validSection = content.replace(
+                  /<style([\s\S]*?)<\/style>+/gim,
+                  ""
+                );
+                return validSection.match(/[A-Za-z0-9-_:/]+/g) || [];
+              }
+            },
+            extensions: ["html", "vue"]
+          }
+        ],
+        whitelist: ["html", "body"],
+        whitelistPatterns: [/el-.*/],
+        whitelistPatternsChildren: [/^token/, /^pre/, /^code/]
+      })
+    );
+    //启用代码压缩
+    plugins.push(
+      new UglifyJsPlugin({
+        uglifyOptions: {
+          compress: {
+            warnings: false,
+            drop_console: true,
+            drop_debugger: false,
+            // pure_funcs: ["console.log"] //移除console
+          }
+        },
+        sourceMap: false,
+        parallel: true
+      })
+    ),
+      //代码压缩打包
+      plugins.push(
+        new CompressionWebpackPlugin({
+          filename: "[path].gz[query]",
+          algorithm: "gzip",
+          test: productionGzipExtensions,
+          threshold: 10240,
+          minRatio: 0.8
+        })
+      );
+    config.plugins = [...config.plugins, ...plugins];
+  },
+  parallel: require("os").cpus().length > 1,
+  pluginOptions: {},
+  pwa: {},
+  //设置代理
+//   devServer: {
+//     port: 8080,
+//     host: "0.0.0.0",
+//     https: false,
+//     open: true,
+//     openPage: "about",
+//     hot: true,
+//     disableHostCheck: true,
+//     proxy: {
+//       "/api": {
+//         target: "https://cdn.awenliang.cn",
+//         ws: true,
+//         changeOrigin: true
+//       },
+//       "/foo": {
+//         target: "https://cdn.awenliang.cn",
+//         ws: true,
+//         changeOrigin: true
+//       }
+//     }
+//   }
+};