Commit 9f4772db authored by 前端-钟卫鹏's avatar 前端-钟卫鹏

fix: 处理渠道商品上架异常,处理商品修改货品回显异常,对接待/确认支付/待确认支付结果订单微信支付方式

parent b30c65bf
......@@ -72,6 +72,7 @@ export interface IProductModule {
currentPageInStore: IPage;
tabClickItem: any[];
productPriceType: any;
isRecombination: boolean;
setAttributeLists(lists: any[]): void;
setProductName(name: string): void;
......@@ -88,4 +89,5 @@ export interface IProductModule {
setCurrentPageInStore(data: IPage): void;
setTabClickItem(data: any): void;
setProductPriceType(data: any): void;
setIsRecombination(data: boolean): void;
}
......@@ -74,7 +74,8 @@ const PriceAttributeForm: React.FC<Iprops> = (props) => {
selectCategoryId,
productAttributeAndImageParams,
tabClickItem,
setProductPriceType
setProductPriceType,
isRecombination
} = ProductStore
// const memoizedValue = useMemo(() => {
......@@ -322,6 +323,7 @@ const PriceAttributeForm: React.FC<Iprops> = (props) => {
let _tableData: any[] = []
if(combineArray?.length>0){ // length存在 表示表格的行数(有价格属性组合)
console.log(combineArray, selectedGoods)
combineArray.map((_rowArr: any[], i: any) => { // _rowArr 属性值数组
let _tempObj: any = { 索引: i ,商品名称: productName }
Array.isArray(_rowArr) ? _rowArr.map((__rowArr, index) => {
......@@ -329,7 +331,11 @@ const PriceAttributeForm: React.FC<Iprops> = (props) => {
}) : _tempObj[_attributeNameArr[i]||_attributeNameArr[0]] = _rowArr // 当一项变动的时候 找_attributeNameArr可能会找不到 找不到的情况下置为索引0的那项
if(history.location.query?.id){
// 编辑的时候,先指定数据中的货品id,如果是重新组合的不存在id就使用选择的货品中的第一个,如果没有置为0;同理,不存在单价就置为{}
_tempObj['对应货品'] = selectedGoods.length > 0 ? selectedGoods[i].id : 0
if(isRecombination) {
_tempObj['对应货品'] = selectedGoods.length > 0 ? selectedGoods[0].id : 0
} else {
_tempObj['对应货品'] = productInfoByEdit.unitPriceAndPicList[i]?.goods?.id ? productInfoByEdit.unitPriceAndPicList[i].goods.id : 0
}
// 通过 isUpdateAttribute 判断是否需要携带unitPriceAndPicList的id字段
if(!productInfoByEdit.isUpdateAttribute){
_tempObj['规格ID'] = productInfoByEdit.unitPriceAndPicList[i]?.id
......
......@@ -36,7 +36,8 @@ const ProductAttributeForm: React.FC<Iprops> = (props) => {
setProductSelectAttribute,
getProductAttributeFormParamsByEdit,
productInfoByEdit,
clearProductDetailsUnitPriceAndPicListInEdit
clearProductDetailsUnitPriceAndPicListInEdit,
setIsRecombination
} = ProductStore
useEffect(()=>{
......@@ -73,6 +74,7 @@ const ProductAttributeForm: React.FC<Iprops> = (props) => {
* @param {Object} attrItem 属性数据对象
*/
const onChange = (value, attrItem) => {
setIsRecombination(true)
let params = {
customerAttributeId: attrItem.id,
attributeName: attrItem.name,
......
import React, { useState, useEffect, useRef } from 'react'
import React, { useState, useEffect, useRef, useCallback } from 'react'
import {history} from 'umi'
import { Button, message, Upload, Spin } from 'antd'
import cx from 'classnames'
import styles from '../index.less'
import { PlusOutlined, DeleteOutlined } from '@ant-design/icons'
import { UPLOAD_TYPE } from '@/constants'
import ImgCrop from 'antd-img-crop';
import { inject, observer } from 'mobx-react'
import { observer } from 'mobx-react'
import { store } from '@/store'
import { getAuth } from '@/utils/auth'
import ModalForm from '@/components/ModalForm'
import { createFormActions } from '@formily/antd'
import { useHttpRequest } from '@/hooks/useHttpRequest'
import { PublicApi } from '@/services/api'
import { DndProvider } from 'react-dnd'
import { HTML5Backend } from 'react-dnd-html5-backend'
import DragSortImageList from '../components/dragSortImageList'
import update from 'immutability-helper';
const schemaActions = createFormActions()
const ProductDescFormDefualt: React.FC<{}> = (props) => {
const ProductDescFormDefualt: React.FC<{}> = () => {
const [fileImageList, setFileImageList] = useState<any>([])
const [videoList, setVideoList] = useState<any>([])
const [hyperlinkList, setHyperlinkList] = useState<any>([])
const flagRef = useRef<boolean>(false)
const currentRef = useRef<any>({})
const [isLoading, setIsLoading] = useState<boolean>(false) // 上传的加载状态
const { userId, memberId, token } = getAuth() || {}
const { token } = getAuth() || {}
const { ProductStore } = store
const { productInfoByEdit, setProductDescription, selectCategoryId } = ProductStore
const { run, loading } = useHttpRequest(PublicApi.postContractContractSignSaleSignContractCreate, {ctlType: 'none'})
useEffect(()=>{
if(history.location.query?.id){ // 编辑状态下
setFileImageList(productInfoByEdit.commodityRemark?.image)
......@@ -54,6 +66,22 @@ const ProductDescFormDefualt: React.FC<{}> = (props) => {
})
}, [fileImageList, videoList])
const changePosition = useCallback((dragIndex: number, hoverIndex: number) => {
const dragImage = fileImageList[dragIndex]
setFileImageList(
update(fileImageList, {
$splice: [
[dragIndex, 1],
[hoverIndex, 0, dragImage],
],
}),
)
}, [fileImageList])
// useEffect(() => {
// console.log(hyperlinkList)
// }, [hyperlinkList])
const uploadImgProps = {
name: 'file',
action: '/api/file/file/upload',
......@@ -136,6 +164,25 @@ const ProductDescFormDefualt: React.FC<{}> = (props) => {
setFileImageList(imageArr)
}
const handleAddHyperlink = (idx) => {
console.log('添加超链接')
currentRef.current.setVisible(true)
schemaActions.setFieldValue('idx', idx)
}
const handleConfirm = () => {
schemaActions.submit()
}
const handleSubmit = async (value) => {
setHyperlinkList(() => {
let url = [...hyperlinkList]
url[value.idx] = value.hyperlink
return url
})
currentRef.current.setVisible(false)
}
return (<div>
<Spin spinning={isLoading}>
{
......@@ -169,13 +216,17 @@ const ProductDescFormDefualt: React.FC<{}> = (props) => {
</div>
</div>
}
{
{/* 图片拖拽排序 */}
<DndProvider backend={HTML5Backend}>
<DragSortImageList imageList={fileImageList} handleDelete={handleDeleteImage} handleAddlink={handleAddHyperlink} changePosition={changePosition} />
{/* {
fileImageList?.length>0
?
fileImageList.map((item, index)=> <div key={index} className={cx(styles.descriptBox, styles.mediaContentBox)}>
<p className={styles.divImage}><img src={item} /></p>
<div className={styles.rightBtn}>
<Button size="small" onClick={()=>handleDeleteImage(index)} icon={<DeleteOutlined />} />
<Button size="small" onClick={()=>handleAddHyperlink(index)} icon={<LinkOutlined />} />
</div>
</div>
)
......@@ -183,14 +234,13 @@ const ProductDescFormDefualt: React.FC<{}> = (props) => {
<div className={styles.descriptBox}>
<p>图片区域</p>
<div className={styles.rightBtn}>
{/* <Button icon={<PlusOutlined />} /> */}
<Button size="small" icon={<DeleteOutlined />} />
</div>
</div>
}
} */}
</DndProvider>
<div className={styles.descriptBox}>
<div className={styles.middleAddBtn}>
{/* <ImgCrop rotate> */}
<Upload {...uploadImgProps}>
<Button size="small" type="text">
<PlusOutlined />
......@@ -198,10 +248,52 @@ const ProductDescFormDefualt: React.FC<{}> = (props) => {
<br/>
<span>添加图片</span>
</Upload>
{/* </ImgCrop> */}
</div>
</div>
</Spin>
{/* 添加链接模态框 */}
<ModalForm
modalTitle='添加链接'
previewPlaceholder=''
currentRef={currentRef}
schema={{
type: 'object',
properties: {
NO_SUBMIT: {
type: 'object',
"x-component": "mega-layout",
"x-component-props": {
labelAlign: 'left',
labelCol: 6,
},
properties: {
"hyperlink": {
type: "string",
title: "跳转链接",
},
"idx": {
type: "number",
title: "当前索引",
visible: false,
}
}
}
}
}}
actions={schemaActions}
onSubmit={handleSubmit}
confirm={handleConfirm}
modalProps={{
confirmLoading: loading
}}
effects={($, actions) => {
$('onFormInit').subscribe(async () => {
})
}}
/>
</div>)
}
......
import React, { useState, useEffect, useRef } from 'react'
import cx from 'classnames'
import styles from '../../index.less'
import { Button, Tooltip } from 'antd'
import { DeleteOutlined, DragOutlined, LinkOutlined } from '@ant-design/icons'
import { useDrag, useDrop, DropTargetMonitor, XYCoord, DragSourceMonitor } from 'react-dnd';
/**
* 新增商品 商品描述区域 图片拖拽排序
*/
interface RenderProps {
id: number,
key: number,
index: number,
item: string,
handleDelete: (idx: number) => void,
handleAddlink: (idx: number) => void,
changePosition: (dragIdx: number, hoverIdx: number) => void,
}
interface DragItem {
index: number
id: string
type: string
}
const ImageItem: React.FC<RenderProps> = (props) => {
const {id, key, index, item, handleAddlink, handleDelete, changePosition} = props
const ref = useRef<HTMLDivElement>(null)
const [, drop] = useDrop({
accept: 'ImageItem',
hover(item: DragItem, monitor: DropTargetMonitor) {
if (!ref.current) {
return
}
/** 当前拖拽的索引 */
const dragIndex = item.index
/** 拖拽后位置的索引 */
const hoverIndex = index
if (dragIndex === hoverIndex) {
return
}
const hoverBoundingRect = ref.current?.getBoundingClientRect()
const hoverMiddleY =
(hoverBoundingRect.bottom - hoverBoundingRect.top) / 2
const clientOffset = monitor.getClientOffset()
const hoverClientY = (clientOffset as XYCoord).y - hoverBoundingRect.top
if (dragIndex < hoverIndex && hoverClientY < hoverMiddleY) {
return
}
if (dragIndex > hoverIndex && hoverClientY > hoverMiddleY) {
return
}
// console.log(dragIndex, hoverIndex)
changePosition(dragIndex, hoverIndex)
item.index = hoverIndex
},
})
const [{ isDragging }, drag] = useDrag({
item: { type: 'ImageItem', id, index },
collect: (monitor: DragSourceMonitor) => ({
isDragging: monitor.isDragging(),
}),
})
drag(drop(ref))
return <div key={index} className={cx(styles.descriptBox, styles.mediaContentBox)} ref={ref}>
<p className={styles.divImage}><img src={item} /></p>
<div className={styles.rightBtn}>
<Tooltip title="删除图片">
<Button size="small" onClick={()=>handleDelete(index)} icon={<DeleteOutlined />} />
</Tooltip>
<Tooltip title="添加图片链接">
<Button size="small" onClick={()=>handleAddlink(index)} icon={<LinkOutlined />} />
</Tooltip>
<Tooltip title="拖拽排序">
<Button size="small" icon={<DragOutlined />} />
</Tooltip>
</div>
</div>
}
interface DragSortImageListProps {
imageList: string[],
handleDelete: (idx: number) => void,
handleAddlink: (idx: number) => void,
changePosition: (dragIdx: number, hoverIdx: number) => void,
}
const DragSortImageList: React.FC<DragSortImageListProps> = (props) => {
const { imageList, handleDelete, handleAddlink, changePosition } = props
const renderImageList = (item, index) => {
return <ImageItem
id={index}
key={index}
index={index}
item={item}
handleDelete={handleDelete}
handleAddlink={handleAddlink}
changePosition={changePosition}
/>
}
return <div>
{
imageList?.length>0
?
imageList.map((item, index)=> renderImageList(item, index))
:
<div className={styles.descriptBox}>
<p>图片区域</p>
<div className={styles.rightBtn}>
<Button size="small" icon={<DeleteOutlined />} />
</div>
</div>
}
</div>
}
export default DragSortImageList
......@@ -284,7 +284,7 @@ const DirectChannel: React.FC<{}> = () => {
const onChangeUpShop = (values) => {
// 判断上架之前是否有店铺 有即可以上下架
PublicApi.getTemplateWebMemberChannelWebFindCurrMemberChannel().then(res => {
if(res.data.id){
if(res.data?.id){
setCheckedValues(values)
setShopId(res?.data?.id)
}else{
......
......@@ -125,6 +125,11 @@ const Products: React.FC<{}> = () => {
render: (text:any, reocrd:any) => priceTypeLabel[text]
},
{
title: '供应会员',
dataIndex: 'upperMemberName',
key: 'upperMemberName'
},
{
title: '价格',
dataIndex: 'min',
key: 'min',
......
......@@ -3,7 +3,7 @@ import { history } from 'umi'
import { Card, Space, Row, Col, Descriptions, Table, Avatar } from 'antd'
import { PageHeaderWrapper } from '@ant-design/pro-layout'
import ReutrnEle from '@/components/ReturnEle'
import { GlobalConfig } from '@/global/config'
import { CHANNEL_CENTER_URL, } from '@/constants'
import { PublicApi } from '@/services/api'
import { carriageTypeLabel, deliveryTypeLabel, productStatusLabel } from './constant'
......@@ -155,9 +155,11 @@ const ViewDriectChannel: React.FC<{}> = () => {
{/* <a>去查看 &gt;</a> */}
<a
href={
channelDetails?.channelCommodity?.source === 1 ?
`${GlobalConfig.channelRootRoute}/commodity/detail?id=${channelDetails?.channelCommodity?.commodity?.id}&channelId=${btoa(JSON.stringify({ shopId: '', memberId: channelDetails?.channelCommodity?.parentMemberId }))}` :
`/memberCenter/commodityAbility/commodity/products/detail?id=${channelDetails?.channelCommodity?.commodity?.id}`
channelDetails?.channelCommodity?.source === 1
?
`${CHANNEL_CENTER_URL}/m${channelDetails?.channelCommodity?.parentMemberId}/commodity/detail/${channelDetails?.channelCommodity?.commodity?.id}`
:
`/memberCenter/commodityAbility/commodity/products/detail?id=${channelDetails?.channelCommodity?.commodity?.id}`
}
// target="blank"
>去查看 &gt;</a>
......
......@@ -129,7 +129,7 @@ const RemarkBidReport: React.FC<RemarkBidReportProps> = ({editable}) => {
Object.keys(dataBySort).forEach((item, index) => {
let childTableData = []
let childTableColumns = [{
title: '会员', dataIndex: 'memberName', key: 'memberName',
title: '会员', dataIndex: 'memberName', key: 'memberName', width: 256, ellipsis: true,
render: (t, r, i) => renderRanking(t, r, ++i)
},
{
......
......@@ -50,7 +50,7 @@ const readySubmitReportDetail: React.FC = () => {
params.evaluationTenderRecommendList = recommandList.filter(item => !item?.id)
}
params.evaluationTenderFile = fileList
// 在线
// 在线
if(data.isOnlineEvaluation) {
params.evaluationTenderReportMemberList = childTableData?.length ? childTableData[0].map(item => ({ memberId: item.memberId, correctScore: item.modifyTotal })) : []
} else {
......
......@@ -65,6 +65,7 @@ export const useOrderDetail = (options: OrderDetailHookProps) => {
break;
case 'p_readyPayOrder': api = PublicApi.getOrderBuyerValidatePayDetail;
break;
case 's_readyPayResult': api = PublicApi.getOrderVendorValidatePayConfirmDetail;
default:
api = PublicApi.getOrderBuyerDetail;
}
......
......@@ -56,8 +56,8 @@ const OrderMergeInfo: React.FC<OrderMergeInfoProps> = (props) => {
</div>
}
</div>, resetCol: {flex: '1 1 100%'} },
{ title: '包装要求', name: 'requirement', render: (t, d) => d.requirement.detail?.pageRequire || '' },
{ title: '其他要求', name: 'requirement', render: (t, d) => d.requirement.detail?.restsRequire || '' },
{ title: '包装要求', name: 'requirement.pageRequire', render: (t, d) => d.requirement.detail?.pageRequire || '' },
{ title: '其他要求', name: 'requirement.restsRequire', render: (t, d) => d.requirement.detail?.restsRequire || '' },
]
return (
......
......@@ -19,9 +19,9 @@ const OrderPayResultModal:React.FC<OrderPayResultModalProps> = ({type, currentRe
const { data } = useContext(OrderDetailContext)
const { id } = usePageStatus()
const [visible, setVisible] = useState(false)
const canCtlData = data?.paymentInformationResponses.find(v => v.externalState === PayOutWorkState.READY_CONFIRM_RESULT) || {}
const { run, loading } = useHttpRequest(PublicApi.postOrderConfirmedPaymentResultsOrder)
const transData = canCtlData.payOrderUrls ? canCtlData.payOrderUrls : []
const canCtlData = data?.payments.find(v => v.showConfirm) || {}
const { run, loading } = useHttpRequest(PublicApi.postOrderVendorValidatePayConfirm)
const transData = canCtlData.vouchers?.length ? canCtlData.vouchers : []
useEffect(() => {
if (currentRef) {
currentRef.current = {
......@@ -37,9 +37,9 @@ const OrderPayResultModal:React.FC<OrderPayResultModalProps> = ({type, currentRe
const handleConfirm = async (isReady) => {
const params = {
state: isReady,
id: Number(id),
paymentInformationId: canCtlData.id
agree: isReady,
orderId: Number(id),
batchNo: canCtlData.batchNo
}
const { code } = await run(params)
......
......@@ -38,7 +38,7 @@ const ReadyPayResultOrderDetail: React.FC = () => {
/>
</OrderDetailContext.Provider>
</div>
);
};
)
}
export default ReadyPayResultOrderDetail;
......@@ -16,7 +16,7 @@ import '../index.less'
export interface ReadyPayResultProps {}
const fetchTableData = async (params) => {
const { data } = await PublicApi.getOrderConfirmedPaymentResultsOrderList(params)
const { data } = await PublicApi.getOrderVendorValidatePayConfirmPage(params)
return data
}
......
......@@ -59,7 +59,7 @@ export const useSelfTable = () => {
render: (text, record) => {
// 查看订单, 需根据状态显示不同schema
return (
<EyePreview url={`/memberCenter/tranactionAbility/saleOrder/readyPayResult/preview?id=${record.id}`}>
<EyePreview url={`/memberCenter/tranactionAbility/saleOrder/readyPayResult/preview?id=${record.orderId}`}>
{text}
</EyePreview>
)
......@@ -67,9 +67,9 @@ export const useSelfTable = () => {
},
{
title: '订单摘要/下单时间',
align: 'center',
align: 'digest',
dataIndex: 'orderThe',
key: 'orderThe',
key: 'digest',
render: (text, record) => <>
<div>{text}</div>
<div><FieldTimeOutlined />{formatTimeString(record.createTime)}</div>
......@@ -85,40 +85,40 @@ export const useSelfTable = () => {
{
title: '总金额/已支付(元)',
align: 'center',
dataIndex: 'sumPrice',
key: 'sumPrice',
dataIndex: 'amount',
key: 'amount',
render: (text, record) => <Row justify='space-between'>
<Col>
<div><span>总金额:</span><span>{record.sumPrice}</span></div>
<div><span>已支付:</span><span>{record.alreadyPay || 0}</span></div>
<div><span>总金额:</span><span>{text}</span></div>
<div><span>已支付:</span><span>{record.paidAmount || 0}</span></div>
</Col>
<Col style={{ width: 40 }}>
<CircleChart sumPrice={record.sumPrice} alreadyPay={record.alreadyPay} />
<CircleChart sumPrice={text} alreadyPay={record.paidAmount} />
</Col>
</Row>,
width: 200
},
{ title: '已支付', align: 'center', dataIndex: 'alreadyPay', key: 'alreadyPay' },
{ title: '当前支付', align: 'center', dataIndex: 'currentPayments', render: (text, record) => text },
{ title: '已支付', align: 'center', dataIndex: 'paidAmount', key: 'paidAmount' },
{ title: '当前支付', align: 'center', dataIndex: 'batchNo', key: "batchNo" },
{
title: '订单类型',
align: 'center',
dataIndex: 'typeName',
key: 'typeName',
dataIndex: 'orderTypeName',
key: 'orderTypeName',
},
{
title: '外部状态',
align: 'center',
dataIndex: 'externalState',
key: 'externalState',
render: (text, record) => <StatusColors status={text} type='out' text={record['externalStateName']} />,
dataIndex: 'outerStatus',
key: 'outerStatus',
render: (text, record) => <StatusColors status={text} type='out' text={record['outerStatusName']} />,
},
{
title: '内部状态',
align: 'center',
dataIndex: 'purchaseOrderInteriorState',
key: 'purchaseOrderInteriorState',
render: (text, record) => <StatusColors status={text} type='saleInside' text={record['interiorStateName']} />,
dataIndex: 'innerStatus',
key: 'innerStatus',
render: (text, record) => <StatusColors status={text} type='saleInside' text={record['innerStatusName']} />,
},
{
title: '操作',
......@@ -130,7 +130,7 @@ export const useSelfTable = () => {
]
const handleConfirm = async (record) => {
history.push(`/memberCenter/tranactionAbility/saleOrder/readyPayResult/detail?id=${record.id}`)
history.push(`/memberCenter/tranactionAbility/saleOrder/readyPayResult/detail?id=${record.orderId}`)
}
return {
......
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { getOrderType } from '@/pages/transaction/effect';
import { getPurchaseOrderSelectOption } from '@/pages/transaction/effect';
export const tableListSchema: any = () => {
const OrderType = getOrderType()
const res = getPurchaseOrderSelectOption()
if(res) {
const {
orderTypes: OrderType,
} = res
return {
type: 'object',
properties: {
orderNo: {
type: 'string',
"x-component": 'SearchFilter',
'x-component-props': {
placeholder: '请输入订单编号',
align: 'flex-start',
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'flex-layout',
'x-component-props': {
inline: true,
colStyle: {
marginRight: 20
}
},
properties: {
orderThe: {
type: 'string',
'x-component-props': {
placeholder: '请输入订单摘要',
}
return {
type: 'object',
properties: {
orderNo: {
type: 'string',
"x-component": 'SearchFilter',
'x-component-props': {
placeholder: '请输入订单编号',
align: 'flex-start',
},
"memberName": {
type: 'string',
"x-component-props": {
placeholder: '请输入采购会员名称'
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'flex-layout',
'x-component-props': {
inline: true,
colStyle: {
marginRight: 20
}
},
"type": {
type: 'string',
"x-component-props": {
placeholder: '请选择订单类型'
properties: {
"digest": {
type: 'string',
'x-component-props': {
placeholder: '请输入订单摘要',
}
},
enum: OrderType.map(item => ({
label: item['name'],
value: item['status'],
}))
},
"[startCreateTime,endCreateTime]": {
type: 'array',
"x-component": 'DateRangePickerUnix',
'x-component-props': {
placeholder: ['开始时间','结束时间'],
"memberName": {
type: 'string',
"x-component-props": {
placeholder: '请输入采购会员名称'
}
},
},
submit: {
'x-component': 'Submit',
'x-component-props': {
children: '查询',
"orderType": {
type: 'string',
"x-component-props": {
placeholder: '请选择订单类型'
},
enum: OrderType.map(item => ({
label: item['text'],
value: item['id'],
}))
},
"[startDate,endDate]": {
type: 'daterange',
// "x-component": 'DateRangePickerUnix',
'x-component-props': {
placeholder: ['开始时间','结束时间'],
},
},
submit: {
'x-component': 'Submit',
'x-component-props': {
children: '查询',
},
},
},
},
},
}
}
}
}
......@@ -30,6 +30,7 @@ class ProductStore implements IProductModule {
@observable public currentPageInStore: IPage = { current: null, pageSize: null }; // 页码相关
@observable public tabClickItem: any[] = []; // tab标签页点击项
@observable public productPriceType: any = null; // 商品价格类型
@observable public isRecombination: boolean = false; // 编辑时 是否重新属性组合
/** 计算操作 **/
// 加工接口返回的数据,用户编辑回显数据
......@@ -223,6 +224,11 @@ class ProductStore implements IProductModule {
this.productPriceType = data
}
@action.bound
public setIsRecombination(data: boolean) {
this.isRecombination = data
}
}
export default ProductStore
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