环境修改和主页图片加入

This commit is contained in:
XinWei 2024-08-22 11:54:42 +08:00
parent d498a2062a
commit e8dd6758a3
5 changed files with 326 additions and 322 deletions

View File

@ -24,7 +24,7 @@ VITE_DROP_CONSOLE=false
VITE_SOURCEMAP=false VITE_SOURCEMAP=false
# 打包路径 # 打包路径
VITE_BASE_PATH=/ VITE_BASE_PATH=/admin
# 商城H5会员端域名 # 商城H5会员端域名
VITE_MALL_H5_DOMAIN='http://localhost:3000' VITE_MALL_H5_DOMAIN='http://localhost:3000'

View File

@ -4,12 +4,12 @@ NODE_ENV=production
VITE_DEV=false VITE_DEV=false
# 请求路径 # 请求路径
VITE_BASE_URL='http://localhost:48080' VITE_BASE_URL='https://mt.ptzykjgs.com'
# 文件上传类型server - 后端上传, client - 前端直连上传仅支持S3服务 # 文件上传类型server - 后端上传, client - 前端直连上传仅支持S3服务
VITE_UPLOAD_TYPE=server VITE_UPLOAD_TYPE=server
# 上传路径 # 上传路径
VITE_UPLOAD_URL='http://localhost:48080/admin-api/infra/file/upload' VITE_UPLOAD_URL='https://mt.ptzykjgs.com/admin-api/infra/file/upload'
# 接口地址 # 接口地址
VITE_API_URL=/admin-api VITE_API_URL=/admin-api
@ -24,10 +24,13 @@ VITE_DROP_CONSOLE=true
VITE_SOURCEMAP=false VITE_SOURCEMAP=false
# 打包路径 # 打包路径
VITE_BASE_PATH=/ VITE_BASE_PATH=/admin
# 输出路径 # 输出路径
VITE_OUT_DIR=dist-prod VITE_OUT_DIR=dist-prod
# 商城H5会员端域名 # 商城H5会员端域名
VITE_MALL_H5_DOMAIN='http://mall.yudao.iocoder.cn' VITE_MALL_H5_DOMAIN='http://mall.yudao.iocoder.cn'
# 验证码的开关
VITE_APP_CAPTCHA_ENABLE=false

View File

@ -72,7 +72,7 @@ export const socialAuthRedirect = (type: number, redirectUri: string) => {
} }
// 获取验证图片以及 token // 获取验证图片以及 token
export const getCode = (data) => { export const getCode = (data) => {
return request.postOriginal({ url: 'system/captcha/get', data }) // return request.postOriginal({ url: 'system/captcha/get', data })
} }
// 滑动或者点选验证 // 滑动或者点选验证

View File

