diff --git a/.gitignore b/.gitignore index 3c38bb4..9a11415 100644 --- a/.gitignore +++ b/.gitignore @@ -31,7 +31,7 @@ dist/ # ==================== 日志文件 ==================== logs/ *.log -log/ +/log/ # ==================== 临时文件 ==================== *.tmp diff --git a/deploy/nginx/worklog.conf b/deploy/nginx/worklog.conf index e22f380..4f5ecf7 100644 --- a/deploy/nginx/worklog.conf +++ b/deploy/nginx/worklog.conf @@ -24,9 +24,9 @@ server { gzip_min_length 1024; gzip_types text/plain text/css text/xml text/javascript application/json application/javascript application/xml+rss application/rss+xml font/truetype font/opentype application/vnd.ms-fontobject image/svg+xml; - # 管理后台 + # 管理后台前端静态资源 location /admin/ { - alias /opt/worklog/worklog-admin/dist/; + alias /opt/worklog/worklog-web/dist/; try_files $uri $uri/ /admin/index.html; index index.html; @@ -37,7 +37,7 @@ server { } } - # 移动端 H5 + # 移动端 H5 前端静态资源 location /mobile/ { alias /opt/worklog/worklog-mobile/dist/; try_files $uri $uri/ /mobile/index.html; @@ -50,9 +50,9 @@ server { } } - # 后端 API 代理 - location /api/ { - proxy_pass http://127.0.0.1:8080; + # 管理后台 API 代理 (/wladmin/api/v1 → /wlog/api/v1) + location /wladmin/api/ { + proxy_pass http://127.0.0.1:8200/wlog/api/; # 代理头设置 proxy_set_header Host $host; @@ -70,16 +70,33 @@ server { proxy_buffer_size 4k; proxy_buffers 8 4k; proxy_busy_buffers_size 8k; + } + + # 移动端 API 代理 (/wlmobile/api/v1 → /wlog/api/v1) + location /wlmobile/api/ { + proxy_pass http://127.0.0.1:8200/wlog/api/; - # WebSocket 支持(如需要) - # proxy_http_version 1.1; - # proxy_set_header Upgrade $http_upgrade; - # proxy_set_header Connection "upgrade"; + # 代理头设置 + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + # 超时设置 + proxy_connect_timeout 60s; + proxy_send_timeout 60s; + proxy_read_timeout 60s; + + # 缓冲设置 + proxy_buffering on; + proxy_buffer_size 4k; + proxy_buffers 8 4k; + proxy_busy_buffers_size 8k; } # Swagger API 文档(生产环境建议关闭或限制访问) - location /swagger-ui.html { - proxy_pass http://127.0.0.1:8080; + location /wlog/swagger-ui.html { + proxy_pass http://127.0.0.1:8200; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; @@ -90,8 +107,8 @@ server { } # 健康检查接口 - location /api/v1/health { - proxy_pass http://127.0.0.1:8080; + location /wlog/api/v1/health { + proxy_pass http://127.0.0.1:8200; proxy_set_header Host $host; access_log off; # 健康检查不记录日志 } diff --git a/worklog-mobile/.gitignore b/worklog-mobile/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/worklog-mobile/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/worklog-mobile/index.html b/worklog-mobile/index.html new file mode 100644 index 0000000..5aa90f9 --- /dev/null +++ b/worklog-mobile/index.html @@ -0,0 +1,13 @@ + + + + + + + 工作日志 + + +
+ + + diff --git a/worklog-mobile/package.json b/worklog-mobile/package.json new file mode 100644 index 0000000..5669dae --- /dev/null +++ b/worklog-mobile/package.json @@ -0,0 +1,29 @@ +{ + "name": "worklog-mobile", + "private": true, + "version": "1.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vue-tsc -b && vite build", + "preview": "vite preview" + }, + "dependencies": { + "axios": "^1.7.2", + "pinia": "^2.1.7", + "vant": "^4.8.4", + "vue": "^3.4.21", + "vue-router": "^4.3.0" + }, + "devDependencies": { + "@types/node": "^20.11.24", + "@vitejs/plugin-vue": "^5.0.4", + "@vue/tsconfig": "^0.5.1", + "autoprefixer": "^10.4.18", + "postcss": "^8.4.35", + "postcss-px-to-viewport": "^1.1.1", + "typescript": "~5.4.2", + "vite": "^5.1.5", + "vue-tsc": "^2.0.6" + } +} diff --git a/worklog-mobile/public/vite.svg b/worklog-mobile/public/vite.svg new file mode 100644 index 0000000..6a41099 --- /dev/null +++ b/worklog-mobile/public/vite.svg @@ -0,0 +1 @@ + diff --git a/worklog-mobile/src/App.vue b/worklog-mobile/src/App.vue new file mode 100644 index 0000000..6c321d1 --- /dev/null +++ b/worklog-mobile/src/App.vue @@ -0,0 +1,12 @@ + + + + + diff --git a/worklog-mobile/src/api/auth.ts b/worklog-mobile/src/api/auth.ts new file mode 100644 index 0000000..4b41b27 --- /dev/null +++ b/worklog-mobile/src/api/auth.ts @@ -0,0 +1,32 @@ +// 认证相关 API +import { request } from '@/utils/request' + +// 登录请求参数 +export interface LoginParams { + username: string + password: string +} + +// 登录响应 +export interface LoginResult { + token: string + userInfo: UserInfo +} + +// 用户信息 +export interface UserInfo { + id: string + username: string + name: string + role: string +} + +// 登录 +export function login(data: LoginParams): Promise { + return request.post('/auth/login', data) +} + +// 登出 +export function logout(): Promise { + return request.post('/auth/logout') +} diff --git a/worklog-mobile/src/api/log.ts b/worklog-mobile/src/api/log.ts new file mode 100644 index 0000000..d44a4e8 --- /dev/null +++ b/worklog-mobile/src/api/log.ts @@ -0,0 +1,69 @@ +// 日志相关 API +import { request } from '@/utils/request' + +// 日志信息 +export interface Log { + id: string + userId: string + logDate: string + title: string + content: string + templateId: string + createdTime: string + updatedTime: string +} + +// 分页请求参数 +export interface PageParams { + pageNum: number + pageSize: number + startDate?: string + endDate?: string +} + +// 分页结果 +export interface PageResult { + pageNum: number + pageSize: number + total: number + list: T[] +} + +// 创建日志参数 +export interface CreateLogParams { + logDate: string + title: string + content: string + templateId?: string +} + +// 更新日志参数 +export interface UpdateLogParams { + title: string + content: string +} + +// 分页查询我的日志 +export function pageMyLogs(params: PageParams): Promise> { + return request.get('/log/page', { params }) +} + +// 获取日志详情 +export function getLogById(id: string): Promise { + return request.get(`/log/${id}`) +} + +// 创建日志 +export function createLog(data: CreateLogParams): Promise { + return request.post('/log', data) +} + +// 更新日志 +export function updateLog(id: string, data: UpdateLogParams): Promise { + return request.put(`/log/${id}`, data) +} + +// 删除日志 +export function deleteLog(id: string): Promise { + return request.delete(`/log/${id}`) +} diff --git a/worklog-mobile/src/api/template.ts b/worklog-mobile/src/api/template.ts new file mode 100644 index 0000000..19bed31 --- /dev/null +++ b/worklog-mobile/src/api/template.ts @@ -0,0 +1,16 @@ +// 模板相关 API +import { request } from '@/utils/request' + +// 模板信息 +export interface Template { + id: string + templateName: string + content: string + status: number + createdTime: string +} + +// 获取启用的模板列表 +export function listEnabledTemplates(): Promise { + return request.get('/template/enabled') +} diff --git a/worklog-mobile/src/assets/main.css b/worklog-mobile/src/assets/main.css new file mode 100644 index 0000000..e13c44e --- /dev/null +++ b/worklog-mobile/src/assets/main.css @@ -0,0 +1,23 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + background-color: #f7f8fa; +} + +.van-nav-bar { + position: fixed !important; + top: 0; + left: 0; + right: 0; + z-index: 100; +} + +.page-content { + padding-top: 46px; + padding-bottom: 50px; + min-height: 100vh; +} diff --git a/worklog-mobile/src/main.ts b/worklog-mobile/src/main.ts new file mode 100644 index 0000000..0150890 --- /dev/null +++ b/worklog-mobile/src/main.ts @@ -0,0 +1,15 @@ +import { createApp } from 'vue' +import { createPinia } from 'pinia' +import Vant from 'vant' +import 'vant/lib/index.css' +import App from './App.vue' +import router from './router' +import './assets/main.css' + +const app = createApp(App) + +app.use(createPinia()) +app.use(router) +app.use(Vant) + +app.mount('#app') diff --git a/worklog-mobile/src/router/index.ts b/worklog-mobile/src/router/index.ts new file mode 100644 index 0000000..a3a87c8 --- /dev/null +++ b/worklog-mobile/src/router/index.ts @@ -0,0 +1,64 @@ +import { createRouter, createWebHistory } from 'vue-router' +import type { RouteRecordRaw } from 'vue-router' +import { TOKEN_KEY } from '@/utils/constants' + +const routes: RouteRecordRaw[] = [ + { + path: '/login', + name: 'Login', + component: () => import('@/views/login/index.vue'), + meta: { requiresAuth: false } + }, + { + path: '/', + name: 'Home', + component: () => import('@/views/home/index.vue'), + meta: { requiresAuth: true } + }, + { + path: '/log', + name: 'LogList', + component: () => import('@/views/log/index.vue'), + meta: { requiresAuth: true } + }, + { + path: '/log/create', + name: 'LogCreate', + component: () => import('@/views/log/create.vue'), + meta: { requiresAuth: true } + }, + { + path: '/log/edit/:id', + name: 'LogEdit', + component: () => import('@/views/log/edit.vue'), + meta: { requiresAuth: true } + }, + { + path: '/log/detail/:id', + name: 'LogDetail', + component: () => import('@/views/log/detail.vue'), + meta: { requiresAuth: true } + } +] + +const router = createRouter({ + history: createWebHistory(), + routes +}) + +// 路由守卫 +router.beforeEach((to, _from, next) => { + const token = localStorage.getItem(TOKEN_KEY) + + if (to.meta.requiresAuth === false) { + next() + } else if (!token && to.path !== '/login') { + next('/login') + } else if (token && to.path === '/login') { + next('/') + } else { + next() + } +}) + +export default router diff --git a/worklog-mobile/src/store/user.ts b/worklog-mobile/src/store/user.ts new file mode 100644 index 0000000..dc87f42 --- /dev/null +++ b/worklog-mobile/src/store/user.ts @@ -0,0 +1,43 @@ +import { defineStore } from 'pinia' +import { ref } from 'vue' +import { login as loginApi, logout as logoutApi } from '@/api/auth' +import type { LoginParams, UserInfo } from '@/api/auth' +import { TOKEN_KEY, USER_INFO_KEY } from '@/utils/constants' + +export const useUserStore = defineStore('user', () => { + const token = ref(localStorage.getItem(TOKEN_KEY)) + const userInfo = ref( + JSON.parse(localStorage.getItem(USER_INFO_KEY) || 'null') + ) + + // 登录 + async function login(params: LoginParams) { + const result = await loginApi(params) + token.value = result.token + userInfo.value = result.userInfo + + localStorage.setItem(TOKEN_KEY, result.token) + localStorage.setItem(USER_INFO_KEY, JSON.stringify(result.userInfo)) + + return result + } + + // 登出 + async function logout() { + try { + await logoutApi() + } finally { + token.value = null + userInfo.value = null + localStorage.removeItem(TOKEN_KEY) + localStorage.removeItem(USER_INFO_KEY) + } + } + + return { + token, + userInfo, + login, + logout + } +}) diff --git a/worklog-mobile/src/utils/constants.ts b/worklog-mobile/src/utils/constants.ts new file mode 100644 index 0000000..ec99432 --- /dev/null +++ b/worklog-mobile/src/utils/constants.ts @@ -0,0 +1,3 @@ +// 常量定义 +export const TOKEN_KEY = 'worklog_token' +export const USER_INFO_KEY = 'worklog_user_info' diff --git a/worklog-mobile/src/utils/request.ts b/worklog-mobile/src/utils/request.ts new file mode 100644 index 0000000..820718f --- /dev/null +++ b/worklog-mobile/src/utils/request.ts @@ -0,0 +1,73 @@ +import axios from 'axios' +import type { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios' +import { showFailToast } from 'vant' +import { TOKEN_KEY } from '@/utils/constants' + +// 创建 axios 实例 +const service: AxiosInstance = axios.create({ + baseURL: '/wlmobile/api/v1', + timeout: 15000 +}) + +// 请求拦截器 +service.interceptors.request.use( + (config) => { + const token = localStorage.getItem(TOKEN_KEY) + if (token) { + config.headers['Authorization'] = `Bearer ${token}` + } + return config + }, + (error) => { + return Promise.reject(error) + } +) + +// 响应拦截器 +service.interceptors.response.use( + (response: AxiosResponse) => { + const res = response.data + + // 业务成功 + if (res.success) { + return res.data + } + + // 业务失败 + showFailToast(res.message || '请求失败') + return Promise.reject(new Error(res.message || '请求失败')) + }, + (error) => { + // 401 未登录或 Token 过期 + if (error.response?.status === 401) { + localStorage.removeItem(TOKEN_KEY) + localStorage.removeItem('worklog_user_info') + window.location.href = '/login' + return Promise.reject(error) + } + + showFailToast(error.response?.data?.message || '网络错误') + return Promise.reject(error) + } +) + +// 封装请求方法 +export const request = { + get(url: string, config?: AxiosRequestConfig): Promise { + return service.get(url, config) + }, + + post(url: string, data?: any, config?: AxiosRequestConfig): Promise { + return service.post(url, data, config) + }, + + put(url: string, data?: any, config?: AxiosRequestConfig): Promise { + return service.put(url, data, config) + }, + + delete(url: string, config?: AxiosRequestConfig): Promise { + return service.delete(url, config) + } +} + +export default service diff --git a/worklog-mobile/src/views/home/index.vue b/worklog-mobile/src/views/home/index.vue new file mode 100644 index 0000000..f14388a --- /dev/null +++ b/worklog-mobile/src/views/home/index.vue @@ -0,0 +1,80 @@ + + + + + diff --git a/worklog-mobile/src/views/log/create.vue b/worklog-mobile/src/views/log/create.vue new file mode 100644 index 0000000..dee2966 --- /dev/null +++ b/worklog-mobile/src/views/log/create.vue @@ -0,0 +1,162 @@ + + + + + diff --git a/worklog-mobile/src/views/log/detail.vue b/worklog-mobile/src/views/log/detail.vue new file mode 100644 index 0000000..48743d2 --- /dev/null +++ b/worklog-mobile/src/views/log/detail.vue @@ -0,0 +1,97 @@ + + + + + diff --git a/worklog-mobile/src/views/log/edit.vue b/worklog-mobile/src/views/log/edit.vue new file mode 100644 index 0000000..416c598 --- /dev/null +++ b/worklog-mobile/src/views/log/edit.vue @@ -0,0 +1,96 @@ + + + + + diff --git a/worklog-mobile/src/views/log/index.vue b/worklog-mobile/src/views/log/index.vue new file mode 100644 index 0000000..6cfe8f4 --- /dev/null +++ b/worklog-mobile/src/views/log/index.vue @@ -0,0 +1,146 @@ + + + + + diff --git a/worklog-mobile/src/views/login/index.vue b/worklog-mobile/src/views/login/index.vue new file mode 100644 index 0000000..04c3dc9 --- /dev/null +++ b/worklog-mobile/src/views/login/index.vue @@ -0,0 +1,76 @@ + + + + + diff --git a/worklog-mobile/tsconfig.json b/worklog-mobile/tsconfig.json new file mode 100644 index 0000000..ec62897 --- /dev/null +++ b/worklog-mobile/tsconfig.json @@ -0,0 +1,31 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "preserve", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + + /* Path Alias */ + "baseUrl": ".", + "paths": { + "@/*": ["src/*"] + } + }, + "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/worklog-mobile/tsconfig.node.json b/worklog-mobile/tsconfig.node.json new file mode 100644 index 0000000..97ede7e --- /dev/null +++ b/worklog-mobile/tsconfig.node.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true, + "strict": true + }, + "include": ["vite.config.ts"] +} diff --git a/worklog-mobile/tsconfig.node.tsbuildinfo b/worklog-mobile/tsconfig.node.tsbuildinfo new file mode 100644 index 0000000..c15535b --- /dev/null +++ b/worklog-mobile/tsconfig.node.tsbuildinfo @@ -0,0 +1 @@ +{"program":{"fileNames":["./node_modules/typescript/lib/lib.d.ts","./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.webworker.importscripts.d.ts","./node_modules/typescript/lib/lib.scripthost.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/compatibility/index.d.ts","./node_modules/@types/node/ts5.6/globals.typedarray.d.ts","./node_modules/@types/node/ts5.6/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/file.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/filereader.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/ts5.6/index.d.ts","./node_modules/@types/estree/index.d.ts","./node_modules/rollup/dist/rollup.d.ts","./node_modules/rollup/dist/parseAst.d.ts","./node_modules/vite/types/hmrPayload.d.ts","./node_modules/vite/types/customEvent.d.ts","./node_modules/vite/types/hot.d.ts","./node_modules/vite/dist/node/types.d-aGj9QkWt.d.ts","./node_modules/esbuild/lib/main.d.ts","./node_modules/source-map-js/source-map.d.ts","./node_modules/postcss/lib/previous-map.d.ts","./node_modules/postcss/lib/input.d.ts","./node_modules/postcss/lib/css-syntax-error.d.ts","./node_modules/postcss/lib/declaration.d.ts","./node_modules/postcss/lib/root.d.ts","./node_modules/postcss/lib/warning.d.ts","./node_modules/postcss/lib/lazy-result.d.ts","./node_modules/postcss/lib/no-work-result.d.ts","./node_modules/postcss/lib/processor.d.ts","./node_modules/postcss/lib/result.d.ts","./node_modules/postcss/lib/document.d.ts","./node_modules/postcss/lib/rule.d.ts","./node_modules/postcss/lib/node.d.ts","./node_modules/postcss/lib/comment.d.ts","./node_modules/postcss/lib/container.d.ts","./node_modules/postcss/lib/at-rule.d.ts","./node_modules/postcss/lib/list.d.ts","./node_modules/postcss/lib/postcss.d.ts","./node_modules/postcss/lib/postcss.d.mts","./node_modules/vite/dist/node/runtime.d.ts","./node_modules/vite/types/importGlob.d.ts","./node_modules/vite/types/metadata.d.ts","./node_modules/vite/dist/node/index.d.ts","./node_modules/@babel/types/lib/index.d.ts","./node_modules/@vue/shared/dist/shared.d.ts","./node_modules/@babel/parser/typings/babel-parser.d.ts","./node_modules/@vue/compiler-core/dist/compiler-core.d.ts","./node_modules/magic-string/dist/magic-string.es.d.mts","./node_modules/typescript/lib/typescript.d.ts","./node_modules/@vue/compiler-sfc/dist/compiler-sfc.d.ts","./node_modules/vue/compiler-sfc/index.d.mts","./node_modules/@vitejs/plugin-vue/dist/index.d.mts","./vite.config.ts"],"fileInfos":["a7297ff837fcdf174a9524925966429eb8e5feecc2cc55cc06574e6b092c1eaa",{"version":"824cb491a40f7e8fdeb56f1df5edf91b23f3e3ee6b4cde84d4a99be32338faee","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4",{"version":"87d693a4920d794a73384b3c779cadcb8548ac6945aa7a925832fe2418c9527a","affectsGlobalScope":true},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true},{"version":"138fb588d26538783b78d1e3b2c2cc12d55840b97bf5e08bca7f7a174fbe2f17","affectsGlobalScope":true},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true},{"version":"b20fe0eca9a4e405f1a5ae24a2b3290b37cf7f21eba6cbe4fc3fab979237d4f3","affectsGlobalScope":true},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"49ed889be54031e1044af0ad2c603d627b8bda8b50c1a68435fe85583901d072","affectsGlobalScope":true},{"version":"e93d098658ce4f0c8a0779e6cab91d0259efb88a318137f686ad76f8410ca270","affectsGlobalScope":true},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"5e07ed3809d48205d5b985642a59f2eba47c402374a7cf8006b686f79efadcbd","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"8073890e29d2f46fdbc19b8d6d2eb9ea58db9a2052f8640af20baff9afbc8640","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true},"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a",{"version":"1456e80bd8a3870034d89f91bd7df12ac29acfb083e31c0bb1fb38ca7bf5fbc2","affectsGlobalScope":true},{"version":"a98aedd64ad81793f146d36d1611ed9ba61b8b49ff040f0d13a103ed626595d9","affectsGlobalScope":true},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true},"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107",{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true},"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f",{"version":"8cd19276b6590b3ebbeeb030ac271871b9ed0afc3074ac88a94ed2449174b776","affectsGlobalScope":true},"696eb8d28f5949b87d894b26dc97318ef944c794a9a4e4f62360cd1d1958014b","3f8fa3061bd7402970b399300880d55257953ee6d3cd408722cb9ac20126460c",{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true},"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a",{"version":"68bd56c92c2bd7d2339457eb84d63e7de3bd56a69b25f3576e1568d21a162398","affectsGlobalScope":true},"3e93b123f7c2944969d291b35fed2af79a6e9e27fdd5faa99748a51c07c02d28","9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","87aad3dd9752067dc875cfaa466fc44246451c0c560b820796bdd528e29bef40","4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45",{"version":"8db0ae9cb14d9955b14c214f34dae1b9ef2baee2fe4ce794a4cd3ac2531e3255","affectsGlobalScope":true},"15fc6f7512c86810273af28f224251a5a879e4261b4d4c7e532abfbfc3983134","58adba1a8ab2d10b54dc1dced4e41f4e7c9772cbbac40939c0dc8ce2cdb1d442","4b34bdb6f29a4347b7db9c0f8622686035fe25adb1c9e927acd8d22a2cbb6ccb","714435130b9015fae551788df2a88038471a5a11eb471f27c4ede86552842bc9","855cd5f7eb396f5f1ab1bc0f8580339bff77b68a770f84c6b254e319bbfd1ac7","5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86",{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true},"27fdb0da0daf3b337c5530c5f266efe046a6ceb606e395b346974e4360c36419","2d2fcaab481b31a5882065c7951255703ddbe1c0e507af56ea42d79ac3911201","a192fe8ec33f75edbc8d8f3ed79f768dfae11ff5735e7fe52bfa69956e46d78d",{"version":"ca867399f7db82df981d6915bcbb2d81131d7d1ef683bc782b59f71dda59bc85","affectsGlobalScope":true},{"version":"0e456fd5b101271183d99a9087875a282323e3a3ff0d7bcf1881537eaa8b8e63","affectsGlobalScope":true},"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","6e70e9570e98aae2b825b533aa6292b6abd542e8d9f6e9475e88e1d7ba17c866","f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","47ab634529c5955b6ad793474ae188fce3e6163e3a3fb5edd7e0e48f14435333","37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee",{"version":"fad4e3c207fe23922d0b2d06b01acbfb9714c4f2685cf80fd384c8a100c82fd0","affectsGlobalScope":true},"74cf591a0f63db318651e0e04cb55f8791385f86e987a67fd4d2eaab8191f730","5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5",{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true},"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","ddc734b4fae82a01d247e9e342d020976640b5e93b4e9b3a1e30e5518883a060","ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9",{"version":"c3b41e74b9a84b88b1dca61ec39eee25c0dbc8e7d519ba11bb070918cfacf656","affectsGlobalScope":true},{"version":"4737a9dc24d0e68b734e6cfbcea0c15a2cfafeb493485e27905f7856988c6b29","affectsGlobalScope":true},"36d8d3e7506b631c9582c251a2c0b8a28855af3f76719b12b534c6edf952748d","1ca69210cc42729e7ca97d3a9ad48f2e9cb0042bada4075b588ae5387debd318","f5ebe66baaf7c552cfa59d75f2bfba679f329204847db3cec385acda245e574e",{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true},"05db535df8bdc30d9116fe754a3473d1b6479afbc14ae8eb18b605c62677d518","0ea329e5eab6719ff83bcb97e8bd03f1faab4feb74704010783b881fc9d80f92","151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d",{"version":"ee70b8037ecdf0de6c04f35277f253663a536d7e38f1539d270e4e916d225a3f","affectsGlobalScope":true},"a660aa95476042d3fdcc1343cf6bb8fdf24772d31712b1db321c5a4dcc325434","282f98006ed7fa9bb2cd9bdbe2524595cfc4bcd58a0bb3232e4519f2138df811","6222e987b58abfe92597e1273ad7233626285bc2d78409d4a7b113d81a83496b","cbe726263ae9a7bf32352380f7e8ab66ee25b3457137e316929269c19e18a2be","8b96046bf5fb0a815cba6b0880d9f97b7f3a93cf187e8dcfe8e2792e97f38f87",{"version":"bacf2c84cf448b2cd02c717ad46c3d7fd530e0c91282888c923ad64810a4d511","affectsGlobalScope":true},"402e5c534fb2b85fa771170595db3ac0dd532112c8fa44fc23f233bc6967488b","8885cf05f3e2abf117590bbb951dcf6359e3e5ac462af1c901cfd24c6a6472e2","333caa2bfff7f06017f114de738050dd99a765c7eb16571c6d25a38c0d5365dc","e61df3640a38d535fd4bc9f4a53aef17c296b58dc4b6394fd576b808dd2fe5e6","459920181700cec8cbdf2a5faca127f3f17fd8dd9d9e577ed3f5f3af5d12a2e4","4719c209b9c00b579553859407a7e5dcfaa1c472994bd62aa5dd3cc0757eb077","7ec359bbc29b69d4063fe7dad0baaf35f1856f914db16b3f4f6e3e1bca4099fa","70790a7f0040993ca66ab8a07a059a0f8256e7bb57d968ae945f696cbff4ac7a","d1b9a81e99a0050ca7f2d98d7eedc6cda768f0eb9fa90b602e7107433e64c04c","a022503e75d6953d0e82c2c564508a5c7f8556fad5d7f971372d2d40479e4034","b215c4f0096f108020f666ffcc1f072c81e9f2f95464e894a5d5f34c5ea2a8b1","644491cde678bd462bb922c1d0cfab8f17d626b195ccb7f008612dc31f445d2d","dfe54dab1fa4961a6bcfba68c4ca955f8b5bbeb5f2ab3c915aa7adaa2eabc03a","1251d53755b03cde02466064260bb88fd83c30006a46395b7d9167340bc59b73","47865c5e695a382a916b1eedda1b6523145426e48a2eae4647e96b3b5e52024f","4cdf27e29feae6c7826cdd5c91751cc35559125e8304f9e7aed8faef97dcf572","331b8f71bfae1df25d564f5ea9ee65a0d847c4a94baa45925b6f38c55c7039bf","2a771d907aebf9391ac1f50e4ad37952943515eeea0dcc7e78aa08f508294668","0146fd6262c3fd3da51cb0254bb6b9a4e42931eb2f56329edd4c199cb9aaf804","183f480885db5caa5a8acb833c2be04f98056bdcc5fb29e969ff86e07efe57ab","82e687ebd99518bc63ea04b0c3810fb6e50aa6942decd0ca6f7a56d9b9a212a6","7f698624bbbb060ece7c0e51b7236520ebada74b747d7523c7df376453ed6fea","8f07f2b6514744ac96e51d7cb8518c0f4de319471237ea10cf688b8d0e9d0225","257b83faa134d971c738a6b9e4c47e59bb7b23274719d92197580dd662bfafc3","556ccd493ec36c7d7cb130d51be66e147b91cc1415be383d71da0f1e49f742a9","f468b74459f1ad4473b36a36d49f2b255f3c6b5d536c81239c2b2971df089eaf","95aba78013d782537cc5e23868e736bec5d377b918990e28ed56110e3ae8b958","524a409ad72186b7f6cb16898c349465cfa876f641d6cb6137b3123d5cfca619","2be2227c3810dfd84e46674fd33b8d09a4a28ad9cb633ed536effd411665ea1e","e4ba061c5bcfc75ef8a18eaf677e0ea007ca67931a12aab286cc4a851ce49263","957a44f864ab3c182edc747428e8eec1765257deee7fac86c1147eeac897d832","3feec212c0aeb91e5a6e62caaf9f128954590210f8c302910ea377c088f6b61a","bbdfaf7d9b20534c5df1e1b937a20f17ca049d603a2afe072983bf7aff2279f5",{"version":"ccd6db1c68af8ae63b69ba8b154756afac3fe61462300024ce33f513a6e2510d","signature":"4b96dd19fd2949d28ce80e913412b0026dc421e5bf6c31d87c7b5eb11b5753b4"}],"root":[190],"options":{"allowSyntheticDefaultImports":true,"composite":true,"module":99,"skipLibCheck":true,"strict":true},"fileIdsList":[[54,100,181],[54,100],[54,97,100],[54,99,100],[54,100,105,133],[54,100,101,106,111,119,130,141],[54,100,101,102,111,119],[49,50,51,54,100],[54,100,103,142],[54,100,104,105,112,120],[54,100,105,130,138],[54,100,106,108,111,119],[54,99,100,107],[54,100,108,109],[54,100,110,111],[54,99,100,111],[54,100,111,112,113,130,141],[54,100,111,112,113,126,130,133],[54,100,108,111,114,119,130,141],[54,100,111,112,114,115,119,130,138,141],[54,100,114,116,130,138,141],[54,100,111,117],[54,100,118,141,146],[54,100,108,111,119,130],[54,100,120],[54,100,121],[54,99,100,122],[54,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147],[54,100,124],[54,100,125],[54,100,111,126,127],[54,100,126,128,142,144],[54,100,111,130,131,133],[54,100,132,133],[54,100,130,131],[54,100,133],[54,100,134],[54,97,100,130,135],[54,100,111,136,137],[54,100,136,137],[54,100,105,119,130,138],[54,100,139],[100],[52,53,54,55,56,57,58,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147],[54,100,119,140],[54,100,114,125,141],[54,100,105,142],[54,100,130,143],[54,100,118,144],[54,100,145],[54,95,100],[54,95,100,111,113,122,130,133,141,144,146],[54,100,130,147],[54,100,180,188],[54,100,181,182,183],[54,100,176,181,183,184,185,186],[54,100,172],[54,100,170,172],[54,100,161,169,170,171,173,175],[54,100,159],[54,100,162,167,172,175],[54,100,158,175],[54,100,162,163,166,167,168,175],[54,100,162,163,164,166,167,175],[54,100,159,160,161,162,163,167,168,169,171,172,173,175],[54,100,175],[54,100,157,159,160,161,162,163,164,166,167,168,169,170,171,172,173,174],[54,100,157,175],[54,100,162,164,165,167,168,175],[54,100,166,175],[54,100,167,168,172,175],[54,100,160,170],[54,100,150,179],[54,100,149,150],[54,67,71,100,141],[54,67,100,130,141],[54,62,100],[54,64,67,100,138,141],[54,100,119,138],[54,100,148],[54,62,100,148],[54,64,67,100,119,141],[54,59,60,63,66,100,111,130,141],[54,67,74,100],[54,59,65,100],[54,67,88,89,100],[54,63,67,100,133,141,148],[54,88,100,148],[54,61,62,100,148],[54,67,100],[54,61,62,63,64,65,66,67,68,69,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,89,90,91,92,93,94,100],[54,67,82,100],[54,67,74,75,100],[54,65,67,75,76,100],[54,66,100],[54,59,62,67,100],[54,67,71,75,76,100],[54,71,100],[54,65,67,70,100,141],[54,59,64,67,74,100],[54,100,130],[54,62,67,88,100,146,148],[54,100,111,112,114,115,116,119,130,138,141,147,148,150,151,152,153,154,155,156,176,177,178,179],[54,100,152,153,154,155],[54,100,152,153,154],[54,100,152],[54,100,153],[54,100,150],[54,100,187],[54,100,141,180,189],[180]],"referencedMap":[[183,1],[181,2],[149,2],[97,3],[98,3],[99,4],[100,5],[101,6],[102,7],[49,2],[52,8],[50,2],[51,2],[103,9],[104,10],[105,11],[106,12],[107,13],[108,14],[109,14],[110,15],[111,16],[112,17],[113,18],[55,2],[114,19],[115,20],[116,21],[117,22],[118,23],[119,24],[120,25],[121,26],[122,27],[123,28],[124,29],[125,30],[126,31],[127,31],[128,32],[129,2],[130,33],[132,34],[131,35],[133,36],[134,37],[135,38],[136,39],[137,40],[138,41],[139,42],[54,43],[53,2],[148,44],[140,45],[141,46],[142,47],[143,48],[144,49],[145,50],[56,2],[57,2],[58,2],[96,51],[146,52],[147,53],[189,54],[184,55],[187,56],[182,2],[156,2],[185,2],[173,57],[171,58],[172,59],[160,60],[161,58],[168,61],[159,62],[164,63],[174,2],[165,64],[170,65],[176,66],[175,67],[158,68],[166,69],[167,70],[162,71],[169,57],[163,72],[151,73],[150,74],[157,2],[1,2],[47,2],[48,2],[9,2],[13,2],[12,2],[3,2],[14,2],[15,2],[16,2],[17,2],[18,2],[19,2],[20,2],[21,2],[4,2],[22,2],[5,2],[23,2],[27,2],[24,2],[25,2],[26,2],[28,2],[29,2],[30,2],[6,2],[31,2],[32,2],[33,2],[34,2],[7,2],[38,2],[35,2],[36,2],[37,2],[39,2],[8,2],[40,2],[45,2],[46,2],[41,2],[42,2],[43,2],[44,2],[2,2],[11,2],[10,2],[186,2],[74,75],[84,76],[73,75],[94,77],[65,78],[64,79],[93,80],[87,81],[92,82],[67,83],[81,84],[66,85],[90,86],[62,87],[61,80],[91,88],[63,89],[68,90],[69,2],[72,90],[59,2],[95,91],[85,92],[76,93],[77,94],[79,95],[75,96],[78,97],[88,80],[70,98],[71,99],[80,100],[60,101],[83,92],[82,90],[86,2],[89,102],[180,103],[177,104],[155,105],[153,106],[152,2],[154,107],[178,2],[179,108],[188,109],[190,110]],"exportedModulesMap":[[183,1],[181,2],[149,2],[97,3],[98,3],[99,4],[100,5],[101,6],[102,7],[49,2],[52,8],[50,2],[51,2],[103,9],[104,10],[105,11],[106,12],[107,13],[108,14],[109,14],[110,15],[111,16],[112,17],[113,18],[55,2],[114,19],[115,20],[116,21],[117,22],[118,23],[119,24],[120,25],[121,26],[122,27],[123,28],[124,29],[125,30],[126,31],[127,31],[128,32],[129,2],[130,33],[132,34],[131,35],[133,36],[134,37],[135,38],[136,39],[137,40],[138,41],[139,42],[54,43],[53,2],[148,44],[140,45],[141,46],[142,47],[143,48],[144,49],[145,50],[56,2],[57,2],[58,2],[96,51],[146,52],[147,53],[189,54],[184,55],[187,56],[182,2],[156,2],[185,2],[173,57],[171,58],[172,59],[160,60],[161,58],[168,61],[159,62],[164,63],[174,2],[165,64],[170,65],[176,66],[175,67],[158,68],[166,69],[167,70],[162,71],[169,57],[163,72],[151,73],[150,74],[157,2],[1,2],[47,2],[48,2],[9,2],[13,2],[12,2],[3,2],[14,2],[15,2],[16,2],[17,2],[18,2],[19,2],[20,2],[21,2],[4,2],[22,2],[5,2],[23,2],[27,2],[24,2],[25,2],[26,2],[28,2],[29,2],[30,2],[6,2],[31,2],[32,2],[33,2],[34,2],[7,2],[38,2],[35,2],[36,2],[37,2],[39,2],[8,2],[40,2],[45,2],[46,2],[41,2],[42,2],[43,2],[44,2],[2,2],[11,2],[10,2],[186,2],[74,75],[84,76],[73,75],[94,77],[65,78],[64,79],[93,80],[87,81],[92,82],[67,83],[81,84],[66,85],[90,86],[62,87],[61,80],[91,88],[63,89],[68,90],[69,2],[72,90],[59,2],[95,91],[85,92],[76,93],[77,94],[79,95],[75,96],[78,97],[88,80],[70,98],[71,99],[80,100],[60,101],[83,92],[82,90],[86,2],[89,102],[180,103],[177,104],[155,105],[153,106],[152,2],[154,107],[178,2],[179,108],[188,109],[190,111]],"semanticDiagnosticsPerFile":[183,181,149,97,98,99,100,101,102,49,52,50,51,103,104,105,106,107,108,109,110,111,112,113,55,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,132,131,133,134,135,136,137,138,139,54,53,148,140,141,142,143,144,145,56,57,58,96,146,147,189,184,187,182,156,185,173,171,172,160,161,168,159,164,174,165,170,176,175,158,166,167,162,169,163,151,150,157,1,47,48,9,13,12,3,14,15,16,17,18,19,20,21,4,22,5,23,27,24,25,26,28,29,30,6,31,32,33,34,7,38,35,36,37,39,8,40,45,46,41,42,43,44,2,11,10,186,74,84,73,94,65,64,93,87,92,67,81,66,90,62,61,91,63,68,69,72,59,95,85,76,77,79,75,78,88,70,71,80,60,83,82,86,89,180,177,155,153,152,154,178,179,188,190],"latestChangedDtsFile":"./vite.config.d.ts"},"version":"5.4.5"} \ No newline at end of file diff --git a/worklog-mobile/vite.config.d.ts b/worklog-mobile/vite.config.d.ts new file mode 100644 index 0000000..340562a --- /dev/null +++ b/worklog-mobile/vite.config.d.ts @@ -0,0 +1,2 @@ +declare const _default: import("vite").UserConfig; +export default _default; diff --git a/worklog-mobile/vite.config.js b/worklog-mobile/vite.config.js new file mode 100644 index 0000000..e1fad8e --- /dev/null +++ b/worklog-mobile/vite.config.js @@ -0,0 +1,21 @@ +import { defineConfig } from 'vite'; +import vue from '@vitejs/plugin-vue'; +import { fileURLToPath, URL } from 'node:url'; +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [vue()], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + } + }, + server: { + port: 5174, + proxy: { + '/wlmobile': { + target: 'http://localhost:8200', + changeOrigin: true + } + } + } +}); diff --git a/worklog-mobile/vite.config.ts b/worklog-mobile/vite.config.ts new file mode 100644 index 0000000..1707399 --- /dev/null +++ b/worklog-mobile/vite.config.ts @@ -0,0 +1,22 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import { fileURLToPath, URL } from 'node:url' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [vue()], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + } + }, + server: { + port: 5174, + proxy: { + '/wlmobile': { + target: 'http://localhost:8200', + changeOrigin: true + } + } + } +}) diff --git a/worklog-web/.gitignore b/worklog-web/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/worklog-web/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/worklog-web/README.md b/worklog-web/README.md new file mode 100644 index 0000000..33895ab --- /dev/null +++ b/worklog-web/README.md @@ -0,0 +1,5 @@ +# Vue 3 + TypeScript + Vite + +This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 ` + + diff --git a/worklog-web/package.json b/worklog-web/package.json new file mode 100644 index 0000000..65276c5 --- /dev/null +++ b/worklog-web/package.json @@ -0,0 +1,27 @@ +{ + "name": "worklog-web", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vue-tsc -b && vite build", + "preview": "vite preview" + }, + "dependencies": { + "@element-plus/icons-vue": "^2.3.2", + "axios": "^1.13.5", + "element-plus": "^2.13.2", + "pinia": "^3.0.4", + "vue": "^3.5.25", + "vue-router": "^4.6.4" + }, + "devDependencies": { + "@types/node": "^24.10.1", + "@vitejs/plugin-vue": "^6.0.2", + "@vue/tsconfig": "^0.8.1", + "typescript": "~5.9.3", + "vite": "^7.3.1", + "vue-tsc": "^3.1.5" + } +} diff --git a/worklog-web/public/vite.svg b/worklog-web/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/worklog-web/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/worklog-web/src/App.vue b/worklog-web/src/App.vue new file mode 100644 index 0000000..7f892c5 --- /dev/null +++ b/worklog-web/src/App.vue @@ -0,0 +1,14 @@ + + + + + diff --git a/worklog-web/src/api/auth.ts b/worklog-web/src/api/auth.ts new file mode 100644 index 0000000..4b41b27 --- /dev/null +++ b/worklog-web/src/api/auth.ts @@ -0,0 +1,32 @@ +// 认证相关 API +import { request } from '@/utils/request' + +// 登录请求参数 +export interface LoginParams { + username: string + password: string +} + +// 登录响应 +export interface LoginResult { + token: string + userInfo: UserInfo +} + +// 用户信息 +export interface UserInfo { + id: string + username: string + name: string + role: string +} + +// 登录 +export function login(data: LoginParams): Promise { + return request.post('/auth/login', data) +} + +// 登出 +export function logout(): Promise { + return request.post('/auth/logout') +} diff --git a/worklog-web/src/api/log.ts b/worklog-web/src/api/log.ts new file mode 100644 index 0000000..25c0153 --- /dev/null +++ b/worklog-web/src/api/log.ts @@ -0,0 +1,70 @@ +// 日志管理相关 API +import { request } from '@/utils/request' +import type { PageResult } from './user' + +// 日志信息 +export interface Log { + id: string + userId: string + logDate: string + title: string + content?: string + templateId?: string + createdTime?: string + updatedTime?: string +} + +// 创建日志参数 +export interface CreateLogParams { + logDate?: string + title: string + content?: string + templateId?: string +} + +// 更新日志参数 +export interface UpdateLogParams { + title?: string + content?: string +} + +// 分页查询我的日志 +export function pageMyLogs(params: { + pageNum?: number + pageSize?: number + startDate?: string + endDate?: string +}): Promise> { + return request.get('/log/page', { params }) +} + +// 分页查询所有日志(管理员) +export function pageAllLogs(params: { + pageNum?: number + pageSize?: number + userId?: string + startDate?: string + endDate?: string +}): Promise> { + return request.get('/log/page/all', { params }) +} + +// 获取日志详情 +export function getLogById(id: string): Promise { + return request.get(`/log/${id}`) +} + +// 创建日志 +export function createLog(data: CreateLogParams): Promise { + return request.post('/log', data) +} + +// 更新日志 +export function updateLog(id: string, data: UpdateLogParams): Promise { + return request.put(`/log/${id}`, data) +} + +// 删除日志 +export function deleteLog(id: string): Promise { + return request.delete(`/log/${id}`) +} diff --git a/worklog-web/src/api/template.ts b/worklog-web/src/api/template.ts new file mode 100644 index 0000000..778dacb --- /dev/null +++ b/worklog-web/src/api/template.ts @@ -0,0 +1,59 @@ +// 模板管理相关 API +import { request } from '@/utils/request' + +// 模板信息 +export interface Template { + id: string + templateName: string + content?: string + status: number + createdTime?: string + updatedTime?: string +} + +// 创建模板参数 +export interface CreateTemplateParams { + templateName: string + content?: string +} + +// 更新模板参数 +export interface UpdateTemplateParams { + templateName?: string + content?: string +} + +// 获取启用的模板列表 +export function listEnabledTemplates(): Promise { + return request.get('/template/list') +} + +// 获取所有模板列表 +export function listAllTemplates(): Promise { + return request.get('/template/list/all') +} + +// 获取模板详情 +export function getTemplateById(id: string): Promise