Commit 87a32a99 authored by tjy's avatar tjy

对接完成会员(待提交审核、待审核(一级)、待审核(二级)、待确认审核

parent e7495c67
......@@ -3,6 +3,7 @@
"scripts": {
"api": "god-ytt",
"start:analyze": "ANALYZE=1 umi dev",
"start:dev": "umi dev",
"scripts:build": "node scripts/run",
"start": "yarn scripts:build && umi dev",
"build": "umi build",
......
import React, { RefObject, useRef } from 'react'
import { Button, Checkbox } from 'antd'
import React, { RefObject, useRef } from 'react';
import { Button, Checkbox } from 'antd';
import { useSelections } from '@umijs/hooks';
import { findTreeKeys } from '@/utils';
import './index.less';
export interface CheckboxTreeProps {
title?: React.ReactNode,
checkedNodes?: any[],
handleChange?(e?),
disabled?: boolean,
actions?: RefObject<any>
title?: React.ReactNode;
checkedNodes?: any[];
handleChange?(e?);
handleSubmit?();
showSave?;
disabled?: boolean;
actions?: RefObject<any>;
}
const CheckboxTree:React.FC<CheckboxTreeProps> = (props) => {
const { title, checkedNodes = [], actions, handleChange, disabled } = props
const checkedKeys = findTreeKeys(checkedNodes, 'id')
const { selected, setSelected, toggleAll, toggle, isSelected, allSelected, unSelectAll, selectAll } = useSelections(
checkedKeys,
[]
);
const CheckboxTree: React.FC<CheckboxTreeProps> = props => {
const {
title,
checkedNodes = [],
actions,
handleChange,
disabled,
showSave,
handleSubmit,
} = props;
const checkedKeys = findTreeKeys(checkedNodes, 'id');
const {
selected,
setSelected,
toggleAll,
toggle,
isSelected,
allSelected,
unSelectAll,
selectAll,
} = useSelections(checkedKeys, []);
if (actions) {
actions.current.selected = selected
actions.current.setSelected = setSelected
actions.current.getSelected = () => selected
actions.current.selected = selected;
actions.current.setSelected = setSelected;
actions.current.getSelected = () => selected;
}
const toggleSelectAll = () => {
checkChange()
checkChange();
if (allSelected) {
unSelectAll()
unSelectAll();
} else {
selectAll()
selectAll();
}
}
};
const checkChange = (e?) => {
handleChange && handleChange(e)
}
handleChange && handleChange(e);
};
return (
<div>
{ title &&
<div className='flex-bet'>
{title && (
<div className="flex-bet">
<div>{props.title}</div>
<Button onClick={toggleSelectAll} type='link' disabled={disabled}>{ allSelected ? '取消全选' : '全选'}</Button>
<div>
<Button onClick={toggleSelectAll} type="link" disabled={disabled}>
{allSelected ? '取消全选' : '全选'}
</Button>
{showSave && (
<Button onClick={handleSubmit} type="link" disabled={disabled}>
保存
</Button>
)}
</div>
</div>
}
<ul className='checkbox-tree-list'>
{ checkedNodes && checkedNodes.map((v, i) => {
return <li key={v.id}>
<Checkbox onChange={checkChange} disabled={disabled} onClick={() => toggle(v.id)} checked={isSelected(v.id)}>{v.buttonName}</Checkbox>
</li>
}) }
)}
<ul className="checkbox-tree-list">
{checkedNodes &&
checkedNodes.map((v, i) => {
return (
<li key={v.id}>
<Checkbox
onChange={checkChange}
disabled={disabled}
onClick={() => toggle(v.id)}
checked={isSelected(v.id)}
>
{v.buttonName}
</Checkbox>
</li>
);
})}
</ul>
</div>
)
}
);
};
CheckboxTree.defaultProps = {
checkedNodes: []
}
checkedNodes: [],
};
export default CheckboxTree
\ No newline at end of file
export default CheckboxTree;
This diff is collapsed.
......@@ -13,26 +13,9 @@ export interface UseType {
businessType: BusinessType[];
}
export interface Element {
id: number;
fieldName: string;
fieldCNName: string;
fieldType: string;
fieldLength: number;
fieldEmpty: number;
fieldOrder: number;
fieldRemark: string;
checkRules: any[];
}
export interface UseDetail {
groupName: string;
elements: Element[];
}
export interface UserRegister {
useType: UseType;
useDetail: UseDetail[];
useDetail?: any;
}
export interface RuleConfiguration {
......@@ -53,18 +36,13 @@ export interface PayInitializeConfig {
payWayResponses: PayWayResponse[];
}
export interface PayWayResponse {
export interface PayPlatformPayConfig {
id: number;
payType: number;
way: string;
isPitchOn: number;
}
export interface PayPlatformPayConfig {
payType: number;
payWayResponses: PayWayResponse[];
}
export interface PayConfig {
payInitializeConfig: PayInitializeConfig[];
payPlatformPayConfig: PayPlatformPayConfig[];
......
......@@ -8,7 +8,7 @@ export enum PageStatus {
}
export const usePageStatus = () => {
const { preview, id = '' } = history.location.query
const { preview, id = '', validateId = '' } = history.location.query
// 默认预览状态
let pageStatus = PageStatus.PREVIEW
if (preview === '1') {
......@@ -24,6 +24,7 @@ export const usePageStatus = () => {
return {
pageStatus,
id,
preview
preview,
validateId
}
}
\ No newline at end of file
......@@ -17,10 +17,10 @@ export interface useTreeTabOptions {
export const useTreeTabs = (options: useTreeTabOptions = {}) => {
const { selectCallback, fetchMenuData, fetchItemDetailData, resetDetail } = options
const [ treeExtraMaps, { set, get } ] = useMap<any, any>()
const [ treeData, setTreeData ] = useState<any[]>([])
const [ treeStatus, setTreeStatus ] = useState<FormState>(FormState.FREE)
const [ nodeRecord, setNodeRecord ] = useState<any>(null)
const [treeExtraMaps, { set, get }] = useMap<any, any>()
const [treeData, setTreeData] = useState<any[]>([])
const [treeStatus, setTreeStatus] = useState<FormState>(FormState.FREE)
const [nodeRecord, setNodeRecord] = useState<any>(null)
const [isEditForm, setIsEditForm] = useState<boolean>(false)
......@@ -33,18 +33,18 @@ export const useTreeTabs = (options: useTreeTabOptions = {}) => {
setTreeData(res.data || [])
}
}
const handleSelect = (selectKey?, node?) => {
if (selectCallback) {
selectCallback(selectKey, node)
return ;
return;
}
// 首次新增菜单的时候没有节点信息
if (!node) {
// 首次新增菜单的时候没有节点信息
if (!node) {
setNodeRecord(null)
setTreeStatus(FormState.ADD)
return ;
return;
}
// key相等时 不刷新右侧表单
if (nodeRecord && nodeRecord.key === selectKey) {
......@@ -81,7 +81,7 @@ export const useTreeTabs = (options: useTreeTabOptions = {}) => {
}
const handleFindDetail = (id) => {
fetchItemDetailData && fetchItemDetailData({id}).then(res => {
fetchItemDetailData && fetchItemDetailData(id).then(res => {
const { data } = res
set(id, data)
})
......
This diff is collapsed.
......@@ -32,6 +32,14 @@ interface PageProps {
const { Option } = Select;
const auditList: React.FC<PageProps> = props => {
let path =
props.pageType === '1'
? 'auditPrSubmit'
: props.pageType === '2'
? 'auditPr1'
: props.pageType === '3'
? 'auditPr2'
: 'auditPrComfirm';
const ref = useRef<any>({});
let [isSearch, setIsSearch] = useState(false);
const [searchForm, setSearchForm] = useState<any>({
......@@ -62,59 +70,41 @@ const auditList: React.FC<PageProps> = props => {
dataIndex: 'name',
align: 'center',
key: 'name',
render: (text: any, record: any) => {
let path =
props.pageType === '1'
? 'auditPrSubmit'
: props.pageType === '2'
? 'auditPr1'
: props.pageType === '3'
? 'auditPr2'
: 'auditPrComfirm';
return (
<EyePreview
url={`/memberAbility/manage/${path}?id=${record.memberId}&preview=1`}
>
{text}
</EyePreview>
);
},
render: (text: any, record: any) => (
<EyePreview
url={`/memberAbility/manage/${path}?id=${record.memberId}&validateId=${record.validateId}&preview=1`}
>
{text}
</EyePreview>
),
},
{
title: '会员类型',
dataIndex: 'memberTypeName',
align: 'center',
key: 'memberTypeName',
render: (text: any, record: any) => <>{text}</>,
render: (text: any, record: any) => <span>{text}</span>,
},
{
title: '会员角色',
dataIndex: 'roleName',
align: 'center',
key: 'roleName',
render: (text: any, record: any) => {
let component: ReactNode = null;
component = <div>{text}</div>;
return component;
},
render: (text: any, record: any) => <span>{text}</span>,
},
{
title: '申请来源/时间',
dataIndex: 'sourceName',
align: 'center',
key: 'sourceName',
render: (text: any, record: any) => {
let component: ReactNode = null;
component = (
<>
<div>{text}</div>
<div>
<ClockCircleOutlined /> {record.registerTime}
</div>
</>
);
return component;
},
render: (text: any, record: any) => (
<>
<div>{text}</div>
<div>
<ClockCircleOutlined /> {record.registerTime}
</div>
</>
),
},
{
title: '会员状态',
......@@ -124,19 +114,15 @@ const auditList: React.FC<PageProps> = props => {
filters: [],
filteredValue: searchForm.innerStatus || ['0'],
filterMultiple: false,
render: (text: any, record: any) => {
let component: ReactNode = null;
component = (
<div
style={
record.status === 1 ? { color: '#00B37A' } : { color: '#42526E' }
}
>
{text}
</div>
);
return component;
},
render: (text: any, record: any) => (
<span
style={
record.status === 1 ? { color: '#00B37A' } : { color: '#42526E' }
}
>
{text}
</span>
),
},
{
title: '外部状态',
......@@ -146,11 +132,9 @@ const auditList: React.FC<PageProps> = props => {
filters: [],
filteredValue: searchForm.innerStatus || ['0'],
filterMultiple: false,
render: (text: any, record: any) => {
let component: ReactNode = null;
component = <div style={{ color: '#FF991F' }}>{text}</div>;
return component;
},
render: (text: any, record: any) => (
<span style={{ color: '#FF991F' }}>{text}</span>
),
},
{
title: '内部状态',
......@@ -168,19 +152,15 @@ const auditList: React.FC<PageProps> = props => {
title: '操作',
dataIndex: 'option',
align: 'center',
render: (text: any, record: any) => {
let component: ReactNode = null;
component = (
<Button type="link" onClick={() => handleChange(record, 'audit')}>
{props.pageType === '1'
? '提交审核'
: props.pageType === '2'
? '审核'
: '确认审核'}
</Button>
);
return component;
},
render: (text: any, record: any) => (
<Button type="link" onClick={() => handleChange(record, 'audit')}>
{props.pageType === '1'
? '提交审核'
: props.pageType === '2'
? '审核'
: '确认审核'}
</Button>
),
},
];
......@@ -230,16 +210,6 @@ const auditList: React.FC<PageProps> = props => {
});
};
useEffect(() => {
// if (!isFirst) return setIsFirst(true);
// ref.current.reload();
}, [
searchForm.memberType,
searchForm.roleId,
searchForm.level,
searchForm.source,
]);
// 初始化表头筛选项接收的数据类型
const processData = (data: any) => {
for (let elem of data) {
......@@ -315,19 +285,7 @@ const auditList: React.FC<PageProps> = props => {
setSearchForm({ ...searchKey });
};
const handleSubmit = (val: any) => {
console.log(val);
};
const handleChange = (record: any, type: string) => {
let path =
props.pageType === '1'
? 'auditPrSubmit'
: props.pageType === '2'
? 'auditPr1'
: props.pageType === '3'
? 'auditPr2'
: 'auditPrComfirm';
history.push({
pathname: `/memberAbility/manage/${path}`,
query: {
......
import { ISchema } from '@formily/antd';
export const auditSchema: ISchema = {
type: 'object',
properties: {
MEGA_LAYOUT: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
labelAlign: 'top',
},
properties: {
agree: {
type: 'string',
default: 1,
enum: [
{ label: '审核通过', value: 1 },
{ label: '审核不通过', value: 0 },
],
'x-component': 'radio',
'x-component-props': {},
},
reason: {
type: 'string',
title: '审核不通过原因',
'x-component': 'textarea',
'x-component-props': {
placeholder: '在此输入你的内容,最长120个字符,60个汉字',
maxLength: 60,
},
'x-rules': [{ required: true, message: '请填写审核不通过原因' }],
},
},
},
},
};
......@@ -10,7 +10,7 @@ import NiceForm from '@/components/NiceForm';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { initDetailSchema } from './schema';
import { useAsyncSelect } from '@/formSchema/effects/useAsyncSelect';
import { useAsyncSelect } from '@/formSchema/effects/useAsyncSelect'
import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect';
import { PublicApi } from '@/services/api';
......
import React, { useState } from 'react';
import { Row, Col, Tabs, Steps, Badge } from 'antd';
import { StandardTable } from 'god';
import { ColumnType } from 'antd/lib/table/interface';
import styles from '../index.less';
interface PageProps {
detailData: any;
}
const EquitiesDetail: React.FC<PageProps> = props => {
return <>123</>;
};
export default EquitiesDetail;
import React, { useState } from 'react';
import { Row, Col, Tabs, Steps, Badge } from 'antd';
import { StandardTable } from 'god';
import { ColumnType } from 'antd/lib/table/interface';
import styles from '../index.less';
interface PageProps {
detailData: any;
}
const IntegrityDetail: React.FC<PageProps> = props => {
return <>123</>;
};
export default IntegrityDetail;
import React, { useState } from 'react';
import { Row, Col, Progress, Form, Input } from 'antd';
import { StandardTable } from 'god';
import { ColumnType } from 'antd/lib/table/interface';
import styles from '../index.less';
interface PageProps {
detailData: any;
}
const LevelDetail: React.FC<PageProps> = props => {
const { detailData } = props;
return (
<Row>
<Col className={styles['mainCol']} span={24}>
<div className={styles['mainCol-title']}>会员等级</div>
<div className={styles['mainCol-chart']}>
<div className={styles['mainCol-chart-main']}>
<div
className={
styles[`mainCol-chart-main-card${detailData.level || '4'}`]
}
>
<h2>青铜会员</h2>
<div className={styles['progress']}>
<Progress
style={{ height: '4px' }}
strokeLinecap="square"
strokeColor={
detailData.level === '1'
? '#A47268'
: detailData.level === '2'
? '#576C8F'
: detailData.level === '3'
? '#B28525'
: '#595B71'
}
trailColor={
detailData.level === '1'
? '#E9BFA9'
: detailData.level === '2'
? '#ABC0DC'
: detailData.level === '3'
? '#D6C39D'
: '#A7AAC6'
}
showInfo={false}
percent={75}
/>
<div className={styles['progress-score']}>
<span>5000/15000</span>
<span>白银会员</span>
</div>
<div>当前活跃分</div>
</div>
</div>
</div>
<div className={styles['mainCol-chart-main']}>
<div className={styles['mainCol-chart-main-line']}>line</div>
</div>
</div>
</Col>
<Col className={styles['mainCol']} span={24}>
<div className={styles['mainCol-title']}>活跃分获取记录</div>
</Col>
</Row>
);
};
export default LevelDetail;
......@@ -140,6 +140,124 @@
}
}
}
&-chart {
display : flex;
padding-bottom: 28px;
&-main {
width: 30%;
&:nth-last-of-type(1) {
width : 70%;
background-color: greenyellow
}
&-card1 {
width : 338px;
height : 190px;
box-shadow : 0px 1px 2px 0px rgba(23, 43, 77, 0.12);
border-radius: 8px;
box-sizing : border-box;
padding : 32px 24px 16px;
background : url("/static/imgs/card1@2x.png") center center no-repeat;
h2 {
color : #A47268;
letter-spacing: 2px;
margin-bottom : 38px;
}
.progress {
width: 218px;
&-score {
display : flex;
justify-content: space-between;
}
}
}
&-card2 {
width : 338px;
height : 190px;
box-shadow : 0px 1px 2px 0px rgba(23, 43, 77, 0.12);
border-radius: 8px;
box-sizing : border-box;
padding : 32px 24px 16px;
background : url("/static/imgs/card2@2x.png") center center no-repeat;
h2 {
color : #5B6F92;
letter-spacing: 2px;
margin-bottom : 38px;
}
.progress {
width: 218px;
&-score {
display : flex;
justify-content: space-between;
}
}
}
&-card3 {
width : 338px;
height : 190px;
box-shadow : 0px 1px 2px 0px rgba(23, 43, 77, 0.12);
border-radius: 8px;
box-sizing : border-box;
padding : 32px 24px 16px;
background : url("/static/imgs/card3@2x.png") center center no-repeat;
h2 {
color : #987326;
letter-spacing: 2px;
margin-bottom : 38px;
}
.progress {
width: 218px;
&-score {
display : flex;
justify-content: space-between;
}
}
}
&-card4 {
width : 338px;
height : 190px;
box-shadow : 0px 1px 2px 0px rgba(23, 43, 77, 0.12);
border-radius: 8px;
box-sizing : border-box;
padding : 32px 24px 16px;
background : url("/static/imgs/card4@2x.png") center center no-repeat;
h2 {
color : #595B71;
letter-spacing: 2px;
margin-bottom : 38px;
}
.progress {
width: 218px;
&-score {
display : flex;
justify-content: space-between;
}
}
}
&-line {}
}
}
}
.authCol {
......
......@@ -8,14 +8,17 @@ import { usePageStatus, PageStatus } from '@/hooks/usePageStatus';
import { PublicApi } from '@/services/api';
import styles from './index.less';
import BaseDetail from './component/baseDetail';
import AuthDetail from './component/AuthDetail';
import AuthDetail from './component/authDetail';
import LevelDetail from './component/levelDetail';
import EquitiesDetail from './component/equitiesDetail';
import IntegrityDetail from './component/integrityDetail';
const { TabPane } = Tabs;
const { Step } = Steps;
const MemberDetail: React.FC<{}> = () => {
const { pageStatus, id } = usePageStatus();
const [hActived, setHActived] = useState('1');
const [hActived, setHActived] = useState('3');
const [detailData, setDetailData] = useState<any>({});
useEffect(() => {
......@@ -79,11 +82,11 @@ const MemberDetail: React.FC<{}> = () => {
) : hActived === '2' ? (
<AuthDetail detailData={detailData} />
) : hActived === '3' ? (
''
<LevelDetail detailData={detailData} />
) : hActived === '4' ? (
''
<EquitiesDetail detailData={detailData} />
) : (
''
<IntegrityDetail detailData={detailData} />
)}
</PageHeaderWrapper>
);
......
......@@ -2,6 +2,8 @@ import React from 'react';
import { ISchema } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const';
let id;
export const importSchema: ISchema = {
type: 'object',
properties: {
......
......@@ -2,7 +2,7 @@ import React from 'react';
import AuditDetail from '../components/auditDetail';
const auditPr = (props: any) => {
return <AuditDetail auditType="2" routeParams={props.location.query} />;
return <AuditDetail auditType="3" routeParams={props.location.query} />;
};
export default auditPr;
......@@ -2,7 +2,7 @@ import React from 'react';
import AuditDetail from '../components/auditDetail';
const auditPrConfirm = (props: any) => {
return <AuditDetail auditType="3" routeParams={props.location.query} />;
return <AuditDetail auditType="4" routeParams={props.location.query} />;
};
export default auditPrConfirm;
......@@ -47,7 +47,7 @@ const errorHandler = (error: ResponseError):IRequestError => {
const defaultHeaders = {
'Content-Type': 'Application/json',
'token': 'e0ad7389eb024e5cda8ac92762f4454a'
'token': 'e1404c3d593ad198e88187553bc40b2c'
}
/**
......
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