Commit 465ae2c3 by chenshu

feat:接入权限

parent a1745984
......@@ -16,6 +16,10 @@ class User {
return Storage.get(`${PREFIX}_storeId`)
}
getEnterpriseId() {
return Storage.get(`${PREFIX}_enterpriseId`)
}
getStoreName(){
return Storage.get(`${PREFIX}_storeName`)
}
......@@ -39,10 +43,18 @@ class User {
return Storage.get(`${PREFIX}_token`);
}
getIsAdmin() {
return Storage.get(`${PREFIX}_isAdmin`);
}
setStoreId(value:any){
return Storage.set(`${PREFIX}_storeId`,value)
}
setEnterpriseId(value: any) {
return Storage.set(`${PREFIX}_enterpriseId`,value)
}
setStoreName(value:any){
return Storage.set(`${PREFIX}_storeName`,value)
}
......@@ -66,12 +78,22 @@ class User {
setToken(value:any) {
return Storage.set(`${PREFIX}_token`,value);
}
setIsAdmin(value: any) {
return Storage.set(`${PREFIX}_isAdmin`, value);
}
removeToken(){
return Storage.remove(`${PREFIX}_token`);
}
removeUserId(){
return Storage.remove(`${PREFIX}_userId`);
}
removeEnterpriseId() {
return Storage.remove(`${PREFIX}_enterpriseId`)
}
}
export default new User();
\ No newline at end of file
......@@ -41,6 +41,9 @@ export function editUserPhone(params: object) {
export function getLastedVersion(params: object) {
return Service.Hades("public/hades/getLastedVersion", params);
}
export function getEnterpriseUser(params: object) {
return Service.Hades('public/hades/getEnterpriseUser', params);
}
export const getOssClient = (
data: object,
instId: string,
......
......@@ -7,7 +7,7 @@
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/
import { getUserStore, getUserPermission ,logout,getStoreUser,sendBizAuthCode,editUserPhone,checkBizAuthCode,sendNewPhoneAuthCode,sendLoginAuthCode,login,getLastedVersion} from '@/data-source/base/request-apis';
import { getUserStore, getUserPermission ,logout,getStoreUser,sendBizAuthCode,editUserPhone,checkBizAuthCode,sendNewPhoneAuthCode,sendLoginAuthCode,login,getLastedVersion, getEnterpriseUser } from '@/data-source/base/request-apis';
export default class StoreService {
// 获取员工列表
......@@ -49,4 +49,7 @@ export default class StoreService {
static getLastedVersion(params: any){
return getLastedVersion(params);
}
static getEnterpriseUser(params: any){
return getEnterpriseUser(params);
}
}
\ No newline at end of file
......@@ -58,12 +58,13 @@ function isWeiXin() {
console.log(isWeiXin(), 'isWeiXin()')
if (getParameterByName('code') && isWeiXin()) {
Service.Hades('anon/hades/wXWorkUserLogin', {
Service.Hades('anon/hades/wXWorkLogin', {
appTermEnum: 'XIAOMAI_CLOUD_CLASS_PC_WEB_ADMIN',
code: getParameterByName('code')
}).then((res) => {
User.setUserId(res.result.loginInfo.userId);
User.setToken(res.result.loginInfo.xmToken);
User.setEnterpriseId(res.result.enterpriseId);
mount()
})
} else {
......
......@@ -16,26 +16,7 @@ export default class CollegeInfoPage extends React.Component {
avatar,
} = this.state;
return (
<div className="college-manage-page">
<div className="college-header">
<div className="box">
<img className="box-image" src="https://image.xiaomaiketang.com/xm/HNHCAF6Fc2.png" />
<div className="user">
<img className="image" src={avatar} />
<span className="name">Xiaomai</span>
<span className="logout">退出</span>
</div>
</div>
</div>
<div className="create-box">
<img className="image" src="https://image.xiaomaiketang.com/xm/HNHCAF6Fc2.png" />
<span className="tip">建议尺寸702*180px,JPG/PNG格式,图片小于2M。</span>
<Input className="input" placeholder="请输入学院名称"></Input>
<Button
className="button"
type="primary"
>确定创建</Button>
</div>
<div className="college-info-page">
</div>
)
}
......
.college-info-page {
}
\ No newline at end of file
import React from 'react';
import { Input, Button } from 'antd';
import { Input, Button, Modal, message } from 'antd';
import Upload from '@/core/upload';
import SelectPrepareFileModal from '@/modules/prepare-lesson/modal/SelectPrepareFileModal';
import './CreateCollege.less';
let cutFlag = false;
export default class CreateCollege extends React.Component {
constructor(props) {
super(props);
this.state = {
avatar: 'https://image.xiaomaiketang.com/xm/rJeQaZxtc7.png',
logo: 'https://image.xiaomaiketang.com/xm/HNHCAF6Fc2.png',
name: '',
};
}
handleSelectCover = (file)=> {
this.uploadImage(file);
}
//上传图片
uploadImage = (imageFile) => {
const { folderName } = imageFile;
const fileName = window.random_string(16) + folderName.slice(folderName.lastIndexOf("."));
const self = this;
this.setState(
{
visible: true,
},
() => {
setTimeout(() => {
const okBtnDom = document.querySelector("#headPicModal");
const options = {
size: [500, 282],
ok: okBtnDom,
maxZoom: 3,
style: {
jpgFillColor: "transparent",
},
done: function (dataUrl) {
clearTimeout(self.timer);
self.timer = setTimeout(() => {
if ((self.state.rotate != this.rotate()) || (self.state.scale != this.scale())) {
console.log(this.scale(), 'scale')
const _dataUrl = this.clip()
const cutImageBlob = self.convertBase64UrlToBlob(_dataUrl);
self.setState({
cutImageBlob,
dataUrl: _dataUrl,
rotate: this.rotate(),
scale: this.scale()
})
}
}, 500)
const cutImageBlob = self.convertBase64UrlToBlob(dataUrl);
self.setState({
cutImageBlob,
dataUrl
})
setTimeout(() => {
cutFlag = false;
}, 2000);
},
fail: (failInfo) => {
message.error("图片上传失败了,请重新上传");
},
loadComplete: function (img) {
setTimeout(() => {
const _dataUrl = this.clip()
self.setState({
dataUrl: _dataUrl,
hasImgReady: true
})
}, 100)
},
};
const imgUrl = `${imageFile.ossUrl}?${new Date().getTime()}`
if (!this.state.photoclip) {
const _photoclip = new PhotoClip("#headPicModal", options);
_photoclip.load(imgUrl);
this.setState({
photoclip: _photoclip,
});
} else {
this.state.photoclip.clear();
this.state.photoclip.load(imgUrl);
}
}, 200);
}
);
};
// base64转换成blob
convertBase64UrlToBlob = (urlData) => {
const bytes = window.atob(urlData.split(",")[1]);
const ab = new ArrayBuffer(bytes.length);
const ia = new Uint8Array(ab);
for (let i = 0; i < bytes.length; i++) {
ia[i] = bytes.charCodeAt(i);
}
return new Blob([ab], { type: "image/png" });
};
//获取resourceId
getSignature = (blob, fileName) => {
Upload.uploadBlobToOSS(blob, 'cover' + (new Date()).valueOf(),null,'signInfo').then((signInfo) => {
this.setState({
coverClicpPath:signInfo.fileUrl,
coverId:signInfo.resourceId,
visible: false
},()=>this.updateCover())
});
};
updateCover = () =>{
const {coverClicpPath,coverId} = this.state
this.setState({
showSelectFileModal: false
})
this.setState({
logo:coverClicpPath
})
}
render() {
const {
avatar,
logo,
showSelectFileModal,
visible,
hasImgReady,
cutImageBlob,
} = this.state;
return (
<div className="college-manage-page">
......@@ -28,7 +151,9 @@ export default class CreateCollege extends React.Component {
</div>
</div>
<div className="create-box">
<img className="image" src="https://image.xiaomaiketang.com/xm/HNHCAF6Fc2.png" />
<div className="image-box" onClick={() => {this.setState({ showSelectFileModal:true })}}>
<img className="image" src={logo} />
</div>
<span className="tip">建议尺寸702*180px,JPG/PNG格式,图片小于2M。</span>
<Input className="input" placeholder="请输入学院名称"></Input>
<Button
......@@ -36,6 +161,77 @@ export default class CreateCollege extends React.Component {
type="primary"
>确定创建</Button>
</div>
{showSelectFileModal &&
<SelectPrepareFileModal
key="basic"
operateType="select"
multiple={false}
accept="image/jpeg,image/png,image/jpg"
selectTypeList={['JPG', 'JPEG', 'PNG']}
tooltip='支持文件类型:jpg、jpeg、png'
isOpen={showSelectFileModal}
onClose={() => {
this.setState({
showSelectFileModal:false
})
}}
onSelect={this.handleSelectCover}
/>
}
<Modal
title="设置图片"
width={1080}
visible={visible}
maskClosable={false}
closeIcon={<span className="icon iconfont modal-close-icon">&#xe6ef;</span>}
onCancel={() => {
this.setState({ visible: false });
}}
zIndex={10001}
footer={[
<Button
key="back"
onClick={() => {
this.setState({ visible: false });
}}
>
重新上传
</Button>,
<Button
key="submit"
type="primary"
disabled={!hasImgReady}
onClick={() => {
if (!cutFlag) {
cutFlag = true;
this.refs.hiddenBtn.click();
}
this.getSignature(cutImageBlob);
}}
>
确定
</Button>,
]}
>
<div className="clip-box">
<div
id="headPicModal"
ref="headPicModal"
style={{
width: "500px",
height: "430px",
marginBottom: 0,
}}
></div>
<div id="clipBtn" style={{ display: "none" }} ref="hiddenBtn"></div>
<div className="preview-img">
<div className="title">效果预览</div>
<div id="preview-url-box" style={{width:500,height:282}}>
<img src={this.state.dataUrl} style={{ width: '100%' }} alt="" />
</div>
</div>
</div>
</Modal>
</div>
)
}
......
......@@ -3,12 +3,17 @@
padding-top: 108px;
margin: 0 auto;
width: 350px;
.image {
.image-box {
display: block;
border: 1px dashed #E9E9E9;
width: 312px;
height: 73px;
margin: 0 auto 16px;
.image {
width: 100%;
height: 100%;
object-fit: contain;
}
}
.tip {
display: block;
......
......@@ -28,6 +28,7 @@ function Header(props) {
const ctx = useContext(XMContext);
const htmlUrl = `${LIVE_SHARE}store/index?id=${User.getStoreId()}&userId=${User.getUserId()}&from=work_weixin`;
const storeUserId = User.getStoreUserId();
const enterpriseId = User.getEnterpriseId();
useEffect(() => {
htmlUrl && handleConvertShortUrl();
......@@ -38,6 +39,7 @@ function Header(props) {
useEffect(() => {
storeUserId && getUserInfo();
enterpriseId ? getEnterpriseUser() : User.setIsAdmin(false);
}, [storeUserId]);
function getUserInfo() {
......@@ -51,6 +53,17 @@ function Header(props) {
});
}
function getEnterpriseUser() {
const params = {
enterpriseId,
userId: User.getUserId(),
}
BaseService.getEnterpriseUser(params).then((res) => {
const { isAdmin } = res.result;
User.setIsAdmin(isAdmin);
});
}
function userMenu() {
return (
<div className="user-center-dropdown">
......@@ -64,19 +77,21 @@ function Header(props) {
</div>
</div>
<div className="menu">
<div
className="menu-item"
key="1"
onClick={() => {
window.RCHistory.push({
pathname: '/college-manage',
});
}}
>
<span className="menu-before iconfont icon">&#xe84e;</span>
<span>进入管理后台</span>
<span className="menu-after iconfont icon">&#xe79b;</span>
</div>
{User.getIsAdmin() === 'true' &&
<div
className="menu-item"
key="1"
onClick={() => {
window.RCHistory.push({
pathname: '/college-manage',
});
}}
>
<span className="menu-before iconfont icon">&#xe84e;</span>
<span>进入管理后台</span>
<span className="menu-after iconfont icon">&#xe79b;</span>
</div>
}
<div
className="menu-item"
key="2"
......@@ -122,6 +137,7 @@ function Header(props) {
BaseService.logout({}).then((res) => {
User.removeUserId();
User.removeToken();
User.removeEnterpriseId();
window.RCHistory.push({
pathname: `/login`,
});
......
......@@ -534,7 +534,6 @@
.user-center-dropdown {
background: #fff;
width: 274px;
height: 184px;
border-radius: 4px;
padding: 12px 16px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
......
......@@ -71,6 +71,7 @@ export default function WechatLogin(props: any) {
}).then((_res: any) => {
User.setUserId(_res.result.loginInfo.userId);
User.setToken(_res.result.loginInfo.xmToken);
User.setEnterpriseId(res.result.enterpriseId);
window.RCHistory.push({
pathname: `/switch-route`,
})
......
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