This commit is contained in:
2025-11-29 23:40:29 +08:00
parent bfa83f42a8
commit 51ffefbe2f
95 changed files with 9692 additions and 1322 deletions

View File

@@ -121,168 +121,6 @@ export const groupItems: GroupItem[] = [
group: '前端组',
date: '2021-09-01',
},
{
title: 'Vue',
icon: 'i-ion:logo-vue',
color: '#3fb27f',
desc: '现在的你决定将来的你。',
group: '前端组',
date: '2021-09-01',
}, {
title: 'Vue',
icon: 'i-ion:logo-vue',
color: '#3fb27f',
desc: '现在的你决定将来的你。',
group: '前端组',
date: '2021-09-01',
}, {
title: 'Vue',
icon: 'i-ion:logo-vue',
color: '#3fb27f',
desc: '现在的你决定将来的你。',
group: '前端组',
date: '2021-09-01',
}, {
title: 'Vue',
icon: 'i-ion:logo-vue',
color: '#3fb27f',
desc: '现在的你决定将来的你。',
group: '前端组',
date: '2021-09-01',
}, {
title: 'Vue',
icon: 'i-ion:logo-vue',
color: '#3fb27f',
desc: '现在的你决定将来的你。',
group: '前端组',
date: '2021-09-01',
}, {
title: 'Vue',
icon: 'i-ion:logo-vue',
color: '#3fb27f',
desc: '现在的你决定将来的你。',
group: '前端组',
date: '2021-09-01',
}, {
title: 'Vue',
icon: 'i-ion:logo-vue',
color: '#3fb27f',
desc: '现在的你决定将来的你。',
group: '前端组',
date: '2021-09-01',
}, {
title: 'Vue',
icon: 'i-ion:logo-vue',
color: '#3fb27f',
desc: '现在的你决定将来的你。',
group: '前端组',
date: '2021-09-01',
}, {
title: 'Vue',
icon: 'i-ion:logo-vue',
color: '#3fb27f',
desc: '现在的你决定将来的你。',
group: '前端组',
date: '2021-09-01',
}, {
title: 'Vue',
icon: 'i-ion:logo-vue',
color: '#3fb27f',
desc: '现在的你决定将来的你。',
group: '前端组',
date: '2021-09-01',
}, {
title: 'Vue',
icon: 'i-ion:logo-vue',
color: '#3fb27f',
desc: '现在的你决定将来的你。',
group: '前端组',
date: '2021-09-01',
}, {
title: 'Vue',
icon: 'i-ion:logo-vue',
color: '#3fb27f',
desc: '现在的你决定将来的你。',
group: '前端组',
date: '2021-09-01',
}, {
title: 'Vue',
icon: 'i-ion:logo-vue',
color: '#3fb27f',
desc: '现在的你决定将来的你。',
group: '前端组',
date: '2021-09-01',
}, {
title: 'Vue',
icon: 'i-ion:logo-vue',
color: '#3fb27f',
desc: '现在的你决定将来的你。',
group: '前端组',
date: '2021-09-01',
}, {
title: 'Vue',
icon: 'i-ion:logo-vue',
color: '#3fb27f',
desc: '现在的你决定将来的你。',
group: '前端组',
date: '2021-09-01',
}, {
title: 'Vue',
icon: 'i-ion:logo-vue',
color: '#3fb27f',
desc: '现在的你决定将来的你。',
group: '前端组',
date: '2021-09-01',
}, {
title: 'Vue',
icon: 'i-ion:logo-vue',
color: '#3fb27f',
desc: '现在的你决定将来的你。',
group: '前端组',
date: '2021-09-01',
}, {
title: 'Vue',
icon: 'i-ion:logo-vue',
color: '#3fb27f',
desc: '现在的你决定将来的你。',
group: '前端组',
date: '2021-09-01',
}, {
title: 'Vue',
icon: 'i-ion:logo-vue',
color: '#3fb27f',
desc: '现在的你决定将来的你。',
group: '前端组',
date: '2021-09-01',
}, {
title: 'Vue',
icon: 'i-ion:logo-vue',
color: '#3fb27f',
desc: '现在的你决定将来的你。',
group: '前端组',
date: '2021-09-01',
}, {
title: 'Vue',
icon: 'i-ion:logo-vue',
color: '#3fb27f',
desc: '现在的你决定将来的你。',
group: '前端组',
date: '2021-09-01',
}, {
title: 'Vue',
icon: 'i-ion:logo-vue',
color: '#3fb27f',
desc: '现在的你决定将来的你。',
group: '前端组',
date: '2021-09-01',
}, {
title: 'Vue',
icon: 'i-ion:logo-vue',
color: '#3fb27f',
desc: '现在的你决定将来的你。',
group: '前端组',
date: '2021-09-01',
},
{
title: 'Html5',
icon: 'i-ion:logo-html5',

View File

@@ -3,19 +3,37 @@
<template #extra>
<a-button type="link" size="small">更多</a-button>
</template>
<!-- 滚动容器 + 网格布局确保一行3个 -->
<div class="scroll-container">
<template v-for="item in items" :key="item">
<CardGrid class="!w-full">
<span class="flex">
<Icon :icon="item.icon" :color="item.color" size="30" />
<span class="ml-4 text-lg">{{ item.title }}</span>
</span>
<div class="text-secondary mt-2 h-10 flex">{{ item.desc }}</div>
<div class="text-secondary flex justify-between">
<span>{{ item.group }}</span>
<span>{{ item.date }}</span>
<template v-for="item in listData" :key="item">
<CardGrid class="!w-full rounded-lg p-4 shadow-sm hover:shadow-md transition-shadow duration-200 border border-gray-100">
<div class="flex items-center mb-3">
<Icon icon="i-ion:layers-outline" color="#00bfff" size="25" />
<span class="ml-2 text-lg font-medium text-gray-800">{{ item.projectName }}</span>
</div>
<div class="text-gray-600 mt-1 mb-4 h-12 flex items-center overflow-auto text-sm pr-2">
{{ item.projectDesc }}
</div>
<div class="bg-blue-50 rounded-md p-3 border-b-2 border-blue-200">
<div class="text-gray-600 flex justify-between mb-2 text-sm">
<span class="flex items-center">
<i class="ri-calendar-start-line mr-1 text-blue-400"></i>
开始时间: {{ item.startDate }}
</span>
<span class="flex items-center">
<i class="ri-code-line mr-1 text-blue-400"></i>
项目编码: {{ item.projectCode }}
</span>
</div>
<div class="text-gray-600 flex justify-between text-sm">
<span class="flex items-center">
<i class="ri-calendar-end-line mr-1 text-blue-400"></i>
结束时间: {{ item.endDate }}
</span>
<span class="flex items-center">
<i class="ri-user-line mr-1 text-blue-400"></i>
项目经理: {{ item.employeeName }}
</span>
</div>
</div>
</CardGrid>
</template>
@@ -23,17 +41,34 @@
</Card>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
import { defineComponent, onMounted, ref } from 'vue';
import { Card } from 'ant-design-vue';
import { Icon } from '@jeesite/core/components/Icon';
import { groupItems } from './Data';
import { BizProjectInfo, bizProjectInfoListAll } from '@jeesite/biz/api/biz/projectInfo';
export default defineComponent({
components: { Card, CardGrid: Card.Grid, Icon },
setup() {
return { items: groupItems };
},
} as any);
components: { Card, CardGrid: Card.Grid, Icon },
setup() {
const listData = ref();
const getDataList = async () => {
try {
const params = { projectStatus: '2' };
const result = await bizProjectInfoListAll(params);
listData.value = result || [];
} catch (error) {
listData.value = []; // 异常时置空列表,显示空状态
}
}
onMounted(() => {
getDataList()
});
return {
listData,
};
},
});
</script>
<style scoped>
@@ -46,7 +81,7 @@
/* 关键网格布局一行3个 */
display: grid;
grid-template-columns: repeat(3, 1fr); /* 强制一行3列 */
grid-template-columns: repeat(2, 1fr); /* 强制一行3列 */
gap: 16px; /* 卡片间距,可按需调整 */
}

