头像下拉增加我的工作台项

This commit is contained in:
caishi 2024-07-18 17:14:55 +08:00
parent 76f7c2034a
commit 22bf58ea86
8 changed files with 129 additions and 66 deletions

View File

@ -1,5 +1,5 @@
<h3>前端react环境安装</h3>
<p>1、 安装node v8.12.0此安装包含了node和npm。</p>
<p>1、 安装node v14.12.3此安装包含了node和npm。</p>
<p>2、 安装cnpm命令行 npm install -g cnpm --registry=https://registry.npm.taobao.org</p>
<p>3、 安装依赖的js库public/react目录下<即项目package.json所在目录>,开启命令行): cnpm install</p>
<p>4、 如果你的ruby服务使用的是3000端口则需要在package.json中修改"port"参数的值</p>

7
package-lock.json generated
View File

@ -19733,13 +19733,15 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
"dev": true
"dev": true,
"optional": true
},
"is-glob": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
"optional": true,
"requires": {
"is-extglob": "^2.1.1"
}
@ -19755,7 +19757,8 @@
"version": "3.0.0",
"resolved": "http://173.15.15.82:8081/repository/npm-all/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true
"dev": true,
"optional": true
},
"readdirp": {
"version": "3.6.0",

View File

@ -3,6 +3,23 @@
"version": "3.1.0",
"private": true,
"dependencies": {
"@babel/core": "^7.0.0",
"@babel/plugin-proposal-class-properties": "^7.0.0",
"@babel/plugin-proposal-decorators": "^7.0.0",
"@babel/plugin-proposal-export-default-from": "^7.23.3",
"@babel/plugin-proposal-export-namespace-from": "^7.0.0",
"@babel/plugin-proposal-function-sent": "^7.0.0",
"@babel/plugin-proposal-json-strings": "^7.0.0",
"@babel/plugin-proposal-numeric-separator": "^7.0.0",
"@babel/plugin-proposal-throw-expressions": "^7.0.0",
"@babel/plugin-syntax-dynamic-import": "^7.0.0",
"@babel/plugin-syntax-import-meta": "^7.0.0",
"@babel/plugin-transform-async-to-generator": "^7.0.0",
"@babel/plugin-transform-runtime": "^7.23.6",
"@babel/preset-env": "^7.23.6",
"@babel/preset-react": "^7.23.3",
"@babel/preset-stage-2": "^7.8.3",
"@babel/runtime-corejs3": "^7.23.6",
"@monaco-editor/react": "^2.3.0",
"@novnc/novnc": "^1.1.0",
"@wangeditor/editor": "^5.1.23",
@ -13,6 +30,10 @@
"array-flatten": "^2.1.2",
"autoprefixer": "7.1.6",
"axios": "^0.24.0",
"babel-core": "^7.0.0-bridge.0",
"babel-jest": "^23.4.2",
"babel-plugin-antd": "^0.5.1",
"babel-plugin-dynamic-import-webpack": "^1.1.0",
"bizcharts": "^3.5.8",
"bundle-loader": "^0.5.6",
"chalk": "1.1.3",
@ -20,22 +41,29 @@
"clipboard": "^2.0.8",
"code-prettify": "^0.1.0",
"codemirror": "^5.64.0",
"connect-timeout": "^1.9.0",
"connected-react-router": "4.4.1",
"core-js": "^3.34.0",
"dompurify": "^2.3.3",
"dotenv": "4.0.0",
"dotenv-expand": "4.2.0",
"echarts": "^4.9.0",
"echarts-wordcloud": "^2.0.0",
"editor.md": "^1.5.0",
"express": "^4.18.2",
"flv.js": "^1.5.0",
"fs-extra": "3.0.1",
"http-proxy-middleware": "^2.0.6",
"i18next": "^23.4.5",
"immutability-helper": "^2.6.6",
"install": "^0.12.2",
"intersection-observer": "^0.12.2",
"isomorphic-style-loader": "^5.3.2",
"jest": "20.0.4",
"jquery": "^3.7.1",
"js-base64": "^2.5.2",
"js2wordcloud": "^1.1.12",
"jsdom": "^15.2.1",
"katex": "^0.11.1",
"less": "^3.13.1",
"localforage": "^1.10.0",
@ -48,10 +76,12 @@
"moment": "^2.23.0",
"monaco-editor": "^0.20.0",
"monaco-editor-webpack-plugin": "^1.9.0",
"nodemon": "^3.0.3",
"numeral": "^2.0.6",
"nvm": "0.0.4",
"object-assign": "4.1.1",
"papaparse": "^5.3.2",
"pinyin": "^4.0.0-alpha.0",
"postcss-flexbugs-fixes": "3.2.0",
"promise": "8.0.1",
"prop-types": "^15.6.1",
@ -88,6 +118,7 @@
"react-redux": "5.0.7",
"react-resizable": "^1.10.1",
"react-router": "^4.2.0",
"react-router-config": "^5.1.1",
"react-router-dom": "^4.2.2",
"react-slick": "^0.28.1",
"react-split-pane": "^0.1.91",
@ -96,6 +127,7 @@
"redux": "^4.0.5",
"redux-thunk": "2.3.0",
"rsuite": "^4.3.4",
"sass": "^1.70.0",
"scroll-into-view": "^1.14.2",
"scrollama": "^3.2.0",
"sha1": "^1.1.1",
@ -104,23 +136,32 @@
"slick-carousel": "^1.8.1",
"store": "^2.0.12",
"styled-components": "^4.4.1",
"webpack-node-externals": "^3.0.0",
"weixin-js-sdk": "^1.6.0",
"whatwg-fetch": "2.0.3",
"winston": "^3.11.0",
"winston-daily-rotate-file": "^4.7.1",
"wrap-md-editor": "^0.2.20",
"xss": "^1.0.14",
"xterm": "4.8.1",
"xterm-addon-fit": "0.4.0"
},
"scripts": {
"start": "node --max_old_space_size=15360 scripts/start.js",
"build": "cross-env NODE_ENV=production node --max_old_space_size=15360 scripts/build.js",
"start": "node scripts/start.js",
"build": "cross-env NODE_ENV=production babel-node --max_old_space_size=15360 scripts/build.js",
"build:server": "cross-env NODE_ENV=production webpack --config config/webpack.server.js",
"build:dll": "webpack --config=./config/webpack.dll.config.js",
"test-build": "cross-env NODE_ENV=testBuild node --max_old_space_size=15360 scripts/build.js",
"pre-build": "NODE_ENV=preBuild node --max_old_space_size=15360 scripts/build.js",
"gen_stats": "NODE_ENV=production webpack --profile --config=./config/webpack.config.prod.js --json > stats.json",
"ana": "webpack-bundle-analyzer ./stats.json",
"analyze": "npm run build -- --stats && webpack-bundle-analyzer build/bundle-stats.json",
"analyz": "NODE_ENV=production npm_config_report=true npm run build"
"analyz": "NODE_ENV=production npm_config_report=true npm run build",
"dev": "npm-run-all --parallel dev:**",
"dev:server": "cross-env NODE_ENV=dev nodemon --exec babel-node \"./buildserver/bundle.js\" --watch config --watch server",
"test:build:server": "cross-env NODE_ENV=localtest webpack --config config/webpack.server.js",
"dev:build:server": "cross-env NODE_ENV=dev webpack --config config/webpack.server.js",
"pm2": "pm2 start pm2.json"
},
"jest": {
"collectCoverageFrom": [
@ -156,46 +197,22 @@
"node"
]
},
"babel": {
"presets": [
"react",
"react-app"
],
"plugins": [
[
"import",
{
"libraryName": "antd",
"libraryDirectory": "lib",
"style": "css"
},
"ant"
],
"syntax-dynamic-import"
]
},
"eslintConfig": {
"extends": "react-app"
},
"proxy": "http://localhost:3000",
"proxy": "https://testforgeplus.trustie.net",
"port": "3007",
"devDependencies": {
"@babel/runtime": "7.0.0-beta.51",
"babel-cli": "^6.26.0",
"babel-core": "^6.26.0",
"babel-eslint": "7.2.3",
"babel-jest": "20.0.3",
"babel-loader": "7.1.2",
"@babel/core": "^7.23.6",
"@babel/node": "^7.0.0",
"@babel/plugin-proposal-decorators": "^7.0.0",
"@babel/polyfill": "^7.0.0",
"@babel/preset-react": "^7.0.0",
"@babel/runtime": "^7.0.0-beta.46",
"babel-loader": "^8.3.0",
"babel-plugin-import": "^1.13.0",
"babel-plugin-syntax-dynamic-import": "^6.18.0",
"babel-plugin-transform-decorators-legacy": "^1.3.5",
"babel-plugin-transform-runtime": "^6.23.0",
"babel-polyfill": "^6.26.0",
"babel-preset-es2015": "^6.24.1",
"babel-preset-react": "^6.24.1",
"babel-preset-react-app": "^3.1.1",
"babel-preset-stage-2": "^6.24.1",
"babel-runtime": "6.26.0",
"babel-upgrade": "^1.0.1",
"case-sensitive-paths-webpack-plugin": "2.1.1",
"compression-webpack-plugin": "^1.1.12",
"concat": "^1.0.3",
@ -213,7 +230,7 @@
"html-webpack-plugin": "^4.0.4",
"less-loader": "^4.1.0",
"mockjs": "^1.1.0",
"node-sass": "^4.14.1",
"npm-run-all": "^4.1.5",
"optimize-css-assets-webpack-plugin": "^5.0.3",
"postcss-loader": "2.0.8",
"purgecss": "^2.1.2",

View File

@ -3,20 +3,19 @@ import AccountProfile from "../../modules/user/AccountProfile";
import { getImageUrl } from 'educoder'
import axios from 'axios';
import cookie from 'react-cookies';
import { notification , Dropdown ,Popover, Menu,Badge } from 'antd';
import { notification , Dropdown , Menu , Icon } from 'antd';
import { Link } from 'react-router-dom';
import LoginDialog from '../../modules/login/LoginDialog';
import HeadSearch from '../Component/HeadSearch';
import { getOrzCompanyList } from '../../forge/Information/api';
import AddProjectModal from './AddProjectModal';
import '../../modules/tpm/TPMIndex.css';
import CheckProfile from '../Component/ProfileModal/Profile';
import './header.scss';
import NoticeContent from './NoticeContent';
import MainLogo from './img/logo.png';
// TODO 这部分脚本从公共脚本中直接调用
const { SubMenu } = Menu
window._header_componentHandler = null;
// 非trustie链接则新开页跳转
@ -47,6 +46,7 @@ class NewHeader extends Component {
visible:false, //浮动消息框展示控制
showSubMenu: false,
zoneList: [], // 专区列表
companyList:[] //已开通工作台列表
}
}
componentDidMount() {
@ -60,6 +60,7 @@ class NewHeader extends Component {
window._header_componentHandler = this;
this.getZoneList(settings && settings.common.zone +'/api')
this.getComlist();
try {
window.sessionStorage.setItem("yslgeturls", JSON.stringify(window.location.href))
@ -267,7 +268,8 @@ class NewHeader extends Component {
}
renderMenu=(personal)=>{
const { current_user } = this.props;
const { mygetHelmetapi } = this.props;
const { companyList } = this.state;
return(
<Menu className="currentMenu">
{/* <Menu.Item>
@ -286,7 +288,18 @@ class NewHeader extends Component {
)
})
}
{/* <li><Link to={`/settings/profile`}>设置</Link></li> */}
<SubMenu title={<span>我的工作台<Icon type="right" /></span>} Icon={null} popupClassName='subMyworkList'>
{
companyList && companyList.length>0 ?
companyList.map((i,k)=>{
return(
<Menu.Item><a href={`${ mygetHelmetapi && mygetHelmetapi.common.zone }/${i.enterpriseIdentifier}`} target='_blank'>{i.enterpriseName}</a></Menu.Item>
)
})
:<Menu.Item>暂无工作台</Menu.Item>
}
</SubMenu>
<Menu.Item><a onClick={() => this.educoderloginysl()}>退出登录</a></Menu.Item>
</Menu>
)
@ -296,6 +309,16 @@ class NewHeader extends Component {
this.setState({ visible });
};
getComlist=()=>{
getOrzCompanyList().then(res=>{
if(res){
this.setState({
companyList:res.data.rows
})
}
})
}
render() {
const { resetUserInfo ,showNotification,publicNav,mygetHelmetapi} = this.props;
let settings = mygetHelmetapi;
@ -333,10 +356,10 @@ class NewHeader extends Component {
:
""
} */}
{
{/*{
settings && settings.navbar && settings.navbar.length > 0 ?
<ul id="header-nav" className="head-nav pr">
{/* {
{
settings.navbar && settings.navbar.map((item, key) => {
var new_link = item.link;
var is_hidden = item.hidden;
@ -370,12 +393,12 @@ class NewHeader extends Component {
)
}
})
} */}
}
</ul>
: ""
}
<div className="head-right">
{/* { search_url && <HeadSearch {...this.props}/>} */}
}*/}
{/*<div className="head-right">
{ search_url && <HeadSearch {...this.props}/>} */}
{/* {
current_user && (current_user.main_site || current_user.login) && (settings && settings.add && settings.add.length>0)?
<Dropdown overlay={this.addMenu(settings && settings.add)} placement="bottomRight">
@ -399,8 +422,8 @@ class NewHeader extends Component {
</Link>
</Popover>
: ""
} */}
</div>
}
</div>*/}
{!user || (user && !user.login) ?
<span className="font-15 ml30">
<Link to="/login" className="mr5 color-white">登录</Link>

View File

@ -26,6 +26,21 @@
border-radius: 50%;
margin-left: 15px;
}
.subMyworkList {
li{
max-width: 120px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
height: 40px;
line-height: 40px;
padding:0px 12px;
&:hover{
background-color: #829BFF;
a{color: #fff;}
}
}
}
.ant-dropdown-menu.currentMenu{
width: 120px;
@ -38,6 +53,21 @@
text-overflow: ellipsis;
display: block;
}
.ant-dropdown-menu-submenu .ant-dropdown-menu-submenu-title{
height: 100%;
line-height: 40px;
padding: 0px 10px;
&:hover{
background: #829BFF;
color: #fff;
}
i{
margin-right: 0px;
}
}
.ant-dropdown-menu-submenu-arrow{
display: none;
}
li{
height: 40px;
line-height: 40px;

View File

@ -331,7 +331,7 @@ class LoginDialog extends Component {
this.setState({
isphone: flag,
//查询第三方登录信息
settings: JSON.parse(localStorage.getItem("chromesetting")),
settings: localStorage.getItem("chromesetting") !=="undefined" && JSON.parse(localStorage.getItem("chromesetting")),
})
if (this.props.isRender != undefined) {

View File

@ -42,6 +42,7 @@ body>.-task-title {
display: flex;
align-items: center;
height: 100%;
justify-content: flex-end;
}
.globalSpin {
max-height: 700px !important;

View File

@ -12,7 +12,6 @@ import SystemNotice from '../../forge/Component/NoticeModal/SystemNotice';
import cookie from 'react-cookies';
import NpsModal from '../modals/npsModal';
import { IsPC } from 'educoder';
import { getOrzCompanyList } from '../../forge/Information/api';
const items = [
@ -128,16 +127,6 @@ export function TPMIndexHOC(WrappedComponent) {
}
///请求定制化的信息
this.getAppdata();
this.getComlist();
}
getComlist=()=>{
getOrzCompanyList().then(res=>{
if(res){
this.setState({
companyList:res.data.rows
})
}
})
}