diff --git a/server/middleware/casbin_rbac.go b/server/middleware/casbin_rbac.go index b21345ec..ea9c9824 100644 --- a/server/middleware/casbin_rbac.go +++ b/server/middleware/casbin_rbac.go @@ -14,8 +14,8 @@ var casbinService = service.ServiceGroupApp.SystemServiceGroup.CasbinService func CasbinHandler() gin.HandlerFunc { return func(c *gin.Context) { waitUse, _ := utils.GetClaims(c) - // 获取请求的URI - obj := c.Request.URL.RequestURI() + // 获取请求的PATH + obj := c.Request.URL.Path // 获取请求方法 act := c.Request.Method // 获取用户的角色 diff --git a/server/resource/rbac_model.conf b/server/resource/rbac_model.conf index 04ebedff..b5918d45 100644 --- a/server/resource/rbac_model.conf +++ b/server/resource/rbac_model.conf @@ -11,4 +11,4 @@ g = _, _ e = some(where (p.eft == allow)) [matchers] -m = r.sub == p.sub && ParamsMatch(r.obj,p.obj) && r.act == p.act +m = r.sub == p.sub && keyMatch2(r.obj,p.obj) && r.act == p.act diff --git a/server/service/system/sys_casbin.go b/server/service/system/sys_casbin.go index c583ab07..118173c6 100644 --- a/server/service/system/sys_casbin.go +++ b/server/service/system/sys_casbin.go @@ -2,11 +2,9 @@ package system import ( "errors" - "strings" "sync" "github.com/casbin/casbin/v2" - "github.com/casbin/casbin/v2/util" gormadapter "github.com/casbin/gorm-adapter/v3" "github.com/flipped-aurora/gin-vue-admin/server/global" "github.com/flipped-aurora/gin-vue-admin/server/model/system" @@ -104,33 +102,7 @@ func (casbinService *CasbinService) Casbin() *casbin.SyncedEnforcer { once.Do(func() { a, _ := gormadapter.NewAdapterByDB(global.GVA_DB) syncedEnforcer, _ = casbin.NewSyncedEnforcer(global.GVA_CONFIG.Casbin.ModelPath, a) - syncedEnforcer.AddFunction("ParamsMatch", casbinService.ParamsMatchFunc) }) _ = syncedEnforcer.LoadPolicy() return syncedEnforcer } - -//@author: [piexlmax](https://github.com/piexlmax) -//@function: ParamsMatch -//@description: 自定义规则函数 -//@param: fullNameKey1 string, key2 string -//@return: bool - -func (casbinService *CasbinService) ParamsMatch(fullNameKey1 string, key2 string) bool { - key1 := strings.Split(fullNameKey1, "?")[0] - // 剥离路径后再使用casbin的keyMatch2 - return util.KeyMatch2(key1, key2) -} - -//@author: [piexlmax](https://github.com/piexlmax) -//@function: ParamsMatchFunc -//@description: 自定义规则函数 -//@param: args ...interface{} -//@return: interface{}, error - -func (casbinService *CasbinService) ParamsMatchFunc(args ...interface{}) (interface{}, error) { - name1 := args[0].(string) - name2 := args[1].(string) - - return casbinService.ParamsMatch(name1, name2), nil -} diff --git a/web/index.html b/web/index.html index 7f114f9b..06ff7d4e 100644 --- a/web/index.html +++ b/web/index.html @@ -1,15 +1,18 @@ - + + - + + -
- +
+ - + + \ No newline at end of file diff --git a/web/package-lock.json b/web/package-lock.json index 8809b00c..aa6ce60e 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -304,6 +304,19 @@ "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } } }, "@babel/parser": { @@ -1210,6 +1223,17 @@ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", @@ -1913,6 +1937,19 @@ "request": "^2.88.2", "semver": "^6.1.0", "strip-ansi": "^6.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } } }, "@vue/compiler-core": { @@ -3289,14 +3326,54 @@ "dev": true }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.nlark.com/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1627646734234&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "chardet": { @@ -3612,6 +3689,19 @@ "@types/q": "^1.5.1", "chalk": "^2.4.1", "q": "^1.1.2" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } } }, "collection-visit": { @@ -5090,6 +5180,17 @@ "v8-compile-cache": "^2.0.3" }, "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, "eslint-scope": { "version": "5.1.1", "resolved": "https://registry.nlark.com/eslint-scope/download/eslint-scope-5.1.1.tgz", @@ -7287,6 +7388,19 @@ "requires": { "chalk": "^2.3.0", "shell-quote": "^1.6.1" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } } }, "launch-editor-middleware": { @@ -7462,6 +7576,19 @@ "dev": true, "requires": { "chalk": "^2.0.1" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } } }, "loglevel": { @@ -8259,6 +8386,17 @@ "wcwidth": "^1.0.1" }, "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.nlark.com/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1618846877845&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", @@ -8636,6 +8774,28 @@ "supports-color": "^6.1.0" }, "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", @@ -10848,8 +11008,8 @@ }, "supports-color": { "version": "5.5.0", - "resolved": "https://registry.nlark.com/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -10880,6 +11040,19 @@ "stable": "^0.1.8", "unquote": "~1.1.1", "util.promisify": "~1.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } } }, "systemjs": { @@ -11645,6 +11818,12 @@ } } }, + "vite-plugin-banner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/vite-plugin-banner/-/vite-plugin-banner-0.1.3.tgz", + "integrity": "sha512-Kbv4KzvhffQwbp3Sr2FA51hFaiEgACGNExYK07hj0m53At2FTnPver2TfGCulDpv4G9B8/flbEOdso3JWWpIEQ==", + "dev": true + }, "vite-plugin-importer": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/vite-plugin-importer/-/vite-plugin-importer-0.2.5.tgz", @@ -12014,6 +12193,17 @@ "resolved": "https://registry.nlark.com/acorn/download/acorn-7.4.1.tgz?cache=0&sync_timestamp=1624526847094&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn%2Fdownload%2Facorn-7.4.1.tgz", "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=", "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } } } }, diff --git a/web/package.json b/web/package.json index 8f6d09b2..6ac5aa7f 100644 --- a/web/package.json +++ b/web/package.json @@ -10,11 +10,10 @@ "fix-memory-limit": "cross-env LIMIT=4096 increase-memory-limit" }, "dependencies": { - "@element-plus/icons": "0.0.11", "axios": "^0.19.2", "core-js": "^3.6.5", "echarts": "4.9.0", - "element-plus": "^1.1.0-beta.24", + "element-plus": "^1.1.0-beta.8", "highlight.js": "^10.6.0", "marked": "^2.0.0", "mitt": "^3.0.0", @@ -41,12 +40,14 @@ "@vue/compiler-sfc": "^3.1.5", "babel-eslint": "^10.1.0", "babel-plugin-import": "^1.13.3", + "chalk": "^4.1.2", "dotenv": "^10.0.0", "eslint": "^6.7.2", "eslint-plugin-vue": "^7.0.0", "sass": "^1.26.5", "sass-loader": "^8.0.2", "vite": "2", + "vite-plugin-banner": "^0.1.3", "vite-plugin-importer": "^0.2.5" } } \ No newline at end of file diff --git a/web/src/core/config.js b/web/src/core/config.js index 920dc908..a4f55476 100644 --- a/web/src/core/config.js +++ b/web/src/core/config.js @@ -3,8 +3,54 @@ */ const config = { - appName: 'Gin-Vue-Admin', - appLogo: 'https://www.gin-vue-admin.com/img/logo.png' + appName: 'Gin-Vue-Admin', + appLogo: 'https://www.gin-vue-admin.com/img/logo.png', + showViteLogo: true } -export default config + +export const viteLogo = (env) => { + if (config.showViteLogo) { + const chalk = require('chalk') + console.log( + chalk.green( + `> 欢迎使用Gin-Vue-Admin,开源地址:https://github.com/flipped-aurora/gin-vue-admin` + ) + ) + console.log( + chalk.green( + `> 当前版本:V2.4.6 Apache` + ) + ) + console.log( + chalk.green( + `> 加群方式:微信:shouzi_1994 QQ群:622360840` + ) + ) + console.log( + chalk.green( + `> 默认自动化文档地址:http://127.0.0.1:${env.VITE_SERVER_PORT}/swagger/index.html` + ) + ) + console.log( + chalk.green( + `> 默认自动化文档地址:http://127.0.0.1:${env.VITE_SERVER_PORT}/swagger/index.html` + ) + ) + console.log( + chalk.green( + `> 默认前端文件运行地址:http://127.0.0.1:${env.VITE_CLI_PORT}` + ) + ) + console.log( + chalk.green( + `> 如果项目让您获得了收益,希望您能请团队喝杯可乐:https://www.github.com/flipped-aurora/gin-vue-admin/server.com/docs/coffee` + ) + ) + console.log('\n') + } +} + + + +export default config \ No newline at end of file diff --git a/web/src/view/login/index.vue b/web/src/view/login/index.vue index 080698be..e76c022d 100644 --- a/web/src/view/login/index.vue +++ b/web/src/view/login/index.vue @@ -84,7 +84,7 @@ @@ -94,6 +94,7 @@ import { mapActions } from 'vuex' import { captcha } from '@/api/user' import { checkDB } from '@/api/initdb' +import bootomInfo from '@/view/layout/bottomInfo/bottomInfo.vue' export default { name: 'Login', data() { @@ -112,7 +113,6 @@ export default { } } return { - curYear: 0, lock: 'lock', loginForm: { username: 'admin', @@ -133,9 +133,11 @@ export default { picPath: '' } }, + components:{ + bootomInfo + }, created() { this.loginVerify() - this.curYear = new Date().getFullYear() }, methods: { ...mapActions('user', ['LoginIn']), diff --git a/web/vite.config.js b/web/vite.config.js index 735f3580..8cf24175 100644 --- a/web/vite.config.js +++ b/web/vite.config.js @@ -1,83 +1,92 @@ -/* eslint-disable */ -import legacyPlugin from '@vitejs/plugin-legacy'; +import legacyPlugin from '@vitejs/plugin-legacy' // import usePluginImport from 'vite-plugin-importer'; -import * as path from 'path'; -import * as dotenv from 'dotenv'; -import * as fs from 'fs'; -import vuePlugin from '@vitejs/plugin-vue'; +import { viteLogo } from './src/core/config' +import Banner from 'vite-plugin-banner' +import * as path from 'path' +import * as dotenv from 'dotenv' +import * as fs from 'fs' +import vuePlugin from '@vitejs/plugin-vue' // @see https://cn.vitejs.dev/config/ export default ({ - command, - mode + command, + mode }) => { - let NODE_ENV = process.env.NODE_ENV || 'development' - let envFiles=[ - `.env.${NODE_ENV}` - ] - for (const file of envFiles) { - const envConfig = dotenv.parse(fs.readFileSync(file)) - for (const k in envConfig) { - process.env[k] = envConfig[k] - } - } + const NODE_ENV = process.env.NODE_ENV || 'development' + const envFiles = [ + `.env.${NODE_ENV}` + ] + for (const file of envFiles) { + const envConfig = dotenv.parse(fs.readFileSync(file)) + for (const k in envConfig) { + process.env[k] = envConfig[k] + } + } - let rollupOptions = {}; + viteLogo(process.env) + const timestamp = Date.parse(new Date()) - let optimizeDeps = {}; + const rollupOptions = { + output: { + entryFileNames: `gva/gin-vue-admin-[name].${timestamp}.js`, + chunkFileNames: `js/gin-vue-admin-[name].${timestamp}.js`, + assetFileNames: `assets/gin-vue-admin-[name].${timestamp}.[ext]` + } + } + const optimizeDeps = {} - let alias = { - '@': path.resolve(__dirname, './src'), - 'vue$': 'vue/dist/vue.runtime.esm-bundler.js', - } + const alias = { + '@': path.resolve(__dirname, './src'), + 'vue$': 'vue/dist/vue.runtime.esm-bundler.js', + } - let esbuild = {} + const esbuild = {} - return { - base: './', // index.html文件所在位置 - root: './', // js导入的资源路径,src - resolve: { - alias, - }, - define: { - 'process.env': {} - }, - server: { - open:true, - port: process.env.VITE_CLI_PORT, - proxy:{ - // 把key的路径代理到target位置 - // detail: https://cli.vuejs.org/config/#devserver-proxy - [process.env.VITE_BASE_API]: { // 需要代理的路径 例如 '/api' - target: `${process.env.VITE_BASE_PATH}:${process.env.VITE_SERVER_PORT}/`, // 代理到 目标路径 - changeOrigin: true, - rewrite: path => path.replace(new RegExp('^' + process.env.VITE_BASE_API), ''), - } - }, - }, - build: { - target: 'es2015', - minify: 'terser', // 是否进行压缩,boolean | 'terser' | 'esbuild',默认使用terser - manifest: false, // 是否产出maifest.json - sourcemap: false, // 是否产出soucemap.json - outDir: 'dist', // 产出目录 - rollupOptions, - }, - esbuild, - optimizeDeps, - plugins: [ - legacyPlugin({ - targets: ['Android > 39', 'Chrome >= 60', 'Safari >= 10.1', 'iOS >= 10.3', 'Firefox >= 54', 'Edge >= 15'], - }), vuePlugin(), - ], - css: { - preprocessorOptions: { - less: { - // 支持内联 JavaScript - javascriptEnabled: true, - } - } - }, - } + return { + base: './', // index.html文件所在位置 + root: './', // js导入的资源路径,src + resolve: { + alias, + }, + define: { + 'process.env': {} + }, + server: { + open: true, + port: process.env.VITE_CLI_PORT, + proxy: { + // 把key的路径代理到target位置 + // detail: https://cli.vuejs.org/config/#devserver-proxy + [process.env.VITE_BASE_API]: { // 需要代理的路径 例如 '/api' + target: `${process.env.VITE_BASE_PATH}:${process.env.VITE_SERVER_PORT}/`, // 代理到 目标路径 + changeOrigin: true, + rewrite: path => path.replace(new RegExp('^' + process.env.VITE_BASE_API), ''), + } + }, + }, + build: { + target: 'es2015', + minify: 'terser', // 是否进行压缩,boolean | 'terser' | 'esbuild',默认使用terser + manifest: false, // 是否产出maifest.json + sourcemap: false, // 是否产出soucemap.json + outDir: 'dist', // 产出目录 + rollupOptions, + }, + esbuild, + optimizeDeps, + plugins: [ + legacyPlugin({ + targets: ['Android > 39', 'Chrome >= 60', 'Safari >= 10.1', 'iOS >= 10.3', 'Firefox >= 54', 'Edge >= 15'], + }), vuePlugin(), [Banner(`\n Build based on gin-vue-admin \n Time : ${timestamp}`)] + ], + css: { + preprocessorOptions: { + less: { + // 支持内联 JavaScript + javascriptEnabled: true, + } + } + }, + } } \ No newline at end of file diff --git a/web/yarn.lock b/web/yarn.lock index 1d454a8f..8c55fee1 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -2648,6 +2648,14 @@ chalk@^4.0.0, chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chardet@^0.7.0: version "0.7.0" resolved "https://registry.nlark.com/chardet/download/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -8775,6 +8783,11 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +vite-plugin-banner@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/vite-plugin-banner/-/vite-plugin-banner-0.1.3.tgz#d3d4e8e284added35feaa54ab8ca273a9d3349e0" + integrity sha512-Kbv4KzvhffQwbp3Sr2FA51hFaiEgACGNExYK07hj0m53At2FTnPver2TfGCulDpv4G9B8/flbEOdso3JWWpIEQ== + vite-plugin-importer@^0.2.5: version "0.2.5" resolved "https://registry.nlark.com/vite-plugin-importer/download/vite-plugin-importer-0.2.5.tgz#2363dc0d97d4ecec530ee40171310a17c2db077e"