Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit c209a3f

Browse files
committed
feat(api): 🚀 部署自动舒心
1 parent 5440f18 commit c209a3f

File tree

9 files changed

+146
-78
lines changed

9 files changed

+146
-78
lines changed

auto-imports.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@
55
// Generated by unplugin-auto-import
66
export {}
77
declare global {
8-
const ElMessage: typeof import("element-plus/es")["ElMessage"]
9-
const ElMessageBox: typeof import("element-plus/es")["ElMessageBox"]
8+
const ElMessage: typeof import("element-plus/es")["ElMessage"];
9+
const ElMessageBox: typeof import("element-plus/es")["ElMessageBox"];
1010
}

components.d.ts

Lines changed: 75 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -5,82 +5,84 @@
55
// Read more: https://github.com/vuejs/core/pull/3399
66
import '@vue/runtime-core'
77

8-
export {}
8+
export {};
99

10-
declare module '@vue/runtime-core' {
10+
declare module "@vue/runtime-core" {
1111
export interface GlobalComponents {
12-
Avatar: typeof import('./src/components/Upload/avatar.vue')['default']
13-
Bar: typeof import('./src/components/Chart/bar.vue')['default']
14-
ElAlert: typeof import('element-plus/es')['ElAlert']
15-
ElBadge: typeof import('element-plus/es')['ElBadge']
16-
ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb']
17-
ElBreadcrumbItem: typeof import('element-plus/es')['ElBreadcrumbItem']
18-
ElButton: typeof import('element-plus/es')['ElButton']
19-
ElButtonGroup: typeof import('element-plus/es')['ElButtonGroup']
20-
ElCalendar: typeof import('element-plus/es')['ElCalendar']
21-
ElCarousel: typeof import('element-plus/es')['ElCarousel']
22-
ElCarouselItem: typeof import('element-plus/es')['ElCarouselItem']
23-
ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
24-
ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
25-
ElCol: typeof import('element-plus/es')['ElCol']
26-
ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
27-
ElDialog: typeof import('element-plus/es')['ElDialog']
28-
ElDivider: typeof import('element-plus/es')['ElDivider']
29-
ElDrawer: typeof import('element-plus/es')['ElDrawer']
30-
ElDropdown: typeof import('element-plus/es')['ElDropdown']
31-
ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem']
32-
ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu']
33-
ElEmpty: typeof import('element-plus/es')['ElEmpty']
34-
ElForm: typeof import('element-plus/es')['ElForm']
35-
ElFormItem: typeof import('element-plus/es')['ElFormItem']
36-
ElIcon: typeof import('element-plus/es')['ElIcon']
37-
ElImage: typeof import('element-plus/es')['ElImage']
38-
ElImageViewer: typeof import('element-plus/es')['ElImageViewer']
39-
ElInput: typeof import('element-plus/es')['ElInput']
40-
ElMenu: typeof import('element-plus/es')['ElMenu']
41-
ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
42-
ElOption: typeof import('element-plus/es')['ElOption']
43-
ElPagination: typeof import('element-plus/es')['ElPagination']
44-
ElPopconfirm: typeof import('element-plus/es')['ElPopconfirm']
45-
ElPopover: typeof import('element-plus/es')['ElPopover']
46-
ElRow: typeof import('element-plus/es')['ElRow']
47-
ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
48-
ElSelect: typeof import('element-plus/es')['ElSelect']
49-
ElStep: typeof import('element-plus/es')['ElStep']
50-
ElSteps: typeof import('element-plus/es')['ElSteps']
51-
ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
52-
ElSwitch: typeof import('element-plus/es')['ElSwitch']
53-
ElTable: typeof import('element-plus/es')['ElTable']
54-
ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
55-
ElTabPane: typeof import('element-plus/es')['ElTabPane']
56-
ElTabs: typeof import('element-plus/es')['ElTabs']
57-
ElTour: typeof import('element-plus/es')['ElTour']
58-
ElTourStep: typeof import('element-plus/es')['ElTourStep']
59-
ElTree: typeof import('element-plus/es')['ElTree']
60-
ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect']
61-
ElUpload: typeof import('element-plus/es')['ElUpload']
62-
ElWatermark: typeof import('element-plus/es')['ElWatermark']
63-
File: typeof import('./src/components/Upload/file.vue')['default']
64-
Img: typeof import('./src/components/Upload/img.vue')['default']
65-
ImportDialog: typeof import('./src/components/Upload/importDialog.vue')['default']
66-
Line: typeof import('./src/components/Chart/line.vue')['default']
67-
Loading: typeof import('./src/components/Loading/index.vue')['default']
68-
Map: typeof import('./src/components/Chart/map.vue')['default']
69-
Mix: typeof import('./src/components/Chart/mix.vue')['default']
70-
MoreBar: typeof import('./src/components/Chart/more-bar.vue')['default']
71-
MoreLine: typeof import('./src/components/Chart/more-line.vue')['default']
72-
Pie: typeof import('./src/components/Chart/pie.vue')['default']
73-
Preview: typeof import('./src/components/Preview/index.vue')['default']
74-
ProForm: typeof import('./src/components/ProForm/index.vue')['default']
75-
ProTable: typeof import('./src/components/ProTable/index.vue')['default']
76-
RouterLink: typeof import('vue-router')['RouterLink']
77-
RouterView: typeof import('vue-router')['RouterView']
78-
SearchForm: typeof import('./src/components/SearchForm/index.vue')['default']
79-
SvgIcon: typeof import('./src/components/SvgIcon/index.vue')['default']
80-
VerifyCode: typeof import('./src/components/VerifyCode/index.vue')['default']
12+
Avatar: typeof import("./src/components/Upload/avatar.vue")["default"];
13+
Bar: typeof import("./src/components/Chart/bar.vue")["default"];
14+
ElAlert: typeof import("element-plus/es")["ElAlert"];
15+
ElBadge: typeof import("element-plus/es")["ElBadge"];
16+
ElBreadcrumb: typeof import("element-plus/es")["ElBreadcrumb"];
17+
ElBreadcrumbItem: typeof import("element-plus/es")["ElBreadcrumbItem"];
18+
ElButton: typeof import("element-plus/es")["ElButton"];
19+
ElButtonGroup: typeof import("element-plus/es")["ElButtonGroup"];
20+
ElCalendar: typeof import("element-plus/es")["ElCalendar"];
21+
ElCarousel: typeof import("element-plus/es")["ElCarousel"];
22+
ElCarouselItem: typeof import("element-plus/es")["ElCarouselItem"];
23+
ElCheckbox: typeof import("element-plus/es")["ElCheckbox"];
24+
ElCheckboxGroup: typeof import("element-plus/es")["ElCheckboxGroup"];
25+
ElCol: typeof import("element-plus/es")["ElCol"];
26+
ElDatePicker: typeof import("element-plus/es")["ElDatePicker"];
27+
ElDialog: typeof import("element-plus/es")["ElDialog"];
28+
ElDivider: typeof import("element-plus/es")["ElDivider"];
29+
ElDrawer: typeof import("element-plus/es")["ElDrawer"];
30+
ElDropdown: typeof import("element-plus/es")["ElDropdown"];
31+
ElDropdownItem: typeof import("element-plus/es")["ElDropdownItem"];
32+
ElDropdownMenu: typeof import("element-plus/es")["ElDropdownMenu"];
33+
ElEmpty: typeof import("element-plus/es")["ElEmpty"];
34+
ElForm: typeof import("element-plus/es")["ElForm"];
35+
ElFormItem: typeof import("element-plus/es")["ElFormItem"];
36+
ElIcon: typeof import("element-plus/es")["ElIcon"];
37+
ElImage: typeof import("element-plus/es")["ElImage"];
38+
ElImageViewer: typeof import("element-plus/es")["ElImageViewer"];
39+
ElInput: typeof import("element-plus/es")["ElInput"];
40+
ElMenu: typeof import("element-plus/es")["ElMenu"];
41+
ElMenuItem: typeof import("element-plus/es")["ElMenuItem"];
42+
ElOption: typeof import("element-plus/es")["ElOption"];
43+
ElPagination: typeof import("element-plus/es")["ElPagination"];
44+
ElPopconfirm: typeof import("element-plus/es")["ElPopconfirm"];
45+
ElPopover: typeof import("element-plus/es")["ElPopover"];
46+
ElResult: typeof import("element-plus/es")["ElResult"];
47+
ElRow: typeof import("element-plus/es")["ElRow"];
48+
ElScrollbar: typeof import("element-plus/es")["ElScrollbar"];
49+
ElSelect: typeof import("element-plus/es")["ElSelect"];
50+
ElSpace: typeof import("element-plus/es")["ElSpace"];
51+
ElStep: typeof import("element-plus/es")["ElStep"];
52+
ElSteps: typeof import("element-plus/es")["ElSteps"];
53+
ElSubMenu: typeof import("element-plus/es")["ElSubMenu"];
54+
ElSwitch: typeof import("element-plus/es")["ElSwitch"];
55+
ElTable: typeof import("element-plus/es")["ElTable"];
56+
ElTableColumn: typeof import("element-plus/es")["ElTableColumn"];
57+
ElTabPane: typeof import("element-plus/es")["ElTabPane"];
58+
ElTabs: typeof import("element-plus/es")["ElTabs"];
59+
ElTour: typeof import("element-plus/es")["ElTour"];
60+
ElTourStep: typeof import("element-plus/es")["ElTourStep"];
61+
ElTree: typeof import("element-plus/es")["ElTree"];
62+
ElTreeSelect: typeof import("element-plus/es")["ElTreeSelect"];
63+
ElUpload: typeof import("element-plus/es")["ElUpload"];
64+
ElWatermark: typeof import("element-plus/es")["ElWatermark"];
65+
File: typeof import("./src/components/Upload/file.vue")["default"];
66+
Img: typeof import("./src/components/Upload/img.vue")["default"];
67+
ImportDialog: typeof import("./src/components/Upload/importDialog.vue")["default"];
68+
Line: typeof import("./src/components/Chart/line.vue")["default"];
69+
Loading: typeof import("./src/components/Loading/index.vue")["default"];
70+
Map: typeof import("./src/components/Chart/map.vue")["default"];
71+
Mix: typeof import("./src/components/Chart/mix.vue")["default"];
72+
MoreBar: typeof import("./src/components/Chart/more-bar.vue")["default"];
73+
MoreLine: typeof import("./src/components/Chart/more-line.vue")["default"];
74+
Pie: typeof import("./src/components/Chart/pie.vue")["default"];
75+
Preview: typeof import("./src/components/Preview/index.vue")["default"];
76+
ProForm: typeof import("./src/components/ProForm/index.vue")["default"];
77+
ProTable: typeof import("./src/components/ProTable/index.vue")["default"];
78+
RouterLink: typeof import("vue-router")["RouterLink"];
79+
RouterView: typeof import("vue-router")["RouterView"];
80+
SearchForm: typeof import("./src/components/SearchForm/index.vue")["default"];
81+
SvgIcon: typeof import("./src/components/SvgIcon/index.vue")["default"];
82+
VerifyCode: typeof import("./src/components/VerifyCode/index.vue")["default"];
8183
}
8284
export interface ComponentCustomProperties {
83-
vLoading: typeof import('element-plus/es')['ElLoadingDirective']
84-
vPopover: typeof import('element-plus/es')['ElPopoverDirective']
85+
vLoading: typeof import("element-plus/es")["ElLoadingDirective"];
86+
vPopover: typeof import("element-plus/es")["ElPopoverDirective"];
8587
}
8688
}

public/version.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"version":1747965838147}

