Commit 3371d41c authored by panyf's avatar panyf
Browse files

[CP]完善JWT鉴权,实现方案从多页面改为单页面,使用dialog进行登录操作

parent c897835e
...@@ -49,7 +49,24 @@ ...@@ -49,7 +49,24 @@
<dependency> <dependency>
<groupId>io.jsonwebtoken</groupId> <groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId> <artifactId>jjwt</artifactId>
<version>0.9.1</version> <version>0.12.1</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.12.1</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.12.1</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>0.12.1</version>
<scope>runtime</scope>
</dependency> </dependency>
</dependencies> </dependencies>
......
src/main/frontend/public/favicon.ico

4.19 KB | W: | H:

src/main/frontend/public/favicon.ico

66.1 KB | W: | H:

src/main/frontend/public/favicon.ico
src/main/frontend/public/favicon.ico
src/main/frontend/public/favicon.ico
src/main/frontend/public/favicon.ico
  • 2-up
  • Swipe
  • Onion skin
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0"> <meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.ico"> <link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title><%= htmlWebpackPlugin.options.title %></title> <title>CompileProxy</title>
</head> </head>
<body> <body>
<noscript> <noscript>
......
<template> <template>
<div id="app" class="flex flex-col items-center justify-center h-screen"> <div id="app" class="flex flex-col items-center justify-center h-screen">
<div class="upload-container"> <div class="upload-container">
<el-upload <!-- 登录对话框 -->
ref="uploadRef" <el-dialog :visible.sync="loginDialogVisible" title="登录">
:action="uploadUrl" <template v-slot:default>
:auto-upload="false" <el-form @submit.prevent="handleLogin">
:on-change="handleFileChange" <el-form-item label="用户名">
:file-list="fileList" <el-input v-model="loginForm.username"></el-input>
accept=".cc" </el-form-item>
:multiple="false" <el-form-item label="密码">
> <el-input type="password" v-model="loginForm.password"></el-input>
<template #trigger> </el-form-item>
<el-button size="small" type="primary">选取文件</el-button> <!-- 修改:移除 native-type 属性,使用 @click 触发登录方法 -->
<el-button type="primary" @click="handleLogin">登录</el-button>
<el-alert
v-if="loginMessage"
:title="loginMessage"
:type="loginMessageType"
show-icon
class="mt-4"
></el-alert>
</el-form>
</template> </template>
</el-dialog>
<div class="button-container">
<el-button <el-button
style="margin-left: 10px;"
size="small" size="small"
type="success" type="info"
:disabled="isUploading" @click="loginDialogVisible = true"
@click="uploadFile"
> >
上传并编译 登录
</el-button> </el-button>
</el-upload> <el-upload
ref="uploadRef"
:action="uploadUrl"
:auto-upload="false"
:on-change="handleFileChange"
:file-list="fileList"
accept=".cc"
:multiple="false"
:headers="{'Authorization': `Bearer ${token}`}"
>
<template #trigger>
<el-button size="small" type="primary">选取文件</el-button>
</template>
<el-button
style="margin-left: 10px;"
size="small"
type="success"
:disabled="isUploading ||!token"
@click="uploadFile"
>
上传并编译
</el-button>
</el-upload>
</div>
<!-- 动态进度条 --> <!-- 动态进度条 -->
<el-progress <el-progress
...@@ -31,7 +63,7 @@ ...@@ -31,7 +63,7 @@
:status="progressStatus" :status="progressStatus"
class="mt-4" class="mt-4"
:stroke-width="10" :stroke-width="10"
:show-info="false" :show-info="false"
></el-progress> ></el-progress>
<!-- 成功提示 --> <!-- 成功提示 -->
...@@ -78,13 +110,21 @@ export default { ...@@ -78,13 +110,21 @@ export default {
downloadUrl: null, downloadUrl: null,
downloadFileName: 'radarcal', downloadFileName: 'radarcal',
errorMessage: '', errorMessage: '',
showErrorMessage: false, // 控制错误信息栏的显示 showErrorMessage: false,
isUploading: false, // 是否正在上传和编译 isUploading: false,
progressPercentage: 0, // 进度条百分比 progressPercentage: 0,
progressStatus: '', // 进度条状态(success/error) progressStatus: '',
isSuccess: false, // 是否编译成功 isSuccess: false,
isDownloadAvailable: false, // 是否显示下载按钮 isDownloadAvailable: false,
progressInterval: null // 用于存储进度条更新的定时器 progressInterval: null,
loginDialogVisible: false,
loginForm: {
username: '',
password: ''
},
token: null,
loginMessage: '',
loginMessageType: ''
}; };
}, },
methods: { methods: {
...@@ -108,14 +148,14 @@ export default { ...@@ -108,14 +148,14 @@ export default {
this.progressPercentage = 0; this.progressPercentage = 0;
this.progressStatus = ''; this.progressStatus = '';
// 设置进度条定时器,100 秒内均匀增长到 100% // 设置进度条定时器,180 秒内均匀增长到 100%
this.progressInterval = setInterval(() => { this.progressInterval = setInterval(() => {
if (this.progressPercentage < 100) { if (this.progressPercentage < 100) {
this.progressPercentage += 1; // 每秒增加 1% this.progressPercentage += 1;
} else { } else {
clearInterval(this.progressInterval); // 停止定时器 clearInterval(this.progressInterval);
} }
}, 1000); // 每秒更新一次进度条 }, 1800);
try { try {
const formData = new FormData(); const formData = new FormData();
...@@ -123,33 +163,36 @@ export default { ...@@ -123,33 +163,36 @@ export default {
const response = await fetch(this.uploadUrl, { const response = await fetch(this.uploadUrl, {
method: 'POST', method: 'POST',
headers: {
'Authorization': `Bearer ${this.token}`
},
body: formData body: formData
}); });
clearInterval(this.progressInterval); // 停止进度条定时器 clearInterval(this.progressInterval);
if (response.ok) { if (response.ok) {
const blob = await response.blob(); const blob = await response.blob();
this.downloadUrl = window.URL.createObjectURL(blob); this.downloadUrl = window.URL.createObjectURL(blob);
this.isDownloadAvailable = true; // 显示下载按钮 this.isDownloadAvailable = true;
this.isSuccess = true; // 标记编译成功 this.isSuccess = true;
this.progressPercentage = 100; // 进度条完成 this.progressPercentage = 100;
this.progressStatus = 'success'; // 进度条状态为成功 this.progressStatus ='success';
this.$message.success('编译成功!'); // 提示编译成功 this.$message.success('编译成功!');
} else { } else {
const errorText = await response.text(); const errorText = await response.text();
this.errorMessage = errorText; this.errorMessage = errorText;
this.showErrorMessage = true; // 显示错误信息栏 this.showErrorMessage = true;
this.progressStatus = 'error'; // 进度条状态为失败 this.progressStatus = 'error';
} }
} catch (error) { } catch (error) {
clearInterval(this.progressInterval); // 停止进度条定时器 clearInterval(this.progressInterval);
console.error('发生错误:', error); console.error('发生错误:', error);
this.errorMessage = '发生错误,请重试'; this.errorMessage = '发生错误,请重试';
this.showErrorMessage = true; // 显示错误信息栏 this.showErrorMessage = true;
this.progressStatus = 'error'; // 进度条状态为失败 this.progressStatus = 'error';
} finally { } finally {
this.isUploading = false; // 隐藏进度条 this.isUploading = false;
} }
}, },
downloadFile() { downloadFile() {
...@@ -161,6 +204,39 @@ export default { ...@@ -161,6 +204,39 @@ export default {
link.click(); link.click();
document.body.removeChild(link); document.body.removeChild(link);
} }
},
async handleLogin() {
try {
console.log('登录信息:', this.loginForm);
const formData = new URLSearchParams();
formData.append('username', this.loginForm.username);
formData.append('password', this.loginForm.password);
const response = await fetch('/login', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: formData
});
if (response.ok) {
const token = await response.text();
this.token = token;
this.loginMessage = '获取 token 成功';
this.$message.success('获取 token 成功');
this.loginMessageType ='success';
this.loginDialogVisible = false;
} else {
const errorText = await response.text();
this.loginMessage = errorText;
this.loginMessageType = 'error';
}
} catch (error) {
console.error('登录请求出错:', error);
this.loginMessage = '登录请求出错,请重试';
this.loginMessageType = 'error';
}
} }
} }
}; };
...@@ -172,4 +248,10 @@ export default { ...@@ -172,4 +248,10 @@ export default {
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
} }
.button-container {
display: flex;
flex-direction: row;
gap: 20px;
margin-bottom: 20px;
}
</style> </style>
\ No newline at end of file
...@@ -35,11 +35,8 @@ public class FileUploadController { ...@@ -35,11 +35,8 @@ public class FileUploadController {
@PostMapping("/login") @PostMapping("/login")
public ResponseEntity<String> login(@RequestParam("username") String username, @RequestParam("password") String password) { public ResponseEntity<String> login(@RequestParam("username") String username, @RequestParam("password") String password) {
System.out.println("username: " + username + " password: " + password);
if (USER_NAME.equals(username) && USER_PASSWORD.equals(password)) { if (USER_NAME.equals(username) && USER_PASSWORD.equals(password)) {
String token = new JwtUtil().generateToken(username); String token = new JwtUtil().generateToken(username);
//test
System.out.println("token: " + token + " username: " + username + " password: " + password + "extractname: " + jwtUtil.extractUsername(token));
return ResponseEntity.ok(new JwtUtil.AuthResponse(token).getToken()); return ResponseEntity.ok(new JwtUtil.AuthResponse(token).getToken());
} else { } else {
...@@ -52,10 +49,9 @@ public class FileUploadController { ...@@ -52,10 +49,9 @@ public class FileUploadController {
@RequestParam("file") MultipartFile file) { @RequestParam("file") MultipartFile file) {
try { try {
String token = authorizationHeader.replace("Bearer ", ""); String token = authorizationHeader.replace("Bearer ", "");
System.out.println("token: " + token + " username: " + "extractname: " + jwtUtil.extractUsername(token));
String username = jwtUtil.extractUsername(token); String username = jwtUtil.extractUsername(token);
if(jwtUtil.validateToken(token, username)){ if(!jwtUtil.validateToken(token, username)){
System.out.println("Token is valid"); System.out.println("Token is valid");
return ResponseEntity.status(401).body("token错误,请刷新页面重新登录"); return ResponseEntity.status(401).body("token错误,请刷新页面重新登录");
} }
...@@ -112,7 +108,6 @@ public class FileUploadController { ...@@ -112,7 +108,6 @@ public class FileUploadController {
private PublishResult publishProject(Path projectDir) throws IOException, InterruptedException { private PublishResult publishProject(Path projectDir) throws IOException, InterruptedException {
// 定义发布目录 // 定义发布目录
Path publishDir = projectDir.resolve("build"); Path publishDir = projectDir.resolve("build");
System.out.println("publishDir: " + publishDir);
// 执行 rm -rf build && mkdir build // 执行 rm -rf build && mkdir build
ProcessBuilder rmMkdirBuilder = new ProcessBuilder("bash", "-c", "rm -rf build && mkdir build"); ProcessBuilder rmMkdirBuilder = new ProcessBuilder("bash", "-c", "rm -rf build && mkdir build");
...@@ -140,6 +135,7 @@ public class FileUploadController { ...@@ -140,6 +135,7 @@ public class FileUploadController {
// 获取错误流并读取错误信息 // 获取错误流并读取错误信息
try (BufferedReader errorReader = new BufferedReader(new InputStreamReader(cmakeMakeProcess.getErrorStream()))) { try (BufferedReader errorReader = new BufferedReader(new InputStreamReader(cmakeMakeProcess.getErrorStream()))) {
String errorLog = errorReader.lines().collect(Collectors.joining("\n")); String errorLog = errorReader.lines().collect(Collectors.joining("\n"));
System.out.println("CMake or Make failed: " + errorLog);
return new PublishResult(false, "CMake or Make failed: " + " Error: " + errorLog, publishDir); return new PublishResult(false, "CMake or Make failed: " + " Error: " + errorLog, publishDir);
} }
} }
......
...@@ -7,7 +7,7 @@ import java.util.Date; ...@@ -7,7 +7,7 @@ import java.util.Date;
@Component @Component
public class JwtUtil { public class JwtUtil {
private final String SECRET_KEY = "ZEDzedZeDZEdzEDzeDtechTechTEchTEChTECHsecretSECRET"; private final String SECRET_KEY = "ZEDzedZeDZEdzEDzeDtechTechTEchTEChTECHsecretSECRET";
public String generateToken(String username) { public String generateToken(String username) {
return Jwts.builder() return Jwts.builder()
...@@ -19,7 +19,12 @@ public class JwtUtil { ...@@ -19,7 +19,12 @@ public class JwtUtil {
} }
public String extractUsername(String token) { public String extractUsername(String token) {
return Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token).getBody().getSubject(); return Jwts.parser()
.setSigningKey(SECRET_KEY) // 使用 setSigningKey 而不是 verifyWith
.build()
.parseClaimsJws(token) // 使用 parseClaimsJws 而不是 parseSignedClaims
.getBody()
.getSubject();
} }
public boolean validateToken(String token, String username) { public boolean validateToken(String token, String username) {
...@@ -32,10 +37,23 @@ public class JwtUtil { ...@@ -32,10 +37,23 @@ public class JwtUtil {
} }
private boolean isTokenExpired(String token) { private boolean isTokenExpired(String token) {
return Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token).getBody().getExpiration().before(new Date()); try {
Claims claims = Jwts.parser()
.setSigningKey(SECRET_KEY)
.build()
.parseClaimsJws(token)
.getBody();
Date expirationDate = claims.getExpiration();
Date currentDate = new Date();
return expirationDate.before(currentDate);
} catch (JwtException | IllegalArgumentException e) {
// 如果解析失败或 Token 无效,则认为 Token 已过期
return true;
}
} }
public class AuthRequest { public static class AuthRequest {
private String username; private String username;
private String password; private String password;
...@@ -57,7 +75,7 @@ public class JwtUtil { ...@@ -57,7 +75,7 @@ public class JwtUtil {
} }
} }
static class AuthResponse { public static class AuthResponse {
private String token; private String token;
public AuthResponse(String token) { public AuthResponse(String token) {
...@@ -69,4 +87,4 @@ public class JwtUtil { ...@@ -69,4 +87,4 @@ public class JwtUtil {
return token; return token;
} }
} }
} }
\ No newline at end of file
#app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:#2c3e50}.upload-container[data-v-9955520a]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh}
\ No newline at end of file
.upload-container[data-v-3d5ae34e]{display:flex;flex-direction:column;align-items:center}h3[data-v-ebbc34ee]{margin:40px 0 0}ul[data-v-ebbc34ee]{list-style-type:none;padding:0}li[data-v-ebbc34ee]{display:inline-block;margin:0 10px}a[data-v-ebbc34ee]{color:#42b983}
\ No newline at end of file
.upload-container[data-v-1072ea42]{display:flex;flex-direction:column;align-items:center}.button-container[data-v-1072ea42]{display:flex;flex-direction:row;gap:20px;margin-bottom:20px}h3[data-v-ebbc34ee]{margin:40px 0 0}ul[data-v-ebbc34ee]{list-style-type:none;padding:0}li[data-v-ebbc34ee]{display:inline-block;margin:0 10px}a[data-v-ebbc34ee]{color:#42b983}
\ No newline at end of file
src/main/resources/static/favicon.ico

4.19 KB | W: | H:

src/main/resources/static/favicon.ico

66.1 KB | W: | H:

src/main/resources/static/favicon.ico
src/main/resources/static/favicon.ico
src/main/resources/static/favicon.ico
src/main/resources/static/favicon.ico
  • 2-up
  • Swipe
  • Onion skin
<!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/favicon.ico"><title>frontend</title><script defer="defer" src="/js/chunk-vendors.620ce23d.js"></script><script defer="defer" src="/js/app.4cf479e6.js"></script><link href="/css/chunk-vendors.10dd4e95.css" rel="stylesheet"><link href="/css/app.9c706792.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but frontend doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html> <!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/favicon.ico"><title>CompileProxy</title><script defer="defer" src="/js/chunk-vendors.620ce23d.js"></script><script defer="defer" src="/js/app.2a660157.js"></script><link href="/css/chunk-vendors.10dd4e95.css" rel="stylesheet"><link href="/css/app.b89b1abd.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but frontend doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>
\ No newline at end of file \ No newline at end of file
(function(){"use strict";var e={3153:function(e){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDE0IDc5LjE1Njc5NywgMjAxNC8wOC8yMC0wOTo1MzowMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OTk2QkI4RkE3NjE2MTFFNUE4NEU4RkIxNjQ5MTYyRDgiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTk2QkI4Rjk3NjE2MTFFNUE4NEU4RkIxNjQ5MTYyRDgiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjU2QTEyNzk3NjkyMTFFMzkxODk4RDkwQkY4Q0U0NzYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjU2QTEyN0E3NjkyMTFFMzkxODk4RDkwQkY4Q0U0NzYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5WHowqAAAXNElEQVR42uxda4xd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"},3722:function(e,t,r){var s=r(5471),n=function(){var e=this,t=e._self._c;return t("div",{staticClass:"flex flex-col items-center justify-center h-screen",attrs:{id:"app"}},[t("div",{staticClass:"upload-container"},[t("el-upload",{ref:"uploadRef",attrs:{action:e.uploadUrl,"auto-upload":!1,"on-change":e.handleFileChange,"file-list":e.fileList,accept:".cc",multiple:!1},scopedSlots:e._u([{key:"trigger",fn:function(){return[t("el-button",{attrs:{size:"small",type:"primary"}},[e._v("选取文件")])]},proxy:!0}])},[t("el-button",{staticStyle:{"margin-left":"10px"},attrs:{size:"small",type:"success",disabled:e.isUploading},on:{click:e.uploadFile}},[e._v(" 上传并编译 ")])],1),e.isUploading?t("el-progress",{staticClass:"mt-4",attrs:{percentage:e.progressPercentage,status:e.progressStatus,"stroke-width":10,"show-info":!1}}):e._e(),e.isSuccess?t("el-alert",{staticClass:"mt-4",attrs:{title:"编译成功!",type:"success","show-icon":""}}):e._e(),e.showErrorMessage?t("el-alert",{staticClass:"mt-4",attrs:{title:"发布错误信息",type:"error",closable:!1}},[e._v(" "+e._s(e.errorMessage)+" ")]):e._e(),e.isDownloadAvailable?t("el-button",{staticClass:"mt-4",attrs:{size:"small",type:"primary"},on:{click:e.downloadFile}},[e._v(" 下载发布后的文件 ")]):e._e()],1)])},o=[],a=(r(4603),r(7566),r(8721),{data(){return{uploadUrl:"/upload",fileList:[],selectedFile:null,downloadUrl:null,downloadFileName:"radarcal",errorMessage:"",showErrorMessage:!1,isUploading:!1,progressPercentage:0,progressStatus:"",isSuccess:!1,isDownloadAvailable:!1,progressInterval:null}},methods:{handleFileChange(e){this.selectedFile=e.raw,this.fileList=[e]},async uploadFile(){if(this.selectedFile){this.errorMessage="",this.showErrorMessage=!1,this.isSuccess=!1,this.isUploading=!0,this.progressPercentage=0,this.progressStatus="",this.progressInterval=setInterval((()=>{this.progressPercentage<100?this.progressPercentage+=1:clearInterval(this.progressInterval)}),1e3);try{const e=new FormData;e.append("file",this.selectedFile);const t=await fetch(this.uploadUrl,{method:"POST",body:e});if(clearInterval(this.progressInterval),t.ok){const e=await t.blob();this.downloadUrl=window.URL.createObjectURL(e),this.isDownloadAvailable=!0,this.isSuccess=!0,this.progressPercentage=100,this.progressStatus="success",this.$message.success("编译成功!")}else{const e=await t.text();this.errorMessage=e,this.showErrorMessage=!0,this.progressStatus="error"}}catch(e){clearInterval(this.progressInterval),console.error("发生错误:",e),this.errorMessage="发生错误,请重试",this.showErrorMessage=!0,this.progressStatus="error"}finally{this.isUploading=!1}}else this.$message.error("请选择一个文件")},downloadFile(){if(this.downloadUrl){const e=document.createElement("a");e.href=this.downloadUrl,e.download=this.downloadFileName,document.body.appendChild(e),e.click(),document.body.removeChild(e)}}}}),i=a,l=r(1656),u=(0,l.A)(i,n,o,!1,null,"3d5ae34e",null),c=u.exports,h=r(173),d=function(){var e=this,t=e._self._c;return t("div",{staticClass:"home"},[t("img",{attrs:{alt:"Vue logo",src:r(3153)}}),t("HelloWorld",{attrs:{msg:"Welcome to Your Vue.js App"}})],1)},f=[],p=function(){var e=this,t=e._self._c;return t("div",{staticClass:"hello"},[t("h1",[e._v(e._s(e.msg))]),e._m(0),t("h3",[e._v("Installed CLI Plugins")]),e._m(1),t("h3",[e._v("Essential Links")]),e._m(2),t("h3",[e._v("Ecosystem")]),e._m(3)])},g=[function(){var e=this,t=e._self._c;return t("p",[e._v(" For a guide and recipes on how to configure / customize this project,"),t("br"),e._v(" check out the "),t("a",{attrs:{href:"https://cli.vuejs.org",target:"_blank",rel:"noopener"}},[e._v("vue-cli documentation")]),e._v(". ")])},function(){var e=this,t=e._self._c;return t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel",target:"_blank",rel:"noopener"}},[e._v("babel")])]),t("li",[t("a",{attrs:{href:"https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-router",target:"_blank",rel:"noopener"}},[e._v("router")])])])},function(){var e=this,t=e._self._c;return t("ul",[t("li",[t("a",{attrs:{href:"https://vuejs.org",target:"_blank",rel:"noopener"}},[e._v("Core Docs")])]),t("li",[t("a",{attrs:{href:"https://forum.vuejs.org",target:"_blank",rel:"noopener"}},[e._v("Forum")])]),t("li",[t("a",{attrs:{href:"https://chat.vuejs.org",target:"_blank",rel:"noopener"}},[e._v("Community Chat")])]),t("li",[t("a",{attrs:{href:"https://twitter.com/vuejs",target:"_blank",rel:"noopener"}},[e._v("Twitter")])]),t("li",[t("a",{attrs:{href:"https://news.vuejs.org",target:"_blank",rel:"noopener"}},[e._v("News")])])])},function(){var e=this,t=e._self._c;return t("ul",[t("li",[t("a",{attrs:{href:"https://router.vuejs.org",target:"_blank",rel:"noopener"}},[e._v("vue-router")])]),t("li",[t("a",{attrs:{href:"https://vuex.vuejs.org",target:"_blank",rel:"noopener"}},[e._v("vuex")])]),t("li",[t("a",{attrs:{href:"https://github.com/vuejs/vue-devtools#vue-devtools",target:"_blank",rel:"noopener"}},[e._v("vue-devtools")])]),t("li",[t("a",{attrs:{href:"https://vue-loader.vuejs.org",target:"_blank",rel:"noopener"}},[e._v("vue-loader")])]),t("li",[t("a",{attrs:{href:"https://github.com/vuejs/awesome-vue",target:"_blank",rel:"noopener"}},[e._v("awesome-vue")])])])}],v={name:"HelloWorld",props:{msg:String}},b=v,m=(0,l.A)(b,p,g,!1,null,"ebbc34ee",null),k=m.exports,I={name:"HomeView",components:{HelloWorld:k}},y=I,w=(0,l.A)(y,d,f,!1,null,null,null),C=w.exports;s["default"].use(h.Ay);const R=[{path:"/",name:"home",component:C},{path:"/about",name:"about",component:()=>r.e(594).then(r.bind(r,1417))}],E=new h.Ay({mode:"history",base:"/",routes:R});var W=E,U=r(1052),N=r.n(U);s["default"].config.productionTip=!1,s["default"].use(N()),new s["default"]({router:W,render:e=>e(c)}).$mount("#app")}},t={};function r(s){var n=t[s];if(void 0!==n)return n.exports;var o=t[s]={id:s,loaded:!1,exports:{}};return e[s].call(o.exports,o,o.exports,r),o.loaded=!0,o.exports}r.m=e,function(){r.amdO={}}(),function(){var e=[];r.O=function(t,s,n,o){if(!s){var a=1/0;for(c=0;c<e.length;c++){s=e[c][0],n=e[c][1],o=e[c][2];for(var i=!0,l=0;l<s.length;l++)(!1&o||a>=o)&&Object.keys(r.O).every((function(e){return r.O[e](s[l])}))?s.splice(l--,1):(i=!1,o<a&&(a=o));if(i){e.splice(c--,1);var u=n();void 0!==u&&(t=u)}}return t}o=o||0;for(var c=e.length;c>0&&e[c-1][2]>o;c--)e[c]=e[c-1];e[c]=[s,n,o]}}(),function(){r.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return r.d(t,{a:t}),t}}(),function(){r.d=function(e,t){for(var s in t)r.o(t,s)&&!r.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:t[s]})}}(),function(){r.f={},r.e=function(e){return Promise.all(Object.keys(r.f).reduce((function(t,s){return r.f[s](e,t),t}),[]))}}(),function(){r.u=function(e){return"js/about.437a5a7d.js"}}(),function(){r.miniCssF=function(e){}}(),function(){r.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()}(),function(){r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}}(),function(){var e={},t="frontend:";r.l=function(s,n,o,a){if(e[s])e[s].push(n);else{var i,l;if(void 0!==o)for(var u=document.getElementsByTagName("script"),c=0;c<u.length;c++){var h=u[c];if(h.getAttribute("src")==s||h.getAttribute("data-webpack")==t+o){i=h;break}}i||(l=!0,i=document.createElement("script"),i.charset="utf-8",i.timeout=120,r.nc&&i.setAttribute("nonce",r.nc),i.setAttribute("data-webpack",t+o),i.src=s),e[s]=[n];var d=function(t,r){i.onerror=i.onload=null,clearTimeout(f);var n=e[s];if(delete e[s],i.parentNode&&i.parentNode.removeChild(i),n&&n.forEach((function(e){return e(r)})),t)return t(r)},f=setTimeout(d.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=d.bind(null,i.onerror),i.onload=d.bind(null,i.onload),l&&document.head.appendChild(i)}}}(),function(){r.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}}(),function(){r.nmd=function(e){return e.paths=[],e.children||(e.children=[]),e}}(),function(){r.p="/"}(),function(){var e={524:0};r.f.j=function(t,s){var n=r.o(e,t)?e[t]:void 0;if(0!==n)if(n)s.push(n[2]);else{var o=new Promise((function(r,s){n=e[t]=[r,s]}));s.push(n[2]=o);var a=r.p+r.u(t),i=new Error,l=function(s){if(r.o(e,t)&&(n=e[t],0!==n&&(e[t]=void 0),n)){var o=s&&("load"===s.type?"missing":s.type),a=s&&s.target&&s.target.src;i.message="Loading chunk "+t+" failed.\n("+o+": "+a+")",i.name="ChunkLoadError",i.type=o,i.request=a,n[1](i)}};r.l(a,l,"chunk-"+t,t)}},r.O.j=function(t){return 0===e[t]};var t=function(t,s){var n,o,a=s[0],i=s[1],l=s[2],u=0;if(a.some((function(t){return 0!==e[t]}))){for(n in i)r.o(i,n)&&(r.m[n]=i[n]);if(l)var c=l(r)}for(t&&t(s);u<a.length;u++)o=a[u],r.o(e,o)&&e[o]&&e[o][0](),e[o]=0;return r.O(c)},s=self["webpackChunkfrontend"]=self["webpackChunkfrontend"]||[];s.forEach(t.bind(null,0)),s.push=t.bind(null,s.push.bind(s))}();var s=r.O(void 0,[504],(function(){return r(3722)}));s=r.O(s)})(); (function(){"use strict";var e={3153:function(e){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDE0IDc5LjE1Njc5NywgMjAxNC8wOC8yMC0wOTo1MzowMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OTk2QkI4RkE3NjE2MTFFNUE4NEU4RkIxNjQ5MTYyRDgiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTk2QkI4Rjk3NjE2MTFFNUE4NEU4RkIxNjQ5MTYyRDgiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjU2QTEyNzk3NjkyMTFFMzkxODk4RDkwQkY4Q0U0NzYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjU2QTEyN0E3NjkyMTFFMzkxODk4RDkwQkY4Q0U0NzYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5WHowqAAAXNElEQVR42uxda4xd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"},6681:function(e,t,r){var s=r(5471),n=function(){var e=this,t=e._self._c;return t("div",{staticClass:"flex flex-col items-center justify-center h-screen",attrs:{id:"app"}},[t("div",{staticClass:"upload-container"},[t("el-dialog",{attrs:{visible:e.loginDialogVisible,title:"登录"},on:{"update:visible":function(t){e.loginDialogVisible=t}},scopedSlots:e._u([{key:"default",fn:function(){return[t("el-form",{on:{submit:function(t){return t.preventDefault(),e.handleLogin.apply(null,arguments)}}},[t("el-form-item",{attrs:{label:"用户名"}},[t("el-input",{model:{value:e.loginForm.username,callback:function(t){e.$set(e.loginForm,"username",t)},expression:"loginForm.username"}})],1),t("el-form-item",{attrs:{label:"密码"}},[t("el-input",{attrs:{type:"password"},model:{value:e.loginForm.password,callback:function(t){e.$set(e.loginForm,"password",t)},expression:"loginForm.password"}})],1),t("el-button",{attrs:{type:"primary"},on:{click:e.handleLogin}},[e._v("登录")]),e.loginMessage?t("el-alert",{staticClass:"mt-4",attrs:{title:e.loginMessage,type:e.loginMessageType,"show-icon":""}}):e._e()],1)]},proxy:!0}])}),t("div",{staticClass:"button-container"},[t("el-button",{attrs:{size:"small",type:"info"},on:{click:function(t){e.loginDialogVisible=!0}}},[e._v(" 登录 ")]),t("el-upload",{ref:"uploadRef",attrs:{action:e.uploadUrl,"auto-upload":!1,"on-change":e.handleFileChange,"file-list":e.fileList,accept:".cc",multiple:!1,headers:{Authorization:`Bearer ${e.token}`}},scopedSlots:e._u([{key:"trigger",fn:function(){return[t("el-button",{attrs:{size:"small",type:"primary"}},[e._v("选取文件")])]},proxy:!0}])},[t("el-button",{staticStyle:{"margin-left":"10px"},attrs:{size:"small",type:"success",disabled:e.isUploading||!e.token},on:{click:e.uploadFile}},[e._v(" 上传并编译 ")])],1)],1),e.isUploading?t("el-progress",{staticClass:"mt-4",attrs:{percentage:e.progressPercentage,status:e.progressStatus,"stroke-width":10,"show-info":!1}}):e._e(),e.isSuccess?t("el-alert",{staticClass:"mt-4",attrs:{title:"编译成功!",type:"success","show-icon":""}}):e._e(),e.showErrorMessage?t("el-alert",{staticClass:"mt-4",attrs:{title:"发布错误信息",type:"error",closable:!1}},[e._v(" "+e._s(e.errorMessage)+" ")]):e._e(),e.isDownloadAvailable?t("el-button",{staticClass:"mt-4",attrs:{size:"small",type:"primary"},on:{click:e.downloadFile}},[e._v(" 下载标定程序 ")]):e._e()],1)])},o=[],i=(r(4603),r(7566),r(8721),{data(){return{uploadUrl:"/upload",fileList:[],selectedFile:null,downloadUrl:null,downloadFileName:"radarcal",errorMessage:"",showErrorMessage:!1,isUploading:!1,progressPercentage:0,progressStatus:"",isSuccess:!1,isDownloadAvailable:!1,progressInterval:null,loginDialogVisible:!1,loginForm:{username:"",password:""},token:null,loginMessage:"",loginMessageType:""}},methods:{handleFileChange(e){this.selectedFile=e.raw,this.fileList=[e]},async uploadFile(){if(this.selectedFile){this.errorMessage="",this.showErrorMessage=!1,this.isSuccess=!1,this.isUploading=!0,this.progressPercentage=0,this.progressStatus="",this.progressInterval=setInterval((()=>{this.progressPercentage<100?this.progressPercentage+=1:clearInterval(this.progressInterval)}),1800);try{const e=new FormData;e.append("file",this.selectedFile);const t=await fetch(this.uploadUrl,{method:"POST",headers:{Authorization:`Bearer ${this.token}`},body:e});if(clearInterval(this.progressInterval),t.ok){const e=await t.blob();this.downloadUrl=window.URL.createObjectURL(e),this.isDownloadAvailable=!0,this.isSuccess=!0,this.progressPercentage=100,this.progressStatus="success",this.$message.success("编译成功!")}else{const e=await t.text();this.errorMessage=e,this.showErrorMessage=!0,this.progressStatus="error"}}catch(e){clearInterval(this.progressInterval),console.error("发生错误:",e),this.errorMessage="发生错误,请重试",this.showErrorMessage=!0,this.progressStatus="error"}finally{this.isUploading=!1}}else this.$message.error("请选择一个文件")},downloadFile(){if(this.downloadUrl){const e=document.createElement("a");e.href=this.downloadUrl,e.download=this.downloadFileName,document.body.appendChild(e),e.click(),document.body.removeChild(e)}},async handleLogin(){try{console.log("登录信息:",this.loginForm);const e=new URLSearchParams;e.append("username",this.loginForm.username),e.append("password",this.loginForm.password);const t=await fetch("/login",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:e});if(t.ok){const e=await t.text();this.token=e,this.loginMessage="获取 token 成功",this.$message.success("获取 token 成功"),this.loginMessageType="success",this.loginDialogVisible=!1}else{const e=await t.text();this.loginMessage=e,this.loginMessageType="error"}}catch(e){console.error("登录请求出错:",e),this.loginMessage="登录请求出错,请重试",this.loginMessageType="error"}}}}),a=i,l=r(1656),c=(0,l.A)(a,n,o,!1,null,"1072ea42",null),u=c.exports,h=r(173),d=function(){var e=this,t=e._self._c;return t("div",{staticClass:"home"},[t("img",{attrs:{alt:"Vue logo",src:r(3153)}}),t("HelloWorld",{attrs:{msg:"Welcome to Your Vue.js App"}})],1)},g=[],p=function(){var e=this,t=e._self._c;return t("div",{staticClass:"hello"},[t("h1",[e._v(e._s(e.msg))]),e._m(0),t("h3",[e._v("Installed CLI Plugins")]),e._m(1),t("h3",[e._v("Essential Links")]),e._m(2),t("h3",[e._v("Ecosystem")]),e._m(3)])},f=[function(){var e=this,t=e._self._c;return t("p",[e._v(" For a guide and recipes on how to configure / customize this project,"),t("br"),e._v(" check out the "),t("a",{attrs:{href:"https://cli.vuejs.org",target:"_blank",rel:"noopener"}},[e._v("vue-cli documentation")]),e._v(". ")])},function(){var e=this,t=e._self._c;return t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel",target:"_blank",rel:"noopener"}},[e._v("babel")])]),t("li",[t("a",{attrs:{href:"https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-router",target:"_blank",rel:"noopener"}},[e._v("router")])])])},function(){var e=this,t=e._self._c;return t("ul",[t("li",[t("a",{attrs:{href:"https://vuejs.org",target:"_blank",rel:"noopener"}},[e._v("Core Docs")])]),t("li",[t("a",{attrs:{href:"https://forum.vuejs.org",target:"_blank",rel:"noopener"}},[e._v("Forum")])]),t("li",[t("a",{attrs:{href:"https://chat.vuejs.org",target:"_blank",rel:"noopener"}},[e._v("Community Chat")])]),t("li",[t("a",{attrs:{href:"https://twitter.com/vuejs",target:"_blank",rel:"noopener"}},[e._v("Twitter")])]),t("li",[t("a",{attrs:{href:"https://news.vuejs.org",target:"_blank",rel:"noopener"}},[e._v("News")])])])},function(){var e=this,t=e._self._c;return t("ul",[t("li",[t("a",{attrs:{href:"https://router.vuejs.org",target:"_blank",rel:"noopener"}},[e._v("vue-router")])]),t("li",[t("a",{attrs:{href:"https://vuex.vuejs.org",target:"_blank",rel:"noopener"}},[e._v("vuex")])]),t("li",[t("a",{attrs:{href:"https://github.com/vuejs/vue-devtools#vue-devtools",target:"_blank",rel:"noopener"}},[e._v("vue-devtools")])]),t("li",[t("a",{attrs:{href:"https://vue-loader.vuejs.org",target:"_blank",rel:"noopener"}},[e._v("vue-loader")])]),t("li",[t("a",{attrs:{href:"https://github.com/vuejs/awesome-vue",target:"_blank",rel:"noopener"}},[e._v("awesome-vue")])])])}],m={name:"HelloWorld",props:{msg:String}},v=m,b=(0,l.A)(v,p,f,!1,null,"ebbc34ee",null),k=b.exports,y={name:"HomeView",components:{HelloWorld:k}},w=y,I=(0,l.A)(w,d,g,!1,null,null,null),C=I.exports;s["default"].use(h.Ay);const R=[{path:"/",name:"home",component:C},{path:"/about",name:"about",component:()=>r.e(594).then(r.bind(r,1417))}],E=new h.Ay({mode:"history",base:"/",routes:R});var W=E,U=r(1052),z=r.n(U);s["default"].config.productionTip=!1,s["default"].use(z()),new s["default"]({router:W,render:e=>e(u)}).$mount("#app")}},t={};function r(s){var n=t[s];if(void 0!==n)return n.exports;var o=t[s]={id:s,loaded:!1,exports:{}};return e[s].call(o.exports,o,o.exports,r),o.loaded=!0,o.exports}r.m=e,function(){r.amdO={}}(),function(){var e=[];r.O=function(t,s,n,o){if(!s){var i=1/0;for(u=0;u<e.length;u++){s=e[u][0],n=e[u][1],o=e[u][2];for(var a=!0,l=0;l<s.length;l++)(!1&o||i>=o)&&Object.keys(r.O).every((function(e){return r.O[e](s[l])}))?s.splice(l--,1):(a=!1,o<i&&(i=o));if(a){e.splice(u--,1);var c=n();void 0!==c&&(t=c)}}return t}o=o||0;for(var u=e.length;u>0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[s,n,o]}}(),function(){r.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return r.d(t,{a:t}),t}}(),function(){r.d=function(e,t){for(var s in t)r.o(t,s)&&!r.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:t[s]})}}(),function(){r.f={},r.e=function(e){return Promise.all(Object.keys(r.f).reduce((function(t,s){return r.f[s](e,t),t}),[]))}}(),function(){r.u=function(e){return"js/about.437a5a7d.js"}}(),function(){r.miniCssF=function(e){}}(),function(){r.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()}(),function(){r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}}(),function(){var e={},t="frontend:";r.l=function(s,n,o,i){if(e[s])e[s].push(n);else{var a,l;if(void 0!==o)for(var c=document.getElementsByTagName("script"),u=0;u<c.length;u++){var h=c[u];if(h.getAttribute("src")==s||h.getAttribute("data-webpack")==t+o){a=h;break}}a||(l=!0,a=document.createElement("script"),a.charset="utf-8",a.timeout=120,r.nc&&a.setAttribute("nonce",r.nc),a.setAttribute("data-webpack",t+o),a.src=s),e[s]=[n];var d=function(t,r){a.onerror=a.onload=null,clearTimeout(g);var n=e[s];if(delete e[s],a.parentNode&&a.parentNode.removeChild(a),n&&n.forEach((function(e){return e(r)})),t)return t(r)},g=setTimeout(d.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=d.bind(null,a.onerror),a.onload=d.bind(null,a.onload),l&&document.head.appendChild(a)}}}(),function(){r.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}}(),function(){r.nmd=function(e){return e.paths=[],e.children||(e.children=[]),e}}(),function(){r.p="/"}(),function(){var e={524:0};r.f.j=function(t,s){var n=r.o(e,t)?e[t]:void 0;if(0!==n)if(n)s.push(n[2]);else{var o=new Promise((function(r,s){n=e[t]=[r,s]}));s.push(n[2]=o);var i=r.p+r.u(t),a=new Error,l=function(s){if(r.o(e,t)&&(n=e[t],0!==n&&(e[t]=void 0),n)){var o=s&&("load"===s.type?"missing":s.type),i=s&&s.target&&s.target.src;a.message="Loading chunk "+t+" failed.\n("+o+": "+i+")",a.name="ChunkLoadError",a.type=o,a.request=i,n[1](a)}};r.l(i,l,"chunk-"+t,t)}},r.O.j=function(t){return 0===e[t]};var t=function(t,s){var n,o,i=s[0],a=s[1],l=s[2],c=0;if(i.some((function(t){return 0!==e[t]}))){for(n in a)r.o(a,n)&&(r.m[n]=a[n]);if(l)var u=l(r)}for(t&&t(s);c<i.length;c++)o=i[c],r.o(e,o)&&e[o]&&e[o][0](),e[o]=0;return r.O(u)},s=self["webpackChunkfrontend"]=self["webpackChunkfrontend"]||[];s.forEach(t.bind(null,0)),s.push=t.bind(null,s.push.bind(s))}();var s=r.O(void 0,[504],(function(){return r(6681)}));s=r.O(s)})();
//# sourceMappingURL=app.4cf479e6.js.map //# sourceMappingURL=app.2a660157.js.map
\ No newline at end of file \ No newline at end of file
{"version":3,"file":"js/app.2a660157.js","mappings":"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","sources":["webpack://frontend/./src/App.vue","webpack://frontend/src/App.vue","webpack://frontend/./src/App.vue?c036","webpack://frontend/./src/App.vue?0e40","webpack://frontend/./src/views/HomeView.vue","webpack://frontend/./src/components/HelloWorld.vue","webpack://frontend/src/components/HelloWorld.vue","webpack://frontend/./src/components/HelloWorld.vue?e4fc","webpack://frontend/./src/components/HelloWorld.vue?541e","webpack://frontend/src/views/HomeView.vue","webpack://frontend/./src/views/HomeView.vue?5167","webpack://frontend/./src/views/HomeView.vue?aae2","webpack://frontend/./src/router/index.js","webpack://frontend/./src/main.js","webpack://frontend/webpack/bootstrap","webpack://frontend/webpack/runtime/amd options","webpack://frontend/webpack/runtime/chunk loaded","webpack://frontend/webpack/runtime/compat get default export","webpack://frontend/webpack/runtime/define property getters","webpack://frontend/webpack/runtime/ensure chunk","webpack://frontend/webpack/runtime/get javascript chunk filename","webpack://frontend/webpack/runtime/get mini-css chunk filename","webpack://frontend/webpack/runtime/global","webpack://frontend/webpack/runtime/hasOwnProperty shorthand","webpack://frontend/webpack/runtime/load script","webpack://frontend/webpack/runtime/make namespace object","webpack://frontend/webpack/runtime/node module decorator","webpack://frontend/webpack/runtime/publicPath","webpack://frontend/webpack/runtime/jsonp chunk loading","webpack://frontend/webpack/startup"],"sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"flex flex-col items-center justify-center h-screen\",attrs:{\"id\":\"app\"}},[_c('div',{staticClass:\"upload-container\"},[_c('el-dialog',{attrs:{\"visible\":_vm.loginDialogVisible,\"title\":\"登录\"},on:{\"update:visible\":function($event){_vm.loginDialogVisible=$event}},scopedSlots:_vm._u([{key:\"default\",fn:function(){return [_c('el-form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.handleLogin.apply(null, arguments)}}},[_c('el-form-item',{attrs:{\"label\":\"用户名\"}},[_c('el-input',{model:{value:(_vm.loginForm.username),callback:function ($$v) {_vm.$set(_vm.loginForm, \"username\", $$v)},expression:\"loginForm.username\"}})],1),_c('el-form-item',{attrs:{\"label\":\"密码\"}},[_c('el-input',{attrs:{\"type\":\"password\"},model:{value:(_vm.loginForm.password),callback:function ($$v) {_vm.$set(_vm.loginForm, \"password\", $$v)},expression:\"loginForm.password\"}})],1),_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":_vm.handleLogin}},[_vm._v(\"登录\")]),(_vm.loginMessage)?_c('el-alert',{staticClass:\"mt-4\",attrs:{\"title\":_vm.loginMessage,\"type\":_vm.loginMessageType,\"show-icon\":\"\"}}):_vm._e()],1)]},proxy:true}])}),_c('div',{staticClass:\"button-container\"},[_c('el-button',{attrs:{\"size\":\"small\",\"type\":\"info\"},on:{\"click\":function($event){_vm.loginDialogVisible = true}}},[_vm._v(\" 登录 \")]),_c('el-upload',{ref:\"uploadRef\",attrs:{\"action\":_vm.uploadUrl,\"auto-upload\":false,\"on-change\":_vm.handleFileChange,\"file-list\":_vm.fileList,\"accept\":\".cc\",\"multiple\":false,\"headers\":{'Authorization': `Bearer ${_vm.token}`}},scopedSlots:_vm._u([{key:\"trigger\",fn:function(){return [_c('el-button',{attrs:{\"size\":\"small\",\"type\":\"primary\"}},[_vm._v(\"选取文件\")])]},proxy:true}])},[_c('el-button',{staticStyle:{\"margin-left\":\"10px\"},attrs:{\"size\":\"small\",\"type\":\"success\",\"disabled\":_vm.isUploading ||!_vm.token},on:{\"click\":_vm.uploadFile}},[_vm._v(\" 上传并编译 \")])],1)],1),(_vm.isUploading)?_c('el-progress',{staticClass:\"mt-4\",attrs:{\"percentage\":_vm.progressPercentage,\"status\":_vm.progressStatus,\"stroke-width\":10,\"show-info\":false}}):_vm._e(),(_vm.isSuccess)?_c('el-alert',{staticClass:\"mt-4\",attrs:{\"title\":\"编译成功!\",\"type\":\"success\",\"show-icon\":\"\"}}):_vm._e(),(_vm.showErrorMessage)?_c('el-alert',{staticClass:\"mt-4\",attrs:{\"title\":\"发布错误信息\",\"type\":\"error\",\"closable\":false}},[_vm._v(\" \"+_vm._s(_vm.errorMessage)+\" \")]):_vm._e(),(_vm.isDownloadAvailable)?_c('el-button',{staticClass:\"mt-4\",attrs:{\"size\":\"small\",\"type\":\"primary\"},on:{\"click\":_vm.downloadFile}},[_vm._v(\" 下载标定程序 \")]):_vm._e()],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div id=\"app\" class=\"flex flex-col items-center justify-center h-screen\">\n <div class=\"upload-container\">\n <!-- 登录对话框 -->\n <el-dialog :visible.sync=\"loginDialogVisible\" title=\"登录\">\n <template v-slot:default>\n <el-form @submit.prevent=\"handleLogin\">\n <el-form-item label=\"用户名\">\n <el-input v-model=\"loginForm.username\"></el-input>\n </el-form-item>\n <el-form-item label=\"密码\">\n <el-input type=\"password\" v-model=\"loginForm.password\"></el-input>\n </el-form-item>\n <!-- 修改:移除 native-type 属性,使用 @click 触发登录方法 -->\n <el-button type=\"primary\" @click=\"handleLogin\">登录</el-button>\n <el-alert\n v-if=\"loginMessage\"\n :title=\"loginMessage\"\n :type=\"loginMessageType\"\n show-icon\n class=\"mt-4\"\n ></el-alert>\n </el-form>\n </template>\n </el-dialog>\n <div class=\"button-container\">\n <el-button\n size=\"small\"\n type=\"info\"\n @click=\"loginDialogVisible = true\"\n >\n 登录\n </el-button>\n <el-upload\n ref=\"uploadRef\"\n :action=\"uploadUrl\"\n :auto-upload=\"false\"\n :on-change=\"handleFileChange\"\n :file-list=\"fileList\"\n accept=\".cc\"\n :multiple=\"false\"\n :headers=\"{'Authorization': `Bearer ${token}`}\"\n >\n <template #trigger>\n <el-button size=\"small\" type=\"primary\">选取文件</el-button>\n </template>\n <el-button\n style=\"margin-left: 10px;\"\n size=\"small\"\n type=\"success\"\n :disabled=\"isUploading ||!token\"\n @click=\"uploadFile\"\n >\n 上传并编译\n </el-button>\n </el-upload>\n </div>\n\n <!-- 动态进度条 -->\n <el-progress\n v-if=\"isUploading\"\n :percentage=\"progressPercentage\"\n :status=\"progressStatus\"\n class=\"mt-4\"\n :stroke-width=\"10\"\n :show-info=\"false\"\n ></el-progress>\n\n <!-- 成功提示 -->\n <el-alert\n v-if=\"isSuccess\"\n title=\"编译成功!\"\n type=\"success\"\n show-icon\n class=\"mt-4\"\n ></el-alert>\n\n <!-- 错误信息栏 -->\n <el-alert\n v-if=\"showErrorMessage\"\n title=\"发布错误信息\"\n type=\"error\"\n :closable=\"false\"\n class=\"mt-4\"\n >\n {{ errorMessage }}\n </el-alert>\n\n <!-- 下载按钮 -->\n <el-button\n v-if=\"isDownloadAvailable\"\n size=\"small\"\n type=\"primary\"\n @click=\"downloadFile\"\n class=\"mt-4\"\n >\n 下载标定程序\n </el-button>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n data() {\n return {\n uploadUrl: '/upload',\n fileList: [],\n selectedFile: null,\n downloadUrl: null,\n downloadFileName: 'radarcal',\n errorMessage: '',\n showErrorMessage: false,\n isUploading: false,\n progressPercentage: 0,\n progressStatus: '',\n isSuccess: false,\n isDownloadAvailable: false,\n progressInterval: null,\n loginDialogVisible: false,\n loginForm: {\n username: '',\n password: ''\n },\n token: null,\n loginMessage: '',\n loginMessageType: ''\n };\n },\n methods: {\n handleFileChange(file) {\n this.selectedFile = file.raw;\n this.fileList = [file];\n },\n async uploadFile() {\n if (!this.selectedFile) {\n this.$message.error('请选择一个文件');\n return;\n }\n\n // 清空错误信息和成功提示\n this.errorMessage = '';\n this.showErrorMessage = false;\n this.isSuccess = false;\n\n // 开始上传和编译\n this.isUploading = true;\n this.progressPercentage = 0;\n this.progressStatus = '';\n\n // 设置进度条定时器,180 秒内均匀增长到 100%\n this.progressInterval = setInterval(() => {\n if (this.progressPercentage < 100) {\n this.progressPercentage += 1;\n } else {\n clearInterval(this.progressInterval);\n }\n }, 1800);\n\n try {\n const formData = new FormData();\n formData.append('file', this.selectedFile);\n\n const response = await fetch(this.uploadUrl, {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${this.token}`\n },\n body: formData\n });\n\n clearInterval(this.progressInterval);\n\n if (response.ok) {\n const blob = await response.blob();\n this.downloadUrl = window.URL.createObjectURL(blob);\n this.isDownloadAvailable = true;\n this.isSuccess = true;\n this.progressPercentage = 100;\n this.progressStatus ='success';\n this.$message.success('编译成功!');\n } else {\n const errorText = await response.text();\n this.errorMessage = errorText;\n this.showErrorMessage = true;\n this.progressStatus = 'error';\n }\n } catch (error) {\n clearInterval(this.progressInterval);\n console.error('发生错误:', error);\n this.errorMessage = '发生错误,请重试';\n this.showErrorMessage = true;\n this.progressStatus = 'error';\n } finally {\n this.isUploading = false;\n }\n },\n downloadFile() {\n if (this.downloadUrl) {\n const link = document.createElement('a');\n link.href = this.downloadUrl;\n link.download = this.downloadFileName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n },\n async handleLogin() {\n try {\n console.log('登录信息:', this.loginForm);\n const formData = new URLSearchParams();\n formData.append('username', this.loginForm.username);\n formData.append('password', this.loginForm.password);\n\n const response = await fetch('/login', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n },\n body: formData\n });\n\n if (response.ok) {\n const token = await response.text();\n this.token = token;\n this.loginMessage = '获取 token 成功';\n this.$message.success('获取 token 成功');\n this.loginMessageType ='success';\n this.loginDialogVisible = false;\n } else {\n const errorText = await response.text();\n this.loginMessage = errorText;\n this.loginMessageType = 'error';\n }\n } catch (error) {\n console.error('登录请求出错:', error);\n this.loginMessage = '登录请求出错,请重试';\n this.loginMessageType = 'error';\n }\n }\n }\n};\n</script>\n\n<style scoped>\n.upload-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n.button-container {\n display: flex;\n flex-direction: row;\n gap: 20px;\n margin-bottom: 20px;\n}\n</style>","import mod from \"-!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=1072ea42&scoped=true\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\nimport style0 from \"./App.vue?vue&type=style&index=0&id=1072ea42&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1072ea42\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"home\"},[_c('img',{attrs:{\"alt\":\"Vue logo\",\"src\":require(\"../assets/logo.png\")}}),_c('HelloWorld',{attrs:{\"msg\":\"Welcome to Your Vue.js App\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"hello\"},[_c('h1',[_vm._v(_vm._s(_vm.msg))]),_vm._m(0),_c('h3',[_vm._v(\"Installed CLI Plugins\")]),_vm._m(1),_c('h3',[_vm._v(\"Essential Links\")]),_vm._m(2),_c('h3',[_vm._v(\"Ecosystem\")]),_vm._m(3)])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('p',[_vm._v(\" For a guide and recipes on how to configure / customize this project,\"),_c('br'),_vm._v(\" check out the \"),_c('a',{attrs:{\"href\":\"https://cli.vuejs.org\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\"vue-cli documentation\")]),_vm._v(\". \")])\n},function (){var _vm=this,_c=_vm._self._c;return _c('ul',[_c('li',[_c('a',{attrs:{\"href\":\"https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\"babel\")])]),_c('li',[_c('a',{attrs:{\"href\":\"https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-router\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\"router\")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('ul',[_c('li',[_c('a',{attrs:{\"href\":\"https://vuejs.org\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\"Core Docs\")])]),_c('li',[_c('a',{attrs:{\"href\":\"https://forum.vuejs.org\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\"Forum\")])]),_c('li',[_c('a',{attrs:{\"href\":\"https://chat.vuejs.org\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\"Community Chat\")])]),_c('li',[_c('a',{attrs:{\"href\":\"https://twitter.com/vuejs\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\"Twitter\")])]),_c('li',[_c('a',{attrs:{\"href\":\"https://news.vuejs.org\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\"News\")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('ul',[_c('li',[_c('a',{attrs:{\"href\":\"https://router.vuejs.org\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\"vue-router\")])]),_c('li',[_c('a',{attrs:{\"href\":\"https://vuex.vuejs.org\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\"vuex\")])]),_c('li',[_c('a',{attrs:{\"href\":\"https://github.com/vuejs/vue-devtools#vue-devtools\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\"vue-devtools\")])]),_c('li',[_c('a',{attrs:{\"href\":\"https://vue-loader.vuejs.org\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\"vue-loader\")])]),_c('li',[_c('a',{attrs:{\"href\":\"https://github.com/vuejs/awesome-vue\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\"awesome-vue\")])])])\n}]\n\nexport { render, staticRenderFns }","<template>\n <div class=\"hello\">\n <h1>{{ msg }}</h1>\n <p>\n For a guide and recipes on how to configure / customize this project,<br>\n check out the\n <a href=\"https://cli.vuejs.org\" target=\"_blank\" rel=\"noopener\">vue-cli documentation</a>.\n </p>\n <h3>Installed CLI Plugins</h3>\n <ul>\n <li><a href=\"https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel\" target=\"_blank\" rel=\"noopener\">babel</a></li>\n <li><a href=\"https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-router\" target=\"_blank\" rel=\"noopener\">router</a></li>\n </ul>\n <h3>Essential Links</h3>\n <ul>\n <li><a href=\"https://vuejs.org\" target=\"_blank\" rel=\"noopener\">Core Docs</a></li>\n <li><a href=\"https://forum.vuejs.org\" target=\"_blank\" rel=\"noopener\">Forum</a></li>\n <li><a href=\"https://chat.vuejs.org\" target=\"_blank\" rel=\"noopener\">Community Chat</a></li>\n <li><a href=\"https://twitter.com/vuejs\" target=\"_blank\" rel=\"noopener\">Twitter</a></li>\n <li><a href=\"https://news.vuejs.org\" target=\"_blank\" rel=\"noopener\">News</a></li>\n </ul>\n <h3>Ecosystem</h3>\n <ul>\n <li><a href=\"https://router.vuejs.org\" target=\"_blank\" rel=\"noopener\">vue-router</a></li>\n <li><a href=\"https://vuex.vuejs.org\" target=\"_blank\" rel=\"noopener\">vuex</a></li>\n <li><a href=\"https://github.com/vuejs/vue-devtools#vue-devtools\" target=\"_blank\" rel=\"noopener\">vue-devtools</a></li>\n <li><a href=\"https://vue-loader.vuejs.org\" target=\"_blank\" rel=\"noopener\">vue-loader</a></li>\n <li><a href=\"https://github.com/vuejs/awesome-vue\" target=\"_blank\" rel=\"noopener\">awesome-vue</a></li>\n </ul>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'HelloWorld',\n props: {\n msg: String\n }\n}\n</script>\n\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\n<style scoped>\nh3 {\n margin: 40px 0 0;\n}\nul {\n list-style-type: none;\n padding: 0;\n}\nli {\n display: inline-block;\n margin: 0 10px;\n}\na {\n color: #42b983;\n}\n</style>\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HelloWorld.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HelloWorld.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./HelloWorld.vue?vue&type=template&id=ebbc34ee&scoped=true\"\nimport script from \"./HelloWorld.vue?vue&type=script&lang=js\"\nexport * from \"./HelloWorld.vue?vue&type=script&lang=js\"\nimport style0 from \"./HelloWorld.vue?vue&type=style&index=0&id=ebbc34ee&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"ebbc34ee\",\n null\n \n)\n\nexport default component.exports","<template>\n <div class=\"home\">\n <img alt=\"Vue logo\" src=\"../assets/logo.png\">\n <HelloWorld msg=\"Welcome to Your Vue.js App\"/>\n </div>\n</template>\n\n<script>\n// @ is an alias to /src\nimport HelloWorld from '@/components/HelloWorld.vue'\n\nexport default {\n name: 'HomeView',\n components: {\n HelloWorld\n }\n}\n</script>\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HomeView.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HomeView.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./HomeView.vue?vue&type=template&id=5eb1c3fc\"\nimport script from \"./HomeView.vue?vue&type=script&lang=js\"\nexport * from \"./HomeView.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\nimport VueRouter from 'vue-router'\nimport HomeView from '../views/HomeView.vue'\n\nVue.use(VueRouter)\n\nconst routes = [\n {\n path: '/',\n name: 'home',\n component: HomeView\n },\n {\n path: '/about',\n name: 'about',\n // route level code-splitting\n // this generates a separate chunk (about.[hash].js) for this route\n // which is lazy-loaded when the route is visited.\n component: () => import(/* webpackChunkName: \"about\" */ '../views/AboutView.vue')\n }\n]\n\nconst router = new VueRouter({\n mode: 'history',\n base: process.env.BASE_URL,\n routes\n})\n\nexport default router\n","import Vue from 'vue'\nimport App from './App.vue'\nimport router from './router'\nimport ElementUI from 'element-ui';\nimport 'element-ui/lib/theme-chalk/index.css';\n\nVue.config.productionTip = false\nVue.use(ElementUI);\n\nnew Vue({\n router,\n render: h => h(App)\n}).$mount('#app')\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdO = {};","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"js/\" + \"about\" + \".\" + \"437a5a7d\" + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"frontend:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t524: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkfrontend\"] = self[\"webpackChunkfrontend\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [504], function() { return __webpack_require__(6681); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["render","_vm","this","_c","_self","staticClass","attrs","loginDialogVisible","on","$event","scopedSlots","_u","key","fn","preventDefault","handleLogin","apply","arguments","model","value","loginForm","username","callback","$$v","$set","expression","password","_v","loginMessage","loginMessageType","_e","proxy","ref","uploadUrl","handleFileChange","fileList","token","staticStyle","isUploading","uploadFile","progressPercentage","progressStatus","isSuccess","showErrorMessage","_s","errorMessage","isDownloadAvailable","downloadFile","staticRenderFns","data","selectedFile","downloadUrl","downloadFileName","progressInterval","methods","file","raw","setInterval","clearInterval","formData","FormData","append","response","fetch","method","headers","body","ok","blob","window","URL","createObjectURL","$message","success","errorText","text","error","console","link","document","createElement","href","download","appendChild","click","removeChild","log","URLSearchParams","component","require","msg","_m","name","props","String","components","HelloWorld","Vue","use","VueRouter","routes","path","HomeView","router","mode","base","process","config","productionTip","ElementUI","h","App","$mount","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","id","loaded","__webpack_modules__","call","m","amdO","deferred","O","result","chunkIds","priority","notFulfilled","Infinity","i","length","fulfilled","j","Object","keys","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","f","e","chunkId","Promise","all","reduce","promises","u","miniCssF","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","inProgress","dataWebpackPrefix","l","url","done","push","script","needAttach","scripts","getElementsByTagName","s","getAttribute","charset","timeout","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","forEach","setTimeout","bind","type","target","head","Symbol","toStringTag","nmd","paths","children","p","installedChunks","installedChunkData","promise","resolve","reject","Error","loadingEnded","errorType","realSrc","message","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file
{"version":3,"file":"js/app.4cf479e6.js","mappings":"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","sources":["webpack://frontend/./src/App.vue","webpack://frontend/src/App.vue","webpack://frontend/./src/App.vue?c036","webpack://frontend/./src/App.vue?0e40","webpack://frontend/./src/views/HomeView.vue","webpack://frontend/./src/components/HelloWorld.vue","webpack://frontend/src/components/HelloWorld.vue","webpack://frontend/./src/components/HelloWorld.vue?e4fc","webpack://frontend/./src/components/HelloWorld.vue?541e","webpack://frontend/src/views/HomeView.vue","webpack://frontend/./src/views/HomeView.vue?5167","webpack://frontend/./src/views/HomeView.vue?aae2","webpack://frontend/./src/router/index.js","webpack://frontend/./src/main.js","webpack://frontend/webpack/bootstrap","webpack://frontend/webpack/runtime/amd options","webpack://frontend/webpack/runtime/chunk loaded","webpack://frontend/webpack/runtime/compat get default export","webpack://frontend/webpack/runtime/define property getters","webpack://frontend/webpack/runtime/ensure chunk","webpack://frontend/webpack/runtime/get javascript chunk filename","webpack://frontend/webpack/runtime/get mini-css chunk filename","webpack://frontend/webpack/runtime/global","webpack://frontend/webpack/runtime/hasOwnProperty shorthand","webpack://frontend/webpack/runtime/load script","webpack://frontend/webpack/runtime/make namespace object","webpack://frontend/webpack/runtime/node module decorator","webpack://frontend/webpack/runtime/publicPath","webpack://frontend/webpack/runtime/jsonp chunk loading","webpack://frontend/webpack/startup"],"sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"flex flex-col items-center justify-center h-screen\",attrs:{\"id\":\"app\"}},[_c('div',{staticClass:\"upload-container\"},[_c('el-upload',{ref:\"uploadRef\",attrs:{\"action\":_vm.uploadUrl,\"auto-upload\":false,\"on-change\":_vm.handleFileChange,\"file-list\":_vm.fileList,\"accept\":\".cc\",\"multiple\":false},scopedSlots:_vm._u([{key:\"trigger\",fn:function(){return [_c('el-button',{attrs:{\"size\":\"small\",\"type\":\"primary\"}},[_vm._v(\"选取文件\")])]},proxy:true}])},[_c('el-button',{staticStyle:{\"margin-left\":\"10px\"},attrs:{\"size\":\"small\",\"type\":\"success\",\"disabled\":_vm.isUploading},on:{\"click\":_vm.uploadFile}},[_vm._v(\" 上传并编译 \")])],1),(_vm.isUploading)?_c('el-progress',{staticClass:\"mt-4\",attrs:{\"percentage\":_vm.progressPercentage,\"status\":_vm.progressStatus,\"stroke-width\":10,\"show-info\":false}}):_vm._e(),(_vm.isSuccess)?_c('el-alert',{staticClass:\"mt-4\",attrs:{\"title\":\"编译成功!\",\"type\":\"success\",\"show-icon\":\"\"}}):_vm._e(),(_vm.showErrorMessage)?_c('el-alert',{staticClass:\"mt-4\",attrs:{\"title\":\"发布错误信息\",\"type\":\"error\",\"closable\":false}},[_vm._v(\" \"+_vm._s(_vm.errorMessage)+\" \")]):_vm._e(),(_vm.isDownloadAvailable)?_c('el-button',{staticClass:\"mt-4\",attrs:{\"size\":\"small\",\"type\":\"primary\"},on:{\"click\":_vm.downloadFile}},[_vm._v(\" 下载发布后的文件 \")]):_vm._e()],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div id=\"app\" class=\"flex flex-col items-center justify-center h-screen\">\n <div class=\"upload-container\">\n <el-upload\n ref=\"uploadRef\"\n :action=\"uploadUrl\"\n :auto-upload=\"false\"\n :on-change=\"handleFileChange\"\n :file-list=\"fileList\"\n accept=\".cc\"\n :multiple=\"false\"\n >\n <template #trigger>\n <el-button size=\"small\" type=\"primary\">选取文件</el-button>\n </template>\n <el-button\n style=\"margin-left: 10px;\"\n size=\"small\"\n type=\"success\"\n :disabled=\"isUploading\"\n @click=\"uploadFile\"\n >\n 上传并编译\n </el-button>\n </el-upload>\n\n <!-- 动态进度条 -->\n <el-progress\n v-if=\"isUploading\"\n :percentage=\"progressPercentage\"\n :status=\"progressStatus\"\n class=\"mt-4\"\n :stroke-width=\"10\"\n :show-info=\"false\"\n ></el-progress>\n\n <!-- 成功提示 -->\n <el-alert\n v-if=\"isSuccess\"\n title=\"编译成功!\"\n type=\"success\"\n show-icon\n class=\"mt-4\"\n ></el-alert>\n\n <!-- 错误信息栏 -->\n <el-alert\n v-if=\"showErrorMessage\"\n title=\"发布错误信息\"\n type=\"error\"\n :closable=\"false\"\n class=\"mt-4\"\n >\n {{ errorMessage }}\n </el-alert>\n\n <!-- 下载按钮 -->\n <el-button\n v-if=\"isDownloadAvailable\"\n size=\"small\"\n type=\"primary\"\n @click=\"downloadFile\"\n class=\"mt-4\"\n >\n 下载发布后的文件\n </el-button>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n data() {\n return {\n uploadUrl: '/upload',\n fileList: [],\n selectedFile: null,\n downloadUrl: null,\n downloadFileName: 'radarcal',\n errorMessage: '',\n showErrorMessage: false, // 控制错误信息栏的显示\n isUploading: false, // 是否正在上传和编译\n progressPercentage: 0, // 进度条百分比\n progressStatus: '', // 进度条状态(success/error)\n isSuccess: false, // 是否编译成功\n isDownloadAvailable: false, // 是否显示下载按钮\n progressInterval: null // 用于存储进度条更新的定时器\n };\n },\n methods: {\n handleFileChange(file) {\n this.selectedFile = file.raw;\n this.fileList = [file];\n },\n async uploadFile() {\n if (!this.selectedFile) {\n this.$message.error('请选择一个文件');\n return;\n }\n\n // 清空错误信息和成功提示\n this.errorMessage = '';\n this.showErrorMessage = false;\n this.isSuccess = false;\n\n // 开始上传和编译\n this.isUploading = true;\n this.progressPercentage = 0;\n this.progressStatus = '';\n\n // 设置进度条定时器,100 秒内均匀增长到 100%\n this.progressInterval = setInterval(() => {\n if (this.progressPercentage < 100) {\n this.progressPercentage += 1; // 每秒增加 1%\n } else {\n clearInterval(this.progressInterval); // 停止定时器\n }\n }, 1000); // 每秒更新一次进度条\n\n try {\n const formData = new FormData();\n formData.append('file', this.selectedFile);\n\n const response = await fetch(this.uploadUrl, {\n method: 'POST',\n body: formData\n });\n\n clearInterval(this.progressInterval); // 停止进度条定时器\n\n if (response.ok) {\n const blob = await response.blob();\n this.downloadUrl = window.URL.createObjectURL(blob);\n this.isDownloadAvailable = true; // 显示下载按钮\n this.isSuccess = true; // 标记编译成功\n this.progressPercentage = 100; // 进度条完成\n this.progressStatus = 'success'; // 进度条状态为成功\n this.$message.success('编译成功!'); // 提示编译成功\n } else {\n const errorText = await response.text();\n this.errorMessage = errorText;\n this.showErrorMessage = true; // 显示错误信息栏\n this.progressStatus = 'error'; // 进度条状态为失败\n }\n } catch (error) {\n clearInterval(this.progressInterval); // 停止进度条定时器\n console.error('发生错误:', error);\n this.errorMessage = '发生错误,请重试';\n this.showErrorMessage = true; // 显示错误信息栏\n this.progressStatus = 'error'; // 进度条状态为失败\n } finally {\n this.isUploading = false; // 隐藏进度条\n }\n },\n downloadFile() {\n if (this.downloadUrl) {\n const link = document.createElement('a');\n link.href = this.downloadUrl;\n link.download = this.downloadFileName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n }\n }\n};\n</script>\n\n<style scoped>\n.upload-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n</style>","import mod from \"-!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=3d5ae34e&scoped=true\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\nimport style0 from \"./App.vue?vue&type=style&index=0&id=3d5ae34e&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3d5ae34e\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"home\"},[_c('img',{attrs:{\"alt\":\"Vue logo\",\"src\":require(\"../assets/logo.png\")}}),_c('HelloWorld',{attrs:{\"msg\":\"Welcome to Your Vue.js App\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"hello\"},[_c('h1',[_vm._v(_vm._s(_vm.msg))]),_vm._m(0),_c('h3',[_vm._v(\"Installed CLI Plugins\")]),_vm._m(1),_c('h3',[_vm._v(\"Essential Links\")]),_vm._m(2),_c('h3',[_vm._v(\"Ecosystem\")]),_vm._m(3)])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('p',[_vm._v(\" For a guide and recipes on how to configure / customize this project,\"),_c('br'),_vm._v(\" check out the \"),_c('a',{attrs:{\"href\":\"https://cli.vuejs.org\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\"vue-cli documentation\")]),_vm._v(\". \")])\n},function (){var _vm=this,_c=_vm._self._c;return _c('ul',[_c('li',[_c('a',{attrs:{\"href\":\"https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\"babel\")])]),_c('li',[_c('a',{attrs:{\"href\":\"https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-router\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\"router\")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('ul',[_c('li',[_c('a',{attrs:{\"href\":\"https://vuejs.org\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\"Core Docs\")])]),_c('li',[_c('a',{attrs:{\"href\":\"https://forum.vuejs.org\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\"Forum\")])]),_c('li',[_c('a',{attrs:{\"href\":\"https://chat.vuejs.org\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\"Community Chat\")])]),_c('li',[_c('a',{attrs:{\"href\":\"https://twitter.com/vuejs\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\"Twitter\")])]),_c('li',[_c('a',{attrs:{\"href\":\"https://news.vuejs.org\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\"News\")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('ul',[_c('li',[_c('a',{attrs:{\"href\":\"https://router.vuejs.org\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\"vue-router\")])]),_c('li',[_c('a',{attrs:{\"href\":\"https://vuex.vuejs.org\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\"vuex\")])]),_c('li',[_c('a',{attrs:{\"href\":\"https://github.com/vuejs/vue-devtools#vue-devtools\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\"vue-devtools\")])]),_c('li',[_c('a',{attrs:{\"href\":\"https://vue-loader.vuejs.org\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\"vue-loader\")])]),_c('li',[_c('a',{attrs:{\"href\":\"https://github.com/vuejs/awesome-vue\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\"awesome-vue\")])])])\n}]\n\nexport { render, staticRenderFns }","<template>\n <div class=\"hello\">\n <h1>{{ msg }}</h1>\n <p>\n For a guide and recipes on how to configure / customize this project,<br>\n check out the\n <a href=\"https://cli.vuejs.org\" target=\"_blank\" rel=\"noopener\">vue-cli documentation</a>.\n </p>\n <h3>Installed CLI Plugins</h3>\n <ul>\n <li><a href=\"https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel\" target=\"_blank\" rel=\"noopener\">babel</a></li>\n <li><a href=\"https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-router\" target=\"_blank\" rel=\"noopener\">router</a></li>\n </ul>\n <h3>Essential Links</h3>\n <ul>\n <li><a href=\"https://vuejs.org\" target=\"_blank\" rel=\"noopener\">Core Docs</a></li>\n <li><a href=\"https://forum.vuejs.org\" target=\"_blank\" rel=\"noopener\">Forum</a></li>\n <li><a href=\"https://chat.vuejs.org\" target=\"_blank\" rel=\"noopener\">Community Chat</a></li>\n <li><a href=\"https://twitter.com/vuejs\" target=\"_blank\" rel=\"noopener\">Twitter</a></li>\n <li><a href=\"https://news.vuejs.org\" target=\"_blank\" rel=\"noopener\">News</a></li>\n </ul>\n <h3>Ecosystem</h3>\n <ul>\n <li><a href=\"https://router.vuejs.org\" target=\"_blank\" rel=\"noopener\">vue-router</a></li>\n <li><a href=\"https://vuex.vuejs.org\" target=\"_blank\" rel=\"noopener\">vuex</a></li>\n <li><a href=\"https://github.com/vuejs/vue-devtools#vue-devtools\" target=\"_blank\" rel=\"noopener\">vue-devtools</a></li>\n <li><a href=\"https://vue-loader.vuejs.org\" target=\"_blank\" rel=\"noopener\">vue-loader</a></li>\n <li><a href=\"https://github.com/vuejs/awesome-vue\" target=\"_blank\" rel=\"noopener\">awesome-vue</a></li>\n </ul>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'HelloWorld',\n props: {\n msg: String\n }\n}\n</script>\n\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\n<style scoped>\nh3 {\n margin: 40px 0 0;\n}\nul {\n list-style-type: none;\n padding: 0;\n}\nli {\n display: inline-block;\n margin: 0 10px;\n}\na {\n color: #42b983;\n}\n</style>\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HelloWorld.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HelloWorld.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./HelloWorld.vue?vue&type=template&id=ebbc34ee&scoped=true\"\nimport script from \"./HelloWorld.vue?vue&type=script&lang=js\"\nexport * from \"./HelloWorld.vue?vue&type=script&lang=js\"\nimport style0 from \"./HelloWorld.vue?vue&type=style&index=0&id=ebbc34ee&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"ebbc34ee\",\n null\n \n)\n\nexport default component.exports","<template>\n <div class=\"home\">\n <img alt=\"Vue logo\" src=\"../assets/logo.png\">\n <HelloWorld msg=\"Welcome to Your Vue.js App\"/>\n </div>\n</template>\n\n<script>\n// @ is an alias to /src\nimport HelloWorld from '@/components/HelloWorld.vue'\n\nexport default {\n name: 'HomeView',\n components: {\n HelloWorld\n }\n}\n</script>\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HomeView.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HomeView.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./HomeView.vue?vue&type=template&id=5eb1c3fc\"\nimport script from \"./HomeView.vue?vue&type=script&lang=js\"\nexport * from \"./HomeView.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\nimport VueRouter from 'vue-router'\nimport HomeView from '../views/HomeView.vue'\n\nVue.use(VueRouter)\n\nconst routes = [\n {\n path: '/',\n name: 'home',\n component: HomeView\n },\n {\n path: '/about',\n name: 'about',\n // route level code-splitting\n // this generates a separate chunk (about.[hash].js) for this route\n // which is lazy-loaded when the route is visited.\n component: () => import(/* webpackChunkName: \"about\" */ '../views/AboutView.vue')\n }\n]\n\nconst router = new VueRouter({\n mode: 'history',\n base: process.env.BASE_URL,\n routes\n})\n\nexport default router\n","import Vue from 'vue'\r\nimport App from './App.vue'\r\nimport router from './router'\r\nimport ElementUI from 'element-ui';\r\nimport 'element-ui/lib/theme-chalk/index.css';\r\n\r\nVue.config.productionTip = false\r\nVue.use(ElementUI);\r\n\r\nnew Vue({\r\n router,\r\n render: h => h(App)\r\n}).$mount('#app')\r\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdO = {};","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"js/\" + \"about\" + \".\" + \"437a5a7d\" + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"frontend:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t524: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkfrontend\"] = self[\"webpackChunkfrontend\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [504], function() { return __webpack_require__(3722); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["render","_vm","this","_c","_self","staticClass","attrs","ref","uploadUrl","handleFileChange","fileList","scopedSlots","_u","key","fn","_v","proxy","staticStyle","isUploading","on","uploadFile","progressPercentage","progressStatus","_e","isSuccess","showErrorMessage","_s","errorMessage","isDownloadAvailable","downloadFile","staticRenderFns","data","selectedFile","downloadUrl","downloadFileName","progressInterval","methods","file","raw","setInterval","clearInterval","formData","FormData","append","response","fetch","method","body","ok","blob","window","URL","createObjectURL","$message","success","errorText","text","error","console","link","document","createElement","href","download","appendChild","click","removeChild","component","require","msg","_m","name","props","String","components","HelloWorld","Vue","use","VueRouter","routes","path","HomeView","router","mode","base","process","config","productionTip","ElementUI","h","App","$mount","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","id","loaded","__webpack_modules__","call","m","amdO","deferred","O","result","chunkIds","priority","notFulfilled","Infinity","i","length","fulfilled","j","Object","keys","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","f","e","chunkId","Promise","all","reduce","promises","u","miniCssF","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","inProgress","dataWebpackPrefix","l","url","done","push","script","needAttach","scripts","getElementsByTagName","s","getAttribute","charset","timeout","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","forEach","setTimeout","bind","type","target","head","Symbol","toStringTag","value","nmd","paths","children","p","installedChunks","installedChunkData","promise","resolve","reject","Error","loadingEnded","errorType","realSrc","message","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file
(function(){"use strict";var e={6653:function(e,t,s){var r=s(5471),o=function(){var e=this,t=e._self._c;return t("div",{attrs:{id:"app"}},[t("router-view")],1)},n=[],i={data(){return{}},methods:{},mounted(){}},a=i,l=s(1656),u=(0,l.A)(a,o,n,!1,null,null,null),c=u.exports,d=s(173),g=function(){var e=this,t=e._self._c;return t("div",{staticClass:"upload-container"},[t("el-dialog",{attrs:{visible:e.loginDialogVisible,title:"登录"},on:{"update:visible":function(t){e.loginDialogVisible=t}}},[t("el-form",{on:{submit:function(t){return t.preventDefault(),e.handleLogin.apply(null,arguments)}}},[t("el-form-item",{attrs:{label:"用户名"}},[t("el-input",{model:{value:e.loginForm.username,callback:function(t){e.$set(e.loginForm,"username",t)},expression:"loginForm.username"}})],1),t("el-form-item",{attrs:{label:"密码"}},[t("el-input",{attrs:{type:"password"},model:{value:e.loginForm.password,callback:function(t){e.$set(e.loginForm,"password",t)},expression:"loginForm.password"}})],1),t("el-button",{attrs:{type:"primary","native-type":"submit"}},[e._v("登录")])],1)],1),e.isLoggedIn?t("el-upload",{ref:"uploadRef",attrs:{action:e.uploadUrl,"auto-upload":!1,"on-change":e.handleFileChange,"file-list":e.fileList,accept:".cc",multiple:!1},scopedSlots:e._u([{key:"trigger",fn:function(){return[t("el-button",{attrs:{size:"small",type:"primary"}},[e._v("选取文件")])]},proxy:!0}],null,!1,2040363866)},[t("el-button",{staticStyle:{"margin-left":"10px"},attrs:{size:"small",type:"success",disabled:e.isUploading},on:{click:e.uploadFile}},[e._v(" 上传并编译 ")])],1):e._e(),e.isLoggedIn&&e.isUploading?t("el-progress",{staticClass:"mt-4",attrs:{percentage:e.progressPercentage,status:e.progressStatus,"stroke-width":10,"show-info":!1}}):e._e(),e.isLoggedIn&&e.isSuccess?t("el-alert",{staticClass:"mt-4",attrs:{title:"编译成功!",type:"success","show-icon":""}}):e._e(),e.isLoggedIn&&e.showErrorMessage?t("el-alert",{staticClass:"mt-4",attrs:{title:"发布错误信息",type:"error",closable:!1}},[e._v(" "+e._s(e.errorMessage)+" ")]):e._e(),e.isLoggedIn&&e.isDownloadAvailable?t("el-button",{staticClass:"mt-4",attrs:{size:"small",type:"primary"},on:{click:e.downloadFile}},[e._v(" 下载标定程序 ")]):e._e()],1)},p=[],h=(s(4603),s(7566),s(8721),s(4335)),f={data(){return{loginDialogVisible:!0,loginForm:{username:"",password:""},isLoggedIn:!1,uploadUrl:"/upload",fileList:[],selectedFile:null,downloadUrl:null,downloadFileName:"radarcal",errorMessage:"",showErrorMessage:!1,isUploading:!1,progressPercentage:0,progressStatus:"",isSuccess:!1,isDownloadAvailable:!1,progressInterval:null}},methods:{handleLogin(){h.A.post("/login",this.loginForm).then((e=>{const t=e.data;localStorage.setItem("token",t),this.isLoggedIn=!0,this.loginDialogVisible=!1,this.$message.success("登录成功")})).catch((e=>{this.$message.error("登录失败,请检查用户名和密码")}))},handleFileChange(e){this.selectedFile=e.raw,this.fileList=[e]},async uploadFile(){if(this.selectedFile){this.errorMessage="",this.showErrorMessage=!1,this.isSuccess=!1,this.isUploading=!0,this.progressPercentage=0,this.progressStatus="",this.progressInterval=setInterval((()=>{this.progressPercentage<100?this.progressPercentage+=1:clearInterval(this.progressInterval)}),1200);try{const e=new FormData;e.append("file",this.selectedFile);const t=await fetch(this.uploadUrl,{method:"POST",headers:{Authorization:`Bearer ${localStorage.getItem("token")}`},body:e});if(clearInterval(this.progressInterval),t.ok){const e=await t.blob();this.downloadUrl=window.URL.createObjectURL(e),this.isDownloadAvailable=!0,this.isSuccess=!0,this.progressPercentage=100,this.progressStatus="success",this.$message.success("编译成功!")}else{const e=await t.text();this.errorMessage=e,this.showErrorMessage=!0,this.progressStatus="error",401===t.status&&(this.$message.error("登录已过期,请重新登录"),this.isLoggedIn=!1,this.loginDialogVisible=!0)}}catch(e){clearInterval(this.progressInterval),console.error("发生错误:",e),this.errorMessage="发生错误,请重试",this.showErrorMessage=!0,this.progressStatus="error",e.response&&401===e.response.status&&(this.$message.error("登录已过期,请重新登录"),this.isLoggedIn=!1,this.loginDialogVisible=!0)}finally{this.isUploading=!1}}else this.$message.error("请选择一个文件")},downloadFile(){if(this.downloadUrl){const e=document.createElement("a");e.href=this.downloadUrl,e.download=this.downloadFileName,document.body.appendChild(e),e.click(),document.body.removeChild(e)}}}},m=f,v=(0,l.A)(m,g,p,!1,null,"9955520a",null),b=v.exports;r["default"].use(d.Ay);const w=[{path:"/",name:"root",redirect:"/upload"},{path:"/upload",name:"upload",component:b}],y=new d.Ay({mode:"history",base:"/",routes:w});var F=y,I=s(1052),S=s.n(I),_=s(9952);r["default"].config.productionTip=!1,r["default"].use(S()),r["default"].use(S(),{locale:_["default"]}),new r["default"]({router:F,render:e=>e(c)}).$mount("#app")}},t={};function s(r){var o=t[r];if(void 0!==o)return o.exports;var n=t[r]={id:r,loaded:!1,exports:{}};return e[r].call(n.exports,n,n.exports,s),n.loaded=!0,n.exports}s.m=e,function(){s.amdO={}}(),function(){var e=[];s.O=function(t,r,o,n){if(!r){var i=1/0;for(c=0;c<e.length;c++){r=e[c][0],o=e[c][1],n=e[c][2];for(var a=!0,l=0;l<r.length;l++)(!1&n||i>=n)&&Object.keys(s.O).every((function(e){return s.O[e](r[l])}))?r.splice(l--,1):(a=!1,n<i&&(i=n));if(a){e.splice(c--,1);var u=o();void 0!==u&&(t=u)}}return t}n=n||0;for(var c=e.length;c>0&&e[c-1][2]>n;c--)e[c]=e[c-1];e[c]=[r,o,n]}}(),function(){s.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return s.d(t,{a:t}),t}}(),function(){s.d=function(e,t){for(var r in t)s.o(t,r)&&!s.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}}(),function(){s.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()}(),function(){s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}}(),function(){s.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}}(),function(){s.nmd=function(e){return e.paths=[],e.children||(e.children=[]),e}}(),function(){var e={524:0};s.O.j=function(t){return 0===e[t]};var t=function(t,r){var o,n,i=r[0],a=r[1],l=r[2],u=0;if(i.some((function(t){return 0!==e[t]}))){for(o in a)s.o(a,o)&&(s.m[o]=a[o]);if(l)var c=l(s)}for(t&&t(r);u<i.length;u++)n=i[u],s.o(e,n)&&e[n]&&e[n][0](),e[n]=0;return s.O(c)},r=self["webpackChunkfrontend"]=self["webpackChunkfrontend"]||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))}();var r=s.O(void 0,[504],(function(){return s(6653)}));r=s.O(r)})();
//# sourceMappingURL=app.cd3a0313.js.map
\ No newline at end of file
{"version":3,"file":"js/app.cd3a0313.js","mappings":"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","sources":["webpack://frontend/./src/App.vue","webpack://frontend/src/App.vue","webpack://frontend/./src/App.vue?c036","webpack://frontend/./src/App.vue?0e40","webpack://frontend/./src/views/UploadView.vue","webpack://frontend/src/views/UploadView.vue","webpack://frontend/./src/views/UploadView.vue?2744","webpack://frontend/./src/views/UploadView.vue?85a7","webpack://frontend/./src/router/index.js","webpack://frontend/./src/main.js","webpack://frontend/webpack/bootstrap","webpack://frontend/webpack/runtime/amd options","webpack://frontend/webpack/runtime/chunk loaded","webpack://frontend/webpack/runtime/compat get default export","webpack://frontend/webpack/runtime/define property getters","webpack://frontend/webpack/runtime/global","webpack://frontend/webpack/runtime/hasOwnProperty shorthand","webpack://frontend/webpack/runtime/make namespace object","webpack://frontend/webpack/runtime/node module decorator","webpack://frontend/webpack/runtime/jsonp chunk loading","webpack://frontend/webpack/startup"],"sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{attrs:{\"id\":\"app\"}},[_c('router-view')],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div id=\"app\">\n <router-view></router-view>\n </div>\n</template>\n\n<script>\nexport default {\n data() {\n return {};\n },\n methods: {},\n mounted() {}\n};\n</script>\n\n<style>\n#app {\n font-family: Avenir, Helvetica, Arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-align: center;\n color: #2c3e50;\n}\n</style>","import mod from \"-!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=471891ce\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\nimport style0 from \"./App.vue?vue&type=style&index=0&id=471891ce&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"upload-container\"},[_c('el-dialog',{attrs:{\"visible\":_vm.loginDialogVisible,\"title\":\"登录\"},on:{\"update:visible\":function($event){_vm.loginDialogVisible=$event}}},[_c('el-form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.handleLogin.apply(null, arguments)}}},[_c('el-form-item',{attrs:{\"label\":\"用户名\"}},[_c('el-input',{model:{value:(_vm.loginForm.username),callback:function ($$v) {_vm.$set(_vm.loginForm, \"username\", $$v)},expression:\"loginForm.username\"}})],1),_c('el-form-item',{attrs:{\"label\":\"密码\"}},[_c('el-input',{attrs:{\"type\":\"password\"},model:{value:(_vm.loginForm.password),callback:function ($$v) {_vm.$set(_vm.loginForm, \"password\", $$v)},expression:\"loginForm.password\"}})],1),_c('el-button',{attrs:{\"type\":\"primary\",\"native-type\":\"submit\"}},[_vm._v(\"登录\")])],1)],1),(_vm.isLoggedIn)?_c('el-upload',{ref:\"uploadRef\",attrs:{\"action\":_vm.uploadUrl,\"auto-upload\":false,\"on-change\":_vm.handleFileChange,\"file-list\":_vm.fileList,\"accept\":\".cc\",\"multiple\":false},scopedSlots:_vm._u([{key:\"trigger\",fn:function(){return [_c('el-button',{attrs:{\"size\":\"small\",\"type\":\"primary\"}},[_vm._v(\"选取文件\")])]},proxy:true}],null,false,2040363866)},[_c('el-button',{staticStyle:{\"margin-left\":\"10px\"},attrs:{\"size\":\"small\",\"type\":\"success\",\"disabled\":_vm.isUploading},on:{\"click\":_vm.uploadFile}},[_vm._v(\" 上传并编译 \")])],1):_vm._e(),(_vm.isLoggedIn && _vm.isUploading)?_c('el-progress',{staticClass:\"mt-4\",attrs:{\"percentage\":_vm.progressPercentage,\"status\":_vm.progressStatus,\"stroke-width\":10,\"show-info\":false}}):_vm._e(),(_vm.isLoggedIn && _vm.isSuccess)?_c('el-alert',{staticClass:\"mt-4\",attrs:{\"title\":\"编译成功!\",\"type\":\"success\",\"show-icon\":\"\"}}):_vm._e(),(_vm.isLoggedIn && _vm.showErrorMessage)?_c('el-alert',{staticClass:\"mt-4\",attrs:{\"title\":\"发布错误信息\",\"type\":\"error\",\"closable\":false}},[_vm._v(\" \"+_vm._s(_vm.errorMessage)+\" \")]):_vm._e(),(_vm.isLoggedIn && _vm.isDownloadAvailable)?_c('el-button',{staticClass:\"mt-4\",attrs:{\"size\":\"small\",\"type\":\"primary\"},on:{\"click\":_vm.downloadFile}},[_vm._v(\" 下载标定程序 \")]):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!-- src/components/Upload.vue -->\r\n<template>\r\n <div class=\"upload-container\">\r\n <!-- 登录窗口 -->\r\n <el-dialog :visible.sync=\"loginDialogVisible\" title=\"登录\">\r\n <el-form @submit.prevent=\"handleLogin\">\r\n <el-form-item label=\"用户名\">\r\n <el-input v-model=\"loginForm.username\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"密码\">\r\n <el-input type=\"password\" v-model=\"loginForm.password\"></el-input>\r\n </el-form-item>\r\n <el-button type=\"primary\" native-type=\"submit\">登录</el-button>\r\n </el-form>\r\n </el-dialog>\r\n\r\n <!-- 上传组件,登录成功后显示 -->\r\n <el-upload\r\n v-if=\"isLoggedIn\"\r\n ref=\"uploadRef\"\r\n :action=\"uploadUrl\"\r\n :auto-upload=\"false\"\r\n :on-change=\"handleFileChange\"\r\n :file-list=\"fileList\"\r\n accept=\".cc\"\r\n :multiple=\"false\"\r\n >\r\n <template #trigger>\r\n <el-button size=\"small\" type=\"primary\">选取文件</el-button>\r\n </template>\r\n <el-button\r\n style=\"margin-left: 10px;\"\r\n size=\"small\"\r\n type=\"success\"\r\n :disabled=\"isUploading\"\r\n @click=\"uploadFile\"\r\n >\r\n 上传并编译\r\n </el-button>\r\n </el-upload>\r\n\r\n <!-- 动态进度条 -->\r\n <el-progress\r\n v-if=\"isLoggedIn && isUploading\"\r\n :percentage=\"progressPercentage\"\r\n :status=\"progressStatus\"\r\n class=\"mt-4\"\r\n :stroke-width=\"10\"\r\n :show-info=\"false\"\r\n ></el-progress>\r\n\r\n <!-- 成功提示 -->\r\n <el-alert\r\n v-if=\"isLoggedIn && isSuccess\"\r\n title=\"编译成功!\"\r\n type=\"success\"\r\n show-icon\r\n class=\"mt-4\"\r\n ></el-alert>\r\n\r\n <!-- 错误信息栏 -->\r\n <el-alert\r\n v-if=\"isLoggedIn && showErrorMessage\"\r\n title=\"发布错误信息\"\r\n type=\"error\"\r\n :closable=\"false\"\r\n class=\"mt-4\"\r\n >\r\n {{ errorMessage }}\r\n </el-alert>\r\n\r\n <!-- 下载按钮 -->\r\n <el-button\r\n v-if=\"isLoggedIn && isDownloadAvailable\"\r\n size=\"small\"\r\n type=\"primary\"\r\n @click=\"downloadFile\"\r\n class=\"mt-4\"\r\n >\r\n 下载标定程序\r\n </el-button>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport axios from \"axios\";\r\n\r\nexport default {\r\n data() {\r\n return {\r\n loginDialogVisible: true, // 登录窗口初始显示\r\n loginForm: {\r\n username: \"\",\r\n password: \"\"\r\n },\r\n isLoggedIn: false, // 登录状态\r\n uploadUrl: \"/upload\",\r\n fileList: [],\r\n selectedFile: null,\r\n downloadUrl: null,\r\n downloadFileName: \"radarcal\",\r\n errorMessage: \"\",\r\n showErrorMessage: false, // 控制错误信息栏的显示\r\n isUploading: false, // 是否正在上传和编译\r\n progressPercentage: 0, // 进度条百分比\r\n progressStatus: \"\", // 进度条状态(success/error)\r\n isSuccess: false, // 是否编译成功\r\n isDownloadAvailable: false, // 是否显示下载按钮\r\n progressInterval: null // 用于存储进度条更新的定时器\r\n };\r\n },\r\n methods: {\r\n handleLogin() {\r\n axios\r\n .post(\"/login\", this.loginForm)\r\n .then(response => {\r\n const token = response.data;\r\n localStorage.setItem(\"token\", token); // 存储 Token\r\n this.isLoggedIn = true;\r\n this.loginDialogVisible = false; // 关闭登录窗口\r\n this.$message.success(\"登录成功\");\r\n })\r\n .catch(error => {\r\n this.$message.error(\"登录失败,请检查用户名和密码\");\r\n });\r\n },\r\n handleFileChange(file) {\r\n this.selectedFile = file.raw;\r\n this.fileList = [file];\r\n },\r\n async uploadFile() {\r\n if (!this.selectedFile) {\r\n this.$message.error(\"请选择一个文件\");\r\n return;\r\n }\r\n\r\n // 清空错误信息和成功提示\r\n this.errorMessage = \"\";\r\n this.showErrorMessage = false;\r\n this.isSuccess = false;\r\n\r\n // 开始上传和编译\r\n this.isUploading = true;\r\n this.progressPercentage = 0;\r\n this.progressStatus = \"\";\r\n\r\n // 设置进度条定时器,100 秒内均匀增长到 100%\r\n this.progressInterval = setInterval(() => {\r\n if (this.progressPercentage < 100) {\r\n this.progressPercentage += 1; // 每秒增加 1%\r\n } else {\r\n clearInterval(this.progressInterval); // 停止定时器\r\n }\r\n }, 1200); // 每1.2秒更新一次进度条\r\n\r\n try {\r\n const formData = new FormData();\r\n formData.append(\"file\", this.selectedFile);\r\n\r\n const response = await fetch(this.uploadUrl, {\r\n method: \"POST\",\r\n headers: {\r\n Authorization: `Bearer ${localStorage.getItem(\"token\")}` // 添加 Token 到请求头\r\n },\r\n body: formData\r\n });\r\n\r\n clearInterval(this.progressInterval); // 停止进度条定时器\r\n\r\n if (response.ok) {\r\n const blob = await response.blob();\r\n this.downloadUrl = window.URL.createObjectURL(blob);\r\n this.isDownloadAvailable = true; // 显示下载按钮\r\n this.isSuccess = true; // 标记编译成功\r\n this.progressPercentage = 100; // 进度条完成\r\n this.progressStatus = \"success\"; // 进度条状态为成功\r\n this.$message.success(\"编译成功!\"); // 提示编译成功\r\n } else {\r\n const errorText = await response.text();\r\n this.errorMessage = errorText;\r\n this.showErrorMessage = true; // 显示错误信息栏\r\n this.progressStatus = \"error\"; // 进度条状态为失败\r\n if (response.status === 401) {\r\n this.$message.error(\"登录已过期,请重新登录\");\r\n this.isLoggedIn = false;\r\n this.loginDialogVisible = true; // 显示登录窗口\r\n }\r\n }\r\n } catch (error) {\r\n clearInterval(this.progressInterval); // 停止进度条定时器\r\n console.error(\"发生错误:\", error);\r\n this.errorMessage = \"发生错误,请重试\";\r\n this.showErrorMessage = true; // 显示错误信息栏\r\n this.progressStatus = \"error\"; // 进度条状态为失败\r\n if (error.response && error.response.status === 401) {\r\n this.$message.error(\"登录已过期,请重新登录\");\r\n this.isLoggedIn = false;\r\n this.loginDialogVisible = true; // 显示登录窗口\r\n }\r\n } finally {\r\n this.isUploading = false; // 隐藏进度条\r\n }\r\n },\r\n downloadFile() {\r\n if (this.downloadUrl) {\r\n const link = document.createElement(\"a\");\r\n link.href = this.downloadUrl;\r\n link.download = this.downloadFileName;\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n }\r\n }\r\n }\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.upload-container {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n height: 100vh;\r\n}\r\n</style>","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./UploadView.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./UploadView.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./UploadView.vue?vue&type=template&id=9955520a&scoped=true\"\nimport script from \"./UploadView.vue?vue&type=script&lang=js\"\nexport * from \"./UploadView.vue?vue&type=script&lang=js\"\nimport style0 from \"./UploadView.vue?vue&type=style&index=0&id=9955520a&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"9955520a\",\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\nimport VueRouter from 'vue-router'\nimport UploadView from \"@/views/UploadView.vue\";\n\nVue.use(VueRouter)\n\nconst routes = [\n {\n path: '/',\n name: 'root',\n redirect: '/upload'\n },\n {\n path: '/upload',\n name: 'upload',\n component: UploadView\n },\n\n]\n\nconst router = new VueRouter({\n mode: 'history',\n base: process.env.BASE_URL,\n routes\n})\n\nexport default router\n","import Vue from 'vue'\r\nimport App from './App.vue'\r\nimport router from './router'\r\nimport ElementUI from 'element-ui';\r\nimport 'element-ui/lib/theme-chalk/index.css';\r\nimport locale from 'element-ui/lib/locale/lang/zh-CN';\r\n\r\n\r\nVue.config.productionTip = false\r\nVue.use(ElementUI);\r\nVue.use(ElementUI, { locale });\r\n\r\nnew Vue({\r\n router,\r\n render: h => h(App)\r\n}).$mount('#app')\r\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdO = {};","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t524: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkfrontend\"] = self[\"webpackChunkfrontend\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [504], function() { return __webpack_require__(6653); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["render","_vm","this","_c","_self","attrs","staticRenderFns","data","methods","mounted","component","staticClass","loginDialogVisible","on","$event","preventDefault","handleLogin","apply","arguments","model","value","loginForm","username","callback","$$v","$set","expression","password","_v","isLoggedIn","ref","uploadUrl","handleFileChange","fileList","scopedSlots","_u","key","fn","proxy","staticStyle","isUploading","uploadFile","_e","progressPercentage","progressStatus","isSuccess","showErrorMessage","_s","errorMessage","isDownloadAvailable","downloadFile","selectedFile","downloadUrl","downloadFileName","progressInterval","axios","post","then","response","token","localStorage","setItem","$message","success","catch","error","file","raw","setInterval","clearInterval","formData","FormData","append","fetch","method","headers","Authorization","getItem","body","ok","blob","window","URL","createObjectURL","errorText","text","status","console","link","document","createElement","href","download","appendChild","click","removeChild","Vue","use","VueRouter","routes","path","name","redirect","UploadView","router","mode","base","process","config","productionTip","ElementUI","locale","h","App","$mount","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","id","loaded","__webpack_modules__","call","m","amdO","deferred","O","result","chunkIds","priority","notFulfilled","Infinity","i","length","fulfilled","j","Object","keys","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","e","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","forEach","bind","push","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment