Commit 4f7b835a by guomingpang

fix:微信审核合并dev,解决冒烟

parents 1e7dbc37 e6623f8c
......@@ -75,6 +75,19 @@ export function updateStoreMessage(params: object) {
export function getStoreDetail(params: object) {
return Service.Hades("public/hades/getStoreDetail", params);
}
export function getCustomerAuditList(params: object){
return Service.Hades('public/hades/getCustomerAuditList',params);
}
export function getCustomerAuditListCount(params: object){
return Service.Hades('public/hades/getCustomerAuditCount',params);
}
export function auditOperation(params: object){
return Service.Hades('public/hades/auditOperation',params);
}
export function getByDepartmentId(params: object) {
return Service.Hades("public/hades/getByDepartmentId", params);
}
......
......@@ -9,7 +9,7 @@
import { getEmployeeList, getUserList, getStoreDecorationList, getStoreRole, addEmployee, editEmployee, deleteEmployee, getCourseCatalogList,
getAllSonCategory, addCourseCategory, delCourseCategory, editCourseCategory, deleteStoreDecorationList, addStoreBanner, editStoreBanner,
moveBannerSequence,getStoreUserBasicPage,updateStoreMessage,getStoreDetail,getByDepartmentId,getDepartmentUser,getDepartmentUserNotPage,addDepartment,
editDepartment,delDepartment,queryDepartmentTree,getStoreCustomerAndDepNamePage,delDepartmentUser,syncWorkWeChatDepartment,getSyncCount
editDepartment,delDepartment,queryDepartmentTree,getStoreCustomerAndDepNamePage,delDepartmentUser,syncWorkWeChatDepartment,getSyncCount,getCustomerAuditList,auditOperation,getCustomerAuditListCount
} from '@/data-source/store/request-apis';
export default class StoreService {
......@@ -91,6 +91,20 @@ export default class StoreService {
static getStoreDetail(params: any) {
return getStoreDetail(params);
}
// 获取微信学员审核列表
static getCustomerAuditList(params: any){
return getCustomerAuditList(params)
}
// 获取微信学员审核列表数量
static getCustomerAuditListCount(params: any){
return getCustomerAuditListCount(params)
}
//微信学员审核操作
static auditOperation(params: any){
return auditOperation(params)
}
static getByDepartmentId(params:any){
return getByDepartmentId(params);
}
......
import React from 'react';
import { withRouter } from "react-router-dom";
import { Form, Input, Button, Modal, message} from 'antd';
import { withRouter } from 'react-router-dom';
import { Form, Input, Button, Modal,Switch, message } from 'antd';
import SelectPrepareFileModal from '@/modules/prepare-lesson/modal/SelectPrepareFileModal';
import Upload from '@/core/upload';
import StoreService from "@/domains/store-domain/storeService";
import User from "@/common/js/user";
import StoreService from '@/domains/store-domain/storeService';
import User from '@/common/js/user';
import Bus from '@/core/tbus';
import ImgClipModal from '@/components/ImgClipModal'
import "./CollegeInfoPage.less";
let cutFlag = false;
import ImgClipModal from '@/components/ImgClipModal';
import './CollegeInfoPage.less';
class CollegeInfoPage extends React.Component {
formRef = React.createRef();
constructor(props) {
super(props);
this.state = {
storeName:null,
logo:'',
showSelectFileModal:false,
storeName: null,
logo: '',
showSelectFileModal: false,
cutImageBlob: null,
imageFile: null, // 需要被截取的图片
}
auditSwitch:"OPEN",
};
}
componentWillMount() {
if (User.getEnterpriseId()) {
this.getStoreDetail()
this.getStoreDetail();
} else {
window.RCHistory.replace('/store-info')
window.RCHistory.replace('/store-info');
}
}
getStoreDetail = ()=>{
const params= {
storeId:User.getStoreId()
}
getStoreDetail = () => {
const params = {
storeId: User.getStoreId(),
};
StoreService.getStoreDetail(params).then((res) => {
const { result = { } } = res;
const {
storeName,
logo
} = result;
const { result = {} } = res;
const { storeName, logo,auditSwitch } = result;
this.formRef.current.setFieldsValue({
storeName:storeName
storeName: storeName,
});
this.setState({
storeName,
logo
})
auditSwitch,
logo,
});
});
}
onChangeFiledValue=(filed,value)=>{
};
onChangeFiledValue = (filed, value) => {
console.log(filed, value)
this.setState({
[filed]:value
})
}
handleSelectCover = (file)=> {
[filed]: value,
});
};
handleSelectCover = (file) => {
this.setState({
visible: true,
imageFile:file
imageFile: file,
});
}
};
//获取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())
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
updateCover = () => {
const { coverClicpPath, coverId } = this.state;
this.setState({
showSelectFileModal: false
})
showSelectFileModal: false,
});
this.setState({
logo:coverClicpPath
})
}
logo: coverClicpPath,
});
};
updateInfo=()=>{
const { storeName, logo } = this.state;
if(!storeName){
updateInfo = () => {
const { storeName, logo, auditSwitch
} = this.state;
if (!storeName) {
message.warning('请输入学院名称');
return;
return;
}
const params= {
const params = {
storeName,
logo,
storeId:User.getStoreId()
}
storeId: User.getStoreId(),
auditSwitch
};
StoreService.updateStoreMessage(params).then((res) => {
User.setStoreName(storeName);
Bus.trigger('storeNameChange',storeName);
Bus.trigger('storeNameChange', storeName);
message.success('保存成功');
Bus.trigger("updateCollegeInfo")
Bus.trigger('updateCollegeInfo');
});
}
};
render() {
const {
storeName,
showSelectFileModal,
visible,
hasImgReady,
logo,
cutImageBlob,
imageFile
} = this.state;
const { storeName, showSelectFileModal, visible, logo, imageFile,auditSwitch } = this.state;
return (
<div className="page college-info-page">
<div className="content-header">学院信息</div>
<div className="box">
<div className="college-info-page-form">
<div className='page college-info-page'>
<div className='content-header'>学院信息</div>
<div className='box'>
<div className='college-info-page-form'>
<Form ref={this.formRef}>
<Form.Item
label="学院LOGO"
>
<div className="logo-con">
<div className="logo-img-con">
{ logo ? <img src={logo} className="logo-img"/> : <div className="logo-box"><span className="text">Logo</span></div>}
<div className='title'>基本信息</div>
<Form.Item label='学院LOGO'>
<div className='logo-con'>
<div className='logo-img-con'>
<Choose>
<When condition={logo}>
<img src={logo} className='logo-img' alt=''/>
</When>
<Otherwise>
<div className='logo-box'>
<span className='text'>Logo</span>
</div>
</Otherwise>
</Choose>
</div>
<div className="upload-box">
<span onClick={() => {this.setState({ showSelectFileModal:true })}} className="upload-btn">
<div className='upload-box'>
<span
onClick={() => {
this.setState({ showSelectFileModal: true });
}}
className='upload-btn'>
<span>上传</span>
</span>
<div className="tip">建议尺寸702*180px。最大2M,支持jpg、jpeg和png。</div>
</div>
<div className='tip'>建议尺寸702*180px。最大2M,支持jpg、jpeg和png。</div>
</div>
</div>
</Form.Item>
<Form.Item
label="学院名称"
name="storeName"
rules={[{ required: true}]}
>
<Form.Item label='学院名称' name='storeName' rules={[{ required: true }]}>
<Input
value={storeName}
style={{ width: '300px' }}
placeholder="请输入学院名称"
onChange={(e) => this.onChangeFiledValue("storeName", e.target.value)}
placeholder='请输入学院名称'
onChange={(e) => this.onChangeFiledValue('storeName', e.target.value)}
maxLength={30}
/>
</Form.Item>
<div className='title mt40'>高级设置</div>
<Form.Item label='学员审核' name='storeName' rules={[{ required: true }]}>
<div className='switch-box'>
<Switch checked={auditSwitch ==='OPEN' } onChange={(e) => this.onChangeFiledValue('auditSwitch', e ?'OPEN':'CLOSE')}/>
<Choose>
<When condition={auditSwitch ==='OPEN'}>
<div className='switch-desc'>已开启,成为学院学员需要审核</div>
<div className='switch-prew-link'>功能预览</div>
</When>
<Otherwise>
<div className='switch-desc'>已关闭,成为学院学员不需要审核</div>
</Otherwise>
</Choose>
</div>
</Form.Item>
</Form>
</div>
{showSelectFileModal &&
{showSelectFileModal && (
<SelectPrepareFileModal
key="basic"
operateType="select"
key='basic'
operateType='select'
multiple={false}
accept="image/jpeg,image/png,image/jpg"
accept='image/jpeg,image/png,image/jpg'
selectTypeList={['JPG', 'JPEG', 'PNG']}
tooltip='支持文件类型:jpg、jpeg、png'
isOpen={showSelectFileModal}
onClose={() => {
this.setState({
showSelectFileModal:false
})
showSelectFileModal: false,
});
}}
onSelect={this.handleSelectCover}
/>
}
{ visible &&
<ImgClipModal visible={visible} imgUrl={imageFile.ossUrl} aspectRatio='125/32' cropBoxHeight='128' onConfirm={this.getSignature} onClose={()=>{this.setState({ visible: false });}}/>
}
<div><Button type="primary" onClick={this.updateInfo} htmlType="submit" className="submit-btn">更新信息</Button></div>
)}
{visible && (
<ImgClipModal
visible={visible}
imgUrl={imageFile.ossUrl}
aspectRatio='125/32'
cropBoxHeight='128'
onConfirm={this.getSignature}
onClose={() => {
this.setState({ visible: false });
}}
/>
)}
<div>
<Button type='primary' onClick={this.updateInfo} htmlType='submit' className='submit-btn'>
保存设置
</Button>
</div>
</div>
</div>
)
);
}
}
export default withRouter(CollegeInfoPage);
\ No newline at end of file
export default withRouter(CollegeInfoPage);
......@@ -13,7 +13,14 @@
font-size:14px;
}
.college-info-page-form{
margin-left:29px;
margin-left:20px;
.title{
font-size: 16px;
color: #333;
font-weight: 500;
margin-left: -20px;
margin-bottom: 20px;
}
.logo-con{
.logo-img-con{
width: 258px;
......@@ -58,10 +65,24 @@
}
}
}
.switch-box{
display: flex;
align-items: center;
.switch-desc{
color: #999;
font-size: 14px;
margin: 0 8px;
}
.switch-prew-link{
color: #2966FF;
font-size: 14px;
}
}
}
.submit-btn{
margin-left:142px;
margin-left:132px;
margin-top: 20px;
}
}
\ No newline at end of file
......@@ -8,27 +8,50 @@
*/
import React, { useEffect, useState } from "react";
import { withRouter } from "react-router-dom";
import { Route,withRouter } from "react-router-dom";
import StoreService from "@/domains/store-domain/storeService";
import _ from "underscore";
import {Tabs,Input,Tree,Button} from "antd";
import User from "@/common/js/user";
import {Tabs} from "antd";
import DepartMentTabCon from './components/DepartMentTabCon';
import WechatUserAudit from './WechatUserAudit/WechatUserAudit'
import "./NewUsersManagePage.less";
const { TabPane } = Tabs;
function UserManagePage() {
function UserManagePage(props) {
const { match } = props;
const [currentTab, setCurrentTab] = useState("departMentTab");
const [courseList,setCourseList] = useState([]);
const [total, setTotal] = useState(0);
const [query, setQuery] = useState({
current: 0,
size: 10,
});
const [auditSwitch,setAuditSwitch] = useState('No')
useEffect(()=>{
const params= {
storeId:User.getStoreId()
}
StoreService.getStoreDetail(params).then((res) => {
const { result = { } } = res;
const {
auditSwitch
} = result;
setAuditSwitch(auditSwitch)
})
},[])
return (
<div className="page new-user-manage-page">
<div className="content-header">学员管理</div>
<div className="content-header">
<div>学员管理</div>
<If condition={auditSwitch === 'OPEN'}>
<div className='wechat-audit' onClick={()=>{
window.RCHistory.push({
pathname: `${match.url}/wechat-user-audit`,
});
}} >
<span className='icon iconfont icon-font-weixin'>&#xe8e0;</span>
<span className='content-header-right'>学员审核列表</span>
</div>
</If>
</div>
<div className="box">
<div className="tab-box">
<Tabs
......@@ -46,6 +69,12 @@ function UserManagePage() {
<DepartMentTabCon currentTab={currentTab}/>
</div>
</div>
<Route
path={`${match.url}/wechat-user-audit`}
render={() => {
return <WechatUserAudit/>;
}}
/>
</div>
);
}
......
......@@ -2,4 +2,21 @@
.ant-tabs-tab + .ant-tabs-tab{
margin:0;
}
.content-header{
display: flex;
justify-content: space-between;
align-items: center;
.wechat-audit:hover{
cursor: pointer;
}
.icon-font-weixin{
color: #5DD333;
margin-right:4px ;
}
.content-header-right{
font-size: 14px;
color: #2966FF;
}
}
}
\ No newline at end of file
.user-manage-page {
.content-header{
display: flex;
justify-content: space-between;
align-items: center;
.wechat-audit:hover{
cursor: pointer;
}
.icon-font-weixin{
color: #5DD333;
margin-right:4px ;
}
.content-header-right{
font-size: 14px;
color: #2966FF;
}
}
.box-header {
display: flex;
width: calc(100% - 80px);
......
......@@ -8,16 +8,18 @@
*/
import React, { useEffect, useState } from "react";
import { withRouter } from "react-router-dom";
import { Route, withRouter } from 'react-router-dom';
import _ from "underscore";
import { PageControl } from "@/components";
import { Input, DatePicker, Select, Button, message } from "antd";
import StoreService from "@/domains/store-domain/storeService";
import User from "@/common/js/user";
import ChooseMembersModal from "./modal/ChooseMembersModal";
import WechatUserAudit from './WechatUserAudit/WechatUserAudit'
import LimitTip from "./LimitTip"
import { XMTable } from '@/components';
import college from '@/common/lottie/college.json';
import LimitTip from "./LimitTip"
import "./UserManagePage.less";
import moment from "moment";
......@@ -29,9 +31,11 @@ declare var window: any;
function UserManagePage() {
function UserManagePage(props:any) {
const { match } = props;
const [userList, setUserList] = useState([]);
const [model, setModel] = useState<React.ReactNode>(null);
const [auditSwitch,setAuditSwitch] = useState('No')
const [query, setQuery] = useState({
current: 0,
size: 10,
......@@ -61,9 +65,24 @@ function UserManagePage() {
StoreService.getUserList(_query).then((res: any) => {
setRealTotal(res.result.total);
});
const params= {
storeId:User.getStoreId()
}
StoreService.getStoreDetail(params).then((res) => {
const { result = { } } = res;
const {
auditSwitch
} = result;
setAuditSwitch(auditSwitch)
})
}, [])
useEffect(()=>{
},[])
useEffect(() => {
getUserList();
}, [query]);
......@@ -136,7 +155,21 @@ function UserManagePage() {
return (
<div className=" page user-manage-page">
<div className="content-header">学员管理</div>
<div className="content-header">
<div>学员管理</div>
<If condition={auditSwitch === 'OPEN'}>
<div className='wechat-audit' onClick={()=>{
window.RCHistory.push({
pathname: `${match.url}/wechat-user-audit`,
});
}} >
<span className='icon iconfont icon-font-weixin'>&#xe8e0;</span>
<span className='content-header-right'>学员审核列表</span>
</div>
</If>
</div>
<div className="box">
<div className="box-header">
<div className="header-item">
......@@ -242,6 +275,12 @@ function UserManagePage() {
</div>
</div>
{model}
<Route
path={`${match.url}/wechat-user-audit`}
render={() => {
return <WechatUserAudit/>;
}}
/>
</div>
);
}
......
import React, { useState, useEffect } from 'react';
import Breadcrumbs from '@/components/Breadcrumbs';
import WechatUserAuditFilter from './WechatUserAuditFilter';
import WechatUserAuditOpt from './WechatUserAuditOpt'
import WechatUserAuditList from './WechatUserAuditList';
import StoreService from "@/domains/store-domain/storeService";
import User from '@/common/js/user';
import './WechatUserAudit.less';
const WechatUserAudit = function () {
const [listData, setListData] = useState([]);
const [totalCount, setTotalCount] = useState(0);
const [listCount, setListCount] = useState({
"allCnt": 0,
"passedCnt": 0,
"rejectedCnt": 0,
"waitCnt": 0
});
const [query, setQuery] = useState({
current: 1,
size: 10,
applyStatus: 'WAIT' //PASSED, WAIT, REJECTED
});
useEffect(() => {
//列表获取
function handleFetchAuditList(_query) {
const params = {
...query,
..._query,
storeId: User.getStoreId(),
};
StoreService.getCustomerAuditList(params).then((res) => {
const {
result: { records = [], total },
} = res;
setListData(records);
setTotalCount(total);
});
}
//列表获取
function handleFetchAuditListCount(_query) {
const params = {
storeId: User.getStoreId(),
};
StoreService.getCustomerAuditListCount(params).then((res) => {
const {
result,
} = res;
setListCount(result)
});
}
handleFetchAuditList();
handleFetchAuditListCount();
}, [query]);
//搜索条件改变
function queryChange(_query) {
if(_query.applyStatus===''){
_query.applyStatus = null
}
const params = {
...query,
..._query,
};
setQuery(params);
}
return (
<div className='page wechat-user-audit'>
<Breadcrumbs navList='学员审核列表' />
<div className='box'>
<WechatUserAuditFilter onChange={queryChange} />
<WechatUserAuditOpt onChange = {queryChange} listCount={listCount} defaultType={query.applyStatus}/>
<WechatUserAuditList listData={listData} query={query} totalCount={totalCount} onChange={queryChange} />
</div>
</div>
);
};
export default WechatUserAudit;
.wechat-user-audit{
}
\ No newline at end of file
/*
* @Author: 庞国铭
* @Description: 学员审核列表 筛选
*/
import React, { useState } from 'react';
import { Row, Input, Tooltip } from 'antd';
import RangePicker from '@/modules/common/DateRangePicker';
import moment from 'moment';
import './WechatUserAuditFilter.less';
const { Search } = Input;
const defaultQuery = {
realName: null,
startTime: null,
endTime: null,
};
const WechatUserAuditFilter = function (props) {
const { onChange = () => {} } = props;
const [query, setQuery] = useState(defaultQuery);
// 改变搜索条件
function handleChangeQuery(field, value) {
let _query = {
...query,
[field]: value,
current: 1,
};
setQuery(_query);
onChange(_query);
}
//日期选择
function handleChangeDates(dates) {
let _query = {
...query,
current: 1,
};
if (_.isEmpty(dates)) {
delete _query.startTime;
delete _query.endTime;
} else {
_query.startTime = dates[0]?.startOf('day').valueOf();
_query.endTime = dates[1]?.endOf('day').valueOf();
}
setQuery(_query);
onChange(_query);
}
//重置
function handleReset() {
setQuery({
...defaultQuery,
current: 1,
});
onChange(query);
}
return (
<div className='wechat-user-audit-filter'>
<Row type='flex' justify='space-between' align='top'>
<div className='search-condition'>
<div className='search-condition__item'>
<span className='search-name'>搜索用户:</span>
<Search
value={query.realName}
placeholder='搜索用户'
onChange={(e) => {
handleChangeQuery('realName', e.target.value);
}}
onSearch={() => {
onChange(query.current);
}}
style={{ width: 'calc(100% - 81px)' }}
className='search-input'
enterButton={<span className='icon iconfont'>&#xe832;</span>}
/>
</div>
<div className='search-condition__item'>
<span className='search-date'>申请时间:</span>
<RangePicker
id='course_date_picker'
allowClear={false}
value={query.startTime ? [moment(query.startTime), moment(query.endTime)] : null}
format={'YYYY-MM-DD'}
onChange={(dates) => {
handleChangeDates(dates);
}}
style={{ width: 'calc(100% - 81px)' }}
/>
</div>
</div>
<div className='reset-fold-area'>
<Tooltip title='清空筛选'>
<span className='resetBtn iconfont icon' onClick={handleReset}>
&#xe61b;
</span>
</Tooltip>
</div>
</Row>
</div>
);
};
export default WechatUserAuditFilter;
.wechat-user-audit-filter{
position: relative;
.ant-input-search-button{
border-left:none;
}
.search-condition {
width: calc(100% - 80px);
display: flex;
align-items: center;
flex-wrap: wrap;
&__item {
width: 30%;
margin-right: 3%;
margin-bottom: 12px;
.search-name{
width: 81px;
vertical-align: middle;
display:inline-block;
height:32px;
line-height:32px;
}
}
}
.reset-fold-area {
position: absolute;
right: 12px;
}
.resetBtn {
color: #999999;
font-size: 18px;
margin-right: 8px;
}
.fold-btn {
font-size: 14px;
color: #666666;
line-height: 20px;
.fold-icon {
font-size: 12px;
margin-left:4px;
}
}
}
.data-icon {
cursor: pointer;
}
import React from 'react';
import { message, Badge } from 'antd';
import { PageControl, XMTable } from '@/components';
// import User from '@/common/js/user';
import './WechatUserAuditList.less';
import StoreService from '@/domains/store-domain/storeService';
import User from '@/common/js/user';
function WechatUserAuditList(props) {
const { listData, totalCount, query, onChange = () => {} } = props;
function parseColumns() {
const columns = [
{
title: '微信名称',
key: 'nickName',
dataIndex: 'nickName',
width: '12%',
fixed: 'left',
render: (val, record) => {
return <div className='wechat-user-audit-name'>{val}</div>;
},
},
{
title: '真实姓名',
key: 'realName',
dataIndex: 'realName',
width: '12%',
render: (val) => {
return <div className='create-name'>{val}</div>;
},
},
{
title: '申请时间',
width: '12.5%',
key: 'applyDate',
dataIndex: 'applyDate',
render: (val) => {
return <span style={{ whiteSpace: 'nowrap' }}>{window.formatDate('YYYY-MM-DD H:i', val)}</span>;
},
},
{
title: '审批状态',
width: '10%',
key: 'applyStatus',
dataIndex: 'applyStatus',
render: (val) => {
return (
<div className='valid-state-icon'>
<Choose>
<When condition={val === 'PASSED'}>
<Badge color='#0ACCA4' text='已通过' />
</When>
<When condition={val === 'REJECTED'}>
<Badge color='#EC4B35' text='已拒绝' />
</When>
<Otherwise>
<Badge color='#FFB714' text='待审核' />
</Otherwise>
</Choose>
</div>
);
},
},
{
title: '审核人',
width: '10%',
key: 'reviewer',
dataIndex: 'reviewer',
render: (val) => {
return <div>{val}</div>;
},
},
{
title: '操作',
key: 'operate',
dataIndex: 'operate',
fixed: 'right',
width: '14.5%',
render: (val, record) => {
return (
<Choose>
<When condition={record.applyStatus === 'WAIT'}>
<div className='operate'>
<div className='operate__item' onClick={() => audit(record, true)}>
通过
</div>
<span className='operate__item split'> | </span>
<div className='operate__item' onClick={() => audit(record, false)}>
拒绝
</div>
</div>
</When>
<Otherwise>
<div className='operate'>
<div></div>
</div>
</Otherwise>
</Choose>
);
},
},
];
return columns;
}
function audit(record, isTrue) {
const { id } = record;
const params = {
applyCustomerId: id,
audit: isTrue,
operatorId: User.getStoreUserId(),
storeId: User.getStoreId(),
};
StoreService.auditOperation(params).then((res) => {
if (res.success) {
message.success('操作成功');
onChange(query)
}
});
}
function onShowSizeChange(current, size) {
if (current === size) {
return;
}
let _query = query;
_query.size = size;
onChange(_query);
}
return (
<div className='wechat-user-audit-list'>
<XMTable
rowKey={(record) => record.id}
showSorterTooltip={false}
dataSource={listData}
columns={parseColumns()}
pagination={false}
bordered
size='middle'
scroll={{ x: 1400 }}
className='wechat-user-audit-list-table'
renderEmpty={{
description: <span style={{ display: 'block', paddingBottom: 24 }}>暂无数据</span>,
}}
/>
<div className='box-footer'>
<PageControl
current={query.current - 1}
pageSize={query.size}
total={totalCount}
toPage={(page) => {
const _query = { ...query, current: page + 1 };
onChange(_query);
}}
onShowSizeChange={onShowSizeChange}
/>
</div>
</div>
);
}
export default WechatUserAuditList;
.wechat-user-audit-list {
margin-top: 12px;
.course-number {
margin-right: 45px;
}
.wechat-user-audit-list-table {
thead.ant-table-thead {
tr {
th {
padding: 10px 12px;
}
}
}
tbody {
tr {
td.ant-table-cell {
padding: 16px 12px;
color: #333;
}
&:nth-child(even) {
background: transparent;
td {
background: #fff;
}
}
&:nth-child(odd) {
background: #fafafa;
td {
background: #fafafa;
}
}
&:hover {
td {
background: #f3f6fa;
}
}
}
}
}
.operate-text {
color: #2966ff;
cursor: pointer;
}
.operate {
display: flex;
&__item {
color: #2966ff;
cursor: pointer;
&.split {
margin: 0 8px;
color: #bfbfbf;
}
}
}
.join-number {
text-align: right;
margin-right: 12px;
}
.more-operate {
line-height: 20px;
}
.valid-state-icon{
display: flex;
align-items: center;
.ant-badge{
transform: translate(0,0) scale(1) !important;
}
}
}
\ No newline at end of file
import React from 'react';
import { Row, Radio } from 'antd';
const WechatUserAuditOpt = function (props) {
const { onChange = () => {}, listCount = {}, defaultType = '' } = props;
const { allCnt = 0, passedCnt = 0, rejectedCnt = 0, waitCnt = 0 } = listCount;
return (
<div className='wechat-user-audit-filter'>
<Row type='flex' justify='end' align='top'>
<Radio.Group onChange={(e) => onChange({ applyStatus: e.target.value })} defaultValue={defaultType}>
<Radio.Button value=''>{`全部(${allCnt})`}</Radio.Button>
<Radio.Button value='WAIT'>{`待审核(${waitCnt})`}</Radio.Button>
<Radio.Button value='PASSED'>{`已通过(${passedCnt})`}</Radio.Button>
<Radio.Button value='REJECTED'>{`已拒绝(${rejectedCnt})`}</Radio.Button>
</Radio.Group>
</Row>
</div>
);
};
export default WechatUserAuditOpt;
......@@ -155,6 +155,7 @@ class GraphicsEditor extends React.Component {
message.warning(`内容过长,不能超过${maxLimit}字`);
}
Bus.trigger('editorLimit', textLength, editorType);
console.log(onChange,html, this.state.textLength)
onChange(html, this.state.textLength);
});
};
......
import React from 'react';
import { Input, Button, Modal, message, Form } from 'antd';
import { Input, Button, Switch, message, Form } from 'antd';
import Upload from '@/core/upload';
import Service from "@/common/js/service";
import BaseService from "@/domains/basic-domain/baseService";
import User from "@/common/js/user";
import Breadcrumbs from "@/components/Breadcrumbs";
import ImgClipModal from '@/components/ImgClipModal'
import {debounce} from 'underscore'
import { brandLogo } from '@/domains/brand/constants'
import './CreateCollege.less';
let cutFlag = false;
export default class CreateCollege extends React.Component {
constructor(props) {
......@@ -21,6 +19,7 @@ export default class CreateCollege extends React.Component {
name: '',
enterpriseId: User.getEnterpriseId(),
imageFile: null, // 需要被截取的图片
auditSwitch:'OPEN',
};
this.loginInputRef = React.createRef()
}
......@@ -71,14 +70,14 @@ export default class CreateCollege extends React.Component {
};
updateCover = () =>{
const {coverClicpPath,coverId} = this.state
const {coverClicpPath} = this.state
this.setState({
logo:coverClicpPath
})
}
submit = () => {
const { logo, collegeName, enterpriseId } = this.state;
const { logo, collegeName, enterpriseId,auditSwitch } = this.state;
if (!collegeName) {
this.setState({ showError: true })
} else {
......@@ -87,6 +86,7 @@ export default class CreateCollege extends React.Component {
userId: User.getUserId(),
logo,
storeName: collegeName,
auditSwitch
}
Service.Hades('public/customerHades/createStore', params).then((res) => {
if (res.success) {
......@@ -95,18 +95,22 @@ export default class CreateCollege extends React.Component {
})
}
}
onChangeFiledValue = (filed, value) => {
this.setState({
[filed]: value,
});
};
render() {
const {
avatar,
name,
collegeName,
logo,
visible,
hasImgReady,
cutImageBlob,
showError,
imageFile
imageFile,
auditSwitch
} = this.state;
return (
<div className="college-manage-page">
......@@ -125,7 +129,7 @@ export default class CreateCollege extends React.Component {
</div>
<div className="create-box">
<div className="image-box">
<img className="image" src={logo}/>
<img className="image" src={logo} alt=''/>
<div className="image-mask">
<span
className="icon iconfont"
......@@ -155,11 +159,24 @@ export default class CreateCollege extends React.Component {
}}
></Input>
</Form.Item>
<Form.Item label={<div className='label-box'>学员审核 <span className='icon iconfont icon-tip'>&#xe61d;</span></div>} name='auditSwitch' rules={[{ required: true }]}>
<div className='switch-box'>
<Switch checked={auditSwitch ==='OPEN' } onChange={(e) => this.onChangeFiledValue('auditSwitch', e ?'OPEN':'CLOSE')}/>
<Choose>
<When condition={auditSwitch ==='OPEN'}>
<div className='switch-desc'>已开启,成为学院学员需要审核</div>
</When>
<Otherwise>
<div className='switch-desc'>已关闭,成为学院学员不需要审核</div>
</Otherwise>
</Choose>
</div>
</Form.Item>
</Form>
<Button
className="button"
type="primary"
onClick={_.debounce(() => this.submit(), 3000, {
onClick={debounce(() => this.submit(), 3000, {
leading: true,
trailing: false
})}
......
......@@ -5,7 +5,7 @@
.create-box {
padding-top: 108px;
margin: 0 auto;
width: 350px;
width: 380px;
.image-box {
position: relative;
display: block;
......@@ -45,6 +45,27 @@
}
}
}
.label-box{
display: flex;
align-content: center;
.icon{
color:#BFBFBF;
margin: 0 2px;
}
}
.switch-box{
display: flex;
align-items: center;
.switch-desc{
color: #999;
font-size: 14px;
margin: 0 8px;
}
.switch-prew-link{
color: #2966FF;
font-size: 14px;
}
}
.tip {
display: block;
color: #999999;
......@@ -52,10 +73,10 @@
margin-bottom: 24px;
}
.input {
width: 350px;
width: 380px;
}
.button {
width: 350px;
width: 380px;
margin-top: 36px;
height: 32px !important;
}
......
import React, { useState, useRef, useEffect, useContext } from 'react'
import React, { useState, useRef, useEffect } from 'react'
import Breadcrumbs from "@/components/Breadcrumbs";
import { Form, Alert, Input, Button, InputNumber, DatePicker, Switch, Radio, message, Modal, Tooltip } from 'antd';
import { Route, withRouter } from 'react-router-dom';
import { Form, Input, Button, InputNumber, DatePicker, Switch, Radio, message, Modal, Tooltip } from 'antd';
import { withRouter } from 'react-router-dom';
import User from "@/common/js/user";
import moment from 'moment'
import Service from "@/common/js/service";
......
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