feat(electron): 添加Electron桌面应用支持

- 新增Electron主进程、预加载脚本和构建配置
- 修改前端配置以支持Electron打包
- 更新项目文档和依赖
- 重构API调用使用统一axios实例
This commit is contained in:
dmy
2026-01-15 00:35:19 +08:00
parent f736f30248
commit eca3f4f9fd
22 changed files with 421 additions and 109 deletions

View File

@@ -127,7 +127,7 @@
<script setup lang="ts">
import { ref, watch } from 'vue'
import axios from 'axios'
import api from '../utils/api'
import { ElMessage } from 'element-plus'
import { MagicStick, Loading, InfoFilled, List, Paperclip } from '@element-plus/icons-vue'
import PinnedProject from './PinnedProject.vue'
@@ -175,11 +175,11 @@ watch(dateRange, (newDateRange) => {
// 从数据库加载最新的 AI 推荐
const loadLatestRecommendations = async () => {
try {
const response = await axios.get('/api/ai/latest-recommendations')
const response = await api.get('/api/ai/latest-recommendations')
const recommendations = response.data
// 获取所有置顶的项目
const pinnedResponse = await axios.get('/api/bids/pinned')
const pinnedResponse = await api.get('/api/bids/pinned')
const pinnedTitles = new Set(pinnedResponse.data.map((b: any) => b.title))
// 更新每个推荐项目的 pin 状态
@@ -240,7 +240,7 @@ const fetchAIRecommendations = async () => {
}))
// 调用后端 API
const response = await axios.post('/api/ai/recommendations', {
const response = await api.post('/api/ai/recommendations', {
bids: bidsData
})
@@ -267,7 +267,7 @@ const fetchAIRecommendations = async () => {
aiRecommendations.value = recommendations
// 保存推荐结果到数据库
await axios.post('/api/ai/save-recommendations', {
await api.post('/api/ai/save-recommendations', {
recommendations
})
@@ -301,7 +301,7 @@ const fetchBidsByDateRange = async () => {
params.endDate = endDate
}
const response = await axios.get('/api/bids/by-date-range', { params })
const response = await api.get('/api/bids/by-date-range', { params })
bidsByDateRange.value = response.data
ElMessage.success(`获取成功,共 ${response.data.length} 个工程`)
} catch (error: any) {
@@ -344,7 +344,7 @@ const handlePinChanged = async (title: string) => {
const togglePin = async (item: AIRecommendation) => {
try {
const newPinStatus = !item.pin
await axios.patch(`/api/bids/${encodeURIComponent(item.title)}/pin`, { pin: newPinStatus })
await api.patch(`/api/bids/${encodeURIComponent(item.title)}/pin`, { pin: newPinStatus })
item.pin = newPinStatus
ElMessage.success(newPinStatus ? '已置顶' : '已取消置顶')
// 刷新 PinnedProject 组件的数据