Ext.define('make.view.make.makeBase.FormPanel', { extend: 'saas.view.core.form.FormPanel', xtype: ['make-makebase-formpanel', 'makebase-formpanel'], controller: 'make-makebase-formpanel', viewModel: 'make-makebase-formpanel', viewName: 'make-makebase-formpanel', caller: 'Make', //字段属性 _title: '制造单', _idField: 'id', _codeField: 'ma_code', _statusField: 'ma_status', _statusCodeField: 'ma_statuscode', _auditmanField: 'ma_auditman', _auditdateField: 'ma_auditdate', _relationColumn: 'mm_maid', _readUrl: '/api/make/make/read', _saveUrl: '/api/make/make/save', _auditUrl: '/api/make/make/audit', _unAuditUrl: '/api/make/make/unAudit', _deleteUrl: '/api/make/make/delete', _calMaterial:'/api/make/make/calMaterial', _turnPick:'/api/make/make/turnPick', _turnBack:'/api/make/make/turnBack', _turnScrap:'/api/make/make/turnScrap', _turnIn:'/api/make/make/turnIn', _end:'/api/make/make/end', _resEnd:'/api/make/make/resEnd', _modifyMaterial:'/api/make/make/modifyMaterial', initId: 0, getToolBarItems: function() { let me = this, items = []; let codeHeaderItems = [{ xtype: 'tbtext', bind: { html: 'NO. ' + '{base.codeEditable ? "" : ' + me._codeField + '}' } }, { xtype: 'textfield', name: me._codeField, minHeight: 24, maxHeight: 24, width: 200, cls: 'x-codeeditor', hidden: true, allowBlank: false, regex: /^[^\s~`!!@#¥$%\^……&*(())\-——\-_=+【\[\]】{{}}\|、\\;;::‘\'“”\",,《<。.》>、\/\?\?]*$/, regexText: '不允许输入特殊字符', bind: { value: '{' + me._codeField + '}', hidden: '{!base.codeEditable}' }, enableKeyEvents: true, listeners: { blur: 'codeEditorBlur', keydown: function(th, e, eOpts) { if(e.keyCode == 13) { th.fireEvent('blur'); } }, show: function (field, eOpts) { field.focus(); } } }, { xtype: 'tbtext', cls: 'x-audited', hidden: true, bind: { hidden: '{!(' + me._statusCodeField + ' == "AUDITED" || '+ me._statusCodeField + ' == "END" )}', html: `{${me._statusCodeField}=="AUDITED" ? "已审核" : "已结案"}` } }, { xtype: 'button', cls: 'x-codeeditor-btn', bind: { iconCls: 'fa {base.codeEditable ? "fa-check-circle" : "fa-edit"}', hidden: '{!base.editable || (' + me._statusCodeField + ' == "AUDITED" || '+ me._statusCodeField + ' == "END")}' }, handler: 'codeEditorClick' }, '->']; if(me.codeInHeader) { items = items.concat(codeHeaderItems); } items.push('->'); items = items.concat(me.toolBtns.map(function (btn) { btn.cls = btn.cls ? btn.cls + ' x-formpanel-btn-blue' : 'x-formpanel-btn-blue'; return btn; }).concat(me.defaultBtns)) return items; }, /** * 一些初始化viewModel的方法 */ initViewModel: function () { let me = this, codeField = me._codeField, statusField = me._statusField, statusCodeField = me._statusCodeField, viewModel = me.getViewModel(), auditTexts = me.auditTexts; viewModel.set(codeField, ''); viewModel.set('createTime', Ext.Date.format(new Date(), 'Y-m-d H:i:s')); viewModel.set('updateTime', Ext.Date.format(new Date(), 'Y-m-d H:i:s')); viewModel.set('creatorId', viewModel.get('account').id); viewModel.set('creatorName', viewModel.get('account').realname); if (statusCodeField) { let o = {}; o['bindEditable'] = { bind: '{' + statusCodeField + '}', get: function(value) { // viewModel.set(statusField, value == 'AUDITED' ? '已审核' : '未审核'); viewModel.set(statusField, value ? (value == auditTexts.auditCode ? auditTexts.auditText : auditTexts.unAuditText) : null); // viewModel.set('auditBtnText', value == 'AUDITED' ? '反审核' : '审核'); viewModel.set('auditBtnText', value == auditTexts.auditCode ? auditTexts.unAuditBtnText : auditTexts.auditBtnText); // me.setEditable(value != 'AUDITED'); // form.editable表示强制设置表单编辑属性,与状态无关 if (!Ext.isBoolean(me.editable)) { me.setEditable(value != auditTexts.auditCode && value != me.submitConfig.submittedCode && value != 'END'); } return value; } }; viewModel.setFormulas(o); // viewModel.set(statusCodeField, "UNAUDITED"); viewModel.set(statusCodeField, auditTexts.unAuditCode); } else { // viewModel.set('auditBtnText', "审核"); viewModel.set('auditBtnText', auditTexts.auditBtnText); } }, initComponent: function () { var me = this; me.defaultBtns = [{ cls: 'x-formpanel-btn-blue', xtype: 'button', text: '新增', hidden: true, bind: { hidden: '{!showAddBtn || !id}' }, handler: 'add' }, { hidden: true, xtype: 'button', text: '复制', handler: 'onCopy', bind: { hidden: '{!showCopyBtn || !'+ me._idField + '}', } }, { hidden: true, xtype: 'button', text: '保存', handler: 'onSave', cls:'save-btn', bind: { hidden: '{!showSaveBtn || '+ me._statusCodeField + ' == "AUDITED" || '+ me._statusCodeField + ' == "END"}', disabled: '{!base.valid || '+ me._statusCodeField + ' == "AUDITED" || '+ me._statusCodeField + ' == "END"}', tooltip:'{formBlank}' } }, { hidden: true, xtype: 'button', text: '删除', bind: { hidden: '{!showDeleteBtn || deleteHidden || ' + me._statusCodeField + ' == "AUDITED" || '+ me._statusCodeField + ' == "END" || '+me._statusCodeField+'=="' + me.submitConfig.submittedCode + '"}' }, handler: 'delete' }, { hidden: true, xtype: 'button', bind: { text: `{${me._statusCodeField}=="${me.submitConfig.submittedCode}"?"${me.submitConfig.unSubmitBtnText}":"${me.submitConfig.submitBtnText}"}`, disabled: '{!base.valid}', hidden:`{!showSubmitBtn || !id || ${me._statusCodeField}=="AUDITED" || ${me._statusCodeField}=="END"}` }, handler: "onSubmitBtnClick", }, { hidden: true, xtype: 'button', bind: { text: '{auditBtnText}', disabled: '{!base.valid}', hidden:'{!showAuditBtn}' }, handler: "auditBtnClick", }]; Ext.apply(this, { toolBtns: [{ xtype: 'button', text: '用料计算', hidden: true, bind: { hidden: '{ !(id && ma_statuscode =="UNAUDITED") }' }, handler: 'calMaterial' },{ text: '转领料', xtype: 'button', handler: 'turnPick', bind:{ hidden: '{turnHidden}', }, menu: { cls:'x-query-menu', anchor: '100%', items:[{ text:'转退料', handler:'turnBack' },{ text:'转报废', handler:'turnScrap' }], } },{ xtype: 'button', text: '转完工', hidden: true, bind: { hidden: '{turnHidden}' }, handler: 'turnIn' },{ xtype: 'button', text: '结案', hidden: true, bind: { hidden: '{turnHidden}' }, handler: 'end' },{ xtype: 'button', text: '反结案', hidden: true, bind: { hidden: '{!(ma_statuscode=="END")}' }, handler: 'resEnd' },{ xtype: 'button', text: '用料修改', hidden: true, bind: { hidden: '{turnHidden}' }, handler: 'modifyMaterial' },{ xtype: 'button', text: '工单变更', hidden: true, bind: { hidden: '{turnHidden}' }, handler: 'modifyMake' }], defaultItems: [{ xtype: 'hidden', name: 'id', fieldLabel: 'id', allowBlank: true, columnWidth: 0 },{ xtype: 'productMDbfindTrigger', name: 'ma_prodcode', fieldLabel: '产品编号', allowBlank: false, },{ xtype: 'textfield', name: "pr_detail", fieldLabel: "产品名称", readOnly: "true", ignore: true },{ xtype: 'textfield', name: "pr_spec", fieldLabel: "产品规格", readOnly: "true", maxLength: 200, hidden: true, ignore: true },{ xtype: 'tipTextfield', name: "pr_orispeccode", fieldLabel: "产品型号", editable: false, ignore: true, bind:{ otherInfoTip:'厂家/品牌:{pr_brand}
产品规格:{pr_spec}' } },{ xtype: 'hidden', name: "pr_brand", fieldLabel: "厂家/品牌", ignore: true, },{ xtype: 'hidden', name: "ma_prodid", fieldLabel: "产品ID", },{ xtype: "remotecombo", name: "ma_kind", fieldLabel: "制造类型", storeUrl:'/api/make/kind/list/make', valueField:'mk_name', displayField: 'mk_name', allowBlank: false, columnWidth: 0.25, addHandler: function (b) { var form = this.ownerCmp.ownerCt; this.dialog = form.add({ xtype: 'make-makekind-window', bind: { title: '新增制造类型' }, dataKind: 'makekind', _parent: form, _combo: this.ownerCmp, record: null, session: true, viewModel: { data: { theKind: { id:0, mk_name: null, mk_makind: 'MAKE', mk_allowover: null, mk_unsetfinish:null, mk_zeroprice:1, mk_autoend:null, mk_reminddays:null, mk_ifmrpkind:null, mk_makind_h:true }, zeropricehide:true, } } }); this.dialog.show(); }, editHandler:function(btn,type){ saas.util.BaseUtil.openTab('make-makekind-makekindlist', '制造类型设置','maintab--make-makekind-makekindlist'); var combo = btn.ownerCt.up('remotecombo'); if(combo){ combo.collapse(); } }, listeners:{ change:function(f, newValue, oldValue, eOpts){ var me=this; let form = f.ownerCt if(newValue !=''){ saas.util.BaseUtil.request({ url: '/api/make/kind/list/make', method: 'GET' }).then(function(res) { if(res.success){ if(res.data){ var flag=false; Ext.Array.each(res.data,function(d,index){ if(d.mk_name == newValue){ form.down('[name=ma_kindid]').setValue(d.id); flag = true; } if(flag){ return false; } }); } } }).catch(function(res) { saas.util.BaseUtil.showErrorToast('选择的制造类型有误: ' + res.message); }); } } } },{ xtype: 'hidden', name: "ma_kindid", fieldLabel: "制造类型ID", },{ xtype: 'numberfield', name: 'ma_qty', fieldLabel: '数量', allowBlank: false, }, { xtype: 'numberfield', name: 'ma_madeqty', fieldLabel: '已完工数', readOnly:true, thousandSeparator: ',', renderer: function (v){ if(!v){ v=0; } return '

'+saas.util.BaseUtil.numberFixFormat(v, 6, true)+'' }, ignore:true, }, { xtype: 'datefield', name: 'ma_planbegindate', fieldLabel: '计划开工日期', allowBlank: false, labelWidth:110, labelAlign : 'right', format: 'Y-m-d', },{ xtype: 'datefield', name: 'ma_planenddate', fieldLabel: '计划完工日期', allowBlank: false, labelWidth:110, labelAlign : 'right', format: 'Y-m-d', },{ xtype: 'remotecombo', storeUrl: '/api/document/workcenter/getCombo', name: "ma_wcname", fieldLabel: "工作中心", addHandler: function (b) { var form = this.ownerCmp.ownerCt; this.dialog = form.add({ xtype: 'document-workcenter-window', bind: { title: '新增工作中心' }, dataKind: 'workcenter', _parent: form, _combo: this.ownerCmp, record: null, session: true }); this.dialog.show(); }, editHandler:function(btn,type){ saas.util.BaseUtil.openTab('document-workcenter-datalist', '工作中心','maintab--document-workcenter-datalist'); var combo = btn.ownerCt.up('remotecombo'); if(combo){ combo.collapse(); } } },{ xtype: "saledetailDbfindTrigger", name: "ma_salecode", fieldLabel: "订单编号", columnWidth: 0.25, defaultCondition:"sa_statuscode='AUDITED' and pr_manutype IN('MAKE','OSMAKE')" },{ xtype: 'hidden', name: "ma_saleid", fieldLabel: "订单ID", },{ xtype: 'hidden', name: "ma_sfcode", fieldLabel: "备货编号", ignore:true },{ xtype: "customerDbfindTrigger", name: "ma_custname", fieldLabel: "客户名称", columnWidth: 0.25, },{ xtype: 'hidden', name: "ma_custcode", fieldLabel: "客户编号", },{ xtype: 'hidden', name: "ma_custid", fieldLabel: "客户ID", },{ xtype: "datefield", name: "ma_delivery", fieldLabel: "交货日期" },{ xtype: 'hidden', name:'ma_tasktype', fieldLabel: '单据类型', allowBlank: false, defaultValue:'MAKE' },{ name: "detailGridField", xtype: "detailGridField", storeModel: 'make.model.make.MakeMaterial', deleteDetailUrl: '/api/make/make/deleteDetail', allowEmpty: true, detnoColumn: 'mm_detno', columns: [{ text: "id", dataIndex: "id", xtype: "numbercolumn", hidden: true }, { text: "物料id", dataIndex: "mm_prodid", xtype: "numbercolumn", hidden: true },{ text: "物料编号", width: 150, dataIndex: "mm_prodcode", items: null, editor: { displayField: "display", editable: true, format: "", hideTrigger: false, maxLength: 100, minValue: null, positiveNum: false, queryMode: "local", store: null, valueField: "value", xtype: "productMultiDbfindTrigger" } }, { text: "厂家/品牌", hidden:true, width: 100.0, dataIndex: "pr_brand", ignore: true, renderer: function (v, m, r) { if (!v) { return r.data["productDTO"] ? r.data["productDTO"][m.column.dataIndex] : null; } return v; } },{ text: "物料名称", width: 150.0, dataIndex: "pr_detail", ignore: true, renderer: function (v, m, r) { if (!v) { return r.data["productDTO"] ? r.data["productDTO"][m.column.dataIndex] : null; } return v; } }, { text: "型号", width: 200.0, dataIndex: "pr_orispeccode", ignore: true, renderer: function (v, m, r) { var str = ''; if(r.data["productDTO"] ){ if(r.data["productDTO"]['pr_brand']){ str += '厂家/品牌:'+ r.data["productDTO"]['pr_brand'] + '
'; } if(r.data["productDTO"]['pr_spec']){ str += '规格:' + r.data["productDTO"]['pr_spec']; } if(str) m.tdAttr = 'data-qtip="'+ str +'"'; if (!v) { return r.data["productDTO"] ? r.data["productDTO"][m.column.dataIndex] : null; } } return v; } }, { text: "单位", width: 65.0, dataIndex: "pr_unit", ignore: true, renderer: function (v, m, r) { if (!v) { return r.data["productDTO"] ? r.data["productDTO"][m.column.dataIndex] : null; } return v; } },{ text: "数量小数位数", dataIndex: "pu_decimal", ignore: true, hidden:true, renderer: function (v, m, r) { if (!v) { return r.data["productDTO"] ? r.data["productDTO"][m.column.dataIndex] : null; } return v; } },{ text: "单位用量", dataIndex: "mm_oneuseqty", xtype: 'numbercolumn', width: 110.0, editor: { xtype: "numberfield", decimalPrecision: 6, minValue: 0, listeners:{ change:'onOneUseChange' } }, renderer: function(v, m, r) { return saas.util.BaseUtil.numberFormat(v, 6, true); }, },{ text: "需求数", dataIndex: "mm_qty", xtype: 'numbercolumn', width: 110, editor: { xtype: "numberfield", decimalPrecision: 6, minValue: 0 }, renderer: function(v, m, r) { return saas.util.BaseUtil.numberFormat(v, 6, true); } }, { text: 'model映射需要', dataIndex: 'productDTO', hidden: true, },{ text: "已领数", xtype: 'numbercolumn', dataIndex: "mm_havegetqty", width: 110, renderer: function(v, m, r) { return saas.util.BaseUtil.numberFormat(v, 6, true); }, ignore:true, }, { text: "已转领料数", xtype: 'numbercolumn', dataIndex: "mm_turngetqty", width: 110, renderer: function(v, m, r) { return saas.util.BaseUtil.numberFormat(v, 6, true); }, ignore:true, }, { text: "未领数", xtype: 'numbercolumn', dataIndex: "mm_restgetqty", width: 110, ignore: true, renderer : function(v, m, r) { v = r.get('mm_qty') + (r.get('mm_scrapqty')||0) - (r.get('mm_havegetqty')||0)-(r.get('mm_turngetqty')||0); return saas.util.BaseUtil.numberFormat(v, 6, true); }, ignore:true, }, { text: "已转退料数", xtype: 'numbercolumn', dataIndex: "mm_turnbackqty", width: 110, renderer: function(v, m, r) { return saas.util.BaseUtil.numberFormat(v, 6, true); }, ignore:true, },{ text: "制程不良数", xtype: 'numbercolumn', dataIndex: "mm_returnmqty", width: 110, renderer: function(v, m, r) { return saas.util.BaseUtil.numberFormat(v, 6, true); }, ignore:true, }, { text: "报废数", xtype: 'numbercolumn', dataIndex: "mm_scrapqty", width: 110, renderer: function(v, m, r) { return saas.util.BaseUtil.numberFormat(v, 6, true); }, ignore:true, }, { text: "已转报废数", xtype: 'numbercolumn', dataIndex: "mm_turnscrapqty", width: 110, renderer: function(v, m, r) { return saas.util.BaseUtil.numberFormat(v, 6, true); }, ignore:true, }, { text: "备注", dataIndex: "mm_remark", editor: { xtype: "textfield" }, width: 250, },{ text: "规格", hidden:true, width: 200, dataIndex: "pr_spec", ignore: true, renderer: function (v, m, r) { if (!v) { return r.data["productDTO"] ? r.data["productDTO"][m.column.dataIndex] : null; } return v; } }, ] }, { xtype: "textfield", name: "ma_remark", fieldLabel: "备注", columnWidth: 0.5 }, { xtype: "displayfield", name: "ma_getstatus", fieldLabel: "领料状态", columnWidth: 0.25, renderer: function (v){ if(v == '未领料' || v == "部分领料"){ return '

'+v+'' }else if(v == '已领料'){ return '

'+v+'' }else{ return ''; } }, ignore:true, }, { xtype: "displayfield", name: "ma_finishstatus", fieldLabel: "完工状态", columnWidth: 0.25, renderer: function (v){ if(v == '未完工' || v == "部分完工"){ return '

'+v+'' }else if(v == '已完工'){ return '

'+v+'' }else{ return ''; } }, ignore:true, },{ xtype: "hidden", name: "creatorId", fieldLabel: "录入人ID", readOnly: true }, { xtype: "textfield", name: "creatorName", fieldLabel: "录入人", readOnly: true, columnWidth: 0.3 }, { xtype: "datefield", name: "createTime", fieldLabel: "单据日期", readOnly: true, defaultValue: new Date() }, { xtype: "hidden", name: "updaterId", fieldLabel: "更新人ID", readOnly: true }, { xtype: "hidden", name: "updaterName", fieldLabel: "更新人", readOnly: true }, { xtype: "hidden", name: "updateTime", fieldLabel: "更新日期", readOnly: true, defaultValue: new Date() }, { xtype: "textfield", name: "ma_auditman", fieldLabel: "审核人", columnWidth: 0.3, readOnly: true }, { xtype: "hidden", name: "ma_auditdate", fieldLabel: "审核日期", readOnly: true }], }); this.callParent(arguments); }, beforeAudit: function () { var me = this, controller = me.getController(), viewModel = me.getViewModel(), store = viewModel.get('detail0').detailStore, items = store.getData().items, str = ''; //工单数量为0 if(!viewModel.get('ma_qty')){ saas.util.BaseUtil.showErrorToast("工单数量不允许为0"); return false; } var begin = Ext.isDate(viewModel.get("ma_planbegindate")) ? Ext.Date.format(viewModel.get("ma_planbegindate"), 'Y-m-d H:i:s') : viewModel.get("ma_planbegindate"); var end = Ext.isDate(viewModel.get("ma_planenddate")) ? Ext.Date.format(viewModel.get("ma_planenddate"), 'Y-m-d H:i:s') : viewModel.get("ma_planenddate"); //计划完工日期小于计划开工日期时限制保存并提示 if(begin > end ){ saas.util.BaseUtil.showErrorToast("计划完工日期不允许小于计划开工日期"); return false; } Ext.Array.each(items, function (item, i) { if (!item.get('mm_oneuseqty') && item.get('mm_prodcode')) { str = str + item.get('mm_detno') + ',' } }); if (str != '') { saas.util.BaseUtil.showConfirm('提示', '行: ' + str + '物料单位用量为0,是否继续审核?') .then(function (y) { if (y == 'yes') { controller.audit(); } }); } else { controller.audit(); } return false; }, beforeSave: function () { var me = this, controller = me.getController(), viewModel = me.getViewModel(), store = viewModel.get('detail0').detailStore, items = store.getData().items, controller = me.getController(), str = ''; //工单数量为0 if(!viewModel.get('ma_qty')){ saas.util.BaseUtil.showErrorToast("工单数量不允许为0"); return false; } var begin = Ext.isDate(viewModel.get("ma_planbegindate")) ? Ext.Date.format(viewModel.get("ma_planbegindate"), 'Y-m-d H:i:s') : viewModel.get("ma_planbegindate"); var end = Ext.isDate(viewModel.get("ma_planenddate")) ? Ext.Date.format(viewModel.get("ma_planenddate"), 'Y-m-d H:i:s') : viewModel.get("ma_planenddate"); //计划完工日期小于计划开工日期时限制保存并提示 if(begin > end ){ saas.util.BaseUtil.showErrorToast("计划完工日期不允许小于计划开工日期"); return false; } Ext.Array.each(items, function (item, i) { if (!item.get('mm_oneuseqty') && item.get('mm_prodcode')) { str = str + item.get('mm_detno') + ',' } }); if (str != '') { saas.util.BaseUtil.showConfirm('提示', '行: ' + str + '物料单位用量为0,是否继续保存?') .then(function (y) { if (y == 'yes') { controller.save(); } }); } else { controller.save(); } return false; }, setInquiry: function () { var form = this; var ma_kind = form.down('[name=ma_kind]'); if(!ma_kind.getValue()){ saas.util.BaseUtil.request({ url: '/api/make/kind/list/make', method: 'GET' }).then(function(res) { if(res.success){ if(res.data){ var flag=false; Ext.Array.each(res.data,function(d,index){ if(d.mk_ifmrpkind){ form.down('[name=ma_kind]').setValue(d.mk_name); flag = true; } if(flag){ return false; } }); } } }).catch(function(res) { saas.util.BaseUtil.showErrorToast(res.message); }); } //有预测来源无订单编号的工单 展示预测来源编号 var ma_salecode = form.down('[name=ma_salecode]'); var ma_sfcode = form.down('[name=ma_sfcode]'); if(!ma_salecode.getValue()&&ma_sfcode.getValue()){ ma_salecode.setValue(ma_sfcode.getValue()); } return true; } });