Commit d9500dd4 authored by 前端-许佳敏's avatar 前端-许佳敏

Merge branch 'dev-srm' of http://10.0.0.22:3000/lingxi/lingxi-business-paltform into dev-srm

parents c48b1bc3 7004544a
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-09-15 17:48:36
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-05-18 15:08:09
* @LastEditTime: 2021-07-05 18:18:12
* @Description: 内外部流转记录组件
*/
import React, { useState, useEffect } from 'react';
......@@ -10,8 +10,7 @@ import {
Steps,
Tooltip,
} from 'antd';
import MellowCard, { MellowCardProps } from '@/components/MellowCard';
import ButtonSwitch from '@/components/ButtonSwitch';
import ButtonTabs, { ButtonTabsProps } from '../ButtonTabs';
import styles from './index.less';
export interface StepsItem {
......@@ -33,7 +32,7 @@ export interface StepsItem {
status?: 'wait' | 'process' | 'finish' | 'error',
}
interface AuditProcessProp extends MellowCardProps {
interface AuditProcessProp extends Omit<ButtonTabsProps, 'options'> {
/**
* 当前外部流程步骤
*/
......@@ -104,7 +103,7 @@ const AuditProcess: React.FC<AuditProcessProp> = ({
].filter(Boolean);
const titleRender = (stepTitle: string, stepLength: number) => {
if(stepLength <= 6) {
if (stepLength <= 6) {
return <span>{stepTitle}</span>
}
return (
......@@ -115,18 +114,15 @@ const AuditProcess: React.FC<AuditProcessProp> = ({
}
return (
<MellowCard
title="流转进度"
extra={(
<ButtonSwitch
options={options}
onChange={handleRadioChange}
value={radioValue}
/>
)}
<ButtonTabs
options={options}
extra="流转进度"
defaultValue="inner"
onChange={handleRadioChange}
value={radioValue}
{...rest}
>
{radioValue === 'outer' ? (
<ButtonTabs.Item activeKey="outer">
<div className={styles.steps}>
<Steps progressDot current={outerVerifyCurrent}>
{outerVerifySteps && outerVerifySteps.map(item => (
......@@ -139,8 +135,8 @@ const AuditProcess: React.FC<AuditProcessProp> = ({
))}
</Steps>
</div>
) : null}
{radioValue === 'inner' ? (
</ButtonTabs.Item>
<ButtonTabs.Item activeKey="inner">
<div className={styles.steps}>
<Steps progressDot current={innerVerifyCurrent}>
{innerVerifySteps && innerVerifySteps.map(item => (
......@@ -153,8 +149,8 @@ const AuditProcess: React.FC<AuditProcessProp> = ({
))}
</Steps>
</div>
) : null}
</MellowCard>
</ButtonTabs.Item>
</ButtonTabs>
)
};
......
/*
* @Author: XieZhiXiong
* @Date: 2021-06-15 17:13:25
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-06-15 17:19:58
* @Description: Radio.Button 选项卡
*/
import React, { useEffect, useState } from 'react';
import { ButtonTabsProps, KeyType } from './interface';
import { ButtonTabsContextProvider } from './context';
import ButtonSwitch from '../ButtonSwitch';
import MellowCard from '../MellowCard';
const ButtonTabs: React.FC<ButtonTabsProps> = (props) => {
const {
options = [],
onChange = undefined,
value,
size = 'small',
extra,
defaultValue,
children,
...rest
} = props;
const initValue = 'value' in props ? props.value : defaultValue;
const [switchValue, setSwitchValue] = useState<KeyType>(initValue);
useEffect(() => {
if ('value' in props) {
setSwitchValue(value);
}
}, [value]);
const triggerChange = (next: KeyType) => {
if (onChange) {
onChange(next);
}
};
const handleButtonSwitchChange = (next: KeyType) => {
if (!('value' in props)) {
setSwitchValue(next);
}
triggerChange(next);
};
return (
<MellowCard
title={extra}
extra={(
<ButtonSwitch
options={options}
onChange={handleButtonSwitchChange}
value={switchValue}
size={size}
/>
)}
{...rest}
>
<ButtonTabsContextProvider
value={{
current: switchValue,
}}
>
{children}
</ButtonTabsContextProvider>
</MellowCard>
);
};
export default ButtonTabs;
/*
* @Author: XieZhiXiong
* @Date: 2021-07-05 17:08:26
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-07-05 18:06:08
* @Description:
*/
import React from 'react';
import { ButtonTabsItemProps } from './interface';
import ButtonTabsContext from './context';
const ButtonTabsItem: React.FC<ButtonTabsItemProps> = (props) => {
const { activeKey, children, style, ...rest } = props;
const context = React.useContext(ButtonTabsContext);
return (
<div
{...rest}
key={activeKey}
style={{
...style,
display: context.current === activeKey ? 'block' : 'none',
}}
>
{children}
</div>
);
};
export default ButtonTabsItem;
/*
* @Author: XieZhiXiong
* @Date: 2021-07-05 17:30:25
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-07-05 17:30:25
* @Description:
*/
import * as React from 'react';
import { ButtonTabsContextProps } from './interface';
const ButtonTabsContext = React.createContext<ButtonTabsContextProps | null>(null);
export const ButtonTabsContextProvider = ButtonTabsContext.Provider;
export default ButtonTabsContext;
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2021-06-15 17:13:25
* @Date: 2021-07-05 17:10:21
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-06-15 17:19:58
* @Description: Radio.Button 选项卡
* @LastEditTime: 2021-07-05 17:10:21
* @Description:
*/
import React from 'react';
import ButtonSwitch, { ButtonSwitchProps } from '../ButtonSwitch';
import styles from './index.less';
import * as React from 'react';
import InternalButtonTabs from './ButtonTabs';
import Item from './ButtonTabsItem';
import {
ButtonTabsProps,
} from './interface';
interface IProps extends ButtonSwitchProps {
export * from './interface';
interface CompoundedComponent extends React.ForwardRefExoticComponent<ButtonTabsProps> {
Item: typeof Item;
}
const ButtonTabs: React.FC = () => {
return (
<div className={styles['button-tabs']}>
<div className={styles['button-tabs-head']}>
<div className={styles['button-tabs-head-extra']}>
我是拓展
</div>
<div className={styles['button-tabs-head-nav']}>
我是拓展
</div>
</div>
</div>
);
const ButtonTabs = InternalButtonTabs as CompoundedComponent;
ButtonTabs.Item = Item;
export {
Item,
};
export default ButtonTabs;
export default ButtonTabs;
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2021-07-05 17:06:56
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-07-05 17:06:57
* @Description:
*/
import { HTMLAttributes } from 'react';
import { ButtonSwitchProps } from '../ButtonSwitch';
import { MellowCardProps } from '../MellowCard';
export type KeyType = string | number;
export interface ButtonTabsItemProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {
/**
* 标识
*/
activeKey: KeyType,
children?: React.ReactNode,
}
export interface ButtonTabsProps extends ButtonSwitchProps, Omit<MellowCardProps, 'extra' | 'onChange' | 'size'> {
/**
* 头部左侧自定义拓展
*/
extra?: React.ReactNode,
/**
* 默认值
*/
defaultValue?: KeyType,
children?: React.ReactNode,
}
export interface ButtonTabsContextProps {
current: KeyType;
}
\ No newline at end of file
......@@ -8,8 +8,7 @@
import React, { useEffect, useState } from 'react';
import PolymericTable from '@/components/PolymericTable';
import { EditableColumns } from '@/components/PolymericTable/interface';
import MellowCard, { MellowCardProps } from '@/components/MellowCard';
import ButtonSwitch from '@/components/ButtonSwitch';
import ButtonTabs, { ButtonTabsProps } from '../ButtonTabs';
const PAGE_SIZE = 10;
......@@ -35,7 +34,7 @@ export interface FetchListParams {
pageSize: number,
}
interface IProps extends MellowCardProps {
interface IProps extends Omit<ButtonTabsProps, 'options'> {
/**
* 外部流转记录数据源,与 fetchOuterList 不能共存
* 如果两个同时存在 outerDataSource 优先
......@@ -202,18 +201,15 @@ const FlowRecords: React.FC<IProps> = (props: IProps) => {
].filter(Boolean);
return (
<MellowCard
title="流转记录"
extra={(
<ButtonSwitch
options={options}
onChange={handleRadioChange}
value={radioValue}
/>
)}
<ButtonTabs
options={options}
extra="流转记录"
defaultValue="inner"
onChange={handleRadioChange}
value={radioValue}
{...rest}
>
{radioValue === 'outer' ? (
<ButtonTabs.Item activeKey="outer">
<PolymericTable
rowKey={outerRowkey}
dataSource={outerList ? outerList.data : []}
......@@ -230,8 +226,8 @@ const FlowRecords: React.FC<IProps> = (props: IProps) => {
)}
onPaginationChange={handleOuterPaginationChange}
/>
) : null}
{radioValue === 'inner' ? (
</ButtonTabs.Item>
<ButtonTabs.Item activeKey="inner">
<PolymericTable
rowKey={innerRowkey}
dataSource={innerList ? innerList.data : []}
......@@ -248,8 +244,8 @@ const FlowRecords: React.FC<IProps> = (props: IProps) => {
)}
onPaginationChange={handleInnerPaginationChange}
/>
) : null}
</MellowCard>
</ButtonTabs.Item>
</ButtonTabs>
);
};
......
......@@ -13,7 +13,7 @@ type resultData = {
lastTypeParams: string,
preview: any,
} & {
[key: string]: string | number,
[key: string]: any,
}
export const usePageStatus = (): resultData => {
......
......@@ -25,7 +25,7 @@
> img {
width: 100%;
height: 100%;
object-fit: contain;
object-fit: cover;
}
}
......
......@@ -2,16 +2,17 @@
* @Author: XieZhiXiong
* @Date: 2021-06-01 18:15:20
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-06-10 16:05:26
* @LastEditTime: 2021-07-05 15:40:34
* @Description: 修改入库资料抽屉
*/
import React from 'react';
import React, { useEffect, useImperativeHandle } from 'react';
import {
Drawer,
Button,
} from 'antd';
import { Radio, Checkbox } from '@formily/antd-components';
import { createAsyncFormActions } from '@formily/antd';
import { ValidateNodeResult } from '@formily/validator';
import NiceForm from '@/components/NiceForm';
import { schema, GroupItem } from './schema';
import AreaSelect from '../../../components/AreaSelect';
......@@ -37,9 +38,13 @@ interface IProps {
onClose: () => void,
}
export interface RefHandle {
validate: () => Promise<Promise<ValidateNodeResult>>,
}
const formActions = createAsyncFormActions();
const ChangeComingDataDrawer: React.FC<IProps> = (props: IProps) => {
const ChangeComingDataDrawer: React.ForwardRefRenderFunction<RefHandle, IProps> = ((props, ref) => {
const {
groups,
visible,
......@@ -59,6 +64,10 @@ const ChangeComingDataDrawer: React.FC<IProps> = (props: IProps) => {
}
};
useImperativeHandle(ref, () => ({
validate: () => formActions.validate('*'),
}));
return (
<Drawer
title="修改入库信息"
......@@ -96,6 +105,8 @@ const ChangeComingDataDrawer: React.FC<IProps> = (props: IProps) => {
/>
</Drawer>
);
};
});
const ChangeComingDataDrawerForWard = React.forwardRef<RefHandle, IProps>(ChangeComingDataDrawer);
export default ChangeComingDataDrawer;
export default ChangeComingDataDrawerForWard;
......@@ -2,10 +2,10 @@
* @Author: XieZhiXiong
* @Date: 2021-06-01 20:03:23
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-06-15 13:54:42
* @LastEditTime: 2021-07-05 16:15:48
* @Description: 补充资质证明抽屉
*/
import React from 'react';
import React, { useMemo } from 'react';
import {
Drawer,
Button,
......@@ -13,7 +13,8 @@ import {
import {
createFormActions,
} from '@formily/antd';
import { DatePicker, Checkbox } from '@formily/antd-components'
import { DatePicker, Checkbox } from '@formily/antd-components';
import { normalizeFiledata } from '@/utils';
import NiceForm from '@/components/NiceForm';
import { schema } from './schema';
import { useBusinessEffects } from '../../../components/QualitiesUploadFormItem/effects';
......@@ -43,7 +44,7 @@ export type FileType = {
url: string,
}
export type ValueType = {
export type SubmitValueType = {
/**
* 文件
*/
......@@ -58,15 +59,38 @@ export type ValueType = {
permanent: number[],
}
export type ValueType = {
/**
* 文件name
*/
name: string,
/**
* 文件url
*/
url: string,
/**
* 到期日
*/
expireDay: string,
/**
* 有效期
*/
permanent: number,
}
interface IProps {
/**
* 值
*/
value: ValueType[],
/**
* 是否可见
*/
visible: boolean,
/**
* Form 确认事件
*/
onSubmit: (values: ValueType[]) => void,
onSubmit: (values: SubmitValueType[]) => void,
/**
* 抽屉关闭事件
*/
......@@ -77,6 +101,7 @@ const formActions = createFormActions();
const UploadQualificationsDrawer: React.FC<IProps> = (props: IProps) => {
const {
value = [],
visible,
onSubmit,
onClose,
......@@ -88,12 +113,20 @@ const UploadQualificationsDrawer: React.FC<IProps> = (props: IProps) => {
}
};
const handleSubmit = (values: { qualities: ValueType[] }) => {
const handleSubmit = (values: { qualities: SubmitValueType[] }) => {
if (onSubmit) {
onSubmit(values.qualities);
}
};
const initialValues = useMemo(() => ({
qualities: value.map((item) => ({
file: item.url ? [normalizeFiledata(item.url)] : [],
expireDay: item.expireDay,
permanent: item.permanent === 1 ? [item.permanent] : [],
})),
}), [value]);
return (
<Drawer
title="补充资质证明"
......@@ -117,6 +150,7 @@ const UploadQualificationsDrawer: React.FC<IProps> = (props: IProps) => {
>
<NiceForm
previewPlaceholder=" "
initialValues={initialValues}
components={{
DatePicker,
Checkbox,
......
......@@ -25,12 +25,12 @@ import {
MEMBER_INNER_COLUMNS,
} from '../constant';
import MemberBasicInfo from '../components/MemberBasicInfo';
import MemberDocIncomingInfo from '../components/MemberDocIncomingInfo';
import PicWrap from '../components/PicWrap';
import DepositDetailsCard from './components/DepositDetailsCard';
const MemberPrVerifyComingDataDetail: React.FC<{}> = () => {
const { validateId } = usePageStatus();
const [memberInfo, setMemberInfo] = useState<GetMemberDepositVerifyDetailResponse>(null);
const [memberInfo, setMemberInfo] = useState<GetMemberDepositVerifyDetailResponse & { depositDetailTexts: any }>(null);
const [infoLoading, setInfoLoaading] = useState(false);
const getBasicInfo = () => {
......@@ -157,8 +157,8 @@ const MemberPrVerifyComingDataDetail: React.FC<{}> = () => {
{/* 入库信息 */}
<Col span={24}>
<DepositDetailsCard
groups={memberInfo?.depositDetails}
<MemberDocIncomingInfo
dataSource={memberInfo?.depositDetailTexts}
id="incomingInfo"
/>
</Col>
......
......@@ -2,10 +2,10 @@
* @Author: XieZhiXiong
* @Date: 2021-05-24 17:01:57
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-06-21 14:31:52
* @LastEditTime: 2021-07-05 16:43:55
* @Description: 审核入库资料
*/
import React, { useState, useEffect } from 'react';
import React, { useState, useEffect, useRef } from 'react';
import {
Row,
Col,
......@@ -32,15 +32,15 @@ import {
MEMBER_INNER_COLUMNS,
} from '../constant';
import MemberBasicInfo from '../components/MemberBasicInfo';
import DepositDetailsCard from './components/DepositDetailsCard';
import MemberDocIncomingInfo from '../components/MemberDocIncomingInfo';
import PicWrap from '../components/PicWrap';
import VerifyComingDataDrawer, { ValueType as VerifyData } from './components/VerifyComingDataDrawer';
import ChangeComingDataDrawer, { ValueType as ComingData } from './components/ChangeComingDataDrawer';
import UploadQualificationsDrawer, { ValueType as QualificationData } from './components/UploadQualificationsDrawer';
import ChangeComingDataDrawer, { ValueType as ComingData, RefHandle } from './components/ChangeComingDataDrawer';
import UploadQualificationsDrawer, { SubmitValueType as QualificationData } from './components/UploadQualificationsDrawer';
const MemberPrVerifyComingDataVerify: React.FC<{}> = () => {
const { validateId } = usePageStatus();
const [memberInfo, setMemberInfo] = useState<GetMemberDepositVerifyDetailResponse>(null);
const [memberInfo, setMemberInfo] = useState<GetMemberDepositVerifyDetailResponse & { depositDetailTexts: any }>(null);
const [infoLoading, setInfoLoaading] = useState(false);
const [visibleVerifyDrawer, setVisibleVerifyDrawer] = useState(false);
const [visibleComingDrawer, setVisibleComingDrawer] = useState(false);
......@@ -49,13 +49,15 @@ const MemberPrVerifyComingDataVerify: React.FC<{}> = () => {
const [qualifications, setQualifications] = useState<QualificationData[]>([]);
const [submitLoading, setSubmitLoading] = useState(false);
const depositRef = useRef<RefHandle | null>(null);
const getBasicInfo = () => {
if (!validateId) {
return;
}
setInfoLoaading(true);
PublicApi.getMemberDepositVerifyDetail({
validateId,
validateId: validateId as string,
}).then(res => {
if (res.code === 1000) {
setMemberInfo(res.data);
......@@ -128,6 +130,15 @@ const MemberPrVerifyComingDataVerify: React.FC<{}> = () => {
handleVisibleQualificationsDrawer(false);
};
const handleVerify = () => {
depositRef?.current?.validate().then(() => {
handleVisibleVerifyDrawer(true);
}).catch(() => {
handleVisibleComingDrawer(true);
message.warning('请填写必要的入库资料');
});
};
const anchorsArr = [
{
key: 'verifySteps',
......@@ -186,7 +197,7 @@ const MemberPrVerifyComingDataVerify: React.FC<{}> = () => {
<Button
type="primary"
icon={<CheckCircleOutlined />}
onClick={() => handleVisibleVerifyDrawer(true)}
onClick={handleVerify}
>
单据审核
</Button>
......@@ -255,8 +266,8 @@ const MemberPrVerifyComingDataVerify: React.FC<{}> = () => {
{/* 入库信息 */}
<Col span={24}>
<DepositDetailsCard
groups={memberInfo?.depositDetails}
<MemberDocIncomingInfo
dataSource={memberInfo?.depositDetailTexts}
id="incomingInfo"
/>
</Col>
......@@ -299,9 +310,11 @@ const MemberPrVerifyComingDataVerify: React.FC<{}> = () => {
visible={visibleComingDrawer}
onClose={() => handleVisibleComingDrawer(false)}
onSubmit={handleComingSubmit}
ref={depositRef}
/>
<UploadQualificationsDrawer
value={memberInfo?.qualities}
visible={visibleQualificationsDrawer}
onClose={() => handleVisibleQualificationsDrawer(false)}
onSubmit={handleQualificationsSubmit}
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2021-05-26 16:52:48
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-07-05 10:40:46
* @LastEditTime: 2021-07-06 10:22:59
* @Description: 申请会员
*/
import React, { useState, useEffect, useRef } from 'react';
......@@ -21,6 +21,7 @@ import { usePageStatus } from '@/hooks/usePageStatus';
import ReutrnEle from '@/components/ReturnEle';
import NiceForm from '@/components/NiceForm';
import MellowCard from '@/components/MellowCard';
import NoData from '@/components/NoData';
import { PublicApi } from '@/services/api';
import { normalizeFiledata, FileData } from '@/utils';
import schema, { GroupItem } from './schema';
......@@ -92,7 +93,7 @@ const MemberQueryApplyMember: React.FC<RouteComponentProps> = (props: any) => {
const { route } = props;
const { upperMemberId, upperRoleId, validateId } = usePageStatus();
const [ticktack, setTicktack] = useState(countDownLen);
const [currenStep, setCurrenStep] = useState(!validateId ? 0 : 1);
const [currenStep, setCurrenStep] = useState(!validateId ? 0 : 2);
const [submitLoading, setSubmitLoading] = useState(false);
const [unsaved, setUnsaved] = useState(false);
const [depositInfo, setDepositInfo] = useState<GroupItem[]>([]);
......@@ -101,7 +102,7 @@ const MemberQueryApplyMember: React.FC<RouteComponentProps> = (props: any) => {
const [agreementLoading, setAgreementLoading] = useState(false);
const [memberInfo, setMemberInfo] = useState<MemberInfo>();
const stepRef = useRef(!validateId ? 0 : 1);
const stepRef = useRef(!validateId ? 0 : 2);
// eslint-disable-next-line no-undef
let timer: NodeJS.Timeout | null = null;
......@@ -130,6 +131,11 @@ const MemberQueryApplyMember: React.FC<RouteComponentProps> = (props: any) => {
});
if (res.code === 1000) {
setDepositInfo(res.data.depositDetails);
if (!res.data.depositDetails || !res.data.depositDetails.length) {
formActions.setFieldState('step3.NO_DEPOSIT', state => {
state.visible = true;
});
}
}
setLoading(false);
};
......@@ -156,12 +162,20 @@ const MemberQueryApplyMember: React.FC<RouteComponentProps> = (props: any) => {
}))
},
});
if (!res.data.groups || !res.data.groups.length) {
formActions.setFieldState('step3.NO_DEPOSIT', state => {
state.visible = true;
});
}
}
setLoading(false);
};
// 获取入库协议
const getDepositAgreement = async () => {
if (validateId) {
return;
}
setAgreementLoading(true);
const res = await PublicApi.getManageContentNoticeFindAllByColumnType({
columnType: `${3}`,
......@@ -293,13 +307,15 @@ const MemberQueryApplyMember: React.FC<RouteComponentProps> = (props: any) => {
>
保存为草稿
</Button> */}
<Button
onClick={() => {
formActions.dispatch('onStepPrevious', {})
}}
>
上一步:确认注册信息
</Button>
{!validateId && (
<Button
onClick={() => {
formActions.dispatch('onStepPrevious', {})
}}
>
上一步:确认注册信息
</Button>
)}
<Button
type="primary"
onClick={async () => {
......@@ -353,6 +369,7 @@ const MemberQueryApplyMember: React.FC<RouteComponentProps> = (props: any) => {
AreaSelect,
QualitiesUpload,
QualitiesUploadFormItem,
NoData,
}}
expressionScope={{
currenStep,
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2021-05-26 17:00:39
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-06-30 09:55:17
* @LastEditTime: 2021-07-05 14:59:46
* @Description:
*/
import { ISchema } from '@formily/antd';
......@@ -19,13 +19,21 @@ export type GroupItem = {
elements: ElementType[],
};
const schema = (groups: GroupItem[], validateId?: number): ISchema => {
const depositSchema: ISchema = {
type: 'object',
properties: {},
};
const depositSchema: ISchema = {
type: 'object',
properties: {
NO_DEPOSIT: {
type: 'object',
visible: false,
'x-component': 'NoData',
'x-component-props': {
content: '您当前无可变更的入库信息',
},
},
},
};
const schema = (groups: GroupItem[], validateId?: number): ISchema => {
(groups || []).forEach((item, index) => {
depositSchema.properties[`CARD_BOX_${index}`] = {
type: 'object',
......@@ -77,10 +85,13 @@ const schema = (groups: GroupItem[], validateId?: number): ISchema => {
}
: null
,
{
title: '确认注册信息',
name: 'step2',
},
!validateId
? {
title: '确认注册信息',
name: 'step2',
}
: null
,
{
title: '填写入库信息',
name: 'step3',
......@@ -110,22 +121,22 @@ const schema = (groups: GroupItem[], validateId?: number): ISchema => {
},
},
},
}
},
step2: {
type: 'object',
properties: {
registerInfo: {
type: 'object',
'x-component': 'Children',
'x-component-props': {
children: '{{RegisterInfo}}'
},
},
},
},
}
: {}
),
step2: {
type: 'object',
properties: {
registerInfo: {
type: 'object',
'x-component': 'Children',
'x-component-props': {
children: '{{RegisterInfo}}'
},
},
},
},
step3: depositSchema,
step4: {
type: 'object',
......
......@@ -201,10 +201,6 @@ const MemberQueryDetailed: React.FC<QueryProps> = props => {
name: '资质证明',
},
{
key: 'inspectInfo',
name: '考察信息',
},
{
key: 'appraisalInfo',
name: '考评信息',
},
......
import React, { useContext, useEffect } from 'react'
import { useModalTable } from '../../model/useModalTable'
import React, { useContext } from 'react'
import { createFormActions, ISchemaFormActions, ISchemaFormAsyncActions } from '@formily/antd'
import { Tooltip } from "antd"
import { PublicApi } from '@/services/api'
import { fetchOrderApi } from '../../api'
import ModalForm, { ModalFormProps } from '@/components/ModalForm'
import ModalForm from '@/components/ModalForm'
import { BidDetailContext } from '@/pages/procurement/_public/bid/context'
import { useHttpRequest } from '@/hooks/useHttpRequest'
import { history } from 'umi'
import { publicBidModalSchema } from '../../schema/modal'
import { QuestionCircleOutlined } from '@ant-design/icons'
import BASE_CONFIG from '../../../../../../../config/base.config.json'
......@@ -35,7 +32,10 @@ const PublicBidModal:React.FC<PublicBidModalProps> = (props) => {
const { publishShop } = value
const result = shopInfo.filter(item => publishShop.includes(item.id))
if(pageStatus === PageStatus.ADD)
pageAction.setFieldValue('inviteTenderShopList', result.map(item => omit(item, ['id'])))
pageAction.setFieldValue('inviteTenderShopList', result.map(item => {
item.shopId = item['id']
return omit(item, ['id'])
}))
else if(pageStatus === PageStatus.EDIT)
pageAction.setFieldValue('inviteTenderShopList', result)
currentRef.current.setVisible(false)
......
......@@ -90,7 +90,6 @@ export const paramsConversionFn = (value) => {
cityName: item.city,
isAllCity: item?.cityCode ? false : true
}
console.log(pageStatus, 'gan')
if(pageStatus === PageStatus.ADD) {
delete param.id
}
......
......@@ -134,17 +134,29 @@ const AddNewBid:React.FC<AddNewBidProps> = (props) => {
if(id) {
params['id'] = id
}
addSchemaAction.getFieldState('deliverAddressId', state => {
if(params?.deliverAddressId) {
params['deliverAddress'] = state.props.enum.filter(item => item['value'] === params['deliverAddressId'])[0]['label']
try {
addSchemaAction.getFieldState('deliverAddressId', state => {
if(params?.deliverAddressId) {
params['deliverAddress'] = state.props.enum.filter(item => item['value'] === params['deliverAddressId'])[0]['label']
}
})
addSchemaAction.getFieldState('templateId', state => {
if(params?.templateId) {
const filtered = state.props.enum.filter(item => item['value'] === params['templateId'])[0]
if(filtered['label']) {
params['templateId'] = filtered['value']
}
}
})
let res = await PublicApi.postPurchaseInviteTenderSaveOrUpdateInviteTender(params)
if(res.code === 1000) {
history.goBack()
} else {
setBtnLoading(false)
}
})
let res = await PublicApi.postPurchaseInviteTenderSaveOrUpdateInviteTender(params)
if(res.code === 1000) {
history.goBack()
} else {
} catch (error) {
setBtnLoading(false)
return message.error('交付地址或评标模板异常')
}
}
......
import { ISchema } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const';
/**
* 除了订单必填字段, 默认
*/
export const tableListSchema: ISchema = {
type: 'object',
properties: {
......
......@@ -67,7 +67,7 @@ const SecondCheckedBid:React.FC<SecondCheckedBidProps> = (props) => {
useStateFilterSearchLinkageEffect(
$,
actions,
'orderNo',
'inviteTenderCode',
FORM_FILTER_PATH,
);
},
......
import { ISchema } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const';
// import { OrderTypeMap } from '@/constants/order';
export const tableListSchema: ISchema = {
type: 'object',
properties: {
orderNo: {
inviteTenderCode: {
type: 'string',
"x-component": 'SearchFilter',
'x-component-props': {
placeholder: '请输入订单编号',
placeholder: '请输入招标编号',
align: 'flex-end',
},
},
......@@ -23,33 +22,17 @@ export const tableListSchema: ISchema = {
}
},
properties: {
orderThe: {
projectName: {
type: 'string',
'x-component-props': {
placeholder: '请输入订单摘要',
placeholder: '请输入招标项目',
}
},
"supplyMembersName": {
type: 'string',
"x-component-props": {
placeholder: '请输入供应会员名称'
}
},
"type": {
type: 'string',
"x-component-props": {
placeholder: '请选择订单类型'
},
// enum: Object.keys(OrderTypeMap).map(item => ({
// label: OrderTypeMap[item],
// value: item,
// }))
},
"[startCreateTime,endCreateTime]": {
"[startTime,endTime]": {
type: 'array',
"x-component": 'DateRangePickerUnix',
'x-component-props': {
placeholder: ['开始时间','结束时间'],
placeholder: ['发布开始时间','发布结束时间'],
},
},
submit: {
......
......@@ -48,8 +48,8 @@ const DescriptionsInfo: React.FC<BasicInfoProps> = ({cardTitle, type}) => {
span: 8,
fieldList: [
{ title: '招标编号:', name: 'code' },
{ title: '外部状态:', name: 'inviteTenderOutStatusValue'},
{ title: '内部状态:', name: 'inviteTenderInStatusValue'},
{ title: '外部状态:', name: 'inviteTenderOutStatusValue', render: () => apiType === 'callForBid' ? data['inviteTenderOutStatusValue'] : _data['submitTenderOutStatusValue']},
{ title: '内部状态:', name: 'inviteTenderInStatusValue', render: () => apiType === 'callForBid' ? data['inviteTenderInStatusValue'] : _data['submitTenderInStatusValue']},
{ title: '发布时间:', name: 'createTime', render: (text) => formatTimeString(text) },
]
},
......@@ -208,15 +208,15 @@ const DescriptionsInfo: React.FC<BasicInfoProps> = ({cardTitle, type}) => {
span: 8,
fieldList: [
{ title: '投标会员:', name: 'memberName', render: () => _data.memberName},
{ title: '联系人姓名:', name: 'name', render: () => _data.submitTenderRegister.name },
{ title: '联系人电话:', name: 'phone', render: () => _data.submitTenderRegister.phone },
{ title: '联系人姓名:', name: 'name', render: () => _data?.submitTenderRegister?.name },
{ title: '联系人电话:', name: 'phone', render: () => _data?.submitTenderRegister?.phone },
]
},
{
span: 8,
fieldList: [
{ title: '电子邮箱:', name: 'email', render: () => _data.submitTenderRegister.email },
{ title: '单位地址:', name: 'address', render: () => `${_data.submitTenderRegister.provinceName}${_data.submitTenderRegister.cityName}${_data.submitTenderRegister.regionName}${_data.submitTenderRegister.address}` },
{ title: '电子邮箱:', name: 'email', render: () => _data?.submitTenderRegister?.email },
{ title: '单位地址:', name: 'address', render: () =>_data?.submitTenderRegister && `${_data.submitTenderRegister.provinceName}${_data.submitTenderRegister.cityName}${_data.submitTenderRegister.regionName}${_data.submitTenderRegister.address}` },
]
}
]
......@@ -231,7 +231,7 @@ const DescriptionsInfo: React.FC<BasicInfoProps> = ({cardTitle, type}) => {
name: 'registerFile',
render: (t, r) => (<div>
{
_data['submitTenderRegister']['registerFile'].map((_item, _i) => <p><a key={`registerFile${_i}`} target="_blank" href={_item.url}><FileFilled /> {_item.name}</a></p>)
_data?.submitTenderRegister && _data['submitTenderRegister']['registerFile'].map((_item, _i) => <p><a key={`registerFile${_i}`} target="_blank" href={_item.url}><FileFilled /> {_item.name}</a></p>)
}
</div>)
},
......
......@@ -26,7 +26,7 @@ export const processLogResponses = (resData) => {
id: item.taskStep,
name: item.taskName,
operationRole: item.memberRoleName,
isActive: currentOuterStep === 0 ? true : (item.taskStep < currentOuterStep)
isActive: currentOuterStep === 0 ? true : (item.taskStep <= currentOuterStep)
}))
const subTasks = externalTasks.filter(item => item.taskStep === currentOuterStep)
const interiorLogs = subTasks.length ? subTasks[0]['subTasks'].map(item => ({
......
......@@ -63,6 +63,30 @@ export const RelevanceTenderProduct: React.FC<RelateProductDrawerProps> = ({
}
}, [])
useEffect(() => {
if(visible) {
// 清空之前的数据并重置schema
formActions.reset()
setDataIdList([
{
title: '基本信息',
idName: 'basicInfo',
},
{
title: '附件',
idName: 'file',
}
])
setOuterSchema(() => {
let tempSchema: any = {...relevanceSchema}
return {
type: "object",
properties: { "Text_0": tempSchema['properties']['Text_0'], "Text_99": tempSchema['properties']['Text_99'] }
}
})
}
}, [visible])
// 显示当前投标物料信息
useEffect(() => {
if(currentMaterial) {
......@@ -197,17 +221,16 @@ export const RelevanceTenderProduct: React.FC<RelateProductDrawerProps> = ({
formActions.submit(v => {
// 点击确定 设置商品id和商品文件到对应物料行中
let submitMateriel = schemaAction.getFieldValue('submitTenderMateriel')
console.log(v, submitMateriel, selectRow, currentMaterial)
submitMateriel.map(item => {
if(item => item.id === currentMaterial[0]['id']) {
if(item.id === currentMaterial['id']) {
item.file = v['file']
item.commodityId = selectRow[0]['id']
item.commoditySkuId = selectRow[0]['commodityId']
// item.commodityId = selectRow[0]['commodityId']
}
return item
})
console.log(v, submitMateriel, selectRow)
schemaAction.setFieldValue('submitTenderMateriel', submitMateriel)
})
}
......@@ -237,7 +260,7 @@ export const RelevanceTenderProduct: React.FC<RelateProductDrawerProps> = ({
// 子级抽屉点击确定 ~生成动态schema和dataList
const onConfirm = () => {
setChildVisible(false)
console.log('确定', selectRow)
// console.log('确定', selectRow)//////////
formActions.setFieldValue('tenderProduct', selectRow[0])
PublicApi.getProductCommodityGetCommodityAttributeByUnitPriceAndPicId({ unitPriceAndPicId: selectRow[0]['id'] }).then(res => {
console.log(res.data)
......@@ -256,6 +279,7 @@ export const RelevanceTenderProduct: React.FC<RelateProductDrawerProps> = ({
res.data.map((item, index) => {
let tempObj = {
type: "object",
"x-index": ++index,
"x-component": "CustomTitle",
"x-component-props": {
text: item.customerAttribute.name
......@@ -276,6 +300,7 @@ export const RelevanceTenderProduct: React.FC<RelateProductDrawerProps> = ({
for(let i=0; i<sortArr.length; i++){
sortAfter['properties'][sortArr[i]] = origin['properties'][sortArr[i]]
}
console.log(sortAfter, 'sortAfter')
return sortAfter
})
})
......
......@@ -124,7 +124,8 @@ const AddTender:React.FC<AddTenderProps> = (props) => {
}
})
if(!judgementByCount || judgementByCount.includes(false)){
throw new Error('请填写商品单价')
// throw new Error('请填写商品单价')
return message.error('请填写商品单价')
}
if(value?.id) params.id = value.id
const res = await PublicApi.postPurchaseSubmitTenderSaveSubmitTender(params)
......
import React, { useState } from 'react'
import { ISchemaFormActions, ISchemaFormAsyncActions } from '@formily/antd';
import { Button, message } from 'antd';
import { Button, message, Spin } from 'antd';
import { productInfoColumns } from '../constant';
import ProductTableCell, { ProductEditableRow } from '../components/productTableCell';
import { CaretDownOutlined, CaretRightOutlined } from '@ant-design/icons';
......@@ -142,13 +142,14 @@ export const useProductTable = (ctx: ISchemaFormActions | ISchemaFormAsyncAction
</Row>
</div>)
ctx.setFieldValue('submitTenderMateriel', newData)
console.log(item, data)
// console.log(item, data)
}
}
// 嵌套子表格
const productChildren = {
expandedRowRender: record => <p style={{ margin: 0 }}>{record.description}</p>,
// expandedRowRender: record => <p style={{ margin: 0 }}>{record.description}</p>,
expandedRowRender: record => <p style={{ margin: 0 }}>{ record.description || <Spin size="small" style={{margin: '15px auto', width: '100%'}} />}</p>,
rowExpandable: record => record.name !== 'Not Expandable',
expandIcon: ({ expanded, onExpand, record }) =>
expanded ? (
......@@ -157,8 +158,8 @@ export const useProductTable = (ctx: ISchemaFormActions | ISchemaFormAsyncAction
<CaretRightOutlined onClick={e => onExpand(record, e)} />
),
onExpand: (expanded, record) => {
console.log('通过商品Id 查询商品信息显示在嵌套中', record)
if(!record?.commodityId) {
console.log('通过商品Id 查询商品信息显示在嵌套中', record, expanded)
if(!record?.commodityId && expanded) {
return message.error('请先选择关联商品')
}
if(expanded) {
......
......@@ -7,6 +7,7 @@ export const relevanceSchema: ISchema = {
properties: {
Text_0: {
type: "object",
"x-index": 0,
"x-component": "CustomTitle",
"x-component-props": {
text: "基本信息"
......@@ -44,80 +45,9 @@ export const relevanceSchema: ISchema = {
}
}
},
// @todo 动态拼接这里的属性schema
// Text_2: {
// type: "object",
// "x-component": "CustomTitle",
// "x-component-props": {
// text: "产地"
// },
// properties: {
// chan: {
// title: '产地',
// type: 'string',
// readOnly: true,
// }
// }
// },
// Text_3: {
// type: "object",
// "x-component": "CustomTitle",
// "x-component-props": {
// text: "外观尺寸"
// },
// properties: {
// mian: {
// title: '面料',
// type: 'string',
// readOnly: true,
// },
// yan: {
// title: '颜色',
// type: 'string',
// readOnly: true,
// },
// ci: {
// title: '尺码',
// type: 'string',
// readOnly: true,
// }
// }
// },
// Text_4: {
// type: "object",
// "x-component": "CustomTitle",
// "x-component-props": {
// text: "工艺"
// },
// properties: {
// hua: {
// title: '化学处理',
// type: 'string',
// readOnly: true,
// },
// biao: {
// title: '表批量化',
// type: 'string',
// readOnly: true,
// }
// }
// },
// Text_5: {
// type: "object",
// "x-component": "CustomTitle",
// "x-component-props": {
// text: "特殊说明"
// },
// properties: {
// specificInfo: {
// title: '特殊说明',
// type: 'string',
// readOnly: true,
// }
// }
// },
Text_99: {
type: "object",
"x-index": 99,
"x-component": "CustomTitle",
"x-component-props": {
text: "附件"
......
......@@ -27,10 +27,10 @@ const CallForBidsSearchDetailInTender: React.FC = () => {
{ title: '流转记录', id: 'transferRecord', componentName: "BidTransformRecord" },
]
// 没有报名的标 隐藏报名信息、报名文件
if(data?.submitTenderOutStatus === TenderOutWorkState.Not_Invite_Tender_Register) {
anchorTitleList.splice(5, 2)
}
// // 没有报名的标 隐藏报名信息、报名文件
// if(data?.submitTenderOutStatus === TenderOutWorkState.Not_Invite_Tender_Register) {
// anchorTitleList.splice(5, 2)
// }
return (
<div>
......
......@@ -25,10 +25,10 @@ const TenderSearchDetail: React.FC = () => {
{ title: '流转记录', id: 'transferRecord', componentName: "BidTransformRecord" },
]
// 没有完成的标 隐藏中标结果、中标明细
if(data?.inviteTender?.inviteTenderOutStatus !== BidOuterWorkState.Finish_Invite_Tender) {
anchorTitleList.splice(1, 2)
}
// // 没有完成的标 隐藏中标结果、中标明细
// if(data?.inviteTender?.inviteTenderOutStatus !== BidOuterWorkState.Finish_Invite_Tender) {
// anchorTitleList.splice(1, 2)
// }
return (
<div>
......
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