src/permission.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { ElMessage } from "element-plus";
22
import NProgress from "nprogress";
33
import "nprogress/nprogress.css";
44
import { getPageTitle } from "@/utils/tool";
5+
import { versionCheck } from "@/utils/versionCheck";
56
import router from "./router";
67
import store from "./store";
78
import useUserStore from "./store/modules/userStore";
@@ -67,6 +68,7 @@ router.beforeEach(async (to, _, next) => {
6768
}
6869
});
6970

70-
router.afterEach(() => {
71+
router.afterEach(async () => {
7172
NProgress.done();
73+
await versionCheck();
7274
});

src/utils/refreshPlugin.ts

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import fs from "fs";
2+
import path from "path";
3+
type Version = {
4+
version: number | string;
5+
};
6+
interface Config {
7+
publicDir: string;
8+
}
9+
10+
export default ({ version }: Version) => {
11+
let config: Config = { publicDir: "" };
12+
13+
return {
14+
name: "version-plugin", // 必须的,将会在 warning 和 error 中显示
15+
configResolved(resolvedConfig: Config) {
16+
// 存储最终解析的配置
17+
config = resolvedConfig;
18+
},
19+
20+
buildStart() {
21+
// 生成版本信息文件路径
22+
const file = config.publicDir + path.sep + "version.json";
23+
24+
// 编译时间作为版本信息
25+
const content = JSON.stringify({ version });
26+
writeVersion(file, content);
27+
},
28+
};
29+
};
30+
31+
/**
32+
* 写入文件
33+
* @param fileName
34+
* @param version
35+
*/
36+
function writeVersion(
37+
fileName: string,
38+
version: string | NodeJS.ArrayBufferView
39+
) {
40+
fs.writeFile(fileName, version, (err) => {
41+
if (err) throw err;
42+
});
43+
}

src/utils/versionCheck.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import axios from "axios";
2+
3+
export const versionCheck = async () => {
4+
if (import.meta.env.MODE === "development") return;
5+
const res = await axios.get("version.json");
6+
if (__APP_VERSION__ !== res.data.version) {
7+
// 这里可以根据需求是否弹出询问弹窗还是直接刷新 我这里是直接刷新
8+
window.location.reload();
9+
}
10+
};

src/vite-env.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ declare module "mockjs";
44
declare module "element-plus/dist/locale/zh-cn.mjs";
55
declare module "element-plus/dist/locale/en.mjs";
66
declare module "markdown-it";
7-
7+
declare const __APP_VERSION__: string;
88
declare module "*.vue" {
99
import type { DefineComponent } from "vue";
1010
const component: DefineComponent<{}, {}, any>;

tsconfig.node.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@
77
"allowSyntheticDefaultImports": true,
88
"strict": true
99
},
10-
"include": ["vite.config.ts"]
10+
"include": ["vite.config.ts", "src/utils/refreshPlugin.ts"]
1111
}

vite.config.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ import path from "path";
1010
import { AntDesignVueResolver } from "unplugin-vue-components/resolvers";
1111
// 引入svg
1212
import { createSvgIconsPlugin } from "vite-plugin-svg-icons";
13+
// 导入版本刷新插件
14+
import versionPlugin from "./src/utils/refreshPlugin";
15+
const timeVersion = new Date().getTime();
16+
1317
// https://vitejs.dev/config/
1418
export default ({ command, mode }: ConfigEnv): UserConfigExport => {
1519
console.log(command);
@@ -44,6 +48,9 @@ export default ({ command, mode }: ConfigEnv): UserConfigExport => {
4448
localEnabled: false,
4549
// prodEnabled: false
4650
}),
51+
versionPlugin({
52+
version: timeVersion,
53+
}),
4754
],
4855
resolve: { alias: { "@": path.resolve(__dirname, "./src") } },
4956
css: {
@@ -71,5 +78,8 @@ export default ({ command, mode }: ConfigEnv): UserConfigExport => {
7178
},
7279
},
7380
},
81+
define: {
82+
__APP_VERSION__: JSON.stringify(timeVersion),
83+
},
7484
};
7585
};

0 commit comments

Comments
 (0)