Commit dd78e1b7 by zhangleyuan

feat:解决合并代码后的冲突

parents 557c810e ea045bbc
@font-face { @font-face {
font-family: 'iconfont'; /* Project id 2223403 */ font-family: 'iconfont'; /* Project id 2223403 */
src: url('//at.alicdn.com/t/font_2223403_oe5p510553.woff2?t=1624259078391') format('woff2'), src: url('//at.alicdn.com/t/font_2223403_6hd3qwwrou2.woff2?t=1627033726611') format('woff2'),
url('//at.alicdn.com/t/font_2223403_oe5p510553.woff?t=1624259078391') format('woff'), url('//at.alicdn.com/t/font_2223403_6hd3qwwrou2.woff?t=1627033726611') format('woff'),
url('//at.alicdn.com/t/font_2223403_oe5p510553.ttf?t=1624259078391') format('truetype'); url('//at.alicdn.com/t/font_2223403_6hd3qwwrou2.ttf?t=1627033726611') format('truetype');
} }
.iconfont { .iconfont {
font-family: 'iconfont' !important; font-family: 'iconfont' !important;
......
/* /*
* @Author: wufan * @Author: wufan
* @Date: 2020-11-25 18:25:02 * @Date: 2020-11-25 18:25:02
* @LastEditors: zhangleyuan * @LastEditors: Please set LastEditors
* @LastEditTime: 2021-03-09 10:28:03 * @LastEditTime: 2021-07-30 17:00:06
* @Description: Description * @Description: Description
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有 * @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/ */
...@@ -75,6 +75,36 @@ export function updateStoreMessage(params: object) { ...@@ -75,6 +75,36 @@ export function updateStoreMessage(params: object) {
export function getStoreDetail(params: object) { export function getStoreDetail(params: object) {
return Service.Hades("public/hades/getStoreDetail", params); return Service.Hades("public/hades/getStoreDetail", params);
} }
export function getByDepartmentId(params: object) {
return Service.Hades("public/hades/getByDepartmentId", params);
}
export function getDepartmentUser(params: object) {
return Service.Hades("/public/hades/getDepartmentAndDepartmentUserByName", params);
}
export function getDepartmentUserNotPage(params: object) {
return Service.Hades("public/hades/getDepartmentAndDepartmentUserNotPageByName", params);
}
export function addDepartment(params: object) {
return Service.Hades("public/hades/addDepartment", params);
}
export function editDepartment(params: object) {
return Service.Hades("public/hades/editDepartment", params);
}
export function delDepartment(params: object) {
return Service.Hades("public/hades/delDepartment", params);
}
export function queryDepartmentTree(params: object) {
return Service.Hades("public/hades/queryDepartmentTree", params);
}
export function getStoreCustomerAndDepNamePage(params: object) {
return Service.Hades("public/hades/getStoreCustomerAndDepNamePage", params);
}
export function delDepartmentUser(params: object) {
return Service.Hades("public/hades/delDepartmentUser", params);
}
export function syncWorkWeChatDepartment(params: object) {
return Service.Hades("public/hades/syncWorkWeChatDepartment", params);
}
export function getSyncCount(params: object) {
return Service.Hades("public/hades/getSyncCount", params);
}
/* /*
* @Author: zhangleyuan * @Author: zhangleyuan
* @Date: 2021-01-19 11:27:56 * @Date: 2021-01-19 11:27:56
* @LastEditors: zhangleyuan * @LastEditors: Please set LastEditors
* @LastEditTime: 2021-03-08 10:36:04 * @LastEditTime: 2021-07-29 13:37:10
* @Description: 描述一下 * @Description: 描述一下
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有 * @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/ */
...@@ -12,6 +12,7 @@ export const storeRoleEnum = { ...@@ -12,6 +12,7 @@ export const storeRoleEnum = {
"1": "管理员", "1": "管理员",
"2": "普通讲师" "2": "普通讲师"
}; };
export const industryList = ["IT服务","制造业","批发/零售","生活服务","文化/体育/娱乐业","建筑/房地产","教育","运输/物流/仓储","医疗","政府","金融","能源/采矿","农林渔牧","其他行业"]; export const industryList = ["IT服务","制造业","批发/零售","生活服务","文化/体育/娱乐业","建筑/房地产","教育","运输/物流/仓储","医疗","政府","金融","能源/采矿","农林渔牧","其他行业"];
export const childIndustryList = { export const childIndustryList = {
...@@ -29,4 +30,9 @@ export const childIndustryList = { ...@@ -29,4 +30,9 @@ export const childIndustryList = {
"能源/采矿":["电力/热力/燃气/水供应业","石油/天然气","煤炭","有色金属","钢铁","其他"], "能源/采矿":["电力/热力/燃气/水供应业","石油/天然气","煤炭","有色金属","钢铁","其他"],
"农林渔牧":["农林渔牧"], "农林渔牧":["农林渔牧"],
"其他行业":["科学研究和技术服务业","社会组织","水利和环境管理","国际组织","其他"] "其他行业":["科学研究和技术服务业","社会组织","水利和环境管理","国际组织","其他"]
}
export const DepType = {
'departMentTab':'DEP_ORG',
'postGrouptab':'DEP_POST',
'customGroupTab':'DEP_CUSTOM'
} }
\ No newline at end of file
/* /*
* @Author: wufan * @Author: wufan
* @Date: 2020-11-25 18:25:02 * @Date: 2020-11-25 18:25:02
* @LastEditors: zhangleyuan * @LastEditors: Please set LastEditors
* @LastEditTime: 2021-03-08 11:48:43 * @LastEditTime: 2021-08-01 09:38:54
* @Description: Description * @Description: Description
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有 * @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/ */
import { getEmployeeList, getUserList, getStoreDecorationList, getStoreRole, addEmployee, editEmployee, deleteEmployee, getCourseCatalogList, import { getEmployeeList, getUserList, getStoreDecorationList, getStoreRole, addEmployee, editEmployee, deleteEmployee, getCourseCatalogList,
getAllSonCategory, addCourseCategory, delCourseCategory, editCourseCategory, deleteStoreDecorationList, addStoreBanner, editStoreBanner, getAllSonCategory, addCourseCategory, delCourseCategory, editCourseCategory, deleteStoreDecorationList, addStoreBanner, editStoreBanner,
moveBannerSequence,getStoreUserBasicPage,updateStoreMessage,getStoreDetail} from '@/data-source/store/request-apis'; moveBannerSequence,getStoreUserBasicPage,updateStoreMessage,getStoreDetail,getByDepartmentId,getDepartmentUser,getDepartmentUserNotPage,addDepartment,
editDepartment,delDepartment,queryDepartmentTree,getStoreCustomerAndDepNamePage,delDepartmentUser,syncWorkWeChatDepartment,getSyncCount
} from '@/data-source/store/request-apis';
export default class StoreService { export default class StoreService {
// 获取员工列表 // 获取员工列表
...@@ -89,4 +91,37 @@ export default class StoreService { ...@@ -89,4 +91,37 @@ export default class StoreService {
static getStoreDetail(params: any) { static getStoreDetail(params: any) {
return getStoreDetail(params); return getStoreDetail(params);
} }
static getByDepartmentId(params:any){
return getByDepartmentId(params);
}
static getDepartmentUser(params:any){
return getDepartmentUser(params);
}
static getDepartmentUserNotPage(params:any){
return getDepartmentUserNotPage(params);
}
static addDepartment(params:any){
return addDepartment(params);
}
static editDepartment(params:any){
return editDepartment(params);
}
static delDepartment(params:any){
return delDepartment(params);
}
static queryDepartmentTree(params:any){
return queryDepartmentTree(params);
}
static getStoreCustomerAndDepNamePage(params:any){
return getStoreCustomerAndDepNamePage(params);
}
static delDepartmentUser(params:any){
return delDepartmentUser(params);
}
static syncWorkWeChatDepartment(params:any){
return syncWorkWeChatDepartment(params);
}
static getSyncCount(params:any){
return getSyncCount(params);
}
} }
\ No newline at end of file
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: 吴文洁 * @Author: 吴文洁
* @Date: 2020-08-24 12:20:57 * @Date: 2020-08-24 12:20:57
* @LastEditors: Please set LastEditors * @LastEditors: Please set LastEditors
* @LastEditTime: 2021-08-02 17:00:14 * @LastEditTime: 2021-08-03 14:27:49
* @Description: * @Description:
* @Copyright: 杭州杰竞科技有限公司 版权所有 * @Copyright: 杭州杰竞科技有限公司 版权所有
--> -->
...@@ -29,8 +29,8 @@ ...@@ -29,8 +29,8 @@
manifest.json provides metadata used when your web app is installed on a manifest.json provides metadata used when your web app is installed on a
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/ user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
--> -->
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" /> <link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<link rel="stylesheet" href="//at.alicdn.com/t/font_2223403_oe5p510553.css" /> <link rel="stylesheet" href="//at.alicdn.com/t/font_2223403_6hd3qwwrou2.css" />
<!-- <!--
Notice the use of %PUBLIC_URL% in the tags above. Notice the use of %PUBLIC_URL% in the tags above.
......
...@@ -5,4 +5,16 @@ ...@@ -5,4 +5,16 @@
.add-show-btn{ .add-show-btn{
margin-top:12px; margin-top:12px;
} }
.update-user-btn{
margin-left:8px;
margin-right:8px;
}
.origin-text{
font-size:14px;
color:#999;
}
.view-text{
font-size:14px;
color:#5289FA;
}
} }
\ No newline at end of file
...@@ -20,7 +20,7 @@ import WWOpenDataCom from '@/components/WWOpenDataCom'; ...@@ -20,7 +20,7 @@ import WWOpenDataCom from '@/components/WWOpenDataCom';
import LimitTip from "./LimitTip"; import LimitTip from "./LimitTip";
import "./EmployeeManage.less"; import "./EmployeeManage.less";
import ChooseMembersModal from "./modal/ChooseMembersModal"; import NewChooseMembersModal from "./modal/NewChooseMembersModal";
const { confirm } = Modal; const { confirm } = Modal;
const { Search } = Input; const { Search } = Input;
...@@ -34,6 +34,7 @@ interface RecordTypes { ...@@ -34,6 +34,7 @@ interface RecordTypes {
phone: string; phone: string;
avatar?: string; avatar?: string;
weChatAccount?: string; weChatAccount?: string;
depNameList:Array<string>
} }
interface RoleItemType { interface RoleItemType {
...@@ -174,7 +175,21 @@ function EmployeeManage() { ...@@ -174,7 +175,21 @@ function EmployeeManage() {
}, },
}, },
{ {
title: "角色", title: "部门",
dataIndex: "depNameList",
key: "depNameList",
render: (val:string,record:RecordTypes) => {
if(!record.depNameList){
return <span>-</span>
}
return record.depNameList.map((item,index)=>{
return <span><WWOpenDataCom type="departmentName" openid={item}/>{index<(record.depNameList.length -1)?'、':''}</span>;
})
},
},
{
title: "身份",
dataIndex: "role", dataIndex: "role",
key: "role", key: "role",
render: (val: string) => { render: (val: string) => {
...@@ -281,6 +296,55 @@ function EmployeeManage() { ...@@ -281,6 +296,55 @@ function EmployeeManage() {
getEmployeeList(); getEmployeeList();
}); });
} }
function updateListData(){
let num:any;
const params = {
enterpriseId:User.getEnterpriseId(),
storeId:User.getStoreId(),
userType:'USER'
}
StoreService.getSyncCount(params).then((res) => {
num = res.result;
if(num<3){
return confirm({
title: "确定更新列表数据吗?",
content: `员工数据来源企微通讯录,一天只能更新3次,今日还能更新${3-num}次。`,
icon: (
<span className="icon iconfont default-confirm-icon">&#xe839; </span>
),
okText: "确定",
cancelText: "取消",
onOk: () => {
confirmUpdateListData()
},
});
}else{
Modal.warning({
title: '提示',
okText: '我知道了',
content: '员工数据今日更新次数已达上限(3次),无法继续更新。',
icon: (
<span className='icon iconfont default-confirm-icon' style={{ color: '#FFBB54 !important' }}>
&#xe834;
</span>
),
});
}
});
}
function confirmUpdateListData(){
const params = {
enterpriseId:User.getEnterpriseId(),
storeId:User.getStoreId(),
userType:'USER'
}
StoreService.syncWorkWeChatDepartment(params).then((res) => {
message.success('已更新');
});
}
return ( return (
<div className="page employee-manage-page"> <div className="page employee-manage-page">
...@@ -372,16 +436,26 @@ function EmployeeManage() { ...@@ -372,16 +436,26 @@ function EmployeeManage() {
</div> </div>
</div> </div>
{(User.getUserRole() === 'CloudManager' || User.getUserRole() === 'StoreManager') && {(User.getUserRole() === 'CloudManager' || User.getUserRole() === 'StoreManager') &&
<Button <>
onClick={() => { <Button
handleToAddEmployee(); onClick={() => {
}} handleToAddEmployee();
type="primary" }}
className="add-show-btn" type="primary"
> className="add-show-btn"
添加员工 >
</Button> 添加员工
} </Button>
<Button className="update-user-btn" onClick={()=>{updateListData()}}>更新列表数据</Button>
<span className="origin-text">数据来源企业微信通讯录</span>
<a
href="https://www.yuque.com/wangzhong-zkqw0/qixue"
target="_blank"
>
<span className="view-text">查看数据更新说明</span>
</a>
</>
}
</div> </div>
<LimitTip type="员工" total={realTotal} tip={() => { return (<div>数据为当前学院的员工数,若员工存在多个学院,企业人数只统计为1人</div>) }} /> <LimitTip type="员工" total={realTotal} tip={() => { return (<div>数据为当前学院的员工数,若员工存在多个学院,企业人数只统计为1人</div>) }} />
<div className="box-body"> <div className="box-body">
...@@ -413,16 +487,16 @@ function EmployeeManage() { ...@@ -413,16 +487,16 @@ function EmployeeManage() {
</div> </div>
{model} {model}
{employeeModal && {employeeModal &&
<ChooseMembersModal <NewChooseMembersModal
isOpen={employeeModal} treeDepType="DEP_CHAT"
type="USER" visible={employeeModal}
handleChooseModal={(bool: any) => { type="USER"
close={()=>{setEmployeeModal(false)}}
onConfirm={() => {
setEmployeeModal(false) setEmployeeModal(false)
if (bool) {
message.success('添加成功') message.success('添加成功')
getEmployeeList(); getEmployeeList();
} }}
}}
/> />
} }
</div> </div>
......
/*
* @Author: wufan
* @Date: 2020-11-30 10:47:38
* @LastEditors: Please set LastEditors
* @LastEditTime: 2021-07-28 15:50:38
* @Description: 学员管理页面
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/
import React, { useEffect, useState } from "react";
import { withRouter } from "react-router-dom";
import _ from "underscore";
import {Tabs,Input,Tree,Button} from "antd";
import CustomGroupTabCon from './components/CustomGroupTabCon';
import DepartMentTabCon from './components/DepartMentTabCon';
import PostGroupTabCon from './components/PostGroupTabCon';
import "./NewUsersManagePage.less";
const { TabPane } = Tabs;
function UserManagePage() {
const [currentTab, setCurrentTab] = useState("departMentTab");
const [courseList,setCourseList] = useState([]);
const [total, setTotal] = useState(0);
const [query, setQuery] = useState({
current: 0,
size: 10,
});
return (
<div className="page new-user-manage-page">
<div className="content-header">学员管理</div>
<div className="box">
<div className="tab-box">
<Tabs
onChange={(key) => {
setCurrentTab(key);
}}
activeKey={currentTab}
>
<TabPane key="departMentTab" tab="部门"></TabPane>
<TabPane key="postGrouptab" tab="岗位组"></TabPane>
<TabPane key="customGroupTab" tab="自定义分组"></TabPane>
</Tabs>
</div>
<div className="box-body tab-con">
<DepartMentTabCon currentTab={currentTab}/>
{/* {currentTab=== 'department' &&
}
{currentTab=== 'postGroup' &&
<PostGroupTabCon/>
}
{currentTab=== 'customGroup' &&
<CustomGroupTabCon/>
} */}
</div>
</div>
</div>
);
}
export default withRouter(UserManagePage);
import React, { useEffect, useState } from "react";
import { withRouter } from "react-router-dom";
import { Button, Input, message } from "antd";
import LeftStructureTree from "./LeftStructureTree";
import AddOrEditPostGroupModal from "../modal/AddOrEditPostGroupModal";
import UserTable from "./UserTable";
import "./PostGroupTabCon.less";
const { Search } = Input;
function CustomGroupTabCon() {
const [postGroupTreeData, setPostGroupTreeData] = useState([]);
return (
<div className="post-group-tab-con">
<LeftStructureTree
treeData={postGroupTreeData}
treeType={"customGroupTab"}
editPostGroup={(record)=>editPostGroup(record)}
addPostGroup={(record)=>addPostGroup(record)}
/>
<div className="table-con">
<div className="operate-area">
<Button type="primary" className="add-user-btn">
添加学员
</Button>
<Button className="del-user-btn">移出学员</Button>
</div>
<UserTable />
</div>
</div>
);
}
export default withRouter(CustomGroupTabCon);
.department-tab-con{
display: flex;
.table-con{
margin-left:16px;
flex:1;
.operate-area{
margin-bottom:16px;
.add-user-btn{
margin-right:8px;
}
.del-user-btn{
margin-right:8px;
}
.update-user-btn{
margin-right:8px;
}
.origin-text{
font-size:14px;
color:#999;
}
.view-text{
font-size:14px;
color:#5289FA;
}
}
.operate{
.operate__item{
color:#2966FF;
cursor: pointer;
}
}
}
}
\ No newline at end of file
.left-structure-tree {
margin-right: 24px;
width:250px;
height: calc(~'100vh - 260px');
.organization{
overflow: scroll;
.search-con{
margin-bottom: 10px;
}
.operate {
margin-bottom:16px;
.add-btn {
width: 230px;
height:32px;
}
}
&::-webkit-scrollbar {
display: none;
}
.node-title-div {
display: flex;
justify-content: space-between;
white-space: nowrap;
.item-icon {
img {
width: 16px;
height: 16px;
}
}
.item-title {
position: absolute;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
width: 55%;
left: 28px;
}
.item-more {
visibility: hidden;
position: absolute;
right: 8px;
text-align: right;
}
.item-count {
visibility: visible;
position: absolute;
right: 12px;
text-align: right;
}
}
// 修改树样式
.ant-tree .ant-tree-treenode {
padding: 10px 0 14px 0;
}
.ant-tree.ant-tree-directory {
.ant-tree-node-selected{
color:#2966FF !important;
}
.ant-tree-treenode-selected:hover::before,
.ant-tree-treenode-selected::before {
background: #f3f6fa;
}
.ant-tree-treenode-selected .ant-tree-switcher {
color: #666666;
}
.ant-tree-treenode .ant-tree-node-content-wrapper {
color: #666666;
}
}
}
}
\ No newline at end of file
import React, { useEffect, useState } from "react";
import { withRouter } from "react-router-dom";
import { Tree} from "antd";
import StoreService from "@/domains/store-domain/storeService";
import User from '@/common/js/user';
import WWOpenDataCom from '@/components/WWOpenDataCom';
import "./MemberTree.less";
import _ from 'underscore';
const { DirectoryTree } = Tree;
function MemberTree(props) {
const [treeData,setTreeData]=useState([]);
useEffect(()=>{
getTreeData();
},[]);
function getTreeData(){
const params = {
depType:props.treeDepType,
enterpriseId:User.getEnterpriseId(),
source:0,//0代表来自企培
storeId:User.getStoreId(),
userId:User.getUserId(),
whetherCount:false
}
StoreService.getDepartmentUserNotPage(params).then((res) => {
let { departmentVOList=[]} = res.result;
let _treeData = handleData(departmentVOList);
console.log("_treeData",_treeData);
setTreeData(_treeData);
});
}
function handleData(dataArray){
const _dataArray = dataArray.map((item,index)=>{
item.key=item.id;
item.children = []
if(item.departmentUserVOList){
item.children = item.departmentUserVOList;
}
if(item.sonDepartmentVOList){
item.children = [...item.children,...item.sonDepartmentVOList];
}
if(item.children.length > 0){
handleData(item.children)
}else{
delete item.children
}
return item
})
return _dataArray;
}
function treeSelected (selectedKeys,e){
const _checkedNodes = e.checkedNodes;
const _selectNodes = [];
_checkedNodes.map((item,index)=>{
if(item.userId){
_selectNodes.push(item);
}
})
console.log('_selectNodes',_selectNodes);
props.onSelect(_selectNodes);
}
return (
<div className="member-tree">
<div className="tree-con">
<DirectoryTree
defaultExpandAll
checkable
showIcon={false}
treeData={treeData}
// checkedKeys={_.pluck(props.selectUserList, 'id')}
onCheck={(selectedKeys,e)=>treeSelected(selectedKeys,e)}
titleRender={(nodeData) => {
return (
<div
className="node-title-con"
>
{nodeData.userId ?
<div>
<span className="icon iconfont title-icon">&#xe603;</span>
<span><WWOpenDataCom type="userName" openid={nodeData.userName}/></span>
</div>
:
<div>
<span className="icon iconfont title-icon">&#xe604;</span>
<span><WWOpenDataCom type="departmentName" openid={nodeData.name}/></span>
</div>
}
</div>
);
}}
/>
</div>
</div>
);
}
export default withRouter(MemberTree);
.member-tree{
.node-title-con{
color:#666;
font-size:14px;
.title-icon{
margin-right:8px;
}
}
}
\ No newline at end of file
import React, { useEffect, useState } from "react";
import { withRouter } from "react-router-dom";
import { Button, Input, message,Modal} from "antd";
import LeftStructureTree from "./LeftStructureTree";
import UserTable from "./UserTable";
import "./PostGroupTabCon.less";
const { Search } = Input;
function PostGroupTabCon() {
// const [addOrEditPostGroupShow, setAddOrEditPostGroupShow] = useState(false);
// const [postGroupModalType, setPostGroupModalType] = useState("");
// const [operatePostGroupModalType,setOperatePostGroupModalType] = useState("");
// const [postGroupModalTitle,setPostGroupModalTitle] = useState("");
// const [postGroupModalLable,setPostGroupModalLable] = useState("");
const [postGroupTreeData, setPostGroupTreeData] = useState([]);
// function closeAddOrEditPostGroupModal() {
// setAddOrEditPostGroupShow(false);
// }
// //添加岗位组/岗位
// function addPostGroup(type) {
// if (postGroupTreeData.length === 10) {
// message.error("岗位组数量已达10个上限");
// return;
// }
// setAddOrEditPostGroupShow(true);
// setOperatePostGroupModalType("add");
// if(type==='parentGroup'){
// setPostGroupModalType('parentGroup'); //parentGroup 代表岗位组
// setPostGroupModalTitle('添加岗位组');
// setPostGroupModalLable('岗位组');
// }else{
// setPostGroupModalType('sub');
// setPostGroupModalTitle('添加岗位'); // sub代表岗位
// setPostGroupModalLable('岗位');
// }
// }
// //编辑岗位组/岗位
// function editPostGroup(record){
// setAddOrEditPostGroupShow(true);
// setOperatePostGroupModalType("edit");
// //level为0的时候编辑的是岗位组 大于0的时候
// if(record.level===0){
// setPostGroupModalType('parentGroup');
// setPostGroupModalTitle('编辑岗位组');
// setPostGroupModalLable('岗位组');
// }else{
// setPostGroupModalType('sub');
// setPostGroupModalTitle('编辑岗位');
// setPostGroupModalLable('岗位');
// }
// }
// function delPostGroup(record){
// let title = '确认删除该岗位组吗?';
// let content= '删除后,该岗位组下的岗位及也将全部删除。';
// if(record.level>0){
// title = '确认删除该岗位吗?';
// content = '删除后,不可恢复';
// }
// Modal.confirm({
// title,
// content,
// icon: <span className='icon iconfont default-confirm-icon'>&#xe6f4;</span>,
// okText: '确定',
// okType: 'danger',
// cancelText: '取消',
// onOk: () => {
// },
// });
// }
// function confirmAddOrEditPostGroup() {
// getPostGroupTreeData()
// }
return (
<div className="post-group-tab-con">
{/* <div className="organization">
<div className="search-con">
<Search
placeholder="搜索部门/学员姓名"
className="search search-input"
style={{ width: 245 }}
enterButton={<span className="icon iconfont">&#xe832;</span>}
/>
</div>
<div className="operate">
<Button
className="add-btn"
onClick={() => {
addPostGroup('postGroup');
}}
>
添加岗位组
</Button>
</div>
</div> */}
<LeftStructureTree
treeData={postGroupTreeData}
treeType={"postGrouptab"}
editPostGroup={(record)=>editPostGroup(record)}
addPostGroup={(record)=>addPostGroup(record)}
delPostGroup={(record)=>delPostGroup('record')}
/>
<div className="table-con">
<div className="operate-area">
<Button type="primary" className="add-user-btn">
添加学员
</Button>
<Button className="del-user-btn">移出学员</Button>
</div>
<UserTable />
</div>
{/* {addOrEditPostGroupShow && (
<AddOrEditPostGroupModal
onClose={() => {
closeAddOrEditPostGroupModal();
}}
onConfirm={() => {
confirmAddOrEditPostGroup();
}}
title={postGroupModalTitle}
modalType={postGroupModalType}
modalOperateType={operatePostGroupModalType}
postGroupName={postGroupName}
postGroupTreeData={postGroupTreeData}
label={postGroupModalLable}
/>
)} */}
</div>
);
}
export default withRouter(PostGroupTabCon);
.post-group-tab-con {
display: flex;
.table-con {
margin-left: 16px;
flex: 1;
.operate-area {
margin-bottom: 16px;
.add-user-btn {
margin-right: 8px;
}
.del-user-btn {
margin-right: 8px;
}
.update-user-btn {
margin-right: 8px;
}
.origin-text {
font-size: 14px;
color: #999;
}
.view-text {
font-size: 14px;
color: #5289fa;
}
}
}
}
import React, { useEffect, useState } from "react";
import { withRouter } from "react-router-dom";
import { Input,Checkbox} from "antd";
import StoreService from "@/domains/store-domain/storeService";
import User from '@/common/js/user';
import WWOpenDataCom from '@/components/WWOpenDataCom';
import $ from 'jquery';
import './SearchUser.less'
const { Search } = Input;
function SearchUser(props) {
const [dropDownVisible,setDropDownVisible]=useState(false);
useEffect(()=>{
documentClick();
},[])
function onFocus(e){
setDropDownVisible(true);
}
function onChange(e){
props.onChange(e.target.value)
}
function selectuser(e,item){
if(e.target.checked){
let _record = []
_record.push(item)
props.onSelect(_record)
}
}
function selectDep(e,item){
if(e.target.checked){
props.onSelect(item.departmentUserVOList || []);
}
}
function documentClick(){
document.onclick = function (e) {
let _con =$('#search-user');
if(!_con.is(e.target) && _con.has(e.target).length === 0){
setDropDownVisible(false);
}
};
}
return (
<div className="search-user" style={{width:'300px'}} id="search-user">
<Search
placeholder='搜索成员'
enterButton={<span className="icon iconfont">&#xe832;</span>}
onFocus={(e)=>{onFocus(e)}}
onChange={(e)=>{onChange(e)}}
// onBlur={()=>{onBlur()}}
/>
{dropDownVisible &&
<div className="drop-down" style={{width:'100%'}}>
<div className="drop-down__list">
{props.data.departmentUserVOList &&
<div>
<div className="drop-down__item__title">
员工
</div>
<div className="drop-down__item__con">
<div>
{props.data.departmentUserVOList.map((item,index)=>{
return <div>
<Checkbox onChange={(e)=>{selectuser(e,item)}}>
<div className="drop-down__item__con__item">
<div className="drop-down__item__con__item__left">
<WWOpenDataCom type="userName" openid={item.userName}/>
</div>
<div className="drop-down__item__con__item__right">
{item.postDepNamesList.map((_item,index)=>{
return <span> <WWOpenDataCom type="departmentName" openid={_item}/>{index<(item.postDepNamesList.length -1)?'、':''}</span>
})
}
</div>
</div>
</Checkbox>
</div>
})
}
</div>
</div>
</div>
}
{props.data.departmentVOList &&
<div>
<div className="drop-down__item__title">
部门
</div>
<div className="drop-down__item__con">
<div>
{props.data.departmentVOList.map((item,index)=>{
return <div><Checkbox onChange={(e)=>{selectDep(e,item)}}>
<div className="drop-down__item__con__item">
<div className="drop-down__item__con__item__left">
<WWOpenDataCom type="departmentName" openid={item.name}/>
</div>
</div>
</Checkbox>
</div>
})
}
</div>
</div>
</div>
}
{(!props.data.departmentUserVOList && !props.data.departmentVOList)&&
<div>暂无数据</div>
}
</div>
</div>
}
</div>
);
}
export default withRouter(SearchUser);
.search-user{
position: relative;
.drop-down{
padding:18px;
position: absolute;
background: #FFF;
z-index:100001;
background: #FFFFFF;
box-shadow: 0px 2px 15px 6px rgba(0, 0, 0, 0.05);
border-radius:2px;
.drop-down__item__con__item{
display:flex;
justify-content:space-between;
}
}
}
\ No newline at end of file
import React, { useEffect, useState } from "react";
import { withRouter } from "react-router-dom";
import { XMTable,PageControl} from '@/components';
import college from '@/common/lottie/college.json';
import "./UserTable.less";
function UserTable() {
const [courseList,setCourseList] = useState([]);
const [total, setTotal] = useState(0);
const [query, setQuery] = useState({
current: 0,
size: 10,
});
const columns = [
{
title: '学员',
dataIndex: 'user',
width:220,
render: (val, record) => {
return <span>{val}</span>
}
},
{
title: '真实姓名',
dataIndex: 'nickname',
width:'15%',
render: (val,record) => {
return <span>{val}</span>
}
},
{
title: '账号',
dataIndex: 'account',
width:'15%',
render: (val,record) => {
return <span>{val}</span>
}
},
{
title: '岗位',
dataIndex: 'post',
render: (val, record) => {
return <span>{val}</span>
}
},
{
title: '手机号',
dataIndex: 'phone',
render: (val, record) => {
return <span>{val}</span>;
}
},
{
title: '注册时间',
dataIndex: 'registerTime',
render: (val, record) => {
return <span>{val}</span>;
}
},
{
title: "操作",
key: "operate",
dataIndex: "operate",
render: (val, record) => {
return (
<div className="operate">
<div
className="operate__item"
>
删除
</div>
</div>
)
}
},
];
return (
<div className="user-table">
<XMTable
renderEmpty={{
image: college,
description: '暂无数据',
}}
bordered
size='middle'
pagination={false}
columns={columns}
scroll={{ x: 1300 }}
dataSource={courseList}
/>
<div className='box-footer'>
<PageControl
current={query.current}
pageSize={query.size}
total={total}
toPage={(page) => {
const queryStates = _.clone(query);
queryStates.current = page;
setQuery(queryStates);
}}
/>
</div>
</div>
);
}
export default withRouter(UserTable);
\ No newline at end of file
.user-table{
}
\ No newline at end of file
/*
* @Author: wufan
* @Date: 2020-11-27 16:21:49
* @LastEditors: Please set LastEditors
* @LastEditTime: 2021-08-03 08:39:25
* @Description: Description
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/
import React, { useState, useEffect } from "react";
import { Modal,Form,Input,Button,message} from "antd";
import User from '@/common/js/user';
import StoreService from "@/domains/store-domain/storeService";
import { DepType } from '@/domains/store-domain/constants';
import './AddOrEditPostGroupModal.less'
function AddOrEditPostGroupModal(props) {
const [nameErrorMsg,setNameErrorMsg] = useState('');
const [validateStatus,setValidateStatus] = useState('success');
const [postGroupName,setPostGroupName] = useState('');
useEffect(() => {
},[]);
function changePostGroupName(e){
setValidateStatus('success');
// props.postGroupTreeData.map((item,index)=>{
// if(item.name === e.target.value){
// setValidateStatus('error');
// setNameErrorMsg('该岗位组已存在');
// }
// return item;
// })
setPostGroupName(e.target.value);
}
function handleConfirm(){
if(props.modalOperateType === 'add'){
addGroup();
}else{
editGroup();
}
}
function addGroup(){
const { postGroupModalLevel,currentTab,currentGroupData,label} = props
let parmas={
depLevel:postGroupModalLevel,
depType:DepType[currentTab],
departmentName:postGroupName,
enterpriseId:User.getEnterpriseId(),
source:0,
storeId:User.getStoreId(),
userId:User.getUserId()
}
if(postGroupModalLevel===0){
parmas.parentId = 0;
}else{
parmas.parentId = currentGroupData.id
}
StoreService.addDepartment(parmas).then((res) => {
message.success(`${label}创建成功`)
props.onConfirm();
});
}
function editGroup(){
const {postGroupModalLevel,currentTab,currentGroupData,label} = props
let parmas={
departmentLevel:postGroupModalLevel,
departmentId:currentGroupData.id,
depType:DepType[currentTab],
departmentName:postGroupName,
enterpriseId:User.getEnterpriseId(),
source:0,
storeId:User.getStoreId(),
userId:User.getUserId()
}
if(postGroupModalLevel===0){
parmas.parentId = 0;
}else{
parmas.parentId = currentGroupData.parentId
}
StoreService.editDepartment(parmas).then((res) => {
message.success(`${label}修改成功`)
props.onConfirm();
});
}
return (
<Modal
visible={true}
title={props.title}
className="add-edit-post-group-modal"
onCancel={props.onClose}
width={448}
footer={[
<Button
id='cancel_allot_btn'
key="back" onClick={props.onClose}>取消</Button>,
<Button
id='confirm_allot_btn'
key="submit"
type="primary"
onClick={() => {
handleConfirm()
}}>
保存
</Button>
]}
maskClosable={false}
closeIcon={<span className="icon iconfont modal-close-icon">&#xe6ef;</span>}
>
<Form
labelCol={ {span:5 }}
>
<Form.Item
// label={`${props.label}名称`}
name={`${props.label}名称`}
rules={[{ required: true}]}
validateStatus={validateStatus}
help={nameErrorMsg}
>
<Input type="text" placeholder={`请输入${props.label}名称(8个字以内)`} maxLength={8} style={{ width: 348 }}
defaultValue={props.modalOperateType==='edit'?props.currentGroupData.name:''}
onChange={(e) => {
changePostGroupName(e);
}} />
</Form.Item>
</Form>
</Modal>
);
}
export default AddOrEditPostGroupModal;
...@@ -13,13 +13,13 @@ export default class SetEmployeeModal extends React.Component { ...@@ -13,13 +13,13 @@ export default class SetEmployeeModal extends React.Component {
constructor(props) { constructor(props) {
super(props); super(props);
const list = props.list.map(item => { const list = props.list.map(item => {
item.roleCode = (props.selectObject || {})[item.enterpriseVisibleUserId] || (item.enterpriseRole === 'ADMIN' ? 'Cloud_Manager' : 'Cloud_Lecturer'); item.roleCode = (props.selectObject || {})[item.userId] || (item.enterpriseRole === 'ADMIN' ? 'Cloud_Manager' : 'Cloud_Lecturer');
return item; return item;
}) })
const selectedData = list[0] || {}; const selectedData = list[0] || {};
this.state = { this.state = {
list, list,
selected: selectedData.enterpriseVisibleUserId, selected: selectedData.userId,
roleCode: selectedData.roleCode, roleCode: selectedData.roleCode,
} }
} }
...@@ -27,7 +27,7 @@ export default class SetEmployeeModal extends React.Component { ...@@ -27,7 +27,7 @@ export default class SetEmployeeModal extends React.Component {
handleChangeValues(value) { handleChangeValues(value) {
const { list, selected } = this.state; const { list, selected } = this.state;
list.map((item) => { list.map((item) => {
if (item.enterpriseVisibleUserId === selected) { if (item.userId === selected) {
item.roleCode = value; item.roleCode = value;
} }
}) })
...@@ -62,15 +62,15 @@ export default class SetEmployeeModal extends React.Component { ...@@ -62,15 +62,15 @@ export default class SetEmployeeModal extends React.Component {
<div className="employee-box"> <div className="employee-box">
{list.map((item) => ( {list.map((item) => (
<div <div
className={`item ${selected === item.enterpriseVisibleUserId ? ' selected' : ''}`} className={`item ${selected === item.userId ? ' selected' : ''}`}
key={item.enterpriseVisibleUserId} key={item.userId}
onClick={() => { onClick={() => {
this.setState({ selected: item.enterpriseVisibleUserId, roleCode: item.roleCode }) this.setState({ selected: item.userId, roleCode: item.roleCode })
}} }}
> >
<span className="icon iconfont avatar-icon">&#xe84a;</span> <span className="icon iconfont avatar-icon">&#xe84a;</span>
<Tooltip title={item.name}> <Tooltip title={item.name}>
<span className='name'>{item.name}</span> <span className='name'>{item.userName}</span>
</Tooltip> </Tooltip>
<span className="tag">{tagMap[item.roleCode]}</span> <span className="tag">{tagMap[item.roleCode]}</span>
</div> </div>
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
padding: 24px 60px 60px 40px !important; padding: 24px 60px 60px 40px !important;
} }
.label{ .label{
width:84px; width:100px;
text-align:right; text-align:right;
font-size: 14px; font-size: 14px;
color: #666666; color: #666666;
...@@ -37,10 +37,10 @@ ...@@ -37,10 +37,10 @@
color:#FFF; color:#FFF;
font-size:22px; font-size:22px;
} }
&:hover{ // &:hover{
display: inline-block; // display: inline-block;
opacity:0.5; // opacity:0.5;
} // }
} }
} }
.name-item{ .name-item{
...@@ -58,7 +58,8 @@ ...@@ -58,7 +58,8 @@
} }
} }
.save-btn { .save-btn {
margin-left: 92px; margin-top:20px;
margin-left: 106px;
} }
} }
\ No newline at end of file
/* /*
* @Author: zhangleyuan * @Author: zhangleyuan
* @Date: 2020-11-27 15:06:31 * @Date: 2020-11-27 15:06:31
* @LastEditors: wufan * @LastEditors: Please set LastEditors
* @LastEditTime: 2021-05-28 15:31:06 * @LastEditTime: 2021-08-02 16:35:20
* @Description: 描述一下 * @Description: 描述一下
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有 * @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/ */
...@@ -17,6 +17,7 @@ import IdentificationModal from "./IdentificationModal"; ...@@ -17,6 +17,7 @@ import IdentificationModal from "./IdentificationModal";
import ChangePhoneModal from "./ChangePhoneModal"; import ChangePhoneModal from "./ChangePhoneModal";
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 WWOpenDataCom from '@/components/WWOpenDataCom';
import User from "@/common/js/user"; import User from "@/common/js/user";
import "./index.less"; import "./index.less";
import { XMContext } from "@/store/context"; import { XMContext } from "@/store/context";
...@@ -35,7 +36,7 @@ function PersonalInfoPage() { ...@@ -35,7 +36,7 @@ function PersonalInfoPage() {
const [roleCodes, setRoleCodes] = useState([]); const [roleCodes, setRoleCodes] = useState([]);
const [phone, setPhone] = useState(""); const [phone, setPhone] = useState("");
const [weChatAccount, setWeChatAccount] = useState(""); const [weChatAccount, setWeChatAccount] = useState("");
const [departmentList,setDepartmentList] = useState([]);
const storeUserId = User.getStoreUserId(); const storeUserId = User.getStoreUserId();
const ctx: any = useContext(XMContext); const ctx: any = useContext(XMContext);
const userId = User.getUserId(); const userId = User.getUserId();
...@@ -51,11 +52,12 @@ function PersonalInfoPage() { ...@@ -51,11 +52,12 @@ function PersonalInfoPage() {
storeUserId: User.getStoreUserId(), storeUserId: User.getStoreUserId(),
}; };
BaseService.getStoreUser(param).then((res) => { BaseService.getStoreUser(param).then((res) => {
const { nickName, phone, roleCodes, weChatAccount } = res.result; const { nickName, phone, roleCodes, weChatAccount,depNameList=[]} = res.result;
setNickName(nickName); setNickName(nickName);
setPhone(phone); setPhone(phone);
setRoleCodes(roleCodes); setRoleCodes(roleCodes);
setWeChatAccount(weChatAccount); setWeChatAccount(weChatAccount);
setDepartmentList(depNameList)
if (res.result.avatar) { if (res.result.avatar) {
setAvatar(res.result.avatar); setAvatar(res.result.avatar);
} }
...@@ -122,7 +124,6 @@ function PersonalInfoPage() { ...@@ -122,7 +124,6 @@ function PersonalInfoPage() {
setPhone(phone); setPhone(phone);
} }
console.log('User.getStoreType()',User.getStoreType());
return ( return (
<div className="page personal-info-page"> <div className="page personal-info-page">
<div className="content-header">个人设置</div> <div className="content-header">个人设置</div>
...@@ -130,18 +131,7 @@ console.log('User.getStoreType()',User.getStoreType()); ...@@ -130,18 +131,7 @@ console.log('User.getStoreType()',User.getStoreType());
<Form> <Form>
<div className="avatat-item"> <div className="avatat-item">
<span className="label">头像:</span> <span className="label">头像:</span>
<input
type="file"
accept="image/*"
value={""}
id="CrpperAvatarPic"
style={{ display: "none" }}
onChange={_handleUpdateAvatar}
/>
<img className="avatar" src={avatar}></img> <img className="avatar" src={avatar}></img>
<span className="avatar-cover" onClick={_onUpload}>
<span className="icon iconfont pen">&#xe82c;</span>
</span>
{cropperModalVisible && ( {cropperModalVisible && (
<CropperModal <CropperModal
imgUrl={imgUrl} imgUrl={imgUrl}
...@@ -162,9 +152,13 @@ console.log('User.getStoreType()',User.getStoreType()); ...@@ -162,9 +152,13 @@ console.log('User.getStoreType()',User.getStoreType());
}} }}
/> />
</div> </div>
<div className="phone-item">
<span className="label">企业微信姓名:</span>
<span><WWOpenDataCom type="userName" openid={weChatAccount}/></span>
</div>
{isWorkWechat ? ( {isWorkWechat ? (
<div className="phone-item"> <div className="phone-item">
<span className="label">企业微信号:</span> <span className="label">企业微信号:</span>
<span>{weChatAccount}</span> <span>{weChatAccount}</span>
</div> </div>
) : ( ) : (
...@@ -181,6 +175,12 @@ console.log('User.getStoreType()',User.getStoreType()); ...@@ -181,6 +175,12 @@ console.log('User.getStoreType()',User.getStoreType());
</Button> </Button>
</div> </div>
)} )}
<div>
<span className="label">所在部门:</span>
{departmentList.map((item,index)=>{
return <span>{item}{index<departmentList.length-1?'、':''}</span>
})}
</div>
<div className="save-btn"> <div className="save-btn">
<Button <Button
type="primary" type="primary"
......
/* /*
* @Author: zhangleyuan * @Author: zhangleyuan
* @Date: 2021-02-20 16:46:46 * @Date: 2021-02-20 16:46:46
* @LastEditors: yuananting * @LastEditors: Please set LastEditors
* @LastEditTime: 2021-07-18 16:58:52 * @LastEditTime: 2021-08-03 14:32:03
* @Description: 描述一下 * @Description: 描述一下
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有 * @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/ */
......
...@@ -6,6 +6,7 @@ import User from "@/common/js/user"; ...@@ -6,6 +6,7 @@ import User from "@/common/js/user";
import { LIVE_SHARE } from "@/domains/course-domain/constants"; import { LIVE_SHARE } from "@/domains/course-domain/constants";
import { Modal, message } from 'antd'; import { Modal, message } from 'antd';
import { brandLogo } from '@/domains/brand/constants' import { brandLogo } from '@/domains/brand/constants'
import WWOpenDataCom from '@/components/WWOpenDataCom';
import './CollegeManagePage.less'; import './CollegeManagePage.less';
import storage from '@/common/js/storage'; import storage from '@/common/js/storage';
...@@ -223,9 +224,10 @@ export default class CollegeManagePage extends React.Component { ...@@ -223,9 +224,10 @@ export default class CollegeManagePage extends React.Component {
User.removeUserId(); User.removeUserId();
User.removeToken(); User.removeToken();
User.removeEnterpriseId(); User.removeEnterpriseId();
User.clearUserInfo(); window.RCHistory.replace('/login');
const htmlUrl = `${LIVE_SHARE}store/index?id=${User.getCustomerStoreId() || User.getStoreId()}&userId=${User.getUserId()}&from=work_weixin`; // User.clearUserInfo();
window.location.href = htmlUrl; // const htmlUrl = `${LIVE_SHARE}store/index?id=${User.getCustomerStoreId()||User.getStoreId()}&userId=${User.getUserId()}&from=work_weixin`;
// window.location.href = htmlUrl;
}); });
} }
...@@ -246,7 +248,10 @@ export default class CollegeManagePage extends React.Component { ...@@ -246,7 +248,10 @@ export default class CollegeManagePage extends React.Component {
<img className="box-image" src={brandLogo} /> <img className="box-image" src={brandLogo} />
<div className="user"> <div className="user">
<img className="image" src={avatar} /> <img className="image" src={avatar} />
<span className="name">{name}</span> <span className="name">
{/* {name} */}
<WWOpenDataCom type="userName" openid={name}/>
</span>
<span <span
className="logout" className="logout"
onClick={() => { onClick={() => {
...@@ -270,7 +275,9 @@ export default class CollegeManagePage extends React.Component { ...@@ -270,7 +275,9 @@ export default class CollegeManagePage extends React.Component {
<div className="college-box"> <div className="college-box">
<div className="user"> <div className="user">
<img className="image" src={avatar} /> <img className="image" src={avatar} />
<span className="name">{name}</span> <span className="name">
<WWOpenDataCom type="userName" openid={name}/>
</span>
</div> </div>
<div> <div>
<div className="title-box"> <div className="title-box">
......
...@@ -71,9 +71,10 @@ export default class ErrorCollege extends React.Component { ...@@ -71,9 +71,10 @@ export default class ErrorCollege extends React.Component {
User.removeUserId(); User.removeUserId();
User.removeToken(); User.removeToken();
User.removeEnterpriseId(); User.removeEnterpriseId();
User.clearUserInfo(); window.RCHistory.replace('/login');
const url = `${LIVE_SHARE}store/index?id=${User.getCustomerStoreId()||User.getStoreId()}&userId=${User.getUserId()}&from=work_weixin`; // User.clearUserInfo();
window.location.href = url; // const url = `${LIVE_SHARE}store/index?id=${User.getCustomerStoreId()||User.getStoreId()}&userId=${User.getUserId()}&from=work_weixin`;
// window.location.href = url;
}); });
} }
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: 吴文洁 * @Author: 吴文洁
* @Date: 2019-09-10 18:26:03 * @Date: 2019-09-10 18:26:03
* @LastEditors: Please set LastEditors * @LastEditors: Please set LastEditors
* @LastEditTime: 2021-07-20 17:39:52 * @LastEditTime: 2021-08-03 14:32:31
* @Description: * @Description:
*/ */
import React, { useRef, useContext, useEffect, useState } from 'react'; import React, { useRef, useContext, useEffect, useState } from 'react';
...@@ -19,6 +19,7 @@ import CourseService from '@/domains/course-domain/CourseService'; ...@@ -19,6 +19,7 @@ import CourseService from '@/domains/course-domain/CourseService';
import qrcode from '@/libs/qrcode/qrcode.js'; import qrcode from '@/libs/qrcode/qrcode.js';
import Bus from '@/core/tbus'; import Bus from '@/core/tbus';
import ClickOutside from '../../components/ClickOutside'; import ClickOutside from '../../components/ClickOutside';
import WWOpenDataCom from '@/components/WWOpenDataCom';
import _ from 'underscore'; import _ from 'underscore';
const baseImg = 'https://image.xiaomaiketang.com/xm/rJeQaZxtc7.png'; const baseImg = 'https://image.xiaomaiketang.com/xm/rJeQaZxtc7.png';
...@@ -134,7 +135,9 @@ function Header(props) { ...@@ -134,7 +135,9 @@ function Header(props) {
<div className='user-detail'> <div className='user-detail'>
<div className='box'> <div className='box'>
<Tooltip title={nickName}> <Tooltip title={nickName}>
<div className='name'>{nickName}</div> <div className='name'>
<WWOpenDataCom type="userName" openid={nickName}/>
</div>
</Tooltip> </Tooltip>
<span className='phone'>{phone}</span> <span className='phone'>{phone}</span>
</div> </div>
...@@ -201,9 +204,10 @@ function Header(props) { ...@@ -201,9 +204,10 @@ function Header(props) {
User.removeUserId(); User.removeUserId();
User.removeToken(); User.removeToken();
User.removeEnterpriseId(); User.removeEnterpriseId();
User.clearUserInfo(); window.RCHistory.replace('/login');
const url = `${LIVE_SHARE}store/index?id=${User.getCustomerStoreId() || User.getStoreId()}&userId=${User.getUserId()}&from=work_weixin`; // User.clearUserInfo();
window.location.href = url; // const url = `${LIVE_SHARE}store/index?id=${User.getCustomerStoreId() || User.getStoreId()}&userId=${User.getUserId()}&from=work_weixin`;
// window.location.href = url;
}); });
} }
...@@ -374,7 +378,9 @@ function Header(props) { ...@@ -374,7 +378,9 @@ function Header(props) {
}} }}
src={avatar || baseImg} src={avatar || baseImg}
/> />
<span className='name'>{nickName}</span> <span className='name'>
<WWOpenDataCom type="userName" openid={nickName}/>
</span>
</div> </div>
</Dropdown> </Dropdown>
</div> </div>
......
/* /*
* @Author: 吴文洁 * @Author: 吴文洁
* @Date: 2020-04-29 10:26:32 * @Date: 2020-04-29 10:26:32
* @LastEditors: wufan * @LastEditors: Please set LastEditors
* @LastEditTime: 2021-05-13 16:39:51 * @LastEditTime: 2021-08-03 14:34:27
* @Description: 内容线路由配置 * @Description: 内容线路由配置
*/ */
import Home from '@/modules/home/Home' import Home from '@/modules/home/Home';
import EmployeesManagePage from '@/modules/store-manage/EmployeesManagePage' import EmployeesManagePage from '@/modules/store-manage/EmployeesManagePage';
import EmployeeManage from '@/modules/college-manage/EmployeeManage' import EmployeeManage from '@/modules/college-manage/EmployeeManage';
import personalInfoPage from '@/modules/personalInfo' import personalInfoPage from '@/modules/personalInfo';
import UserManagePage from '@/modules/store-manage/UserManagePage' import UserManagePage from '@/modules/store-manage/UserManagePage';
import UserManage from '@/modules/college-manage/UserManagePage' import UserManage from '@/modules/college-manage/NewUsersManagePage';
import StoreDecorationPage from '@/modules/store-manage/StoreDecorationPage' import StoreDecorationPage from '@/modules/store-manage/StoreDecorationPage';
import CourseCatalogPage from '@/modules/store-manage/CourseCatalogPage' import CourseCatalogPage from '@/modules/store-manage/CourseCatalogPage';
import LiveCoursePage from '@/modules/course-manage/LiveCoursePage' import LiveCoursePage from '@/modules/course-manage/LiveCoursePage';
import AddLivePage from '@/modules/course-manage/AddLive' import AddLivePage from '@/modules/course-manage/AddLive';
import VideoCoursePage from '@/modules/course-manage/video-course' import VideoCoursePage from '@/modules/course-manage/video-course';
import GraphicsCoursePage from '@/modules/course-manage/graphics-course' import GraphicsCoursePage from '@/modules/course-manage/graphics-course';
import OfflineCoursePage from '@/modules/course-manage/offline-course' import OfflineCoursePage from '@/modules/course-manage/offline-course';
import AddVideoCoursePage from '@/modules/course-manage/video-course/AddVideoCourse' import AddVideoCoursePage from '@/modules/course-manage/video-course/AddVideoCourse';
import AddGraphicsCoursePage from '@/modules/course-manage/graphics-course/AddGraphicsCourse' import AddGraphicsCoursePage from '@/modules/course-manage/graphics-course/AddGraphicsCourse';
import AddOfflineCoursePage from '@/modules/course-manage/offline-course/AddOfflineCourse' import AddOfflineCoursePage from '@/modules/course-manage/offline-course/AddOfflineCourse';
// import DataList from '@/modules/course-manage/DataList/DataList'; // import DataList from '@/modules/course-manage/DataList/DataList';
// import ClassBook from '@/modules/resource-disk'; // import ClassBook from '@/modules/resource-disk';
import ResourceDisk from '@/modules/resource-disk' import ResourceDisk from '@/modules/resource-disk'
......
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