View File

@@ -6,7 +6,6 @@
<Select
:showSearch="false"
:options="[
{ label: '使用手机号码找回您的密码', value: 'mobile' },
{ label: '使用电子邮箱找回您的密码', value: 'email' },
{ label: '使用保密问题找回您的密码', value: 'question' },
]"

View File

@@ -20,12 +20,6 @@
<div class="-enter-x mt-10 text-white font-medium">
<span class="mt-4 inline-block text-3xl"></span>
</div>
<div class="-enter-x text-md mt-5 text-white font-normal dark:text-gray-500">
JeeSite 是一个专业的平台是一个让你使用放心的平台<br />
前端基于 Vue3ViteTypeScriptAnt-Design-VueVben Admin<br />
后台基于 Spring BootApache MyBatis 最先进最经典的技术栈<br />
精致的 UI规范的代码书写匠心著作封装细节专注业务快速开发<br />
</div>
</div>
</div>
<div class="h-full w-full flex overflow-auto py-5 lg:my-0 lg:h-auto lg:w-11/24 lg:py-0">
@@ -35,9 +29,6 @@
>
<LoginForm @demo-mode="demoMode = $event" />
<ForgetPasswordForm :demoMode="demoMode" />
<RegisterForm :demoMode="demoMode" />
<MobileForm :demoMode="demoMode" />
<QrCodeForm :demoMode="demoMode" />
</div>
</div>
</div>
@@ -50,37 +41,10 @@
import { AppLocalePicker, AppDarkModeToggle } from '@jeesite/core/components/Application';
import LoginForm from './LoginForm.vue';
import ForgetPasswordForm from './ForgetPasswordForm.vue';
import RegisterForm from './RegisterForm.vue';
import MobileForm from './MobileForm.vue';
import QrCodeForm from './QrCodeForm.vue';
import { useGlobSetting } from '@jeesite/core/hooks/setting';
import { useDesign } from '@jeesite/core/hooks/web/useDesign';
import { useLocaleStore } from '@jeesite/core/store/modules/locale';
/* import { onMounted } from 'vue';
import { useMessage } from '@jeesite/core/hooks/web/useMessage';
const { createConfirm } = useMessage();
onMounted(() => {
if (!import.meta.env.DEV) {
createConfirm({
content: [
'<div onclick="window.open(\'https://gitee.com/thinkgem/jeesite-vue\')">',
'进入 <strong style="color: #FF0036;">JeeSite Vue</strong> 源码仓库页面,',
'点右上角 <strong style="color: #FF0036;">Star</strong> 加星关注',
'</div>',
].join(''),
width: 480,
iconType: 'info',
maskClosable: false,
cancelText: '我已 Star',
okText: '带我去 Star',
onOk: () => {
window.open('https://gitee.com/thinkgem/jeesite-vue');
},
});
}
}); */
defineProps({
sessionTimeout: {
type: Boolean,

View File

@@ -66,40 +66,7 @@
<Button type="primary" size="large" block @click="handleLogin" :loading="loading">
{{ t('sys.login.loginButton') }}
</Button>
<!-- <Button size="large" class="mt-4 enter-x" block @click="handleRegister">
{{ t('sys.login.registerButton') }}
</Button> -->
</FormItem>
<ARow class="enter-x md:pl-3">
<ACol :md="7" :xs="24">
<Button block @click="setLoginState(LoginStateEnum.MOBILE)">
{{ t('sys.login.mobileSignInFormTitle') }}
</Button>
</ACol>
<ACol :md="8" :xs="24" class="xs:mx-0 !my-2 md:mx-2 !md:my-0">
<Button block @click="setLoginState(LoginStateEnum.QR_CODE)">
{{ t('sys.login.qrSignInFormTitle') }}
</Button>
</ACol>
<ACol :md="7" :xs="24">
<Button block @click="setLoginState(LoginStateEnum.REGISTER)">
{{ t('sys.login.registerButton') }}
</Button>
</ACol>
</ARow>
<Divider class="enter-x">{{ t('sys.login.otherSignIn') }}</Divider>
<div class="enter-x flex justify-evenly" :class="`${prefixCls}-sign-in-way`">
<Icon icon="i-simple-icons:gitee" color="#d81e06" size="28" @click="handleOauth2" />
<Icon icon="i-ant-design:qq-circle-filled" color="#2178e3" size="32" @click="handleOauth2" />
<Icon icon="i-ant-design:wechat-filled" color="#2eb60d" size="32" @click="handleOauth2" />
<Icon icon="i-ant-design:github-filled" color="#2c2c2c" size="32" @click="handleOauth2" />
<a href="https://gitee.com/thinkgem/jeesite-client" target="_blank">
<Icon icon="i-ant-design:windows-filled" size="32" style="vertical-align: middle" />
<span class="pl-1" style="vertical-align: middle"> {{ t('客户端下载') }}</span>
</a>
</div>
</Form>
</template>
<script lang="ts" setup>