从零到一:打造一人公司智能管理利器——AI驱动的创业新助手(项目代码详解)
本文介绍了一个专为一人公司或小团队设计的智能管理系统AI_Company。该系统融合AI能力,帮助处理HR、财务等琐事,让创业者专注核心业务。项目采用Django+Vue3前后端分离架构,包含用户权限管理、智能HR助手等功能模块。文章详细讲解了技术栈选型、环境搭建、核心模块实现和前后端交互逻辑,包括JWT认证、RBAC权限控制、AI集成等关键技术的具体实现代码。该系统旨在通过自动化工具提升一人公司
大家好!今天,我要和大家分享一个超级实用的项目:AI_Company,一个专为一人公司(或小团队)设计的智能管理系统。它不是简单的CRUD工具,而是融合了AI能力的“创业新助手”,帮助你处理HR、战略分析、财务等琐事,让你专注核心业务。
为什么要做这个项目?在当下创业浪潮中,一人公司越来越多,但管理痛点也层出不穷。别担心,这篇文章将从零带你一步步构建它。我们会结合实际代码(基于提供的文档),详细剖析前后端架构、核心模块和交互逻辑。无论你是前端小白还是后端老鸟,都能轻松跟上。准备好了吗?让我们开始吧!
一、项目开篇:一人公司的智能管理需求与解决方案
1.1 一人公司管理痛点剖析
想象一下,你是一个一人创业者:早上写简历模板,中午分析市场战略,下午处理财务报表,晚上还要招人聊天。听起来很酷?但现实是,时间被琐事吞噬,效率低下。常见痛点包括:
- 用户与权限管理:一人公司也需要多角色(如自己、虚拟助手),但手动管理用户/权限太麻烦,容易出错。
- HR与沟通:招聘简历筛选、员工聊天、战略分析全靠手动,AI时代却还用Excel?
- 数据交互:前后端分离的项目中,认证、API调用常常出错,导致开发卡壳。
- 扩展性差:传统工具无法集成AI大模型,如Coze,导致无法实现智能对话。
这些痛点让我决定打造AI_Company:一个轻量、AI驱动的管理系统,帮助一人公司自动化HR、分析战略,并提供安全的用户权限控制。
1.2 AI_Company 系统核心价值定位
AI_Company 的核心价值在于“一人即公司”:它不是 bloated 的企业级系统,而是精简的AI利器。关键卖点:
- AI集成:使用Coze大模型实现HR助手(简历分析、战略建议)和聊天功能,省时省力。
- 安全认证:JWT + RBAC(Role-Based Access Control)确保一人公司也能安全管理“虚拟团队”。
- 前后端分离:Vue3前端 + Django后端,易扩展,支持文件上传、实时聊天。
- 实用模块:用户管理、角色权限、智能HR(简历/战略/人事/财务助手)、公司聊天。
通过这个系统,你可以上传简历让AI自动筛选,输入战略数据获取洞察,甚至模拟公司内部聊天。最终目标:让一人公司像大企业一样高效!
1.3 项目整体架构概览(前后端分离设计)
项目采用经典的前后端分离架构:
- 后端:Django + DRF(Django REST Framework)处理API、数据库(MySQL)和AI集成(Coze API)。核心是RESTful接口,支持JWT认证。
- 前端:Vue 3 + Vite + TypeScript,提供响应式UI(Element Plus)。使用Pinia管理状态,Vue Router处理路由。
- 通信:Axios封装的HTTP客户端,带Token拦截器。数据流:前端请求 → 后端验证 → 数据库/AI响应 → 前端渲染。
- 部署:后端跑在localhost:8000,前端Vite dev server。
整体流程:用户登录(JWT)→ 访问模块(如HR助手)→ AI对话 → 权限校验。文档中提供的代码(如router/index.ts、user.ts store、AnalysisView.vue)就是这个架构的体现。
二、项目基础:技术栈选型与环境搭建
2.1 后端技术栈深度解析
后端选择Django,因为它“batteries included”——内置ORM、Admin面板,完美适合快速原型。结合DRF,提供REST API。
2.1.1 Django + Django REST Framework 框架优势与配置
Django的优势:快速开发、强类型模型、安全性高。DRF扩展了它,支持序列化、视图集、认证。
核心配置(settings.py示例,基于标准Django项目):
# settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'rest_framework', # DRF
'rest_framework_simplejwt', # JWT
'corsheaders', # 跨域
'yourapp.user', # 自定义app
]
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework_simplejwt.authentication.JWTAuthentication',
],
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
],
}
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware', # 允许前端跨域
# ... 其他
]
CORS_ALLOWED_ORIGINS = [
"http://localhost:5173", # Vite dev server
]
优势:DRF的ViewSet让API开发像喝水一样简单;JWT比Session更适合移动/分离架构。
2.1.2 MySQL 数据库设计与连接配置(含核心配置代码)
MySQL选择因其稳定性和免费。数据库设计:用户表(sys_user)、角色表(sys_role)、聊天表(chat_session/message)。
配置(settings.py):
# settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'ai_company_db',
'USER': 'root',
'PASSWORD': 'your_password',
'HOST': 'localhost',
'PORT': '3306',
}
}
表结构示例(models.py,用户模型):
# models.py (user/models.py)
from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
email = models.EmailField(unique=True, blank=True)
phonenumber = models.CharField(max_length=11, blank=True)
avatar = models.ImageField(upload_to='avatars/', blank=True)
role_key = models.CharField(max_length=50, default='user') # 角色标识
is_active = models.BooleanField(default=True)
date_joined = models.DateTimeField(auto_now_add=True)
class Meta:
db_table = 'sys_user'
运行迁移:python manage.py makemigrations && python manage.py migrate。
2.1.3 JWT 认证机制原理与实现(SimpleJWT 集成)
JWT(JSON Web Token)原理:用户登录生成Token(Header.Payload.Signature),后端验证签名。前端存localStorage,后续请求带Bearer Token。
集成SimpleJWT:
# settings.py
from datetime import timedelta
SIMPLE_JWT = {
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=60),
'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
}
登录视图(views.py):
# views.py (user/views.py)
from rest_framework_simplejwt.views import TokenObtainPairView
from rest_framework import status
from rest_framework.response import Response
class LoginView(TokenObtainPairView):
def post(self, request, *args, **kwargs):
# 验证用户名密码(使用Django auth)
username = request.data.get('username')
password = request.data.get('password')
user = authenticate(username=username, password=password)
if user:
refresh = RefreshToken.for_user(user)
return Response({
'access': str(refresh.access_token),
'refresh': str(refresh),
'user': {'id': user.id, 'username': user.username, 'role_key': user.role_key}
})
return Response({'error': 'Invalid credentials'}, status=status.HTTP_401_UNAUTHORIZED)
2.2 前端技术栈全面解读
前端用Vue 3,因为Composition API更灵活,TypeScript加持类型安全。
2.2.1 Vue 3 + Vite 构建工具链使用(项目初始化代码)
Vite的优势:热重载快、插件生态丰富。初始化:
npm create vue@latest ai-company -- --template vue-ts
cd ai-company
npm install
vite.config.ts:
// vite.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { resolve } from 'path'
export default defineConfig({
plugins: [vue()],
resolve: {
alias: {
'@': resolve(__dirname, 'src')
}
},
server: {
port: 5173,
proxy: {
'/api': {
target: 'http://localhost:8000',
changeOrigin: true
}
}
}
})
2.2.2 Pinia 状态管理与 Vue Router 路由配置
Pinia比Vuex简单,支持TypeScript。安装:npm i pinia。
主入口(main.ts):
// main.ts
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue'
import router from './router'
const app = createApp(App)
app.use(createPinia())
app.use(router)
app.mount('#app')
路由配置(基于文档的index.ts):
// router/index.ts (部分代码)
import { createRouter, createWebHistory } from 'vue-router'
import { useUserStore } from '@/stores/user'
// ... 导入视图
const routes = [
{ path: '/', redirect: '/home/dashboard' },
{ path: '/login', name: 'login', component: Login, meta: { requiresAuth: false } },
{ path: '/home', component: Home, meta: { requiresAuth: true }, children: [
{ path: 'dashboard', name: 'dashboard', component: Dashboard },
{ path: 'company/analysis', name: 'analysis-agent', component: () => import('@/views/company/AnalysisView.vue') },
// ... 其他
]},
// 404
{ path: '/:pathMatch(.*)*', component: () => import('@/views/NotFound.vue') }
]
const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
routes
})
// 守卫:认证 + 权限
router.beforeEach(async (to, from, next) => {
const userStore = useUserStore()
if (to.meta.requiresAuth && !userStore.isLoggedIn) {
next('/login')
return
}
// ... 权限校验逻辑(基于localStorage角色权限)
next()
})
export default router
2.2.3 Element Plus UI 组件库集成与实战
Element Plus是Vue 3的Material Design UI。安装:npm i element-plus。
main.ts集成:
// main.ts
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
app.use(ElementPlus)
实战示例:在Login.vue中使用ElForm:
<!-- Login.vue (部分) -->
<template>
<el-form ref="loginRef" :model="loginForm" :rules="loginRules">
<el-form-item prop="username">
<el-input v-model="loginForm.username" placeholder="用户名" prefix-icon="User" />
</el-form-item>
<!-- ... -->
<el-button @click="handleLogin" type="primary">登录</el-button>
</el-form>
</template>
2.3 开发环境搭建步骤(含依赖版本清单)
- 后端:Python 3.10+,pip install django djangorestframework djangorestframework-simplejwt mysqlclient corsheaders。版本:Django 4.2, DRF 3.14。
- 前端:Node 18+,npm install vue@3 vite@4 pinia@2 element-plus@2 axios@1 typescript@5。版本:Vue 3.3, Vite 4.4。
- 运行:后端python manage.py runserver,前端npm run dev。
- 工具:VS Code + Python/Django扩展,Postman测试API。
三、项目架构:从目录结构到模块划分
3.1 后端项目结构深度解析
标准Django结构:
ai_company_backend/
├── manage.py
├── ai_company/
│ ├── __init__.py
│ ├── settings.py # 配置
│ ├── urls.py # 主路由
│ └── wsgi.py
├── user/ # 用户模块
│ ├── models.py # User模型
│ ├── views.py # API视图
│ ├── serializers.py
│ └── urls.py
├── role/ # 角色模块
│
├── hrchat/ # HR聊天模块
│ └── models.py # ChatSession等
└── migrations/ # 数据库迁移
3.1.1 核心配置目录(settings.py、urls.py 代码详解)
settings.py:如2.1节所示,配置数据库、DRF、JWT。
urls.py(主路由):
# ai_company/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('api/user/', include('user.urls')), # 用户API
path('api/role/', include('role.urls')), # 角色API
path('api/hrchat/', include('hrchat.urls')), # HR API
]
3.1.2 功能模块组织(user、role、menu、hrchat 目录结构)
- user:认证、用户CRUD。
- role:基于文档的role.py(前端API调用),后端对应Role模型和ViewSet。
- menu:权限菜单(未提供代码,但类似role)。
- hrchat:聊天模型,集成Coze API。
3.1.3 数据库迁移文件(migrations)作用与使用
migrations记录模型变更。使用:修改models.py后,makemigrations user 生成文件,migrate 应用到DB。作用:版本控制数据库 schema,避免手动SQL。
3.2 前端项目结构全面梳理
Vite + Vue结构:
ai-company-frontend/
├── index.html
├── vite.config.ts
├── src/
│ ├── main.ts # 入口
│ ├── App.vue
│ ├── router/ # index.ts (路由)
│ ├── stores/ # Pinia: user.ts, counter.ts
│ ├── views/ # 页面: Login.vue, Home.vue, AnalysisView.vue
│ ├── components/ # DataStats.vue 等
│ ├── types/ # user.ts, chat.ts
│ ├── utils/ # request.ts
│ └── assets/ # 图片
└── package.json
3.2.1 核心配置文件(vite.config.ts、tsconfig.json 配置)
vite.config.ts:如2.2.1所示,代理API到后端。
tsconfig.json:
{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"module": "ESNext",
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"skipLibCheck": true,
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "preserve",
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
}
},
"include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"],
"references": [{ "path": "./tsconfig.node.json" }]
}
3.2.2 源码目录(src)细分:入口、组件、状态管理等
- main.ts:App初始化。
- views/:页面组件,如AnalysisView.vue(战略分析助手)。
- stores/:Pinia模块,如user.ts(用户状态)。
- components/:可复用,如DataStats.vue(统计卡片)。
3.2.3 工具函数与类型定义(utils/request.ts、types/user.ts)
request.ts(Axios封装,基于文档):
// utils/request.ts (部分)
import axios from 'axios'
import type { AxiosResponse, AxiosInstance, AxiosError } from 'axios'
const httpService: AxiosInstance = axios.create({
baseURL: 'http://localhost:8000/',
timeout: 15000
})
httpService.interceptors.request.use((config) => {
const token = localStorage.getItem('token')
if (token) {
config.headers.Authorization = `Bearer ${token}`
}
return config
})
export function post<T = any>(url: string, params: object = {}): Promise<AxiosResponse<T>> {
return httpService({ url, method: 'post', data: params })
}
// ... get, put, del, fileUpload
types/user.ts(类型定义):
// types/user.ts (部分)
export interface User {
id: number
username: string
email?: string
// ... 其他字段
}
export interface LoginForm {
username: string
password: string
}
四、核心模块开发(一):用户与权限管理系统
4.1 用户数据模型设计(sys_user 表结构与 models.py 代码)
如3.1.2所示,User模型继承AbstractUser,添加role_key等字段。表结构(MySQL):
- id: INT PRIMARY KEY AUTO_INCREMENT
- username: VARCHAR(150) UNIQUE
- email: VARCHAR(254) UNIQUE
- role_key: VARCHAR(50)
- is_active: BOOLEAN
这确保一人公司能管理多个“角色”用户。
4.2 用户认证流程实现
4.2.1 注册功能(RegisterView 类视图代码详解)
后端views.py:
# user/views.py
from rest_framework import generics, status
from rest_framework.response import Response
from django.contrib.auth import get_user_model
from .serializers import UserSerializer
User = get_user_model()
class RegisterView(generics.CreateAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
if serializer.is_valid():
user = serializer.save()
return Response({
'code': 200,
'message': '注册成功',
'data': {'id': user.id, 'username': user.username}
}, status=status.HTTP_201_CREATED)
return Response({'code': 400, 'message': serializer.errors}, status=status.HTTP_400_BAD_REQUEST)
Serializer(serializers.py):
from rest_framework import serializers
from .models import User
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('username', 'password', 'email', 'phonenumber')
def create(self, validated_data):
user = User.objects.create_user(**validated_data)
return user
4.2.2 登录功能(LoginView 与 JWT Token 生成代码)
如2.1.3所示,LoginView使用SimpleJWT生成Token。
4.2.3 前端登录页面(Login.vue)与表单验证
基于文档的Login.vue:
- 使用ElForm + rules验证。
- handleLogin调用userStore.login,成功后router.push('/home')。
- 记住密码:localStorage存username/password。
完整代码见文档,易懂:reactive表单 + async/await处理API。
4.3 角色与权限控制
4.3.1 RBAC 权限模型设计(Role、Menu 数据模型)
Role模型(role/models.py):
# role/models.py
class Role(models.Model):
name = models.CharField(max_length=50)
key = models.CharField(max_length=50, unique=True) # 如 'admin'
description = models.TextField()
permissions = models.ManyToManyField('Menu', blank=True) # 关联菜单权限
class Menu(models.Model):
name = models.CharField(max_length=50)
route_name = models.CharField(max_length=50) # 如 'dashboard'
# ...
前端API(role.py,基于文档):
// types/role.py (前端调用)
export function createRole(roleData: RoleForm): Promise<RoleResponse> {
return requestUtil.post('/api/role/list/', roleData).then(response => response.data)
}
4.3.2 前端路由守卫与权限校验(router/index.ts 代码)
如2.2.2所示,beforeEach检查token + 角色权限(localStorage存allowed routes)。超级admin无限制,白名单包括dashboard。
五、核心模块开发(二):智能 HR 助手模块
5.1 模块功能定位与业务逻辑
HR助手针对一人公司:简历筛选(temp-agent)、战略分析(analysis-agent)、人事/财务聊天。业务逻辑:用户输入/上传文件 → 后端解析 → Coze AI生成响应 → 前端渲染。支持历史记录、流式回复。
5.2 数据模型设计(ChatSession、ChatMessage 模型代码)
hrchat/models.py:
# hrchat/models.py
from django.db import models
from user.models import User
class ChatSession(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=200)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class ChatMessage(models.Model):
session = models.ForeignKey(ChatSession, on_delete=models.CASCADE, related_name='messages')
role = models.CharField(max_length=10, choices=[('user', 'user'), ('assistant', 'assistant')])
content = models.TextField()
timestamp = models.DateTimeField(auto_now_add=True)
file = models.FileField(upload_to='chat_files/', blank=True) # 支持文件
5.3 API 接口开发
5.3.1 会话管理接口(ChatSessionListCreate 视图代码)
views.py:
# hrchat/views.py
from rest_framework import generics, status
from rest_framework.response import Response
from .models import ChatSession
from .serializers import ChatSessionSerializer
class ChatSessionListCreate(generics.ListCreateAPIView):
serializer_class = ChatSessionSerializer
def get_queryset(self):
return ChatSession.objects.filter(user=self.request.user)
def perform_create(self, serializer):
serializer.save(user=self.request.user)
5.3.2 消息交互接口(MessageList、MessageCreate 代码)
class MessageList(generics.ListAPIView):
serializer_class = MessageSerializer
def get_queryset(self):
session_id = self.kwargs['session_id']
return ChatMessage.objects.filter(session_id=session_id)
class MessageCreate(generics.CreateAPIView):
serializer_class = MessageSerializer
def perform_create(self, serializer):
session_id = self.kwargs['session_id']
session = ChatSession.objects.get(id=session_id)
# 调用Coze AI生成响应
ai_response = call_coze_ai(serializer.validated_data['content'])
serializer.save(session=session, role='user')
# 保存AI响应
Message.objects.create(session=session, role='assistant', content=ai_response)
5.3.3 API 文档与调用示例(含 curl 命令)
Swagger或DRF自带文档。示例(创建消息):
curl -X POST http://localhost:8000/api/hrchat/sessions/1/messages/ \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"content": "分析这份简历", "file": "file.txt"}'
响应:{"code":200, "data": {"id":1, "content":"AI分析结果..."}}
5.4 前端交互实现
5.4.1 聊天界面(ResumeAssistant.vue)组件开发
类似文档的AnalysisView.vue(战略分析,但HR类似):
<!-- AnalysisView.vue (简化版,用于HR) -->
<template>
<div class="chat-container">
<div class="messages" v-for="msg in msgs" :key="msg.id">
<div :class="msg.role">{{ msg.content }}</div>
</div>
<input v-model="text" @keyup.enter="sendMessage" placeholder="输入消息..." />
<button @click="sendMessage">发送</button>
</div>
</template>
<script setup>
import { ref } from 'vue'
import { coze } from '@/types/hr' // Coze API
const text = ref('')
const msgs = ref([])
const sendMessage = async () => {
// 添加用户消息
msgs.value.push({ role: 'user', content: text.value })
// 调用Coze
const response = await coze.chat.completions.create({
model: 'your-model',
messages: [{ role: 'user', content: text.value }]
})
msgs.value.push({ role: 'assistant', content: response.choices[0].message.content })
text.value = ''
}
</script>
5.4.2 消息发送与接收逻辑(Pinia 状态管理代码)
扩展user.ts store为chat store(chat.ts types支持):
// stores/chat.ts (基于文档user.ts模式)
import { defineStore } from 'pinia'
import ChatService from '@/services/chatService' // 基于chatService.ts
export const useChatStore = defineStore('chat', () => {
const messages = ref<ChatMessage[]>([])
const sessions = ref<ChatSession[]>([])
const sendMessage = async (roomId: number, content: string) => {
const msg = await ChatService.sendMessage(roomId, { content, message_type: 'text' })
messages.value.push(msg)
}
const loadSessions = async () => {
sessions.value = await ChatService.getChatRooms()
}
return { messages, sessions, sendMessage, loadSessions }
})
chatService.ts(基于文档)封装API调用。
5.4.3 流式对话功能实现(Coze 大模型集成代码)
hr.ts(Coze配置):
// types/hr.ts
import { CozeAPI } from '@coze/api'
export const coze = new CozeAPI({
token: 'your_token',
baseURL: 'https://api.coze.cn',
allowPersonalAccessTokenInBrowser: true
})
在组件中使用流式(SSE或WebSocket模拟):
// 在sendMessage中
const stream = await coze.chat.completions.create({
stream: true,
messages: [...]
})
for await (const chunk of stream) {
// 追加chunk到UI,实现流式
currentMsg.content += chunk.choices[0].delta.content
}
六、前后端交互核心:API 客户端与数据通信
6.1 Axios 封装实战(request.ts 代码详解)
如3.2.3所示,request.ts创建Axios实例,拦截器自动加Token。优势:统一错误处理,一处配置全局。
6.1.1 自定义 Axios 实例创建与配置
baseURL指向后端,timeout 15s。
6.1.2 请求拦截器(JWT Token 注入)
从localStorage取token,加到headers。
6.1.3 响应拦截器与错误处理
httpService.interceptors.response.use(
(response) => response,
(error: AxiosError) => {
if (error.response?.status === 401) {
// 清除token,重定向登录
localStorage.removeItem('token')
router.push('/login')
}
return Promise.reject(error)
}
)
6.2 数据通信流程分析
6.2.1 登录流程完整数据交互(前端→后端→数据库)
- 前端:userStore.login发送POST /api/user/login/ {username, password}。
- 后端:LoginView验证 → Django auth → 生成JWT → 返回token/user。
- 前端:存localStorage,fetchUserInfo更新store → 路由跳转。
- 数据库:User表查询/更新。
6.2.2 智能 HR 助手消息交互流程
- 前端:sendMessage → request.post('/api/hrchat/messages/', {content}) + Token。
- 后端:验证Token → 保存User消息 → 调用Coze API → 保存AI响应 → 返回。
- 前端:更新msgs ref,渲染Markdown(marked库)。
6.3 状态管理(Pinia)深度应用
6.3.1 用户状态模块(user.ts)代码详解
基于文档user.ts:
- ref(user, token),computed(isLoggedIn)。
- login/register:async post,处理响应,存localStorage。
- fetchUserInfo:get /api/user/user_info/,更新user。
- clearAuth:移除token,重定向。
const login = async (loginForm: LoginForm) => {
const response = await requestUtil.post('/api/user/login/', loginForm)
const { token: jwtToken, user: userInfo } = response.data.data
token.value = jwtToken
user.value = userInfo
localStorage.setItem('token', jwtToken)
return { success: true, message: '登录成功' }
}
结语:你的AI创业助手,从这里启航
恭喜!我们从痛点到完整系统,一步步构建了AI_Company。它不只代码,更是你的生产力武器。项目GitHub:连接后面放
更多推荐


所有评论(0)