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

fix: 去掉小写组件

parent 91f770b5
import React, {useEffect} from 'react'
import { ISchemaFormActions, ISchemaFormAsyncActions } from '@formily/antd'
import { useModalTable } from '../../model/useModalTable'
import ModalTable from '@/components/ModalTable'
import { columnsSetMember } from '../../constant'
import { PublicApi } from '@/services/api'
import {formSearch } from '../../schema'
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch'
import { FORM_FILTER_PATH } from '@/formSchema/const'
import ModalSearch from '@/components/NiceForm/components/Search'
import Submit from '@/components/NiceForm/components/Submit'
import { PageStatus, usePageStatus } from '@/hooks/usePageStatus'
import { clearModalParams } from '@/utils'
export interface MemberModalProps {
type?: 'radio' | 'checkbox',
schemaAction: ISchemaFormActions | ISchemaFormAsyncActions,
currentRef?: any,
}
const MemberModal:React.FC<MemberModalProps> = (props) => {
const { type = "checkbox", schemaAction, currentRef, ...restProps } = props
const {
visible,
setVisible,
rowSelection,
rowSelectionCtl,
} = useModalTable({type, customKey: "memberId"})
const {
id,
preview,
pageStatus
} = usePageStatus()
useEffect(() => {
if (currentRef) {
currentRef.current = {
setVisible,
visible,
rowSelectionCtl
}
}
}, [])
// 添加会员
const handleOkAddMember = () => {
setVisible(false)
// let hasMember: any = schemaAction.setFieldValue('commodityMemberList') || []
// // schemaAction.setFieldValue('commodityMemberList', hasMember.concat(rowSelectionCtl.selectRow))
// schemaAction.setFieldValue('commodityMemberList', rowSelectionCtl.selectRow)
// // rowSelectionCtl.setSelectedRowKeys([])
if(pageStatus === PageStatus.EDIT) {
schemaAction.setFieldState('commodityMemberList', state => {
state.isDelete = true
})
let hasMember: any = schemaAction.getFieldValue('commodityMemberList') || []
schemaAction.setFieldValue('commodityMemberList', hasMember.concat(rowSelectionCtl.selectRow))
rowSelectionCtl.setSelectedRowKeys([])
rowSelectionCtl.setSelectRow([])
} else {
schemaAction.setFieldValue('commodityMemberList', rowSelectionCtl.selectRow)
schemaAction.setFieldState('commodityMemberList', state => {
state.dataSource = rowSelectionCtl.selectRow
})
}
clearModalParams()
}
const handleCancelAddMember = () => {
setVisible(false)
clearModalParams()
}
const fetchMemberList = async (params) => {
const excludeIds = await PublicApi.getProductCommodityGetStrategyMemberByCommodityId({commodityId: schemaAction.getFieldValue("productId")}, {ctlType: 'none'})
let checkedMember = schemaAction.getFieldValue('commodityMemberList')
if(schemaAction.getFieldState('commodityMemberList').isDelete) {
params.excludeList = checkedMember.map(item => ({
memberId: item.memberId,
roleId: item.roleId,
}))
} else {
params.excludeList = excludeIds.data.map(item => ({
memberId: item.memberId,
roleId: item.memberRoleId,
}))
}
const res = await PublicApi.postMemberManageLowerConsumerPage(params, {ctlType: 'none'});
return res.data
}
return (
<ModalTable
modalTitle='选择会员'
confirm={handleOkAddMember}
cancel={handleCancelAddMember}
visible={visible}
columns={columnsSetMember}
rowSelection={rowSelection}
fetchTableData={params => fetchMemberList(params)}
formilyProps={
{
ctx: {
schema: formSearch,
components: {
ModalSearch,
Submit,
},
effects: ($, actions) => {
actions.reset()
useStateFilterSearchLinkageEffect(
$,
actions,
'name',
FORM_FILTER_PATH,
);
},
}
}
}
resetModal={{
destroyOnClose: true
}}
tableProps={{
rowKey: 'memberId'
}}
/>
)
}
MemberModal.defaultProps = {}
export default MemberModal
import React, {useState, useEffect, useRef} from 'react'
import { ISchemaFormActions, ISchemaFormAsyncActions } from '@formily/antd'
import {
PlusOutlined,
MinusOutlined,
} from '@ant-design/icons'
import { Button, Input, Modal, Form, Table, Checkbox, Row, Col, InputNumber } from 'antd'
import { useModalTable } from '../../model/useModalTable'
const layoutSetPrice = {
labelCol: { span: 24 },
wrapperCol: { span: 24 },
}
export interface PriceModalProps {
schemaAction: ISchemaFormActions | ISchemaFormAsyncActions,
currentRef?: any,
}
const PriceModal:React.FC<PriceModalProps> = (props) => {
const { schemaAction, currentRef, ...restProps } = props
const [setPriceForm] = Form.useForm()
const {
visible,
setVisible,
ladderPrice,
setLadderPrice,
isBatchSetting,
setIsBatchSetting,
curretSetPriceRow,
setCurrentSetPriceRow
} = useModalTable()
useEffect(() => {
if (currentRef) {
currentRef.current = {
setVisible,
visible,
ladderPrice,
setLadderPrice,
isBatchSetting,
setIsBatchSetting,
curretSetPriceRow,
setCurrentSetPriceRow
}
}
}, [])
useEffect(() => {
let record = {...curretSetPriceRow}
if(record && JSON.stringify(record)!=="{}" && record.id) {
setVisible(true)
setIsBatchSetting(false)
setPriceForm.resetFields()
// 0-0为 非阶梯
if(Object.keys(record['单价'])[0] === '0-0') {
setLadderPrice(false)
setPriceForm.setFieldsValue({ladderPrice: false, uniquePrice: Object.values(record['单价'])[0]})
} else if(JSON.stringify(record['单价']) === '{}') { // {} 为新增
setLadderPrice(false)
} else { // 编辑
setLadderPrice(true)
let numberArray = Object.keys(record['单价']).map(item => item.split('-').map(_ => Number(_)))
let priceArray = Object.values(record['单价'])
let tempArr = []
numberArray.map((_item, _index) => {
tempArr.push({ numberPrice: priceArray[_index], numberRange: { numberMin: _item[0], numberMax: _item[1] } })
})
setPriceForm.setFieldsValue({ladderPrice: true, ladderRange: tempArr})
}
}
}, [curretSetPriceRow])
useEffect(() => {
if(isBatchSetting) {
setPriceForm.resetFields()
setPriceForm.setFields([{name: 'ladderPrice', value: false}])
currentRef.current.setLadderPrice(false)
}
}, [isBatchSetting])
const changeLadderPrice = (e: any) => {
setLadderPrice(e.target.checked)
setPriceForm.setFields([{name: 'ladderPrice', value: e.target.checked}])
}
const handlePriceOk = () => {
setPriceForm.validateFields().then(v => {
setVisible(false)
let memberUnitPriceList = schemaAction.getFieldValue("memberUnitPriceList")
const { ladderPrice, ladderRange } = v
let _priceRange = {}
if(ladderPrice) { // 判断阶梯价格
ladderRange.length>0 && ladderRange.map(item => {
_priceRange[`${item.numberRange.numberMin}-${item.numberRange.numberMax}`] = item.numberPrice
})
} else {
_priceRange['0-0'] = v.uniquePrice
}
let _row = { ...curretSetPriceRow, 单价: _priceRange }
let newTabeData = [...memberUnitPriceList]
if(isBatchSetting) { // 判断是否批量设置价格
newTabeData.map(item => item['单价'] = _priceRange)
} else {
newTabeData[curretSetPriceRow['索引']] = _row
}
schemaAction.setFieldValue("memberUnitPriceList", newTabeData)
})
}
// 校验阶梯范围
const validatorNumberRange = (rule, value, callback) => {
try {
if(Array.isArray(value)){
let range = value.map(item => {
if(item)
return Object.values(item.numberRange)
}).reduce(
function(a, b) {
return a.concat(b);
},
[]
)
let result = range.map(Number).reduce((a, b) => { if(a<b) return b })
if(!result) throw new Error('请正确输入阶梯数量范围');
if(Number(range[0]) !== schemaAction.getFieldValue("minOrder")) throw new Error('阶段的起始值必须为最小起订数');
callback()
}
} catch (err) {
callback(err)
}
}
return (
<Modal
title={currentRef.current.isBatchSetting ? "批量设置价格" : "设置价格"}
visible={visible}
onOk={handlePriceOk}
onCancel={() => setVisible(false)}
forceRender={true}
{...restProps}
>
<Form
{...layoutSetPrice}
name="settingPrice"
form={setPriceForm}
initialValues={{ladderPrice: false}}
>
<Form.Item
label=""
name="ladderPrice"
valuePropName="checked"
>
<Checkbox onChange={changeLadderPrice}>阶梯价格</Checkbox>
</Form.Item>
{
ladderPrice ? <Form.Item
name="ladderRange"
label=""
shouldUpdate={true}
rules={[
{
required: true,
message: '阶梯范围为必填项'
},
{
validator: validatorNumberRange
}
]}
>
<Form.List name="ladderRange">
{(fields, { add, remove }) => {
if (!fields.length) {
add()
}
return (
<div>
{fields.map(field => (
<Row key={Number(field.key) + 100} gutter={[0, 10]}>
<Col span={20} style={{ display: 'flex' }}>
<Form.Item
{...field}
name={[field.name, 'numberRange', 'numberMin']}
fieldKey={[field.fieldKey, 'numberRange', 'numberMin']}
rules={[
{ required: true, message: '阶梯最小数量为必填项' },
{
pattern: /^\d+(\.\d{1,3})?$/,
message: '阶梯数值仅限三位小数',
}
]}
>
<Input placeholder="最小数量" />
</Form.Item>
<Input
style={{
width: 30,
height: 32,
borderLeft: 0,
borderRight: 0,
pointerEvents: 'none',
}}
placeholder="~"
disabled
/>
<Form.Item
{...field}
name={[field.name, 'numberRange', 'numberMax']}
fieldKey={[field.fieldKey, 'numberRange', 'numberMax']}
rules={[
{ required: true, message: '阶梯最大数量为必填项' },
{
pattern: /^\d+(\.\d{1,3})?$/,
message: '阶梯数值仅限三位小数',
}
]}
>
<Input placeholder="最大数量" />
</Form.Item>
<Form.Item
{...field}
name={[field.name, 'numberPrice']}
fieldKey={[field.fieldKey, 'numberPrice']}
rules={[
{ required: true, message: '阶梯单价为必填项' },
{
pattern: /^\d+(\.\d{1,4})?$/,
message: '阶梯单价仅限四位小数',
}
]}
style={{marginLeft: 20}}
>
<Input placeholder="请输入单价" />
</Form.Item>
</Col>
<Col span={4}>
<Button size="small" onClick={() => add()} style={{ marginLeft: 20, marginRight: 8 }} icon={<PlusOutlined />} />
{field.key > 0 && (<Button size="small" onClick={() => remove(field.name)} icon={<MinusOutlined />} />)}
</Col>
</Row>)
)}
</div>
);
}}
</Form.List>
</Form.Item> : <Form.Item
label="单价"
name="uniquePrice"
rules={[
{
required: true,
type: 'number',
message: '请输入价格'
},
{
pattern: /^\d+(\.\d{1,4})?$/,
message: '小数点后仅限四位',
}
]}
>
<InputNumber min={0} style={{width: '100%'}} placeholder="请输入价格" />
</Form.Item>
}
</Form>
</Modal>
)
}
PriceModal.defaultProps = {}
export default PriceModal
import React, {useState, useEffect, useRef} from 'react'
import { ISchemaFormActions, ISchemaFormAsyncActions } from '@formily/antd'
import { useModalTable } from '../../model/useModalTable'
import ModalTable from '@/components/ModalTable'
import { columnsSetProduct } from '../../constant'
import { GlobalConfig } from '@/global/config'
import { PublicApi } from '@/services/api'
import { formProduct } from '../../schema'
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch'
import { FORM_FILTER_PATH } from '@/formSchema/const'
import ModalSearch from '@/components/NiceForm/components/Search'
import Submit from '@/components/NiceForm/components/Submit'
import CustomCategorySearch from '@/components/NiceForm/components/CustomCategorySearch'
import SearchSelect from '@/components/NiceForm/components/SearchSelect'
import { clearModalParams } from '@/utils'
import { FormEffectHooks } from '@formily/antd'
import { searchCustomerCategoryOptionEffect } from '../../effect'
export interface ProductModalProps {
type?: 'radio' | 'checkbox',
schemaAction: ISchemaFormActions | ISchemaFormAsyncActions,
currentRef?: any,
}
const ProductModal:React.FC<ProductModalProps> = (props) => {
const { type = "radio" ,schemaAction, currentRef, ...restProps } = props
const {
visible,
setVisible,
rowSelection,
rowSelectionCtl,
} = useModalTable({type})
useEffect(() => {
if (currentRef) {
currentRef.current = {
setVisible,
visible,
rowSelectionCtl
}
}
}, [])
// 指定商品
const fetchProductList = async (params) => {
const shopId = schemaAction.getFieldValue('shopId')
let shopInfo: any = GlobalConfig.web.shopInfo.filter(item => item.id === shopId)
const res = await PublicApi.getProductCommodityGetStrategyCommodityList({
...params,
type: shopInfo[0]["type"],
environment: shopInfo[0].environment,
shopId,
// priceTypeList: [1, 2],
})
return res.data
}
// 商品添加弹窗控制
const handleOkAddProduct = async () => {
setVisible(false)
const selectResult = rowSelectionCtl.selectRow[0]
if (!selectResult) {
return null
}
schemaAction.setFieldValue('productName', selectResult.name)
schemaAction.setFieldValue('productId', selectResult.id)
schemaAction.setFieldValue('minOrder', selectResult.minOrder)
clearModalParams()
}
const handleCancel = () => {
setVisible(false)
clearModalParams()
}
return (
<ModalTable
modalTitle='选择商品'
confirm={handleOkAddProduct}
cancel={handleCancel}
visible={visible}
columns={columnsSetProduct}
rowSelection={rowSelection}
fetchTableData={params => fetchProductList(params)}
formilyProps={
{
ctx: {
schema: formProduct,
components: {
ModalSearch,
SearchSelect, Submit,
CustomCategorySearch
},
effects: ($, actions) => {
actions.reset()
useStateFilterSearchLinkageEffect(
$,
actions,
'name',
FORM_FILTER_PATH,
);
FormEffectHooks.onFieldChange$('customerCategoryId').subscribe(state => {
searchCustomerCategoryOptionEffect(actions, 'customerCategoryId')
})
}
}
}
}
resetModal={{
destroyOnClose: true,
}}
tableProps={{
rowKey: 'id',
}}
/>
)
}
ProductModal.defaultProps = {}
export default ProductModal
This diff is collapsed.
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