import React from 'react'; import { connect } from 'dva'; import moment from 'moment'; import { Button, Row, Col, Form, Input,Select,Spin,Modal,Transfer,DatePicker ,message,Tree,Table,Tabs,Switch,Popconfirm,Upload,Icon ,InputNumber } from 'antd'; import { extend, extendRule, initFilter, initQueryFilter, getOnlyPropertyData, extendInclude, getDataFieldValue, setDataFieldValue, guid, empty, initFilterGroup, extendGroupRule, extendFilterGroup, } from "../../../utils/common"; import DropDownPagination from '../../common/DropDownPaginationEx'; import FormPage from '../../FormPage'; import Editor from 'react-umeditor'; import config from '../../../config'; const FormItem = Form.Item; const Option = Select.Option; const { TextArea } = Input; const TabPane = Tabs.TabPane; const TreeNode = Tree.TreeNode; class EmProposalEditPage extends React.Component { constructor(props) { super(props); this.state = { title:'方案建立', data: {}, oldData:{}, btns:[], processDetail:{}, hiddenFields:{}, treeData:[], treeSelectedKeys:[], isProcessChange:false, expandedKeys:[], sopVisible:false }; }; componentDidMount() { this.props.form.resetFields(); this.loadData(); } componentWillReceiveProps(NextProps) { const {data}=this.props; let {id}=data?data:{}; if(!id) id=''; if (NextProps.custom['emProposalEditClick'+id] ) { this.props.form.resetFields(); this.loadData(); this.props.dispatch({ type: 'custom/save', payload: { ['emProposalEditClick'+id]:false }, }); } } loadData=()=> { const {data,formId,login,dispatch}=this.props; const {id}=data?data:{}; if(id){ const json = initFilter(this.props.login.OrgId); extendRule(json, 'ID', 1, id); extendInclude(json,'Nav_Product.Nav_Mould'); extendInclude(json,'Nav_Product.Nav_TestFixture'); extendInclude(json,'Nav_ProposalProcess.Nav_Process'); extendInclude(json,'Nav_ProposalProcess.Nav_FQCWorkStage'); extendInclude(json,'Nav_ProposalProcess.Nav_PQCWorkStage'); extendInclude(json,'Nav_ProposalProcess.Nav_Details.Nav_Procedure'); extendInclude(json,'Nav_ProposalProcess.Nav_Details.Nav_Unit'); extendInclude(json,'Nav_ProposalProcess.Nav_Details.Nav_PQCWorkStage'); extendInclude(json,'Nav_Details.Nav_Product'); extendInclude(json,'Nav_ProposalSopFiles.Nav_ImgFile'); extendInclude(json,'Nav_EmCofirmUser'); this.props.dispatch({ type: 'EMemProposalEdit/getProposal', payload: json, onComplete: (ret) => { if(ret){ this.fillData(ret); } } }); } else { this.fillData({ ORG_ID:this.props.login.OrgId, EM_CONFIRM_USER_ID:this.props.login.userId, Nav_EmCofirmUser:{NAME:this.props.login.user?this.props.login.user.NAME:null} }); } if(this.props.data.isShow){ this.setState({ title:'查看方案', }) } if(formId){ const btnJson = initFilter(this.props.login.OrgId,'','NUM',0); extendRule(btnJson, 'PAGE_CUSTOM_FORM_ID', 1, formId); this.props.dispatch({ type: 'EMengineeringPlanEdit/getBtnList', payload: btnJson, onComplete: (ret) => { if(ret){ this.setState({ btns: ret, }); } } }); } }; fillData=(ret)=>{ if(!ret.Nav_Details||!ret.Nav_Details.length){ ret.Nav_Details=[ {ID:guid(),ORG_ID:this.props.login.OrgId,PROPOSAL_TYPE:1,DESCRIPTION:'A料'}, {ID:guid(),ORG_ID:this.props.login.OrgId,PROPOSAL_TYPE:2,DESCRIPTION:'B料'} ] }; if(ret&&ret.Nav_Details){ ret.Nav_Details.sort((x, y) => (x.PROPOSAL_TYPE > y.PROPOSAL_TYPE) ? 1 : -1) } const updateLoadFileList=[]; if(ret.Nav_ProposalSopFiles){ ret.Nav_ProposalSopFiles.map(t=>{ updateLoadFileList.push({ uid: t.ID, name: t.Nav_ImgFile?t.Nav_ImgFile.FILE_NAME:'未知文件', status: 'done', response: {Data:t.IMG_FILE_ID,file:t}, }); }); } this.setState({ data: ret, oldData:{...ret}, isProcessChange:false, processDetail:{}, treeSelectedKeys:[], expandedKeys:[], treeData:[], hiddenFields:{}, updateLoadFileList:updateLoadFileList, },()=>{ this.setProcesFieldVisiable(); this.getTreeData(); }); } fillLoadFileByProduct=(productId)=>{ const {data}=this.props; const {id}=data?data:{}; if(!id) { if(productId) { const json = initFilter(this.props.login.OrgId, '', 'CREATE_TIME', 0); extendInclude(json, 'Nav_ProposalSopFiles.Nav_ImgFile'); extendRule(json, 'PRODUCT_ID', 1, productId); extendRule(json, 'ENABLE_STATUS', 1, 0); this.props.dispatch({ type: 'EMemProposalEdit/getProposalList', payload: json, onComplete: (ret) => { if (ret && ret.length) { var tmp = ret[0]; const updateLoadFileList = []; if (tmp.Nav_ProposalSopFiles) { tmp.Nav_ProposalSopFiles.map(t => { updateLoadFileList.push({ uid: t.ID, name: t.Nav_ImgFile ? t.Nav_ImgFile.FILE_NAME : '未知文件', status: 'done', response: {Data: t.IMG_FILE_ID, file: t}, }); }); } this.setState({ updateLoadFileList: updateLoadFileList, }); } } }); } else{ this.setState({ updateLoadFileList: [], }); } } } getBtns=(code)=>{ if(this.props.data.isShow)return; if(this.state.btns){ return this.state.btns.map(item=>{ if(item.CODE==code) { if (item.BTN_TYPE == 1) { return this.handleOk(false,false)}>{item.LABEL}; } else if(item.BTN_TYPE==7){ if(item.CLICK_EVENT=='addNode'){ return this.addTreeNode()}>{item.LABEL}; } else if(item.CLICK_EVENT=='removeNode'){ return this.removeTreeNode()}>{item.LABEL}; } } } }); } }; getUpdateData=()=>{ const data={...this.state.data}; if(this.state.processDetail&&this.state.processDetail.ID){ if(!data.Nav_ProposalProcess) { data.Nav_ProposalProcess = { ORG_ID: this.props.login.OrgId, ID: guid(), Nav_Details: [], }; }; if(!data.Nav_ProposalProcess.Nav_Details) { data.Nav_ProposalProcess.Nav_Details = []; }; let details=[]; data.Nav_ProposalProcess.Nav_Details.map(t=>{ if(t.ID!=this.state.processDetail.ID) { details.push(t); }; }); if(this.state.processDetail.ID){ details.push(this.state.processDetail); } data.Nav_ProposalProcess.Nav_Details=details; }; let updateData=getOnlyPropertyData(data); if(data.Nav_ProposalProcess){ updateData.Nav_ProposalProcess=getOnlyPropertyData( data.Nav_ProposalProcess); if(data.Nav_ProposalProcess.Nav_Details){ updateData.Nav_ProposalProcess.Nav_Details=[]; data.Nav_ProposalProcess.Nav_Details.map(t=>{ let tmp=getOnlyPropertyData(t); updateData.Nav_ProposalProcess.Nav_Details.push(tmp); }); } } if(data.Nav_Details) { updateData.Nav_Details = []; data.Nav_Details.map(t => { let tmp = getOnlyPropertyData(t); updateData.Nav_Details.push(tmp); }); } if(data.Nav_Product){ updateData.Nav_Product=data.Nav_Product; } if(this.state.updateLoadFileList) { updateData.Nav_ProposalSopFiles = []; this.state.updateLoadFileList.map(t => { if (t.response) { if (t.response.file) { updateData.Nav_ProposalSopFiles.push(getOnlyPropertyData(t.response.file)); } else if(t.response.Data) { updateData.Nav_ProposalSopFiles.push({ IMG_FILE_ID: t.response.Data, ORG_ID: this.props.login.OrgId, }); } } }); } return updateData; } handleOk = () => { const {form,dispatch,data} = this.props; const {getFieldValue, getFieldDecorator, validateFields, validateFieldsAndScroll, setFieldsValue} = form; validateFieldsAndScroll((errors, values) => { if (errors) return; let updateData=this.getUpdateData(); let isError=false; if(empty(getDataFieldValue(updateData,'CODE'))){ message.error('编号'); isError=true; } if(empty(getDataFieldValue(updateData,'NAME'))){ message.error('名称'); isError=true; } if(empty(getDataFieldValue(updateData,'Nav_Product.CODE'))){ message.error('请选择品号'); isError=true; } if(empty(getDataFieldValue(updateData,'Nav_Product.SPLIT_QTY'))){ message.error('请填写交货方式'); isError=true; } if(empty(getDataFieldValue(updateData,'Nav_Product.PCS_SIZE'))){ message.error('请填写单PCS尺寸'); isError=true; } if(empty(getDataFieldValue(updateData,'Nav_Product.SPLIT_LENGTH'))){ message.error('请填写拼版长'); isError=true; } if(empty(getDataFieldValue(updateData,'Nav_Product.SPLIT_WIDTH'))){ message.error('请填写拼版宽'); isError=true; } if (!updateData.Nav_ProposalProcess || !updateData.Nav_ProposalProcess.Nav_Details || updateData.Nav_ProposalProcess.Nav_Details.length == 0) { message.error('请填写工艺路线信息'); isError=true; }; if(updateData.Nav_Details){ updateData.Nav_Details.forEach((n,i)=>{ if(n.PROPOSAL_TYPE==0){ if(empty(getDataFieldValue(n,'PRODUCT_ID'))) { message.error('请选择材料'); isError=true; } } }); } if(updateData.Nav_ProposalProcess) { if (empty(getDataFieldValue(updateData, 'Nav_ProposalProcess.NAME', ''))) { message.error('请填写工艺路线名称'); isError = true; } if (empty(getDataFieldValue(updateData, 'Nav_ProposalProcess.CODE', ''))) { message.error('请填写工艺路线编号'); isError = true; } if (getDataFieldValue(updateData, 'Nav_ProposalProcess.FQC_AUTO_INSPEC', false) && getDataFieldValue(updateData, 'Nav_ProposalProcess.FQC_INSPEC_TYPE', 0) == 1 && getDataFieldValue(updateData, 'Nav_ProposalProcess.FQC_INSPEC_QTY', 0) == 0) { message.error('请填写送检数量'); isError = true; } if(updateData.Nav_ProposalProcess.Nav_Details){ updateData.Nav_ProposalProcess.Nav_Details.map(t=>{ if(t.PROCEDURE_ID==undefined|| t.PROCEDURE_ID==null||t.PROCEDURE_ID=='') { message.error('请填写工序' + t.NAME + '工序'); isError = true; }; if(t.UNIT_ID==undefined|| t.UNIT_ID==null||t.UNIT_ID=='') { message.error('请填写工序' + t.NAME + '单位'); isError = true; }; if (getDataFieldValue(t, 'PROCEDURE_TYPE', 0)==1 && empty(getDataFieldValue(t, 'ORDER_FIELD', 0))) { message.error('请填写工序'+t.NAME+'对应字段'); isError = true; }; if (getDataFieldValue(t, 'PQC_AUTO_INSPEC', false) && getDataFieldValue(t, 'PQC_INSPEC_TYPE', 0) == 1 && getDataFieldValue(t, 'PQC_INSPEC_QTY', 0) == 0) { message.error('请填写工序'+t.NAME+'送检数量'); isError = true; }; if (getDataFieldValue(t, 'PROCEDURE_TYPE', 0)==0 &&getDataFieldValue(t, 'CONVERT_RATIO', 0) ==0) { message.error('请填写工序'+t.NAME+'换算比率'); isError = true; }; }); } } if(isError)return; dispatch({ type: 'EMemProposalEdit/fullUpdate', payload: updateData, onComplete: (ret) => { if(ret) { if(data.close){ data.close(); } message.success('执行成功'); } } }); }) }; getInnerControl=({fieldType,data,field,defaultValue,extendData,inputDataApi,onSelectValue,onChange,inpuNavField,onFilter,disabled,inputLabelField,isNotToNum})=>{ if(fieldType==1){//文本 if(inputDataApi){ return } return {onChange(e,field)}} disabled={this.props.data.isShow||disabled} /> } else if(fieldType==2){//时间 } else if(fieldType==3){//下拉 const options = extendData ? extendData.split(',') : []; return {onChange(e,field)}} disabled={this.props.data.isShow||disabled}> { options.map((item, key) => { let paris = item.split(":"); return {paris[0]} }) } } else if(fieldType==4){//单选 } else if(fieldType==5){//多选 return {onChange(e,field)}} disabled={this.props.data.isShow||disabled} /> } else if(fieldType==6){//长文本 return {onChange(e,field)}} disabled={this.props.data.isShow||disabled}/> } else if(fieldType==7){//数值 return {onChange(e,field)}} disabled={this.props.data.isShow||disabled}/> } else if(fieldType==8){//富文本编辑 return ({onChange(e,field)}}/>) } return {onChange(e,field)}} disabled={this.props.data.isShow||disabled}/> } getControl=(params)=>{ const {form, location, dispatch, match,loading} = this.props; const {getFieldValue, getFieldDecorator, validateFields, validateFieldsAndScroll, setFieldsValue} = form; if(this.state.hiddenFields&&this.state.hiddenFields[params.field])return; const formItemLayout = params.formItemLayout?params.formItemLayout:{ labelCol: { span: 6 }, wrapperCol: { span: 14 }, }; return { params.isRequery?*:null}{params.label}>} {...formItemLayout} > {this.getInnerControl(params)} }; showFields=(data)=>{ if(data) { return data.map(item => { return this.getControl(item); }); } }; showTreeNode=(data)=>{ if(!data||data.length==0) return; // data.sort((x, y) => (x['NUM']&&y['NUM']? // ((parseInt(x['NUM'])&&parseInt( y['NUM']))?((parseInt(x['NUM']) >parseInt( y['NUM']))?1:-1):((x['NUM']>y['NUM'])? 1 : -1)):(x['NUM']?-1:1))); return data.map((item) => { if (item) { let title=item.title; return ( {this.showTreeNode(item.Children)}} ); }; }); }; showSelectedTreeNode=()=>{ const node=this.state.selectedTreeNode; if(node){ return node.title; } return '空'; }; doSelectTreeNode=(node)=>{ let processDetail={}; const data={...this.state.data}; if(this.state.processDetail&&this.state.processDetail.ID){ if(!data.Nav_ProposalProcess) { data.Nav_ProposalProcess = { ORG_ID: this.props.login.OrgId, ID: guid(), Nav_Details: [], }; }; if(!data.Nav_ProposalProcess.Nav_Details) { data.Nav_ProposalProcess.Nav_Details = []; }; let details=[]; data.Nav_ProposalProcess.Nav_Details.map(t=>{ if(t.ID!=this.state.processDetail.ID) { details.push(t); }; }); details.push(this.state.processDetail); data.Nav_ProposalProcess.Nav_Details=details; }; if(data.Nav_ProposalProcess&&data.Nav_ProposalProcess.Nav_Details&&node){ data.Nav_ProposalProcess.Nav_Details.map(t=>{ if(t.ID===node.ID) { processDetail = t; } }); } this.setState({ selectedTreeNode: node, data:data, processDetail:processDetail, treeSelectedKeys:node?[node.ID.toString()]:[], },()=>{ this.setProcesDetailFieldVisiable(); }); }; onSelectTreeNode = (selectedKeys, e) => { const node= e.node.props.data; this.doSelectTreeNode(this.state.selectedTreeNode&&node.ID==this.state.selectedTreeNode.ID?null:node); }; doSelectNodeById=(data,id)=>{ if(data){ data.map(t=>{ if(t.ID===id){ this.doSelectTreeNode(t); } else if(t.Children){ this.doSelectNodeById(t.Children,id); } }); } }; addTreeNode=()=> { const data={...this.state.data}; const processDetailData = { ORG_ID: this.props.login.OrgId, ID: guid(), NAME:'新增节点', NUM:99999, TYPE:0, PRO_TYPE:0, PARENT_ID: this.state.selectedTreeNode&&this.state.selectedTreeNode.ID ? this.state.selectedTreeNode.ID : null, }; if (!data.Nav_ProposalProcess) { data.Nav_ProposalProcess = { ORG_ID: this.props.login.OrgId, }; }; if (!data.Nav_ProposalProcess.Nav_Details) { data.Nav_ProposalProcess.Nav_Details = []; } let num=0; data.Nav_ProposalProcess.Nav_Details.forEach((n,i)=>{ if(n.NUM&&n.NUM>num) { num = n.NUM; } }); num++; processDetailData.NUM=num; data.Nav_ProposalProcess.Nav_Details.push(processDetailData); this.setState({ data:data, isProcessChange:true, expandedKeys:[processDetailData.PARENT_ID], },()=>{ this.getTreeData(()=>{ this.doSelectNodeById(this.state.treeData,processDetailData.ID); this.setState({ expandedKeys:[], }); }); }); }; removeTreeNode=()=>{ if(this.state.selectedTreeNode){ const tmp={...this.state.data}; if(tmp.Nav_ProposalProcess&&tmp.Nav_ProposalProcess.Nav_Details) { const result=[]; tmp.Nav_ProposalProcess.Nav_Details.map(t=>{ if(t.ID!=this.state.selectedTreeNode.ID){ result.push(t); }; }); tmp.Nav_ProposalProcess.Nav_Details=result; }; this.setState({ data:tmp, isProcessChange:true, processDetail:{}, },()=>{ this.getTreeData(()=>{ if(this.state.treeData&&this.state.treeData.length>0) { this.doSelectTreeNode(this.state.treeData[0]); } else{ this.doSelectTreeNode(null); } }); }); }; }; doGetTreeNode=(data,parentNode,list, parentId)=>{ if(data){ let tmp=[]; data.map(item=>{ if(item.PARENT_ID===parentId){ if(this.state.processDetail&&this.state.processDetail.ID&&item.ID==this.state.processDetail.ID){ tmp.push(this.state.processDetail); } else { tmp.push(item); } }; }); if(tmp.length>0){ tmp.sort((x, y) => (parseInt( x.NUM) > parseInt( y.NUM)) ? 1 : -1); const result=[]; tmp.map(t=>{ const node= { title:t.NAME?(t.NUM+'/'+ t.NAME):(t.Nav_Procedure==null?'新增节点':( t.NUM+'/'+ t.Nav_Procedure.NAME)), ID:t.ID, }; result.push(node); this.doGetTreeNode(data,node,list,t.ID); }); if(parentNode){ parentNode.Children=result; }else{ result.map(t=>{ list.push(t); }); }; }; }; }; getTreeData=(complete)=>{ const treeData=[]; if(this.state.data.Nav_ProposalProcess&&this.state.data.Nav_ProposalProcess.Nav_Details) { this.doGetTreeNode(this.state.data.Nav_ProposalProcess.Nav_Details,null,treeData,null); }; this.setState({ treeData:treeData, },()=>{ if (typeof complete === 'function') { complete(treeData); }; }); }; setProcesFieldVisiable=()=>{ const data =this.state.data; const hiddenFields={...this.state.hiddenFields}; const isFqc= getDataFieldValue(data,'Nav_ProposalProcess.IS_FQC',false); const autoInspec=getDataFieldValue(data,'Nav_ProposalProcess.FQC_AUTO_INSPEC',false); hiddenFields['Nav_ProposalProcess.FQC_TYPE']=!isFqc; hiddenFields['Nav_ProposalProcess.Nav_FQCWorkStage.NAME']=!isFqc; hiddenFields['Nav_ProposalProcess.FQC_AUTO_INSPEC']=!isFqc; hiddenFields['Nav_ProposalProcess.FQC_INSPEC_TYPE']=!(isFqc&&autoInspec); hiddenFields['Nav_ProposalProcess.FQC_INSPEC_QTY']=!(isFqc&&autoInspec); hiddenFields['Nav_ProposalProcess.FQC_INSPEC_QTY_OVER']=!(isFqc&&autoInspec); this.setState({ hiddenFields:hiddenFields, }); }; setProcesDetailFieldVisiable=()=>{ const data =this.state.processDetail; const hiddenFields={...this.state.hiddenFields}; const type=getDataFieldValue(data,'PROCEDURE_TYPE',0); const isPqc= getDataFieldValue(data,'IS_PQC',false); const autoInspec=getDataFieldValue(data,'PQC_AUTO_INSPEC',false); const isProType=getDataFieldValue(data,'PRO_TYPE',0); hiddenFields['PQC_TYPE']=!isPqc; hiddenFields['Nav_PQCWorkStage.NAME']=!isPqc; hiddenFields['PQC_AUTO_INSPEC']=!isPqc; hiddenFields['PQC_INSPEC_TYPE']=!(isPqc&&autoInspec); hiddenFields['PQC_INSPEC_QTY']=!(isPqc&&autoInspec); hiddenFields['PQC_INSPEC_QTY_OVER']=!(isPqc&&autoInspec); hiddenFields['ORDER_FIELD']=type!=1; hiddenFields['PRO_TYPE']=type!=0; hiddenFields['TIME_UNIT']=type!=0; hiddenFields['CONVERT_RATIO']=type!=0; hiddenFields['STANDARD_TIME']=type!=0; hiddenFields['IS_PQC']=type!=0; hiddenFields['BOOK_BAD']=type!=0||isProType==0; this.setState({ hiddenFields:hiddenFields, }); }; doSelectProcess=(ret)=>{ const data = {...this.state.data}; data['PROPOSAL_PROCESS_ID'] = ret ? ret.ID : null; data['Nav_ProposalProcess'] = ret; this.setState({ data: data, isProcessChange: true, processDetail: {}, }, () => { this.setProcesFieldVisiable(); this.getTreeData(() => { if (this.state.treeData && this.state.treeData.length > 0) { this.doSelectTreeNode(this.state.treeData[0]); } else { this.doSelectTreeNode(null); } }); }); } selectProcess=(id)=> { if(id) { const json = initFilter(this.props.login.OrgId, '', 'NUM', 0); json['Keyword'] = this.state.data.ID; json['Parameter1'] = id; this.props.dispatch({ type: 'EMemProposalEdit/getProposalProcess', payload: json, onComplete: (ret) => { this.doSelectProcess(ret); } }); } else{ this.doSelectProcess(null); } } handleSopClick= async function (recordId,ids){ await this.props.dispatch({ type: 'custom/save', payload: { ['sopViewClick'+recordId]:true, }, }); }; handleSopShowModal = (file) => { this.setState({ sopData:{ids:file.response.Data,id:file.response.Data}, sopVisible: true },()=>{ this.handleSopClick(file.response.Data,file.response.Data); }); }; handleSopCloseModal = () => { this.setState({ sopVisible: false }); }; resetPcs=(data)=>{ const splitQty= getDataFieldValue(data,'Nav_Product.SPLIT_QTY'); if(data.Nav_Details&&data.Nav_Details.length){ data.Nav_Details.forEach((n,i)=>{ if(n.SET&&splitQty){ n.PCS= n.SET*splitQty; }else{ n.PCS= 0; } }); } } render() { const {form, location, dispatch, match,loading} = this.props; const {getFieldValue, getFieldDecorator, validateFields, validateFieldsAndScroll, setFieldsValue} = form; const {data,processDetail}=this.state; const onHeadRowChange=(e,field)=>{ if(e==null||e==undefined)return; const value=e.target&&e.target.value?e.target.value:(typeof e ==='object'?null:e); const tmp = {...this.state.data}; setDataFieldValue(tmp,field,value); if(field=='Nav_Product.SPLIT_QTY') { this.resetPcs(tmp); } this.setState({ data: tmp, },()=>{ if(field=='Nav_ProposalProcess.IS_FQC'||field=='Nav_ProposalProcess.FQC_AUTO_INSPEC'){ this.setProcesFieldVisiable(); } }); }; const onProcessDetailChange=(e,field)=>{ if(e==null||e==undefined)return; const value=e.target&&e.target.value?e.target.value:(typeof e ==='object'?null:e); let tmp = {...this.state.processDetail}; setDataFieldValue(tmp,field,value); this.setState({ processDetail: tmp, },()=>{ if(field=='NUM'){ this.getTreeData(); }; if(field=='IS_PQC'||field=='PQC_AUTO_INSPEC'||field=='PROCEDURE_TYPE'||field=='PRO_TYPE'){ this.setProcesDetailFieldVisiable(); }; }); }; const onWorkstageFilter=({params})=>{ extendRule(params,'TYPE',1,2); }; const onSelectFQCWorkstage=(param)=>{ const paramData = param.data; if (paramData && paramData.length > 0||param.isClear) { const tmp = {...this.state.data}; const workstageId=paramData && paramData.length > 0?paramData[0]:null; const workstageName=paramData && paramData.length > 0?paramData[1]:''; setDataFieldValue(tmp,'Nav_ProposalProcess.FQC_WORKSTAGE_ID',workstageId); setDataFieldValue(tmp,'Nav_ProposalProcess.Nav_FQCWorkStage.NAME',workstageName); this.setState({ data: tmp, }); }; }; const onSelectPQCWorkstage=(param)=>{ const paramData = param.data; if (paramData && paramData.length > 0||param.isClear) { let tmp = {...this.state.processDetail}; const workstageId=paramData && paramData.length > 0?paramData[0]:null; const workstageName=paramData && paramData.length > 0?paramData[1]:''; setDataFieldValue(tmp,'PQC_WORKSTAGE_ID',workstageId); setDataFieldValue(tmp,'Nav_PQCWorkStage.NAME',workstageName); this.setState({ processDetail: tmp, }); }; }; const onSelectPQCProdure=(param)=>{ const paramData = param.data; const record=param.record; if (paramData && paramData.length > 0||param.isClear) { let tmp = {...this.state.processDetail}; const prcedureId=paramData && paramData.length > 0?paramData[0]:null; const prcedureName=paramData && paramData.length > 0?paramData[1]:''; setDataFieldValue(tmp,'PROCEDURE_ID',prcedureId); setDataFieldValue(tmp,'Nav_Procedure.NAME',prcedureName); setDataFieldValue(tmp,'NAME',prcedureName); if(record){ const fields=['PROCEDURE_TYPE','ORDER_FIELD','PRO_TYPE','BOOK_BAD','CONVERT_RATIO','STANDARD_TIME','TIME_UNIT','UNIT_ID','Nav_Unit.NAME', 'PQC_AUTO_INSPEC','PQC_INSPEC_TYPE','PQC_INSPEC_QTY','PQC_INSPEC_QTY_OVER','IS_PQC','PQC_TYPE','PQC_WORKSTAGE_ID','REMARK', 'Nav_PQCWorkStage.NAME','EXT_PROCEDURE_CODE']; fields.forEach((n,i)=>{ setDataFieldValue(tmp,n, getDataFieldValue( record,n)); }); } this.setState({ processDetail: tmp, },()=>{ this.setProcesDetailFieldVisiable(); }); }; }; const onSelectUnit=(param)=>{ const paramData = param.data; const record=param.record; if (paramData && paramData.length > 0||param.isClear) { let tmp = {...this.state.processDetail}; const unitId=paramData && paramData.length > 0?paramData[0]:null; const unitName=paramData && paramData.length > 0?paramData[1]:''; setDataFieldValue(tmp,'UNIT_ID',unitId); setDataFieldValue(tmp,'Nav_Unit.NAME',unitName); this.setState({ processDetail: tmp, },()=>{ this.setProcesDetailFieldVisiable(); }); }; }; const onSelectProduct=({record,isClear})=>{ let tmp = {...this.state.data}; setDataFieldValue(tmp,'Nav_Product.CODE', getDataFieldValue( record,'CODE')); setDataFieldValue(tmp,'Nav_Product.NAME', getDataFieldValue( record,'NAME')); setDataFieldValue(tmp,'Nav_Product.DESCRIPTION_1', getDataFieldValue( record,'DESCRIPTION_1')); setDataFieldValue(tmp,'PRODUCT_ID', getDataFieldValue( record,'ID')); setDataFieldValue(tmp,'Nav_Product.SPLIT_QTY', getDataFieldValue( record,'SPLIT_QTY')); setDataFieldValue(tmp,'Nav_Product.PCS_SIZE', getDataFieldValue( record,'PCS_SIZE')); setDataFieldValue(tmp,'Nav_Product.SPLIT_LENGTH', getDataFieldValue( record,'SPLIT_LENGTH')); setDataFieldValue(tmp,'Nav_Product.SPLIT_WIDTH', getDataFieldValue( record,'SPLIT_WIDTH')); setDataFieldValue(tmp,'Nav_Product.Nav_Mould.NAME', getDataFieldValue( record,'Nav_Mould.NAME')); setDataFieldValue(tmp,'Nav_Product.MOULD_ID', getDataFieldValue( record,'MOULD_ID')); setDataFieldValue(tmp,'Nav_Product.THICKNESS', getDataFieldValue( record,'THICKNESS')); setDataFieldValue(tmp,'Nav_Product.METAL_THICKNESS', getDataFieldValue( record,'METAL_THICKNESS')); setDataFieldValue(tmp,'Nav_Product.PRINTING_INK', getDataFieldValue( record,'PRINTING_INK')); setDataFieldValue(tmp,'Nav_Product.ZH_PRINTING_INK', getDataFieldValue( record,'ZH_PRINTING_INK')); setDataFieldValue(tmp,'Nav_Product.NUMERICAL_CONTROL', getDataFieldValue( record,'NUMERICAL_CONTROL')); setDataFieldValue(tmp,'Nav_Product.HEAT_CONDUCTION', getDataFieldValue( record,'HEAT_CONDUCTION')); setDataFieldValue(tmp,'Nav_Product.WITHSTAND_VOLTAGE', getDataFieldValue( record,'WITHSTAND_VOLTAGE')); this.resetPcs(tmp); this.setState({ data: tmp, },()=>{ this.selectProcess(record?record.PROCESS_ID:null); }); this.fillLoadFileByProduct(getDataFieldValue( record,'ID')); }; const onSelectMould=({record})=>{ let tmp = {...this.state.data}; setDataFieldValue(tmp,'Nav_Product.Nav_Mould.NAME', getDataFieldValue( record,'NAME')); setDataFieldValue(tmp,'Nav_Product.MOULD_ID', getDataFieldValue( record,'ID')); this.setState({ data: tmp, }); }; const onSelectTestFixture=({record})=>{ let tmp = {...this.state.data}; setDataFieldValue(tmp,'Nav_Product.Nav_TestFixture.NAME', getDataFieldValue( record,'NAME')); setDataFieldValue(tmp,'Nav_Product.TEST_FIXTURE_ID', getDataFieldValue( record,'ID')); this.setState({ data: tmp, }); }; const onSelectProcess=({record})=>{ this.selectProcess(record?record.ID:null); }; const onProductFilter=({params})=>{ let group=initFilterGroup(false); extendGroupRule(group,'PRODUCT_TYPE',1,0); extendGroupRule(group,'PRODUCT_TYPE',1,1); extendFilterGroup(params,group); extendInclude(params,'Nav_Mould'); }; const productFields=[ {fieldType:1,data:data,label:'编号', field:'CODE', isRequery:true,onChange:onHeadRowChange}, {fieldType:1,data:data,label:'名称', field:'NAME', isRequery:true,onChange:onHeadRowChange}, {fieldType: 1,data: data,label: '品号',field: 'Nav_Product.CODE',defaultValue: '',inputLabelField:'CODE',isRequery:true,inputDataApi: 'FM/Product/OrderPaged',onSelectValue: onSelectProduct,onFilter:onProductFilter}, {fieldType:1,data:data,label:'品名', field:'Nav_Product.NAME',defaultValue:'',disabled:true}, {fieldType:6,data:data,label:'长描述', field:'Nav_Product.DESCRIPTION_1',defaultValue:'',disabled:true}, {fieldType:7,data:data,label:'交货方式', field:'Nav_Product.SPLIT_QTY',isRequery:true,onChange:onHeadRowChange}, {fieldType:1,data:data,label:'单PCS尺寸', field:'Nav_Product.PCS_SIZE',isRequery:true,onChange:onHeadRowChange}, {fieldType:7,data:data,label:'拼版长', field:'Nav_Product.SPLIT_LENGTH',isRequery:true,onChange:onHeadRowChange}, {fieldType:7,data:data,label:'拼版宽', field:'Nav_Product.SPLIT_WIDTH', isRequery:true,onChange:onHeadRowChange}, {fieldType:1,data:data,label:'板厚', field:'Nav_Product.THICKNESS', onChange:onHeadRowChange}, {fieldType:1,data:data,label:'铜箔厚度', field:'Nav_Product.METAL_THICKNESS', onChange:onHeadRowChange}, {fieldType:1,data:data,label:'导热', field:'Nav_Product.HEAT_CONDUCTION', onChange:onHeadRowChange}, {fieldType:3,data:data,label:'阻焊油墨', field:'Nav_Product.ZH_PRINTING_INK', onChange:onHeadRowChange,isNotToNum:true,extendData:'空:,白油:白油,黑油:黑油,高反:高反,绿色:绿色,哑光:哑光,黑色:黑色'}, {fieldType:3,data:data,label:'文字油墨', field:'Nav_Product.PRINTING_INK', onChange:onHeadRowChange,isNotToNum:true, extendData:'空:,镂空:镂空,灰色:灰色,黑色:黑色,蓝色:蓝色,黄色:黄色,白色:白色'}, {fieldType: 1,data: data,label: '模具',field: 'Nav_Product.Nav_Mould.NAME',defaultValue: '',inputDataApi: 'FM/Product/OrderPaged', onSelectValue: onSelectMould,onFilter:({params})=>{extendRule(params,'PRODUCT_TYPE',1,4);extendRule(params,'ENABLE_STATUS',1,0);}}, {fieldType:1,data:data,label:'数控', field:'Nav_Product.NUMERICAL_CONTROL', onChange:onHeadRowChange}, {fieldType: 1,data: data,label: '测试架',field: 'Nav_Product.Nav_TestFixture.NAME',defaultValue: '',inputDataApi: 'FM/Product/OrderPaged', onSelectValue: onSelectTestFixture,onFilter:({params})=>{extendRule(params,'PRODUCT_TYPE',1,5);extendRule(params,'ENABLE_STATUS',1,0);}}, {fieldType:3,data:data,label:'耐压', field:'Nav_Product.WITHSTAND_VOLTAGE', onChange:onHeadRowChange,isNotToNum:true, extendData:'空:,AC≥1000V:AC≥1000V,AC≥1500V:AC≥1500V,AC≥1240V:AC≥1240V,AC≥1600V:AC≥1600V,AC>=1200V:AC>=1200V,AC≥2000V:AC≥2000V,AC≥3500V:AC≥3500V,AC≥5000V:AC≥5000V,AC≥300V:AC≥300V,AC≥500V:AC≥500V'}, {fieldType: 1,data: data,label: '工艺路线',field: 'Nav_ProposalProcess.Nav_Process.NAME',defaultValue: '',inputDataApi: 'FM/Process/OrderPaged',onSelectValue: onSelectProcess,onFilter:({params})=>{extendRule(params,'ENABLE_STATUS',1,0);}}, {fieldType: 1,data: data,label: '编制人',field: 'EM_CONFIRM_USER_NAME',defaultValue: '', onChange:onHeadRowChange}, {fieldType:3,data:data,label:'启用标志',field:'ENABLE_STATUS',defaultValue:0,extendData:'启用:0,不启用:1',onChange:onHeadRowChange}, ] const processFields=[ {fieldType:1,data:data,label:'工艺路线名称', field:'Nav_ProposalProcess.NAME',defaultValue:'',isRequery:true,onChange:onHeadRowChange}, {fieldType:1,data:data,label:'工艺路线代码',field:'Nav_ProposalProcess.CODE',defaultValue:'',isRequery:true,onChange:onHeadRowChange}, {fieldType:5,data:data,label:'成品检验',field:'Nav_ProposalProcess.IS_FQC',defaultValue:false,onChange:onHeadRowChange}, {fieldType:3,data:data,label:'检验方式',field:'Nav_ProposalProcess.FQC_TYPE',defaultValue:null,extendData:'全检:0,抽检:1',onChange:onHeadRowChange}, {fieldType: 1,data: data,label: '成检中心',field: 'Nav_ProposalProcess.Nav_FQCWorkStage.NAME',defaultValue: '',inputDataApi: 'FM/WorkStage/OrderPaged',onSelectValue: onSelectFQCWorkstage,inpuNavField:'ID,NAME',onFilter:onWorkstageFilter}, {fieldType:5,data:data,label:'自动送检',field:'Nav_ProposalProcess.FQC_AUTO_INSPEC',defaultValue:false,onChange:onHeadRowChange}, {fieldType:3,data:data,label:'自动送检方式',field:'Nav_ProposalProcess.FQC_INSPEC_TYPE',defaultValue:null,extendData:'全部:0,批量:1',onChange:onHeadRowChange}, {fieldType:7,data:data,label:'送检数量',field:'Nav_ProposalProcess.FQC_INSPEC_QTY',defaultValue:0,onChange:onHeadRowChange}, {fieldType:5,data:data,label:'是否检验溢出',field:'Nav_ProposalProcess.FQC_INSPEC_QTY_OVER',defaultValue:false,onChange:onHeadRowChange}, {fieldType:5,data:data,label:'QA检验',field:'Nav_ProposalProcess.IS_QA',defaultValue:false,onChange:onHeadRowChange}, ] const processDetailFields=[ {fieldType: 1,data: processDetail,label: '工序',field: 'Nav_Procedure.NAME',defaultValue: '',inputDataApi: 'FM/Procedure/OrderPaged',onSelectValue: onSelectPQCProdure,inpuNavField:'ID,NAME,Nav_PQCWorkStage.NAME,Nav_Unit.NAME'}, {fieldType:3,data:processDetail,label:'工序类型',field:'PROCEDURE_TYPE',defaultValue:0,onChange:onProcessDetailChange,extendData:'实际工序:0,显示工序:1,打印工序:2'}, {fieldType:3,data:processDetail,label:'工序类别',field:'PRO_TYPE',defaultValue:false,onChange:onProcessDetailChange,extendData:'计划工序:0,报工工序:1,计划且报工:2'}, {fieldType:1,data:processDetail,label:'显示字段', field:'ORDER_FIELD',defaultValue:'',onChange:onProcessDetailChange}, {fieldType:7,data:processDetail,label:'换算比率',field:'CONVERT_RATIO',defaultValue:1,isRequery:true,onChange:onProcessDetailChange}, {fieldType:7,data:processDetail,label:'标准工时',field:'STANDARD_TIME',defaultValue:1,onChange:onProcessDetailChange}, {fieldType:5,data:processDetail,label:'可报异常',field:'BOOK_BAD',defaultValue:false,onChange:onProcessDetailChange}, {fieldType:3,data:processDetail,label:'工时单位',field:'TIME_UNIT',defaultValue:0,onChange:onProcessDetailChange,extendData:'小时:0,分钟:1,秒:2'}, {fieldType: 1,data: processDetail,label: '单位',field: 'Nav_Unit.NAME',defaultValue: '',inputDataApi: 'FM/Unit/OrderPaged',isRequery:true,onSelectValue: onSelectUnit,inpuNavField:'ID,NAME'}, {fieldType:5,data:processDetail,label:'PQC检验',field:'IS_PQC',defaultValue:false,onChange:onProcessDetailChange}, {fieldType:3,data:processDetail,label:'检验方式',field:'PQC_TYPE',defaultValue:null,extendData:'全检:0,抽检:1',onChange:onProcessDetailChange}, {fieldType:1,data: processDetail,label: '检验中心',field: 'Nav_PQCWorkStage.NAME',defaultValue: '',inputDataApi: 'FM/WorkStage/OrderPaged',onSelectValue: onSelectPQCWorkstage,inpuNavField:'ID,NAME',onFilter:onWorkstageFilter}, {fieldType:5,data:processDetail,label:'自动送检',field:'PQC_AUTO_INSPEC',defaultValue:false,onChange:onProcessDetailChange}, {fieldType:3,data:processDetail,label:'自动送检方式',field:'PQC_INSPEC_TYPE',defaultValue:null,extendData:'全部:0,批量:1',onChange:onProcessDetailChange}, {fieldType:7,data:processDetail,label:'送检数量',field:'PQC_INSPEC_QTY',defaultValue:0,onChange:onProcessDetailChange}, {fieldType:5,data:processDetail,label:'是否检验溢出',field:'PQC_INSPEC_QTY_OVER',defaultValue:null,onChange:onProcessDetailChange}, {fieldType:1,data:processDetail,label:'外部工序编号',field:'EXT_PROCEDURE_CODE',defaultValue:'',onChange:onProcessDetailChange}, {fieldType:7,data:processDetail,label:'工艺顺序',field:'NUM',defaultValue:0,onChange:onProcessDetailChange}, {fieldType:8,data:processDetail,label:'备注',field:'REMARK',defaultValue:'',onChange:onProcessDetailChange,span:24,formItemLayout:{ labelCol: { span: 3 }, wrapperCol: { span: 17 }, }}, ] const that=this; const uploadSopProps = { name: 'file', action: config.serviceHost('api/PF/File/UploadFileToImage'), data:{OrgId:this.props.login.OrgId}, fileList:this.state.updateLoadFileList, onPreview:function(file){ that.handleSopShowModal(file); }, onChange(info) { that.setState({ updateLoadFileList:info.fileList, }); if (info.file.status !== 'uploading') { // that.setState({ // updateLoadFileList:info.fileList, // }); } if (info.file.status === 'done') { message.success(`${info.file.name} file uploaded successfully`); } else if (info.file.status === 'error') { message.error(`${info.file.name} file upload failed.`); } }, }; const onChangeDetailFields=(record,field,value)=>{ const data = {...this.state.data}; if(data.Nav_Details){ data.Nav_Details.map(t=>{ if(t.ID==record.ID){ if(field=='SET'){ const splitQty=getDataFieldValue(data,'Nav_Product.SPLIT_QTY'); if(splitQty*value) { setDataFieldValue(t, 'PCS', splitQty * value); } else { setDataFieldValue(t, 'PCS', 0); } } setDataFieldValue(t,field,value); } }) }; this.setState({ data:data, }); } const colDetailField=(field, text, record, index)=>{ if(record.PROPOSAL_TYPE==0){//材料 if('DESCRIPTION'==field) { const onSelectValue = ({record:selectRecord}) => { const data = {...this.state.data}; if (data.Nav_Details) { data.Nav_Details.map(t => { if (t.ID == record.ID) { const fields = ['LENGTH', 'WIDTH']; fields.forEach((n, i) => { setDataFieldValue(t, n, getDataFieldValue(selectRecord, n)); }); setDataFieldValue(t, 'PRODUCT_ID', getDataFieldValue(selectRecord, 'ID')); setDataFieldValue(t, 'DESCRIPTION', getDataFieldValue(selectRecord, 'NAME'));; } }) }; this.setState({ data: data, }); } return this.getInnerControl({ fieldType: 1, data: record, field: 'DESCRIPTION', defaultValue: '', inputDataApi: 'FM/Product/OrderPaged', onSelectValue: onSelectValue, onFilter: ({params}) => { extendRule(params, 'PRODUCT_TYPE', 1, 2); } }) } if(field=='PCS'||field=='SET'||field=='SPLIT_QTY'){ return ; } return getDataFieldValue(record,field); } if('DESCRIPTION'==field) { return record.DESCRIPTION; } else{ return this.getInnerControl({fieldType:7,data:record,field:field,onChange:(e,field)=>{onChangeDetailFields(record,field,e)}}); } return getDataFieldValue(record,field); } const detailColumns=[ {title: '', dataIndex: '', key: '',render: (text, record, index)=>{return colDetailField('DESCRIPTION',text,record,index)}}, {title: '长度', dataIndex: '', key: '', render: (text, record, index)=>{return colDetailField('LENGTH',text,record,index)}}, {title: '宽度', dataIndex: '', key: '',render: (text, record, index)=>{return colDetailField('WIDTH',text,record,index)}}, {title: 'PCS/拼版', dataIndex: 'PCS', key: 'PCS', }, {title: 'SET/拼版', dataIndex: '', key: '', render: (text, record, index)=>{return colDetailField('SET',text,record,index)}}, {title: '可切割数', dataIndex: '', key: '', render: (text, record, index)=>{return colDetailField('SPLIT_QTY',text,record,index)}}, ] const formItemLayout = { labelCol: {span: 6}, wrapperCol: {span: 14}, }; return ( { this.showFields(productFields) } 上传SOP文件 { onHeadRowChange(e,'REMARK')}} /> { this.getBtns('save') } { this.getBtns('saveAndConfirm') } { this.showFields(processFields) } { this.getBtns('addNode') } { this.getBtns('removeNode') } { this.getBtns('clearSelect') } 当前选中:{this.showSelectedTreeNode()} {this.showTreeNode(this.state.treeData)} { this.state.processDetail.ID&&this.showFields(processDetailFields) } ); } } EmProposalEditPage.propTypes = { }; export default connect(({ login, loading, EMemProposalEdit,custom }) => ({ login, loading, EMemProposalEdit,custom }))(Form.create()(EmProposalEditPage));