@@ -0,0 +1,148 @@ | |||||
import React, { useState,useRef,useEffect } from 'react'; | |||||
import { PlusOutlined} from '@ant-design/icons'; | |||||
import { Modal, Form, Input, Button, Select,Radio,message,Tag,Divider,Space } from 'antd'; | |||||
import { GetByidBomList } from '../service'; | |||||
import { | |||||
EditableProTable, | |||||
ProTable | |||||
} from '@ant-design/pro-table'; | |||||
const GoodsbomFrom = (props) => { | |||||
const { Option, OptGroup } = Select; | |||||
const [dataSource, setDataSource] = useState([]); | |||||
const [editableKeys, setEditableRowKeys] = useState([]); | |||||
const [form] = Form.useForm(); | |||||
useEffect(() => { | |||||
let soredata=[]; | |||||
if(props.BomId){ | |||||
GetByidBomList(props.BomId).then((t)=>{ | |||||
var data=t.data | |||||
if(data.bomEntry.length>0){ | |||||
data.bomEntry.map(x=>{ | |||||
var item={ | |||||
id:x.id, | |||||
bomId:x.bomId, | |||||
batchingId:x.batchingId, | |||||
dosage:x.bomQty | |||||
} | |||||
console.log("item",item) | |||||
soredata.push(item) | |||||
}) | |||||
} | |||||
console.log("soredata",soredata) | |||||
if(soredata.length>0){ | |||||
setEditableRowKeys(soredata.map((item) => item.id)) | |||||
setDataSource(soredata); | |||||
} | |||||
}) | |||||
} | |||||
},[props]) | |||||
const columns=[ | |||||
{ | |||||
title: '主键', | |||||
dataIndex: 'id', | |||||
key: 'id', | |||||
hideInTable: true, | |||||
hideInSearch: true, | |||||
tip: '规则名称是唯一的 key', | |||||
}, | |||||
{ | |||||
title: '配方', | |||||
dataIndex: 'bomId', | |||||
hideInTable: true, | |||||
hideInSearch: true, | |||||
}, | |||||
{ | |||||
title: '物料名称', | |||||
dataIndex: 'batchingId', | |||||
formItemProps: (form, { rowIndex }) => { | |||||
return { | |||||
rules: | |||||
rowIndex > 1 ? [{ required: true, message: '此项为必填项' }] : [], | |||||
}; | |||||
}, | |||||
valueType: 'select', | |||||
fieldProps: { | |||||
showSearch:true, | |||||
options: props.matedata.map((item, index) => {return {label:item.name,value:item.id}}) | |||||
}, | |||||
width: '25%', | |||||
}, | |||||
{ | |||||
title: '用量', | |||||
dataIndex: 'dosage', | |||||
valueType:'digit', | |||||
width: '15%', | |||||
}, | |||||
{ | |||||
title: '操作', | |||||
valueType: 'option', | |||||
width: '15%', | |||||
render: () => { | |||||
return null; | |||||
}, | |||||
}, | |||||
] | |||||
const headleOk=()=>{ | |||||
if(dataSource.length==0){ | |||||
check=false; | |||||
message.error("请选择物料") | |||||
}else{ | |||||
props.onBomBatchingFinish(dataSource); | |||||
setDataSource([]) | |||||
} | |||||
} | |||||
return ( | |||||
<Modal | |||||
title={'配方详情'} | |||||
width={1040} | |||||
visible={props.BomBatchingVisible} | |||||
bodyStyle={{ padding: '32px 40px 1px 48px' }} | |||||
okText="确认" | |||||
cancelText="取消" | |||||
onOk={headleOk} | |||||
onCancel={() => { | |||||
props.onBomBatchingCancel(); | |||||
}} | |||||
destroyOnClose | |||||
> | |||||
<EditableProTable | |||||
columns={columns} | |||||
rowKey="id" | |||||
value={dataSource} | |||||
onChange={setDataSource} | |||||
recordCreatorProps={{ | |||||
newRecordType: 'dataSource', | |||||
record: () => ({ | |||||
id: Date.now(), | |||||
bomId:props.BomId | |||||
}), | |||||
}} | |||||
editable={{ | |||||
type: 'multiple', | |||||
editableKeys, | |||||
actionRender: (row, config, defaultDoms) => { | |||||
return [defaultDoms.delete,defaultDoms.Button]; | |||||
}, | |||||
onValuesChange: (record, recordList) => { | |||||
setDataSource(recordList); | |||||
}, | |||||
onDelete:async (key, row) =>{ | |||||
console.log(key) | |||||
console.log(row) | |||||
}, | |||||
onChange: setEditableRowKeys, | |||||
}}/> | |||||
</Modal> | |||||
//vessels | |||||
); | |||||
}; | |||||
export default GoodsbomFrom; |
@@ -8,15 +8,11 @@ import { | |||||
} from '@ant-design/pro-table'; | } from '@ant-design/pro-table'; | ||||
const GoodsbomFrom = (props) => { | const GoodsbomFrom = (props) => { | ||||
const { Option, OptGroup } = Select; | const { Option, OptGroup } = Select; | ||||
const [selectedRows, setSelectedRows] = useState([]); | |||||
const [getGoodsBoms, setGoodsBoms] = useState([]); | |||||
const [checkvalue, setCheckvalue] = useState([]); | const [checkvalue, setCheckvalue] = useState([]); | ||||
const [dataSource, setDataSource] = useState([]); | const [dataSource, setDataSource] = useState([]); | ||||
const [editableKeys, setEditableRowKeys] = useState([]); | const [editableKeys, setEditableRowKeys] = useState([]); | ||||
const actionRef = useRef(); | |||||
const [form] = Form.useForm(); | const [form] = Form.useForm(); | ||||
const [typename, settypename] = useState(''); | const [typename, settypename] = useState(''); | ||||
const inputRef = useRef(null); | const inputRef = useRef(null); | ||||
const onNameChange=(event)=>{ | const onNameChange=(event)=>{ | ||||
settypename(event.target.value); | settypename(event.target.value); | ||||
@@ -56,7 +52,7 @@ const GoodsbomFrom = (props) => { | |||||
setEditableRowKeys(soredata.map((item) => item.id)) | setEditableRowKeys(soredata.map((item) => item.id)) | ||||
setDataSource(soredata); | setDataSource(soredata); | ||||
} | } | ||||
},[]) | |||||
},[props]) | |||||
const columns=[ | const columns=[ | ||||
{ | { | ||||
title: '物料名称', | title: '物料名称', | ||||
@@ -0,0 +1,108 @@ | |||||
import React, { useState,useRef,useEffect } from 'react'; | |||||
import { PlusOutlined} from '@ant-design/icons'; | |||||
import { Modal, Form, Input, Button, Select,Divider,Space,message} from 'antd'; | |||||
import { GetByidBomList,AddBomType } from '../service'; | |||||
const UpdateBom = (props) => { | |||||
const { Option, OptGroup } = Select; | |||||
const [form] = Form.useForm(); | |||||
const [typename, settypename] = useState(''); | |||||
const inputRef = useRef(null); | |||||
useEffect(() => { | |||||
if(props.BomId){ | |||||
GetByidBomList(props.BomId).then((t)=>{ | |||||
var data=t.data | |||||
form.setFieldsValue({ | |||||
bomName:data.name, | |||||
bomTypeList:data.bomTypeIds, | |||||
bomType:data.isMain?'1':'0' | |||||
}) | |||||
}) | |||||
} | |||||
}) | |||||
const onNameChange=(event)=>{ | |||||
settypename(event.target.value); | |||||
} | |||||
const addItem=(e)=>{ | |||||
e.preventDefault(); | |||||
settypename(''); | |||||
var parm={name:typename} | |||||
AddBomType(parm).then((r)=>{ | |||||
if(r.succeeded){ | |||||
message.success('添加成功'); | |||||
props.initTypeList() | |||||
}else{ | |||||
message.error(r.errors); | |||||
} | |||||
}) | |||||
} | |||||
const headleOk=()=>{ | |||||
props.onUpdateBomSave(form) | |||||
} | |||||
return ( | |||||
<Modal | |||||
title={'编辑配方'} | |||||
width={640} | |||||
visible={props.UpdateBomVisible} | |||||
bodyStyle={{ padding: '32px 40px 1px 48px' }} | |||||
okText="确认" | |||||
cancelText="取消" | |||||
onOk={headleOk} | |||||
onCancel={() => { | |||||
props.onUpdateBomCancel(); | |||||
}} | |||||
destroyOnClose | |||||
> | |||||
<Form labelCol={{ span: 4 }} layout="horizontal" form={form} preserve={false}> | |||||
<Form.Item name="bomName" label="配方名称" rules={[{ required: true, message: '配方名称' }]}> | |||||
<Input placeholder="请输入配方名称"/> | |||||
</Form.Item> | |||||
<Form.Item name="bomTypeList" rules={[{ required: true, message: '配方分类' }]} label="配方分类" > | |||||
<Select | |||||
style={{width: '100%'}} | |||||
mode="tags" | |||||
placeholder="请选配方分类" | |||||
options={props.bomTypeData} | |||||
dropdownRender={(menu) => ( | |||||
<> | |||||
{menu} | |||||
<Divider style={{margin: '8px 0'}}/> | |||||
<Space style={{padding: '0 8px 4px'}}> | |||||
<Input | |||||
placeholder="请输入配方分类" | |||||
ref={inputRef} | |||||
value={typename} | |||||
onChange={onNameChange} | |||||
onKeyDown={(e) => e.stopPropagation()} | |||||
/> | |||||
<Button type="text" icon={<PlusOutlined />} onClick={addItem}> | |||||
新增 | |||||
</Button> | |||||
</Space> | |||||
</> | |||||
)} | |||||
/> | |||||
</Form.Item> | |||||
<Form.Item name="bomType" label="配方类型" initialValue='1' rules={[{ required: true, message: '配方类型' }]}> | |||||
<Select | |||||
placeholder="请选配方类型" | |||||
onChange={(value) => { | |||||
form.setFieldsValue({ | |||||
bomType:value | |||||
}); | |||||
}} | |||||
> | |||||
<OptGroup> | |||||
<Select.Option value="1">主料配方</Select.Option> | |||||
<Select.Option value="0">辅料配方</Select.Option> | |||||
</OptGroup> | |||||
</Select> | |||||
</Form.Item> | |||||
</Form> | |||||
</Modal> | |||||
); | |||||
}; | |||||
export default UpdateBom; |
@@ -7,8 +7,10 @@ import ProTable from '@ant-design/pro-table'; | |||||
import GoodsbomFrom from './components/GoodsbomFrom'; | import GoodsbomFrom from './components/GoodsbomFrom'; | ||||
import CreateBom from './components/CreateBom'; | import CreateBom from './components/CreateBom'; | ||||
import GoodsTechnologyMaken from './components/goodstechnologymaken' | import GoodsTechnologyMaken from './components/goodstechnologymaken' | ||||
import { addGoods, goodsType, goodsbigType, getgoodsTaste } from '../newgoods/service'; | |||||
import { GetGoodsBom, AddBomApi, DelGoodsBom, GetCosRequestURL,gettree, unitList,getbygoodsidattribute,addgoodsbomattribute,GetbomTypelist,getproductpage,addunit,getbomlist,addgoodsbom } from './service' | |||||
import UpdateBom from './components/UpdateBom' | |||||
import BomBatching from './components/BomBatching' | |||||
import { addGoods} from '../newgoods/service'; | |||||
import { GetGoodsBom, UpdateBomInfo, DelGoodsBom, GetCosRequestURL,gettree, unitList,getbygoodsidattribute,addgoodsbomattribute,GetbomTypelist,getproductpage,addunit,getbomlist,addgoodsbom,UpdateBomBatcing } from './service' | |||||
import axios from 'axios'; | import axios from 'axios'; | ||||
import { history } from 'umi'; | import { history } from 'umi'; | ||||
const { Step } = Steps; | const { Step } = Steps; | ||||
@@ -36,7 +38,9 @@ const Advanced = (props) => { | |||||
const inputRef = useRef(null); | const inputRef = useRef(null); | ||||
const [Bomdata, setBomdata] = useState([]); | const [Bomdata, setBomdata] = useState([]); | ||||
const [BomIds, setBomIds] = useState([]); | const [BomIds, setBomIds] = useState([]); | ||||
const [BomId, setBomId] = useState(); | |||||
const [UpdateBomVisible, setUpdateBomVisible] = useState(false); | |||||
const [BomBatchingVisible,setBomBatchingVisible]= useState(false); | |||||
//事件 | //事件 | ||||
const onFinish = async (values) => { | const onFinish = async (values) => { | ||||
const hide = message.loading('正在执行'); | const hide = message.loading('正在执行'); | ||||
@@ -225,7 +229,46 @@ const Advanced = (props) => { | |||||
tab: '商品工艺', | tab: '商品工艺', | ||||
}, | }, | ||||
]; | ]; | ||||
const onUpdateBomCancel=()=>{ | |||||
setUpdateBomVisible(false); | |||||
setBomId('') | |||||
} | |||||
const onBomBatchingCancel=()=>{ | |||||
setBomBatchingVisible(false); | |||||
setBomId('') | |||||
} | |||||
const onUpdateBomSave=(form)=>{ | |||||
form | |||||
.validateFields() | |||||
.then((values) => { | |||||
console.log(values) | |||||
var parm={id:BomId,name:values.bomName,IsMain:values.bomType=='1'?true:false,bomTypeIds:values.bomTypeList} | |||||
UpdateBomInfo(parm).then((r)=>{ | |||||
if(r.succeeded){ | |||||
message.success('修改成功'); | |||||
setUpdateBomVisible(false); | |||||
actionRef.current.reload(); | |||||
setBomId('') | |||||
}else{ | |||||
message.error(r.errors); | |||||
} | |||||
}) | |||||
}) | |||||
} | |||||
const onBomBatchingFinish=(form)=>{ | |||||
console.log("form",form) | |||||
var parm={bomId:BomId,bomEntry:form}; | |||||
UpdateBomBatcing(parm).then((r)=>{ | |||||
if(r.succeeded){ | |||||
message.success('修改成功'); | |||||
setBomBatchingVisible(false); | |||||
actionRef.current.reload(); | |||||
setBomId('') | |||||
}else{ | |||||
message.error(r.errors); | |||||
} | |||||
}) | |||||
} | |||||
const bomcolumns = | const bomcolumns = | ||||
[ | [ | ||||
{ | { | ||||
@@ -266,20 +309,8 @@ const Advanced = (props) => { | |||||
key="primary" | key="primary" | ||||
type="primary" | type="primary" | ||||
onClick={() => { | onClick={() => { | ||||
// const hide = message.loading('正在删除'); | |||||
// try { | |||||
// DelGoodsBom(record.id); | |||||
// hide(); | |||||
// message.success('删除成功,即将刷新'); | |||||
// actionRef.current.reload(); | |||||
// return true; | |||||
// } catch (error) { | |||||
// hide(); | |||||
// message.error('删除失败,请重试'); | |||||
// actionRef.current.reload(); | |||||
// return false; | |||||
// } | |||||
setUpdateBomVisible(true); | |||||
setBomId(record.bomId) | |||||
}} | }} | ||||
> | > | ||||
更新 | 更新 | ||||
@@ -288,20 +319,8 @@ const Advanced = (props) => { | |||||
key="primary" | key="primary" | ||||
type="primary" | type="primary" | ||||
onClick={() => { | onClick={() => { | ||||
// const hide = message.loading('正在删除'); | |||||
// try { | |||||
// DelGoodsBom(record.id); | |||||
// hide(); | |||||
// message.success('删除成功,即将刷新'); | |||||
// actionRef.current.reload(); | |||||
// return true; | |||||
// } catch (error) { | |||||
// hide(); | |||||
// message.error('删除失败,请重试'); | |||||
// actionRef.current.reload(); | |||||
// return false; | |||||
// } | |||||
setBomBatchingVisible(true); | |||||
setBomId(record.bomId) | |||||
}} | }} | ||||
> | > | ||||
配方详情 | 配方详情 | ||||
@@ -580,6 +599,8 @@ const Advanced = (props) => { | |||||
setHandleCreateoodsBomModalVisible(false); | setHandleCreateoodsBomModalVisible(false); | ||||
}} | }} | ||||
/> | /> | ||||
<UpdateBom onUpdateBomCancel={onUpdateBomCancel} bomtype={bomtype} BomId={BomId} UpdateBomVisible={UpdateBomVisible} bomTypeData={bomTypeData} onUpdateBomSave={onUpdateBomSave}/> | |||||
<BomBatching matedata={matedata} onBomBatchingCancel={onBomBatchingCancel} BomId={BomId} BomBatchingVisible={BomBatchingVisible} onBomBatchingFinish={onBomBatchingFinish}/> | |||||
</Card> | </Card> | ||||
), | ), | ||||
@@ -164,4 +164,22 @@ export async function GetByTypebatching() { | |||||
return request(`/saasbase/api/batching/getbytypebatching`, { | return request(`/saasbase/api/batching/getbytypebatching`, { | ||||
method: 'Get', | method: 'Get', | ||||
}); | }); | ||||
} | |||||
export async function GetByidBomList(data) { | |||||
return request(`/saasbase/api/bom/getbyidbomlist?bomId=`+data, { | |||||
method: 'Get', | |||||
}); | |||||
} | |||||
export async function UpdateBomInfo(data) { | |||||
return request(`/saasbase/api/bom/update`, { | |||||
method: 'Post', | |||||
data: data, | |||||
}); | |||||
} | |||||
export async function UpdateBomBatcing(data) { | |||||
return request(`/saasbase/api/bom/updatebombatcing`, { | |||||
method: 'Post', | |||||
data: data, | |||||
}); | |||||
} | } |