@ -5,7 +5,7 @@ import remainingRouter from './modules/remaining'
// 创建路由实例 // 创建路由实例
const router = createRouter({ const router = createRouter({
history: createWebHistory(), // createWebHashHistory URL带#createWebHistory URL不带# history: createWebHistory("/admin"), // createWebHashHistory URL带#createWebHistory URL不带#
strict: true, strict: true,
routes: remainingRouter as RouteRecordRaw[], routes: remainingRouter as RouteRecordRaw[],
scrollBehavior: () => ({ left: 0, top: 0 }) scrollBehavior: () => ({ left: 0, top: 0 })

View File

@ -22,32 +22,17 @@
<div class="h-70px flex items-center justify-end lt-sm:mt-10px"> <div class="h-70px flex items-center justify-end lt-sm:mt-10px">
<div class="px-8px text-right"> <div class="px-8px text-right">
<div class="mb-16px text-14px text-gray-400">{{ t('workplace.project') }}</div> <div class="mb-16px text-14px text-gray-400">{{ t('workplace.project') }}</div>
<CountTo <CountTo class="text-20px" :start-val="0" :end-val="totalSate.project" :duration="2600" />
class="text-20px"
:start-val="0"
:end-val="totalSate.project"
:duration="2600"
/>
</div> </div>
<el-divider direction="vertical" /> <el-divider direction="vertical" />
<div class="px-8px text-right"> <div class="px-8px text-right">
<div class="mb-16px text-14px text-gray-400">{{ t('workplace.toDo') }}</div> <div class="mb-16px text-14px text-gray-400">{{ t('workplace.toDo') }}</div>
<CountTo <CountTo class="text-20px" :start-val="0" :end-val="totalSate.todo" :duration="2600" />
class="text-20px"
:start-val="0"
:end-val="totalSate.todo"
:duration="2600"
/>
</div> </div>
<el-divider direction="vertical" border-style="dashed" /> <el-divider direction="vertical" border-style="dashed" />
<div class="px-8px text-right"> <div class="px-8px text-right">
<div class="mb-16px text-14px text-gray-400">{{ t('workplace.access') }}</div> <div class="mb-16px text-14px text-gray-400">{{ t('workplace.access') }}</div>
<CountTo <CountTo class="text-20px" :start-val="0" :end-val="totalSate.access" :duration="2600" />
class="text-20px"
:start-val="0"
:end-val="totalSate.access"
:duration="2600"
/>
</div> </div>
</div> </div>
</el-col> </el-col>
@ -55,9 +40,20 @@
</el-skeleton> </el-skeleton>
</el-card> </el-card>
</div> </div>
<div class="flex flex-wrap gap-4" style="margin: 20px 0;"> <div class="flex flex-wrap gap-4" style="margin: 10px 0;">
<el-card style="width: 420px;text-align: center;cursor: pointer;" shadow="hover" @click="goToXXLJob">任务调度中心</el-card> <el-card style="width: 420px;text-align: center;cursor: pointer;" shadow="hover" @click="goToXXLJob">任务调度中心</el-card>
</div> </div>
<!-- 新增的静态图片部分 -->
<div>
<el-card style="width: 100%; text-align: center;" shadow="never">
<div style="overflow: hidden; height: calc(100% - 2px);">
<el-image :src="luduViewImage" fit="contain" style="width: 100%; transform: translateY(-2px);" />
</div>
</el-card>
</div>
<!-- <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"> <el-card shadow="never">
@ -74,17 +70,9 @@
</el-link> </el-link>
</div> </div>
</template> </template>
<el-skeleton :loading="loading" animated> <el-skeleton :loading="loading" animated>
<el-row> <el-row>
<el-col <el-col v-for="(item, index) in projects" :key="`card-${index}`" :xl="8" :lg="8" :md="8" :sm="24" :xs="24">
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"> <el-card shadow="hover" class="mr-5px mt-5px">
<div class="flex items-center"> <div class="flex items-center">
<Icon :icon="item.icon" :size="25" class="mr-8px" /> <Icon :icon="item.icon" :size="25" class="mr-8px" />
@ -98,10 +86,10 @@
</el-card> </el-card>
</el-col> </el-col>
</el-row> </el-row>
</el-skeleton> </el-skeleton>
</el-card> </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">
<el-col :xl="10" :lg="10" :md="24" :sm="24" :xs="24"> <el-col :xl="10" :lg="10" :md="24" :sm="24" :xs="24">
@ -120,9 +108,9 @@
</el-col> </el-col>
</el-row> </el-row>
</el-skeleton> </el-skeleton>
</el-card> </el-card>
</el-col> </el-col>
<el-col :xl="8" :lg="8" :md="24" :sm="24" :xs="24" class="mb-8px"> <el-col :xl="8" :lg="8" :md="24" :sm="24" :xs="24" class="mb-8px">
<el-card shadow="never"> <el-card shadow="never">
<template #header> <template #header>
<div class="h-3 flex justify-between"> <div class="h-3 flex justify-between">
@ -170,47 +158,48 @@
</div> </div>
</el-skeleton> </el-skeleton>
</el-card> </el-card>
</el-col> </el-col>
</el-row> --> </el-row> -->
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { set } from 'lodash-es' import { set } from 'lodash-es'
import { EChartsOption } from 'echarts' import { EChartsOption } from 'echarts'
import { formatTime } from '@/utils' import { formatTime } from '@/utils'
import luduView from '@/assets/imgs/ludu_view.png'
import { useUserStore } from '@/store/modules/user'
import { useWatermark } from '@/hooks/web/useWatermark'
import type { WorkplaceTotal, Project, Notice, Shortcut } from './types'
import { pieOptions, barOptions } from './echarts-data'
import { useUserStore } from '@/store/modules/user' defineOptions({ name: 'Home' })
import { useWatermark } from '@/hooks/web/useWatermark'
import type { WorkplaceTotal, Project, Notice, Shortcut } from './types'
import { pieOptions, barOptions } from './echarts-data'
defineOptions({ name: 'Home' }) const luduViewImage = ref(luduView);
const { t } = useI18n()
const { t } = useI18n() const userStore = useUserStore()
const userStore = useUserStore() const { setWatermark } = useWatermark()
const { setWatermark } = useWatermark() const loading = ref(true)
const loading = ref(true) const avatar = userStore.getUser.avatar
const avatar = userStore.getUser.avatar const username = userStore.getUser.nickname
const username = userStore.getUser.nickname const pieOptionsData = reactive<EChartsOption>(pieOptions) as EChartsOption
const pieOptionsData = reactive<EChartsOption>(pieOptions) as EChartsOption //
// let totalSate = reactive<WorkplaceTotal>({
let totalSate = reactive<WorkplaceTotal>({
project: 0, project: 0,
access: 0, access: 0,
todo: 0 todo: 0
}) })
const getCount = async () => { const getCount = async () => {
const data = { const data = {
project: 40, project: 40,
access: 2340, access: 2340,
todo: 10 todo: 10
} }
totalSate = Object.assign(totalSate, data) totalSate = Object.assign(totalSate, data)
} }
// //
let projects = reactive<Project[]>([]) let projects = reactive<Project[]>([])
const getProject = async () => { const getProject = async () => {
const data = [ const data = [
{ {
name: 'ruoyi-vue-pro', name: 'ruoyi-vue-pro',
@ -256,11 +245,11 @@ const getProject = async () => {
} }
] ]
projects = Object.assign(projects, data) projects = Object.assign(projects, data)
} }
// //
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',
@ -288,12 +277,12 @@ const getNotice = async () => {
} }
] ]
notice = Object.assign(notice, data) notice = Object.assign(notice, data)
} }
// //
let shortcut = reactive<Shortcut[]>([]) let shortcut = reactive<Shortcut[]>([])
const getShortcut = async () => { const getShortcut = async () => {
const data = [ const data = [
{ {
name: 'Github', name: 'Github',
@ -327,10 +316,10 @@ const getShortcut = async () => {
} }
] ]
shortcut = Object.assign(shortcut, data) shortcut = Object.assign(shortcut, data)
} }
// //
const getUserAccessSource = async () => { const getUserAccessSource = async () => {
const data = [ const data = [
{ value: 335, name: 'analysis.directAccess' }, { value: 335, name: 'analysis.directAccess' },
{ value: 310, name: 'analysis.mailMarketing' }, { value: 310, name: 'analysis.mailMarketing' },
@ -349,11 +338,11 @@ const getUserAccessSource = async () => {
value: v.value value: v.value
} }
}) })
} }
const barOptionsData = reactive<EChartsOption>(barOptions) as EChartsOption const barOptionsData = reactive<EChartsOption>(barOptions) as EChartsOption
// //
const getWeeklyUserActivity = async () => { const getWeeklyUserActivity = async () => {
const data = [ const data = [
{ value: 13253, name: 'analysis.monday' }, { value: 13253, name: 'analysis.monday' },
{ value: 34235, name: 'analysis.tuesday' }, { value: 34235, name: 'analysis.tuesday' },
@ -375,9 +364,9 @@ const getWeeklyUserActivity = async () => {
type: 'bar' type: 'bar'
} }
]) ])
} }
const getAllApi = async () => { const getAllApi = async () => {
await Promise.all([ await Promise.all([
getCount(), getCount(),
getProject(), getProject(),
@ -387,10 +376,22 @@ const getAllApi = async () => {
getWeeklyUserActivity() getWeeklyUserActivity()
]) ])
loading.value = false loading.value = false
} }
const goToXXLJob = async () => { const goToXXLJob = async () => {
window.open('http://127.0.0.1:9090/xxl-job-admin/'); window.open('https://mt.ptzykjgs.com/xxl-job-admin/');
} }
getAllApi() getAllApi()
</script> </script>
<style scoped>
.image-container {
width: 100%;
display: flex;
justify-content: center;
}
.el-image img {
width: 100%;
height: auto;
}
</style>