You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

7960 lines
385 KiB

/******/ (() => { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/App.vue?vue&type=style&index=0&id=2fa9d48e&lang=css":
/*!*************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/App.vue?vue&type=style&index=0&id=2fa9d48e&lang=css ***!
\*************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js");
/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
// Imports
var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
// Module
___CSS_LOADER_EXPORT___.push([module.id, `
/* 全局样式 */
#app {
font-family: 'Microsoft YaHei', 'PingFang SC', 'Hiragino Sans GB', 'WenQuanYi Micro Hei', Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
color: #2c3e50;
margin: 0;
padding: 0;
height: 100vh;
width: 100vw;
overflow: hidden;
}
/* 确保html和body元素也填满窗口 */
html,
body {
margin: 0;
padding: 0;
height: 100%;
width: 100%;
overflow: hidden;
/* 添加中文字体支持 */
font-family: 'Microsoft YaHei', 'PingFang SC', 'Hiragino Sans GB', 'WenQuanYi Micro Hei', Avenir, Helvetica, Arial, sans-serif;
}
/* 全局按钮样式 */
.btn {
padding: 8px 16px;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 14px;
display: inline-flex;
align-items: center;
gap: 6px;
transition: all 0.2s;
text-decoration: none;
}
.btn-primary {
background: #1976d2;
color: white;
}
.btn-primary:hover {
background: #1565c0;
}
.btn-secondary {
background: #757575;
color: white;
}
.btn-secondary:hover {
background: #616161;
}
.btn-danger {
background: #d32f2f;
color: white;
}
.btn-danger:hover {
background: #c62828;
}
.btn-info {
background: #0288d1;
color: white;
}
.btn-info:hover {
background: #0277bd;
}
/* 全局输入框样式 */
input, select, textarea {
font-family: inherit;
}
/* 全局滚动条样式 */
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
background: #f1f1f1;
border-radius: 4px;
}
::-webkit-scrollbar-thumb {
background: #c1c1c1;
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: #a8a8a8;
}
`, ""]);
// Exports
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
/***/ }),
/***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/LoginModal.vue?vue&type=style&index=0&id=443b36ca&scoped=true&lang=css":
/*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/LoginModal.vue?vue&type=style&index=0&id=443b36ca&scoped=true&lang=css ***!
\*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js");
/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
// Imports
var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
// Module
___CSS_LOADER_EXPORT___.push([module.id, `
.login-modal-overlay[data-v-443b36ca] {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.5);
display: flex;
align-items: center;
justify-content: center;
z-index: 1000;
backdrop-filter: blur(4px);
}
.login-modal[data-v-443b36ca] {
background: var(--bg-primary);
border-radius: 12px;
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
width: 90%;
max-width: 400px;
max-height: 90vh;
overflow: hidden;
animation: modalSlideIn-443b36ca 0.3s ease-out;
}
@keyframes modalSlideIn-443b36ca {
from {
opacity: 0;
transform: translateY(-20px) scale(0.95);
}
to {
opacity: 1;
transform: translateY(0) scale(1);
}
}
.login-modal-header[data-v-443b36ca] {
display: flex;
align-items: center;
justify-content: space-between;
padding: 20px 24px;
border-bottom: 1px solid var(--border-color);
background: var(--header-bg);
}
.login-modal-header h2[data-v-443b36ca] {
margin: 0;
font-size: 20px;
font-weight: 600;
color: var(--text-primary);
}
.close-btn[data-v-443b36ca] {
background: none;
border: none;
font-size: 24px;
color: var(--text-secondary);
cursor: pointer;
padding: 4px;
border-radius: 4px;
transition: all 0.2s;
}
.close-btn[data-v-443b36ca]:hover {
background: var(--bg-secondary);
color: var(--text-primary);
}
.login-modal-body[data-v-443b36ca] {
padding: 24px;
}
.login-form[data-v-443b36ca] {
display: flex;
flex-direction: column;
gap: 20px;
}
.form-group[data-v-443b36ca] {
display: flex;
flex-direction: column;
gap: 8px;
}
.form-group label[data-v-443b36ca] {
font-weight: 500;
color: var(--text-primary);
font-size: 14px;
}
.form-group input[data-v-443b36ca] {
padding: 12px 16px;
border: 2px solid var(--border-color);
border-radius: 8px;
font-size: 14px;
background: var(--bg-secondary);
color: var(--text-primary);
transition: all 0.2s;
}
.form-group input[data-v-443b36ca]:focus {
outline: none;
border-color: var(--primary-color);
box-shadow: 0 0 0 3px rgba(25, 118, 210, 0.1);
}
.form-group input[data-v-443b36ca]:disabled {
opacity: 0.6;
cursor: not-allowed;
}
.captcha-container[data-v-443b36ca] {
display: flex;
gap: 12px;
align-items: stretch;
}
.captcha-container input[data-v-443b36ca] {
flex: 1;
}
.captcha-image-container[data-v-443b36ca] {
width: 100px;
height: 44px;
border-radius: 8px;
overflow: hidden;
cursor: pointer;
border: 2px solid var(--border-color);
transition: all 0.2s;
}
.captcha-image-container[data-v-443b36ca]:hover {
border-color: var(--primary-color);
}
.captcha-image[data-v-443b36ca] {
width: 100%;
height: 100%;
-o-object-fit: cover;
object-fit: cover;
}
.captcha-placeholder[data-v-443b36ca] {
width: 100%;
height: 100%;
background: var(--bg-secondary);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
color: var(--text-secondary);
font-size: 12px;
text-align: center;
padding: 8px;
cursor: pointer;
transition: all 0.2s;
}
.captcha-placeholder[data-v-443b36ca]:hover {
background: var(--bg-tertiary);
color: var(--text-primary);
}
.captcha-hint[data-v-443b36ca] {
font-size: 10px;
opacity: 0.7;
margin-top: 2px;
}
.captcha-loading-spinner[data-v-443b36ca] {
width: 12px;
height: 12px;
border: 2px solid transparent;
border-top: 2px solid currentColor;
border-radius: 50%;
animation: spin-443b36ca 1s linear infinite;
margin-top: 4px;
}
.form-actions[data-v-443b36ca] {
margin-top: 8px;
}
.login-btn[data-v-443b36ca] {
width: 100%;
padding: 14px 24px;
background: var(--primary-color);
color: white;
border: none;
border-radius: 8px;
font-size: 16px;
font-weight: 600;
cursor: pointer;
transition: all 0.2s;
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
}
/* 深色主题下的登录按钮样式 */
.theme-dark .login-btn[data-v-443b36ca] {
background: var(--primary-color);
color: #333333;
border: 1px solid rgba(255, 255, 255, 0.1);
}
.theme-dark .login-btn[data-v-443b36ca]:hover:not(:disabled) {
background: var(--primary-hover);
color: #222222;
}
.login-btn[data-v-443b36ca]:hover:not(:disabled) {
background: var(--primary-hover);
transform: translateY(-1px);
box-shadow: 0 4px 12px rgba(25, 118, 210, 0.3);
}
.login-btn[data-v-443b36ca]:disabled {
opacity: 0.6;
cursor: not-allowed;
transform: none;
box-shadow: none;
}
/* 表单验证提示样式 */
.form-validation-hint[data-v-443b36ca] {
margin-top: 8px;
padding: 8px 12px;
background: var(--bg-secondary);
border: 1px solid var(--border-color);
border-radius: 6px;
font-size: 12px;
color: var(--text-secondary);
text-align: center;
}
.form-validation-hint span[data-v-443b36ca] {
display: block;
margin-bottom: 2px;
}
.form-validation-hint span[data-v-443b36ca]:last-child {
margin-bottom: 0;
}
.loading-spinner[data-v-443b36ca] {
width: 16px;
height: 16px;
border: 2px solid transparent;
border-top: 2px solid currentColor;
border-radius: 50%;
animation: spin-443b36ca 1s linear infinite;
}
@keyframes spin-443b36ca {
to {
transform: rotate(360deg);
}
}
.error-message[data-v-443b36ca] {
background: var(--error-bg);
color: var(--error-text);
padding: 12px 16px;
border-radius: 8px;
font-size: 14px;
text-align: center;
border: 1px solid var(--error-border);
}
/* 深色主题下的错误提示样式优化 */
.theme-dark .error-message[data-v-443b36ca] {
background: rgba(244, 67, 54, 0.2);
color: #ffab91;
border: 1px solid rgba(244, 67, 54, 0.5);
font-weight: 500;
}
.login-modal-footer[data-v-443b36ca] {
padding: 16px 24px;
border-top: 1px solid var(--border-color);
background: var(--bg-secondary);
}
.login-tips[data-v-443b36ca] {
margin: 0;
font-size: 12px;
color: var(--text-secondary);
text-align: center;
line-height: 1.5;
}
.login-tips span[data-v-443b36ca] {
display: block;
margin-bottom: 4px;
}
.login-tips span[data-v-443b36ca]:first-child {
font-weight: 600;
color: var(--text-primary);
}
/* 响应式设计 */
@media (max-width: 480px) {
.login-modal[data-v-443b36ca] {
width: 95%;
margin: 20px;
}
.login-modal-header[data-v-443b36ca],
.login-modal-body[data-v-443b36ca],
.login-modal-footer[data-v-443b36ca] {
padding: 16px 20px;
}
.captcha-container[data-v-443b36ca] {
flex-direction: column;
gap: 8px;
}
.captcha-image-container[data-v-443b36ca] {
width: 100%;
height: 40px;
}
}
`, ""]);
// Exports
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
/***/ }),
/***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/MainLayout.vue?vue&type=style&index=0&id=a4b9ee6e&scoped=true&lang=css":
/*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/MainLayout.vue?vue&type=style&index=0&id=a4b9ee6e&scoped=true&lang=css ***!
\*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js");
/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
// Imports
var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
// Module
___CSS_LOADER_EXPORT___.push([module.id, `
.main-layout[data-v-a4b9ee6e] {
height: calc(100vh - 24px); /* 减去状态条高度 */
display: flex;
flex-direction: column;
background: var(--bg-secondary);
/* 添加中文字体支持 */
font-family: 'Microsoft YaHei', 'PingFang SC', 'Hiragino Sans GB', 'WenQuanYi Micro Hei', Avenir, Helvetica, Arial, sans-serif;
/* 确保不会溢出 */
overflow: hidden;
}
/* 顶部导航栏 */
.header[data-v-a4b9ee6e] {
height: 60px;
background: var(--header-bg);
border-bottom: 1px solid var(--border-color);
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 20px;
box-shadow: 0 2px 4px var(--shadow-color);
z-index: 100;
}
.header-left[data-v-a4b9ee6e] {
display: flex;
align-items: center;
gap: 20px;
}
.logo h1[data-v-a4b9ee6e] {
margin: 0;
font-size: 24px;
color: var(--accent-color);
font-weight: bold;
}
.breadcrumb[data-v-a4b9ee6e] {
display: flex;
align-items: center;
gap: 8px;
color: var(--text-secondary);
font-size: 14px;
}
.breadcrumb-item[data-v-a4b9ee6e] {
color: var(--text-primary);
}
.separator[data-v-a4b9ee6e] {
color: var(--text-muted);
margin: 0 4px;
}
.header-right[data-v-a4b9ee6e] {
display: flex;
align-items: center;
gap: 20px;
}
/* 消息中心 */
.message-center[data-v-a4b9ee6e] {
position: relative;
}
.message-btn[data-v-a4b9ee6e] {
background: none;
border: none;
font-size: 16px; /* 从20px缩小到16px(缩小一半) */
cursor: pointer;
position: relative;
padding: 8px;
border-radius: 4px;
transition: background-color 0.2s;
}
.message-btn[data-v-a4b9ee6e]:hover {
background: #f5f5f5;
}
.badge[data-v-a4b9ee6e] {
position: absolute;
top: 0;
right: 0;
background: #f44336;
color: white;
border-radius: 50%;
width: 18px;
height: 18px;
font-size: 11px;
display: flex;
align-items: center;
justify-content: center;
}
.message-panel[data-v-a4b9ee6e] {
position: absolute;
top: 100%;
right: 0;
width: 350px;
background: var(--card-bg);
border-radius: 8px;
box-shadow: 0 4px 12px var(--shadow-color);
z-index: 1000;
margin-top: 8px;
border: 1px solid var(--border-color);
}
.message-header[data-v-a4b9ee6e] {
display: flex;
justify-content: space-between;
align-items: center;
padding: 16px;
border-bottom: 1px solid var(--border-color);
}
.message-header h3[data-v-a4b9ee6e] {
margin: 0;
font-size: 16px;
color: var(--text-primary);
}
.close-btn[data-v-a4b9ee6e] {
background: none;
border: none;
font-size: 20px;
cursor: pointer;
color: var(--text-muted);
}
.message-list[data-v-a4b9ee6e] {
max-height: 400px;
overflow-y: auto;
}
.message-item[data-v-a4b9ee6e] {
display: flex;
align-items: center;
padding: 12px 16px;
border-bottom: 1px solid var(--border-color);
transition: background-color 0.2s;
}
.message-item[data-v-a4b9ee6e]:hover {
background: var(--bg-secondary);
}
.message-icon[data-v-a4b9ee6e] {
font-size: 20px;
margin-right: 12px;
color: var(--text-primary);
}
.message-content[data-v-a4b9ee6e] {
flex: 1;
}
.message-title[data-v-a4b9ee6e] {
font-weight: 500;
margin-bottom: 4px;
color: var(--text-primary);
}
.message-time[data-v-a4b9ee6e] {
font-size: 12px;
color: var(--text-muted);
}
.mark-read-btn[data-v-a4b9ee6e] {
background: none;
border: none;
color: #4caf50;
cursor: pointer;
font-size: 16px;
padding: 4px;
border-radius: 4px;
transition: background-color 0.2s;
}
.mark-read-btn[data-v-a4b9ee6e]:hover {
background: var(--bg-secondary);
}
/* 用户信息 */
.user-info[data-v-a4b9ee6e] {
position: relative;
}
.user-avatar[data-v-a4b9ee6e] {
width: 40px;
height: 40px;
border-radius: 50%;
background: #1976d2;
color: white;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
font-weight: bold;
transition: background-color 0.2s;
}
.user-avatar[data-v-a4b9ee6e]:hover {
background: #1565c0;
}
.user-avatar img[data-v-a4b9ee6e] {
width: 100%;
height: 100%;
border-radius: 50%;
-o-object-fit: cover;
object-fit: cover;
}
.avatar-placeholder[data-v-a4b9ee6e] {
font-size: 18px;
}
.user-menu[data-v-a4b9ee6e] {
position: absolute;
top: 100%;
right: 0;
width: 250px;
background: var(--card-bg);
border-radius: 8px;
box-shadow: 0 4px 12px var(--shadow-color);
z-index: 1000;
margin-top: 8px;
}
.user-menu-header[data-v-a4b9ee6e] {
padding: 16px;
border-bottom: 1px solid var(--border-color);
}
.user-name[data-v-a4b9ee6e] {
font-weight: 600;
margin-bottom: 4px;
color: var(--text-primary);
}
.user-email[data-v-a4b9ee6e] {
font-size: 12px;
color: var(--text-secondary);
}
.user-menu-items[data-v-a4b9ee6e] {
padding: 8px 0;
}
.menu-item[data-v-a4b9ee6e] {
width: 100%;
background: none;
border: none;
padding: 12px 16px;
text-align: left;
cursor: pointer;
display: flex;
align-items: center;
gap: 12px;
transition: background-color 0.2s;
font-size: 13px; /* 从默认14px缩小到13px */
color: var(--text-primary);
}
.menu-item[data-v-a4b9ee6e]:hover {
background: var(--bg-secondary);
}
/* 主要内容区域 */
.main-content[data-v-a4b9ee6e] {
flex: 1;
display: flex;
overflow: hidden;
/* 高度由flex自动计算 */
}
/* 左侧菜单 */
.sidebar[data-v-a4b9ee6e] {
width: 250px;
background: var(--sidebar-bg);
border-right: 1px solid var(--border-color);
overflow-y: auto;
}
.sidebar-nav[data-v-a4b9ee6e] {
padding: 20px 0;
}
.nav-section[data-v-a4b9ee6e] {
margin-bottom: 20px; /* 从30px减少到20px,因为删除了标题 */
}
.nav-section[data-v-a4b9ee6e]:last-child {
margin-bottom: 0; /* 最后一个section不需要底部间距 */
}
.nav-title[data-v-a4b9ee6e] {
padding: 0 20px;
margin-bottom: 12px;
font-size: 12px;
font-weight: 600;
color: #999;
text-transform: none; /* 取消大写转换 */
letter-spacing: normal; /* 取消字母间距 */
}
.nav-list[data-v-a4b9ee6e] {
list-style: none;
padding: 0;
margin: 0;
}
.nav-item[data-v-a4b9ee6e] {
display: flex;
align-items: center;
padding: 10px 20px; /* 从12px减少到10px,因为字体变小了 */
color: var(--text-primary);
text-decoration: none;
transition: all 0.2s;
position: relative;
font-size: 13px;
}
.nav-item[data-v-a4b9ee6e]:hover {
background: var(--bg-secondary);
color: var(--accent-color);
}
.nav-item.active[data-v-a4b9ee6e] {
background: var(--bg-tertiary);
color: var(--accent-color);
border-right: 3px solid var(--accent-color);
}
.nav-icon[data-v-a4b9ee6e] {
font-size: 12px; /* 从18px缩小到12px(缩小三分之一) */
margin-right: 12px;
width: 16px; /* 从20px缩小到16px */
text-align: center;
}
.nav-text[data-v-a4b9ee6e] {
flex: 1;
}
.favorite-btn[data-v-a4b9ee6e] {
background: none;
border: none;
font-size: 12px; /* 从14px缩小到12px,与图标保持一致 */
cursor: pointer;
opacity: 0.3;
transition: opacity 0.2s;
padding: 2px; /* 添加内边距 */
}
.favorite-btn[data-v-a4b9ee6e]:hover,
.favorite-btn.active[data-v-a4b9ee6e] {
opacity: 1;
}
/* 右侧内容区域 */
.content-area[data-v-a4b9ee6e] {
flex: 1;
display: flex;
flex-direction: column;
overflow: hidden; /* 隐藏所有滚动条 */
/* 确保高度正确计算 */
height: 100%;
}
/* 内容选项卡 */
.content-tabs[data-v-a4b9ee6e] {
background: var(--tab-bg);
border-bottom: 1px solid var(--border-color);
padding: 0;
display: flex;
align-items: center;
justify-content: space-between;
height: 32px;
overflow-x: auto;
overflow-y: hidden; /* 确保垂直方向不滚动 */
}
.tab-list[data-v-a4b9ee6e] {
display: flex;
align-items: center;
flex: 1;
overflow-x: auto;
overflow-y: hidden; /* 确保垂直方向不滚动 */
height: 100%; /* 限制高度 */
}
.tab-item[data-v-a4b9ee6e] {
padding: 6px 16px;
background: transparent;
border: none;
border-right: 1px solid var(--border-color);
cursor: pointer;
font-size: 13px;
color: var(--text-secondary);
transition: all 0.2s;
white-space: nowrap;
display: flex;
align-items: center;
gap: 6px;
height: 100%; /* 确保高度填满容器 */
min-width: 120px;
justify-content: center;
position: relative;
box-sizing: border-box; /* 确保padding不会增加总高度 */
}
.tab-item[data-v-a4b9ee6e]:hover {
background: var(--bg-secondary);
color: var(--text-primary);
}
.tab-item.active[data-v-a4b9ee6e] {
background: var(--tab-active-bg);
color: var(--tab-active-text);
border-bottom: 2px solid var(--tab-active-bg);
font-weight: 500;
}
.tab-item .tab-close[data-v-a4b9ee6e] {
width: 16px;
height: 16px;
border: none;
background: transparent;
color: #6c757d;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
font-size: 12px;
font-weight: bold;
transition: all 0.2s;
margin-left: 4px;
border-radius: 0;
line-height: 1;
}
.tab-item .tab-close[data-v-a4b9ee6e]:hover {
color: #dc3545;
background: transparent;
transform: none;
}
/* 活动状态的选项卡关闭图标使用浅色 */
.tab-item.active .tab-close[data-v-a4b9ee6e] {
color: #ffffff;
}
.tab-item.active .tab-close[data-v-a4b9ee6e]:hover {
color: #ffcccc;
}
.tab-title[data-v-a4b9ee6e] {
flex: 1;
text-align: center;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.tab-close[data-v-a4b9ee6e] {
background: none;
border: none;
font-size: 16px;
cursor: pointer;
color: #999;
padding: 2px;
border-radius: 2px;
transition: all 0.2s;
}
.tab-close[data-v-a4b9ee6e]:hover {
background: #f0f0f0;
color: #666;
}
.tab-actions[data-v-a4b9ee6e] {
display: flex;
align-items: center;
justify-content: flex-end;
padding-right: 10px;
flex-shrink: 0;
height: 100%; /* 确保高度一致 */
}
.close-all-btn[data-v-a4b9ee6e] {
background: none;
border: none;
font-size: 16px;
cursor: pointer;
color: #999;
padding: 4px;
border-radius: 3px;
transition: all 0.2s;
display: flex;
align-items: center;
justify-content: center;
width: 24px;
height: 24px; /* 确保按钮高度合适 */
margin-left: 8px;
box-sizing: border-box; /* 确保padding不会增加总高度 */
}
.close-all-btn[data-v-a4b9ee6e]:hover {
background: #e9ecef;
color: #495057;
}
.close-all-icon[data-v-a4b9ee6e] {
font-size: 14px;
font-weight: bold;
line-height: 1;
}
/* 功能内容区 */
.content-body[data-v-a4b9ee6e] {
flex: 1;
overflow-y: auto; /* 只有内容区有垂直滚动条 */
overflow-x: hidden; /* 隐藏水平滚动条 */
background: var(--header-bg);
position: relative;
/* 高度由flex自动计算 */
}
/* 确保内容可以滚动 */
.content-body[data-v-a4b9ee6e] > * {
min-height: 100%;
/* 确保子元素不会创建额外的滚动条 */
overflow: visible;
}
/* 登录按钮样式 */
.login-section[data-v-a4b9ee6e] {
display: flex;
align-items: center;
}
.login-btn[data-v-a4b9ee6e] {
background: var(--primary-color);
color: white;
border: none;
padding: 8px 16px;
border-radius: 6px;
font-size: 14px;
font-weight: 500;
cursor: pointer;
transition: all 0.2s;
display: flex;
align-items: center;
gap: 6px;
}
/* 深色主题下的登录按钮样式 */
.theme-dark .login-btn[data-v-a4b9ee6e] {
background: var(--primary-color);
color: #333333;
border: 1px solid rgba(255, 255, 255, 0.1);
}
.theme-dark .login-btn[data-v-a4b9ee6e]:hover {
background: var(--primary-hover);
color: #222222;
}
.login-btn[data-v-a4b9ee6e]:hover {
background: var(--primary-hover);
transform: translateY(-1px);
box-shadow: 0 2px 8px rgba(25, 118, 210, 0.3);
}
.login-btn .icon[data-v-a4b9ee6e] {
font-size: 16px;
}
/* 响应式设计 */
@media (max-width: 768px) {
.sidebar[data-v-a4b9ee6e] {
width: 200px;
}
.header[data-v-a4b9ee6e] {
padding: 0 15px;
}
.logo h1[data-v-a4b9ee6e] {
font-size: 20px;
}
.breadcrumb[data-v-a4b9ee6e] {
display: none;
}
}
`, ""]);
// Exports
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
/***/ }),
/***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/StatusBar.vue?vue&type=style&index=0&id=126429ab&scoped=true&lang=css":
/*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/StatusBar.vue?vue&type=style&index=0&id=126429ab&scoped=true&lang=css ***!
\******************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js");
/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
// Imports
var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
// Module
___CSS_LOADER_EXPORT___.push([module.id, `
.status-bar[data-v-126429ab] {
position: fixed;
bottom: 0;
left: 0;
right: 0;
height: 24px;
background-color: #333;
color: #fff;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 10px;
font-size: 11px;
border-top: 1px solid #444;
z-index: 1000;
/* 添加中文字体支持 */
font-family: 'Microsoft YaHei', 'PingFang SC', 'Hiragino Sans GB', 'WenQuanYi Micro Hei', Avenir, Helvetica, Arial, sans-serif;
/* 添加响应式支持 */
min-width: 800px; /* 设置最小宽度 */
}
.status-left[data-v-126429ab] {
display: flex;
align-items: center;
}
.status-right[data-v-126429ab] {
display: flex;
align-items: center;
gap: 10px; /* 使用gap替代margin-right */
flex-wrap: nowrap; /* 防止换行 */
}
.status-item[data-v-126429ab] {
margin-right: 15px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: none; /* 移除最大宽度限制 */
flex-shrink: 0; /* 防止收缩 */
}
/* 为服务地址项添加特殊样式 */
.status-item[data-v-126429ab]:contains("服务地址") {
min-width: 120px; /* 设置最小宽度 */
max-width: 200px; /* 设置最大宽度 */
}
.status-item[data-v-126429ab]:last-child {
margin-right: 0;
}
/* 错误链接样式 */
.error-link[data-v-126429ab] {
cursor: pointer;
text-decoration: underline;
color: #ff6b6b;
transition: color 0.2s ease;
}
.error-link[data-v-126429ab]:hover {
color: #ff8e8e;
}
/* 响应式设计 */
@media (max-width: 1200px) {
.status-bar[data-v-126429ab] {
padding: 0 8px;
font-size: 10px;
}
.status-item[data-v-126429ab] {
margin-right: 10px;
}
.status-right[data-v-126429ab] {
gap: 8px;
}
}
@media (max-width: 1000px) {
.status-bar[data-v-126429ab] {
padding: 0 6px;
font-size: 9px;
}
.status-item[data-v-126429ab] {
margin-right: 8px;
}
.status-right[data-v-126429ab] {
gap: 6px;
}
}
`, ""]);
// Exports
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
/***/ }),
/***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/Toast.vue?vue&type=style&index=0&id=4eeeff11&scoped=true&lang=css":
/*!**************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/Toast.vue?vue&type=style&index=0&id=4eeeff11&scoped=true&lang=css ***!
\**************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js");
/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
// Imports
var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
// Module
___CSS_LOADER_EXPORT___.push([module.id, `
.toast[data-v-4eeeff11] {
position: fixed;
top: 20px;
right: 20px;
background: var(--bg-primary);
border: 1px solid var(--border-color);
border-radius: 8px;
padding: 16px;
min-width: 300px;
max-width: 400px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
z-index: 10000;
display: flex;
align-items: flex-start;
gap: 12px;
}
.toast.success[data-v-4eeeff11] {
border-left: 4px solid #4caf50;
}
.toast.error[data-v-4eeeff11] {
border-left: 4px solid #f44336;
}
.toast.warning[data-v-4eeeff11] {
border-left: 4px solid #ff9800;
}
.toast.info[data-v-4eeeff11] {
border-left: 4px solid #2196f3;
}
.toast-icon[data-v-4eeeff11] {
font-size: 20px;
flex-shrink: 0;
}
.toast-content[data-v-4eeeff11] {
flex: 1;
min-width: 0;
}
.toast-title[data-v-4eeeff11] {
font-weight: 600;
color: var(--text-primary);
margin-bottom: 4px;
font-size: 14px;
}
.toast-message[data-v-4eeeff11] {
color: var(--text-secondary);
font-size: 13px;
line-height: 1.4;
}
.toast-close[data-v-4eeeff11] {
background: none;
border: none;
color: var(--text-secondary);
font-size: 18px;
cursor: pointer;
padding: 2px;
border-radius: 4px;
transition: all 0.2s;
flex-shrink: 0;
}
.toast-close[data-v-4eeeff11]:hover {
background: var(--bg-secondary);
color: var(--text-primary);
}
/* 动画 */
.toast-enter-active[data-v-4eeeff11],
.toast-leave-active[data-v-4eeeff11] {
transition: all 0.3s ease;
}
.toast-enter-from[data-v-4eeeff11] {
opacity: 0;
transform: translateX(100%);
}
.toast-leave-to[data-v-4eeeff11] {
opacity: 0;
transform: translateX(100%);
}
/* 响应式 */
@media (max-width: 480px) {
.toast[data-v-4eeeff11] {
left: 20px;
right: 20px;
min-width: auto;
}
}
`, ""]);
// Exports
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
/***/ }),
/***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/History.vue?vue&type=style&index=0&id=5347d120&scoped=true&lang=css":
/*!***********************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/History.vue?vue&type=style&index=0&id=5347d120&scoped=true&lang=css ***!
\***********************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js");
/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
// Imports
var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
// Module
___CSS_LOADER_EXPORT___.push([module.id, `
.history-view[data-v-5347d120] {
padding: 20px;
max-width: 800px;
margin: 0 auto;
}
.empty-state[data-v-5347d120] {
text-align: center;
padding: 40px;
color: #888;
}
.history-list[data-v-5347d120] {
margin-top: 20px;
}
.history-item[data-v-5347d120] {
padding: 15px;
margin-bottom: 10px;
background-color: #f9f9f9;
border-radius: 4px;
display: flex;
justify-content: space-between;
align-items: center;
}
.history-date[data-v-5347d120] {
color: #666;
}
.history-stats[data-v-5347d120] {
display: flex;
gap: 15px;
}
.stat[data-v-5347d120] {
font-weight: bold;
}
.download[data-v-5347d120] {
color: #42b983;
}
.upload[data-v-5347d120] {
color: #3498db;
}
.ping[data-v-5347d120] {
color: #e74c3c;
}
`, ""]);
// Exports
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
/***/ }),
/***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/Home.vue?vue&type=style&index=0&id=ecd3befa&scoped=true&lang=css":
/*!********************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/Home.vue?vue&type=style&index=0&id=ecd3befa&scoped=true&lang=css ***!
\********************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js");
/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
// Imports
var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
// Module
___CSS_LOADER_EXPORT___.push([module.id, `
.home[data-v-ecd3befa] {
min-height: 100%;
background: var(--bg-primary);
color: var(--text-primary);
padding: 2rem;
overflow-y: auto;
height: 100%;
/* 添加中文字体支持 */
font-family: 'Microsoft YaHei', 'PingFang SC', 'Hiragino Sans GB', 'WenQuanYi Micro Hei', Avenir, Helvetica, Arial, sans-serif;
}
/* 深色主题时使用更暗的渐变背景 */
.theme-dark .home[data-v-ecd3befa] {
background: linear-gradient(135deg, #1f3a6b 0%, #2d4a8a 100%);
}
/* 浅色主题时的样式调整 */
.theme-light .home[data-v-ecd3befa] {
background: var(--bg-primary);
}
.theme-light .welcome-card[data-v-ecd3befa],
.theme-light .feature-card[data-v-ecd3befa],
.theme-light .todo-section[data-v-ecd3befa],
.theme-light .recent-section[data-v-ecd3befa] {
box-shadow: 0 4px 12px var(--shadow-color);
}
/* 主要内容区域 */
.main-content[data-v-ecd3befa] {
max-width: 1200px;
margin: 0 auto;
display: flex;
flex-direction: column;
gap: 2rem;
min-height: 100%;
}
/* 欢迎区域 */
.welcome-section[data-v-ecd3befa] {
text-align: center;
margin-bottom: 2rem;
}
.welcome-card[data-v-ecd3befa] {
background: var(--card-bg);
backdrop-filter: blur(10px);
border-radius: 20px;
padding: 3rem 2rem;
border: 1px solid var(--border-color);
}
.welcome-card h2[data-v-ecd3befa] {
font-size: 2.5rem;
margin-bottom: 1rem;
font-weight: 300;
}
.subtitle[data-v-ecd3befa] {
font-size: 1.2rem;
margin-bottom: 2rem;
opacity: 0.9;
}
.quick-stats[data-v-ecd3befa] {
display: flex;
justify-content: center;
gap: 3rem;
margin-top: 2rem;
}
.stat-item[data-v-ecd3befa] {
text-align: center;
}
.stat-number[data-v-ecd3befa] {
display: block;
font-size: 2rem;
font-weight: bold;
color: #ffd700;
}
.stat-label[data-v-ecd3befa] {
font-size: 0.9rem;
opacity: 0.8;
}
/* 功能卡片区域 */
.features-section[data-v-ecd3befa] {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 1.5rem;
margin-bottom: 2rem;
}
.feature-card[data-v-ecd3befa] {
background: var(--card-bg);
backdrop-filter: blur(10px);
border-radius: 15px;
padding: 2rem;
text-align: center;
cursor: pointer;
transition: all 0.3s ease;
border: 1px solid var(--border-color);
}
.feature-card[data-v-ecd3befa]:hover {
transform: translateY(-5px);
background: var(--bg-secondary);
box-shadow: 0 10px 30px var(--shadow-color);
}
.feature-icon[data-v-ecd3befa] {
font-size: 3rem;
margin-bottom: 1rem;
}
.feature-card h3[data-v-ecd3befa] {
font-size: 1.3rem;
margin-bottom: 0.5rem;
}
.feature-card p[data-v-ecd3befa] {
opacity: 0.8;
line-height: 1.5;
}
/* 待办事项区域 */
.todo-section[data-v-ecd3befa] {
background: var(--card-bg);
backdrop-filter: blur(10px);
border-radius: 15px;
padding: 2rem;
margin-bottom: 2rem;
border: 1px solid var(--border-color);
}
.section-header[data-v-ecd3befa] {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 1rem;
}
.section-header h3[data-v-ecd3befa] {
margin: 0;
}
.add-todo-btn[data-v-ecd3befa] {
background: var(--button-bg);
color: var(--button-text);
border: none;
padding: 0.5rem 1rem;
border-radius: 20px;
cursor: pointer;
transition: background 0.3s ease;
}
.add-todo-btn[data-v-ecd3befa]:hover {
background: var(--button-hover);
}
.todo-list[data-v-ecd3befa] {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.todo-item[data-v-ecd3befa] {
display: flex;
align-items: center;
gap: 1rem;
padding: 0.75rem;
background: var(--bg-secondary);
border-radius: 10px;
transition: all 0.3s ease;
}
.todo-item[data-v-ecd3befa]:hover {
background: var(--bg-tertiary);
}
.todo-item.completed .todo-text[data-v-ecd3befa] {
text-decoration: line-through;
opacity: 0.6;
}
.todo-text[data-v-ecd3befa] {
flex: 1;
}
.todo-date[data-v-ecd3befa] {
color: var(--text-secondary);
font-size: 0.9rem;
}
.delete-btn[data-v-ecd3befa] {
background: none;
border: none;
cursor: pointer;
font-size: 1rem;
opacity: 0.7;
transition: opacity 0.3s ease;
}
.delete-btn[data-v-ecd3befa]:hover {
opacity: 1;
}
/* 最近活动区域 */
.recent-section[data-v-ecd3befa] {
background: var(--card-bg);
backdrop-filter: blur(10px);
border-radius: 15px;
padding: 2rem;
border: 1px solid var(--border-color);
}
.recent-section h3[data-v-ecd3befa] {
margin-bottom: 1.5rem;
}
.activity-list[data-v-ecd3befa] {
display: flex;
flex-direction: column;
gap: 1rem;
}
.activity-item[data-v-ecd3befa] {
display: flex;
align-items: center;
gap: 1rem;
padding: 0.75rem;
background: var(--bg-secondary);
border-radius: 10px;
}
.activity-icon[data-v-ecd3befa] {
font-size: 1.5rem;
}
.activity-content[data-v-ecd3befa] {
flex: 1;
}
.activity-title[data-v-ecd3befa] {
font-weight: 500;
}
.activity-time[data-v-ecd3befa] {
color: var(--text-secondary);
font-size: 0.9rem;
}
/* 响应式设计 */
@media (max-width: 768px) {
.home[data-v-ecd3befa] {
padding: 1rem;
}
.main-content[data-v-ecd3befa] {
gap: 1.5rem;
}
.welcome-card[data-v-ecd3befa] {
padding: 2rem 1rem;
}
.welcome-card h2[data-v-ecd3befa] {
font-size: 2rem;
}
.quick-stats[data-v-ecd3befa] {
flex-direction: column;
gap: 1rem;
}
.features-section[data-v-ecd3befa] {
grid-template-columns: 1fr;
}
.todo-section[data-v-ecd3befa],
.recent-section[data-v-ecd3befa] {
padding: 1.5rem;
}
}
/* 欢迎页面登录相关样式 */
.welcome-header[data-v-ecd3befa] {
display: flex;
justify-content: space-between;
align-items: center;
gap: 2rem;
}
.welcome-text[data-v-ecd3befa] {
flex: 1;
}
.login-section[data-v-ecd3befa] {
flex-shrink: 0;
}
.login-btn[data-v-ecd3befa] {
background: var(--accent-color);
color: white;
border: none;
padding: 1rem 2rem;
border-radius: 25px;
font-size: 1.1rem;
font-weight: 500;
cursor: pointer;
transition: all 0.3s ease;
display: flex;
align-items: center;
gap: 0.5rem;
}
.login-btn[data-v-ecd3befa]:hover {
background: var(--accent-hover);
transform: translateY(-2px);
box-shadow: 0 8px 25px var(--shadow-color);
}
.login-prompt-section[data-v-ecd3befa] {
text-align: center;
margin-bottom: 2rem;
}
.login-prompt-card[data-v-ecd3befa] {
background: var(--card-bg);
backdrop-filter: blur(10px);
border-radius: 20px;
padding: 3rem 2rem;
border: 1px solid var(--border-color);
max-width: 500px;
margin: 0 auto;
}
.prompt-icon[data-v-ecd3befa] {
font-size: 4rem;
margin-bottom: 1rem;
opacity: 0.8;
}
.login-prompt-card h3[data-v-ecd3befa] {
font-size: 1.5rem;
margin-bottom: 1rem;
color: var(--text-primary);
}
.login-prompt-card p[data-v-ecd3befa] {
font-size: 1.1rem;
margin-bottom: 2rem;
opacity: 0.8;
color: var(--text-secondary);
}
.prompt-login-btn[data-v-ecd3befa] {
background: var(--accent-color);
color: white;
border: none;
padding: 1rem 2rem;
border-radius: 25px;
font-size: 1.1rem;
font-weight: 500;
cursor: pointer;
transition: all 0.3s ease;
display: flex;
align-items: center;
gap: 0.5rem;
margin: 0 auto;
}
.prompt-login-btn[data-v-ecd3befa]:hover {
background: var(--accent-hover);
transform: translateY(-2px);
box-shadow: 0 8px 25px var(--shadow-color);
}
/* 深色主题下登录按钮的字体颜色 */
.theme-dark .login-btn[data-v-ecd3befa],
.theme-dark .prompt-login-btn[data-v-ecd3befa] {
color: #000000 !important;
}
`, ""]);
// Exports
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
/***/ }),
/***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/UserManagement.vue?vue&type=style&index=0&id=7338cb92&scoped=true&lang=css":
/*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/UserManagement.vue?vue&type=style&index=0&id=7338cb92&scoped=true&lang=css ***!
\******************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js");
/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
// Imports
var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
// Module
___CSS_LOADER_EXPORT___.push([module.id, `
.user-management[data-v-7338cb92] {
padding: 20px;
height: 100%;
overflow-y: auto;
}
.page-header[data-v-7338cb92] {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.page-header h2[data-v-7338cb92] {
margin: 0;
color: var(--text-primary);
}
.search-bar[data-v-7338cb92] {
display: flex;
gap: 20px;
margin-bottom: 20px;
align-items: center;
}
.search-input[data-v-7338cb92] {
position: relative;
flex: 1;
}
.search-input i[data-v-7338cb92] {
position: absolute;
left: 12px;
top: 50%;
transform: translateY(-50%);
color: var(--text-muted);
}
.search-input input[data-v-7338cb92] {
width: 100%;
padding: 10px 10px 10px 35px;
border: 1px solid var(--input-border);
border-radius: 6px;
font-size: 14px;
background-color: var(--input-bg);
color: var(--input-text);
}
.filters[data-v-7338cb92] {
display: flex;
gap: 10px;
}
.filters select[data-v-7338cb92] {
padding: 8px 12px;
border: 1px solid var(--input-border);
border-radius: 4px;
font-size: 14px;
background-color: var(--input-bg);
color: var(--input-text);
}
.user-table[data-v-7338cb92] {
background: var(--card-bg);
border-radius: 8px;
box-shadow: 0 2px 8px var(--shadow-color);
overflow: hidden;
margin-bottom: 20px;
}
table[data-v-7338cb92] {
width: 100%;
border-collapse: collapse;
}
th[data-v-7338cb92], td[data-v-7338cb92] {
padding: 12px;
text-align: left;
border-bottom: 1px solid var(--border-color);
}
th[data-v-7338cb92] {
background: var(--bg-secondary);
font-weight: 600;
color: var(--text-primary);
}
.status-badge[data-v-7338cb92] {
padding: 4px 8px;
border-radius: 12px;
font-size: 12px;
font-weight: 500;
}
.status-badge.active[data-v-7338cb92] {
background: #e8f5e8;
color: #2e7d32;
}
.status-badge.inactive[data-v-7338cb92] {
background: #ffebee;
color: #c62828;
}
.role-tags[data-v-7338cb92] {
display: flex;
gap: 4px;
flex-wrap: wrap;
}
.role-tag[data-v-7338cb92] {
background: #e3f2fd;
color: #1976d2;
padding: 2px 6px;
border-radius: 4px;
font-size: 11px;
}
.actions[data-v-7338cb92] {
display: flex;
gap: 8px;
}
.btn[data-v-7338cb92] {
padding: 8px 16px;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 14px;
display: inline-flex;
align-items: center;
gap: 6px;
transition: all 0.2s;
}
.btn-primary[data-v-7338cb92] {
background: #1976d2;
color: white;
}
.btn-primary[data-v-7338cb92]:hover {
background: #1565c0;
}
.btn-info[data-v-7338cb92] {
background: #0288d1;
color: white;
}
.btn-danger[data-v-7338cb92] {
background: #d32f2f;
color: white;
}
.btn-secondary[data-v-7338cb92] {
background: #757575;
color: white;
}
.btn-sm[data-v-7338cb92] {
padding: 6px 12px;
font-size: 12px;
}
.btn[data-v-7338cb92]:hover {
opacity: 0.9;
}
.btn[data-v-7338cb92]:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.pagination[data-v-7338cb92] {
display: flex;
justify-content: center;
align-items: center;
gap: 20px;
}
.page-info[data-v-7338cb92] {
color: #666;
font-size: 14px;
}
.modal-overlay[data-v-7338cb92] {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0,0,0,0.5);
display: flex;
align-items: center;
justify-content: center;
z-index: 1000;
}
.modal[data-v-7338cb92] {
background: white;
border-radius: 8px;
width: 90%;
max-width: 500px;
max-height: 90vh;
overflow-y: auto;
}
.modal-header[data-v-7338cb92] {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20px;
border-bottom: 1px solid #eee;
}
.modal-header h3[data-v-7338cb92] {
margin: 0;
}
.close-btn[data-v-7338cb92] {
background: none;
border: none;
font-size: 24px;
cursor: pointer;
color: #999;
}
.modal-body[data-v-7338cb92] {
padding: 20px;
}
.form-group[data-v-7338cb92] {
margin-bottom: 20px;
}
.form-group label[data-v-7338cb92] {
display: block;
margin-bottom: 8px;
font-weight: 500;
color: #333;
}
.form-group input[data-v-7338cb92],
.form-group select[data-v-7338cb92] {
width: 100%;
padding: 10px;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 14px;
}
.role-checkboxes[data-v-7338cb92] {
display: flex;
flex-direction: column;
gap: 8px;
}
.checkbox-item[data-v-7338cb92] {
display: flex;
align-items: center;
gap: 8px;
cursor: pointer;
}
.checkbox-item input[type="checkbox"][data-v-7338cb92] {
width: auto;
}
.form-actions[data-v-7338cb92] {
display: flex;
gap: 12px;
justify-content: flex-end;
margin-top: 30px;
}
.icon[data-v-7338cb92] {
font-size: 14px;
}
`, ""]);
// Exports
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
/***/ }),
/***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-14.use[1]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-14.use[2]!./src/renderer/assets/fonts.css":
/*!*************************************************************************************************************************************************************************!*\
!*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-14.use[1]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-14.use[2]!./src/renderer/assets/fonts.css ***!
\*************************************************************************************************************************************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js");
/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
// Imports
var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
// Module
___CSS_LOADER_EXPORT___.push([module.id, `/* 中文字体配置文件 */
/* 定义字体族变量 */
:root {
--font-family-chinese: 'Microsoft YaHei', 'PingFang SC', 'Hiragino Sans GB', 'WenQuanYi Micro Hei', 'SimHei', 'SimSun', Avenir, Helvetica, Arial, sans-serif;
--font-family-english: 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
}
/* 全局字体设置 */
* {
font-family: var(--font-family-chinese), var(--font-family-english);
}
/* 确保所有文本元素都使用中文字体 */
body, html, #app {
font-family: var(--font-family-chinese), var(--font-family-english);
}
/* 特定组件的字体设置 */
.main-layout,
.status-bar,
.home,
.user-management,
.settings {
font-family: var(--font-family-chinese), var(--font-family-english);
}
/* 标题和重要文本的字体设置 */
h1, h2, h3, h4, h5, h6 {
font-family: var(--font-family-chinese), var(--font-family-english);
font-weight: 500;
}
/* 按钮和输入框的字体设置 */
button, input, select, textarea {
font-family: var(--font-family-chinese), var(--font-family-english);
}
/* 表格内容的字体设置 */
table, th, td {
font-family: var(--font-family-chinese), var(--font-family-english);
}
/* 状态栏文本的字体设置 */
.status-item {
font-family: var(--font-family-chinese), var(--font-family-english);
}
/* 响应式字体大小 */
@media (max-width: 768px) {
:root {
--font-size-base: 14px;
--font-size-small: 12px;
}
}
@media (min-width: 769px) {
:root {
--font-size-base: 16px;
--font-size-small: 14px;
}
}
`, ""]);
// Exports
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
/***/ }),
/***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-14.use[1]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-14.use[2]!./src/renderer/assets/themes.css":
/*!**************************************************************************************************************************************************************************!*\
!*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-14.use[1]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-14.use[2]!./src/renderer/assets/themes.css ***!
\**************************************************************************************************************************************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js");
/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
// Imports
var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
// Module
___CSS_LOADER_EXPORT___.push([module.id, `/* 全局主题样式 */
/* 浅色主题(默认) */
:root {
--bg-primary: #ffffff;
--bg-secondary: #f5f5f5;
--bg-tertiary: #e0e0e0;
--text-primary: #333333;
--text-secondary: #666666;
--text-muted: #999999;
--border-color: #e0e0e0;
--accent-color: #1976d2;
--accent-hover: #1565c0;
--primary-color: #1976d2;
--primary-hover: #1565c0;
--success-color: #4caf50;
--warning-color: #ff9800;
--error-color: #f44336;
--shadow-color: rgba(0, 0, 0, 0.1);
--card-bg: #ffffff;
--input-bg: #ffffff;
--input-border: #ddd;
--input-text: #333333;
--button-bg: #1976d2;
--button-text: #ffffff;
--button-hover: #1565c0;
--sidebar-bg: #ffffff;
--header-bg: #ffffff;
--tab-bg: #f8f9fa;
--tab-active-bg: #007bff;
--tab-active-text: #ffffff;
--error-bg: #ffebee;
--error-text: #c62828;
--error-border: #ffcdd2;
}
/* 深色主题 */
.theme-dark {
--bg-primary: #2d4a8a;
--bg-secondary: #1f3a6b;
--bg-tertiary: #1a2a4a;
--text-primary: #ffffff;
--text-secondary: #e0e0e0;
--text-muted: #b0b0b0;
--border-color: rgba(255, 255, 255, 0.2);
--accent-color: #ffffff;
--accent-hover: #e0e0e0;
--primary-color: #ffffff;
--primary-hover: #e0e0e0;
--success-color: #4caf50;
--warning-color: #ff9800;
--error-color: #f44336;
--shadow-color: rgba(0, 0, 0, 0.2);
--card-bg: rgba(255, 255, 255, 0.08);
--input-bg: #1a2a4a;
--input-border: rgba(255, 255, 255, 0.2);
--input-text: #ffffff;
--button-bg: #2d4a8a;
--button-text: #ffffff;
--button-hover: #1f3a6b;
--sidebar-bg: #1a2a4a;
--header-bg: #1f3a6b;
--tab-bg: #1a2a4a;
--tab-active-bg: #2d4a8a;
--tab-active-text: #ffffff;
--error-bg: rgba(244, 67, 54, 0.15);
--error-text: #ff8a80;
--error-border: rgba(244, 67, 54, 0.4);
}
/* 主题切换过渡动画 */
* {
transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease, box-shadow 0.3s ease;
}
/* 全局背景和文字颜色 */
body {
background-color: var(--bg-primary);
color: var(--text-primary);
}
/* 卡片样式 */
.card, .settings-section, .feature-card, .todo-section, .recent-section {
background-color: var(--card-bg);
border: 1px solid var(--border-color);
box-shadow: 0 2px 8px var(--shadow-color);
}
/* 输入框样式 */
input, select, textarea {
background-color: var(--input-bg);
border: 1px solid var(--input-border);
color: var(--input-text);
}
input:focus, select:focus, textarea:focus {
border-color: var(--accent-color);
box-shadow: 0 0 0 2px rgba(74, 158, 255, 0.2);
}
/* 按钮样式 */
.btn, button {
background-color: var(--button-bg);
color: var(--button-text);
border: 1px solid var(--button-bg);
}
.btn:hover, button:hover {
background-color: var(--button-hover);
}
/* 深色主题下的按钮特殊样式 */
.theme-dark .btn, .theme-dark button {
border-color: var(--border-color);
}
/* 深色主题下的消息样式 */
.theme-dark .message-title {
color: var(--text-primary) !important;
}
.theme-dark .message-icon {
color: var(--text-primary) !important;
}
.theme-dark .message-content {
color: var(--text-primary);
}
/* 链接样式 */
a {
color: var(--accent-color);
}
a:hover {
color: var(--button-hover);
}
/* 表格样式 */
table {
background-color: var(--card-bg);
color: var(--text-primary);
}
th, td {
border-color: var(--border-color);
}
/* 滚动条样式 */
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
background: var(--bg-secondary);
}
::-webkit-scrollbar-thumb {
background: var(--border-color);
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: var(--text-muted);
}
/* 选择框样式 */
select {
background-color: var(--input-bg);
color: var(--input-text);
border: 1px solid var(--input-border);
}
/* 深色主题下的选择框选项样式 */
.theme-dark select option {
background-color: #1a2a4a !important;
color: #ffffff !important;
}
.theme-dark select option:hover {
background-color: #2d4a8a !important;
color: #ffffff !important;
}
/* 确保选择框本身在深色主题下有正确的样式 */
.theme-dark select {
background-color: #1a2a4a !important;
color: #ffffff !important;
border-color: rgba(255, 255, 255, 0.3) !important;
}
/* 复选框和单选框样式 */
input[type="checkbox"], input[type="radio"] {
accent-color: var(--accent-color);
}
/* 占位符文本样式 */
::-moz-placeholder {
color: var(--text-muted);
opacity: 1;
}
::placeholder {
color: var(--text-muted);
opacity: 1;
}
/* 代码块样式 */
code, pre {
background-color: var(--bg-secondary);
color: var(--text-primary);
border: 1px solid var(--border-color);
}
/* 引用样式 */
blockquote {
border-left: 4px solid var(--accent-color);
background-color: var(--bg-secondary);
color: var(--text-secondary);
}
/* 分割线样式 */
hr {
border-color: var(--border-color);
}
/* 工具提示样式 */
[title]:hover::after {
background-color: var(--bg-secondary);
color: var(--text-primary);
border: 1px solid var(--border-color);
}
`, ""]);
// Exports
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
/***/ }),
/***/ "./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/App.vue?vue&type=script&lang=js":
/*!*****************************************************************************************************************!*\
!*** ./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/App.vue?vue&type=script&lang=js ***!
\*****************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _components_StatusBar_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./components/StatusBar.vue */ "./src/renderer/components/StatusBar.vue");
/* harmony import */ var _assets_fonts_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./assets/fonts.css */ "./src/renderer/assets/fonts.css");
/* harmony import */ var _assets_fonts_css__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_assets_fonts_css__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _assets_themes_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./assets/themes.css */ "./src/renderer/assets/themes.css");
/* harmony import */ var _assets_themes_css__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_assets_themes_css__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _utils_themeManager_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/themeManager.js */ "./src/renderer/utils/themeManager.js");
// 引入主题配置文件
// 引入主题管理器
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
name: 'App',
components: {
StatusBar: _components_StatusBar_vue__WEBPACK_IMPORTED_MODULE_0__["default"]
},
mounted() {
// 确保主题管理器在应用启动时初始化
if (_utils_themeManager_js__WEBPACK_IMPORTED_MODULE_3__["default"]) {
console.log('主题管理器已初始化')
}
},
mounted() {
// 请求初始状态
window.electronAPI?.sendStatusRequest();
}
});
/***/ }),
/***/ "./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/LoginModal.vue?vue&type=script&lang=js":
/*!***********************************************************************************************************************************!*\
!*** ./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/LoginModal.vue?vue&type=script&lang=js ***!
\***********************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _services_userService__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../services/userService */ "./src/renderer/services/userService.js");
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
name: 'LoginModal',
props: {
visible: {
type: Boolean,
default: false
}
},
data() {
return {
loading: false,
captchaLoading: false,
errorMessage: '',
captchaImage: '',
captchaId: '',
loginForm: {
username: '',
password: '',
captcha: ''
}
}
},
computed: {
isFormValid() {
return this.loginForm.username.trim() &&
this.loginForm.password.trim() &&
this.loginForm.captcha.trim() &&
this.captchaImage // 确保验证码图片已加载
}
},
watch: {
visible(newVal) {
if (newVal) {
this.resetForm()
this.refreshCaptcha()
}
}
},
methods: {
async handleLogin() {
if (!this.isFormValid) {
this.errorMessage = '请填写完整的登录信息'
return
}
this.loading = true
this.errorMessage = ''
try {
// 调用登录接口
const response = await _services_userService__WEBPACK_IMPORTED_MODULE_0__.userService.login({
username: this.loginForm.username,
password: this.loginForm.password,
captcha: this.loginForm.captcha,
captchaId: this.captchaId
})
// 登录成功
this.$emit('login-success', response)
this.closeModal()
// 显示成功提示
this.$emit('show-message', {
type: 'success',
title: '登录成功',
content: `欢迎回来,${response.user?.username || '用户'}`
})
} catch (error) {
this.errorMessage = error.message || '登录失败,请重试'
// 登录失败时刷新验证码
this.refreshCaptcha()
} finally {
this.loading = false
}
},
async refreshCaptcha() {
try {
this.captchaLoading = true
this.errorMessage = ''
// 调用获取验证码接口
const response = await _services_userService__WEBPACK_IMPORTED_MODULE_0__.userService.getCaptcha()
this.captchaImage = response.captchaImage
this.captchaId = response.captchaID
this.loginForm.captcha = ''
console.log('验证码获取成功:', response)
} catch (error) {
console.error('获取验证码失败:', error)
this.errorMessage = '获取验证码失败,请重试'
this.captchaImage = ''
this.captchaId = ''
} finally {
this.captchaLoading = false
}
},
resetForm() {
this.loginForm = {
username: '',
password: '',
captcha: ''
}
this.errorMessage = ''
this.captchaImage = ''
this.captchaId = ''
},
closeModal() {
this.$emit('update:visible', false)
this.resetForm()
},
handleOverlayClick() {
this.closeModal()
}
}
});
/***/ }),
/***/ "./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/MainLayout.vue?vue&type=script&lang=js":
/*!***********************************************************************************************************************************!*\
!*** ./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/MainLayout.vue?vue&type=script&lang=js ***!
\***********************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm-bundler.js");
/* harmony import */ var vue_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-router */ "./node_modules/vue-router/dist/vue-router.mjs");
/* harmony import */ var _services_userService__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/services/userService */ "./src/renderer/services/userService.js");
/* harmony import */ var _utils_themeManager_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/themeManager.js */ "./src/renderer/utils/themeManager.js");
/* harmony import */ var _LoginModal_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./LoginModal.vue */ "./src/renderer/components/LoginModal.vue");
/* harmony import */ var _Toast_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Toast.vue */ "./src/renderer/components/Toast.vue");
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
name: 'MainLayout',
components: {
LoginModal: _LoginModal_vue__WEBPACK_IMPORTED_MODULE_4__["default"],
Toast: _Toast_vue__WEBPACK_IMPORTED_MODULE_5__["default"]
},
provide() {
return {
isLoggedIn: this.isLoggedIn,
currentUser: this.currentUser,
showLoginModal: this.showLoginModal
}
},
setup() {
const router = (0,vue_router__WEBPACK_IMPORTED_MODULE_1__.useRouter)()
const route = (0,vue_router__WEBPACK_IMPORTED_MODULE_1__.useRoute)()
// 响应式数据
const showMessagePanel = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)(false)
const showUserMenu = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)(false)
const showLoginModalFlag = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)(false)
const showToast = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)(false)
const currentTab = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)('home')
const openTabs = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)([
{ id: 'home', title: '欢迎', path: '/', closable: false }
])
const currentUser = (0,vue__WEBPACK_IMPORTED_MODULE_0__.reactive)({
name: '',
email: '',
avatar: null
})
// 登录状态
const isLoggedIn = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)(false)
// 应用设置
const appSettings = (0,vue__WEBPACK_IMPORTED_MODULE_0__.reactive)({
appName: 'GoFaster'
})
// Toast 配置
const toastConfig = (0,vue__WEBPACK_IMPORTED_MODULE_0__.reactive)({
type: 'info',
title: '',
content: '',
duration: 3000
})
const messages = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)([
{
id: 1,
title: '系统更新完成',
icon: '🔄',
time: new Date(Date.now() - 1000 * 60 * 30),
read: false
},
{
id: 2,
title: '新用户注册',
icon: '👤',
time: new Date(Date.now() - 1000 * 60 * 60),
read: false
}
])
const mainMenuItems = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)([
{ id: 'home', name: '欢迎', path: '/', icon: '🏠', favorite: false },
{ id: 'speed-test', name: '速度测试', path: '/speed-test', icon: '⚡', favorite: false },
{ id: 'user-management', name: '用户管理', path: '/user-management', icon: '👥', favorite: false },
{ id: 'history', name: '历史记录', path: '/history', icon: '📊', favorite: false },
{ id: 'settings', name: '用户设置', path: '/settings', icon: '⚙', favorite: false }
])
const favoriteMenuItems = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)([])
// 计算属性
const unreadCount = (0,vue__WEBPACK_IMPORTED_MODULE_0__.computed)(() => messages.value.filter(m => !m.read).length)
const currentRoute = (0,vue__WEBPACK_IMPORTED_MODULE_0__.computed)(() => route.path)
const breadcrumbs = (0,vue__WEBPACK_IMPORTED_MODULE_0__.computed)(() => {
const path = route.path
if (path === '/') return ['欢迎']
if (path === '/user-management') return ['欢迎', '用户管理']
if (path === '/speed-test') return ['欢迎', '速度测试']
if (path === '/history') return ['欢迎', '历史记录']
if (path === '/settings') return ['欢迎', '用户设置']
return ['欢迎']
})
// 方法
const toggleMessagePanel = () => {
showMessagePanel.value = !showMessagePanel.value
showUserMenu.value = false
}
const toggleUserMenu = () => {
showUserMenu.value = !showUserMenu.value
showMessagePanel.value = false
}
const handleMenuClick = (item) => {
// 添加标签页
addTabIfNotExists({
id: item.id,
title: item.name,
path: item.path,
closable: true
})
}
const switchTab = (tabId) => {
currentTab.value = tabId
const tab = openTabs.value.find(t => t.id === tabId)
if (tab) {
router.push(tab.path)
}
}
const closeTab = (tabId) => {
const index = openTabs.value.findIndex(tab => tab.id === tabId)
if (index > -1) {
openTabs.value.splice(index, 1)
// 如果关闭的是当前标签页,切换到前一个标签页
if (currentTab.value === tabId) {
const newTab = openTabs.value[index - 1] || openTabs.value[0]
if (newTab) {
currentTab.value = newTab.id
router.push(newTab.path)
}
}
}
}
const closeAllTabs = () => {
openTabs.value = openTabs.value.filter(tab => !tab.closable)
currentTab.value = 'home'
router.push('/')
}
const toggleFavorite = (itemId) => {
const item = mainMenuItems.value.find(i => i.id === itemId)
if (item) {
item.favorite = !item.favorite
updateFavoriteMenu()
}
}
const updateFavoriteMenu = () => {
favoriteMenuItems.value = mainMenuItems.value.filter(item => item.favorite)
}
const markAsRead = (messageId) => {
const message = messages.value.find(m => m.id === messageId)
if (message) {
message.read = true
}
}
const formatTime = (time) => {
const now = new Date()
const diff = now - time
const minutes = Math.floor(diff / (1000 * 60))
const hours = Math.floor(diff / (1000 * 60 * 60))
const days = Math.floor(diff / (1000 * 60 * 60 * 24))
if (minutes < 60) return `${minutes}分钟前`
if (hours < 24) return `${hours}小时前`
return `${days}天前`
}
const openProfile = () => {
showUserMenu.value = false
// 跳转到个人资料页面
}
const openSettings = () => {
showUserMenu.value = false
// 添加标签页
addTabIfNotExists({
id: 'settings',
title: '用户设置',
path: '/settings',
closable: true
})
router.push('/settings')
}
// 统一的添加标签页方法
const addTabIfNotExists = (tabInfo) => {
const existingTab = openTabs.value.find(tab => tab.id === tabInfo.id)
if (!existingTab) {
openTabs.value.push(tabInfo)
}
currentTab.value = tabInfo.id
}
// 处理从子组件添加标签页的请求
const handleAddTab = (tabInfo) => {
addTabIfNotExists(tabInfo)
}
const showLoginModal = () => {
showLoginModalFlag.value = true
showUserMenu.value = false
}
const handleLoginSuccess = (response) => {
// 更新用户信息
if (response.user) {
currentUser.name = response.user.username || response.user.name
currentUser.email = response.user.email
currentUser.avatar = response.user.avatar
}
// 更新登录状态
isLoggedIn.value = true
// 保存用户信息到本地存储
localStorage.setItem('user', JSON.stringify(currentUser))
localStorage.setItem('isLoggedIn', 'true')
// 关闭登录弹窗
showLoginModalFlag.value = false
// 显示欢迎消息
console.log(`欢迎回来,${currentUser.name}`)
}
const handleShowMessage = (message) => {
// 配置 Toast 消息
toastConfig.type = message.type || 'info'
toastConfig.title = message.title || '消息'
toastConfig.content = message.content || ''
toastConfig.duration = message.duration || 3000
// 显示 Toast
showToast.value = true
}
const logout = async () => {
try {
await _services_userService__WEBPACK_IMPORTED_MODULE_2__.userService.logout()
// 清除用户信息
currentUser.name = ''
currentUser.email = ''
currentUser.avatar = null
isLoggedIn.value = false
// 清除本地存储
localStorage.removeItem('user')
localStorage.removeItem('isLoggedIn')
localStorage.removeItem('token')
// 关闭用户菜单
showUserMenu.value = false
// 跳转到首页
router.push('/')
} catch (error) {
console.error('退出登录失败:', error)
}
}
// 监听路由变化
;(0,vue__WEBPACK_IMPORTED_MODULE_0__.watch)(() => route.path, (newPath) => {
const tab = openTabs.value.find(t => t.path === newPath)
if (tab) {
currentTab.value = tab.id
}
})
// 监听应用设置变化
;(0,vue__WEBPACK_IMPORTED_MODULE_0__.watch)(() => localStorage.getItem('gofaster-settings'), (newSettings) => {
if (newSettings) {
try {
const parsedSettings = JSON.parse(newSettings)
if (parsedSettings.appName && parsedSettings.appName !== appSettings.appName) {
appSettings.appName = parsedSettings.appName
// 更新窗口标题
if (window.electronAPI && window.electronAPI.updateWindowTitle) {
window.electronAPI.updateWindowTitle(parsedSettings.appName)
}
}
// 监听主题变化
if (parsedSettings.theme && parsedSettings.theme !== _utils_themeManager_js__WEBPACK_IMPORTED_MODULE_3__["default"].getCurrentTheme()) {
_utils_themeManager_js__WEBPACK_IMPORTED_MODULE_3__["default"].setTheme(parsedSettings.theme)
}
} catch (error) {
console.error('解析用户应用设置失败:', error)
}
}
}, { immediate: false })
const loadAppSettings = () => {
try {
const savedSettings = localStorage.getItem('gofaster-settings')
if (savedSettings) {
const parsedSettings = JSON.parse(savedSettings)
if (parsedSettings.appName) {
appSettings.appName = parsedSettings.appName
// 初始加载时也更新窗口标题
if (window.electronAPI && window.electronAPI.updateWindowTitle) {
window.electronAPI.updateWindowTitle(parsedSettings.appName)
}
}
}
} catch (error) {
console.error('加载用户应用设置失败:', error)
}
}
;(0,vue__WEBPACK_IMPORTED_MODULE_0__.onMounted)(() => {
// 初始化收藏菜单
updateFavoriteMenu()
// 检查登录状态
const savedIsLoggedIn = localStorage.getItem('isLoggedIn')
const savedUser = localStorage.getItem('user')
if (savedIsLoggedIn === 'true' && savedUser) {
try {
const userData = JSON.parse(savedUser)
Object.assign(currentUser, userData)
isLoggedIn.value = true
} catch (error) {
console.warn('解析用户信息失败:', error)
// 清除无效的用户信息
localStorage.removeItem('user')
localStorage.removeItem('isLoggedIn')
}
}
// 加载应用设置
loadAppSettings()
// 初始化主题
const savedSettings = localStorage.getItem('gofaster-settings')
if (savedSettings) {
try {
const settings = JSON.parse(savedSettings)
if (settings.theme) {
_utils_themeManager_js__WEBPACK_IMPORTED_MODULE_3__["default"].setTheme(settings.theme)
}
} catch (error) {
console.warn('加载用户主题设置失败:', error)
}
}
// 监听全局登录弹窗事件
window.addEventListener('show-login-modal', () => {
showLoginModalFlag.value = true
})
})
return {
showMessagePanel,
showUserMenu,
showLoginModalFlag,
showToast,
currentTab,
openTabs,
currentUser,
isLoggedIn,
appSettings,
toastConfig,
messages,
mainMenuItems,
favoriteMenuItems,
unreadCount,
currentRoute,
breadcrumbs,
toggleMessagePanel,
toggleUserMenu,
showLoginModal,
handleMenuClick,
switchTab,
closeTab,
closeAllTabs,
toggleFavorite,
markAsRead,
formatTime,
openProfile,
openSettings,
logout,
handleLoginSuccess,
handleShowMessage,
loadAppSettings,
handleAddTab,
addTabIfNotExists
}
}
});
/***/ }),
/***/ "./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/StatusBar.vue?vue&type=script&lang=js":
/*!**********************************************************************************************************************************!*\
!*** ./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/StatusBar.vue?vue&type=script&lang=js ***!
\**********************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm-bundler.js");
/* harmony import */ var _config_app_config_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../config/app.config.js */ "./src/config/app.config.js");
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
name: 'StatusBar',
setup() {
const serverUrl = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)((0,_config_app_config_js__WEBPACK_IMPORTED_MODULE_1__.getFinalConfig)().serverUrl);
const userInfo = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)('未登录');
const errorCount = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)(0);
const appVersion = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)(({"NODE_ENV":"development","BASE_URL":""}).VUE_APP_VERSION || '1.0.0');
const memoryUsage = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)(0);
const systemMemoryUsage = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)('N/A');
// 更新内存使用情况 - 使用更准确的方法
let intervalId;
(0,vue__WEBPACK_IMPORTED_MODULE_0__.onMounted)(() => {
// 获取初始错误日志计数
getInitialErrorCount();
intervalId = setInterval(() => {
updateMemoryUsage();
}, 3000); // 每3秒更新一次
});
(0,vue__WEBPACK_IMPORTED_MODULE_0__.onUnmounted)(() => {
if (intervalId) {
clearInterval(intervalId);
}
});
// 更新内存使用情况
const updateMemoryUsage = async () => {
try {
// 使用 Electron 的 IPC 获取进程内存信息
if (window.electronAPI && window.electronAPI.getProcessMemoryInfo) {
const memoryInfo = await window.electronAPI.getProcessMemoryInfo();
if (memoryInfo && memoryInfo.privateBytes) {
// privateBytes 是进程的私有内存使用量(字节)
memoryUsage.value = (memoryInfo.privateBytes / (1024 * 1024)).toFixed(1);
}
// 显示系统内存使用情况
if (memoryInfo.systemTotal && memoryInfo.systemUsed) {
const totalGB = (memoryInfo.systemTotal / (1024 * 1024 * 1024)).toFixed(1);
const usedGB = (memoryInfo.systemUsed / (1024 * 1024 * 1024)).toFixed(1);
const usedPercent = ((memoryInfo.systemUsed / memoryInfo.systemTotal) * 100).toFixed(1);
systemMemoryUsage.value = `${usedGB}/${totalGB} GB (${usedPercent}%)`;
}
} else {
// 回退到浏览器API
fallbackMemoryUsage();
}
} catch (error) {
console.warn('无法获取内存使用情况:', error);
fallbackMemoryUsage();
}
};
// 回退的内存获取方法
const fallbackMemoryUsage = () => {
if (window.performance && window.performance.memory) {
const memory = window.performance.memory;
// 使用 usedJSHeapSize 作为JavaScript堆内存使用量
memoryUsage.value = (memory.usedJSHeapSize / (1024 * 1024)).toFixed(1);
systemMemoryUsage.value = 'N/A (浏览器模式)';
} else {
memoryUsage.value = 'N/A';
systemMemoryUsage.value = 'N/A';
}
};
// 获取初始错误日志计数
const getInitialErrorCount = async () => {
try {
if (window.electronAPI && window.electronAPI.getErrorLogCount) {
const result = await window.electronAPI.getErrorLogCount();
errorCount.value = result.count || 0;
}
} catch (error) {
console.warn('无法获取初始错误日志计数:', error);
}
};
// 监听主进程消息
window.electronAPI?.onStatusUpdate((event, data) => {
if (data.userInfo) userInfo.value = data.userInfo;
if (data.errorCount !== undefined) errorCount.value = data.errorCount;
});
// 监听错误日志更新
window.electronAPI?.onErrorLogUpdated((event, data) => {
if (data.count !== undefined) {
errorCount.value = data.count;
}
});
// 监听设置变化,更新服务地址
const updateServerUrl = () => {
const config = (0,_config_app_config_js__WEBPACK_IMPORTED_MODULE_1__.getFinalConfig)();
serverUrl.value = config.serverUrl;
};
// 监听localStorage变化
window.addEventListener('storage', updateServerUrl);
// 监听自定义事件(当设置页面保存配置时触发)
window.addEventListener('gofaster-settings-changed', updateServerUrl);
// 打开日志文件夹
const openLogFolder = async () => {
try {
if (window.electronAPI && window.electronAPI.openLogFolder) {
const result = await window.electronAPI.openLogFolder();
if (!result.success) {
console.warn('打开日志文件夹失败:', result.message);
}
}
} catch (error) {
console.warn('打开日志文件夹失败:', error);
}
};
return {
serverUrl,
userInfo,
errorCount,
appVersion,
memoryUsage,
systemMemoryUsage,
openLogFolder
};
}
});
/***/ }),
/***/ "./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/Toast.vue?vue&type=script&lang=js":
/*!******************************************************************************************************************************!*\
!*** ./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/Toast.vue?vue&type=script&lang=js ***!
\******************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
name: 'Toast',
props: {
visible: {
type: Boolean,
default: false
},
type: {
type: String,
default: 'info',
validator: value => ['success', 'error', 'warning', 'info'].includes(value)
},
title: {
type: String,
required: true
},
content: {
type: String,
default: ''
},
duration: {
type: Number,
default: 3000
}
},
computed: {
icon() {
const icons = {
success: '✅',
error: '❌',
warning: '⚠',
info: 'ℹ'
}
return icons[this.type] || icons.info
}
},
watch: {
visible(newVal) {
if (newVal && this.duration > 0) {
setTimeout(() => {
this.close()
}, this.duration)
}
}
},
methods: {
close() {
this.$emit('update:visible', false)
}
}
});
/***/ }),
/***/ "./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/History.vue?vue&type=script&lang=js":
/*!***************************************************************************************************************************!*\
!*** ./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/History.vue?vue&type=script&lang=js ***!
\***************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm-bundler.js");
/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm-bundler.js");
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
name: 'HistoryView',
setup() {
const store = (0,vuex__WEBPACK_IMPORTED_MODULE_1__.useStore)()
;(0,vue__WEBPACK_IMPORTED_MODULE_0__.onMounted)(() => {
store.dispatch('loadTestResults')
})
const testResults = (0,vue__WEBPACK_IMPORTED_MODULE_0__.computed)(() => store.state.testResults)
const formatDate = (timestamp) => {
return new Date(timestamp).toLocaleString()
}
return { testResults, formatDate }
}
});
/***/ }),
/***/ "./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/Home.vue?vue&type=script&lang=js":
/*!************************************************************************************************************************!*\
!*** ./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/Home.vue?vue&type=script&lang=js ***!
\************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
name: 'HomeView',
inject: ['isLoggedIn', 'currentUser', 'showLoginModal'],
data() {
return {
userInfo: {
name: '用户',
email: 'user@example.com',
avatar: '👤'
},
currentDate: '',
stats: {
totalTests: 0,
avgSpeed: '0 Mbps',
bestSpeed: '0 Mbps'
},
todoList: [
{ id: 1, text: '完成网络速度测试', completed: false, date: '今天' },
{ id: 2, text: '查看历史测试记录', completed: true, date: '昨天' },
{ id: 3, text: '配置测试参数', completed: false, date: '明天' }
],
recentActivities: [
{ id: 1, icon: '⚡', title: '完成速度测试', time: '2小时前' },
{ id: 2, icon: '📊', title: '查看测试报告', time: '昨天' },
{ id: 3, icon: '⚙', title: '更新设置', time: '3天前' }
],
db: null // 新增:用于存储数据库实例
}
},
methods: {
updateCurrentDate() {
const now = new Date();
const options = {
year: 'numeric',
month: 'long',
day: 'numeric',
weekday: 'long'
};
this.currentDate = now.toLocaleDateString('zh-CN', options);
},
async loadUserData() {
try {
// 从数据库加载用户数据
if (this.db && this.db.data && this.db.data.userInfo) {
this.userInfo = this.db.data.userInfo;
}
} catch (error) {
console.error('加载用户数据失败:', error);
}
},
async loadStats() {
try {
// 从数据库加载统计数据
if (this.db && this.db.data && this.db.data.stats) {
this.stats = this.db.data.stats;
}
} catch (error) {
console.error('加载统计数据失败:', error);
}
},
async loadTodoList() {
try {
// 从数据库加载待办事项
if (this.db && this.db.data && this.db.data.todoList) {
this.todoList = this.db.data.todoList;
}
} catch (error) {
console.error('加载待办事项失败:', error);
}
},
async loadRecentActivities() {
try {
// 从数据库加载最近活动
if (this.db && this.db.data && this.db.data.recentActivities) {
this.recentActivities = this.db.data.recentActivities;
}
} catch (error) {
console.error('加载最近活动失败:', error);
}
},
startSpeedTest() {
this.$router.push('/speed-test');
},
viewHistory() {
this.$router.push('/history');
},
openSettings() {
console.log('打开用户设置');
// 通过事件通知父组件添加标签页
this.$emit('add-tab', {
id: 'settings',
title: '用户设置',
path: '/settings',
closable: true
});
this.$router.push('/settings');
},
exportData() {
console.log('导出数据');
},
showLoginModalHandler() {
// 调用注入的登录弹窗方法
if (this.showLoginModal) {
this.showLoginModal();
}
},
async addTodo() {
const newTodo = {
id: Date.now(),
text: '新的待办事项',
completed: false,
date: '今天'
};
this.todoList.unshift(newTodo);
// 保存到数据库
try {
if (this.db && this.db.data) {
this.db.data.todoList = this.todoList;
await this.db.write();
}
} catch (error) {
console.error('保存待办事项失败:', error);
}
},
async toggleTodo(id) {
const todo = this.todoList.find(t => t.id === id);
if (todo) {
todo.completed = !todo.completed;
// 保存到数据库
try {
if (this.db && this.db.data) {
this.db.data.todoList = this.todoList;
await this.db.write();
}
} catch (error) {
console.error('更新待办事项失败:', error);
}
}
},
async deleteTodo(id) {
this.todoList = this.todoList.filter(t => t.id !== id);
// 保存到数据库
try {
if (this.db && this.db.data) {
this.db.data.todoList = this.todoList;
await this.db.write();
}
} catch (error) {
console.error('删除待办事项失败:', error);
}
}
},
async mounted() {
this.updateCurrentDate();
// 等待数据库初始化完成
try {
const { db } = await Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../services/db */ "./src/renderer/services/db.js"));
this.db = db;
// 加载所有数据
await this.loadUserData();
await this.loadStats();
await this.loadTodoList();
await this.loadRecentActivities();
} catch (error) {
console.error('数据库初始化失败:', error);
}
// 监听登录状态变化
this.$watch('isLoggedIn', (newVal) => {
if (newVal && this.currentUser) {
this.userInfo.name = this.currentUser.name || this.userInfo.name;
this.userInfo.email = this.currentUser.email || this.userInfo.email;
}
}, { immediate: true });
}
});
/***/ }),
/***/ "./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/UserManagement.vue?vue&type=script&lang=js":
/*!**********************************************************************************************************************************!*\
!*** ./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/UserManagement.vue?vue&type=script&lang=js ***!
\**********************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm-bundler.js");
/* harmony import */ var _services_userService__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/services/userService */ "./src/renderer/services/userService.js");
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
name: 'UserManagement',
setup() {
const users = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)([])
const roles = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)([])
const loading = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)(false)
const currentPage = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)(1)
const pageSize = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)(10)
const total = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)(0)
const searchQuery = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)('')
const statusFilter = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)('')
const roleFilter = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)('')
const showAddUserModal = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)(false)
const showEditUserModal = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)(false)
const editingUser = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)(null)
const userForm = (0,vue__WEBPACK_IMPORTED_MODULE_0__.reactive)({
username: '',
password: '',
email: '',
phone: '',
status: 1,
roleIds: []
})
const totalPages = (0,vue__WEBPACK_IMPORTED_MODULE_0__.computed)(() => Math.ceil(total.value / pageSize.value))
const filteredUsers = (0,vue__WEBPACK_IMPORTED_MODULE_0__.computed)(() => {
let filtered = users.value
if (searchQuery.value) {
const query = searchQuery.value.toLowerCase()
filtered = filtered.filter(user =>
user.username.toLowerCase().includes(query) ||
user.email.toLowerCase().includes(query) ||
user.phone?.toLowerCase().includes(query)
)
}
if (statusFilter.value) {
filtered = filtered.filter(user => user.status === parseInt(statusFilter.value))
}
if (roleFilter.value) {
filtered = filtered.filter(user =>
user.roles.some(role => role.id === parseInt(roleFilter.value))
)
}
return filtered
})
const loadUsers = async () => {
try {
loading.value = true
const response = await _services_userService__WEBPACK_IMPORTED_MODULE_1__.userService.getUsers(currentPage.value, pageSize.value)
users.value = response.data
total.value = response.total
} catch (error) {
console.error('加载用户失败:', error)
} finally {
loading.value = false
}
}
const loadRoles = async () => {
try {
const response = await _services_userService__WEBPACK_IMPORTED_MODULE_1__.userService.getRoles()
roles.value = response.data
} catch (error) {
console.error('加载角色失败:', error)
}
}
const handleSearch = () => {
currentPage.value = 1
}
const handleFilter = () => {
currentPage.value = 1
}
const changePage = (page) => {
currentPage.value = page
loadUsers()
}
const editUser = (user) => {
editingUser.value = user
Object.assign(userForm, {
username: user.username,
password: '',
email: user.email,
phone: user.phone,
status: user.status,
roleIds: user.roles.map(role => role.id)
})
showEditUserModal.value = true
}
const submitUser = async () => {
try {
if (showEditUserModal.value) {
await _services_userService__WEBPACK_IMPORTED_MODULE_1__.userService.updateUser(editingUser.value.id, userForm)
} else {
await _services_userService__WEBPACK_IMPORTED_MODULE_1__.userService.createUser(userForm)
}
closeModal()
loadUsers()
} catch (error) {
console.error('保存用户失败:', error)
}
}
const deleteUser = async (userId) => {
if (confirm('确定要删除这个用户吗?')) {
try {
await _services_userService__WEBPACK_IMPORTED_MODULE_1__.userService.deleteUser(userId)
loadUsers()
} catch (error) {
console.error('删除用户失败:', error)
}
}
}
const closeModal = () => {
showAddUserModal.value = false
showEditUserModal.value = false
editingUser.value = null
Object.assign(userForm, {
username: '',
password: '',
email: '',
phone: '',
status: 1,
roleIds: []
})
}
const formatDate = (dateString) => {
if (!dateString) return ''
return new Date(dateString).toLocaleDateString('zh-CN')
}
;(0,vue__WEBPACK_IMPORTED_MODULE_0__.onMounted)(() => {
loadUsers()
loadRoles()
})
return {
users,
roles,
loading,
currentPage,
pageSize,
total,
searchQuery,
statusFilter,
roleFilter,
showAddUserModal,
showEditUserModal,
editingUser,
userForm,
totalPages,
filteredUsers,
loadUsers,
loadRoles,
handleSearch,
handleFilter,
changePage,
editUser,
submitUser,
deleteUser,
closeModal,
formatDate
}
}
});
/***/ }),
/***/ "./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/App.vue?vue&type=template&id=2fa9d48e":
/*!*********************************************************************************************************************************************************************************************!*\
!*** ./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/App.vue?vue&type=template&id=2fa9d48e ***!
\*********************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ render: () => (/* binding */ render)
/* harmony export */ });
/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm-bundler.js");
const _hoisted_1 = { id: "app" }
function render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_router_view = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("router-view")
const _component_StatusBar = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("StatusBar")
return ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", _hoisted_1, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_router_view),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_StatusBar)
]))
}
/***/ }),
/***/ "./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/LoginModal.vue?vue&type=template&id=443b36ca&scoped=true":
/*!***************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/LoginModal.vue?vue&type=template&id=443b36ca&scoped=true ***!
\***************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ render: () => (/* binding */ render)
/* harmony export */ });
/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm-bundler.js");
const _hoisted_1 = { class: "login-modal-header" }
const _hoisted_2 = { class: "login-modal-body" }
const _hoisted_3 = { class: "form-group" }
const _hoisted_4 = ["disabled"]
const _hoisted_5 = { class: "form-group" }
const _hoisted_6 = ["disabled"]
const _hoisted_7 = { class: "form-group" }
const _hoisted_8 = { class: "captcha-container" }
const _hoisted_9 = ["disabled"]
const _hoisted_10 = { class: "captcha-image-container" }
const _hoisted_11 = ["src"]
const _hoisted_12 = { key: 0 }
const _hoisted_13 = { key: 1 }
const _hoisted_14 = {
key: 2,
class: "captcha-loading-spinner"
}
const _hoisted_15 = { class: "form-actions" }
const _hoisted_16 = ["disabled"]
const _hoisted_17 = {
key: 0,
class: "loading-spinner"
}
const _hoisted_18 = {
key: 0,
class: "form-validation-hint"
}
const _hoisted_19 = { key: 0 }
const _hoisted_20 = { key: 1 }
const _hoisted_21 = { key: 2 }
const _hoisted_22 = { key: 3 }
const _hoisted_23 = {
key: 0,
class: "error-message"
}
function render(_ctx, _cache, $props, $setup, $data, $options) {
return ($props.visible)
? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", {
key: 0,
class: "login-modal-overlay",
onClick: _cache[8] || (_cache[8] = (...args) => ($options.handleOverlayClick && $options.handleOverlayClick(...args)))
}, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", {
class: "login-modal",
onClick: _cache[7] || (_cache[7] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.withModifiers)(() => {}, ["stop"]))
}, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_1, [
_cache[9] || (_cache[9] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("h2", null, "用户登录", -1 /* CACHED */)),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("button", {
class: "close-btn",
onClick: _cache[0] || (_cache[0] = (...args) => ($options.closeModal && $options.closeModal(...args)))
}, "×")
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_2, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("form", {
onSubmit: _cache[6] || (_cache[6] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.withModifiers)((...args) => ($options.handleLogin && $options.handleLogin(...args)), ["prevent"])),
class: "login-form"
}, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(" 用户名 "),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_3, [
_cache[10] || (_cache[10] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("label", { for: "username" }, "用户名", -1 /* CACHED */)),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("input", {
id: "username",
"onUpdate:modelValue": _cache[1] || (_cache[1] = $event => (($data.loginForm.username) = $event)),
type: "text",
placeholder: "请输入用户名",
required: "",
disabled: $data.loading
}, null, 8 /* PROPS */, _hoisted_4), [
[vue__WEBPACK_IMPORTED_MODULE_0__.vModelText, $data.loginForm.username]
])
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(" 密码 "),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_5, [
_cache[11] || (_cache[11] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("label", { for: "password" }, "密码", -1 /* CACHED */)),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("input", {
id: "password",
"onUpdate:modelValue": _cache[2] || (_cache[2] = $event => (($data.loginForm.password) = $event)),
type: "password",
placeholder: "请输入密码",
required: "",
disabled: $data.loading
}, null, 8 /* PROPS */, _hoisted_6), [
[vue__WEBPACK_IMPORTED_MODULE_0__.vModelText, $data.loginForm.password]
])
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(" 验证码 "),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_7, [
_cache[12] || (_cache[12] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("label", { for: "captcha" }, "验证码", -1 /* CACHED */)),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_8, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("input", {
id: "captcha",
"onUpdate:modelValue": _cache[3] || (_cache[3] = $event => (($data.loginForm.captcha) = $event)),
type: "text",
placeholder: "请输入验证码",
required: "",
disabled: $data.loading,
maxlength: "4"
}, null, 8 /* PROPS */, _hoisted_9), [
[vue__WEBPACK_IMPORTED_MODULE_0__.vModelText, $data.loginForm.captcha]
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_10, [
($data.captchaImage)
? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("img", {
key: 0,
src: $data.captchaImage,
alt: "验证码",
onClick: _cache[4] || (_cache[4] = (...args) => ($options.refreshCaptcha && $options.refreshCaptcha(...args))),
class: "captcha-image"
}, null, 8 /* PROPS */, _hoisted_11))
: ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", {
key: 1,
class: "captcha-placeholder",
onClick: _cache[5] || (_cache[5] = (...args) => ($options.refreshCaptcha && $options.refreshCaptcha(...args)))
}, [
($data.captchaLoading)
? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("span", _hoisted_12, "验证码加载中..."))
: ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("span", _hoisted_13, "点击获取验证码")),
($data.captchaLoading)
? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("span", _hoisted_14))
: (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true)
]))
])
])
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(" 登录按钮 "),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_15, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("button", {
type: "submit",
class: "login-btn",
disabled: $data.loading || !$options.isFormValid
}, [
($data.loading)
? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("span", _hoisted_17))
: (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" " + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($data.loading ? '登录中...' : '登录'), 1 /* TEXT */)
], 8 /* PROPS */, _hoisted_16),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(" 表单验证提示 "),
(!$options.isFormValid && ($data.loginForm.username || $data.loginForm.password || $data.loginForm.captcha))
? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", _hoisted_18, [
(!$data.loginForm.username.trim())
? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("span", _hoisted_19, "请填写用户名"))
: (!$data.loginForm.password.trim())
? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("span", _hoisted_20, "请填写密码"))
: (!$data.loginForm.captcha.trim())
? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("span", _hoisted_21, "请填写验证码"))
: (!$data.captchaImage)
? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("span", _hoisted_22, "请先获取验证码"))
: (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true)
]))
: (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true)
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(" 错误提示 "),
($data.errorMessage)
? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", _hoisted_23, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($data.errorMessage), 1 /* TEXT */))
: (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true)
], 32 /* NEED_HYDRATION */)
]),
_cache[13] || (_cache[13] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", { class: "login-modal-footer" }, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("p", { class: "login-tips" }, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", null, "提示:"),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", null, "默认管理员账号:sysadmin"),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", null, "默认密码:sysadmin@123")
])
], -1 /* CACHED */))
])
]))
: (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true)
}
/***/ }),
/***/ "./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/MainLayout.vue?vue&type=template&id=a4b9ee6e&scoped=true":
/*!***************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/MainLayout.vue?vue&type=template&id=a4b9ee6e&scoped=true ***!
\***************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ render: () => (/* binding */ render)
/* harmony export */ });
/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm-bundler.js");
const _hoisted_1 = { class: "main-layout" }
const _hoisted_2 = { class: "header" }
const _hoisted_3 = { class: "header-left" }
const _hoisted_4 = { class: "logo" }
const _hoisted_5 = { class: "breadcrumb" }
const _hoisted_6 = {
key: 0,
class: "separator"
}
const _hoisted_7 = { class: "breadcrumb-item" }
const _hoisted_8 = { class: "header-right" }
const _hoisted_9 = { class: "message-center" }
const _hoisted_10 = {
key: 0,
class: "badge"
}
const _hoisted_11 = {
key: 0,
class: "message-panel"
}
const _hoisted_12 = { class: "message-header" }
const _hoisted_13 = { class: "message-list" }
const _hoisted_14 = { class: "message-icon" }
const _hoisted_15 = { class: "message-content" }
const _hoisted_16 = { class: "message-title" }
const _hoisted_17 = { class: "message-time" }
const _hoisted_18 = ["onClick"]
const _hoisted_19 = { class: "user-info" }
const _hoisted_20 = ["src", "alt"]
const _hoisted_21 = {
key: 1,
class: "avatar-placeholder"
}
const _hoisted_22 = { class: "login-section" }
const _hoisted_23 = {
key: 2,
class: "user-menu"
}
const _hoisted_24 = { class: "user-menu-header" }
const _hoisted_25 = { class: "user-details" }
const _hoisted_26 = { class: "user-name" }
const _hoisted_27 = { class: "user-email" }
const _hoisted_28 = { class: "user-menu-items" }
const _hoisted_29 = { class: "main-content" }
const _hoisted_30 = { class: "sidebar" }
const _hoisted_31 = { class: "sidebar-nav" }
const _hoisted_32 = { class: "nav-section" }
const _hoisted_33 = { class: "nav-list" }
const _hoisted_34 = { class: "nav-icon" }
const _hoisted_35 = { class: "nav-text" }
const _hoisted_36 = ["onClick"]
const _hoisted_37 = { class: "nav-section" }
const _hoisted_38 = { class: "nav-list" }
const _hoisted_39 = { class: "nav-icon" }
const _hoisted_40 = { class: "nav-text" }
const _hoisted_41 = ["onClick"]
const _hoisted_42 = { class: "content-area" }
const _hoisted_43 = { class: "content-tabs" }
const _hoisted_44 = { class: "tab-list" }
const _hoisted_45 = ["onClick"]
const _hoisted_46 = { class: "tab-title" }
const _hoisted_47 = ["onClick"]
const _hoisted_48 = { class: "tab-actions" }
const _hoisted_49 = { class: "content-body" }
function render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_router_link = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("router-link")
const _component_router_view = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("router-view")
const _component_LoginModal = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("LoginModal")
const _component_Toast = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("Toast")
return ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", _hoisted_1, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(" 顶部导航栏 "),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("header", _hoisted_2, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_3, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_4, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("h1", null, "🚀 " + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.appSettings.appName), 1 /* TEXT */)
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_5, [
((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($setup.breadcrumbs, (item, index) => {
return ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("span", { key: index }, [
(index > 0)
? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("span", _hoisted_6, "/"))
: (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_7, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(item), 1 /* TEXT */)
]))
}), 128 /* KEYED_FRAGMENT */))
])
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_8, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(" 消息通知 "),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_9, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("button", {
class: "message-btn",
onClick: _cache[0] || (_cache[0] = (...args) => ($setup.toggleMessagePanel && $setup.toggleMessagePanel(...args)))
}, [
_cache[10] || (_cache[10] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("i", { class: "icon" }, "📢", -1 /* CACHED */)),
($setup.unreadCount > 0)
? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("span", _hoisted_10, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.unreadCount), 1 /* TEXT */))
: (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true)
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(" 消息面板 "),
($setup.showMessagePanel)
? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", _hoisted_11, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_12, [
_cache[11] || (_cache[11] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("h3", null, "消息", -1 /* CACHED */)),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("button", {
class: "close-btn",
onClick: _cache[1] || (_cache[1] = $event => ($setup.showMessagePanel = false))
}, "×")
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_13, [
((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($setup.messages, (message) => {
return ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", {
key: message.id,
class: "message-item"
}, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_14, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(message.icon), 1 /* TEXT */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_15, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_16, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(message.title), 1 /* TEXT */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_17, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.formatTime(message.time)), 1 /* TEXT */)
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("button", {
class: "mark-read-btn",
onClick: $event => ($setup.markAsRead(message.id))
}, " ✓ ", 8 /* PROPS */, _hoisted_18)
]))
}), 128 /* KEYED_FRAGMENT */))
])
]))
: (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true)
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(" 用户信息 "),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_19, [
($setup.isLoggedIn)
? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", {
key: 0,
class: "user-avatar",
onClick: _cache[2] || (_cache[2] = (...args) => ($setup.toggleUserMenu && $setup.toggleUserMenu(...args)))
}, [
($setup.currentUser.avatar)
? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("img", {
key: 0,
src: $setup.currentUser.avatar,
alt: $setup.currentUser.name
}, null, 8 /* PROPS */, _hoisted_20))
: ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("span", _hoisted_21, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.currentUser.name?.charAt(0) || 'U'), 1 /* TEXT */))
]))
: ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, { key: 1 }, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(" 未登录状态显示登录按钮 "),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_22, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("button", {
class: "login-btn",
onClick: _cache[3] || (_cache[3] = (...args) => ($setup.showLoginModal && $setup.showLoginModal(...args)))
}, _cache[12] || (_cache[12] = [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("i", { class: "icon" }, "🔐", -1 /* CACHED */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" 登录 ", -1 /* CACHED */)
]))
])
], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */)),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(" 用户菜单 "),
($setup.showUserMenu && $setup.isLoggedIn)
? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", _hoisted_23, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_24, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_25, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_26, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.currentUser.name || '用户'), 1 /* TEXT */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_27, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.currentUser.email || 'user@example.com'), 1 /* TEXT */)
])
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_28, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("button", {
class: "menu-item",
onClick: _cache[4] || (_cache[4] = (...args) => ($setup.openProfile && $setup.openProfile(...args)))
}, _cache[13] || (_cache[13] = [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("i", { class: "icon" }, "👤", -1 /* CACHED */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" 个人资料 ", -1 /* CACHED */)
])),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("button", {
class: "menu-item",
onClick: _cache[5] || (_cache[5] = (...args) => ($setup.openSettings && $setup.openSettings(...args)))
}, _cache[14] || (_cache[14] = [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("i", { class: "icon" }, "⚙", -1 /* CACHED */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" 用户设置 ", -1 /* CACHED */)
])),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("button", {
class: "menu-item",
onClick: _cache[6] || (_cache[6] = (...args) => ($setup.logout && $setup.logout(...args)))
}, _cache[15] || (_cache[15] = [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("i", { class: "icon" }, "🚪", -1 /* CACHED */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" 退出登录 ", -1 /* CACHED */)
]))
])
]))
: (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true)
])
])
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(" 主要内容区域 "),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_29, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(" 左侧菜单 "),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("aside", _hoisted_30, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("nav", _hoisted_31, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_32, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("ul", _hoisted_33, [
((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($setup.mainMenuItems, (item) => {
return ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("li", {
key: item.id
}, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_router_link, {
to: item.path,
class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)(["nav-item", { active: $setup.currentRoute === item.path }]),
onClick: $event => ($setup.handleMenuClick(item))
}, {
default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("i", _hoisted_34, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(item.icon), 1 /* TEXT */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_35, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(item.name), 1 /* TEXT */),
(item.favorite)
? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("button", {
key: 0,
class: "favorite-btn",
onClick: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withModifiers)($event => ($setup.toggleFavorite(item.id)), ["stop"])
}, " ⭐ ", 8 /* PROPS */, _hoisted_36))
: (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true)
]),
_: 2 /* DYNAMIC */
}, 1032 /* PROPS, DYNAMIC_SLOTS */, ["to", "class", "onClick"])
]))
}), 128 /* KEYED_FRAGMENT */))
])
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_37, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("ul", _hoisted_38, [
((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($setup.favoriteMenuItems, (item) => {
return ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("li", {
key: item.id
}, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_router_link, {
to: item.path,
class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)(["nav-item", { active: $setup.currentRoute === item.path }])
}, {
default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("i", _hoisted_39, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(item.icon), 1 /* TEXT */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_40, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(item.name), 1 /* TEXT */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("button", {
class: "favorite-btn active",
onClick: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withModifiers)($event => ($setup.toggleFavorite(item.id)), ["stop"])
}, " ⭐ ", 8 /* PROPS */, _hoisted_41)
]),
_: 2 /* DYNAMIC */
}, 1032 /* PROPS, DYNAMIC_SLOTS */, ["to", "class"])
]))
}), 128 /* KEYED_FRAGMENT */))
])
])
])
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(" 右侧内容区域 "),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_42, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(" 内容选项卡 "),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_43, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_44, [
((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($setup.openTabs, (tab) => {
return ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", {
key: tab.id,
class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)(['tab-item', { active: tab.id === $setup.currentTab }]),
onClick: $event => ($setup.switchTab(tab.id))
}, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_46, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(tab.title), 1 /* TEXT */),
($setup.openTabs.length > 1)
? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("button", {
key: 0,
class: "tab-close",
onClick: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withModifiers)($event => ($setup.closeTab(tab.id)), ["stop"]),
title: "关闭标签页"
}, " × ", 8 /* PROPS */, _hoisted_47))
: (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true)
], 10 /* CLASS, PROPS */, _hoisted_45))
}), 128 /* KEYED_FRAGMENT */))
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_48, [
($setup.openTabs.length > 1)
? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("button", {
key: 0,
class: "close-all-btn",
onClick: _cache[7] || (_cache[7] = (...args) => ($setup.closeAllTabs && $setup.closeAllTabs(...args))),
title: "关闭所有标签页"
}, _cache[16] || (_cache[16] = [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", { class: "close-all-icon" }, "⊗", -1 /* CACHED */)
])))
: (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true)
])
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(" 功能内容区 "),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_49, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_router_view, { onAddTab: $setup.handleAddTab }, null, 8 /* PROPS */, ["onAddTab"])
])
])
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(" 登录弹窗 "),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_LoginModal, {
visible: $setup.showLoginModalFlag,
"onUpdate:visible": _cache[8] || (_cache[8] = $event => (($setup.showLoginModalFlag) = $event)),
onLoginSuccess: $setup.handleLoginSuccess,
onShowMessage: $setup.handleShowMessage
}, null, 8 /* PROPS */, ["visible", "onLoginSuccess", "onShowMessage"]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(" Toast 消息提示 "),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_Toast, {
visible: $setup.showToast,
"onUpdate:visible": _cache[9] || (_cache[9] = $event => (($setup.showToast) = $event)),
type: $setup.toastConfig.type,
title: $setup.toastConfig.title,
content: $setup.toastConfig.content,
duration: $setup.toastConfig.duration
}, null, 8 /* PROPS */, ["visible", "type", "title", "content", "duration"])
]))
}
/***/ }),
/***/ "./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/StatusBar.vue?vue&type=template&id=126429ab&scoped=true":
/*!**************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/StatusBar.vue?vue&type=template&id=126429ab&scoped=true ***!
\**************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ render: () => (/* binding */ render)
/* harmony export */ });
/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm-bundler.js");
const _hoisted_1 = { class: "status-bar" }
const _hoisted_2 = { class: "status-left" }
const _hoisted_3 = { class: "status-item" }
const _hoisted_4 = { class: "status-item" }
const _hoisted_5 = { class: "status-right" }
const _hoisted_6 = { class: "status-item" }
const _hoisted_7 = { class: "status-item" }
const _hoisted_8 = { class: "status-item" }
const _hoisted_9 = { class: "status-item" }
function render(_ctx, _cache, $props, $setup, $data, $options) {
return ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", _hoisted_1, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(" 左侧:用户和版本信息 "),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_2, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_3, "用户: " + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.userInfo), 1 /* TEXT */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_4, "版本: " + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.appVersion), 1 /* TEXT */)
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(" 右侧:其他状态信息 "),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_5, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_6, "服务地址: " + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.serverUrl), 1 /* TEXT */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_7, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", {
class: "error-link",
onClick: _cache[0] || (_cache[0] = (...args) => ($setup.openLogFolder && $setup.openLogFolder(...args))),
title: "点击打开日志文件夹"
}, " 最近错误: " + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.errorCount), 1 /* TEXT */)
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_8, "内存: " + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.memoryUsage) + " MB", 1 /* TEXT */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_9, "系统内存: " + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.systemMemoryUsage), 1 /* TEXT */)
])
]))
}
/***/ }),
/***/ "./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/Toast.vue?vue&type=template&id=4eeeff11&scoped=true":
/*!**********************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/Toast.vue?vue&type=template&id=4eeeff11&scoped=true ***!
\**********************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ render: () => (/* binding */ render)
/* harmony export */ });
/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm-bundler.js");
const _hoisted_1 = { class: "toast-icon" }
const _hoisted_2 = { class: "toast-content" }
const _hoisted_3 = { class: "toast-title" }
const _hoisted_4 = {
key: 0,
class: "toast-message"
}
function render(_ctx, _cache, $props, $setup, $data, $options) {
return ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Transition, { name: "toast" }, {
default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [
($props.visible)
? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", {
key: 0,
class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)(["toast", $props.type])
}, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_1, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($options.icon), 1 /* TEXT */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_2, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_3, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.title), 1 /* TEXT */),
($props.content)
? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", _hoisted_4, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.content), 1 /* TEXT */))
: (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true)
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("button", {
class: "toast-close",
onClick: _cache[0] || (_cache[0] = (...args) => ($options.close && $options.close(...args)))
}, "×")
], 2 /* CLASS */))
: (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true)
]),
_: 1 /* STABLE */
}))
}
/***/ }),
/***/ "./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/History.vue?vue&type=template&id=5347d120&scoped=true":
/*!*******************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/History.vue?vue&type=template&id=5347d120&scoped=true ***!
\*******************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ render: () => (/* binding */ render)
/* harmony export */ });
/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm-bundler.js");
const _hoisted_1 = { class: "history-view" }
const _hoisted_2 = {
key: 0,
class: "empty-state"
}
const _hoisted_3 = {
key: 1,
class: "history-list"
}
const _hoisted_4 = { class: "history-date" }
const _hoisted_5 = { class: "history-stats" }
const _hoisted_6 = { class: "stat download" }
const _hoisted_7 = { class: "stat upload" }
const _hoisted_8 = { class: "stat ping" }
function render(_ctx, _cache, $props, $setup, $data, $options) {
return ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", _hoisted_1, [
_cache[0] || (_cache[0] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("h1", null, "Test History", -1 /* CACHED */)),
($setup.testResults.length === 0)
? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", _hoisted_2, " No speed tests recorded yet. "))
: ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", _hoisted_3, [
((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($setup.testResults, (result, index) => {
return ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", {
key: index,
class: "history-item"
}, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_4, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.formatDate(result.timestamp)), 1 /* TEXT */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_5, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_6, "↓ " + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(result.download) + " Mbps", 1 /* TEXT */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_7, "↑ " + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(result.upload) + " Mbps", 1 /* TEXT */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_8, "↔ " + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(result.ping) + " ms", 1 /* TEXT */)
])
]))
}), 128 /* KEYED_FRAGMENT */))
]))
]))
}
/***/ }),
/***/ "./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/Home.vue?vue&type=template&id=ecd3befa&scoped=true":
/*!****************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/Home.vue?vue&type=template&id=ecd3befa&scoped=true ***!
\****************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ render: () => (/* binding */ render)
/* harmony export */ });
/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm-bundler.js");
const _hoisted_1 = { class: "home" }
const _hoisted_2 = { class: "main-content" }
const _hoisted_3 = { class: "welcome-section" }
const _hoisted_4 = { class: "welcome-card" }
const _hoisted_5 = { class: "welcome-header" }
const _hoisted_6 = { class: "welcome-text" }
const _hoisted_7 = { key: 0 }
const _hoisted_8 = { key: 1 }
const _hoisted_9 = {
key: 2,
class: "subtitle"
}
const _hoisted_10 = {
key: 3,
class: "subtitle"
}
const _hoisted_11 = {
key: 0,
class: "login-section"
}
const _hoisted_12 = {
key: 0,
class: "features-section"
}
const _hoisted_13 = { class: "login-prompt-section" }
const _hoisted_14 = { class: "login-prompt-card" }
const _hoisted_15 = {
key: 2,
class: "todo-section"
}
const _hoisted_16 = { class: "section-header" }
const _hoisted_17 = { class: "todo-list" }
const _hoisted_18 = ["checked", "onChange"]
const _hoisted_19 = { class: "todo-text" }
const _hoisted_20 = { class: "todo-date" }
const _hoisted_21 = ["onClick"]
const _hoisted_22 = {
key: 3,
class: "recent-section"
}
const _hoisted_23 = { class: "activity-list" }
const _hoisted_24 = { class: "activity-icon" }
const _hoisted_25 = { class: "activity-content" }
const _hoisted_26 = { class: "activity-title" }
const _hoisted_27 = { class: "activity-time" }
function render(_ctx, _cache, $props, $setup, $data, $options) {
return ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", _hoisted_1, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(" 主要内容区域 "),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("main", _hoisted_2, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(" 欢迎区域 "),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("section", _hoisted_3, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_4, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_5, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_6, [
($options.isLoggedIn)
? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("h2", _hoisted_7, "欢迎回来," + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($options.currentUser?.name || $data.userInfo.name) + "!", 1 /* TEXT */))
: ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("h2", _hoisted_8, "欢迎光临,请登录!")),
($options.isLoggedIn)
? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("p", _hoisted_9, "今天是 " + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($data.currentDate) + ",您有 " + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($data.todoList.length) + " 个待办事项", 1 /* TEXT */))
: ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("p", _hoisted_10, "登录后享受更多功能"))
]),
(!$options.isLoggedIn)
? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", _hoisted_11, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("button", {
class: "login-btn",
onClick: _cache[0] || (_cache[0] = (...args) => ($options.showLoginModalHandler && $options.showLoginModalHandler(...args)))
}, _cache[7] || (_cache[7] = [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("i", { class: "icon" }, "🔐", -1 /* CACHED */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" 登录 ", -1 /* CACHED */)
]))
]))
: (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true)
])
])
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(" 功能卡片区域 "),
($options.isLoggedIn)
? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("section", _hoisted_12, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", {
class: "feature-card",
onClick: _cache[1] || (_cache[1] = (...args) => ($options.startSpeedTest && $options.startSpeedTest(...args)))
}, _cache[8] || (_cache[8] = [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", { class: "feature-icon" }, "⚡", -1 /* CACHED */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("h3", null, "开始速度测试", -1 /* CACHED */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("p", null, "测试您的网络连接速度", -1 /* CACHED */)
])),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", {
class: "feature-card",
onClick: _cache[2] || (_cache[2] = (...args) => ($options.viewHistory && $options.viewHistory(...args)))
}, _cache[9] || (_cache[9] = [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", { class: "feature-icon" }, "📊", -1 /* CACHED */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("h3", null, "查看历史", -1 /* CACHED */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("p", null, "查看历史测试记录", -1 /* CACHED */)
])),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", {
class: "feature-card",
onClick: _cache[3] || (_cache[3] = (...args) => ($options.openSettings && $options.openSettings(...args)))
}, _cache[10] || (_cache[10] = [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", { class: "feature-icon" }, "⚙", -1 /* CACHED */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("h3", null, "用户设置", -1 /* CACHED */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("p", null, "配置个人偏好", -1 /* CACHED */)
])),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", {
class: "feature-card",
onClick: _cache[4] || (_cache[4] = (...args) => ($options.exportData && $options.exportData(...args)))
}, _cache[11] || (_cache[11] = [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", { class: "feature-icon" }, "📤", -1 /* CACHED */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("h3", null, "导出数据", -1 /* CACHED */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("p", null, "导出测试数据", -1 /* CACHED */)
]))
]))
: ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, { key: 1 }, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(" 登录提示区域 "),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("section", _hoisted_13, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_14, [
_cache[13] || (_cache[13] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", { class: "prompt-icon" }, "🔒", -1 /* CACHED */)),
_cache[14] || (_cache[14] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("h3", null, "需要登录", -1 /* CACHED */)),
_cache[15] || (_cache[15] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("p", null, "登录后即可使用所有功能", -1 /* CACHED */)),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("button", {
class: "prompt-login-btn",
onClick: _cache[5] || (_cache[5] = (...args) => ($options.showLoginModalHandler && $options.showLoginModalHandler(...args)))
}, _cache[12] || (_cache[12] = [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("i", { class: "icon" }, "🔐", -1 /* CACHED */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" 立即登录 ", -1 /* CACHED */)
]))
])
])
], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */)),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(" 待办事项区域 "),
($options.isLoggedIn)
? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("section", _hoisted_15, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_16, [
_cache[16] || (_cache[16] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("h3", null, "📝 待办事项", -1 /* CACHED */)),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("button", {
class: "add-todo-btn",
onClick: _cache[6] || (_cache[6] = (...args) => ($options.addTodo && $options.addTodo(...args)))
}, "+ 添加")
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_17, [
((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($data.todoList, (todo) => {
return ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", {
key: todo.id,
class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)(["todo-item", { completed: todo.completed }])
}, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("input", {
type: "checkbox",
checked: todo.completed,
onChange: $event => ($options.toggleTodo(todo.id))
}, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_18),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_19, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(todo.text), 1 /* TEXT */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_20, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(todo.date), 1 /* TEXT */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("button", {
class: "delete-btn",
onClick: $event => ($options.deleteTodo(todo.id))
}, "🗑", 8 /* PROPS */, _hoisted_21)
], 2 /* CLASS */))
}), 128 /* KEYED_FRAGMENT */))
])
]))
: (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(" 最近活动区域 "),
($options.isLoggedIn)
? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("section", _hoisted_22, [
_cache[17] || (_cache[17] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("h3", null, "🕒 最近活动", -1 /* CACHED */)),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_23, [
((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($data.recentActivities, (activity) => {
return ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", {
key: activity.id,
class: "activity-item"
}, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_24, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(activity.icon), 1 /* TEXT */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_25, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_26, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(activity.title), 1 /* TEXT */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_27, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(activity.time), 1 /* TEXT */)
])
]))
}), 128 /* KEYED_FRAGMENT */))
])
]))
: (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true)
])
]))
}
/***/ }),
/***/ "./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/UserManagement.vue?vue&type=template&id=7338cb92&scoped=true":
/*!**************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/UserManagement.vue?vue&type=template&id=7338cb92&scoped=true ***!
\**************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ render: () => (/* binding */ render)
/* harmony export */ });
/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm-bundler.js");
const _hoisted_1 = { class: "user-management" }
const _hoisted_2 = { class: "page-header" }
const _hoisted_3 = { class: "search-bar" }
const _hoisted_4 = { class: "search-input" }
const _hoisted_5 = { class: "filters" }
const _hoisted_6 = ["value"]
const _hoisted_7 = { class: "user-table" }
const _hoisted_8 = { class: "role-tags" }
const _hoisted_9 = { class: "actions" }
const _hoisted_10 = ["onClick"]
const _hoisted_11 = ["onClick"]
const _hoisted_12 = { class: "pagination" }
const _hoisted_13 = ["disabled"]
const _hoisted_14 = { class: "page-info" }
const _hoisted_15 = ["disabled"]
const _hoisted_16 = { class: "modal-header" }
const _hoisted_17 = { class: "modal-body" }
const _hoisted_18 = { class: "form-group" }
const _hoisted_19 = ["disabled"]
const _hoisted_20 = {
key: 0,
class: "form-group"
}
const _hoisted_21 = { class: "form-group" }
const _hoisted_22 = { class: "form-group" }
const _hoisted_23 = { class: "form-group" }
const _hoisted_24 = { class: "form-group" }
const _hoisted_25 = { class: "role-checkboxes" }
const _hoisted_26 = ["value"]
const _hoisted_27 = { class: "form-actions" }
const _hoisted_28 = {
type: "submit",
class: "btn btn-primary"
}
function render(_ctx, _cache, $props, $setup, $data, $options) {
return ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", _hoisted_1, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_2, [
_cache[21] || (_cache[21] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("h2", null, "用户管理", -1 /* CACHED */)),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("button", {
class: "btn btn-primary",
onClick: _cache[0] || (_cache[0] = $event => ($setup.showAddUserModal = true))
}, _cache[20] || (_cache[20] = [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("i", { class: "icon" }, "+", -1 /* CACHED */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" 添加用户 ", -1 /* CACHED */)
]))
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(" 搜索和筛选 "),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_3, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_4, [
_cache[22] || (_cache[22] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("i", { class: "icon" }, "🔍", -1 /* CACHED */)),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("input", {
"onUpdate:modelValue": _cache[1] || (_cache[1] = $event => (($setup.searchQuery) = $event)),
type: "text",
placeholder: "搜索用户名、邮箱或手机号...",
onInput: _cache[2] || (_cache[2] = (...args) => ($setup.handleSearch && $setup.handleSearch(...args)))
}, null, 544 /* NEED_HYDRATION, NEED_PATCH */), [
[vue__WEBPACK_IMPORTED_MODULE_0__.vModelText, $setup.searchQuery]
])
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_5, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("select", {
"onUpdate:modelValue": _cache[3] || (_cache[3] = $event => (($setup.statusFilter) = $event)),
onChange: _cache[4] || (_cache[4] = (...args) => ($setup.handleFilter && $setup.handleFilter(...args)))
}, _cache[23] || (_cache[23] = [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("option", { value: "" }, "全部状态", -1 /* CACHED */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("option", { value: "1" }, "正常", -1 /* CACHED */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("option", { value: "2" }, "禁用", -1 /* CACHED */)
]), 544 /* NEED_HYDRATION, NEED_PATCH */), [
[vue__WEBPACK_IMPORTED_MODULE_0__.vModelSelect, $setup.statusFilter]
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("select", {
"onUpdate:modelValue": _cache[5] || (_cache[5] = $event => (($setup.roleFilter) = $event)),
onChange: _cache[6] || (_cache[6] = (...args) => ($setup.handleFilter && $setup.handleFilter(...args)))
}, [
_cache[24] || (_cache[24] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("option", { value: "" }, "全部角色", -1 /* CACHED */)),
((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($setup.roles, (role) => {
return ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("option", {
key: role.id,
value: role.id
}, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(role.name), 9 /* TEXT, PROPS */, _hoisted_6))
}), 128 /* KEYED_FRAGMENT */))
], 544 /* NEED_HYDRATION, NEED_PATCH */), [
[vue__WEBPACK_IMPORTED_MODULE_0__.vModelSelect, $setup.roleFilter]
])
])
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(" 用户列表 "),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_7, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("table", null, [
_cache[27] || (_cache[27] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("thead", null, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("tr", null, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("th", null, "ID"),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("th", null, "用户名"),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("th", null, "邮箱"),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("th", null, "手机号"),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("th", null, "状态"),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("th", null, "角色"),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("th", null, "创建时间"),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("th", null, "操作")
])
], -1 /* CACHED */)),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("tbody", null, [
((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($setup.filteredUsers, (user) => {
return ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("tr", {
key: user.id
}, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("td", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(user.id), 1 /* TEXT */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("td", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(user.username), 1 /* TEXT */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("td", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(user.email), 1 /* TEXT */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("td", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(user.phone), 1 /* TEXT */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("td", null, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", {
class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)(['status-badge', user.status === 1 ? 'active' : 'inactive'])
}, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(user.status === 1 ? '正常' : '禁用'), 3 /* TEXT, CLASS */)
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("td", null, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_8, [
((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)(user.roles, (role) => {
return ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("span", {
key: role.id,
class: "role-tag"
}, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(role.name), 1 /* TEXT */))
}), 128 /* KEYED_FRAGMENT */))
])
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("td", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.formatDate(user.created_at)), 1 /* TEXT */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("td", null, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_9, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("button", {
class: "btn btn-sm btn-info",
onClick: $event => ($setup.editUser(user))
}, [...(_cache[25] || (_cache[25] = [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("i", { class: "icon" }, "✏", -1 /* CACHED */)
]))], 8 /* PROPS */, _hoisted_10),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("button", {
class: "btn btn-sm btn-danger",
onClick: $event => ($setup.deleteUser(user.id))
}, [...(_cache[26] || (_cache[26] = [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("i", { class: "icon" }, "🗑", -1 /* CACHED */)
]))], 8 /* PROPS */, _hoisted_11)
])
])
]))
}), 128 /* KEYED_FRAGMENT */))
])
])
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(" 分页 "),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_12, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("button", {
disabled: $setup.currentPage === 1,
onClick: _cache[7] || (_cache[7] = $event => ($setup.changePage($setup.currentPage - 1))),
class: "btn btn-sm"
}, " 上一页 ", 8 /* PROPS */, _hoisted_13),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", _hoisted_14, " 第 " + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.currentPage) + " 页,共 " + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.totalPages) + " 页 ", 1 /* TEXT */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("button", {
disabled: $setup.currentPage === $setup.totalPages,
onClick: _cache[8] || (_cache[8] = $event => ($setup.changePage($setup.currentPage + 1))),
class: "btn btn-sm"
}, " 下一页 ", 8 /* PROPS */, _hoisted_15)
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(" 添加/编辑用户模态框 "),
($setup.showAddUserModal || $setup.showEditUserModal)
? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", {
key: 0,
class: "modal-overlay",
onClick: _cache[19] || (_cache[19] = (...args) => ($setup.closeModal && $setup.closeModal(...args)))
}, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", {
class: "modal",
onClick: _cache[18] || (_cache[18] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.withModifiers)(() => {}, ["stop"]))
}, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_16, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("h3", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.showEditUserModal ? '编辑用户' : '添加用户'), 1 /* TEXT */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("button", {
class: "close-btn",
onClick: _cache[9] || (_cache[9] = (...args) => ($setup.closeModal && $setup.closeModal(...args)))
}, "×")
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_17, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("form", {
onSubmit: _cache[17] || (_cache[17] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.withModifiers)((...args) => ($setup.submitUser && $setup.submitUser(...args)), ["prevent"]))
}, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_18, [
_cache[28] || (_cache[28] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("label", null, "用户名 *", -1 /* CACHED */)),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("input", {
"onUpdate:modelValue": _cache[10] || (_cache[10] = $event => (($setup.userForm.username) = $event)),
type: "text",
required: "",
disabled: $setup.showEditUserModal
}, null, 8 /* PROPS */, _hoisted_19), [
[vue__WEBPACK_IMPORTED_MODULE_0__.vModelText, $setup.userForm.username]
])
]),
(!$setup.showEditUserModal)
? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", _hoisted_20, [
_cache[29] || (_cache[29] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("label", null, "密码 *", -1 /* CACHED */)),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("input", {
"onUpdate:modelValue": _cache[11] || (_cache[11] = $event => (($setup.userForm.password) = $event)),
type: "password",
required: ""
}, null, 512 /* NEED_PATCH */), [
[vue__WEBPACK_IMPORTED_MODULE_0__.vModelText, $setup.userForm.password]
])
]))
: (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_21, [
_cache[30] || (_cache[30] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("label", null, "邮箱 *", -1 /* CACHED */)),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("input", {
"onUpdate:modelValue": _cache[12] || (_cache[12] = $event => (($setup.userForm.email) = $event)),
type: "email",
required: ""
}, null, 512 /* NEED_PATCH */), [
[vue__WEBPACK_IMPORTED_MODULE_0__.vModelText, $setup.userForm.email]
])
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_22, [
_cache[31] || (_cache[31] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("label", null, "手机号", -1 /* CACHED */)),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("input", {
"onUpdate:modelValue": _cache[13] || (_cache[13] = $event => (($setup.userForm.phone) = $event)),
type: "tel"
}, null, 512 /* NEED_PATCH */), [
[vue__WEBPACK_IMPORTED_MODULE_0__.vModelText, $setup.userForm.phone]
])
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_23, [
_cache[33] || (_cache[33] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("label", null, "状态", -1 /* CACHED */)),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("select", {
"onUpdate:modelValue": _cache[14] || (_cache[14] = $event => (($setup.userForm.status) = $event))
}, _cache[32] || (_cache[32] = [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("option", { value: "1" }, "正常", -1 /* CACHED */),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("option", { value: "2" }, "禁用", -1 /* CACHED */)
]), 512 /* NEED_PATCH */), [
[vue__WEBPACK_IMPORTED_MODULE_0__.vModelSelect, $setup.userForm.status]
])
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_24, [
_cache[34] || (_cache[34] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("label", null, "角色", -1 /* CACHED */)),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_25, [
((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($setup.roles, (role) => {
return ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("label", {
key: role.id,
class: "checkbox-item"
}, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("input", {
type: "checkbox",
value: role.id,
"onUpdate:modelValue": _cache[15] || (_cache[15] = $event => (($setup.userForm.roleIds) = $event))
}, null, 8 /* PROPS */, _hoisted_26), [
[vue__WEBPACK_IMPORTED_MODULE_0__.vModelCheckbox, $setup.userForm.roleIds]
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" " + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(role.name), 1 /* TEXT */)
]))
}), 128 /* KEYED_FRAGMENT */))
])
]),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_27, [
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("button", {
type: "button",
class: "btn btn-secondary",
onClick: _cache[16] || (_cache[16] = (...args) => ($setup.closeModal && $setup.closeModal(...args)))
}, " 取消 "),
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("button", _hoisted_28, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($setup.showEditUserModal ? '更新' : '创建'), 1 /* TEXT */)
])
], 32 /* NEED_HYDRATION */)
])
])
]))
: (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true)
]))
}
/***/ }),
/***/ "./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/App.vue?vue&type=style&index=0&id=2fa9d48e&lang=css":
/*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/App.vue?vue&type=style&index=0&id=2fa9d48e&lang=css ***!
\*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
// style-loader: Adds some css to the DOM by adding a <style> tag
// load the styles
var content = __webpack_require__(/*! !!../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../node_modules/vue-loader/dist/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./App.vue?vue&type=style&index=0&id=2fa9d48e&lang=css */ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/App.vue?vue&type=style&index=0&id=2fa9d48e&lang=css");
if(content.__esModule) content = content.default;
if(typeof content === 'string') content = [[module.id, content, '']];
if(content.locals) module.exports = content.locals;
// add the styles to the DOM
var add = (__webpack_require__(/*! !../../node_modules/vue-style-loader/lib/addStylesClient.js */ "./node_modules/vue-style-loader/lib/addStylesClient.js")["default"])
var update = add("66b1ebb3", content, false, {"sourceMap":false,"shadowMode":false});
// Hot Module Replacement
if(true) {
// When the styles change, update the <style> tags
if(!content.locals) {
module.hot.accept(/*! !!../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../node_modules/vue-loader/dist/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./App.vue?vue&type=style&index=0&id=2fa9d48e&lang=css */ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/App.vue?vue&type=style&index=0&id=2fa9d48e&lang=css", function() {
var newContent = __webpack_require__(/*! !!../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../node_modules/vue-loader/dist/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./App.vue?vue&type=style&index=0&id=2fa9d48e&lang=css */ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/App.vue?vue&type=style&index=0&id=2fa9d48e&lang=css");
if(newContent.__esModule) newContent = newContent.default;
if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
update(newContent);
});
}
// When the module is disposed, remove the <style> tags
module.hot.dispose(function() { update(); });
}
/***/ }),
/***/ "./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/LoginModal.vue?vue&type=style&index=0&id=443b36ca&scoped=true&lang=css":
/*!*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/LoginModal.vue?vue&type=style&index=0&id=443b36ca&scoped=true&lang=css ***!
\*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
// style-loader: Adds some css to the DOM by adding a <style> tag
// load the styles
var content = __webpack_require__(/*! !!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./LoginModal.vue?vue&type=style&index=0&id=443b36ca&scoped=true&lang=css */ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/LoginModal.vue?vue&type=style&index=0&id=443b36ca&scoped=true&lang=css");
if(content.__esModule) content = content.default;
if(typeof content === 'string') content = [[module.id, content, '']];
if(content.locals) module.exports = content.locals;
// add the styles to the DOM
var add = (__webpack_require__(/*! !../../../node_modules/vue-style-loader/lib/addStylesClient.js */ "./node_modules/vue-style-loader/lib/addStylesClient.js")["default"])
var update = add("0d714b30", content, false, {"sourceMap":false,"shadowMode":false});
// Hot Module Replacement
if(true) {
// When the styles change, update the <style> tags
if(!content.locals) {
module.hot.accept(/*! !!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./LoginModal.vue?vue&type=style&index=0&id=443b36ca&scoped=true&lang=css */ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/LoginModal.vue?vue&type=style&index=0&id=443b36ca&scoped=true&lang=css", function() {
var newContent = __webpack_require__(/*! !!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./LoginModal.vue?vue&type=style&index=0&id=443b36ca&scoped=true&lang=css */ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/LoginModal.vue?vue&type=style&index=0&id=443b36ca&scoped=true&lang=css");
if(newContent.__esModule) newContent = newContent.default;
if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
update(newContent);
});
}
// When the module is disposed, remove the <style> tags
module.hot.dispose(function() { update(); });
}
/***/ }),
/***/ "./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/MainLayout.vue?vue&type=style&index=0&id=a4b9ee6e&scoped=true&lang=css":
/*!*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/MainLayout.vue?vue&type=style&index=0&id=a4b9ee6e&scoped=true&lang=css ***!
\*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
// style-loader: Adds some css to the DOM by adding a <style> tag
// load the styles
var content = __webpack_require__(/*! !!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./MainLayout.vue?vue&type=style&index=0&id=a4b9ee6e&scoped=true&lang=css */ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/MainLayout.vue?vue&type=style&index=0&id=a4b9ee6e&scoped=true&lang=css");
if(content.__esModule) content = content.default;
if(typeof content === 'string') content = [[module.id, content, '']];
if(content.locals) module.exports = content.locals;
// add the styles to the DOM
var add = (__webpack_require__(/*! !../../../node_modules/vue-style-loader/lib/addStylesClient.js */ "./node_modules/vue-style-loader/lib/addStylesClient.js")["default"])
var update = add("648e7a99", content, false, {"sourceMap":false,"shadowMode":false});
// Hot Module Replacement
if(true) {
// When the styles change, update the <style> tags
if(!content.locals) {
module.hot.accept(/*! !!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./MainLayout.vue?vue&type=style&index=0&id=a4b9ee6e&scoped=true&lang=css */ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/MainLayout.vue?vue&type=style&index=0&id=a4b9ee6e&scoped=true&lang=css", function() {
var newContent = __webpack_require__(/*! !!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./MainLayout.vue?vue&type=style&index=0&id=a4b9ee6e&scoped=true&lang=css */ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/MainLayout.vue?vue&type=style&index=0&id=a4b9ee6e&scoped=true&lang=css");
if(newContent.__esModule) newContent = newContent.default;
if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
update(newContent);
});
}
// When the module is disposed, remove the <style> tags
module.hot.dispose(function() { update(); });
}
/***/ }),
/***/ "./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/StatusBar.vue?vue&type=style&index=0&id=126429ab&scoped=true&lang=css":
/*!************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/StatusBar.vue?vue&type=style&index=0&id=126429ab&scoped=true&lang=css ***!
\************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
// style-loader: Adds some css to the DOM by adding a <style> tag
// load the styles
var content = __webpack_require__(/*! !!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./StatusBar.vue?vue&type=style&index=0&id=126429ab&scoped=true&lang=css */ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/StatusBar.vue?vue&type=style&index=0&id=126429ab&scoped=true&lang=css");
if(content.__esModule) content = content.default;
if(typeof content === 'string') content = [[module.id, content, '']];
if(content.locals) module.exports = content.locals;
// add the styles to the DOM
var add = (__webpack_require__(/*! !../../../node_modules/vue-style-loader/lib/addStylesClient.js */ "./node_modules/vue-style-loader/lib/addStylesClient.js")["default"])
var update = add("252fcf5e", content, false, {"sourceMap":false,"shadowMode":false});
// Hot Module Replacement
if(true) {
// When the styles change, update the <style> tags
if(!content.locals) {
module.hot.accept(/*! !!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./StatusBar.vue?vue&type=style&index=0&id=126429ab&scoped=true&lang=css */ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/StatusBar.vue?vue&type=style&index=0&id=126429ab&scoped=true&lang=css", function() {
var newContent = __webpack_require__(/*! !!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./StatusBar.vue?vue&type=style&index=0&id=126429ab&scoped=true&lang=css */ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/StatusBar.vue?vue&type=style&index=0&id=126429ab&scoped=true&lang=css");
if(newContent.__esModule) newContent = newContent.default;
if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
update(newContent);
});
}
// When the module is disposed, remove the <style> tags
module.hot.dispose(function() { update(); });
}
/***/ }),
/***/ "./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/Toast.vue?vue&type=style&index=0&id=4eeeff11&scoped=true&lang=css":
/*!********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/Toast.vue?vue&type=style&index=0&id=4eeeff11&scoped=true&lang=css ***!
\********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
// style-loader: Adds some css to the DOM by adding a <style> tag
// load the styles
var content = __webpack_require__(/*! !!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./Toast.vue?vue&type=style&index=0&id=4eeeff11&scoped=true&lang=css */ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/Toast.vue?vue&type=style&index=0&id=4eeeff11&scoped=true&lang=css");
if(content.__esModule) content = content.default;
if(typeof content === 'string') content = [[module.id, content, '']];
if(content.locals) module.exports = content.locals;
// add the styles to the DOM
var add = (__webpack_require__(/*! !../../../node_modules/vue-style-loader/lib/addStylesClient.js */ "./node_modules/vue-style-loader/lib/addStylesClient.js")["default"])
var update = add("a536019a", content, false, {"sourceMap":false,"shadowMode":false});
// Hot Module Replacement
if(true) {
// When the styles change, update the <style> tags
if(!content.locals) {
module.hot.accept(/*! !!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./Toast.vue?vue&type=style&index=0&id=4eeeff11&scoped=true&lang=css */ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/Toast.vue?vue&type=style&index=0&id=4eeeff11&scoped=true&lang=css", function() {
var newContent = __webpack_require__(/*! !!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./Toast.vue?vue&type=style&index=0&id=4eeeff11&scoped=true&lang=css */ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/Toast.vue?vue&type=style&index=0&id=4eeeff11&scoped=true&lang=css");
if(newContent.__esModule) newContent = newContent.default;
if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
update(newContent);
});
}
// When the module is disposed, remove the <style> tags
module.hot.dispose(function() { update(); });
}
/***/ }),
/***/ "./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/History.vue?vue&type=style&index=0&id=5347d120&scoped=true&lang=css":
/*!*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/History.vue?vue&type=style&index=0&id=5347d120&scoped=true&lang=css ***!
\*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
// style-loader: Adds some css to the DOM by adding a <style> tag
// load the styles
var content = __webpack_require__(/*! !!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./History.vue?vue&type=style&index=0&id=5347d120&scoped=true&lang=css */ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/History.vue?vue&type=style&index=0&id=5347d120&scoped=true&lang=css");
if(content.__esModule) content = content.default;
if(typeof content === 'string') content = [[module.id, content, '']];
if(content.locals) module.exports = content.locals;
// add the styles to the DOM
var add = (__webpack_require__(/*! !../../../node_modules/vue-style-loader/lib/addStylesClient.js */ "./node_modules/vue-style-loader/lib/addStylesClient.js")["default"])
var update = add("44b9b76c", content, false, {"sourceMap":false,"shadowMode":false});
// Hot Module Replacement
if(true) {
// When the styles change, update the <style> tags
if(!content.locals) {
module.hot.accept(/*! !!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./History.vue?vue&type=style&index=0&id=5347d120&scoped=true&lang=css */ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/History.vue?vue&type=style&index=0&id=5347d120&scoped=true&lang=css", function() {
var newContent = __webpack_require__(/*! !!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./History.vue?vue&type=style&index=0&id=5347d120&scoped=true&lang=css */ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/History.vue?vue&type=style&index=0&id=5347d120&scoped=true&lang=css");
if(newContent.__esModule) newContent = newContent.default;
if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
update(newContent);
});
}
// When the module is disposed, remove the <style> tags
module.hot.dispose(function() { update(); });
}
/***/ }),
/***/ "./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/Home.vue?vue&type=style&index=0&id=ecd3befa&scoped=true&lang=css":
/*!**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/Home.vue?vue&type=style&index=0&id=ecd3befa&scoped=true&lang=css ***!
\**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
// style-loader: Adds some css to the DOM by adding a <style> tag
// load the styles
var content = __webpack_require__(/*! !!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./Home.vue?vue&type=style&index=0&id=ecd3befa&scoped=true&lang=css */ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/Home.vue?vue&type=style&index=0&id=ecd3befa&scoped=true&lang=css");
if(content.__esModule) content = content.default;
if(typeof content === 'string') content = [[module.id, content, '']];
if(content.locals) module.exports = content.locals;
// add the styles to the DOM
var add = (__webpack_require__(/*! !../../../node_modules/vue-style-loader/lib/addStylesClient.js */ "./node_modules/vue-style-loader/lib/addStylesClient.js")["default"])
var update = add("7135627d", content, false, {"sourceMap":false,"shadowMode":false});
// Hot Module Replacement
if(true) {
// When the styles change, update the <style> tags
if(!content.locals) {
module.hot.accept(/*! !!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./Home.vue?vue&type=style&index=0&id=ecd3befa&scoped=true&lang=css */ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/Home.vue?vue&type=style&index=0&id=ecd3befa&scoped=true&lang=css", function() {
var newContent = __webpack_require__(/*! !!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./Home.vue?vue&type=style&index=0&id=ecd3befa&scoped=true&lang=css */ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/Home.vue?vue&type=style&index=0&id=ecd3befa&scoped=true&lang=css");
if(newContent.__esModule) newContent = newContent.default;
if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
update(newContent);
});
}
// When the module is disposed, remove the <style> tags
module.hot.dispose(function() { update(); });
}
/***/ }),
/***/ "./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/UserManagement.vue?vue&type=style&index=0&id=7338cb92&scoped=true&lang=css":
/*!************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/UserManagement.vue?vue&type=style&index=0&id=7338cb92&scoped=true&lang=css ***!
\************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
// style-loader: Adds some css to the DOM by adding a <style> tag
// load the styles
var content = __webpack_require__(/*! !!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./UserManagement.vue?vue&type=style&index=0&id=7338cb92&scoped=true&lang=css */ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/UserManagement.vue?vue&type=style&index=0&id=7338cb92&scoped=true&lang=css");
if(content.__esModule) content = content.default;
if(typeof content === 'string') content = [[module.id, content, '']];
if(content.locals) module.exports = content.locals;
// add the styles to the DOM
var add = (__webpack_require__(/*! !../../../node_modules/vue-style-loader/lib/addStylesClient.js */ "./node_modules/vue-style-loader/lib/addStylesClient.js")["default"])
var update = add("4749f266", content, false, {"sourceMap":false,"shadowMode":false});
// Hot Module Replacement
if(true) {
// When the styles change, update the <style> tags
if(!content.locals) {
module.hot.accept(/*! !!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./UserManagement.vue?vue&type=style&index=0&id=7338cb92&scoped=true&lang=css */ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/UserManagement.vue?vue&type=style&index=0&id=7338cb92&scoped=true&lang=css", function() {
var newContent = __webpack_require__(/*! !!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./UserManagement.vue?vue&type=style&index=0&id=7338cb92&scoped=true&lang=css */ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/UserManagement.vue?vue&type=style&index=0&id=7338cb92&scoped=true&lang=css");
if(newContent.__esModule) newContent = newContent.default;
if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
update(newContent);
});
}
// When the module is disposed, remove the <style> tags
module.hot.dispose(function() { update(); });
}
/***/ }),
/***/ "./src/config/app.config.js":
/*!**********************************!*\
!*** ./src/config/app.config.js ***!
\**********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ appConfig: () => (/* binding */ appConfig),
/* harmony export */ getApiBaseUrl: () => (/* binding */ getApiBaseUrl),
/* harmony export */ getCurrentConfig: () => (/* binding */ getCurrentConfig),
/* harmony export */ getFinalConfig: () => (/* binding */ getFinalConfig),
/* harmony export */ getServerUrl: () => (/* binding */ getServerUrl),
/* harmony export */ getUserConfig: () => (/* binding */ getUserConfig),
/* harmony export */ getWsUrl: () => (/* binding */ getWsUrl)
/* harmony export */ });
/* harmony import */ var _env_config_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./env.config.js */ "./src/config/env.config.js");
// 应用配置文件
const appConfig = {
// 开发环境配置
development: {
apiBaseUrl: _env_config_js__WEBPACK_IMPORTED_MODULE_0__.envConfig.apiUrl ? `${_env_config_js__WEBPACK_IMPORTED_MODULE_0__.envConfig.apiUrl}/api` : 'http://localhost:8080/api',
serverUrl: _env_config_js__WEBPACK_IMPORTED_MODULE_0__.envConfig.serverUrl || 'http://localhost:8080',
wsUrl: _env_config_js__WEBPACK_IMPORTED_MODULE_0__.envConfig.wsUrl || 'ws://localhost:8080/ws'
},
// 生产环境配置
production: {
apiBaseUrl: _env_config_js__WEBPACK_IMPORTED_MODULE_0__.envConfig.apiUrl ? `${_env_config_js__WEBPACK_IMPORTED_MODULE_0__.envConfig.apiUrl}/api` : 'https://your-production-domain.com/api',
serverUrl: _env_config_js__WEBPACK_IMPORTED_MODULE_0__.envConfig.serverUrl || 'https://your-production-domain.com',
wsUrl: _env_config_js__WEBPACK_IMPORTED_MODULE_0__.envConfig.wsUrl || 'wss://your-production-domain.com/ws'
},
// 测试环境配置
test: {
apiBaseUrl: _env_config_js__WEBPACK_IMPORTED_MODULE_0__.envConfig.apiUrl ? `${_env_config_js__WEBPACK_IMPORTED_MODULE_0__.envConfig.apiUrl}/api` : 'http://localhost:8081/api',
serverUrl: _env_config_js__WEBPACK_IMPORTED_MODULE_0__.envConfig.serverUrl || 'http://localhost:8081',
wsUrl: _env_config_js__WEBPACK_IMPORTED_MODULE_0__.envConfig.wsUrl || 'ws://localhost:8081/ws'
}
};
// 获取当前环境配置
function getCurrentConfig() {
const env = "development" || 0;
return appConfig[env] || appConfig.development;
}
// 获取API基础URL
function getApiBaseUrl() {
return getCurrentConfig().apiBaseUrl;
}
// 获取服务器URL
function getServerUrl() {
return getCurrentConfig().serverUrl;
}
// 获取WebSocket URL
function getWsUrl() {
return getCurrentConfig().wsUrl;
}
// 从localStorage获取自定义配置(如果用户有设置的话)
function getUserConfig() {
try {
const settings = localStorage.getItem('gofaster-settings');
if (settings) {
const parsed = JSON.parse(settings);
return {
apiBaseUrl: parsed.apiUrl ? `${parsed.apiUrl}/api` : null,
serverUrl: parsed.apiUrl || null
};
}
} catch (error) {
console.warn('解析用户配置失败:', error);
}
return null;
}
// 获取最终的配置(优先使用用户配置,否则使用环境配置)
function getFinalConfig() {
const userConfig = getUserConfig();
const envConfig = getCurrentConfig();
return {
apiBaseUrl: userConfig?.apiBaseUrl || envConfig.apiBaseUrl,
serverUrl: userConfig?.serverUrl || envConfig.serverUrl,
wsUrl: envConfig.wsUrl
};
}
/***/ }),
/***/ "./src/config/env.config.js":
/*!**********************************!*\
!*** ./src/config/env.config.js ***!
\**********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ envConfig: () => (/* binding */ envConfig),
/* harmony export */ getEnvConfigInfo: () => (/* binding */ getEnvConfigInfo),
/* harmony export */ hasEnvConfig: () => (/* binding */ hasEnvConfig)
/* harmony export */ });
// 环境配置文件
// 可以通过环境变量覆盖默认配置
const envConfig = {
// 从环境变量获取配置,如果没有设置则使用默认值
apiUrl: ({"NODE_ENV":"development","BASE_URL":""}).VUE_APP_API_URL || null,
serverUrl: ({"NODE_ENV":"development","BASE_URL":""}).VUE_APP_SERVER_URL || null,
wsUrl: ({"NODE_ENV":"development","BASE_URL":""}).VUE_APP_WS_URL || null,
// 是否启用调试模式
debug: "development" === 'development',
// 日志级别
logLevel: ({"NODE_ENV":"development","BASE_URL":""}).VUE_APP_LOG_LEVEL || 'info'
};
// 检查是否有环境变量配置
function hasEnvConfig() {
return !!(envConfig.apiUrl || envConfig.serverUrl || envConfig.wsUrl);
}
// 获取环境配置的说明
function getEnvConfigInfo() {
const configs = [];
if (envConfig.apiUrl) configs.push(`API: ${envConfig.apiUrl}`);
if (envConfig.serverUrl) configs.push(`Server: ${envConfig.serverUrl}`);
if (envConfig.wsUrl) configs.push(`WebSocket: ${envConfig.wsUrl}`);
return configs.length > 0 ? configs.join(', ') : '使用默认配置';
}
/***/ }),
/***/ "./src/renderer/App.vue":
/*!******************************!*\
!*** ./src/renderer/App.vue ***!
\******************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _App_vue_vue_type_template_id_2fa9d48e__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./App.vue?vue&type=template&id=2fa9d48e */ "./src/renderer/App.vue?vue&type=template&id=2fa9d48e");
/* harmony import */ var _App_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./App.vue?vue&type=script&lang=js */ "./src/renderer/App.vue?vue&type=script&lang=js");
/* harmony import */ var _App_vue_vue_type_style_index_0_id_2fa9d48e_lang_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./App.vue?vue&type=style&index=0&id=2fa9d48e&lang=css */ "./src/renderer/App.vue?vue&type=style&index=0&id=2fa9d48e&lang=css");
/* harmony import */ var _node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../node_modules/vue-loader/dist/exportHelper.js */ "./node_modules/vue-loader/dist/exportHelper.js");
;
const __exports__ = /*#__PURE__*/(0,_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__["default"])(_App_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__["default"], [['render',_App_vue_vue_type_template_id_2fa9d48e__WEBPACK_IMPORTED_MODULE_0__.render],['__file',"src/renderer/App.vue"]])
/* hot reload */
if (true) {
__exports__.__hmrId = "2fa9d48e"
const api = __VUE_HMR_RUNTIME__
module.hot.accept()
if (!api.createRecord('2fa9d48e', __exports__)) {
api.reload('2fa9d48e', __exports__)
}
module.hot.accept(/*! ./App.vue?vue&type=template&id=2fa9d48e */ "./src/renderer/App.vue?vue&type=template&id=2fa9d48e", __WEBPACK_OUTDATED_DEPENDENCIES__ => { /* harmony import */ _App_vue_vue_type_template_id_2fa9d48e__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./App.vue?vue&type=template&id=2fa9d48e */ "./src/renderer/App.vue?vue&type=template&id=2fa9d48e");
return (() => {
api.rerender('2fa9d48e', _App_vue_vue_type_template_id_2fa9d48e__WEBPACK_IMPORTED_MODULE_0__.render)
})(__WEBPACK_OUTDATED_DEPENDENCIES__); })
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (__exports__);
/***/ }),
/***/ "./src/renderer/App.vue?vue&type=script&lang=js":
/*!******************************************************!*\
!*** ./src/renderer/App.vue?vue&type=script&lang=js ***!
\******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* reexport safe */ _node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_App_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__["default"])
/* harmony export */ });
/* harmony import */ var _node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_App_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./App.vue?vue&type=script&lang=js */ "./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/App.vue?vue&type=script&lang=js");
/***/ }),
/***/ "./src/renderer/App.vue?vue&type=style&index=0&id=2fa9d48e&lang=css":
/*!**************************************************************************!*\
!*** ./src/renderer/App.vue?vue&type=style&index=0&id=2fa9d48e&lang=css ***!
\**************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_App_vue_vue_type_style_index_0_id_2fa9d48e_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../node_modules/vue-loader/dist/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./App.vue?vue&type=style&index=0&id=2fa9d48e&lang=css */ "./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/App.vue?vue&type=style&index=0&id=2fa9d48e&lang=css");
/* harmony import */ var _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_App_vue_vue_type_style_index_0_id_2fa9d48e_lang_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_App_vue_vue_type_style_index_0_id_2fa9d48e_lang_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};
/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_App_vue_vue_type_style_index_0_id_2fa9d48e_lang_css__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== "default") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_App_vue_vue_type_style_index_0_id_2fa9d48e_lang_css__WEBPACK_IMPORTED_MODULE_0__[__WEBPACK_IMPORT_KEY__]
/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);
/***/ }),
/***/ "./src/renderer/App.vue?vue&type=template&id=2fa9d48e":
/*!************************************************************!*\
!*** ./src/renderer/App.vue?vue&type=template&id=2fa9d48e ***!
\************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ render: () => (/* reexport safe */ _node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_App_vue_vue_type_template_id_2fa9d48e__WEBPACK_IMPORTED_MODULE_0__.render)
/* harmony export */ });
/* harmony import */ var _node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_App_vue_vue_type_template_id_2fa9d48e__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./App.vue?vue&type=template&id=2fa9d48e */ "./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/App.vue?vue&type=template&id=2fa9d48e");
/***/ }),
/***/ "./src/renderer/assets/fonts.css":
/*!***************************************!*\
!*** ./src/renderer/assets/fonts.css ***!
\***************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
// style-loader: Adds some css to the DOM by adding a <style> tag
// load the styles
var content = __webpack_require__(/*! !!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-14.use[1]!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-14.use[2]!./fonts.css */ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-14.use[1]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-14.use[2]!./src/renderer/assets/fonts.css");
if(content.__esModule) content = content.default;
if(typeof content === 'string') content = [[module.id, content, '']];
if(content.locals) module.exports = content.locals;
// add the styles to the DOM
var add = (__webpack_require__(/*! !../../../node_modules/vue-style-loader/lib/addStylesClient.js */ "./node_modules/vue-style-loader/lib/addStylesClient.js")["default"])
var update = add("6c3b8f5f", content, false, {"sourceMap":false,"shadowMode":false});
// Hot Module Replacement
if(true) {
// When the styles change, update the <style> tags
if(!content.locals) {
module.hot.accept(/*! !!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-14.use[1]!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-14.use[2]!./fonts.css */ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-14.use[1]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-14.use[2]!./src/renderer/assets/fonts.css", function() {
var newContent = __webpack_require__(/*! !!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-14.use[1]!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-14.use[2]!./fonts.css */ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-14.use[1]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-14.use[2]!./src/renderer/assets/fonts.css");
if(newContent.__esModule) newContent = newContent.default;
if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
update(newContent);
});
}
// When the module is disposed, remove the <style> tags
module.hot.dispose(function() { update(); });
}
/***/ }),
/***/ "./src/renderer/assets/themes.css":
/*!****************************************!*\
!*** ./src/renderer/assets/themes.css ***!
\****************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
// style-loader: Adds some css to the DOM by adding a <style> tag
// load the styles
var content = __webpack_require__(/*! !!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-14.use[1]!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-14.use[2]!./themes.css */ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-14.use[1]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-14.use[2]!./src/renderer/assets/themes.css");
if(content.__esModule) content = content.default;
if(typeof content === 'string') content = [[module.id, content, '']];
if(content.locals) module.exports = content.locals;
// add the styles to the DOM
var add = (__webpack_require__(/*! !../../../node_modules/vue-style-loader/lib/addStylesClient.js */ "./node_modules/vue-style-loader/lib/addStylesClient.js")["default"])
var update = add("e3933172", content, false, {"sourceMap":false,"shadowMode":false});
// Hot Module Replacement
if(true) {
// When the styles change, update the <style> tags
if(!content.locals) {
module.hot.accept(/*! !!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-14.use[1]!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-14.use[2]!./themes.css */ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-14.use[1]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-14.use[2]!./src/renderer/assets/themes.css", function() {
var newContent = __webpack_require__(/*! !!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-14.use[1]!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-14.use[2]!./themes.css */ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-14.use[1]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-14.use[2]!./src/renderer/assets/themes.css");
if(newContent.__esModule) newContent = newContent.default;
if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
update(newContent);
});
}
// When the module is disposed, remove the <style> tags
module.hot.dispose(function() { update(); });
}
/***/ }),
/***/ "./src/renderer/components/LoginModal.vue":
/*!************************************************!*\
!*** ./src/renderer/components/LoginModal.vue ***!
\************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _LoginModal_vue_vue_type_template_id_443b36ca_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./LoginModal.vue?vue&type=template&id=443b36ca&scoped=true */ "./src/renderer/components/LoginModal.vue?vue&type=template&id=443b36ca&scoped=true");
/* harmony import */ var _LoginModal_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./LoginModal.vue?vue&type=script&lang=js */ "./src/renderer/components/LoginModal.vue?vue&type=script&lang=js");
/* harmony import */ var _LoginModal_vue_vue_type_style_index_0_id_443b36ca_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./LoginModal.vue?vue&type=style&index=0&id=443b36ca&scoped=true&lang=css */ "./src/renderer/components/LoginModal.vue?vue&type=style&index=0&id=443b36ca&scoped=true&lang=css");
/* harmony import */ var _node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../node_modules/vue-loader/dist/exportHelper.js */ "./node_modules/vue-loader/dist/exportHelper.js");
;
const __exports__ = /*#__PURE__*/(0,_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__["default"])(_LoginModal_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__["default"], [['render',_LoginModal_vue_vue_type_template_id_443b36ca_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render],['__scopeId',"data-v-443b36ca"],['__file',"src/renderer/components/LoginModal.vue"]])
/* hot reload */
if (true) {
__exports__.__hmrId = "443b36ca"
const api = __VUE_HMR_RUNTIME__
module.hot.accept()
if (!api.createRecord('443b36ca', __exports__)) {
api.reload('443b36ca', __exports__)
}
module.hot.accept(/*! ./LoginModal.vue?vue&type=template&id=443b36ca&scoped=true */ "./src/renderer/components/LoginModal.vue?vue&type=template&id=443b36ca&scoped=true", __WEBPACK_OUTDATED_DEPENDENCIES__ => { /* harmony import */ _LoginModal_vue_vue_type_template_id_443b36ca_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./LoginModal.vue?vue&type=template&id=443b36ca&scoped=true */ "./src/renderer/components/LoginModal.vue?vue&type=template&id=443b36ca&scoped=true");
return (() => {
api.rerender('443b36ca', _LoginModal_vue_vue_type_template_id_443b36ca_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render)
})(__WEBPACK_OUTDATED_DEPENDENCIES__); })
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (__exports__);
/***/ }),
/***/ "./src/renderer/components/LoginModal.vue?vue&type=script&lang=js":
/*!************************************************************************!*\
!*** ./src/renderer/components/LoginModal.vue?vue&type=script&lang=js ***!
\************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* reexport safe */ _node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_LoginModal_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__["default"])
/* harmony export */ });
/* harmony import */ var _node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_LoginModal_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./LoginModal.vue?vue&type=script&lang=js */ "./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/LoginModal.vue?vue&type=script&lang=js");
/***/ }),
/***/ "./src/renderer/components/LoginModal.vue?vue&type=style&index=0&id=443b36ca&scoped=true&lang=css":
/*!********************************************************************************************************!*\
!*** ./src/renderer/components/LoginModal.vue?vue&type=style&index=0&id=443b36ca&scoped=true&lang=css ***!
\********************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_LoginModal_vue_vue_type_style_index_0_id_443b36ca_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./LoginModal.vue?vue&type=style&index=0&id=443b36ca&scoped=true&lang=css */ "./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/LoginModal.vue?vue&type=style&index=0&id=443b36ca&scoped=true&lang=css");
/* harmony import */ var _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_LoginModal_vue_vue_type_style_index_0_id_443b36ca_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_LoginModal_vue_vue_type_style_index_0_id_443b36ca_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};
/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_LoginModal_vue_vue_type_style_index_0_id_443b36ca_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== "default") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_LoginModal_vue_vue_type_style_index_0_id_443b36ca_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__[__WEBPACK_IMPORT_KEY__]
/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);
/***/ }),
/***/ "./src/renderer/components/LoginModal.vue?vue&type=template&id=443b36ca&scoped=true":
/*!******************************************************************************************!*\
!*** ./src/renderer/components/LoginModal.vue?vue&type=template&id=443b36ca&scoped=true ***!
\******************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ render: () => (/* reexport safe */ _node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_LoginModal_vue_vue_type_template_id_443b36ca_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render)
/* harmony export */ });
/* harmony import */ var _node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_LoginModal_vue_vue_type_template_id_443b36ca_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./LoginModal.vue?vue&type=template&id=443b36ca&scoped=true */ "./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/LoginModal.vue?vue&type=template&id=443b36ca&scoped=true");
/***/ }),
/***/ "./src/renderer/components/MainLayout.vue":
/*!************************************************!*\
!*** ./src/renderer/components/MainLayout.vue ***!
\************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _MainLayout_vue_vue_type_template_id_a4b9ee6e_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./MainLayout.vue?vue&type=template&id=a4b9ee6e&scoped=true */ "./src/renderer/components/MainLayout.vue?vue&type=template&id=a4b9ee6e&scoped=true");
/* harmony import */ var _MainLayout_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./MainLayout.vue?vue&type=script&lang=js */ "./src/renderer/components/MainLayout.vue?vue&type=script&lang=js");
/* harmony import */ var _MainLayout_vue_vue_type_style_index_0_id_a4b9ee6e_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./MainLayout.vue?vue&type=style&index=0&id=a4b9ee6e&scoped=true&lang=css */ "./src/renderer/components/MainLayout.vue?vue&type=style&index=0&id=a4b9ee6e&scoped=true&lang=css");
/* harmony import */ var _node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../node_modules/vue-loader/dist/exportHelper.js */ "./node_modules/vue-loader/dist/exportHelper.js");
;
const __exports__ = /*#__PURE__*/(0,_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__["default"])(_MainLayout_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__["default"], [['render',_MainLayout_vue_vue_type_template_id_a4b9ee6e_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render],['__scopeId',"data-v-a4b9ee6e"],['__file',"src/renderer/components/MainLayout.vue"]])
/* hot reload */
if (true) {
__exports__.__hmrId = "a4b9ee6e"
const api = __VUE_HMR_RUNTIME__
module.hot.accept()
if (!api.createRecord('a4b9ee6e', __exports__)) {
api.reload('a4b9ee6e', __exports__)
}
module.hot.accept(/*! ./MainLayout.vue?vue&type=template&id=a4b9ee6e&scoped=true */ "./src/renderer/components/MainLayout.vue?vue&type=template&id=a4b9ee6e&scoped=true", __WEBPACK_OUTDATED_DEPENDENCIES__ => { /* harmony import */ _MainLayout_vue_vue_type_template_id_a4b9ee6e_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./MainLayout.vue?vue&type=template&id=a4b9ee6e&scoped=true */ "./src/renderer/components/MainLayout.vue?vue&type=template&id=a4b9ee6e&scoped=true");
return (() => {
api.rerender('a4b9ee6e', _MainLayout_vue_vue_type_template_id_a4b9ee6e_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render)
})(__WEBPACK_OUTDATED_DEPENDENCIES__); })
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (__exports__);
/***/ }),
/***/ "./src/renderer/components/MainLayout.vue?vue&type=script&lang=js":
/*!************************************************************************!*\
!*** ./src/renderer/components/MainLayout.vue?vue&type=script&lang=js ***!
\************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* reexport safe */ _node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_MainLayout_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__["default"])
/* harmony export */ });
/* harmony import */ var _node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_MainLayout_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./MainLayout.vue?vue&type=script&lang=js */ "./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/MainLayout.vue?vue&type=script&lang=js");
/***/ }),
/***/ "./src/renderer/components/MainLayout.vue?vue&type=style&index=0&id=a4b9ee6e&scoped=true&lang=css":
/*!********************************************************************************************************!*\
!*** ./src/renderer/components/MainLayout.vue?vue&type=style&index=0&id=a4b9ee6e&scoped=true&lang=css ***!
\********************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_MainLayout_vue_vue_type_style_index_0_id_a4b9ee6e_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./MainLayout.vue?vue&type=style&index=0&id=a4b9ee6e&scoped=true&lang=css */ "./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/MainLayout.vue?vue&type=style&index=0&id=a4b9ee6e&scoped=true&lang=css");
/* harmony import */ var _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_MainLayout_vue_vue_type_style_index_0_id_a4b9ee6e_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_MainLayout_vue_vue_type_style_index_0_id_a4b9ee6e_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};
/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_MainLayout_vue_vue_type_style_index_0_id_a4b9ee6e_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== "default") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_MainLayout_vue_vue_type_style_index_0_id_a4b9ee6e_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__[__WEBPACK_IMPORT_KEY__]
/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);
/***/ }),
/***/ "./src/renderer/components/MainLayout.vue?vue&type=template&id=a4b9ee6e&scoped=true":
/*!******************************************************************************************!*\
!*** ./src/renderer/components/MainLayout.vue?vue&type=template&id=a4b9ee6e&scoped=true ***!
\******************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ render: () => (/* reexport safe */ _node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_MainLayout_vue_vue_type_template_id_a4b9ee6e_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render)
/* harmony export */ });
/* harmony import */ var _node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_MainLayout_vue_vue_type_template_id_a4b9ee6e_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./MainLayout.vue?vue&type=template&id=a4b9ee6e&scoped=true */ "./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/MainLayout.vue?vue&type=template&id=a4b9ee6e&scoped=true");
/***/ }),
/***/ "./src/renderer/components/StatusBar.vue":
/*!***********************************************!*\
!*** ./src/renderer/components/StatusBar.vue ***!
\***********************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _StatusBar_vue_vue_type_template_id_126429ab_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./StatusBar.vue?vue&type=template&id=126429ab&scoped=true */ "./src/renderer/components/StatusBar.vue?vue&type=template&id=126429ab&scoped=true");
/* harmony import */ var _StatusBar_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./StatusBar.vue?vue&type=script&lang=js */ "./src/renderer/components/StatusBar.vue?vue&type=script&lang=js");
/* harmony import */ var _StatusBar_vue_vue_type_style_index_0_id_126429ab_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./StatusBar.vue?vue&type=style&index=0&id=126429ab&scoped=true&lang=css */ "./src/renderer/components/StatusBar.vue?vue&type=style&index=0&id=126429ab&scoped=true&lang=css");
/* harmony import */ var _node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../node_modules/vue-loader/dist/exportHelper.js */ "./node_modules/vue-loader/dist/exportHelper.js");
;
const __exports__ = /*#__PURE__*/(0,_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__["default"])(_StatusBar_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__["default"], [['render',_StatusBar_vue_vue_type_template_id_126429ab_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render],['__scopeId',"data-v-126429ab"],['__file',"src/renderer/components/StatusBar.vue"]])
/* hot reload */
if (true) {
__exports__.__hmrId = "126429ab"
const api = __VUE_HMR_RUNTIME__
module.hot.accept()
if (!api.createRecord('126429ab', __exports__)) {
api.reload('126429ab', __exports__)
}
module.hot.accept(/*! ./StatusBar.vue?vue&type=template&id=126429ab&scoped=true */ "./src/renderer/components/StatusBar.vue?vue&type=template&id=126429ab&scoped=true", __WEBPACK_OUTDATED_DEPENDENCIES__ => { /* harmony import */ _StatusBar_vue_vue_type_template_id_126429ab_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./StatusBar.vue?vue&type=template&id=126429ab&scoped=true */ "./src/renderer/components/StatusBar.vue?vue&type=template&id=126429ab&scoped=true");
return (() => {
api.rerender('126429ab', _StatusBar_vue_vue_type_template_id_126429ab_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render)
})(__WEBPACK_OUTDATED_DEPENDENCIES__); })
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (__exports__);
/***/ }),
/***/ "./src/renderer/components/StatusBar.vue?vue&type=script&lang=js":
/*!***********************************************************************!*\
!*** ./src/renderer/components/StatusBar.vue?vue&type=script&lang=js ***!
\***********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* reexport safe */ _node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_StatusBar_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__["default"])
/* harmony export */ });
/* harmony import */ var _node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_StatusBar_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./StatusBar.vue?vue&type=script&lang=js */ "./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/StatusBar.vue?vue&type=script&lang=js");
/***/ }),
/***/ "./src/renderer/components/StatusBar.vue?vue&type=style&index=0&id=126429ab&scoped=true&lang=css":
/*!*******************************************************************************************************!*\
!*** ./src/renderer/components/StatusBar.vue?vue&type=style&index=0&id=126429ab&scoped=true&lang=css ***!
\*******************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_StatusBar_vue_vue_type_style_index_0_id_126429ab_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./StatusBar.vue?vue&type=style&index=0&id=126429ab&scoped=true&lang=css */ "./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/StatusBar.vue?vue&type=style&index=0&id=126429ab&scoped=true&lang=css");
/* harmony import */ var _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_StatusBar_vue_vue_type_style_index_0_id_126429ab_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_StatusBar_vue_vue_type_style_index_0_id_126429ab_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};
/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_StatusBar_vue_vue_type_style_index_0_id_126429ab_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== "default") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_StatusBar_vue_vue_type_style_index_0_id_126429ab_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__[__WEBPACK_IMPORT_KEY__]
/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);
/***/ }),
/***/ "./src/renderer/components/StatusBar.vue?vue&type=template&id=126429ab&scoped=true":
/*!*****************************************************************************************!*\
!*** ./src/renderer/components/StatusBar.vue?vue&type=template&id=126429ab&scoped=true ***!
\*****************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ render: () => (/* reexport safe */ _node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_StatusBar_vue_vue_type_template_id_126429ab_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render)
/* harmony export */ });
/* harmony import */ var _node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_StatusBar_vue_vue_type_template_id_126429ab_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./StatusBar.vue?vue&type=template&id=126429ab&scoped=true */ "./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/StatusBar.vue?vue&type=template&id=126429ab&scoped=true");
/***/ }),
/***/ "./src/renderer/components/Toast.vue":
/*!*******************************************!*\
!*** ./src/renderer/components/Toast.vue ***!
\*******************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _Toast_vue_vue_type_template_id_4eeeff11_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Toast.vue?vue&type=template&id=4eeeff11&scoped=true */ "./src/renderer/components/Toast.vue?vue&type=template&id=4eeeff11&scoped=true");
/* harmony import */ var _Toast_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Toast.vue?vue&type=script&lang=js */ "./src/renderer/components/Toast.vue?vue&type=script&lang=js");
/* harmony import */ var _Toast_vue_vue_type_style_index_0_id_4eeeff11_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Toast.vue?vue&type=style&index=0&id=4eeeff11&scoped=true&lang=css */ "./src/renderer/components/Toast.vue?vue&type=style&index=0&id=4eeeff11&scoped=true&lang=css");
/* harmony import */ var _node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../node_modules/vue-loader/dist/exportHelper.js */ "./node_modules/vue-loader/dist/exportHelper.js");
;
const __exports__ = /*#__PURE__*/(0,_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__["default"])(_Toast_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__["default"], [['render',_Toast_vue_vue_type_template_id_4eeeff11_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render],['__scopeId',"data-v-4eeeff11"],['__file',"src/renderer/components/Toast.vue"]])
/* hot reload */
if (true) {
__exports__.__hmrId = "4eeeff11"
const api = __VUE_HMR_RUNTIME__
module.hot.accept()
if (!api.createRecord('4eeeff11', __exports__)) {
api.reload('4eeeff11', __exports__)
}
module.hot.accept(/*! ./Toast.vue?vue&type=template&id=4eeeff11&scoped=true */ "./src/renderer/components/Toast.vue?vue&type=template&id=4eeeff11&scoped=true", __WEBPACK_OUTDATED_DEPENDENCIES__ => { /* harmony import */ _Toast_vue_vue_type_template_id_4eeeff11_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Toast.vue?vue&type=template&id=4eeeff11&scoped=true */ "./src/renderer/components/Toast.vue?vue&type=template&id=4eeeff11&scoped=true");
return (() => {
api.rerender('4eeeff11', _Toast_vue_vue_type_template_id_4eeeff11_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render)
})(__WEBPACK_OUTDATED_DEPENDENCIES__); })
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (__exports__);
/***/ }),
/***/ "./src/renderer/components/Toast.vue?vue&type=script&lang=js":
/*!*******************************************************************!*\
!*** ./src/renderer/components/Toast.vue?vue&type=script&lang=js ***!
\*******************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* reexport safe */ _node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Toast_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__["default"])
/* harmony export */ });
/* harmony import */ var _node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Toast_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./Toast.vue?vue&type=script&lang=js */ "./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/Toast.vue?vue&type=script&lang=js");
/***/ }),
/***/ "./src/renderer/components/Toast.vue?vue&type=style&index=0&id=4eeeff11&scoped=true&lang=css":
/*!***************************************************************************************************!*\
!*** ./src/renderer/components/Toast.vue?vue&type=style&index=0&id=4eeeff11&scoped=true&lang=css ***!
\***************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Toast_vue_vue_type_style_index_0_id_4eeeff11_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./Toast.vue?vue&type=style&index=0&id=4eeeff11&scoped=true&lang=css */ "./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/Toast.vue?vue&type=style&index=0&id=4eeeff11&scoped=true&lang=css");
/* harmony import */ var _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Toast_vue_vue_type_style_index_0_id_4eeeff11_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Toast_vue_vue_type_style_index_0_id_4eeeff11_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};
/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Toast_vue_vue_type_style_index_0_id_4eeeff11_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== "default") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Toast_vue_vue_type_style_index_0_id_4eeeff11_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__[__WEBPACK_IMPORT_KEY__]
/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);
/***/ }),
/***/ "./src/renderer/components/Toast.vue?vue&type=template&id=4eeeff11&scoped=true":
/*!*************************************************************************************!*\
!*** ./src/renderer/components/Toast.vue?vue&type=template&id=4eeeff11&scoped=true ***!
\*************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ render: () => (/* reexport safe */ _node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Toast_vue_vue_type_template_id_4eeeff11_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render)
/* harmony export */ });
/* harmony import */ var _node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Toast_vue_vue_type_template_id_4eeeff11_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./Toast.vue?vue&type=template&id=4eeeff11&scoped=true */ "./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/components/Toast.vue?vue&type=template&id=4eeeff11&scoped=true");
/***/ }),
/***/ "./src/renderer/main.js":
/*!******************************!*\
!*** ./src/renderer/main.js ***!
\******************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm-bundler.js");
/* harmony import */ var _App_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./App.vue */ "./src/renderer/App.vue");
/* harmony import */ var _router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./router */ "./src/renderer/router/index.js");
/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./store */ "./src/renderer/store/index.js");
/* harmony import */ var _services_db__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./services/db */ "./src/renderer/services/db.js");
// 在最开头抑制Electron安全警告
(function() {
// 抑制Electron安全警告
const originalWarn = console.warn;
const originalError = console.error;
console.warn = function(...args) {
const message = args.join(' ');
if (message.includes('Electron Security Warning') ||
message.includes('Insecure Content-Security-Policy') ||
message.includes('unsafe-eval')) {
return; // 抑制这些警告
}
originalWarn.apply(console, args);
};
console.error = function(...args) {
const message = args.join(' ');
if (message.includes('Electron Security Warning') ||
message.includes('Insecure Content-Security-Policy') ||
message.includes('unsafe-eval')) {
return; // 抑制这些警告
}
originalError.apply(console, args);
};
// 重写warnAboutInsecureCSP函数 - 使用更安全的方法
if (typeof window !== 'undefined') {
try {
// 先检查函数是否已经存在
if (window.warnAboutInsecureCSP) {
// 如果函数已存在,使用Object.defineProperty来重写
Object.defineProperty(window, 'warnAboutInsecureCSP', {
value: function() {
// 什么都不做,完全抑制这个警告
return;
},
writable: false,
configurable: false
});
} else {
// 如果函数不存在,直接定义
window.warnAboutInsecureCSP = function() { return; };
}
} catch (e) {
// 如果重写失败,至少尝试覆盖console.warn
console.log('无法重写warnAboutInsecureCSP,使用console.warn覆盖');
}
}
// 重写eval函数(如果存在)- 使用更安全的方法
try {
if (typeof window.eval !== 'undefined') {
const originalEval = window.eval;
Object.defineProperty(window, 'eval', {
value: function(code) {
// 阻止eval执行
console.log('eval调用被阻止:', code);
return undefined;
},
writable: false,
configurable: false
});
}
} catch (e) {
console.log('无法重写eval函数:', e.message);
}
})();
// 在最开头定义全局变量,解决Electron渲染进程中的global未定义问题
(function() {
// 优先使用globalThis,避免设置window对象的只读属性
var globalRef = globalThis;
if (typeof global === 'undefined') {
if (typeof globalThis !== 'undefined') {
globalThis.global = globalThis;
globalRef = globalThis;
} else {
var global = {};
globalThis = global;
}
} else {
globalThis = global;
}
// 确保process对象存在
if (typeof process === 'undefined') {
var process = {
env: { NODE_ENV: 'development' },
browser: true,
version: '16.0.0'
};
if (typeof globalThis !== 'undefined') {
globalThis.process = process;
}
}
// 确保Buffer对象存在
if (typeof Buffer === 'undefined') {
var Buffer = class Buffer {
constructor() {}
static isBuffer() { return false; }
};
if (typeof globalThis !== 'undefined') {
globalThis.Buffer = Buffer;
}
}
// 确保所有Node.js全局变量都存在
var nodeGlobals = ['setImmediate', 'clearImmediate', 'setTimeout', 'clearTimeout', 'setInterval', 'clearInterval'];
nodeGlobals.forEach(function(globalName) {
if (typeof globalThis !== 'undefined' && typeof globalThis[globalName] === 'undefined') {
// 使用安全的方式访问globalRef的属性
var defaultFunc = function() {};
globalThis[globalName] = (globalThis && typeof globalThis[globalName] === 'function') ? globalThis[globalName] : defaultFunc;
}
});
// 确保webpack chunk相关变量存在
if (typeof globalThis !== 'undefined' && !globalThis['webpackChunkGoFaster']) {
globalThis['webpackChunkGoFaster'] = [];
}
if (typeof globalThis !== 'undefined' && !globalThis['webpackChunkGoFaster']) {
globalThis['webpackChunkGoFaster'] = [];
}
})();
// 初始化数据库
(0,_services_db__WEBPACK_IMPORTED_MODULE_4__.initDB)().then(() => {
(0,vue__WEBPACK_IMPORTED_MODULE_0__.createApp)(_App_vue__WEBPACK_IMPORTED_MODULE_1__["default"])
.use(_store__WEBPACK_IMPORTED_MODULE_3__["default"])
.use(_router__WEBPACK_IMPORTED_MODULE_2__["default"])
.mount('#app')
})
/***/ }),
/***/ "./src/renderer/router/index.js":
/*!**************************************!*\
!*** ./src/renderer/router/index.js ***!
\**************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var vue_router__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-router */ "./node_modules/vue-router/dist/vue-router.mjs");
/* harmony import */ var _components_MainLayout_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/components/MainLayout.vue */ "./src/renderer/components/MainLayout.vue");
/* harmony import */ var _views_Home_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/views/Home.vue */ "./src/renderer/views/Home.vue");
/* harmony import */ var _views_History_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/views/History.vue */ "./src/renderer/views/History.vue");
/* harmony import */ var _views_UserManagement_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/views/UserManagement.vue */ "./src/renderer/views/UserManagement.vue");
const routes = [
{
path: '/',
component: _components_MainLayout_vue__WEBPACK_IMPORTED_MODULE_1__["default"],
children: [
{
path: '',
name: 'Home',
component: _views_Home_vue__WEBPACK_IMPORTED_MODULE_2__["default"]
},
{
path: '/history',
name: 'History',
component: _views_History_vue__WEBPACK_IMPORTED_MODULE_3__["default"]
},
{
path: '/user-management',
name: 'UserManagement',
component: _views_UserManagement_vue__WEBPACK_IMPORTED_MODULE_4__["default"]
},
{
path: '/speed-test',
name: 'SpeedTest',
component: () => __webpack_require__.e(/*! import() */ "src_renderer_components_SpeedTest_vue").then(__webpack_require__.bind(__webpack_require__, /*! @/components/SpeedTest.vue */ "./src/renderer/components/SpeedTest.vue"))
},
{
path: '/settings',
name: 'Settings',
component: () => __webpack_require__.e(/*! import() */ "src_renderer_views_Settings_vue").then(__webpack_require__.bind(__webpack_require__, /*! @/views/Settings.vue */ "./src/renderer/views/Settings.vue"))
}
]
}
]
const router = (0,vue_router__WEBPACK_IMPORTED_MODULE_0__.createRouter)({
history: (0,vue_router__WEBPACK_IMPORTED_MODULE_0__.createWebHashHistory)(),
routes
})
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (router);
/***/ }),
/***/ "./src/renderer/services/db.js":
/*!*************************************!*\
!*** ./src/renderer/services/db.js ***!
\*************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ db: () => (/* binding */ db),
/* harmony export */ initDB: () => (/* binding */ initDB)
/* harmony export */ });
// 为Electron环境创建兼容的数据库服务
// 使用localStorage作为存储后端,避免Node.js依赖问题
class SimpleDB {
constructor() {
this.data = null;
this.storageKey = 'gofaster-db';
}
async read() {
try {
const data = localStorage.getItem(this.storageKey);
this.data = data ? JSON.parse(data) : null;
return this.data;
} catch (error) {
console.error('读取数据库失败:', error);
this.data = null;
return null;
}
}
async write() {
try {
if (this.data) {
localStorage.setItem(this.storageKey, JSON.stringify(this.data));
}
} catch (error) {
console.error('写入数据库失败:', error);
}
}
}
// 创建数据库实例
const db = new SimpleDB();
// 初始化数据库
async function initDB() {
try {
await db.read();
// 如果数据库为空,创建默认数据结构
if (!db.data) {
db.data = {
settings: {},
activities: [],
stats: {
totalTests: 0,
avgSpeed: '0 Mbps',
bestSpeed: '0 Mbps'
},
userInfo: {
name: '用户',
email: 'user@example.com'
},
todoList: [
{ id: 1, text: '完成网络速度测试', completed: false, date: '今天' },
{ id: 2, text: '查看历史测试记录', completed: true, date: '昨天' },
{ id: 3, text: '配置测试参数', completed: false, date: '明天' }
],
recentActivities: [
{ id: 1, icon: '⚡', title: '完成速度测试', time: '2小时前' },
{ id: 2, icon: '📊', title: '查看测试报告', time: '昨天' },
{ id: 3, icon: '⚙', title: '更新设置', time: '3天前' }
]
};
await db.write();
console.log('数据库初始化成功,创建了默认数据结构');
} else {
console.log('数据库加载成功');
}
} catch (error) {
console.error('数据库初始化失败:', error);
// 如果初始化失败,创建默认数据结构
db.data = {
settings: {},
activities: [],
stats: {
totalTests: 0,
avgSpeed: '0 Mbps',
bestSpeed: '0 Mbps'
},
userInfo: {
name: '用户',
email: 'user@example.com'
},
todoList: [
{ id: 1, text: '完成网络速度测试', completed: false, date: '今天' },
{ id: 2, text: '查看历史测试记录', completed: true, date: '昨天' },
{ id: 3, text: '配置测试参数', completed: false, date: '明天' }
],
recentActivities: [
{ id: 1, icon: '⚡', title: '完成速度测试', time: '2小时前' },
{ id: 2, icon: '📊', title: '查看测试报告', time: '昨天' },
{ id: 3, icon: '⚙', title: '更新设置', time: '3天前' }
]
};
}
}
/***/ }),
/***/ "./src/renderer/services/userService.js":
/*!**********************************************!*\
!*** ./src/renderer/services/userService.js ***!
\**********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
/* harmony export */ userService: () => (/* binding */ userService)
/* harmony export */ });
/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! axios */ "./node_modules/axios/lib/axios.js");
/* harmony import */ var _config_app_config_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../config/app.config.js */ "./src/config/app.config.js");
// 配置axios基础URL
const getApiBaseUrl = () => (0,_config_app_config_js__WEBPACK_IMPORTED_MODULE_1__.getFinalConfig)().apiBaseUrl;
// 创建axios实例
const api = axios__WEBPACK_IMPORTED_MODULE_0__["default"].create({
baseURL: getApiBaseUrl(),
timeout: 10000,
headers: {
'Content-Type': 'application/json'
}
})
// 请求拦截器
api.interceptors.request.use(
config => {
// 可以在这里添加token等认证信息
const token = localStorage.getItem('token')
if (token) {
config.headers.Authorization = `Bearer ${token}`
}
return config
},
error => {
return Promise.reject(error)
}
)
// 响应拦截器
api.interceptors.response.use(
response => {
return response.data
},
error => {
console.error('API请求错误:', error)
if (error.response) {
// 服务器返回错误状态码
const { status, data } = error.response
switch (status) {
case 400:
throw new Error(data.error || '请求参数错误')
case 401:
throw new Error('未授权,请重新登录')
case 403:
throw new Error('权限不足')
case 404:
throw new Error('请求的资源不存在')
case 500:
throw new Error(data.error || '服务器内部错误')
default:
throw new Error(data.error || `请求失败 (${status})`)
}
} else if (error.request) {
// 请求已发出但没有收到响应
throw new Error('网络连接失败,请检查网络设置')
} else {
// 其他错误
throw new Error(error.message || '请求失败')
}
}
)
const userService = {
// 获取用户列表
async getUsers(page = 1, pageSize = 10) {
try {
const response = await api.get('/users', {
params: { page, pageSize }
})
return response
} catch (error) {
throw error
}
},
// 获取单个用户
async getUser(id) {
try {
const response = await api.get(`/users/${id}`)
return response
} catch (error) {
throw error
}
},
// 创建用户
async createUser(userData) {
try {
const response = await api.post('/users', userData)
return response
} catch (error) {
throw error
}
},
// 更新用户
async updateUser(id, userData) {
try {
const response = await api.put(`/users/${id}`, userData)
return response
} catch (error) {
throw error
}
},
// 删除用户
async deleteUser(id) {
try {
await api.delete(`/users/${id}`)
return true
} catch (error) {
throw error
}
},
// 获取角色列表
async getRoles() {
try {
const response = await api.get('/roles')
return response
} catch (error) {
throw error
}
},
// 获取权限列表
async getPermissions() {
try {
const response = await api.get('/permissions')
return response
} catch (error) {
throw error
}
},
// 获取验证码
async getCaptcha() {
try {
const response = await api.get('/auth/captcha')
return response
} catch (error) {
throw error
}
},
// 用户登录
async login(credentials) {
try {
const response = await api.post('/auth/login', credentials)
// 保存token到localStorage
if (response.token) {
localStorage.setItem('token', response.token)
localStorage.setItem('user', JSON.stringify(response.user))
}
return response
} catch (error) {
throw error
}
},
// 用户登出
async logout() {
try {
await api.post('/auth/logout')
// 清除本地存储的认证信息
localStorage.removeItem('token')
localStorage.removeItem('user')
return true
} catch (error) {
throw error
}
},
// 获取当前用户信息
async getCurrentUser() {
try {
const response = await api.get('/auth/me')
return response
} catch (error) {
throw error
}
},
// 修改密码
async changePassword(passwordData) {
try {
const response = await api.post('/auth/change-password', passwordData)
return response
} catch (error) {
throw error
}
},
// 重置密码
async resetPassword(email) {
try {
const response = await api.post('/auth/reset-password', { email })
return response
} catch (error) {
throw error
}
}
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (userService);
/***/ }),
/***/ "./src/renderer/store/index.js":
/*!*************************************!*\
!*** ./src/renderer/store/index.js ***!
\*************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm-bundler.js");
/* harmony import */ var _services_db__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../services/db */ "./src/renderer/services/db.js");
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,vuex__WEBPACK_IMPORTED_MODULE_0__.createStore)({
state: {
testResults: []
},
mutations: {
setTestResults(state, results) {
state.testResults = results
},
addTestResult(state, result) {
state.testResults.unshift(result)
}
},
actions: {
async loadTestResults({ commit }) {
await _services_db__WEBPACK_IMPORTED_MODULE_1__.db.read()
commit('setTestResults', _services_db__WEBPACK_IMPORTED_MODULE_1__.db.data.activities || [])
},
async saveTestResult({ commit }, result) {
await _services_db__WEBPACK_IMPORTED_MODULE_1__.db.read()
_services_db__WEBPACK_IMPORTED_MODULE_1__.db.data.activities.unshift(result)
await _services_db__WEBPACK_IMPORTED_MODULE_1__.db.write()
commit('addTestResult', result)
}
}
}));
/***/ }),
/***/ "./src/renderer/utils/themeManager.js":
/*!********************************************!*\
!*** ./src/renderer/utils/themeManager.js ***!
\********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
// 主题管理器
class ThemeManager {
constructor() {
this.currentTheme = 'light'
this.systemTheme = 'light'
this.init()
}
// 初始化主题管理器
init() {
this.detectSystemTheme()
this.loadTheme()
this.applyTheme()
this.watchSystemTheme()
}
// 检测系统主题
detectSystemTheme() {
try {
// 检测系统主题
if (window.matchMedia) {
const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')
this.systemTheme = mediaQuery.matches ? 'dark' : 'light'
// 监听系统主题变化
mediaQuery.addEventListener('change', (e) => {
this.systemTheme = e.matches ? 'dark' : 'light'
if (this.currentTheme === 'auto') {
this.applyTheme()
}
})
}
} catch (error) {
console.warn('无法检测系统主题:', error)
this.systemTheme = 'light'
}
}
// 加载保存的主题设置
loadTheme() {
try {
const savedSettings = localStorage.getItem('gofaster-settings')
if (savedSettings) {
const settings = JSON.parse(savedSettings)
this.currentTheme = settings.theme || 'light'
}
} catch (error) {
console.warn('加载主题设置失败:', error)
this.currentTheme = 'light'
}
}
// 保存主题设置
saveTheme(theme) {
try {
this.currentTheme = theme
const savedSettings = localStorage.getItem('gofaster-settings')
let settings = {}
if (savedSettings) {
settings = JSON.parse(savedSettings)
}
settings.theme = theme
localStorage.setItem('gofaster-settings', JSON.stringify(settings))
} catch (error) {
console.error('保存主题设置失败:', error)
}
}
// 获取当前应该应用的主题
getEffectiveTheme() {
if (this.currentTheme === 'auto') {
return this.systemTheme
}
return this.currentTheme
}
// 应用主题
applyTheme() {
const effectiveTheme = this.getEffectiveTheme()
const root = document.documentElement
// 移除所有主题类
root.classList.remove('theme-light', 'theme-dark')
// 添加当前主题类
root.classList.add(`theme-${effectiveTheme}`)
// 设置CSS变量
this.setCSSVariables(effectiveTheme)
// 触发主题变化事件
window.dispatchEvent(new CustomEvent('theme-changed', {
detail: { theme: effectiveTheme }
}))
}
// 设置CSS变量
setCSSVariables(theme) {
const root = document.documentElement
if (theme === 'dark') {
// 深色主题变量 - 使用与欢迎页一样的深蓝色
root.style.setProperty('--bg-primary', '#2d4a8a')
root.style.setProperty('--bg-secondary', '#1f3a6b')
root.style.setProperty('--bg-tertiary', '#1a2a4a')
root.style.setProperty('--text-primary', '#ffffff')
root.style.setProperty('--text-secondary', '#e0e0e0')
root.style.setProperty('--text-muted', '#b0b0b0')
root.style.setProperty('--border-color', 'rgba(255, 255, 255, 0.2)')
root.style.setProperty('--accent-color', '#ffffff')
root.style.setProperty('--success-color', '#4caf50')
root.style.setProperty('--warning-color', '#ff9800')
root.style.setProperty('--error-color', '#f44336')
root.style.setProperty('--shadow-color', 'rgba(0, 0, 0, 0.2)')
root.style.setProperty('--card-bg', 'rgba(255, 255, 255, 0.08)')
root.style.setProperty('--input-bg', '#1a2a4a')
root.style.setProperty('--input-border', 'rgba(255, 255, 255, 0.2)')
root.style.setProperty('--input-text', '#ffffff')
root.style.setProperty('--button-bg', '#2d4a8a')
root.style.setProperty('--button-text', '#ffffff')
root.style.setProperty('--button-hover', '#1f3a6b')
root.style.setProperty('--sidebar-bg', '#1a2a4a')
root.style.setProperty('--header-bg', '#1f3a6b')
root.style.setProperty('--tab-bg', '#1a2a4a')
root.style.setProperty('--tab-active-bg', '#2d4a8a')
root.style.setProperty('--tab-active-text', '#ffffff')
} else {
// 浅色主题变量
root.style.setProperty('--bg-primary', '#ffffff')
root.style.setProperty('--bg-secondary', '#f5f5f5')
root.style.setProperty('--bg-tertiary', '#e0e0e0')
root.style.setProperty('--text-primary', '#333333')
root.style.setProperty('--text-secondary', '#666666')
root.style.setProperty('--text-muted', '#999999')
root.style.setProperty('--border-color', '#e0e0e0')
root.style.setProperty('--accent-color', '#1976d2')
root.style.setProperty('--success-color', '#4caf50')
root.style.setProperty('--warning-color', '#ff9800')
root.style.setProperty('--error-color', '#f44336')
root.style.setProperty('--shadow-color', 'rgba(0, 0, 0, 0.1)')
root.style.setProperty('--card-bg', '#ffffff')
root.style.setProperty('--input-bg', '#ffffff')
root.style.setProperty('--input-border', '#ddd')
root.style.setProperty('--input-text', '#333333')
root.style.setProperty('--button-bg', '#1976d2')
root.style.setProperty('--button-text', '#ffffff')
root.style.setProperty('--button-hover', '#1565c0')
root.style.setProperty('--sidebar-bg', '#ffffff')
root.style.setProperty('--header-bg', '#ffffff')
root.style.setProperty('--tab-bg', '#f8f9fa')
root.style.setProperty('--tab-active-bg', '#007bff')
root.style.setProperty('--tab-active-text', '#ffffff')
}
}
// 监听系统主题变化
watchSystemTheme() {
if (window.matchMedia) {
const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')
mediaQuery.addEventListener('change', (e) => {
this.systemTheme = e.matches ? 'dark' : 'light'
if (this.currentTheme === 'auto') {
this.applyTheme()
}
})
}
}
// 切换主题
setTheme(theme) {
this.saveTheme(theme)
this.applyTheme()
}
// 获取当前主题
getCurrentTheme() {
return this.currentTheme
}
// 获取系统主题
getSystemTheme() {
return this.systemTheme
}
}
// 创建全局主题管理器实例
const themeManager = new ThemeManager()
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (themeManager);
/***/ }),
/***/ "./src/renderer/views/History.vue":
/*!****************************************!*\
!*** ./src/renderer/views/History.vue ***!
\****************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _History_vue_vue_type_template_id_5347d120_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./History.vue?vue&type=template&id=5347d120&scoped=true */ "./src/renderer/views/History.vue?vue&type=template&id=5347d120&scoped=true");
/* harmony import */ var _History_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./History.vue?vue&type=script&lang=js */ "./src/renderer/views/History.vue?vue&type=script&lang=js");
/* harmony import */ var _History_vue_vue_type_style_index_0_id_5347d120_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./History.vue?vue&type=style&index=0&id=5347d120&scoped=true&lang=css */ "./src/renderer/views/History.vue?vue&type=style&index=0&id=5347d120&scoped=true&lang=css");
/* harmony import */ var _node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../node_modules/vue-loader/dist/exportHelper.js */ "./node_modules/vue-loader/dist/exportHelper.js");
;
const __exports__ = /*#__PURE__*/(0,_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__["default"])(_History_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__["default"], [['render',_History_vue_vue_type_template_id_5347d120_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render],['__scopeId',"data-v-5347d120"],['__file',"src/renderer/views/History.vue"]])
/* hot reload */
if (true) {
__exports__.__hmrId = "5347d120"
const api = __VUE_HMR_RUNTIME__
module.hot.accept()
if (!api.createRecord('5347d120', __exports__)) {
api.reload('5347d120', __exports__)
}
module.hot.accept(/*! ./History.vue?vue&type=template&id=5347d120&scoped=true */ "./src/renderer/views/History.vue?vue&type=template&id=5347d120&scoped=true", __WEBPACK_OUTDATED_DEPENDENCIES__ => { /* harmony import */ _History_vue_vue_type_template_id_5347d120_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./History.vue?vue&type=template&id=5347d120&scoped=true */ "./src/renderer/views/History.vue?vue&type=template&id=5347d120&scoped=true");
return (() => {
api.rerender('5347d120', _History_vue_vue_type_template_id_5347d120_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render)
})(__WEBPACK_OUTDATED_DEPENDENCIES__); })
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (__exports__);
/***/ }),
/***/ "./src/renderer/views/History.vue?vue&type=script&lang=js":
/*!****************************************************************!*\
!*** ./src/renderer/views/History.vue?vue&type=script&lang=js ***!
\****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* reexport safe */ _node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_History_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__["default"])
/* harmony export */ });
/* harmony import */ var _node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_History_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./History.vue?vue&type=script&lang=js */ "./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/History.vue?vue&type=script&lang=js");
/***/ }),
/***/ "./src/renderer/views/History.vue?vue&type=style&index=0&id=5347d120&scoped=true&lang=css":
/*!************************************************************************************************!*\
!*** ./src/renderer/views/History.vue?vue&type=style&index=0&id=5347d120&scoped=true&lang=css ***!
\************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_History_vue_vue_type_style_index_0_id_5347d120_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./History.vue?vue&type=style&index=0&id=5347d120&scoped=true&lang=css */ "./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/History.vue?vue&type=style&index=0&id=5347d120&scoped=true&lang=css");
/* harmony import */ var _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_History_vue_vue_type_style_index_0_id_5347d120_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_History_vue_vue_type_style_index_0_id_5347d120_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};
/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_History_vue_vue_type_style_index_0_id_5347d120_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== "default") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_History_vue_vue_type_style_index_0_id_5347d120_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__[__WEBPACK_IMPORT_KEY__]
/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);
/***/ }),
/***/ "./src/renderer/views/History.vue?vue&type=template&id=5347d120&scoped=true":
/*!**********************************************************************************!*\
!*** ./src/renderer/views/History.vue?vue&type=template&id=5347d120&scoped=true ***!
\**********************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ render: () => (/* reexport safe */ _node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_History_vue_vue_type_template_id_5347d120_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render)
/* harmony export */ });
/* harmony import */ var _node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_History_vue_vue_type_template_id_5347d120_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./History.vue?vue&type=template&id=5347d120&scoped=true */ "./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/History.vue?vue&type=template&id=5347d120&scoped=true");
/***/ }),
/***/ "./src/renderer/views/Home.vue":
/*!*************************************!*\
!*** ./src/renderer/views/Home.vue ***!
\*************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _Home_vue_vue_type_template_id_ecd3befa_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Home.vue?vue&type=template&id=ecd3befa&scoped=true */ "./src/renderer/views/Home.vue?vue&type=template&id=ecd3befa&scoped=true");
/* harmony import */ var _Home_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Home.vue?vue&type=script&lang=js */ "./src/renderer/views/Home.vue?vue&type=script&lang=js");
/* harmony import */ var _Home_vue_vue_type_style_index_0_id_ecd3befa_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Home.vue?vue&type=style&index=0&id=ecd3befa&scoped=true&lang=css */ "./src/renderer/views/Home.vue?vue&type=style&index=0&id=ecd3befa&scoped=true&lang=css");
/* harmony import */ var _node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../node_modules/vue-loader/dist/exportHelper.js */ "./node_modules/vue-loader/dist/exportHelper.js");
;
const __exports__ = /*#__PURE__*/(0,_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__["default"])(_Home_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__["default"], [['render',_Home_vue_vue_type_template_id_ecd3befa_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render],['__scopeId',"data-v-ecd3befa"],['__file',"src/renderer/views/Home.vue"]])
/* hot reload */
if (true) {
__exports__.__hmrId = "ecd3befa"
const api = __VUE_HMR_RUNTIME__
module.hot.accept()
if (!api.createRecord('ecd3befa', __exports__)) {
api.reload('ecd3befa', __exports__)
}
module.hot.accept(/*! ./Home.vue?vue&type=template&id=ecd3befa&scoped=true */ "./src/renderer/views/Home.vue?vue&type=template&id=ecd3befa&scoped=true", __WEBPACK_OUTDATED_DEPENDENCIES__ => { /* harmony import */ _Home_vue_vue_type_template_id_ecd3befa_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Home.vue?vue&type=template&id=ecd3befa&scoped=true */ "./src/renderer/views/Home.vue?vue&type=template&id=ecd3befa&scoped=true");
return (() => {
api.rerender('ecd3befa', _Home_vue_vue_type_template_id_ecd3befa_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render)
})(__WEBPACK_OUTDATED_DEPENDENCIES__); })
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (__exports__);
/***/ }),
/***/ "./src/renderer/views/Home.vue?vue&type=script&lang=js":
/*!*************************************************************!*\
!*** ./src/renderer/views/Home.vue?vue&type=script&lang=js ***!
\*************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* reexport safe */ _node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Home_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__["default"])
/* harmony export */ });
/* harmony import */ var _node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Home_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./Home.vue?vue&type=script&lang=js */ "./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/Home.vue?vue&type=script&lang=js");
/***/ }),
/***/ "./src/renderer/views/Home.vue?vue&type=style&index=0&id=ecd3befa&scoped=true&lang=css":
/*!*********************************************************************************************!*\
!*** ./src/renderer/views/Home.vue?vue&type=style&index=0&id=ecd3befa&scoped=true&lang=css ***!
\*********************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Home_vue_vue_type_style_index_0_id_ecd3befa_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./Home.vue?vue&type=style&index=0&id=ecd3befa&scoped=true&lang=css */ "./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/Home.vue?vue&type=style&index=0&id=ecd3befa&scoped=true&lang=css");
/* harmony import */ var _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Home_vue_vue_type_style_index_0_id_ecd3befa_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Home_vue_vue_type_style_index_0_id_ecd3befa_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};
/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Home_vue_vue_type_style_index_0_id_ecd3befa_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== "default") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Home_vue_vue_type_style_index_0_id_ecd3befa_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__[__WEBPACK_IMPORT_KEY__]
/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);
/***/ }),
/***/ "./src/renderer/views/Home.vue?vue&type=template&id=ecd3befa&scoped=true":
/*!*******************************************************************************!*\
!*** ./src/renderer/views/Home.vue?vue&type=template&id=ecd3befa&scoped=true ***!
\*******************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ render: () => (/* reexport safe */ _node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Home_vue_vue_type_template_id_ecd3befa_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render)
/* harmony export */ });
/* harmony import */ var _node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Home_vue_vue_type_template_id_ecd3befa_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./Home.vue?vue&type=template&id=ecd3befa&scoped=true */ "./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/Home.vue?vue&type=template&id=ecd3befa&scoped=true");
/***/ }),
/***/ "./src/renderer/views/UserManagement.vue":
/*!***********************************************!*\
!*** ./src/renderer/views/UserManagement.vue ***!
\***********************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _UserManagement_vue_vue_type_template_id_7338cb92_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./UserManagement.vue?vue&type=template&id=7338cb92&scoped=true */ "./src/renderer/views/UserManagement.vue?vue&type=template&id=7338cb92&scoped=true");
/* harmony import */ var _UserManagement_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./UserManagement.vue?vue&type=script&lang=js */ "./src/renderer/views/UserManagement.vue?vue&type=script&lang=js");
/* harmony import */ var _UserManagement_vue_vue_type_style_index_0_id_7338cb92_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./UserManagement.vue?vue&type=style&index=0&id=7338cb92&scoped=true&lang=css */ "./src/renderer/views/UserManagement.vue?vue&type=style&index=0&id=7338cb92&scoped=true&lang=css");
/* harmony import */ var _node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../node_modules/vue-loader/dist/exportHelper.js */ "./node_modules/vue-loader/dist/exportHelper.js");
;
const __exports__ = /*#__PURE__*/(0,_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__["default"])(_UserManagement_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__["default"], [['render',_UserManagement_vue_vue_type_template_id_7338cb92_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render],['__scopeId',"data-v-7338cb92"],['__file',"src/renderer/views/UserManagement.vue"]])
/* hot reload */
if (true) {
__exports__.__hmrId = "7338cb92"
const api = __VUE_HMR_RUNTIME__
module.hot.accept()
if (!api.createRecord('7338cb92', __exports__)) {
api.reload('7338cb92', __exports__)
}
module.hot.accept(/*! ./UserManagement.vue?vue&type=template&id=7338cb92&scoped=true */ "./src/renderer/views/UserManagement.vue?vue&type=template&id=7338cb92&scoped=true", __WEBPACK_OUTDATED_DEPENDENCIES__ => { /* harmony import */ _UserManagement_vue_vue_type_template_id_7338cb92_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./UserManagement.vue?vue&type=template&id=7338cb92&scoped=true */ "./src/renderer/views/UserManagement.vue?vue&type=template&id=7338cb92&scoped=true");
return (() => {
api.rerender('7338cb92', _UserManagement_vue_vue_type_template_id_7338cb92_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render)
})(__WEBPACK_OUTDATED_DEPENDENCIES__); })
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (__exports__);
/***/ }),
/***/ "./src/renderer/views/UserManagement.vue?vue&type=script&lang=js":
/*!***********************************************************************!*\
!*** ./src/renderer/views/UserManagement.vue?vue&type=script&lang=js ***!
\***********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* reexport safe */ _node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_UserManagement_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__["default"])
/* harmony export */ });
/* harmony import */ var _node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_UserManagement_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./UserManagement.vue?vue&type=script&lang=js */ "./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/UserManagement.vue?vue&type=script&lang=js");
/***/ }),
/***/ "./src/renderer/views/UserManagement.vue?vue&type=style&index=0&id=7338cb92&scoped=true&lang=css":
/*!*******************************************************************************************************!*\
!*** ./src/renderer/views/UserManagement.vue?vue&type=style&index=0&id=7338cb92&scoped=true&lang=css ***!
\*******************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_UserManagement_vue_vue_type_style_index_0_id_7338cb92_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/dist/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./UserManagement.vue?vue&type=style&index=0&id=7338cb92&scoped=true&lang=css */ "./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/UserManagement.vue?vue&type=style&index=0&id=7338cb92&scoped=true&lang=css");
/* harmony import */ var _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_UserManagement_vue_vue_type_style_index_0_id_7338cb92_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_UserManagement_vue_vue_type_style_index_0_id_7338cb92_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};
/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_UserManagement_vue_vue_type_style_index_0_id_7338cb92_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== "default") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_UserManagement_vue_vue_type_style_index_0_id_7338cb92_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__[__WEBPACK_IMPORT_KEY__]
/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);
/***/ }),
/***/ "./src/renderer/views/UserManagement.vue?vue&type=template&id=7338cb92&scoped=true":
/*!*****************************************************************************************!*\
!*** ./src/renderer/views/UserManagement.vue?vue&type=template&id=7338cb92&scoped=true ***!
\*****************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ render: () => (/* reexport safe */ _node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_UserManagement_vue_vue_type_template_id_7338cb92_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render)
/* harmony export */ });
/* harmony import */ var _node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_UserManagement_vue_vue_type_template_id_7338cb92_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./UserManagement.vue?vue&type=template&id=7338cb92&scoped=true */ "./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/renderer/views/UserManagement.vue?vue&type=template&id=7338cb92&scoped=true");
/***/ })
/******/ });
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ var cachedModule = __webpack_module_cache__[moduleId];
/******/ if (cachedModule !== undefined) {
/******/ if (cachedModule.error !== undefined) throw cachedModule.error;
/******/ return cachedModule.exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ id: moduleId,
/******/ // no module.loaded needed
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ try {
/******/ var execOptions = { id: moduleId, module: module, factory: __webpack_modules__[moduleId], require: __webpack_require__ };
/******/ __webpack_require__.i.forEach(function(handler) { handler(execOptions); });
/******/ module = execOptions.module;
/******/ execOptions.factory.call(module.exports, module, module.exports, execOptions.require);
/******/ } catch(e) {
/******/ module.error = e;
/******/ throw e;
/******/ }
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = __webpack_modules__;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = __webpack_module_cache__;
/******/
/******/ // expose the module execution interceptor
/******/ __webpack_require__.i = [];
/******/
/************************************************************************/
/******/ /* webpack/runtime/chunk loaded */
/******/ (() => {
/******/ var deferred = [];
/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => {
/******/ if(chunkIds) {
/******/ priority = priority || 0;
/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];
/******/ deferred[i] = [chunkIds, fn, priority];
/******/ return;
/******/ }
/******/ var notFulfilled = Infinity;
/******/ for (var i = 0; i < deferred.length; i++) {
/******/ var [chunkIds, fn, priority] = deferred[i];
/******/ var fulfilled = true;
/******/ for (var j = 0; j < chunkIds.length; j++) {
/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {
/******/ chunkIds.splice(j--, 1);
/******/ } else {
/******/ fulfilled = false;
/******/ if(priority < notFulfilled) notFulfilled = priority;
/******/ }
/******/ }
/******/ if(fulfilled) {
/******/ deferred.splice(i--, 1)
/******/ var r = fn();
/******/ if (r !== undefined) result = r;
/******/ }
/******/ }
/******/ return result;
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/compat get default export */
/******/ (() => {
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = (module) => {
/******/ var getter = module && module.__esModule ?
/******/ () => (module['default']) :
/******/ () => (module);
/******/ __webpack_require__.d(getter, { a: getter });
/******/ return getter;
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/define property getters */
/******/ (() => {
/******/ // define getter functions for harmony exports
/******/ __webpack_require__.d = (exports, definition) => {
/******/ for(var key in definition) {
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ }
/******/ }
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/ensure chunk */
/******/ (() => {
/******/ __webpack_require__.f = {};
/******/ // This file contains only the entry chunk.
/******/ // The chunk loading function for additional chunks
/******/ __webpack_require__.e = (chunkId) => {
/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {
/******/ __webpack_require__.f[key](chunkId, promises);
/******/ return promises;
/******/ }, []));
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/get javascript chunk filename */
/******/ (() => {
/******/ // This function allow to reference all chunks
/******/ __webpack_require__.u = (chunkId) => {
/******/ // return url for filenames not based on template
/******/ if ({"src_renderer_components_SpeedTest_vue":1,"src_renderer_views_Settings_vue":1}[chunkId]) return "" + chunkId + ".js";
/******/ // return url for filenames based on template
/******/ return "js/" + chunkId + ".js";
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/get javascript update chunk filename */
/******/ (() => {
/******/ // This function allow to reference all chunks
/******/ __webpack_require__.hu = (chunkId) => {
/******/ // return url for filenames based on template
/******/ return "" + chunkId + "." + __webpack_require__.h() + ".hot-update.js";
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/get update manifest filename */
/******/ (() => {
/******/ __webpack_require__.hmrF = () => ("index." + __webpack_require__.h() + ".hot-update.json");
/******/ })();
/******/
/******/ /* webpack/runtime/getFullHash */
/******/ (() => {
/******/ __webpack_require__.h = () => ("b656c4a813fb38f6")
/******/ })();
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ (() => {
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ })();
/******/
/******/ /* webpack/runtime/load script */
/******/ (() => {
/******/ var inProgress = {};
/******/ var dataWebpackPrefix = "GoFaster:";
/******/ // loadScript function to load a script via script tag
/******/ __webpack_require__.l = (url, done, key, chunkId) => {
/******/ if(inProgress[url]) { inProgress[url].push(done); return; }
/******/ var script, needAttach;
/******/ if(key !== undefined) {
/******/ var scripts = document.getElementsByTagName("script");
/******/ for(var i = 0; i < scripts.length; i++) {
/******/ var s = scripts[i];
/******/ if(s.getAttribute("src") == url || s.getAttribute("data-webpack") == dataWebpackPrefix + key) { script = s; break; }
/******/ }
/******/ }
/******/ if(!script) {
/******/ needAttach = true;
/******/ script = document.createElement('script');
/******/
/******/ script.charset = 'utf-8';
/******/ script.timeout = 120;
/******/ if (__webpack_require__.nc) {
/******/ script.setAttribute("nonce", __webpack_require__.nc);
/******/ }
/******/ script.setAttribute("data-webpack", dataWebpackPrefix + key);
/******/
/******/ script.src = url;
/******/ }
/******/ inProgress[url] = [done];
/******/ var onScriptComplete = (prev, event) => {
/******/ // avoid mem leaks in IE.
/******/ script.onerror = script.onload = null;
/******/ clearTimeout(timeout);
/******/ var doneFns = inProgress[url];
/******/ delete inProgress[url];
/******/ script.parentNode && script.parentNode.removeChild(script);
/******/ doneFns && doneFns.forEach((fn) => (fn(event)));
/******/ if(prev) return prev(event);
/******/ }
/******/ var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);
/******/ script.onerror = onScriptComplete.bind(null, script.onerror);
/******/ script.onload = onScriptComplete.bind(null, script.onload);
/******/ needAttach && document.head.appendChild(script);
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/make namespace object */
/******/ (() => {
/******/ // define __esModule on exports
/******/ __webpack_require__.r = (exports) => {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/hot module replacement */
/******/ (() => {
/******/ var currentModuleData = {};
/******/ var installedModules = __webpack_require__.c;
/******/
/******/ // module and require creation
/******/ var currentChildModule;
/******/ var currentParents = [];
/******/
/******/ // status
/******/ var registeredStatusHandlers = [];
/******/ var currentStatus = "idle";
/******/
/******/ // while downloading
/******/ var blockingPromises = 0;
/******/ var blockingPromisesWaiting = [];
/******/
/******/ // The update info
/******/ var currentUpdateApplyHandlers;
/******/ var queuedInvalidatedModules;
/******/
/******/ __webpack_require__.hmrD = currentModuleData;
/******/
/******/ __webpack_require__.i.push(function (options) {
/******/ var module = options.module;
/******/ var require = createRequire(options.require, options.id);
/******/ module.hot = createModuleHotObject(options.id, module);
/******/ module.parents = currentParents;
/******/ module.children = [];
/******/ currentParents = [];
/******/ options.require = require;
/******/ });
/******/
/******/ __webpack_require__.hmrC = {};
/******/ __webpack_require__.hmrI = {};
/******/
/******/ function createRequire(require, moduleId) {
/******/ var me = installedModules[moduleId];
/******/ if (!me) return require;
/******/ var fn = function (request) {
/******/ if (me.hot.active) {
/******/ if (installedModules[request]) {
/******/ var parents = installedModules[request].parents;
/******/ if (parents.indexOf(moduleId) === -1) {
/******/ parents.push(moduleId);
/******/ }
/******/ } else {
/******/ currentParents = [moduleId];
/******/ currentChildModule = request;
/******/ }
/******/ if (me.children.indexOf(request) === -1) {
/******/ me.children.push(request);
/******/ }
/******/ } else {
/******/ console.warn(
/******/ "[HMR] unexpected require(" +
/******/ request +
/******/ ") from disposed module " +
/******/ moduleId
/******/ );
/******/ currentParents = [];
/******/ }
/******/ return require(request);
/******/ };
/******/ var createPropertyDescriptor = function (name) {
/******/ return {
/******/ configurable: true,
/******/ enumerable: true,
/******/ get: function () {
/******/ return require[name];
/******/ },
/******/ set: function (value) {
/******/ require[name] = value;
/******/ }
/******/ };
/******/ };
/******/ for (var name in require) {
/******/ if (Object.prototype.hasOwnProperty.call(require, name) && name !== "e") {
/******/ Object.defineProperty(fn, name, createPropertyDescriptor(name));
/******/ }
/******/ }
/******/ fn.e = function (chunkId, fetchPriority) {
/******/ return trackBlockingPromise(require.e(chunkId, fetchPriority));
/******/ };
/******/ return fn;
/******/ }
/******/
/******/ function createModuleHotObject(moduleId, me) {
/******/ var _main = currentChildModule !== moduleId;
/******/ var hot = {
/******/ // private stuff
/******/ _acceptedDependencies: {},
/******/ _acceptedErrorHandlers: {},
/******/ _declinedDependencies: {},
/******/ _selfAccepted: false,
/******/ _selfDeclined: false,
/******/ _selfInvalidated: false,
/******/ _disposeHandlers: [],
/******/ _main: _main,
/******/ _requireSelf: function () {
/******/ currentParents = me.parents.slice();
/******/ currentChildModule = _main ? undefined : moduleId;
/******/ __webpack_require__(moduleId);
/******/ },
/******/
/******/ // Module API
/******/ active: true,
/******/ accept: function (dep, callback, errorHandler) {
/******/ if (dep === undefined) hot._selfAccepted = true;
/******/ else if (typeof dep === "function") hot._selfAccepted = dep;
/******/ else if (typeof dep === "object" && dep !== null) {
/******/ for (var i = 0; i < dep.length; i++) {
/******/ hot._acceptedDependencies[dep[i]] = callback || function () {};
/******/ hot._acceptedErrorHandlers[dep[i]] = errorHandler;
/******/ }
/******/ } else {
/******/ hot._acceptedDependencies[dep] = callback || function () {};
/******/ hot._acceptedErrorHandlers[dep] = errorHandler;
/******/ }
/******/ },
/******/ decline: function (dep) {
/******/ if (dep === undefined) hot._selfDeclined = true;
/******/ else if (typeof dep === "object" && dep !== null)
/******/ for (var i = 0; i < dep.length; i++)
/******/ hot._declinedDependencies[dep[i]] = true;
/******/ else hot._declinedDependencies[dep] = true;
/******/ },
/******/ dispose: function (callback) {
/******/ hot._disposeHandlers.push(callback);
/******/ },
/******/ addDisposeHandler: function (callback) {
/******/ hot._disposeHandlers.push(callback);
/******/ },
/******/ removeDisposeHandler: function (callback) {
/******/ var idx = hot._disposeHandlers.indexOf(callback);
/******/ if (idx >= 0) hot._disposeHandlers.splice(idx, 1);
/******/ },
/******/ invalidate: function () {
/******/ this._selfInvalidated = true;
/******/ switch (currentStatus) {
/******/ case "idle":
/******/ currentUpdateApplyHandlers = [];
/******/ Object.keys(__webpack_require__.hmrI).forEach(function (key) {
/******/ __webpack_require__.hmrI[key](
/******/ moduleId,
/******/ currentUpdateApplyHandlers
/******/ );
/******/ });
/******/ setStatus("ready");
/******/ break;
/******/ case "ready":
/******/ Object.keys(__webpack_require__.hmrI).forEach(function (key) {
/******/ __webpack_require__.hmrI[key](
/******/ moduleId,
/******/ currentUpdateApplyHandlers
/******/ );
/******/ });
/******/ break;
/******/ case "prepare":
/******/ case "check":
/******/ case "dispose":
/******/ case "apply":
/******/ (queuedInvalidatedModules = queuedInvalidatedModules || []).push(
/******/ moduleId
/******/ );
/******/ break;
/******/ default:
/******/ // ignore requests in error states
/******/ break;
/******/ }
/******/ },
/******/
/******/ // Management API
/******/ check: hotCheck,
/******/ apply: hotApply,
/******/ status: function (l) {
/******/ if (!l) return currentStatus;
/******/ registeredStatusHandlers.push(l);
/******/ },
/******/ addStatusHandler: function (l) {
/******/ registeredStatusHandlers.push(l);
/******/ },
/******/ removeStatusHandler: function (l) {
/******/ var idx = registeredStatusHandlers.indexOf(l);
/******/ if (idx >= 0) registeredStatusHandlers.splice(idx, 1);
/******/ },
/******/
/******/ // inherit from previous dispose call
/******/ data: currentModuleData[moduleId]
/******/ };
/******/ currentChildModule = undefined;
/******/ return hot;
/******/ }
/******/
/******/ function setStatus(newStatus) {
/******/ currentStatus = newStatus;
/******/ var results = [];
/******/
/******/ for (var i = 0; i < registeredStatusHandlers.length; i++)
/******/ results[i] = registeredStatusHandlers[i].call(null, newStatus);
/******/
/******/ return Promise.all(results).then(function () {});
/******/ }
/******/
/******/ function unblock() {
/******/ if (--blockingPromises === 0) {
/******/ setStatus("ready").then(function () {
/******/ if (blockingPromises === 0) {
/******/ var list = blockingPromisesWaiting;
/******/ blockingPromisesWaiting = [];
/******/ for (var i = 0; i < list.length; i++) {
/******/ list[i]();
/******/ }
/******/ }
/******/ });
/******/ }
/******/ }
/******/
/******/ function trackBlockingPromise(promise) {
/******/ switch (currentStatus) {
/******/ case "ready":
/******/ setStatus("prepare");
/******/ /* fallthrough */
/******/ case "prepare":
/******/ blockingPromises++;
/******/ promise.then(unblock, unblock);
/******/ return promise;
/******/ default:
/******/ return promise;
/******/ }
/******/ }
/******/
/******/ function waitForBlockingPromises(fn) {
/******/ if (blockingPromises === 0) return fn();
/******/ return new Promise(function (resolve) {
/******/ blockingPromisesWaiting.push(function () {
/******/ resolve(fn());
/******/ });
/******/ });
/******/ }
/******/
/******/ function hotCheck(applyOnUpdate) {
/******/ if (currentStatus !== "idle") {
/******/ throw new Error("check() is only allowed in idle status");
/******/ }
/******/ return setStatus("check")
/******/ .then(__webpack_require__.hmrM)
/******/ .then(function (update) {
/******/ if (!update) {
/******/ return setStatus(applyInvalidatedModules() ? "ready" : "idle").then(
/******/ function () {
/******/ return null;
/******/ }
/******/ );
/******/ }
/******/
/******/ return setStatus("prepare").then(function () {
/******/ var updatedModules = [];
/******/ currentUpdateApplyHandlers = [];
/******/
/******/ return Promise.all(
/******/ Object.keys(__webpack_require__.hmrC).reduce(function (
/******/ promises,
/******/ key
/******/ ) {
/******/ __webpack_require__.hmrC[key](
/******/ update.c,
/******/ update.r,
/******/ update.m,
/******/ promises,
/******/ currentUpdateApplyHandlers,
/******/ updatedModules
/******/ );
/******/ return promises;
/******/ }, [])
/******/ ).then(function () {
/******/ return waitForBlockingPromises(function () {
/******/ if (applyOnUpdate) {
/******/ return internalApply(applyOnUpdate);
/******/ }
/******/ return setStatus("ready").then(function () {
/******/ return updatedModules;
/******/ });
/******/ });
/******/ });
/******/ });
/******/ });
/******/ }
/******/
/******/ function hotApply(options) {
/******/ if (currentStatus !== "ready") {
/******/ return Promise.resolve().then(function () {
/******/ throw new Error(
/******/ "apply() is only allowed in ready status (state: " +
/******/ currentStatus +
/******/ ")"
/******/ );
/******/ });
/******/ }
/******/ return internalApply(options);
/******/ }
/******/
/******/ function internalApply(options) {
/******/ options = options || {};
/******/
/******/ applyInvalidatedModules();
/******/
/******/ var results = currentUpdateApplyHandlers.map(function (handler) {
/******/ return handler(options);
/******/ });
/******/ currentUpdateApplyHandlers = undefined;
/******/
/******/ var errors = results
/******/ .map(function (r) {
/******/ return r.error;
/******/ })
/******/ .filter(Boolean);
/******/
/******/ if (errors.length > 0) {
/******/ return setStatus("abort").then(function () {
/******/ throw errors[0];
/******/ });
/******/ }
/******/
/******/ // Now in "dispose" phase
/******/ var disposePromise = setStatus("dispose");
/******/
/******/ results.forEach(function (result) {
/******/ if (result.dispose) result.dispose();
/******/ });
/******/
/******/ // Now in "apply" phase
/******/ var applyPromise = setStatus("apply");
/******/
/******/ var error;
/******/ var reportError = function (err) {
/******/ if (!error) error = err;
/******/ };
/******/
/******/ var outdatedModules = [];
/******/
/******/ var onAccepted = function () {
/******/ return Promise.all([disposePromise, applyPromise]).then(function () {
/******/ // handle errors in accept handlers and self accepted module load
/******/ if (error) {
/******/ return setStatus("fail").then(function () {
/******/ throw error;
/******/ });
/******/ }
/******/
/******/ if (queuedInvalidatedModules) {
/******/ return internalApply(options).then(function (list) {
/******/ outdatedModules.forEach(function (moduleId) {
/******/ if (list.indexOf(moduleId) < 0) list.push(moduleId);
/******/ });
/******/ return list;
/******/ });
/******/ }
/******/
/******/ return setStatus("idle").then(function () {
/******/ return outdatedModules;
/******/ });
/******/ });
/******/ };
/******/
/******/ return Promise.all(
/******/ results
/******/ .filter(function (result) {
/******/ return result.apply;
/******/ })
/******/ .map(function (result) {
/******/ return result.apply(reportError);
/******/ })
/******/ )
/******/ .then(function (applyResults) {
/******/ applyResults.forEach(function (modules) {
/******/ if (modules) {
/******/ for (var i = 0; i < modules.length; i++) {
/******/ outdatedModules.push(modules[i]);
/******/ }
/******/ }
/******/ });
/******/ })
/******/ .then(onAccepted);
/******/ }
/******/
/******/ function applyInvalidatedModules() {
/******/ if (queuedInvalidatedModules) {
/******/ if (!currentUpdateApplyHandlers) currentUpdateApplyHandlers = [];
/******/ Object.keys(__webpack_require__.hmrI).forEach(function (key) {
/******/ queuedInvalidatedModules.forEach(function (moduleId) {
/******/ __webpack_require__.hmrI[key](
/******/ moduleId,
/******/ currentUpdateApplyHandlers
/******/ );
/******/ });
/******/ });
/******/ queuedInvalidatedModules = undefined;
/******/ return true;
/******/ }
/******/ }
/******/ })();
/******/
/******/ /* webpack/runtime/publicPath */
/******/ (() => {
/******/ __webpack_require__.p = "";
/******/ })();
/******/
/******/ /* webpack/runtime/jsonp chunk loading */
/******/ (() => {
/******/ // no baseURI
/******/
/******/ // object to store loaded and loading chunks
/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
/******/ var installedChunks = __webpack_require__.hmrS_jsonp = __webpack_require__.hmrS_jsonp || {
/******/ "index": 0
/******/ };
/******/
/******/ __webpack_require__.f.j = (chunkId, promises) => {
/******/ // JSONP chunk loading for javascript
/******/ var installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;
/******/ if(installedChunkData !== 0) { // 0 means "already installed".
/******/
/******/ // a Promise means "currently loading".
/******/ if(installedChunkData) {
/******/ promises.push(installedChunkData[2]);
/******/ } else {
/******/ if(true) { // all chunks have JS
/******/ // setup Promise in chunk cache
/******/ var promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));
/******/ promises.push(installedChunkData[2] = promise);
/******/
/******/ // start chunk loading
/******/ var url = __webpack_require__.p + __webpack_require__.u(chunkId);
/******/ // create error before stack unwound to get useful stacktrace later
/******/ var error = new Error();
/******/ var loadingEnded = (event) => {
/******/ if(__webpack_require__.o(installedChunks, chunkId)) {
/******/ installedChunkData = installedChunks[chunkId];
/******/ if(installedChunkData !== 0) installedChunks[chunkId] = undefined;
/******/ if(installedChunkData) {
/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type);
/******/ var realSrc = event && event.target && event.target.src;
/******/ error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')';
/******/ error.name = 'ChunkLoadError';
/******/ error.type = errorType;
/******/ error.request = realSrc;
/******/ installedChunkData[1](error);
/******/ }
/******/ }
/******/ };
/******/ __webpack_require__.l(url, loadingEnded, "chunk-" + chunkId, chunkId);
/******/ }
/******/ }
/******/ }
/******/ };
/******/
/******/ // no prefetching
/******/
/******/ // no preloaded
/******/
/******/ var currentUpdatedModulesList;
/******/ var waitingUpdateResolves = {};
/******/ function loadUpdateChunk(chunkId, updatedModulesList) {
/******/ currentUpdatedModulesList = updatedModulesList;
/******/ return new Promise((resolve, reject) => {
/******/ waitingUpdateResolves[chunkId] = resolve;
/******/ // start update chunk loading
/******/ var url = __webpack_require__.p + __webpack_require__.hu(chunkId);
/******/ // create error before stack unwound to get useful stacktrace later
/******/ var error = new Error();
/******/ var loadingEnded = (event) => {
/******/ if(waitingUpdateResolves[chunkId]) {
/******/ waitingUpdateResolves[chunkId] = undefined
/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type);
/******/ var realSrc = event && event.target && event.target.src;
/******/ error.message = 'Loading hot update chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')';
/******/ error.name = 'ChunkLoadError';
/******/ error.type = errorType;
/******/ error.request = realSrc;
/******/ reject(error);
/******/ }
/******/ };
/******/ __webpack_require__.l(url, loadingEnded);
/******/ });
/******/ }
/******/
/******/ globalThis["webpackHotUpdateGoFaster"] = (chunkId, moreModules, runtime) => {
/******/ for(var moduleId in moreModules) {
/******/ if(__webpack_require__.o(moreModules, moduleId)) {
/******/ currentUpdate[moduleId] = moreModules[moduleId];
/******/ if(currentUpdatedModulesList) currentUpdatedModulesList.push(moduleId);
/******/ }
/******/ }
/******/ if(runtime) currentUpdateRuntime.push(runtime);
/******/ if(waitingUpdateResolves[chunkId]) {
/******/ waitingUpdateResolves[chunkId]();
/******/ waitingUpdateResolves[chunkId] = undefined;
/******/ }
/******/ };
/******/
/******/ var currentUpdateChunks;
/******/ var currentUpdate;
/******/ var currentUpdateRemovedChunks;
/******/ var currentUpdateRuntime;
/******/ function applyHandler(options) {
/******/ if (__webpack_require__.f) delete __webpack_require__.f.jsonpHmr;
/******/ currentUpdateChunks = undefined;
/******/ function getAffectedModuleEffects(updateModuleId) {
/******/ var outdatedModules = [updateModuleId];
/******/ var outdatedDependencies = {};
/******/
/******/ var queue = outdatedModules.map(function (id) {
/******/ return {
/******/ chain: [id],
/******/ id: id
/******/ };
/******/ });
/******/ while (queue.length > 0) {
/******/ var queueItem = queue.pop();
/******/ var moduleId = queueItem.id;
/******/ var chain = queueItem.chain;
/******/ var module = __webpack_require__.c[moduleId];
/******/ if (
/******/ !module ||
/******/ (module.hot._selfAccepted && !module.hot._selfInvalidated)
/******/ )
/******/ continue;
/******/ if (module.hot._selfDeclined) {
/******/ return {
/******/ type: "self-declined",
/******/ chain: chain,
/******/ moduleId: moduleId
/******/ };
/******/ }
/******/ if (module.hot._main) {
/******/ return {
/******/ type: "unaccepted",
/******/ chain: chain,
/******/ moduleId: moduleId
/******/ };
/******/ }
/******/ for (var i = 0; i < module.parents.length; i++) {
/******/ var parentId = module.parents[i];
/******/ var parent = __webpack_require__.c[parentId];
/******/ if (!parent) continue;
/******/ if (parent.hot._declinedDependencies[moduleId]) {
/******/ return {
/******/ type: "declined",
/******/ chain: chain.concat([parentId]),
/******/ moduleId: moduleId,
/******/ parentId: parentId
/******/ };
/******/ }
/******/ if (outdatedModules.indexOf(parentId) !== -1) continue;
/******/ if (parent.hot._acceptedDependencies[moduleId]) {
/******/ if (!outdatedDependencies[parentId])
/******/ outdatedDependencies[parentId] = [];
/******/ addAllToSet(outdatedDependencies[parentId], [moduleId]);
/******/ continue;
/******/ }
/******/ delete outdatedDependencies[parentId];
/******/ outdatedModules.push(parentId);
/******/ queue.push({
/******/ chain: chain.concat([parentId]),
/******/ id: parentId
/******/ });
/******/ }
/******/ }
/******/
/******/ return {
/******/ type: "accepted",
/******/ moduleId: updateModuleId,
/******/ outdatedModules: outdatedModules,
/******/ outdatedDependencies: outdatedDependencies
/******/ };
/******/ }
/******/
/******/ function addAllToSet(a, b) {
/******/ for (var i = 0; i < b.length; i++) {
/******/ var item = b[i];
/******/ if (a.indexOf(item) === -1) a.push(item);
/******/ }
/******/ }
/******/
/******/ // at begin all updates modules are outdated
/******/ // the "outdated" status can propagate to parents if they don't accept the children
/******/ var outdatedDependencies = {};
/******/ var outdatedModules = [];
/******/ var appliedUpdate = {};
/******/
/******/ var warnUnexpectedRequire = function warnUnexpectedRequire(module) {
/******/ console.warn(
/******/ "[HMR] unexpected require(" + module.id + ") to disposed module"
/******/ );
/******/ };
/******/
/******/ for (var moduleId in currentUpdate) {
/******/ if (__webpack_require__.o(currentUpdate, moduleId)) {
/******/ var newModuleFactory = currentUpdate[moduleId];
/******/ var result = newModuleFactory
/******/ ? getAffectedModuleEffects(moduleId)
/******/ : {
/******/ type: "disposed",
/******/ moduleId: moduleId
/******/ };
/******/ /** @type {Error|false} */
/******/ var abortError = false;
/******/ var doApply = false;
/******/ var doDispose = false;
/******/ var chainInfo = "";
/******/ if (result.chain) {
/******/ chainInfo = "\nUpdate propagation: " + result.chain.join(" -> ");
/******/ }
/******/ switch (result.type) {
/******/ case "self-declined":
/******/ if (options.onDeclined) options.onDeclined(result);
/******/ if (!options.ignoreDeclined)
/******/ abortError = new Error(
/******/ "Aborted because of self decline: " +
/******/ result.moduleId +
/******/ chainInfo
/******/ );
/******/ break;
/******/ case "declined":
/******/ if (options.onDeclined) options.onDeclined(result);
/******/ if (!options.ignoreDeclined)
/******/ abortError = new Error(
/******/ "Aborted because of declined dependency: " +
/******/ result.moduleId +
/******/ " in " +
/******/ result.parentId +
/******/ chainInfo
/******/ );
/******/ break;
/******/ case "unaccepted":
/******/ if (options.onUnaccepted) options.onUnaccepted(result);
/******/ if (!options.ignoreUnaccepted)
/******/ abortError = new Error(
/******/ "Aborted because " + moduleId + " is not accepted" + chainInfo
/******/ );
/******/ break;
/******/ case "accepted":
/******/ if (options.onAccepted) options.onAccepted(result);
/******/ doApply = true;
/******/ break;
/******/ case "disposed":
/******/ if (options.onDisposed) options.onDisposed(result);
/******/ doDispose = true;
/******/ break;
/******/ default:
/******/ throw new Error("Unexception type " + result.type);
/******/ }
/******/ if (abortError) {
/******/ return {
/******/ error: abortError
/******/ };
/******/ }
/******/ if (doApply) {
/******/ appliedUpdate[moduleId] = newModuleFactory;
/******/ addAllToSet(outdatedModules, result.outdatedModules);
/******/ for (moduleId in result.outdatedDependencies) {
/******/ if (__webpack_require__.o(result.outdatedDependencies, moduleId)) {
/******/ if (!outdatedDependencies[moduleId])
/******/ outdatedDependencies[moduleId] = [];
/******/ addAllToSet(
/******/ outdatedDependencies[moduleId],
/******/ result.outdatedDependencies[moduleId]
/******/ );
/******/ }
/******/ }
/******/ }
/******/ if (doDispose) {
/******/ addAllToSet(outdatedModules, [result.moduleId]);
/******/ appliedUpdate[moduleId] = warnUnexpectedRequire;
/******/ }
/******/ }
/******/ }
/******/ currentUpdate = undefined;
/******/
/******/ // Store self accepted outdated modules to require them later by the module system
/******/ var outdatedSelfAcceptedModules = [];
/******/ for (var j = 0; j < outdatedModules.length; j++) {
/******/ var outdatedModuleId = outdatedModules[j];
/******/ var module = __webpack_require__.c[outdatedModuleId];
/******/ if (
/******/ module &&
/******/ (module.hot._selfAccepted || module.hot._main) &&
/******/ // removed self-accepted modules should not be required
/******/ appliedUpdate[outdatedModuleId] !== warnUnexpectedRequire &&
/******/ // when called invalidate self-accepting is not possible
/******/ !module.hot._selfInvalidated
/******/ ) {
/******/ outdatedSelfAcceptedModules.push({
/******/ module: outdatedModuleId,
/******/ require: module.hot._requireSelf,
/******/ errorHandler: module.hot._selfAccepted
/******/ });
/******/ }
/******/ }
/******/
/******/ var moduleOutdatedDependencies;
/******/
/******/ return {
/******/ dispose: function () {
/******/ currentUpdateRemovedChunks.forEach(function (chunkId) {
/******/ delete installedChunks[chunkId];
/******/ });
/******/ currentUpdateRemovedChunks = undefined;
/******/
/******/ var idx;
/******/ var queue = outdatedModules.slice();
/******/ while (queue.length > 0) {
/******/ var moduleId = queue.pop();
/******/ var module = __webpack_require__.c[moduleId];
/******/ if (!module) continue;
/******/
/******/ var data = {};
/******/
/******/ // Call dispose handlers
/******/ var disposeHandlers = module.hot._disposeHandlers;
/******/ for (j = 0; j < disposeHandlers.length; j++) {
/******/ disposeHandlers[j].call(null, data);
/******/ }
/******/ __webpack_require__.hmrD[moduleId] = data;
/******/
/******/ // disable module (this disables requires from this module)
/******/ module.hot.active = false;
/******/
/******/ // remove module from cache
/******/ delete __webpack_require__.c[moduleId];
/******/
/******/ // when disposing there is no need to call dispose handler
/******/ delete outdatedDependencies[moduleId];
/******/
/******/ // remove "parents" references from all children
/******/ for (j = 0; j < module.children.length; j++) {
/******/ var child = __webpack_require__.c[module.children[j]];
/******/ if (!child) continue;
/******/ idx = child.parents.indexOf(moduleId);
/******/ if (idx >= 0) {
/******/ child.parents.splice(idx, 1);
/******/ }
/******/ }
/******/ }
/******/
/******/ // remove outdated dependency from module children
/******/ var dependency;
/******/ for (var outdatedModuleId in outdatedDependencies) {
/******/ if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) {
/******/ module = __webpack_require__.c[outdatedModuleId];
/******/ if (module) {
/******/ moduleOutdatedDependencies =
/******/ outdatedDependencies[outdatedModuleId];
/******/ for (j = 0; j < moduleOutdatedDependencies.length; j++) {
/******/ dependency = moduleOutdatedDependencies[j];
/******/ idx = module.children.indexOf(dependency);
/******/ if (idx >= 0) module.children.splice(idx, 1);
/******/ }
/******/ }
/******/ }
/******/ }
/******/ },
/******/ apply: function (reportError) {
/******/ var acceptPromises = [];
/******/ // insert new code
/******/ for (var updateModuleId in appliedUpdate) {
/******/ if (__webpack_require__.o(appliedUpdate, updateModuleId)) {
/******/ __webpack_require__.m[updateModuleId] = appliedUpdate[updateModuleId];
/******/ }
/******/ }
/******/
/******/ // run new runtime modules
/******/ for (var i = 0; i < currentUpdateRuntime.length; i++) {
/******/ currentUpdateRuntime[i](__webpack_require__);
/******/ }
/******/
/******/ // call accept handlers
/******/ for (var outdatedModuleId in outdatedDependencies) {
/******/ if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) {
/******/ var module = __webpack_require__.c[outdatedModuleId];
/******/ if (module) {
/******/ moduleOutdatedDependencies =
/******/ outdatedDependencies[outdatedModuleId];
/******/ var callbacks = [];
/******/ var errorHandlers = [];
/******/ var dependenciesForCallbacks = [];
/******/ for (var j = 0; j < moduleOutdatedDependencies.length; j++) {
/******/ var dependency = moduleOutdatedDependencies[j];
/******/ var acceptCallback =
/******/ module.hot._acceptedDependencies[dependency];
/******/ var errorHandler =
/******/ module.hot._acceptedErrorHandlers[dependency];
/******/ if (acceptCallback) {
/******/ if (callbacks.indexOf(acceptCallback) !== -1) continue;
/******/ callbacks.push(acceptCallback);
/******/ errorHandlers.push(errorHandler);
/******/ dependenciesForCallbacks.push(dependency);
/******/ }
/******/ }
/******/ for (var k = 0; k < callbacks.length; k++) {
/******/ var result;
/******/ try {
/******/ result = callbacks[k].call(null, moduleOutdatedDependencies);
/******/ } catch (err) {
/******/ if (typeof errorHandlers[k] === "function") {
/******/ try {
/******/ errorHandlers[k](err, {
/******/ moduleId: outdatedModuleId,
/******/ dependencyId: dependenciesForCallbacks[k]
/******/ });
/******/ } catch (err2) {
/******/ if (options.onErrored) {
/******/ options.onErrored({
/******/ type: "accept-error-handler-errored",
/******/ moduleId: outdatedModuleId,
/******/ dependencyId: dependenciesForCallbacks[k],
/******/ error: err2,
/******/ originalError: err
/******/ });
/******/ }
/******/ if (!options.ignoreErrored) {
/******/ reportError(err2);
/******/ reportError(err);
/******/ }
/******/ }
/******/ } else {
/******/ if (options.onErrored) {
/******/ options.onErrored({
/******/ type: "accept-errored",
/******/ moduleId: outdatedModuleId,
/******/ dependencyId: dependenciesForCallbacks[k],
/******/ error: err
/******/ });
/******/ }
/******/ if (!options.ignoreErrored) {
/******/ reportError(err);
/******/ }
/******/ }
/******/ }
/******/ if (result && typeof result.then === "function") {
/******/ acceptPromises.push(result);
/******/ }
/******/ }
/******/ }
/******/ }
/******/ }
/******/
/******/ var onAccepted = function () {
/******/ // Load self accepted modules
/******/ for (var o = 0; o < outdatedSelfAcceptedModules.length; o++) {
/******/ var item = outdatedSelfAcceptedModules[o];
/******/ var moduleId = item.module;
/******/ try {
/******/ item.require(moduleId);
/******/ } catch (err) {
/******/ if (typeof item.errorHandler === "function") {
/******/ try {
/******/ item.errorHandler(err, {
/******/ moduleId: moduleId,
/******/ module: __webpack_require__.c[moduleId]
/******/ });
/******/ } catch (err1) {
/******/ if (options.onErrored) {
/******/ options.onErrored({
/******/ type: "self-accept-error-handler-errored",
/******/ moduleId: moduleId,
/******/ error: err1,
/******/ originalError: err
/******/ });
/******/ }
/******/ if (!options.ignoreErrored) {
/******/ reportError(err1);
/******/ reportError(err);
/******/ }
/******/ }
/******/ } else {
/******/ if (options.onErrored) {
/******/ options.onErrored({
/******/ type: "self-accept-errored",
/******/ moduleId: moduleId,
/******/ error: err
/******/ });
/******/ }
/******/ if (!options.ignoreErrored) {
/******/ reportError(err);
/******/ }
/******/ }
/******/ }
/******/ }
/******/ };
/******/
/******/ return Promise.all(acceptPromises)
/******/ .then(onAccepted)
/******/ .then(function () {
/******/ return outdatedModules;
/******/ });
/******/ }
/******/ };
/******/ }
/******/ __webpack_require__.hmrI.jsonp = function (moduleId, applyHandlers) {
/******/ if (!currentUpdate) {
/******/ currentUpdate = {};
/******/ currentUpdateRuntime = [];
/******/ currentUpdateRemovedChunks = [];
/******/ applyHandlers.push(applyHandler);
/******/ }
/******/ if (!__webpack_require__.o(currentUpdate, moduleId)) {
/******/ currentUpdate[moduleId] = __webpack_require__.m[moduleId];
/******/ }
/******/ };
/******/ __webpack_require__.hmrC.jsonp = function (
/******/ chunkIds,
/******/ removedChunks,
/******/ removedModules,
/******/ promises,
/******/ applyHandlers,
/******/ updatedModulesList
/******/ ) {
/******/ applyHandlers.push(applyHandler);
/******/ currentUpdateChunks = {};
/******/ currentUpdateRemovedChunks = removedChunks;
/******/ currentUpdate = removedModules.reduce(function (obj, key) {
/******/ obj[key] = false;
/******/ return obj;
/******/ }, {});
/******/ currentUpdateRuntime = [];
/******/ chunkIds.forEach(function (chunkId) {
/******/ if (
/******/ __webpack_require__.o(installedChunks, chunkId) &&
/******/ installedChunks[chunkId] !== undefined
/******/ ) {
/******/ promises.push(loadUpdateChunk(chunkId, updatedModulesList));
/******/ currentUpdateChunks[chunkId] = true;
/******/ } else {
/******/ currentUpdateChunks[chunkId] = false;
/******/ }
/******/ });
/******/ if (__webpack_require__.f) {
/******/ __webpack_require__.f.jsonpHmr = function (chunkId, promises) {
/******/ if (
/******/ currentUpdateChunks &&
/******/ __webpack_require__.o(currentUpdateChunks, chunkId) &&
/******/ !currentUpdateChunks[chunkId]
/******/ ) {
/******/ promises.push(loadUpdateChunk(chunkId));
/******/ currentUpdateChunks[chunkId] = true;
/******/ }
/******/ };
/******/ }
/******/ };
/******/
/******/ __webpack_require__.hmrM = () => {
/******/ if (typeof fetch === "undefined") throw new Error("No browser support: need fetch API");
/******/ return fetch(__webpack_require__.p + __webpack_require__.hmrF()).then((response) => {
/******/ if(response.status === 404) return; // no update available
/******/ if(!response.ok) throw new Error("Failed to fetch update manifest " + response.statusText);
/******/ return response.json();
/******/ });
/******/ };
/******/
/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);
/******/
/******/ // install a JSONP callback for chunk loading
/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => {
/******/ var [chunkIds, moreModules, runtime] = data;
/******/ // add "moreModules" to the modules object,
/******/ // then flag all "chunkIds" as loaded and fire callback
/******/ var moduleId, chunkId, i = 0;
/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) {
/******/ for(moduleId in moreModules) {
/******/ if(__webpack_require__.o(moreModules, moduleId)) {
/******/ __webpack_require__.m[moduleId] = moreModules[moduleId];
/******/ }
/******/ }
/******/ if(runtime) var result = runtime(__webpack_require__);
/******/ }
/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data);
/******/ for(;i < chunkIds.length; i++) {
/******/ chunkId = chunkIds[i];
/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {
/******/ installedChunks[chunkId][0]();
/******/ }
/******/ installedChunks[chunkId] = 0;
/******/ }
/******/ return __webpack_require__.O(result);
/******/ }
/******/
/******/ var chunkLoadingGlobal = globalThis["webpackChunkGoFaster"] = globalThis["webpackChunkGoFaster"] || [];
/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));
/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));
/******/ })();
/******/
/************************************************************************/
/******/
/******/ // module cache are used so entry inlining is disabled
/******/ // startup
/******/ // Load entry module and return exports
/******/ var __webpack_exports__ = __webpack_require__.O(undefined, ["vendors"], () => (__webpack_require__("./src/renderer/main.js")))
/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__);
/******/
/******/ })()
;