felix 2025-04-25 12:43:19 +08:00
commit fcd3b294f6
16 changed files with 37 additions and 133 deletions

4
.env
View File

@ -1,5 +1,5 @@
# 标题 # 标题
VITE_APP_TITLE=芋道管理系统 VITE_APP_TITLE=暖界办公
# 项目本地运行端口号 # 项目本地运行端口号
VITE_PORT=80 VITE_PORT=80
@ -20,6 +20,6 @@ VITE_APP_DOCALERT_ENABLE=true
VITE_APP_BAIDU_CODE = a1ff8825baa73c3a78eb96aa40325abc VITE_APP_BAIDU_CODE = a1ff8825baa73c3a78eb96aa40325abc
# 默认账户密码 # 默认账户密码
VITE_APP_DEFAULT_LOGIN_TENANT = 芋道源码 VITE_APP_DEFAULT_LOGIN_TENANT = 暖界办公
VITE_APP_DEFAULT_LOGIN_USERNAME = admin VITE_APP_DEFAULT_LOGIN_USERNAME = admin
VITE_APP_DEFAULT_LOGIN_PASSWORD = admin123 VITE_APP_DEFAULT_LOGIN_PASSWORD = admin123

View File

@ -4,7 +4,7 @@ NODE_ENV=production
VITE_DEV=true VITE_DEV=true
# 请求路径 # 请求路径
VITE_BASE_URL='http://api-dashboard.yudao.iocoder.cn' VITE_BASE_URL='http://8.130.12.151:48080'
# 文件上传类型server - 后端上传, client - 前端直连上传仅支持S3服务 # 文件上传类型server - 后端上传, client - 前端直连上传仅支持S3服务
VITE_UPLOAD_TYPE=server VITE_UPLOAD_TYPE=server
@ -28,7 +28,7 @@ VITE_BASE_PATH=/
VITE_OUT_DIR=dist VITE_OUT_DIR=dist
# 商城H5会员端域名 # 商城H5会员端域名
VITE_MALL_H5_DOMAIN='http://mall.yudao.iocoder.cn' VITE_MALL_H5_DOMAIN='http://8.130.12.151'
# 验证码的开关 # 验证码的开关
VITE_APP_CAPTCHA_ENABLE=false VITE_APP_CAPTCHA_ENABLE=false

View File

@ -7,11 +7,11 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta <meta
name="keywords" name="keywords"
content="芋道管理系统 基于 vue3 + CompositionAPI + typescript + vite3 + element plus 的后台开源免费管理系统!" content="暖界办公基于 vue3 + CompositionAPI + typescript + vite3 + element plus 的后台管理系统!"
/> />
<meta <meta
name="description" name="description"
content="芋道管理系统 基于 vue3 + CompositionAPI + typescript + vite3 + element plus 的后台开源免费管理系统!" content="暖界办公 基于 vue3 + CompositionAPI + typescript + vite3 + element plus 的后台管理系统!"
/> />
<title>%VITE_APP_TITLE%</title> <title>%VITE_APP_TITLE%</title>
</head> </head>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 902 KiB

View File

@ -5,7 +5,7 @@
<el-avatar :size="60"> <el-avatar :size="60">
<Icon icon="ep:avatar" :size="60" /> <Icon icon="ep:avatar" :size="60" />
</el-avatar> </el-avatar>
<span class="text-18px font-bold">芋道源码</span> <span class="text-18px font-bold">暖界办公</span>
</div> </div>
<Icon icon="tdesign:qrcode" :size="20" /> <Icon icon="tdesign:qrcode" :size="20" />
</div> </div>

View File

