1296 lines
48 KiB
JavaScript
1296 lines
48 KiB
JavaScript
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 <Button type={item.CSS} icon={item.ICON} style={{ 'marginLeft': '10px' }} key={item.ID} onClick={() => this.handleOk(false,false)}>{item.LABEL}</Button>;
|
||
}
|
||
else if(item.BTN_TYPE==7){
|
||
if(item.CLICK_EVENT=='addNode'){
|
||
return <Button type={item.CSS} icon={item.ICON} style={{ 'marginLeft': '10px' }} key={item.ID} onClick={() => this.addTreeNode()}>{item.LABEL}</Button>;
|
||
}
|
||
else if(item.CLICK_EVENT=='removeNode'){
|
||
return <Button type={item.CSS} icon={item.ICON} style={{ 'marginLeft': '10px' }} key={item.ID} onClick={() => this.removeTreeNode()}>{item.LABEL}</Button>;
|
||
}
|
||
}
|
||
}
|
||
});
|
||
}
|
||
};
|
||
|
||
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 <DropDownPagination inputDataApi={inputDataApi} fieldName={field} inpuNavField={inpuNavField} inputLabelField={inputLabelField}
|
||
data={data} onSelect={onSelectValue} disabled={this.props.data.isShow} onFilter={onFilter}/>
|
||
}
|
||
return <Input value={getDataFieldValue(data,field,defaultValue)} onChange={(e)=>{onChange(e,field)}} disabled={this.props.data.isShow||disabled} />
|
||
}
|
||
else if(fieldType==2){//时间
|
||
}
|
||
|
||
else if(fieldType==3){//下拉
|
||
const options = extendData ? extendData.split(',') : [];
|
||
return <Select value={getDataFieldValue(data,field,defaultValue)} onChange={(e)=>{onChange(e,field)}} disabled={this.props.data.isShow||disabled}>
|
||
{
|
||
options.map((item, key) => {
|
||
let paris = item.split(":");
|
||
return <Option key={key} value={isNotToNum?paris[1]: (+paris[1])}>{paris[0]}</Option>
|
||
})
|
||
}
|
||
</Select>
|
||
}
|
||
|
||
else if(fieldType==4){//单选
|
||
}
|
||
|
||
else if(fieldType==5){//多选
|
||
return <Switch checkedChildren="是" unCheckedChildren="否" checked={getDataFieldValue(data,field,defaultValue)} onChange={(e)=>{onChange(e,field)}} disabled={this.props.data.isShow||disabled} />
|
||
}
|
||
else if(fieldType==6){//长文本
|
||
return <TextArea rows={4} value={getDataFieldValue(data,field,defaultValue)} onChange={(e)=>{onChange(e,field)}} disabled={this.props.data.isShow||disabled}/>
|
||
}
|
||
else if(fieldType==7){//数值
|
||
return <InputNumber value={getDataFieldValue(data,field,defaultValue)} min={0} onChange={(e)=>{onChange(e,field)}} disabled={this.props.data.isShow||disabled}/>
|
||
}
|
||
else if(fieldType==8){//富文本编辑
|
||
return (<Editor ref="editor" icons={ [" undo redo | underline | ","forecolor backcolor "]}
|
||
value={getDataFieldValue(data,field,defaultValue)}
|
||
={(e)=>{onChange(e,field)}}/>)
|
||
}
|
||
return <Input value={getDataFieldValue(data,field,defaultValue)} onChange={(e)=>{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 <Col key={params.field} span={params.span?params.span:12}>
|
||
<Form.Item
|
||
label={<>{ params.isRequery?<span style={{color:'red'}}>*</span>:null}{params.label}</>}
|
||
{...formItemLayout}
|
||
>
|
||
{this.getInnerControl(params)}
|
||
</Form.Item>
|
||
</Col>
|
||
};
|
||
|
||
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 (
|
||
<TreeNode title={title} key={item.ID.toString()} data={item} isLeaf={!(item.Children&&item.Children.length)}>
|
||
{this.showTreeNode(item.Children)}}
|
||
</TreeNode>
|
||
);
|
||
};
|
||
});
|
||
};
|
||
|
||
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 (
|
||
<Spin spinning={loading.global}>
|
||
<Form>
|
||
<Modal visible={this.state.sopVisible} maskClosable={false} onCancel={this.handleSopCloseModal} footer={false} width={"86%"}>
|
||
<FormPage formCode={'WO012'} data={this.state.sopData}/>
|
||
</Modal>
|
||
<Row style={{ 'marginTop': '20px' }}>
|
||
{
|
||
this.showFields(productFields)
|
||
}
|
||
<Col span={12}>
|
||
<Form.Item
|
||
label={'SOP'}
|
||
{...formItemLayout}
|
||
>
|
||
<Upload {...uploadSopProps}>
|
||
<Button disabled={this.props.data.isShow}>
|
||
<Icon type="upload" /> 上传SOP文件
|
||
</Button>
|
||
</Upload>
|
||
</Form.Item>
|
||
</Col>
|
||
|
||
<Col span={12}>
|
||
<Form.Item
|
||
label={'备注'}
|
||
{...formItemLayout}
|
||
>
|
||
<TextArea rows={4} value={data.REMARK} placeholder={'请输入备注'} disabled={this.props.data.isShow} onChange={(e)=>{ onHeadRowChange(e,'REMARK')}} />
|
||
|
||
</Form.Item>
|
||
</Col>
|
||
</Row>
|
||
<Row style={{ 'marginTop': '20px' }}>
|
||
<Col style={{ textAlign: 'right' }}>
|
||
{
|
||
this.getBtns('save')
|
||
}
|
||
{
|
||
this.getBtns('saveAndConfirm')
|
||
}
|
||
</Col>
|
||
</Row>
|
||
<Row style={{ 'marginTop': '20px' }}>
|
||
<Table
|
||
rowKey="ID"
|
||
pagination={false}
|
||
dataSource={this.state.data.Nav_Details}
|
||
columns={detailColumns}
|
||
|
||
/>
|
||
</Row>
|
||
|
||
|
||
<Row style={{ 'marginTop': '20px' }}>
|
||
<Tabs defaultActiveKey="1" >
|
||
<TabPane tab="工艺路线明细" key="1">
|
||
<Row style={{ 'marginTop': '10px' }}>
|
||
{
|
||
this.showFields(processFields)
|
||
}
|
||
</Row>
|
||
<Row style={{ 'marginTop': '10px' }}>
|
||
<Col span={8}>
|
||
<div>
|
||
{
|
||
this.getBtns('addNode')
|
||
}
|
||
{
|
||
this.getBtns('removeNode')
|
||
}
|
||
{
|
||
this.getBtns('clearSelect')
|
||
}
|
||
</div>
|
||
<div style={{ 'marginTop': '10px', 'marginBottom': '10px'}}>
|
||
<label >当前选中:<span style={{ 'fontSize': 'large'}}>{this.showSelectedTreeNode()}</span></label>
|
||
</div>
|
||
<div>
|
||
<Tree showLine onSelect={this.onSelectTreeNode} selectedKeys={this.state.treeSelectedKeys} >
|
||
{this.showTreeNode(this.state.treeData)}
|
||
</Tree>
|
||
</div>
|
||
</Col>
|
||
<Col span={16}>
|
||
{
|
||
this.state.processDetail.ID&&this.showFields(processDetailFields)
|
||
}
|
||
</Col>
|
||
</Row>
|
||
</TabPane>
|
||
</Tabs>
|
||
</Row>
|
||
|
||
</Form>
|
||
</Spin>
|
||
);
|
||
}
|
||
|
||
}
|
||
|
||
EmProposalEditPage.propTypes = {
|
||
};
|
||
|
||
export default connect(({ login, loading, EMemProposalEdit,custom }) => ({ login, loading, EMemProposalEdit,custom }))(Form.create()(EmProposalEditPage));
|