修改
This commit is contained in:
@@ -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',
|
||||
|
||||
@@ -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; /* 卡片间距,可按需调整 */
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
<Select
|
||||
:showSearch="false"
|
||||
:options="[
|
||||
{ label: '使用手机号码找回您的密码', value: 'mobile' },
|
||||
{ label: '使用电子邮箱找回您的密码', value: 'email' },
|
||||
{ label: '使用保密问题找回您的密码', value: 'question' },
|
||||
]"
|
||||
|
||||
@@ -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 />
|
||||
前端基于 Vue3、Vite、TypeScript、Ant-Design-Vue、Vben Admin,<br />
|
||||
后台基于 Spring Boot、Apache 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,
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user