@ -18,39 +18,6 @@
</div> </div>
</div> </div>
</el-col> </el-col>
<el-col :xl="12" :lg="12" :md="12" :sm="24" :xs="24">
<div class="h-70px flex items-center justify-end lt-sm:mt-10px">
<div class="px-8px text-right">
<div class="mb-16px text-14px text-gray-400">{{ t('workplace.project') }}</div>
<CountTo
class="text-20px"
:start-val="0"
:end-val="totalSate.project"
:duration="2600"
/>
</div>
<el-divider direction="vertical" />
<div class="px-8px text-right">
<div class="mb-16px text-14px text-gray-400">{{ t('workplace.toDo') }}</div>
<CountTo
class="text-20px"
:start-val="0"
:end-val="totalSate.todo"
:duration="2600"
/>
</div>
<el-divider direction="vertical" border-style="dashed" />
<div class="px-8px text-right">
<div class="mb-16px text-14px text-gray-400">{{ t('workplace.access') }}</div>
<CountTo
class="text-20px"
:start-val="0"
:end-val="totalSate.access"
:duration="2600"
/>
</div>
</div>
</el-col>
</el-row> </el-row>
</el-skeleton> </el-skeleton>
</el-card> </el-card>
@ -58,51 +25,6 @@
<el-row class="mt-8px" :gutter="8" justify="space-between"> <el-row class="mt-8px" :gutter="8" justify="space-between">
<el-col :xl="16" :lg="16" :md="24" :sm="24" :xs="24" class="mb-8px"> <el-col :xl="16" :lg="16" :md="24" :sm="24" :xs="24" class="mb-8px">
<el-card shadow="never">
<template #header>
<div class="h-3 flex justify-between">
<span>{{ t('workplace.project') }}</span>
<el-link
type="primary"
:underline="false"
href="https://github.com/yudaocode"
target="_blank"
>
{{ t('action.more') }}
</el-link>
</div>
</template>
<el-skeleton :loading="loading" animated>
<el-row>
<el-col
v-for="(item, index) in projects"
:key="`card-${index}`"
:xl="8"
:lg="8"
:md="8"
:sm="24"
:xs="24"
>
<el-card
shadow="hover"
class="mr-5px mt-5px cursor-pointer"
@click="handleProjectClick(item.message)"
>
<div class="flex items-center">
<Icon :icon="item.icon" :size="25" class="mr-8px" :style="{ color: item.color }" />
<span class="text-16px">{{ item.name }}</span>
</div>
<div class="mt-12px text-12px text-gray-400">{{ t(item.message) }}</div>
<div class="mt-12px flex justify-between text-12px text-gray-400">
<span>{{ item.personal }}</span>
<span>{{ formatTime(item.time, 'yyyy-MM-dd') }}</span>
</div>
</el-card>
</el-col>
</el-row>
</el-skeleton>
</el-card>
<el-card shadow="never" class="mt-8px"> <el-card shadow="never" class="mt-8px">
<el-skeleton :loading="loading" animated> <el-skeleton :loading="loading" animated>
<el-row :gutter="20" justify="space-between"> <el-row :gutter="20" justify="space-between">
@ -272,30 +194,30 @@ const getProject = async () => {
let notice = reactive<Notice[]>([]) let notice = reactive<Notice[]>([])
const getNotice = async () => { const getNotice = async () => {
const data = [ const data = [
{ // {
title: '系统支持 JDK 8/17/21Vue 2/3', // title: ' JDK 8/17/21Vue 2/3',
type: '技术兼容性', // type: '',
keys: ['JDK', 'Vue'], // keys: ['JDK', 'Vue'],
date: new Date() // date: new Date()
}, // },
{ // {
title: '后端提供 Spring Boot 2.7/3.2 + Cloud 双架构', // title: ' Spring Boot 2.7/3.2 + Cloud ',
type: '架构灵活性', // type: '',
keys: ['Boot', 'Cloud'], // keys: ['Boot', 'Cloud'],
date: new Date() // date: new Date()
}, // },
{ // {
title: '全部开源,个人与企业可 100% 直接使用,无需授权', // title: ' 100% 使',
type: '开源免授权', // type: '',
keys: ['无需授权'], // keys: [''],
date: new Date() // date: new Date()
}, // },
{ // {
title: '国内使用最广泛的快速开发平台,远超 10w+ 企业使用', // title: '使广 10w+ 使',
type: '广泛企业认可', // type: '广',
keys: ['最广泛', '10w+'], // keys: ['广', '10w+'],
date: new Date() // date: new Date()
} // }
] ]
notice = Object.assign(notice, data) notice = Object.assign(notice, data)
} }

View File

@ -19,11 +19,8 @@
enter-active-class="animate__animated animate__bounceInLeft" enter-active-class="animate__animated animate__bounceInLeft"
tag="div" tag="div"
> >
<img key="1" alt="" class="w-350px" src="@/assets/svgs/login-box-bg.svg" /> <img key="1" alt="" class="w-350px" src="@/assets/svgs/login-box-bg.png" />
<div key="2" class="text-3xl text-white">{{ t('login.welcome') }}</div> <!-- <div key="2" class="text-3xl text-white">{{ t('login.welcome') }}</div>-->
<div key="3" class="mt-5 text-14px font-normal text-white">
{{ t('login.message') }}
</div>
</TransitionGroup> </TransitionGroup>
</div> </div>
</div> </div>
@ -118,4 +115,4 @@ $prefix-cls: #{$namespace}-login;
background-color: var(--login-bg-color); background-color: var(--login-bg-color);
} }
} }
</style> </style>

View File

@ -199,7 +199,7 @@ const loginData = reactive({
captchaEnable: import.meta.env.VITE_APP_CAPTCHA_ENABLE !== 'false', captchaEnable: import.meta.env.VITE_APP_CAPTCHA_ENABLE !== 'false',
tenantEnable: import.meta.env.VITE_APP_TENANT_ENABLE !== 'false', tenantEnable: import.meta.env.VITE_APP_TENANT_ENABLE !== 'false',
loginForm: { loginForm: {
tenantName: '芋道源码', tenantName: '暖界办公',
username: 'admin', username: 'admin',
password: 'admin123', password: 'admin123',
captchaVerification: '', captchaVerification: '',

View File

@ -132,21 +132,6 @@
</div> </div>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-divider content-position="center">萌新必读</el-divider>
<el-col :span="24" style="padding-right: 10px; padding-left: 10px">
<el-form-item>
<div class="w-[100%] flex justify-between">
<el-link href="https://doc.iocoder.cn/" target="_blank">📚开发指南</el-link>
<el-link href="https://doc.iocoder.cn/video/" target="_blank">🔥视频教程</el-link>
<el-link href="https://www.iocoder.cn/Interview/good-collection/" target="_blank">
面试手册
</el-link>
<el-link href="http://static.yudao.iocoder.cn/mp/Aix9975.jpeg" target="_blank">
🤝外包咨询
</el-link>
</div>
</el-form-item>
</el-col>
</el-row> </el-row>
</el-form> </el-form>
</template> </template>

View File

@ -133,7 +133,7 @@ const loginData = reactive({
}, },
loginForm: { loginForm: {
uuid: '', uuid: '',
tenantName: '芋道源码', tenantName: '暖界办公',
mobileNumber: '', mobileNumber: '',
code: '' code: ''
} }

View File

@ -3,7 +3,7 @@
<div class="chat-empty"> <div class="chat-empty">
<!-- title --> <!-- title -->
<div class="center-container"> <div class="center-container">
<div class="title">芋道 AI</div> <div class="title">AI</div>
<div class="role-list"> <div class="role-list">
<div <div
class="role-item" class="role-item"