🎉 更新首页

This commit is contained in:
smallchill 2019-10-03 14:05:27 +08:00
parent a4aec41b0c
commit 8ea8225411

View File

@ -1,286 +1,196 @@
import React, { PureComponent } from 'react';
import moment from 'moment';
import { connect } from 'dva';
import Link from 'umi/link';
import { Row, Col, Card, List, Avatar } from 'antd';
import { Card, Col, Collapse, Row } from 'antd';
import styles from '../../layouts/Sword.less';
import EditableLinkGroup from '@/components/EditableLinkGroup';
import PageHeaderWrapper from '@/components/PageHeaderWrapper';
import styles from './Workplace.less';
const { Panel } = Collapse;
const links = [
{
title: '操作一',
href: '',
},
{
title: '操作二',
href: '',
},
{
title: '操作三',
href: '',
},
{
title: '操作四',
href: '',
},
{
title: '操作五',
href: '',
},
{
title: '操作六',
href: '',
},
];
@connect(({ user, project, activities, loading }) => ({
currentUser: user.currentUser,
project,
activities,
currentUserLoading: loading.effects['user/fetchCurrent'],
projectLoading: loading.effects['project/fetchNotice'],
activitiesLoading: loading.effects['activities/fetchList'],
}))
class Workplace extends PureComponent {
componentDidMount() {
const { dispatch } = this.props;
dispatch({
type: 'user/fetchCurrent',
});
dispatch({
type: 'project/fetchNotice',
});
dispatch({
type: 'activities/fetchList',
});
}
renderActivities() {
const {
activities: { list },
} = this.props;
return list.map(item => {
const events = item.template.split(/@\{([^{}]*)\}/gi).map(key => {
if (item[key]) {
return (
<a href={item[key].link} key={item[key].name}>
{item[key].name}
</a>
);
}
return key;
});
return (
<List.Item key={item.id}>
<List.Item.Meta
avatar={<Avatar src={item.user.avatar} />}
title={
<span>
<a className={styles.username}>{item.user.name}</a>
&nbsp;
<span className={styles.event}>{events}</span>
</span>
}
description={
<span className={styles.datetime} title={item.updatedAt}>
{moment(item.updatedAt).fromNow()}
</span>
}
/>
</List.Item>
);
});
}
render() {
const {
currentUser,
currentUserLoading,
project: { notice },
projectLoading,
activitiesLoading,
} = this.props;
const pageHeaderContent =
currentUser && Object.keys(currentUser).length ? (
<div className={styles.pageHeaderContent}>
<div className={styles.avatar}>
<Avatar size="large" src={currentUser.avatar} />
</div>
<div className={styles.content}>
<div className={styles.contentTitle}>
您好
{currentUser.name}
祝您开心每一天
</div>
<div>我们用代码编写梦想用梦想改变世界</div>
</div>
</div>
) : null;
const extraContent = (
<div className={styles.extraContent}>
<div className={styles.statItem}>
<p>项目数</p>
<p>56</p>
</div>
<div className={styles.statItem}>
<p>团队内排名</p>
<p>
8<span> / 24</span>
</p>
</div>
<div className={styles.statItem}>
<p>项目访问</p>
<p>2,223</p>
</div>
</div>
);
return (
<PageHeaderWrapper
loading={currentUserLoading}
content={pageHeaderContent}
extraContent={extraContent}
>
<Row gutter={24}>
<Col xl={16} lg={24} md={24} sm={24} xs={24}>
<Card
style={{ marginBottom: 24 }}
bodyStyle={{ padding: 0 }}
bordered={false}
className={styles.activeCard}
title="简介"
loading={activitiesLoading}
>
<List loading={activitiesLoading} size="large">
<div className={styles.activitiesList}>
<List.Item key="desc-1">
<List.Item.Meta
title={
<span>
<a className={styles.username}>SpringBlade 2.0 </a>
<span className={styles.event}>
是一个基于 Spring Boot 2 & Spring Cloud Finchley & Mybatis
等核心技术用于快速构建中大型系统的基础框架
</span>
</span>
}
/>
</List.Item>
<List.Item key="desc-2">
<List.Item.Meta
title={
<span>
<a className={styles.username}>SpringBlade 企业版系列 </a>
<span className={styles.event}>
已通过长时间生产环境的考验现将其拆分出基础模块进行开源当前版本为2.0.0
</span>
</span>
}
/>
</List.Item>
<List.Item key="desc-2">
<List.Item.Meta
title={
<span>
<a className={styles.username}>SpringBlade </a>
<span className={styles.event}>
技术交流群号477853168欢迎大家加入
</span>
</span>
}
/>
</List.Item>
</div>
</List>
</Card>
<Card
className={styles.projectList}
title="所使用技术"
bordered={false}
loading={projectLoading}
bodyStyle={{ padding: 0 }}
>
{notice.map(item => (
<Card.Grid className={styles.projectGrid} key={item.id}>
<Card bodyStyle={{ padding: 0 }} bordered={false}>
<Card.Meta
title={
<div className={styles.cardTitle}>
<Avatar size="small" src={item.logo} />
<Link to="/">{item.title}</Link>
</div>
}
description={item.description}
/>
</Card>
</Card.Grid>
))}
</Card>
</Col>
<Col xl={8} lg={24} md={24} sm={24} xs={24}>
<Card
style={{ marginBottom: 24 }}
title="快速开始 / 便捷导航"
bordered={false}
bodyStyle={{ padding: 0 }}
>
<EditableLinkGroup onAdd={() => {}} links={links} linkElement={Link} />
</Card>
<Card
bodyStyle={{ paddingTop: 12, paddingBottom: 12 }}
bordered={false}
title="团队"
loading={projectLoading}
>
<div className={styles.members}>
<Row gutter={48}>
<Col span={12} key="members-item-1">
<Link to="/">
<Avatar
src="https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png"
size="small"
/>
<span className={styles.member}>ChillZhuang</span>
</Link>
</Col>
<Col span={12} key="members-item-2">
<Link to="/">
<Avatar
src="https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png"
size="small"
/>
<span className={styles.member}>DreamLu</span>
</Link>
</Col>
<Col span={12} key="members-item-3">
<Link to="/">
<Avatar
src="https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png"
size="small"
/>
<span className={styles.member}>LengLeng</span>
</Link>
</Col>
<Col span={12} key="members-item-4">
<Link to="/">
<Avatar
src="https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png"
size="small"
/>
<span className={styles.member}>LiXunHuan</span>
</Link>
</Col>
</Row>
<PageHeaderWrapper>
<Card className={styles.card} bordered={false}>
<Row gutter={24}>
<Col span={24}>
<div style={{ textAlign: 'center' }}>
<img src="https://img.shields.io/badge/Release-V2.5.0-green.svg" alt="Downloads" />
<img src="https://img.shields.io/badge/JDK-1.8+-green.svg" alt="Build Status" />
<img
src="https://img.shields.io/badge/Spring%20Cloud-Greenwich.SR3-blue.svg"
alt="Coverage Status"
/>
<img
src="https://img.shields.io/badge/Spring%20Boot-2.1.8.RELEASE-blue.svg"
alt="Downloads"
/>
<a href="https://bladex.vip">
<img
src="https://img.shields.io/badge/Sword%20Author-Small%20Chill-ff69b4.svg"
alt="Downloads"
/>
</a>
<a href="https://bladex.vip">
<img
src="https://img.shields.io/badge/Copyright%20-@BladeX-%23ff3f59.svg"
alt="Downloads"
/>
</a>
</div>
</Card>
</Col>
</Row>
</Col>
</Row>
<Row gutter={24}>
<Col span={16}>
<Collapse bordered={false} defaultActiveKey={['1','2','3']}>
<Panel header="欢迎使用Sword" key="1">
<div>1.Sword是SpringBlade前端UI系统</div>
<div>2.对现有的ant design pro库进行二次封装</div>
<div>3.100%兼容原生ant design pro库</div>
<div>4.配合后端代码生成系统可以快速搭建完整的功能模块</div>
<div>5.使用Sword可以大幅度提升开发效率不再为重复工作发愁</div>
</Panel>
<Panel header="什么是BladeX" key="2">
<div>1.BladeX是一款精心设计的微服务架构提供 SpringCloud 全套解决方案</div>
<div>2.开源中国首批完美集成 SpringCloud Alibaba 系列组件的微服务架构</div>
<div>3.基于稳定生产的商业项目升级优化而来更加贴近企业级的需求</div>
<div>4.追求企业开发更加高效部署更加方便生产更加稳定</div>
<div>5.GVP-码云最有价值开源项目</div>
<div>6.BladeX授权地址:<a href="https://bladex.vip/#/vip">点击授权</a></div>
</Panel>
<Panel header="为何需要BladeX" key="3">
<div>1.经历过较长的线上生产积累了很多企业痛点的解决方案</div>
<div>2.一套代码兼容MySqlOraclePostgreSQL适应企业各种不同场景的需求</div>
<div>3.集成了很多企业急切所需的例如多租户Oauth2授权认证工作流分布式事务等等功能</div>
<div>4.深度定制了Flowable工作流完美支持SpringCloud分布式服务的场景以远程调用的方式进行操作</div>
<div>5.升级了核心驱动新功能完全可以开箱即用而开源版需要自己再花时间进行集成需要花掉更多的时间成本</div>
<div>6.拥抱微服务时代很多企业由于项目转型或升级传统的技术已然不能满足反而会花更多成本而BladeX就是为此而生</div>
<div>7.同时提供SpringCloud版本和SpringBoot版本两个版本的api可以与Sword和Saber无缝对接为小型项目至大型项目保驾护航</div>
<div>8.授权购买即永久源码没有混淆后续升级完全免费企业只需花很少的钱即可获得一整套成熟的解决方案你还在等什么</div>
</Panel>
<Panel header="拥有的核心功能" key="4">
<div>1.前后端分离-采用前后端分离模式前端提供两套架构Sword基于ReactSaber基于Vue</div>
<div>2. 分布式单体式后端架构-提供两套后端架构基于SpringCloud的分布式架构以及基于SpringBoot的单体式架构</div>
<div>3.API完全兼容-两套后端架构与两套前端架构共四套架构可以任意组合所有API完全兼容</div>
<div>4.前后端代码生成-定制针对两套前端与后端的代码生成模板轻松生成整个模块的前后端代码减少重复工作量</div>
<div>5.组件化插件化架构-针对功能深度定制各个starter引入开箱即用为整个架构解耦提升效率</div>
<div>6.Nacos-集成阿里巴巴的Nacos完成统一的服务注册与配置</div>
<div>7.Sentinel-集成Sentinel从流量控制熔断降级系统负载等多个维度保护服务的稳定性</div>
<div>8.Dubbo-完美集成Dubbo最新版支持远程RPC调用</div>
<div>9.多租户系统-完整的SaaS多租户架构</div>
<div>10.Oauth2-集成Oauth2协议完美支持多终端的接入与认证授权</div>
<div>11.工作流-深度定制SpringCloud分布式场景的Flowable工作流为复杂流程保驾护航同时提供SpringBoot集成版本</div>
<div>12.独立流程设计器-提供独立的完全汉化的流程设计器轻松定制流程模型</div>
<div>13.动态网关-集成基于Nacos的轻量级高拓展性动态网关</div>
<div>14.动态聚合文档-实现基于Nacos的Swagger SpringCloud聚合文档</div>
<div>15.分布式文件服务-集成minioqiniualioss等优秀的第三方提供便捷的文件上传与管理</div>
<div>16.多租户对象存储系统-在SaaS系统中各租户可自行配置文件上传至自己的私有OSS</div>
<div>17.权限管理-精心设计的权限管理方案角色权限精确到按钮</div>
<div>18.动态数据权限-高度灵活的动态数据权限提供注解+Web可视化两种配置方式Web配置无需重启直接生效</div>
<div>19.动态接口权限-高度灵活的动态接口权限提供注解+Web可视化两种配置方式Web配置无需重启直接生效</div>
<div>20.多租户顶部菜单配置-提供给每个租户独立的顶部菜单配置模块可以自定义顶部菜单切换</div>
<div>21.主流数据库兼容-一套代码完全兼容MysqlPostgresqlOracle三大主流数据库</div>
<div>22.动态网关鉴权-基于Nacos的动态网关鉴权可在线配置实时生效</div>
<div>23.全能代码生成器-支持自定义模型模版 业务建模支持多种模板引擎在线配置大幅度提升开发效率不再为重复工作发愁</div>
<div>24.Seata分布式事务-定制集成Seata支持分布式事务无代码侵入不失灵活与简洁</div>
<div>25.未完待续...</div>
</Panel>
<Panel header="软件定制开发合作" key="5">
<div>1.接BladeX系列架构的定制服务</div>
<div>2.接3个月以内工期的reactvuespringbootspringcloudapp小程序等软件定制服务</div>
<div>3.有意向请联系唯一指定QQ:85088620</div>
</Panel>
</Collapse>
</Col>
<Col span={8}>
<Collapse bordered={false} defaultActiveKey={['9']}>
<Panel header="2.5.0发布 集成seata支持分布式事务" key="9">
<div>1.封装集成seata支持分布式事务</div>
<div>2.重写blade-core-cloud模块增强cloud场景支持</div>
<div>3.增加hystrix自动fallback功能</div>
<div>4.升级springboot至2.1.8.RELEASE</div>
<div>5.升级springcloud至Greenwich.SR3</div>
<div>6.hikari变更为druid</div>
</Panel>
<Panel header="2.4.1发布 代码生成增加多数据源,强化代码生成功能" key="8">
<div>1.升级SpringBoot至2.1.7</div>
<div>2.代码生成增加多数据源配置</div>
<div>3.增强代码生成功能支持可选基础业务包装器配置</div>
<div>4.优化代码生成模板</div>
</Panel>
<Panel header="2.4.0发布 升级AlibabaCloud毕业版本" key="7">
<div>1.升级AlibabaCloud毕业版本</div>
<div>2.升级支持Naocs 1.1.0Sentinel 1.6.3</div>
<div>3.租户系统的tenantCode统一更改为tenantId</div>
<div>4.优化代码生成模板</div>
<div>5.优化mybatis-plus新版配置</div>
<div>6.修复排序字段sql注入问题</div>
</Panel>
<Panel header="2.3.3发布 重构令牌逻辑, 增强令牌功能" key="6">
<div>1.重构令牌发放逻辑可自定义令牌类型增强可拓展性</div>
<div>2.增加动态配置token过期时间令牌续期功能</div>
<div>3.增加GateWay动态聚合文档功能简化配置</div>
<div>4.优化Wrapper定义代码更加简洁</div>
<div>5.Swagger增加多包扫描</div>
<div>6.使用 Swagger-Bootstrap-UI 最新版排序注解</div>
<div>7.升级 SpringBoot 2.1.6SpringCloud Greenwich.SR2</div>
<div>8.升级 Mybatis-Plus 3.1.2</div>
<div>9.修复排序字段可能导致的sql注入问题</div>
<div>10.修复部分缓存清除失效的问题</div>
</Panel>
<Panel header="2.3.2发布 增加 OSS 封装及单元测试封装" key="5">
<div>1.增加七牛云oss-starter</div>
<div>2.增加blade-resource模块对外提供服务支持分布式下的oss场景</div>
<div>3.LauncherService增加排序功能</div>
<div>4.增加单元测试starter可在启动过程中便捷地指定profile以及启动参数</div>
<div>5.增加指定启动参数的单元测试demo</div>
<div>6.优化docker脚本配置</div>
</Panel>
<Panel header="2.3.1发布 升级业务架构" key="4">
<div>1.升级 SpringBoot 2.1.5</div>
<div>2.前端框架Saber升级 element-ui 2.8.2</div>
<div>3.Saber业务代码升级</div>
<div>4.优化Saber代码生成模板</div>
<div>5.统一日志业务表基础字段</div>
<div>6.优化租户过滤逻辑</div>
<div>7.BaseEntity放开主键限制子类可自定义主键类型</div>
<div>8.XssFilter增加放行配置可配置放行微信api接口</div>
</Panel>
<Panel header="2.3.0发布 升级SpringCloud Greenwich与SpringBoot" key="3">
<div>1.升级 SpringCloud Greenwich</div>
<div>2.升级 SpringCloud Alibaba 组件版本为0.9.0.RELEASE支持最新版本的nacos与sentinel</div>
<div>3.升级 SpringBoot 2.1.4</div>
<div>4.升级 mysql 驱动版本</div>
<div>5.优化 LauncherService 关于环境的判断逻辑</div>
<div>6.修复 blade-core-log 在部分情况下获取request为空的问题</div>
<div>7.修复多租户插件判断租户过滤的逻辑</div>
<div>8.修复请求日志打印插件部分格式空指针的问题</div>
<div>9.降低nacos心跳日志等级关闭心跳日志显示</div>
</Panel>
<Panel header="2.2.0发布 升级为多终端令牌认证系统" key="2">
<div>1.增加多终端令牌认证系统</div>
<div>2.增加多租户开关</div>
<div>3.修复部分模块没有筛选已删除的问题</div>
<div>4.调整角色分配会越权的问题</div>
<div>5.优化部署脚本</div>
</Panel>
<Panel header="2.1.0发布 升级为SaaS多租户系统" key="1">
<div>1.升级为SaaS多租户系统</div>
<div>2.优化代码生成逻辑</div>
<div>3.代码生成增加菜单sql</div>
<div>4.增加SysClient提供系统信息远程调用</div>
<div>5.优化部署脚本增加前端部署实例</div>
<div>6.增加父子角色过滤使得角色无法越权配置</div>
</Panel>
<Panel header="2.0.0发布 全面升级为SpringCloud微服务架构" key="0">
<div>1.SpringBlade 2.0 是由一个商业级项目升级优化而来的SpringCloud微服务架构采用Java8 API重构了业务代码完全遵循阿里巴巴编码规范</div>
<div>2.采用Spring Boot 2 Spring Cloud Greenwich Mybatis 等核心技术用于快速搭建企业级的微服务系统平台</div>
<div>3.SpringBlade 致力于创造新颖的开发模式将开发中遇到的痛点生产中所踩的坑整理归纳并将解决方案都融合到框架中</div>
</Panel>
</Collapse>
</Col>
</Row>
</Card>
</PageHeaderWrapper>
);
}