Commit 6d5e7503 authored by 前端-许佳敏's avatar 前端-许佳敏
parents 7f6e44a9 6cbd2b7c
......@@ -44,13 +44,13 @@ const Relevance = props => {
const tableRowLableKey = tableProps.lableKey || ''; // Input展示用的 key val
const [visible, setVisible] = useState(false);
const [rowSelection, rowCtl] = useRowSelectionTable({ type: selectionType });
const [rowSelection, rowCtl] = useRowSelectionTable({ type: selectionType, customKey: tableRowKey });
useEffect(() => {
// Table 只能缓存 keys
const rowKeys = value.map(item => item[tableRowKey]);
rowCtl.setSelectedRowKeys(rowKeys);
}, [props.value]);
}, [props.value, tableProps.rowKey]);
const handleConfirm = () => {
const rows = rowCtl.selectRow;
......
......@@ -7,6 +7,7 @@ import { StandardTable } from 'god'
import {ColumnType} from 'antd/lib/table/interface';
import ReutrnEle from '@/components/ReturnEle';
import { PublicApi } from '@/services/api';
import { validatorByte } from '@/utils/regExp';
const { Option } = Select;
......@@ -180,9 +181,12 @@ const AddAtttribute: React.FC<{}> = () => {
required: true,
message: '输入属性组名!',
},
{
validator: (r, v, c) => validatorByte(r, v, c, 20)
}
]}
>
<Input maxLength={10} placeholder="输入属性组名" disabled={isSee} />
<Input placeholder="输入属性组名" disabled={isSee} />
</Form.Item>
</Col>
<Col span={18}>
......@@ -202,9 +206,12 @@ const AddAtttribute: React.FC<{}> = () => {
required: true,
message: '输入属性名称!',
},
{
validator: (r, v, c) => validatorByte(r, v, c, 20)
}
]}
>
<Input maxLength={10} placeholder="输入属性名称" disabled={isSee} />
<Input placeholder="输入属性名称" disabled={isSee} />
</Form.Item>
</Col>
<Col span={18}>
......
......@@ -9,6 +9,7 @@ import { PublicApi } from '@/services/api';
import TabTree, { useTreeActions, createTreeActions } from '@/components/TabTree';
import { useTreeTabs } from '@/hooks/useTreeTabs';
import { GetManageAreaAllResponse } from '@/services';
import { validatorByte } from '@/utils/regExp';
const layout = {
labelCol: {
......@@ -202,9 +203,12 @@ const AddPropertyValue: React.FC<{}> = () => {
required: true,
message: '输入属性值名称!',
},
{
validator: (r, v, c) => validatorByte(r, v, c, 12)
}
]}
>
<Input maxLength={12} placeholder="输入属性值名称" disabled={isSee} />
<Input placeholder="输入属性值名称" disabled={isSee} />
</Form.Item>
}
{
......
......@@ -9,6 +9,7 @@ import ReutrnEle from '@/components/ReturnEle';
import styles from './index.less'
import { PublicApi } from '@/services/api';
import { GetProductCustomerGetCustomerCategoryTreeResponse } from '@/services';
import { validatorByte } from '@/utils/regExp';
const { Option } = Select;
const layout = {
......@@ -158,9 +159,12 @@ const AddGoods = () => {
required: true,
message: '请填入货品名称'
},
{
validator: (r, v, c) => validatorByte(r, v, c, 40)
}
]}
>
<Input placeholder="最长20个字符" maxLength={20} disabled={isSee} />
<Input placeholder="最长40个字符20个汉字" disabled={isSee} />
</Form.Item>
<Form.Item
name="type"
......@@ -170,9 +174,12 @@ const AddGoods = () => {
required: true,
message: '请填入规格型号'
},
{
validator: (r, v, c) => validatorByte(r, v, c, 40)
}
]}
>
<Input placeholder="最长20个字符" maxLength={20} disabled={isSee} />
<Input placeholder="最长40个字符20个汉字" disabled={isSee} />
</Form.Item>
{/* <Form.Item
name={['customerCategory', 'id']}
......
......@@ -162,29 +162,18 @@ const AddProducts: React.FC<{}> = (props) => {
if(_productAttributeAndImageParams.length>0){
_productAttributeAndImageParams.map(_item => {
console.log(_item, '_item')
_item.goods = { id: _item.goodsId } // id为0表示无货品
delete _item.goodsId
// if(_item.attributeAndValueList.length>0){
// _item.attributeAndValueList.map(__item => {
// delete __item.customerAttributeName
// // **** 新字段结构变更
// __item.customerAttribute = { id: __item.customerAttributeId }
// __item.customerAttributeValue = { id: __item.id, value: __item.value }
// delete __item.id
// delete __item.value
// delete __item.customerAttributeId
// })
// }
if(_item.commodityPic.length>0){
// 编辑情况下兼顾手动添加图片列表属性
console.log('不一定')
_item.commodityPic = _item.commodityPic.map(__item => __item?.response?.data || __item?.url)
// 多种属性组合 所有属性共用的情况下 每一行都是用第一项
if(isAllAttributePic)
_item.commodityPic = _productAttributeAndImageParams[0].commodityPic
}else{
if(isAllAttributePic && _productAttributeAndImageParams[0].commodityPic.length>0){ //处理所有属性共用
console.log('所有属性共用')
_item.commodityPic = _productAttributeAndImageParams[0].commodityPic
}
else
......@@ -201,7 +190,6 @@ const AddProducts: React.FC<{}> = (props) => {
}else{ // 编辑 没有点击商品图片
_params.unitPriceAndPicList = productInfoByEdit.unitPriceAndPicList
if(clickTabIndex.indexOf("4") !== -1){ // 没有点击图片单单修改了商品价格 取原有的图片和新的价格合成
console.log('仅修改商品价格')
_params.unitPriceAndPicList = priceAttributeParams.map((item, index) => {
return {
goods: { id: item.goodsId },
......
......@@ -17,6 +17,7 @@ import { inject, observer } from 'mobx-react'
// import { IProductModule } from '@/module/productModule'
// import { IStore } from '@/store';
import { store } from '@/store'
import { validatorByte } from '@/utils/regExp';
const { Option } = Select
const layout = {
......@@ -268,9 +269,12 @@ const BasicInfoForm: React.FC<Iprops> = (props) => {
required: true,
message: '商品名称'
},
{
validator: (r, v, c) => validatorByte(r, v, c, 90)
}
]}
>
<Input placeholder="商品名称" maxLength={45} onBlur={e =>onChangeName(e.target.value)}/>
<Input placeholder="商品名称" onBlur={e =>onChangeName(e.target.value)}/>
</Form.Item>
<Form.Item
name="slogan"
......@@ -282,14 +286,17 @@ const BasicInfoForm: React.FC<Iprops> = (props) => {
</Tooltip>
</span>
}
// rules={[
// {
// required: true,
// message: '请填入商品标语'
// },
// ]}
rules={[
// {
// required: true,
// message: '请填入商品标语'
// },
{
validator: (r, v, c) => validatorByte(r, v, c, 90)
}
]}
>
<Input placeholder="请输入商品标语" maxLength={45} />
<Input placeholder="请输入商品标语" />
</Form.Item>
<Form.Item
name="sellingPoint"
......@@ -312,6 +319,7 @@ const BasicInfoForm: React.FC<Iprops> = (props) => {
mode="tags"
placeholder="请输入或选择商品卖点"
maxTagCount={3}
maxTagTextLength={8}
tagRender={tagRender}
/>
</Form.Item>
......
......@@ -2,6 +2,7 @@ import React, { useState, useEffect, useRef } from 'react'
import { history } from 'umi'
import { Form, Select, Radio, Input } from 'antd'
import { store } from '@/store'
import { validatorByte } from '@/utils/regExp'
const { ProductStore } = store
const layout = {
......@@ -60,20 +61,35 @@ const OtherForm: React.FC<Iprops> = (props) => {
<Form.Item
name="marks"
label="唛头"
rules={[
{
validator: (r, v, c) => validatorByte(r, v, c, 50)
}
]}
>
<Input maxLength={25} placeholder="请输入唛头(最长25个字符)" />
<Input placeholder="最长50个字符25个汉字" />
</Form.Item>
<Form.Item
name="packing"
label="包装清单"
rules={[
{
validator: (r, v, c) => validatorByte(r, v, c, 120)
}
]}
>
<TextArea maxLength={120} rows={4} placeholder="最长120个字符" />
<TextArea rows={4} placeholder="最长120个字符60个汉字" />
</Form.Item>
<Form.Item
name="afterService"
label="售后服务"
rules={[
{
validator: (r, v, c) => validatorByte(r, v, c, 300)
}
]}
>
<TextArea maxLength={300} rows={4} placeholder="最长300个字符" />
<TextArea rows={4} placeholder="最长300个字符150个汉字" />
</Form.Item>
</Form>
</>)
......
......@@ -5,6 +5,7 @@ import styles from './index.less'
import { inject, observer } from 'mobx-react'
import { store } from '@/store'
import { validatorByte } from '@/utils/regExp'
const layout = {
labelCol: {
......@@ -166,20 +167,6 @@ const ProductAttributeForm: React.FC<Iprops> = (props) => {
_isDisabled = _isPrice && !_isUpdateAttribute
}
// 校验字节
const validatorByte = (rule, value, callback) => {
try {
let str = value
str = str.replace(/[\u4e00-\u9fa5]/g, 'OO')
if(str.length > 60)
throw new Error('最多输入60个字符,30个汉字');
else
callback()
} catch (err) {
callback(err)
}
}
return (
<>
{
......@@ -253,13 +240,12 @@ const ProductAttributeForm: React.FC<Iprops> = (props) => {
required: true,
message: '此项为必填项'
},{
validator: validatorByte
validator: (r, v, c) => validatorByte(r, v, c, 60)
}]}
>
<TextArea
disabled={_isDisabled}
onChange={(v)=>onChange(v, attrItem)}
maxLength={60}
placeholder="最多输入60个字符,30个汉字"
rows={4}
/>
......
......@@ -150,15 +150,17 @@ const ProductImageForm: React.FC<Iprops> = (props) => {
const handleChange = ({ file, fileList }, index) => {
let _priceAttributeParams = [...priceAttributeParamsByRender]
console.log(_priceAttributeParams, index, '图片更改初始数据')
// console.log(_priceAttributeParams, index, '图片更改初始数据')
setCommonImageList(fileList)
_priceAttributeParams[index].commodityPic = fileList
if(file?.response?.data){ // 服务端是否响应正常url字符
_priceAttributeParams[index].commodityPic = fileList
}
if(!file?.status && file?.status !== 'done'){
let ttt = _priceAttributeParams[index].commodityPic.filter(_ => _.status === 'done')
_priceAttributeParams[index].commodityPic = ttt
setCommonImageList(ttt)
}
console.log(_priceAttributeParams, '图片更改之后数据')
// console.log(_priceAttributeParams, '图片更改之后数据')
setPriceAttributeParamsByRender(_priceAttributeParams)
setProductAttributeAndImageParams(_priceAttributeParams)
}
......
......@@ -181,6 +181,8 @@ const AddMember: React.FC<any> = props => {
areas: filtered,
remark,
detail: rest,
}, {
timeout: 0,
}).then(res => {
if (res.code !== 1000) {
return;
......@@ -212,6 +214,8 @@ const AddMember: React.FC<any> = props => {
areas: filtered,
remark,
detail: rest,
}, {
timeout: 0,
}).then(res => {
if (res.code !== 1000) {
return;
......
......@@ -17,6 +17,7 @@ import ReutrnEle from '@/components/ReturnEle'
import { PublicApi } from '@/services/api'
import { UPLOAD_TYPE } from '@/constants'
import styles from './index.less'
import { validatorByte } from '@/utils/regExp'
const { Step } = Steps;
......@@ -120,7 +121,7 @@ const AddBrand: React.FC<{}> = () => {
setLogoLoading(false)
}
};
// @ts-ignore
const handleChange = ({ fileList }) =>setFileList(fileList)
const handleSave = () => {
......@@ -141,14 +142,12 @@ const AddBrand: React.FC<{}> = () => {
PublicApi.postProductBrandSaveOrUpdateBrand(values).then(res => {
setIsDisabledSave(true)
setIsEnableCheck(false)
//@ts-ignore
setReponseId(res.data)
})
})
}
const handleApplyCheck = () => {
//@ts-ignore
PublicApi.postProductBrandApplyCheckBrand({id: responseId}).then(res=>{
setCurrentStep(1)
setTimeout(() => {
......@@ -213,6 +212,9 @@ const AddBrand: React.FC<{}> = () => {
required: true,
message: '输入品牌名称!',
},
{
validator: (r, v, c) => validatorByte(r, v, c, 20)
}
]}
>
<Input disabled={banSomeField} placeholder="输入品牌名称" />
......
......@@ -107,7 +107,7 @@ export const useSelfTable = () => {
}
const handleAdd = async (record) => {
history.push(`/memberCenter/tranactionAbility/stockSellStorage/addBills?relevanceInvoicesId=${record.id}&invoicesTypeId=S002&relevanceInvoices=1`)
history.push(`/memberCenter/tranactionAbility/stockSellStorage/addBills?orderNo=${record.orderNo}&deliveryAddresId=${record.deliveryAddresId}&relevanceInvoicesId=${record.id}&invoicesTypeId=S002&relevanceInvoices=1`)
}
return {
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-09-16 15:16:47
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-09-22 09:53:36
* @LastEditTime: 2020-09-24 20:11:39
* @Description: 联动逻辑相关
*/
import { FormEffectHooks, FormPath } from '@formily/antd';
......@@ -25,6 +25,7 @@ import {
DOC_TYPE_EXCHANGE_INVOICE,
DOC_TYPE_EXCHANGE_RECEIPT,
PurchaseOrderInsideWorkStateTexts,
DELIVERY_TYPE,
} from '@/constants';
import Search from '@/components/NiceForm/components/Search';
import Submit from '@/components/NiceForm/components/Submit';
......@@ -142,8 +143,8 @@ const afterSaleColumns = [
},
];
// 获取单相关数据
const fetchOrderList = async (params: any) => {
// 获取采购入库单相关数据
const fetchOrderPurchaseReceiptAddList = async (params: any) => {
const res = await PublicApi.getOrderPurchaseReceiptAddList({
...params,
})
......@@ -153,6 +154,17 @@ const fetchOrderList = async (params: any) => {
return [];
};
// 获取销售发货单相关数据
const getOrderSalesInvoiceOrderList = async (params: any) => {
const res = await PublicApi.getOrderSalesInvoiceOrderList({
...params,
})
if (res.code === 1000) {
return res.data;
}
return [];
};
// 获取关联组件对应的 params
const getParams = type => {
const params = {
......@@ -181,43 +193,29 @@ const getParams = type => {
}
},
tableProps: {
rowKey: 'id',
rowKey: 'orderNo',
lableKey: '',
},
};
switch (type) {
// 对应单据 - 订
case DEPENDENT_DOC_ORDER: {
// 采购入库
case DOC_TYPE_PURCHASE_RECEIPT: {
params.modalProps.title = '选择订单';
params.columns = orderColumns;
params.fetchTableData = fetchOrderList;
params.fetchTableData = fetchOrderPurchaseReceiptAddList;
params.formilyProps.ctx.schema = orderBillSchema;
params.tableProps.lableKey = 'orderNo';
break;
}
// 对应单据 - 换货
case DEPENDENT_DOC_EXCHANGE: {
break;
}
// 对应单据 - 退货
case DEPENDENT_DOC_RETURN: {
break;
}
// 对应单据 - 生产
case DEPENDENT_DOC_PRODUCTION: {
break;
}
// 对应单据 - 内部
case DEPENDENT_DOC_INTERNAL: {
// 销售发货单
case DOC_TYPE_SALES_INVOICE: {
params.modalProps.title = '选择订单';
params.columns = orderColumns;
params.fetchTableData = getOrderSalesInvoiceOrderList;
params.formilyProps.ctx.schema = orderBillSchema;
params.tableProps.lableKey = 'orderNo';
break;
}
......@@ -251,7 +249,7 @@ export const useBusinessEffects = (context, actions) => {
const linkage = useLinkageUtils();
// 根据 单据类型 联动 对应单据所选项
onFieldValueChange$('invoicesTypeId').subscribe(fieldState => {
onFieldInputChange$('invoicesTypeId').subscribe(fieldState => {
const newEnum = [...getFieldState('relevanceInvoices', state => state.props.enum)];
switch (fieldState.value) {
......@@ -288,8 +286,21 @@ export const useBusinessEffects = (context, actions) => {
break;
}
}
linkage.value('relevanceInvoices', undefined);
linkage.value('invoicesDetailsRequests', []);
linkage.enum('relevanceInvoices', newEnum);
const orderNoVal = getFieldValue('orderNo');
if (orderNoVal && orderNoVal.length) {
linkage.value('orderNo', []);
}
});
// 根据 单据类型 联动 对应单据所选项
onFieldValueChange$('invoicesTypeId').subscribe(fieldState => {
const params = getParams(fieldState.value);
linkage.componentProps('orderNo', params);
});
onFieldInputChange$('inventoryId').subscribe(fieldState => {
......@@ -298,28 +309,25 @@ export const useBusinessEffects = (context, actions) => {
linkage.value('inventoryRole', current.principal);
}
});
// 对应单据改变
onFieldValueChange$('relevanceInvoices').subscribe(fieldState => {
const params = getParams(fieldState.value);
linkage.componentProps('orderNo', params);
});
// 关联单据改变
onFieldValueChange$('orderNo').subscribe(fieldState => {
const relevanceInvoicesVal = getFieldValue('relevanceInvoices');
const first = fieldState.value && fieldState.value[0];
console.log('first', first)
setFieldValue('memberName', first ? first.memberName : '');
setFieldValue('relevanceInvoicesId', first ? first.id : null);
setFieldValue('deliveryAddresId', first ? first.deliveryAddresId : null);
setFieldValue('address', first ? `${first.fullAddress} ${first.receiverName}/${first.phone}` : '');
setFieldValue('transport', first && first.deliveryType ? DELIVERY_TYPE[first.deliveryType] : '');
if (!first) {
return;
}
}
switch (relevanceInvoicesVal) {
// 对应单据 - 订单
case DEPENDENT_DOC_ORDER: {
setFieldValue('memberName', first.supplyMembersName);
setFieldValue('address', '暂无收货地址');
setFieldValue('transport', '暂无物流方式');
// 根据选择的订单查询 订单对应的商品,并给 Table 的商品下拉框赋值
PublicApi.getOrderProcurementOrderProductList({
id: first.id,
......@@ -391,7 +399,7 @@ export const useBusinessEffects = (context, actions) => {
return `invoicesDetailsRequests.${$1}.price`
}),
state => {
state.value = `¥${current.price}`;
state.value = current.price;
}
);
setFieldState(
......@@ -399,7 +407,7 @@ export const useBusinessEffects = (context, actions) => {
return `invoicesDetailsRequests.${$1}.productCount`
}),
state => {
state.value = '';
state.value = 1;
}
);
setFieldState(
......
......@@ -2,6 +2,7 @@ import React, { useState, useEffect, useRef } from 'react';
import { Button, Card, Spin, message } from 'antd';
import { Radio, ArrayTable } from '@formily/antd-components';
import { history, Prompt } from 'umi';
import moment from 'moment';
import { usePageStatus } from '@/hooks/usePageStatus';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { SaveOutlined, PlusOutlined } from '@ant-design/icons';
......@@ -41,7 +42,16 @@ const {
} = FormEffectHooks;
const AddBills: React.FC<{}> = (props: any) => {
const { pageStatus, preview, id } = usePageStatus();
const {
pageStatus,
preview,
id,
invoicesTypeId,
relevanceInvoices,
orderNo,
deliveryAddresId,
relevanceInvoicesId,
} = usePageStatus();
const [visible, setVisible] = useState(false);
const [productRowSelection, productRowCtl] = useRowSelectionTable({ type: 'checkbox' });
const [billInfo, setBillInfo] = useState(null);
......@@ -112,7 +122,17 @@ const AddBills: React.FC<{}> = (props: any) => {
if (res.code !== 1000) {
return;
}
setBillInfo(res.data);
const {
transactionTime,
orderNo,
...rest
} = res.data;
setBillInfo({
transactionTime: transactionTime ? moment(transactionTime) : moment(),
orderNo: orderNo ? [{ orderNo }] : [],
...rest,
invoicesTypeId: 'S001',
});
}).finally(() => {
setInfoLoading(false);
});
......@@ -141,14 +161,38 @@ const AddBills: React.FC<{}> = (props: any) => {
);
useEffect(() => {
if (invoicesTypeId && relevanceInvoices && orderNo && deliveryAddresId && relevanceInvoicesId) {
setBillInfo({
invoicesTypeId,
relevanceInvoices: +relevanceInvoices,
orderNo: orderNo ? [{ orderNo, id: +relevanceInvoicesId }] : [],
deliveryAddresId: +deliveryAddresId,
});
}
getBillInfo();
}, []);
const handleSubmit = value => {
const { invoicesTypeId, orderNo, transactionTime, ...rest } = value;
const {
invoicesTypeId,
orderNo,
transactionTime,
receiverName,
address,
transport,
invoicesDetailsRequests = [],
...rest
} = value;
const newInvoicesDetailsRequests = invoicesDetailsRequests.map(item => ({
...item,
productCount: +item.productCount,
}));
const payload = {
orderNo: orderNo[0].id,
transactionTime: transactionTime ? transactionTime.format('YYYY-MM-DD HH:mm:ss') : '',
orderNo: orderNo[0].orderNo,
relevanceInvoicesId: orderNo[0].id,
transactionTime: transactionTime ? transactionTime.valueOf() : null,
invoicesDetailsRequests: newInvoicesDetailsRequests,
...rest,
};
......@@ -177,7 +221,22 @@ const AddBills: React.FC<{}> = (props: any) => {
// 销售发货单
case DOC_TYPE_SALES_INVOICE: {
if (!id) {
PublicApi.postOrderSalesInvoiceOrder(payload)
.then(res => {
if (res.code !== 1000) {
return;
}
setUnsaved(false);
setTimeout(() => {
history.goBack();
}, 800);
}).finally(() => {
setSubmitLoading(false);
});
} else {
// update action
}
break;
}
......@@ -228,16 +287,17 @@ const AddBills: React.FC<{}> = (props: any) => {
const handleOkAddProduct = async () => {
const values = productRowCtl.selectRow.map(item => ({
itemNo: item.code,
itemNmae: item.name,
goodsId: item.id,
itemName: item.name,
specifications: item.type,
category: item.customerCategory.name,
brand: item.brand.name,
unit: item.unitName,
costPrice: `¥${item.costPrice}`,
costPrice: item.costPrice,
productName: undefined,
productId: '',
price: '',
productCount: '',
price: 0,
productCount: 0,
amount: '',
}));
addSchemaAction.setFieldValue('invoicesDetailsRequests', values);
......@@ -285,6 +345,7 @@ const AddBills: React.FC<{}> = (props: any) => {
>
<Card>
<NiceForm
initialValues={billInfo}
expressionScope={{
tableAddButton,
}}
......
......@@ -331,6 +331,11 @@ export const addBillSchema: ISchema = {
title: '会员名称',
default: '',
},
// 不用于展示,只用于收集值
deliveryAddresId: {
type: 'string',
display: false,
},
address: {
type: 'string',
'x-component': 'Text',
......
......@@ -4,6 +4,7 @@ import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { Button, Card, Dropdown, Menu, Space, Badge, Popconfirm } from 'antd';
import { PlusOutlined, DownOutlined, DeleteOutlined, RollbackOutlined, SnippetsOutlined, ZoomOutOutlined } from '@ant-design/icons';
import { StandardTable } from 'god';
import moment from 'moment';
import { ColumnType } from 'antd/lib/table/interface';
import EyePreview from '@/components/EyePreview';
import NiceForm from '@/components/NiceForm';
......@@ -175,7 +176,6 @@ const Bills: React.FC<{}> = () => {
title: '单据号',
dataIndex: 'invoicesNo',
align: 'center',
key: 'invoicesNo',
render: (text: any, record: any) => (
<EyePreview
url={`/memberCenter/tranactionAbility/stockSellStorage/addBills?id=${record.id}&preview=1`}
......@@ -206,25 +206,22 @@ const Bills: React.FC<{}> = () => {
title: '对应仓库',
align: 'center',
dataIndex: 'inventory',
key: 'inventory',
},
{
title: '交易时间',
align: 'center',
dataIndex: 'transactionTime',
key: 'transactionTime',
render: text => text ? moment(text).format('YYYY-MM-DD HH:mm:ss') : '',
},
{
title: '订单号',
align: 'center',
dataIndex: 'orderNo',
key: 'orderNo',
},
{
title: '单据状态',
align: 'center',
dataIndex: 'state',
key: 'state',
filters: [
{ text: DOC_STATUS[DOC_STATUS_UNREVIEWED], value: DOC_STATUS_UNREVIEWED },
{ text: DOC_STATUS[DOC_STATUS_REVIEWED], value: DOC_STATUS_REVIEWED },
......
......@@ -17,6 +17,8 @@ import RuleSetting from './components/RuleSetting'
const addSchemaAction = createFormActions()
const AddRule:React.FC<{}> = (props) => {
const [isDisabled, setIsDisabled] = useState<boolean>(false)
const {
id,
preview,
......@@ -25,7 +27,7 @@ const AddRule:React.FC<{}> = (props) => {
// 整体表单提交
const formSubmit = async (values) => {
console.log(values)
setIsDisabled(true)
values.products = values.products.map(item => ({
productId: item.id,
commodityId: item.commodityId,
......@@ -33,17 +35,25 @@ const AddRule:React.FC<{}> = (props) => {
customerCategoryName: item.customerCategoryName,
priceType: item.priceType,
brandName: item.brandName
}))
}))
values.isElectronicContract = values.isElectronicContract ? 1 : 0
const params = omit(values, ['state']) // 移除不需要的字段
addSchemaAction.getFieldState('transactionProcesssId', state => {
let dataSource = state.dataSource.filter(item => params.transactionProcesssId === item.id)
params.transactionProcess = dataSource[0].name
})
let res: any = {}
if(pageStatus === PageStatus.EDIT){
await PublicApi.postOrderTradingRulesUpdata(params)
res = await PublicApi.postOrderTradingRulesUpdata(params)
}else if(pageStatus === PageStatus.ADD){
await PublicApi.postOrderTradingRulesAdd(params)
res = await PublicApi.postOrderTradingRulesAdd(params)
}
setTimeout(() => {
if(res.code === 1000){
setIsDisabled(false)
history.goBack(-1)
}, 1000)
}
}
return (
......@@ -57,7 +67,7 @@ const AddRule:React.FC<{}> = (props) => {
onClick={() => addSchemaAction.submit()}
type="primary"
icon={<SaveOutlined />}
disabled={pageStatus === PageStatus.PREVIEW}
disabled={pageStatus === PageStatus.PREVIEW || isDisabled}
>
保存
</Button>,
......
......@@ -87,7 +87,7 @@ const RuleSetting:React.FC<RuleSettingProps> = (props) => {
key: 'name',
render: (_, record) => <EyePreview url={`/memberCenter/commodityAbility/commodity/products/viewProducts?id=${record.commodityId}`}>{_}</EyePreview>
},
{
{
dataIndex: 'customerCategoryName',
title: '品类',
key: 'customerCategoryName'
......@@ -245,7 +245,6 @@ const RuleSetting:React.FC<RuleSettingProps> = (props) => {
}
addSchemaAction.setFieldValue('isElectronicContract', data.isElectronicContract ? true : false)
addSchemaAction.setFieldValue('transactionProcesssId', data.transactionProcesssId)
console.log(data)
addSchemaAction.setFieldValue('isTacitlyApprove', data.isTacitlyApprove)
setInitialValue(data)
}
......
......@@ -28,14 +28,7 @@ const TransactionRules: React.FC<{}> = () => {
})
})
}
// id
// name
// state
// 状态:1.有效 0.无效
// transactionProcess
// operationTime
const columns: ColumnType<any>[] = [
{
title: '交易规则ID',
......
......@@ -52,7 +52,6 @@ export const ruleDetailSchema: ISchema = padRequiredMessage({
"transactionProcesssId": {
type: 'string',
title: '流程选择',
"x-component": 'SelectProcesss',
"x-mega-props": {
style: {
......@@ -65,10 +64,9 @@ export const ruleDetailSchema: ISchema = padRequiredMessage({
"x-rules": [
{
required: true,
message: '请选择收货方式'
message: '请选择流程配置'
}
],
// required: true,
// "x-component": 'SearchSelect',
// "x-component-props": {
......
import { values } from 'mobx';
/**
* @param str:string 需要校验的字符串
* @param type:string 需要校验的类型
......@@ -42,3 +43,28 @@ export const checkRegExp = (str:string, type:string) => {
return true;
}
}
/**
* 区别校验 汉字 和 字符 长度
* @param rule
* @param value 表单输入的值
* @param callback
* @param maxByte:number 最大字符数
*/
export const validatorByte = (rule, value, callback, maxByte: number) => {
try {
if(value){
let str = value
str = str.replace(/[\u4e00-\u9fa5]/g, 'OO')
if(str.length > maxByte)
throw new Error(`最多输入${maxByte}个字符,${Math.floor(maxByte / 2)}个汉字`);
else
callback()
} else {
callback()
}
} catch (err) {
callback(err)
}
}
\ No newline at end of file
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