'admin-22.02.25:更新版本v2.0.1,更新内容查看根目录CHANGELOG.md'
This commit is contained in:
parent
4408b04b0f
commit
49c5eaf1bc
10
CHANGELOG.md
10
CHANGELOG.md
@ -2,6 +2,16 @@
|
|||||||
|
|
||||||
🎉🎉🔥 `vue-next-admin` 基于 vue3.x 、Typescript、vite、Element plus 等,适配手机、平板、pc 的后台开源免费模板库(vue2.x 请切换 vue-prev-admin 分支)
|
🎉🎉🔥 `vue-next-admin` 基于 vue3.x 、Typescript、vite、Element plus 等,适配手机、平板、pc 的后台开源免费模板库(vue2.x 请切换 vue-prev-admin 分支)
|
||||||
|
|
||||||
|
## 2.0.1
|
||||||
|
|
||||||
|
`2022.02.25`
|
||||||
|
|
||||||
|
- 🌟 更新 依赖更新最新版本
|
||||||
|
- 🎯 优化 svgIcon 图标组件
|
||||||
|
- 🎯 优化 vite.config.ts 打包,感谢群友@YourObjec
|
||||||
|
- 🐞 修复 tagViews 开启图标不显示问题(风格 5),感谢群友@坏人
|
||||||
|
- 🐞 修复 [Element Plus 1.2.0-beta.6 以后的版本 el-table 在移动端无法左右滑动](https://gitee.com/lyt-top/vue-next-admin/issues/I4UPTP),感谢@YGDada
|
||||||
|
|
||||||
## 2.0.0
|
## 2.0.0
|
||||||
|
|
||||||
`2022.02.21`
|
`2022.02.21`
|
||||||
|
20
package.json
20
package.json
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "vue-next-admin",
|
"name": "vue-next-admin",
|
||||||
"version": "2.0.0",
|
"version": "2.0.1",
|
||||||
"description": "vue3 vite next admin template",
|
"description": "vue3 vite next admin template",
|
||||||
"author": "lyt_20201208",
|
"author": "lyt_20201208",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@ -17,7 +17,7 @@
|
|||||||
"echarts": "^5.3.0",
|
"echarts": "^5.3.0",
|
||||||
"echarts-gl": "^2.0.8",
|
"echarts-gl": "^2.0.8",
|
||||||
"echarts-wordcloud": "^2.0.0",
|
"echarts-wordcloud": "^2.0.0",
|
||||||
"element-plus": "^2.0.2",
|
"element-plus": "^2.0.3",
|
||||||
"jsplumb": "^2.15.6",
|
"jsplumb": "^2.15.6",
|
||||||
"mitt": "^3.0.0",
|
"mitt": "^3.0.0",
|
||||||
"nprogress": "^0.2.0",
|
"nprogress": "^0.2.0",
|
||||||
@ -25,32 +25,32 @@
|
|||||||
"qrcodejs2-fixes": "^0.0.2",
|
"qrcodejs2-fixes": "^0.0.2",
|
||||||
"screenfull": "^6.0.1",
|
"screenfull": "^6.0.1",
|
||||||
"sortablejs": "^1.14.0",
|
"sortablejs": "^1.14.0",
|
||||||
"splitpanes": "^3.0.6",
|
"splitpanes": "^3.1.1",
|
||||||
"vue": "^3.2.31",
|
"vue": "^3.2.31",
|
||||||
"vue-clipboard3": "^1.0.1",
|
"vue-clipboard3": "^1.0.1",
|
||||||
"vue-grid-layout": "^3.0.0-beta1",
|
"vue-grid-layout": "^3.0.0-beta1",
|
||||||
"vue-i18n": "^9.1.9",
|
"vue-i18n": "^9.1.9",
|
||||||
"vue-router": "^4.0.12",
|
"vue-router": "^4.0.12",
|
||||||
"vuex": "^4.0.2",
|
"vuex": "^4.0.2",
|
||||||
"wangeditor": "^4.7.11"
|
"wangeditor": "^4.7.12"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "^17.0.19",
|
"@types/node": "^17.0.21",
|
||||||
"@types/nprogress": "^0.2.0",
|
"@types/nprogress": "^0.2.0",
|
||||||
"@types/sortablejs": "^1.10.7",
|
"@types/sortablejs": "^1.10.7",
|
||||||
"@typescript-eslint/eslint-plugin": "^5.12.0",
|
"@typescript-eslint/eslint-plugin": "^5.12.1",
|
||||||
"@typescript-eslint/parser": "^5.12.0",
|
"@typescript-eslint/parser": "^5.12.1",
|
||||||
"@vitejs/plugin-vue": "^2.2.2",
|
"@vitejs/plugin-vue": "^2.2.2",
|
||||||
"@vue/compiler-sfc": "^3.2.31",
|
"@vue/compiler-sfc": "^3.2.31",
|
||||||
"dotenv": "^16.0.0",
|
"dotenv": "^16.0.0",
|
||||||
"eslint": "^8.9.0",
|
"eslint": "^8.9.0",
|
||||||
"eslint-plugin-vue": "^8.4.1",
|
"eslint-plugin-vue": "^8.5.0",
|
||||||
"prettier": "^2.5.1",
|
"prettier": "^2.5.1",
|
||||||
"sass": "^1.49.8",
|
"sass": "^1.49.9",
|
||||||
"sass-loader": "^12.6.0",
|
"sass-loader": "^12.6.0",
|
||||||
"typescript": "^4.5.5",
|
"typescript": "^4.5.5",
|
||||||
"vite": "^2.8.4",
|
"vite": "^2.8.4",
|
||||||
"vue-eslint-parser": "^8.2.0"
|
"vue-eslint-parser": "^8.3.0"
|
||||||
},
|
},
|
||||||
"browserslist": [
|
"browserslist": [
|
||||||
"> 1%",
|
"> 1%",
|
||||||
|
@ -28,7 +28,7 @@ export default {
|
|||||||
},
|
},
|
||||||
setup(props: SvgIconProps) {
|
setup(props: SvgIconProps) {
|
||||||
// 定义变量
|
// 定义变量
|
||||||
const linesString: string[] = ['https', 'http', '/src', '/assets'];
|
const linesString: any[] = ['https', 'http', '/src', '/assets', import.meta.env.VITE_PUBLIC_PATH];
|
||||||
const onLineStyle: string = `font-size: ${props.size}px;color: ${props.color}`;
|
const onLineStyle: string = `font-size: ${props.size}px;color: ${props.color}`;
|
||||||
const localsStyle: string = `width: ${props.size}px;height: ${props.size}px`;
|
const localsStyle: string = `width: ${props.size}px;height: ${props.size}px`;
|
||||||
|
|
||||||
|
@ -16,8 +16,8 @@
|
|||||||
}
|
}
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<i class="iconfont icon-webicon318 layout-navbars-tagsview-ul-li-iconfont font14" v-if="isActive(v)"></i>
|
<i class="iconfont icon-webicon318 layout-navbars-tagsview-ul-li-iconfont" v-if="isActive(v)"></i>
|
||||||
<SvgIcon :name="v.meta.icon" class="layout-navbars-tagsview-ul-li-iconfont" v-if="!isActive(v) && getThemeConfig.isTagsviewIcon" />
|
<SvgIcon :name="v.meta.icon" v-if="!isActive(v) && getThemeConfig.isTagsviewIcon" class="pr5" />
|
||||||
<span>{{ $t(v.meta.title) }}</span>
|
<span>{{ $t(v.meta.title) }}</span>
|
||||||
<template v-if="isActive(v)">
|
<template v-if="isActive(v)">
|
||||||
<SvgIcon
|
<SvgIcon
|
||||||
|
@ -193,7 +193,6 @@
|
|||||||
z-index: 4;
|
z-index: 4;
|
||||||
}
|
}
|
||||||
.el-scrollbar__wrap {
|
.el-scrollbar__wrap {
|
||||||
overflow-x: hidden !important;
|
|
||||||
max-height: 100%; /*防止页面切换时,滚动条高度不变的问题(滚动条高度非滚动条滚动高度)*/
|
max-height: 100%; /*防止页面切换时,滚动条高度不变的问题(滚动条高度非滚动条滚动高度)*/
|
||||||
}
|
}
|
||||||
.el-select-dropdown .el-scrollbar__wrap {
|
.el-select-dropdown .el-scrollbar__wrap {
|
||||||
|
@ -102,6 +102,27 @@ export function isMobile() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断数组对象中所有属性是否为空,为空则删除当前行对象
|
||||||
|
* @description @感谢大黄
|
||||||
|
* @param list 数组对象
|
||||||
|
* @returns 删除空值后的数组对象
|
||||||
|
*/
|
||||||
|
export function handleEmpty(list: any) {
|
||||||
|
const arr = [];
|
||||||
|
for (const i in list) {
|
||||||
|
const d = [];
|
||||||
|
for (const j in list[i]) {
|
||||||
|
d.push(list[i][j]);
|
||||||
|
}
|
||||||
|
const leng = d.filter((item) => item === '').length;
|
||||||
|
if (leng !== d.length) {
|
||||||
|
arr.push(list[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return arr;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 统一批量导出
|
* 统一批量导出
|
||||||
* @method elSvg 导出全局注册 element plus svg 图标
|
* @method elSvg 导出全局注册 element plus svg 图标
|
||||||
@ -110,6 +131,7 @@ export function isMobile() {
|
|||||||
* @method globalComponentSize element plus 全局组件大小
|
* @method globalComponentSize element plus 全局组件大小
|
||||||
* @method deepClone 对象深克隆
|
* @method deepClone 对象深克隆
|
||||||
* @method isMobile 判断是否是移动端
|
* @method isMobile 判断是否是移动端
|
||||||
|
* @method handleEmpty 判断数组对象中所有属性是否为空,为空则删除当前行对象
|
||||||
*/
|
*/
|
||||||
const other = {
|
const other = {
|
||||||
elSvg: (app: App) => {
|
elSvg: (app: App) => {
|
||||||
@ -128,6 +150,9 @@ const other = {
|
|||||||
isMobile: () => {
|
isMobile: () => {
|
||||||
return isMobile();
|
return isMobile();
|
||||||
},
|
},
|
||||||
|
handleEmpty: (list: any) => {
|
||||||
|
return handleEmpty(list);
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
// 统一批量导出
|
// 统一批量导出
|
||||||
|
@ -14,7 +14,7 @@ service.interceptors.request.use(
|
|||||||
(config) => {
|
(config) => {
|
||||||
// 在发送请求之前做些什么 token
|
// 在发送请求之前做些什么 token
|
||||||
if (Session.get('token')) {
|
if (Session.get('token')) {
|
||||||
config.headers.common['Authorization'] = `${Session.get('token')}`;
|
(<any>config.headers).common['Authorization'] = `${Session.get('token')}`;
|
||||||
}
|
}
|
||||||
return config;
|
return config;
|
||||||
},
|
},
|
||||||
|
@ -1,31 +0,0 @@
|
|||||||
import dotenv from 'dotenv';
|
|
||||||
|
|
||||||
// 定义接口类型声明
|
|
||||||
export interface ViteEnv {
|
|
||||||
VITE_PORT: number;
|
|
||||||
VITE_OPEN: boolean;
|
|
||||||
VITE_PUBLIC_PATH: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* vite 打包相关
|
|
||||||
* @link 参考:https://cn.vitejs.dev/guide/env-and-mode.html
|
|
||||||
* @returns 返回 `VITE_xxx` 环境变量和模式信息
|
|
||||||
*/
|
|
||||||
export function loadEnv(): ViteEnv {
|
|
||||||
const env = process.env.NODE_ENV;
|
|
||||||
const ret: any = {};
|
|
||||||
const envList = [`.env.${env}.local`, `.env.${env}`, '.env.local', '.env'];
|
|
||||||
envList.forEach((e) => {
|
|
||||||
dotenv.config({ path: e });
|
|
||||||
});
|
|
||||||
for (const envName of Object.keys(process.env)) {
|
|
||||||
let realName = (process.env as any)[envName].replace(/\\n/g, '\n');
|
|
||||||
realName = realName === 'true' ? true : realName === 'false' ? false : realName;
|
|
||||||
if (envName === 'VITE_PORT') realName = Number(realName);
|
|
||||||
if (envName === 'VITE_OPEN') realName = Boolean(realName);
|
|
||||||
ret[envName] = realName;
|
|
||||||
process.env[envName] = realName;
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
@ -1,33 +1,30 @@
|
|||||||
import vue from '@vitejs/plugin-vue';
|
import vue from '@vitejs/plugin-vue';
|
||||||
import { resolve } from 'path';
|
import { resolve } from 'path';
|
||||||
import type { UserConfig, ConfigEnv } from 'vite';
|
import { defineConfig, loadEnv, ConfigEnv } from 'vite';
|
||||||
import { defineConfig } from 'vite';
|
|
||||||
import { loadEnv } from './src/utils/viteBuild';
|
|
||||||
|
|
||||||
const pathResolve = (dir: string): any => {
|
const pathResolve = (dir: string): any => {
|
||||||
return resolve(__dirname, '.', dir);
|
return resolve(__dirname, '.', dir);
|
||||||
};
|
};
|
||||||
|
|
||||||
const { VITE_PORT, VITE_OPEN, VITE_PUBLIC_PATH } = loadEnv();
|
|
||||||
|
|
||||||
const alias: Record<string, string> = {
|
const alias: Record<string, string> = {
|
||||||
'/@': pathResolve('./src/'),
|
'/@': pathResolve('./src/'),
|
||||||
'vue-i18n': 'vue-i18n/dist/vue-i18n.cjs.js',
|
'vue-i18n': 'vue-i18n/dist/vue-i18n.cjs.js',
|
||||||
};
|
};
|
||||||
|
|
||||||
export default defineConfig(({ command }: ConfigEnv): UserConfig => {
|
const viteConfig = defineConfig((mode: ConfigEnv) => {
|
||||||
|
const env = loadEnv(mode.mode, process.cwd());
|
||||||
return {
|
return {
|
||||||
plugins: [vue()],
|
plugins: [vue()],
|
||||||
root: process.cwd(),
|
root: process.cwd(),
|
||||||
resolve: { alias },
|
resolve: { alias },
|
||||||
base: command === 'build' ? VITE_PUBLIC_PATH : './',
|
base: mode.command === 'serve' ? './' : env.VITE_PUBLIC_PATH,
|
||||||
optimizeDeps: {
|
optimizeDeps: {
|
||||||
include: ['element-plus/lib/locale/lang/zh-cn', 'element-plus/lib/locale/lang/en', 'element-plus/lib/locale/lang/zh-tw'],
|
include: ['element-plus/lib/locale/lang/zh-cn', 'element-plus/lib/locale/lang/en', 'element-plus/lib/locale/lang/zh-tw'],
|
||||||
},
|
},
|
||||||
server: {
|
server: {
|
||||||
host: '0.0.0.0',
|
host: '0.0.0.0',
|
||||||
port: VITE_PORT,
|
port: env.VITE_PORT as unknown as number,
|
||||||
open: VITE_OPEN,
|
open: env.VITE_OPEN,
|
||||||
proxy: {
|
proxy: {
|
||||||
'/gitee': {
|
'/gitee': {
|
||||||
target: 'https://gitee.com',
|
target: 'https://gitee.com',
|
||||||
@ -87,3 +84,5 @@ export default defineConfig(({ command }: ConfigEnv): UserConfig => {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
export default viteConfig;
|
||||||
|
Loading…
Reference in New Issue
Block a user