Commit ef0fadb0 authored by 前端-黄佳鑫's avatar 前端-黄佳鑫

🐞 fix(询价报价): 修复bug

parent 70120e1b
import React, { Fragment, useCallback, useEffect, useState } from 'react'; import React, { Fragment, useEffect, useState } from 'react';
import { Button, Tag, Badge, Typography, Space, Drawer } from 'antd'; import { Button, Tag, Badge, Typography, Space, Drawer } from 'antd';
import { history } from 'umi'; import { history } from 'umi';
import { ColumnType } from 'antd/lib/table/interface'; import { ColumnType } from 'antd/lib/table/interface';
...@@ -16,6 +16,7 @@ import GeneralLayout from '@/pages/transaction/components/detailLayout/component ...@@ -16,6 +16,7 @@ import GeneralLayout from '@/pages/transaction/components/detailLayout/component
import RecordLyout from '@/pages/transaction/components/detailLayout/components/recordLyout'; import RecordLyout from '@/pages/transaction/components/detailLayout/components/recordLyout';
import ModalOperate from '@/pages/transaction/components/modalOperate'; import ModalOperate from '@/pages/transaction/components/modalOperate';
import { StandardTable } from 'god'; import { StandardTable } from 'god';
import { getAuth } from '@/utils/auth'
const TABLINK = [ const TABLINK = [
{ id: 'progressLayout', title: '流转进度' }, { id: 'progressLayout', title: '流转进度' },
...@@ -207,6 +208,15 @@ const InquiryOfferDetail = () => { ...@@ -207,6 +208,15 @@ const InquiryOfferDetail = () => {
}, },
] ]
const handleJump = (val) => {
const { memberId } = getAuth()
if (val.quoteMemberId === memberId) {
window.open(`/memberCenter/tranactionAbility/inquiryOffer/offerSearch/offer/preview?id=${val.id}`)
} else {
window.open(`memberCenter/tranactionAbility/confirmOffer/offerSearch/offer/preview?id=${val.id}`)
}
}
const hitoryColumns: ColumnType<any>[] = [ const hitoryColumns: ColumnType<any>[] = [
{ {
title: '商品ID', title: '商品ID',
...@@ -264,7 +274,8 @@ const InquiryOfferDetail = () => { ...@@ -264,7 +274,8 @@ const InquiryOfferDetail = () => {
{ {
title: '报价单', title: '报价单',
key: 'quotationNo', key: 'quotationNo',
dataIndex: 'quotationNo' dataIndex: 'quotationNo',
render: (_text, _record) => <Button type='link' onClick={() => handleJump(_record)}>{_text}</Button>
}, },
{ {
title: '外部状态', title: '外部状态',
...@@ -371,7 +382,7 @@ const InquiryOfferDetail = () => { ...@@ -371,7 +382,7 @@ const InquiryOfferDetail = () => {
> >
<StandardTable <StandardTable
columns={hitoryColumns} columns={hitoryColumns}
tableProps={{ rowKey: 'productId' }} tableProps={{ rowKey: 'id' }}
fetchTableData={fetchTableData} fetchTableData={fetchTableData}
/> />
</Drawer> </Drawer>
......
...@@ -113,6 +113,7 @@ const WaitAddInquiry = () => { ...@@ -113,6 +113,7 @@ const WaitAddInquiry = () => {
render: (text: any, record: any) => { render: (text: any, record: any) => {
return ( return (
<> <>
{record.isSubmit && (
<Popconfirm title="确定要提交吗?" okText="是" cancelText="否" onConfirm={() => fetchSubmitBatch(record.id)}> <Popconfirm title="确定要提交吗?" okText="是" cancelText="否" onConfirm={() => fetchSubmitBatch(record.id)}>
<Button <Button
type='link' type='link'
...@@ -120,22 +121,26 @@ const WaitAddInquiry = () => { ...@@ -120,22 +121,26 @@ const WaitAddInquiry = () => {
提交审核 提交审核
</Button> </Button>
</Popconfirm> </Popconfirm>
)}
{record.isUpdate && (
<Button <Button
type="link" type="link"
disabled={record.interiorState !== 1 && record.interiorState !== 6}
onClick={() => history.push(`/memberCenter/tranactionAbility/productInquiry/waitAddInquiry/edit?id=${record.id}`)} onClick={() => history.push(`/memberCenter/tranactionAbility/productInquiry/waitAddInquiry/edit?id=${record.id}`)}
> >
编辑 编辑
</Button> </Button>
)}
{record.isDelete && (
<Popconfirm <Popconfirm
title="确定要删除吗?" title="确定要删除吗?"
okText="是" okText="是"
cancelText="否" cancelText="否"
onConfirm={() => fetchDeleteBatch(record.id)} onConfirm={() => fetchDeleteBatch(record.id)}
disabled={record.interiorState !== 1 && record.externalState !== 1}
> >
<Button disabled={record.interiorState !== 1 && record.externalState !== 1} type="link">删除</Button> <Button disabled={record.interiorState !== 1 && record.externalState !== 1} type="link">删除</Button>
</Popconfirm> </Popconfirm>
)}
</> </>
) )
} }
......
...@@ -5,6 +5,7 @@ import CollapseLayout from './components/collapseLayout'; ...@@ -5,6 +5,7 @@ import CollapseLayout from './components/collapseLayout';
import { isArray, isEmpty } from 'lodash'; import { isArray, isEmpty } from 'lodash';
import ProductLayout from './components/productLayout'; import ProductLayout from './components/productLayout';
import CouponsLayout from '@/pages/transaction/marketingAbility/selfManagement/readySubmitExamine/components/couponsLayout'; import CouponsLayout from '@/pages/transaction/marketingAbility/selfManagement/readySubmitExamine/components/couponsLayout';
import { PublicApi } from '@/services/api';
const layout: any = { const layout: any = {
labelCol: { style: { width: "100px" } }, labelCol: { style: { width: "100px" } },
...@@ -232,6 +233,7 @@ const CouponsListLayout: React.FC<CouponsListLayoutProps> = (props: any) => { ...@@ -232,6 +233,7 @@ const CouponsListLayout: React.FC<CouponsListLayoutProps> = (props: any) => {
<Button type="dashed" block icon={<PlusOutlined />} onClick={handleAppend}>添加</Button> <Button type="dashed" block icon={<PlusOutlined />} onClick={handleAppend}>添加</Button>
{/* 弹框: 优惠券 */} {/* 弹框: 优惠券 */}
<CouponsLayout <CouponsLayout
fieldApi={PublicApi.getMarketingMerchantActivityDetailGoodsCouponSelect}
visible={tableModalVisible} visible={tableModalVisible}
onClose={() => toggle(false)} onClose={() => toggle(false)}
onSubmit={handleCouponSubmit} onSubmit={handleCouponSubmit}
......
...@@ -25,7 +25,7 @@ interface ProductListProps { ...@@ -25,7 +25,7 @@ interface ProductListProps {
activityId?: any, activityId?: any,
form?: FormInstance, form?: FormInstance,
/** umi-hooks */ /** umi-hooks */
focus$?: EventEmitter<void>, focus$?: any,
/** 适用商城 */ /** 适用商城 */
shopIdList?: number[], shopIdList?: number[],
/** 接口 */ /** 接口 */
...@@ -57,10 +57,12 @@ const ProductListLayout: React.FC<ProductListProps> = (props: any) => { ...@@ -57,10 +57,12 @@ const ProductListLayout: React.FC<ProductListProps> = (props: any) => {
}) })
} }
focus$ && focus$.useSubscription((val: optionProps) => { useEffect(() => {
setValue(val.value) if (focus$) {
setValue(focus$)
setDataSource([]) setDataSource([])
}); }
}, [focus$])
/** 删除一个 */ /** 删除一个 */
const handleDelete = (key) => { const handleDelete = (key) => {
......
...@@ -51,6 +51,7 @@ const AddedMarketing = () => { ...@@ -51,6 +51,7 @@ const AddedMarketing = () => {
const [memberType, setMemberType] = useState<any[]>([]); const [memberType, setMemberType] = useState<any[]>([]);
const [activityId, setActivityId] = useState<number>(); const [activityId, setActivityId] = useState<number>();
const [value, setValue] = useState<number>(); const [value, setValue] = useState<number>();
const [prizeList, setPrizeList] = useState<any[]>([]);
const handleGetShopList = (mall) => { const handleGetShopList = (mall) => {
const checkedList = mall.filter(item => item.checked); const checkedList = mall.filter(item => item.checked);
...@@ -98,7 +99,7 @@ const AddedMarketing = () => { ...@@ -98,7 +99,7 @@ const AddedMarketing = () => {
oldMember: (res.allUser.includes(4) ? 1 : 0), oldMember: (res.allUser.includes(4) ? 1 : 0),
memberLevelList, memberLevelList,
shopList: res.shopList, shopList: res.shopList,
productList: res.productList.map(item => { productList: res.productList && res.productList.map(item => {
if (item.couponGroupList) { if (item.couponGroupList) {
return { return {
...item, ...item,
...@@ -178,6 +179,9 @@ const AddedMarketing = () => { ...@@ -178,6 +179,9 @@ const AddedMarketing = () => {
if (data['activityDefinedBO']['attemptEndTime']) { if (data['activityDefinedBO']['attemptEndTime']) {
data['activityDefinedBO']['attemptEndTime'] = moment(data['activityDefinedBO']['attemptEndTime']); data['activityDefinedBO']['attemptEndTime'] = moment(data['activityDefinedBO']['attemptEndTime']);
} }
if (data['activityDefinedBO']['prizeBOList']) {
setPrizeList(data['activityDefinedBO']['prizeBOList'])
}
form.setFieldsValue({ form.setFieldsValue({
allUser: [data.newUser && 1, data.oldUser && 2, data.newMember && 3, data.oldMember && 4], allUser: [data.newUser && 1, data.oldUser && 2, data.newMember && 3, data.oldMember && 4],
activityDefinedBO: data.activityDefinedBO, activityDefinedBO: data.activityDefinedBO,
...@@ -197,7 +201,7 @@ const AddedMarketing = () => { ...@@ -197,7 +201,7 @@ const AddedMarketing = () => {
}, [id]) }, [id])
focus$.useSubscription((val: any) => { focus$.useSubscription((val: any) => {
setValue(val.value); setValue(val.value)
form.resetFields(['activityDefinedBO']); form.resetFields(['activityDefinedBO']);
}); });
...@@ -236,8 +240,8 @@ const AddedMarketing = () => { ...@@ -236,8 +240,8 @@ const AddedMarketing = () => {
<BasicInfoLayout form={form} focus$={focus$} /> <BasicInfoLayout form={form} focus$={focus$} />
<ShopLayout onGetShopList={handleGetShopList} onSetShopList={shopList} /> <ShopLayout onGetShopList={handleGetShopList} onSetShopList={shopList} />
<RulesLayout form={form} focus$={focus$} /> <RulesLayout form={form} focus$={focus$} />
{value !== 10 && (<ProductListLayout activityId={activityId && { activityId: activityId }} form={form} focus$={focus$} shopIdList={shopIdList} fieldApi={PublicApi.getMarketingMerchantActivityDetailGoodsPage} />)} {value !== 10 && (<ProductListLayout activityId={activityId && { activityId: activityId }} form={form} focus$={value} shopIdList={shopIdList} fieldApi={PublicApi.getMarketingMerchantActivityDetailGoodsPage} />)}
{value === 10 && (<PrizeListLayout form={form} />)} {value === 10 && (<PrizeListLayout form={form} prizeList={prizeList} focus$={value} />)}
<PartakeUserLayout onGetLevel={handleGetLevel} onSetLevel={memberLevelList} setMemberType={memberType} /> <PartakeUserLayout onGetLevel={handleGetLevel} onSetLevel={memberLevelList} setMemberType={memberType} />
</Form> </Form>
} }
......
...@@ -65,7 +65,7 @@ const BasicInfoLayout: React.FC<BasicInfoProps> = (props: any) => { ...@@ -65,7 +65,7 @@ const BasicInfoLayout: React.FC<BasicInfoProps> = (props: any) => {
}; };
const handleChange = (e, option) => { const handleChange = (e, option) => {
focus$.emit(option) focus$.emit(option);
} }
return ( return (
......
...@@ -3,7 +3,8 @@ ...@@ -3,7 +3,8 @@
align-items: center; align-items: center;
:global { :global {
.ant-checkbox+span { .ant-checkbox+span,
.ant-radio+span {
flex: 1; flex: 1;
margin-left: 20px; margin-left: 20px;
} }
......
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState, useCallback } from 'react';
import { Drawer, Space, Form, Select, Input, Button, Row, Col, Checkbox, Empty, Pagination } from 'antd'; import { Drawer, Space, Form, Select, Input, Button, Row, Col, Checkbox, Empty, Pagination, Radio } from 'antd';
import { CaretDownOutlined } from '@ant-design/icons'; import { CaretDownOutlined } from '@ant-design/icons';
import { PublicApi } from '@/services/api'; import { PublicApi } from '@/services/api';
import CouponItem from '@/pages/transaction/marketingAbility/components/couponItem'; import CouponItem from '@/pages/transaction/marketingAbility/components/couponItem';
...@@ -15,10 +15,14 @@ interface CouponsLayoutProps { ...@@ -15,10 +15,14 @@ interface CouponsLayoutProps {
onSubmit?: (e: any) => void, onSubmit?: (e: any) => void,
/** 已选择的id */ /** 已选择的id */
value?: any, value?: any,
/** 多选&单选 */
mode?: 'checkbox' | 'radio',
/** 接口api */
fieldApi?: () => Promise<unknown>,
} }
const CouponsLayout: React.FC<CouponsLayoutProps> = (props: any) => { const CouponsLayout: React.FC<CouponsLayoutProps> = (props: any) => {
const { visible, onClose, onSubmit, value } = props; const { visible, onClose, onSubmit, value, mode = 'checkbox', fieldApi } = props;
const [form] = Form.useForm(); const [form] = Form.useForm();
const [state, setState] = useState({ const [state, setState] = useState({
filterSearch: false filterSearch: false
...@@ -32,6 +36,8 @@ const CouponsLayout: React.FC<CouponsLayoutProps> = (props: any) => { ...@@ -32,6 +36,8 @@ const CouponsLayout: React.FC<CouponsLayoutProps> = (props: any) => {
const [chekedId, setCheckedId] = useState<number[]>([]); // 已选择的优惠券 const [chekedId, setCheckedId] = useState<number[]>([]); // 已选择的优惠券
const [selectCouponList, setSelectCouponList] = useState<any[]>([]); // checkbox 勾选到的数据 需要去重 const [selectCouponList, setSelectCouponList] = useState<any[]>([]); // checkbox 勾选到的数据 需要去重
const [couponsList, setCouponsList] = useState<any[]>([]); // 提交的优惠券 const [couponsList, setCouponsList] = useState<any[]>([]); // 提交的优惠券
const [options, setOptions] = useState<any[]>([]); // 选择附属优惠券查询条件
const changeFilterVisible = () => { const changeFilterVisible = () => {
setState({ setState({
filterSearch: !state.filterSearch, filterSearch: !state.filterSearch,
...@@ -41,7 +47,7 @@ const CouponsLayout: React.FC<CouponsLayoutProps> = (props: any) => { ...@@ -41,7 +47,7 @@ const CouponsLayout: React.FC<CouponsLayoutProps> = (props: any) => {
// 提交搜索 // 提交搜索
const handleSubmit = async () => { const handleSubmit = async () => {
await form.validateFields().then(res => { await form.validateFields().then(res => {
PublicApi.getMarketingMerchantActivityDetailGoodsCouponSelect({ ...res, ...params }).then(res => { fieldApi({ ...res, ...params }).then(res => {
if (res.code !== 1000) { if (res.code !== 1000) {
return return
} }
...@@ -58,9 +64,24 @@ const CouponsLayout: React.FC<CouponsLayoutProps> = (props: any) => { ...@@ -58,9 +64,24 @@ const CouponsLayout: React.FC<CouponsLayoutProps> = (props: any) => {
handleSubmit() handleSubmit()
} }
const handleCondition = useCallback(async () => {
await PublicApi.getMarketingMerchantActivityDetailGoodsCouponSelectCondition().then(res => {
if (res.code !== 1000) {
return
}
setOptions(res.data.map(_item => {
return {
label: _item.name,
value: _item.value
}
}))
})
}, [])
useEffect(() => { useEffect(() => {
if (visible) { if (visible) {
handleSubmit() handleSubmit();
handleCondition();
} }
}, [visible, params]) }, [visible, params])
...@@ -81,6 +102,7 @@ const CouponsLayout: React.FC<CouponsLayoutProps> = (props: any) => { ...@@ -81,6 +102,7 @@ const CouponsLayout: React.FC<CouponsLayoutProps> = (props: any) => {
) )
} }
/** checkbox 选择 */
const _setCheckList = (_e, _item) => { const _setCheckList = (_e, _item) => {
const ids = [...chekedId]; const ids = [...chekedId];
const selcetLits = [...selectCouponList]; const selcetLits = [...selectCouponList];
...@@ -93,9 +115,16 @@ const CouponsLayout: React.FC<CouponsLayoutProps> = (props: any) => { ...@@ -93,9 +115,16 @@ const CouponsLayout: React.FC<CouponsLayoutProps> = (props: any) => {
} }
} }
/** radio 选择 */
const _setRadioList = (_e) => {
const { value } = _e.target;
const _item = _e.target['data-item'];
setCheckedId([value])
setSelectCouponList([_item])
}
useEffect(() => { useEffect(() => {
const newData = selectCouponList.filter(_item => chekedId.includes(_item.id)); const newData = selectCouponList.filter(_item => chekedId.includes(_item.id));
console.log(newData, 98)
setCouponsList(newData) setCouponsList(newData)
}, [chekedId]) }, [chekedId])
...@@ -136,12 +165,7 @@ const CouponsLayout: React.FC<CouponsLayoutProps> = (props: any) => { ...@@ -136,12 +165,7 @@ const CouponsLayout: React.FC<CouponsLayoutProps> = (props: any) => {
<Select <Select
style={{ width: '160px' }} style={{ width: '160px' }}
placeholder='优惠劵类型' placeholder='优惠劵类型'
options={[ options={options}
{ label: '通用优惠券', value: 1 },
{ label: '品类优惠券', value: 2 },
{ label: '品牌优惠券', value: 3 },
{ label: '商品优惠券', value: 4 },
]}
/> />
</Form.Item> </Form.Item>
<Form.Item <Form.Item
...@@ -168,6 +192,8 @@ const CouponsLayout: React.FC<CouponsLayoutProps> = (props: any) => { ...@@ -168,6 +192,8 @@ const CouponsLayout: React.FC<CouponsLayoutProps> = (props: any) => {
{couponList.length === 0 ? {couponList.length === 0 ?
<Empty image={Empty.PRESENTED_IMAGE_SIMPLE} /> : ( <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} /> : (
<Row> <Row>
{mode === 'checkbox' && (
<>
{couponList.map((item: any, index: number) => { {couponList.map((item: any, index: number) => {
return ( return (
<Col span={22} key={`Col_${index}`} style={{ marginBottom: 24 }}> <Col span={22} key={`Col_${index}`} style={{ marginBottom: 24 }}>
...@@ -179,8 +205,25 @@ const CouponsLayout: React.FC<CouponsLayoutProps> = (props: any) => { ...@@ -179,8 +205,25 @@ const CouponsLayout: React.FC<CouponsLayoutProps> = (props: any) => {
</Col> </Col>
) )
})} })}
<Col span={24} style={{ display: 'flex' ,justifyContent: 'flex-end'}}> </>
<Pagination size="small" total={total} current={params.current} onChange={handlePagination}/> )}
{mode === 'radio' && (
<Radio.Group style={{ flex: 1 }} onChange={(_e) => _setRadioList(_e)}>
{couponList.map((item: any, index: number) => {
return (
<Col span={22} key={`Col_${index}`} style={{ marginBottom: 24 }}>
<Radio checked={chekedId.includes(item.id)} value={item.id} data-item={item} className={styles.customsCheckbox}>
<CouponItem
fieldListData={item}
/>
</Radio>
</Col>
)
})}
</Radio.Group>
)}
<Col span={24} style={{ display: 'flex', justifyContent: 'flex-end' }}>
<Pagination size="small" total={total} current={params.current} onChange={handlePagination} />
</Col> </Col>
</Row> </Row>
)} )}
......
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import { Form, Table, Tooltip, Button, Select, Input, Popconfirm } from 'antd'; import { Form, Table, Tooltip, Button, Select, Input, Popconfirm } from 'antd';
import { ColumnType } from 'antd/lib/table'; import { ColumnType } from 'antd/lib/table';
import { PlusOutlined, QuestionCircleOutlined } from '@ant-design/icons'; import { EditOutlined, PlusOutlined, QuestionCircleOutlined } from '@ant-design/icons';
import CardLayout from '../card'; import CardLayout from '../card';
import { FormInstance } from 'antd/es/form/Form'; import { FormInstance } from 'antd/es/form/Form';
import { isEmpty } from '@antv/util'; import { isEmpty } from '@antv/util';
import CouponsLayout from '../couponsLayout';
import { PublicApi } from '@/services/api';
const levelList = [ const levelList = [
{ value: 1, name: '一等奖' }, { value: 1, name: '一等奖' },
...@@ -24,20 +26,42 @@ const typeList = [ ...@@ -24,20 +26,42 @@ const typeList = [
interface PrizeListProps { interface PrizeListProps {
form?: FormInstance, form?: FormInstance,
/** 回显数据 */
prizeList?: any[],
/** 活动类型 */
focus$?: number,
} }
const PrizeListLayout: React.FC<PrizeListProps> = (props: any) => { const PrizeListLayout: React.FC<PrizeListProps> = (props: any) => {
const { form } = props; const { form, prizeList, focus$ } = props;
const [dataSource, setDataSource] = useState<any[]>([]); const [dataSource, setDataSource] = useState<any[]>([]);
const [levelIds, setLevelIds] = useState<number[]>([]); const [levelIds, setLevelIds] = useState<number[]>([]);
const [tableModalVisible, setTableModalVisible] = useState<boolean>(false);
const [_type, setType] = useState<number>();
const [_index_, setIndex] = useState<number>();
const toggle = (flag: boolean) => {
setTableModalVisible(flag)
};
/** 更新form回显 */
const handleSetFieldsValue = (prams: any[]) => {
prams.forEach((_item, index) => {
form.setFieldsValue({
[`level_${index}`]: _item.level,
[`type_${index}`]: _item.type,
[`probability_${index}`]: _item.probability,
[`prize_${index}`]: _item.prize,
})
})
}
/** 选择奖项等级 */ /** 选择奖项等级 */
const handleChangeLevel = (e, _index) => { const handleChangeLevel = (e, _index) => {
const fields = [...dataSource]; const fields = [...dataSource];
const ids = [...levelIds]; const ids = [...levelIds];
console.log(ids)
ids[_index] = e; ids[_index] = e;
setLevelIds(ids); setLevelIds(ids);
const newData = fields.map((_item, _i) => { const newData = fields.map((_item, _i) => {
...@@ -52,23 +76,73 @@ const PrizeListLayout: React.FC<PrizeListProps> = (props: any) => { ...@@ -52,23 +76,73 @@ const PrizeListLayout: React.FC<PrizeListProps> = (props: any) => {
setDataSource(newData) setDataSource(newData)
} }
/** 选择奖品类别 */
const handleChangeType = (e, _index) => {
const fields = [...dataSource];
const newData = fields.map((_item, _i) => {
if (_i === _index) {
return {
..._item,
type: e
}
}
return _item
})
setDataSource(newData)
}
/** 输入中奖概率 */
const handleChangeProbability = (e, _index) => {
const { value } = e.target;
const fields = [...dataSource];
const newData = fields.map((_item, _i) => {
if (_i === _index) {
return {
..._item,
probability: Number(value)
}
}
return _item
})
setDataSource(newData)
}
/** 奖项 */
const handleChangePrize = (e, _index) => {
const { value } = e.target;
const fields = [...dataSource];
const newData = fields.map((_item, _i) => {
if (_i === _index) {
return {
..._item,
prize: value
}
}
return _item
})
setDataSource(newData)
}
/** 删除一条奖项 */ /** 删除一条奖项 */
const handleDelete = (_index) => { const handleDelete = (_index, _record) => {
const fields = [...dataSource]; const fields = [...dataSource];
const ids = [...levelIds]; const ids = [...levelIds];
fields.splice(_index, 1) fields.splice(_index, 1)
fields.forEach((_item, index) => { handleSetFieldsValue(fields)
form.setFieldsValue({ if (_record.level) {
[`level_${index}`]: _item.level, setLevelIds(ids.filter(_item => _item !== _record.level))
[`type_${index}`]: _item.type, }
[`probability_${index}`]: _item.probability,
[`prize_${index}`]: _item.prize,
})
})
setLevelIds(ids.splice(_index, 1))
setDataSource(fields) setDataSource(fields)
} }
/** 选择优惠券 */
const handleClickButton = (value, _index) => {
setType(value);
setIndex(_index)
toggle(true);
}
const columns: ColumnType<any>[] = [ const columns: ColumnType<any>[] = [
{ {
title: '奖项等级', title: '奖项等级',
...@@ -100,7 +174,7 @@ const PrizeListLayout: React.FC<PrizeListProps> = (props: any) => { ...@@ -100,7 +174,7 @@ const PrizeListLayout: React.FC<PrizeListProps> = (props: any) => {
name={`type_${_index}`} name={`type_${_index}`}
rules={[{ required: true, message: '请选择奖品类别' }]} rules={[{ required: true, message: '请选择奖品类别' }]}
> >
<Select> <Select onChange={(e) => handleChangeType(e, _index)}>
{typeList.map(_item => ( {typeList.map(_item => (
<Select.Option key={_item.value} value={_item.value}>{_item.name}</Select.Option> <Select.Option key={_item.value} value={_item.value}>{_item.name}</Select.Option>
))} ))}
...@@ -119,9 +193,23 @@ const PrizeListLayout: React.FC<PrizeListProps> = (props: any) => { ...@@ -119,9 +193,23 @@ const PrizeListLayout: React.FC<PrizeListProps> = (props: any) => {
<Form.Item <Form.Item
style={{ margin: 0 }} style={{ margin: 0 }}
name={`probability_${_index}`} name={`probability_${_index}`}
rules={[{ required: true, message: '请输入中奖概率' }]} rules={[{
required: true, validator: (_rule, value) => {
const pattern = /^-?[1-9]\d*(\.\d{1,2})?$/;
if (!value) {
return Promise.reject(new Error('请输入中奖概率'));
}
if (!pattern.test(value)) {
return Promise.reject(new Error(`中奖概率必须大于0最多保留2位小数`));
}
if (Number(value) > 100) {
return Promise.reject(new Error(`中奖概率必须小于或等于100`));
}
return Promise.resolve();
}
}]}
> >
<Input style={{ width: 176 }} addonAfter='%' /> <Input style={{ width: 176 }} addonAfter='%' onChange={(e) => handleChangeProbability(e, _index)} />
</Form.Item> </Form.Item>
) )
}, },
...@@ -138,9 +226,9 @@ const PrizeListLayout: React.FC<PrizeListProps> = (props: any) => { ...@@ -138,9 +226,9 @@ const PrizeListLayout: React.FC<PrizeListProps> = (props: any) => {
<Form.Item <Form.Item
style={{ margin: 0 }} style={{ margin: 0 }}
name={`prize_${_index}`} name={`prize_${_index}`}
rules={[{ required: true, message: '请输选择优惠券' }]} rules={[{ required: true, message: '请输选择商品' }]}
> >
<div>123</div> <Button icon={<EditOutlined />} type='text' onClick={() => handleClickButton(getFieldValue([`type_${_index}`]), _index)}>选择0元购买抵扣劵</Button>
</Form.Item> </Form.Item>
) : getFieldValue([`type_${_index}`]) === 2 ? ( ) : getFieldValue([`type_${_index}`]) === 2 ? (
<Form.Item <Form.Item
...@@ -148,23 +236,45 @@ const PrizeListLayout: React.FC<PrizeListProps> = (props: any) => { ...@@ -148,23 +236,45 @@ const PrizeListLayout: React.FC<PrizeListProps> = (props: any) => {
name={`prize_${_index}`} name={`prize_${_index}`}
rules={[{ required: true, message: '请输选择优惠券' }]} rules={[{ required: true, message: '请输选择优惠券' }]}
> >
<div>123</div> <Button icon={<EditOutlined />} type='text' onClick={() => handleClickButton(getFieldValue([`type_${_index}`]), _index)}>选择优惠券</Button>
</Form.Item> </Form.Item>
) : getFieldValue([`type_${_index}`]) === 3 ? ( ) : getFieldValue([`type_${_index}`]) === 3 ? (
<Form.Item <Form.Item
style={{ margin: 0 }} style={{ margin: 0 }}
name={`prize_${_index}`} name={`prize_${_index}`}
rules={[{ required: true, message: '请输入金额' }]} rules={[{
required: true, validator: (_rule, value) => {
const pattern = /^-?[1-9]\d*(\.\d{1,2})?$/;
if (!value) {
return Promise.reject(new Error('请输入金额'));
}
if (!pattern.test(value)) {
return Promise.reject(new Error(`金额必须大于0最多保留2位小数`));
}
return Promise.resolve();
}
}]}
> >
<Input addonAfter='元' /> <Input addonAfter='元' onChange={(e) => handleChangePrize(e, _index)} />
</Form.Item> </Form.Item>
) : getFieldValue([`type_${_index}`]) === 4 ? ( ) : getFieldValue([`type_${_index}`]) === 4 ? (
<Form.Item <Form.Item
style={{ margin: 0 }} style={{ margin: 0 }}
name={`prize_${_index}`} name={`prize_${_index}`}
rules={[{ required: true, message: '请输入积分' }]} rules={[{
required: true, validator: (_rule, value) => {
const pattern = /^-?[1-9]\d*$/;
if (!value) {
return Promise.reject(new Error('请输入积分'));
}
if (!pattern.test(value)) {
return Promise.reject(new Error(`积分必须大于0`));
}
return Promise.resolve();
}
}]}
> >
<Input addonAfter='积分' /> <Input addonAfter='积分' onChange={(e) => handleChangePrize(e, _index)} />
</Form.Item> </Form.Item>
) : '无'} ) : '无'}
</Form.Item> </Form.Item>
...@@ -178,7 +288,7 @@ const PrizeListLayout: React.FC<PrizeListProps> = (props: any) => { ...@@ -178,7 +288,7 @@ const PrizeListLayout: React.FC<PrizeListProps> = (props: any) => {
render: (_text, _record, _index) => ( render: (_text, _record, _index) => (
<Popconfirm <Popconfirm
title="是否删除?" title="是否删除?"
onConfirm={() => handleDelete(_index)} onConfirm={() => handleDelete(_index, _record)}
> >
<Button type='link'>删除</Button> <Button type='link'>删除</Button>
</Popconfirm> </Popconfirm>
...@@ -196,12 +306,44 @@ const PrizeListLayout: React.FC<PrizeListProps> = (props: any) => { ...@@ -196,12 +306,44 @@ const PrizeListLayout: React.FC<PrizeListProps> = (props: any) => {
prize: null, prize: null,
} }
const field = [...dataSource]; const field = [...dataSource];
setDataSource([...field, field_Obj]); const newData = [...field, field_Obj];
handleSetFieldsValue(newData)
setDataSource(newData);
} }
useEffect(() => {
form.setFieldsValue({
'activityDefinedBO': {
'prizeBOList': dataSource
}
})
}, [dataSource])
useEffect(() => {
if (!isEmpty(prizeList)) {
handleSetFieldsValue(prizeList)
setLevelIds(prizeList.map(_item => {
return _item.level
}))
setDataSource(prizeList)
}
}, [prizeList])
const handleCouponSubmit = (selectRowRecord: any) => {
console.log(selectRowRecord)
toggle(false);
}
useEffect(() => {
if (focus$) {
setLevelIds([])
setDataSource([])
}
}, [focus$])
return ( return (
<CardLayout <CardLayout
id="productListLayout" id="activityProductLayout"
title="奖品设置" title="奖品设置"
weight weight
> >
...@@ -210,13 +352,21 @@ const PrizeListLayout: React.FC<PrizeListProps> = (props: any) => { ...@@ -210,13 +352,21 @@ const PrizeListLayout: React.FC<PrizeListProps> = (props: any) => {
rules={[{ required: true, message: '请选择奖品设置!' }]} rules={[{ required: true, message: '请选择奖品设置!' }]}
> >
<Table <Table
rowKey={(_record, _index) => _index} rowKey={(_record, _index) => `table_${_index + 1}`}
columns={columns} columns={columns}
dataSource={dataSource} dataSource={dataSource}
pagination={false} pagination={false}
/> />
</Form.Item> </Form.Item>
<Button style={{ marginBottom: '16px' }} block type="dashed" icon={<PlusOutlined />} onClick={handleApped}>添加新奖项</Button> <Button style={{ marginBottom: '16px' }} block type="dashed" icon={<PlusOutlined />} onClick={handleApped}>添加新奖项</Button>
{/* 选择优惠券 */}
<CouponsLayout
mode='radio'
fieldApi={_type === 1 ? PublicApi.getMarketingMerchantActivityDetailPrizeCouponSelect : PublicApi.getMarketingMerchantActivityDetailGoodsCouponSelect}
visible={tableModalVisible}
onClose={() => toggle(false)}
onSubmit={handleCouponSubmit}
/>
</CardLayout> </CardLayout>
) )
} }
......
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