Commit 07cfb8dc by maolipeng

Merge branch 'feature/maolipeng/20210610/zuhuyouhua' into dev

# Conflicts:
#	src/modules/root/App.tsx
#	src/modules/root/Menu.tsx
parents 7c1372bf 587cdfab
import React, { useEffect, useState } from "react"; import React, { useContext, useEffect, useState } from "react";
import BaseService from "@/domains/basic-domain/baseService";
import { Tooltip } from "antd" import { Tooltip } from "antd"
import { VersionContext } from "@/store/context";
import ContactWidget from "@/components/ContactWidget"; import ContactWidget from "@/components/ContactWidget";
import "./LimitTip.less" import "./LimitTip.less"
...@@ -8,14 +8,14 @@ export default function LimitTip(props:{total:number,type:string,tip:() => React ...@@ -8,14 +8,14 @@ export default function LimitTip(props:{total:number,type:string,tip:() => React
const [isOver, setIsOver] = useState(false) const [isOver, setIsOver] = useState(false)
const [limitUser, setLimitUser] = useState("0") const [limitUser, setLimitUser] = useState("0")
const versionInfo = useContext(VersionContext)
useEffect(()=> { useEffect(()=> {
BaseService.getLesseeVersionMsg() if (versionInfo) {
.then(res=> { setIsOver(versionInfo.userNum === -1 ? false : versionInfo.whetherReachUserNum)
setIsOver(res.result.userNum === -1 ? false : res.result.whetherReachUserNum) setLimitUser(versionInfo.userNum === -1 ? "不限人数" : String(versionInfo.userNum))
setLimitUser(res.result.userNum === -1 ? "不限人数" : res.result.userNum) }
}) },[versionInfo])
},[])
return ( return (
<div className="limit-tip"> <div className="limit-tip">
......
...@@ -19,72 +19,13 @@ import { ...@@ -19,72 +19,13 @@ import {
} from "bizcharts"; } from "bizcharts";
import moment from 'moment' import moment from 'moment'
import Service from "@/common/js/service"; import Service from "@/common/js/service";
import BaseService from "@/domains/basic-domain/baseService";
import User from '@/common/js/user'; import User from '@/common/js/user';
import ContactWidget from '@/components/ContactWidget'; import HomeTip from './HomeTip';
import './Home.less'; import './Home.less';
const Option = Select.Option; const Option = Select.Option;
function HomeTip() {
const [isOverNum, setIsOverNum] = useState(false)
const [tipType, setTipType] = useState(0) //0不显示1即将过期2已过期
const [expirationTime, setExpirationTime] = useState("")
const [surplusDay, setSurplusDay] = useState(0)
useEffect(()=> {
BaseService.getLesseeVersionMsg()
.then(res=> {
setIsOverNum(res.result.userNum === -1 ? false : res.result.whetherReachUserNum)
setSurplusDay(res.result.surplusDayTime)
setExpirationTime(moment(res.result.validEndTime).format("YYYY-MM-DD"))
if (res.result.stateEnum === "NO") {
setTipType(2)
} else if (res.result.surplusDayTime === 30 || res.result.surplusDayTime <= 7) {
setTipType(1)
}
})
},[])
return (
<div className="home-tip">
{
(isOverNum || tipType !== 0) &&
<div className="tip">
<Carousel dotPosition="left" dots={false} autoplay={true} autoplaySpeed={5000}>
{
isOverNum && (
<div className="content">
<span className="icon iconfont" style={{color:"#FF4F4F",marginRight:"8px"}}>&#xe61d;</span>温馨提示:企业使用人数已达上限,将无法新增员工、学员,如需增加人数限制,请联系小麦企学院服务平台。
<ContactWidget placement="bottom" trigger="hover"><div className="renew-btn">立即续费</div></ContactWidget>
</div>
)
}
{
tipType === 2 && (
<div className="content">
<span className="icon iconfont" style={{color:"#FF4F4F",marginRight:"8px"}}>&#xe61d;</span>版本到期提醒:当前企业购买的小麦企学院服务已于{expirationTime}到期,到期后仍可访问,但功能不可使用,建议尽快续费购买哦~
<ContactWidget placement="bottom" trigger="hover"><div className="renew-btn">立即续费</div></ContactWidget>
</div>
)
}
{
tipType === 1 && (
<div className="content">
<span className="icon iconfont" style={{color:"#FF4F4F",marginRight:"8px"}}>&#xe61d;</span>当前企业购买的小麦企学院服务仅剩{surplusDay}天(于{expirationTime}到期),为了不影响使用,建议尽快续费购买哦~
<ContactWidget placement="bottom" trigger="hover"><div className="renew-btn">立即续费</div></ContactWidget>
</div>
)
}
</Carousel>
</div>
}
</div>
)
}
class Home extends React.Component { class Home extends React.Component {
constructor(props) { constructor(props) {
super(props); super(props);
......
...@@ -29,36 +29,6 @@ ...@@ -29,36 +29,6 @@
src: url('https://image.xiaomaiketang.com/xm/n2sADd2jY6.TTF'); src: url('https://image.xiaomaiketang.com/xm/n2sADd2jY6.TTF');
} }
.home-tip {
.tip {
height: 40px;
background: #FFE7E7;
margin-bottom: 16px;
.content {
font-size: 14px;
color: #666666;
font-weight: 400;
line-height: 40px;
padding-left: 16px;
.renew-btn {
display: inline-block;
width: 80px;
height: 28px;
background: #FF4F4F;
border-radius: 2px;
color: #ffffff;
font-size: 14px;
font-weight: 400;
line-height: 28px;
text-align: center;
cursor: pointer;
margin-left: 8px;
}
}
}
}
.data-wrap{ .data-wrap{
background: #FFF; background: #FFF;
.data-box { .data-box {
......
.home-tip {
.tip {
height: 40px;
background: #FFE7E7;
margin-bottom: 16px;
.content {
font-size: 14px;
color: #666666;
font-weight: 400;
line-height: 40px;
padding-left: 16px;
.renew-btn {
display: inline-block;
width: 80px;
height: 28px;
background: #FF4F4F;
border-radius: 2px;
color: #ffffff;
font-size: 14px;
font-weight: 400;
line-height: 28px;
text-align: center;
cursor: pointer;
margin-left: 8px;
}
}
}
}
\ No newline at end of file
import React, { useContext, useEffect, useState, version } from "react";
import "./HomeTip.less"
import { VersionContext } from "@/store/context";
import ContactWidget from '@/components/ContactWidget';
import { Carousel } from "antd";
export default function HomeTip() {
const [isOverNum, setIsOverNum] = useState<boolean>(false)
const [tipType, setTipType] = useState(0) //0不显示1即将过期2已过期
const [expirationTime, setExpirationTime] = useState("")
const [surplusDay, setSurplusDay] = useState(0)
const versionInfo = useContext(VersionContext)
useEffect(()=> {
if (versionInfo) {
setIsOverNum(versionInfo.userNum === -1 ? false : versionInfo.whetherReachUserNum)
setSurplusDay(versionInfo.surplusDayTime)
setExpirationTime(versionInfo.validEndTime)
if (versionInfo.stateEnum === "NO") {
setTipType(2)
} else if (versionInfo.surplusDayTime === 30 || versionInfo.surplusDayTime <= 7) {
setTipType(1)
}
}
},[versionInfo])
return (
<div className="home-tip">
{
(isOverNum || tipType !== 0) &&
<div className="tip">
<Carousel dotPosition="left" dots={false} autoplay={true} autoplaySpeed={5000}>
{
isOverNum && (
<div className="content">
<span className="icon iconfont" style={{color:"#FF4F4F",marginRight:"8px"}}>&#xe61d;</span>温馨提示:企业使用人数已达上限,将无法新增员工、学员,如需增加人数限制,请联系小麦企学院服务平台。
<ContactWidget placement="bottom" trigger="hover"><div className="renew-btn">立即续费</div></ContactWidget>
</div>
)
}
{
tipType === 2 && (
<div className="content">
<span className="icon iconfont" style={{color:"#FF4F4F",marginRight:"8px"}}>&#xe61d;</span>版本到期提醒:当前企业购买的小麦企学院服务已于{expirationTime}到期,到期后仍可访问,但功能不可使用,建议尽快续费购买哦~
<ContactWidget placement="bottom" trigger="hover"><div className="renew-btn">立即续费</div></ContactWidget>
</div>
)
}
{
tipType === 1 && (
<div className="content">
<span className="icon iconfont" style={{color:"#FF4F4F",marginRight:"8px"}}>&#xe61d;</span>当前企业购买的小麦企学院服务仅剩{surplusDay}天(于{expirationTime}到期),为了不影响使用,建议尽快续费购买哦~
<ContactWidget placement="bottom" trigger="hover"><div className="renew-btn">立即续费</div></ContactWidget>
</div>
)
}
</Carousel>
</div>
}
</div>
)
}
\ No newline at end of file
...@@ -14,8 +14,9 @@ import Main from './Main' ...@@ -14,8 +14,9 @@ import Main from './Main'
import zhCN from 'antd/es/locale/zh_CN' import zhCN from 'antd/es/locale/zh_CN'
import User from '@/common/js/user'; import User from '@/common/js/user';
import BaseService from "@/domains/basic-domain/baseService"; import BaseService from "@/domains/basic-domain/baseService";
import { XMContext } from '@/store/context'; import moment from 'moment';
import WechatApi from '../../core/wechatApi'; import WechatApi from "@/core/wechatApi"
import { VersionContext, VersionInfo, XMContext } from '@/store/context';
import { setStoreGroupPermission, setStorePermission, setStoreGroupList, setStoreList } from '@/store/actions/index'; import { setStoreGroupPermission, setStorePermission, setStoreGroupList, setStoreList } from '@/store/actions/index';
import Service from "@/common/js/service"; import Service from "@/common/js/service";
import Bus from '@/core/tbus'; import Bus from '@/core/tbus';
...@@ -28,6 +29,7 @@ declare var window: any; ...@@ -28,6 +29,7 @@ declare var window: any;
const App: React.FC = (props: any) => { const App: React.FC = (props: any) => {
const [storeUserId, setStoreUserId] = useState('') const [storeUserId, setStoreUserId] = useState('')
const ctx: any = useContext(XMContext); const ctx: any = useContext(XMContext);
const [versionInfo, setVersionInfo] = useState<VersionInfo|null>(null)
const userId = User.getUserId(); const userId = User.getUserId();
const [menuType, setMenuType] = useState(true); const [menuType, setMenuType] = useState(true);
const enterpriseId = User.getEnterpriseId(); const enterpriseId = User.getEnterpriseId();
...@@ -37,6 +39,7 @@ const App: React.FC = (props: any) => { ...@@ -37,6 +39,7 @@ const App: React.FC = (props: any) => {
useEffect(() => { useEffect(() => {
WechatApi.initShareConfig(); WechatApi.initShareConfig();
getStoreAndUserInfo(); getStoreAndUserInfo();
getVersion();
if (window.location.hash === "#/") { if (window.location.hash === "#/") {
window.RCHistory.replace({ window.RCHistory.replace({
pathname: '/home', pathname: '/home',
...@@ -60,6 +63,24 @@ const App: React.FC = (props: any) => { ...@@ -60,6 +63,24 @@ const App: React.FC = (props: any) => {
} }
}); });
} }
function getVersion() {
BaseService.getLesseeVersionMsg().then((res) => {
let version = res.result;
User.setVersion(version);
User.setExpirationTime(res.result.validEndTime)
let versioninfo:VersionInfo = {
dayTime: version.dayTime,
stateEnum: version.stateEnum,
userNum: version.userNum === -1 ? '不限人数' : version.userNum,
surplusUserNum: version.userNum === -1 ? '不限人数' : version.surplusUserNum,
surplusDayTime: version.surplusDayTime,
validEndTime: moment(version.validEndTime).format('YYYY-MM-DD'),
validStartTime: moment(version.validStartTime).format('YYYY-MM-DD'),
whetherReachUserNum: version.whetherReachUserNum,
};
setVersionInfo(versioninfo)
});
}
async function getStoreAndUserInfo() { async function getStoreAndUserInfo() {
await (enterpriseId ? getStoreInfo() : getStoreGroupAndStoreList()); await (enterpriseId ? getStoreInfo() : getStoreGroupAndStoreList());
...@@ -149,10 +170,13 @@ const App: React.FC = (props: any) => { ...@@ -149,10 +170,13 @@ const App: React.FC = (props: any) => {
</Layout> </Layout>
</Layout> */} </Layout> */}
<Header id="app" handleMenuType={handleMenuType} menuType={menuType} /> <Header id="app" handleMenuType={handleMenuType} menuType={menuType} />
<ConfigProvider locale={zhCN} autoInsertSpaceInButton={false}> <VersionContext.Provider value={versionInfo}>
<Main menuType={menuType} /> <ConfigProvider locale={zhCN} autoInsertSpaceInButton={false}>
</ConfigProvider> <Main menuType={menuType} />
<Menu menuType={menuType} handleMenuType={handleMenuType} /> </ConfigProvider>
<Menu menuType={menuType} handleMenuType={handleMenuType} />
</VersionContext.Provider>
</div> </div>
) )
} }
......
import React, { Key, useContext, useEffect, useRef, useState, useMemo } from 'react'; import React, { Key, useContext, useEffect, useRef, useState, useMemo } from 'react';
import { withRouter } from 'react-router-dom'; import {
withRouter,
} from 'react-router-dom';
import { Menu, Popover, Tooltip } from 'antd'; import { Menu, Popover, Tooltip } from 'antd';
import { RightOutlined } from '@ant-design/icons'; import { RightOutlined } from '@ant-design/icons';
import { menuList } from '../../routes//config/menuList'; import { menuList } from '../../routes//config/menuList';
import { XMContext } from '../../store/context'; import { XMContext, VersionContext } from '../../store/context';
import BaseService from '@/domains/basic-domain/baseService'; import BaseService from '@/domains/basic-domain/baseService';
import StoreService from '@/domains/store-domain/storeService'; import StoreService from '@/domains/store-domain/storeService';
import classNames from 'classnames'; import classNames from 'classnames';
...@@ -11,47 +13,15 @@ import User from '@/common/js/user'; ...@@ -11,47 +13,15 @@ import User from '@/common/js/user';
import _ from 'underscore'; import _ from 'underscore';
import './Menu.less'; import './Menu.less';
import { display } from 'html2canvas/dist/types/css/property-descriptors/display'; import { display } from 'html2canvas/dist/types/css/property-descriptors/display';
import moment from 'moment';
import ContactWidget from '@/components/ContactWidget'; import ContactWidget from '@/components/ContactWidget';
const { SubMenu } = Menu; const { SubMenu } = Menu;
interface VersionInfo {
dayTime: number;
stateEnum: string;
surplusDayTime: number;
surplusUserNum: number;
userNum: number;
validEndTime: string;
validStartTime: string;
}
function VersionPanel(props: any) { function VersionPanel(props: any) {
const [versionName, setVersionName] = useState('标准版'); const [versionName, setVersionName] = useState('标准版');
const [showVersionPopover, setShowVersionPopover] = useState(false); const [showVersionPopover, setShowVersionPopover] = useState(false);
const [showRenewPopover, setShowRenewPopover] = useState(false); const [showRenewPopover, setShowRenewPopover] = useState(false);
const [isExpiration, setIsExpiration] = useState(false); const versionInfo = useContext(VersionContext);
const [versionInfo, setVersionInfo] = useState<any>({});
useEffect(() => {
BaseService.getLesseeVersionMsg().then((res) => {
let version = res.result;
User.setVersion(version);
User.setExpirationTime(res.result.validEndTime)
let versioninfo = {
userNum: version.userNum === -1 ? '不限人数' : version.userNum,
surplusUserNum: version.userNum === -1 ? '不限人数' : version.surplusUserNum,
surplusDayTime: version.surplusDayTime,
validEndTime: moment(version.validEndTime).format('YYYY-MM-DD'),
validStartTime: moment(version.validStartTime).format('YYYY-MM-DD'),
};
setVersionInfo(versioninfo);
if (version.surplusDayTime === 0) {
setIsExpiration(true);
}
});
}, []);
function onVersionEnter() { function onVersionEnter() {
setShowVersionPopover(true); setShowVersionPopover(true);
...@@ -84,27 +54,27 @@ function VersionPanel(props: any) { ...@@ -84,27 +54,27 @@ function VersionPanel(props: any) {
</ContactWidget> </ContactWidget>
</div> </div>
<div className='expiration-time'> <div className='expiration-time'>
有效期至{versionInfo.validEndTime} 有效期至{versionInfo?.validEndTime}
{isExpiration ? '(已过期)' : ''} {versionInfo?.stateEnum === "NO" ? '(已过期)' : ''}
</div> </div>
<div className={versionPopoverClass}> <div className={versionPopoverClass}>
<div className='title'>版本信息</div> <div className='title'>版本信息</div>
{isExpiration ? <div className='expiration-tag'>已过期</div> : ''} {versionInfo?.stateEnum === "NO" ? <div className='expiration-tag'>已过期</div> : ''}
<div className='content'> <div className='content'>
<div className='widget' style={{ marginRight: '26px', marginBottom: '16px', width: '70px' }}> <div className='widget' style={{ marginRight: '26px', marginBottom: '16px', width: '70px' }}>
<div className='lable'>剩余天数</div> <div className='lable'>剩余天数</div>
<div className='lable-text'>{versionInfo.surplusDayTime}</div> <div className='lable-text'>{versionInfo?.surplusDayTime}</div>
</div> </div>
<div className='widget' style={{ marginBottom: '16px' }}> <div className='widget' style={{ marginBottom: '16px', width:"212px"}}>
<div className='lable'>有效起止日期</div> <div className='lable'>有效起止日期</div>
<div className='lable-text'> <div className='lable-text'>
{versionInfo.validStartTime}~{versionInfo.validEndTime} {versionInfo?.validStartTime}~{versionInfo?.validEndTime}
</div> </div>
</div> </div>
<div className='widget' style={{ marginRight: '26px', marginBottom: '8px', width: '70px' }}> <div className='widget' style={{ marginRight: '26px', marginBottom: '8px', width: '70px' }}>
<div className='lable'>剩余人数</div> <div className='lable'>剩余人数</div>
<div className='lable-text'>{versionInfo.surplusUserNum}</div> <div className='lable-text'>{versionInfo?.surplusUserNum}</div>
</div> </div>
<div className='widget' style={{ marginBottom: '8px' }}> <div className='widget' style={{ marginBottom: '8px' }}>
<div className='lable' style={{ display: 'inline-block' }}> <div className='lable' style={{ display: 'inline-block' }}>
...@@ -133,12 +103,12 @@ function VersionPanel(props: any) { ...@@ -133,12 +103,12 @@ function VersionPanel(props: any) {
</span> </span>
</div> </div>
</Tooltip> </Tooltip>
<div className='lable-text'>{versionInfo.userNum}</div> <div className='lable-text'>{versionInfo?.userNum}</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
); )
} }
function Aside(props: any) { function Aside(props: any) {
......
...@@ -7,4 +7,17 @@ ...@@ -7,4 +7,17 @@
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有 * @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/ */
import React from 'react'; import React from 'react';
export const XMContext: any = React.createContext(null);
\ No newline at end of file export interface VersionInfo {
dayTime: number; //有效时长
stateEnum: string; //"NO"已过期,"YES"未过期
surplusDayTime: number; //剩余有效天数
surplusUserNum: number; //剩余限制人数
userNum: number; //限制人数
validEndTime: string;
validStartTime: string;
whetherReachUserNum: boolean;
}
export const XMContext: any = React.createContext(null);
export const VersionContext = React.createContext<VersionInfo|null>(null)
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment