Ext.define('saas.view.sale.b2b.QuoteWin', { extend: 'Ext.window.Window', xtype: 'quotewin', title: '报价信息', width: '800', height: '400', scrollable: true, cls: 'x-window-dbfind', closlayout: 'fit', modal: true, bodyPadding: 20, initComponent: function () { var me = this; var record = me.record; var quoted = me.quoted; Ext.apply(me, { items: [{ xtype: 'form', layout: 'column', fieldDefaults: { margin: '0 0 10 0', labelAlign: 'right', labelWidth: 90, columnWidth: 0.5, }, isValid: function (values) { var leadtimeField = this.getForm().findField('leadtime'); var taxrateField = this.getForm().findField('taxrate'); var grid = this.down('grid'); var gridData = grid.store.getData().items; var count = gridData.length > 0; if(leadtimeField.getValue() == undefined) { saas.util.BaseUtil.showErrorToast('交期不可为空'); return false; } if(leadtimeField.getValue() <= 0) { saas.util.BaseUtil.showErrorToast('交期必须大于零'); return false; } if(taxrateField.getValue() == undefined) { saas.util.BaseUtil.showErrorToast('税率不可为空'); return false; } if(taxrateField.getValue() <= 0) { saas.util.BaseUtil.showErrorToast('税率必须大于零'); return false; } if(!count) { saas.util.BaseUtil.showErrorToast('梯度单价不可为空'); return false; } let lastQ = 0; for (var x = 0; x < gridData.length; x++) { let d = gridData[x]; let idx = d.get('no'); if (!d.get('lapQty')) { saas.util.BaseUtil.showErrorToast('序号为' + idx + '的行梯度有误'); return false; } if(d.get('lapQty') <= lastQ) { saas.util.BaseUtil.showErrorToast('序号为' + idx + '的行梯度需要大于上一梯度设置'); return false; } if(!d.get('price')) { saas.util.BaseUtil.showErrorToast('序号为' + idx + '的行单价有误'); return false; } lastQ = d.get('lapQty'); } return true; }, items: [{ xtype: 'textfield', fieldLabel: '品牌', name: 'prodBrand', readOnly: true, value: record.get('prodBrand') }, { xtype: 'textfield', fieldLabel: '名称', name: 'prodName', readOnly: true, value: record.get('prodName') }, { xtype: 'textfield', fieldLabel: '型号', name: 'prodOrispeccode', readOnly: true, value: record.get('prodOrispeccode') }, { xtype: 'textfield', fieldLabel: '规格', name: 'prodSpec', readOnly: true, value: record.get('prodSpec') }, { xtype: 'numberfield', fieldLabel: '交期(天)', name: 'leadtime', allowBlank: false, vtype: 'positiveNumber', beforeLabelTextTpl: "*" }, { xtype: 'numberfield', fieldLabel: '税率', name: 'taxrate', maxValue: 100, allowBlank: false, vtype: 'positiveNumber', beforeLabelTextTpl: "*" }, { xtype: 'detailGridField', detnoColumn: 'no', minHeight: 145, emptyRows: 3, showCount: false, width: 280, store: Ext.create('Ext.data.Store', { fields: [{ name: 'no', type: 'int' }, { name: 'lapQty', type: 'int', vtype: 'positiveNumber' }, { name: 'price', type: 'float', vtype: 'positiveNumber' }], data: [] }), columns: [{ text: '梯度', dataIndex: 'lapQty', xtype: 'numbercolumn', editor: { xtype: "numberfield", decimalPrecision: 0, minValue: 0 }, renderer: function (v, m, r) { return saas.util.BaseUtil.numberFormat(v, 0, false); }, }, { text: '单价', dataIndex: 'price', xtype: 'numbercolumn', editor: { xtype: "numberfield", decimalPrecision: 4, minValue: 0 }, renderer: function (v, m, r) { return saas.util.BaseUtil.numberFormat(v, 4, true); }, }], listeners: { beforeaddrow: function(grid, index, data) { if(grid.store.getCount() < 5) { return true; }else { saas.util.BaseUtil.showErrorToast('最多只能设置5条梯度价格'); return false; } } } }, { xtype: 'textfield', name: 'message', columnWidth: 1, fieldLabel: '回复信息', hidden: true }] }], buttonAlign: 'center', buttons: [{ text: '确定', handler: function () { if(quoted && record.get('qutations')) { me.close(); return; } var win = this.up('window'), form = win.down('form'), grid = form.down('grid'); if (form.isValid()) { var values = form.getValues(); Ext.Object.mergeIf(values, record.data); values.detail = grid.store.getData().items.map(function(r) { return r.data; }) me.onQuote(values); } } }, { text: '取消', handler: function () { me.close(); } }] }); me.callParent(arguments); }, listeners: { afterrender: function() { var me = this, form = me.down('form'), leadtimeField = form.getForm().findField('leadtime'), taxrateField = form.getForm().findField('taxrate'), messageField = form.getForm().findField('message'), grid = form.down('grid'), store = grid.store, record = me.record, qutations = record.get('qutations'), quoted = me.quoted, storeData = []; if(quoted) { leadtimeField.setReadOnly(true); taxrateField.setReadOnly(true); grid.setGridDisabled(); leadtimeField.setValue(qutations.leadTime); taxrateField.setValue(qutations.taxRate); storeData = qutations.replies.map(function(r, i) { r.no = i + 1; return r; }); store.loadData(storeData); if(qutations.agreed == 0) { messageField.setValue(qutations.refusereason); messageField.setVisible(true); } } } }, onQuote: function (values) { var view = this; var params = { sourceId: values.sourceId, inquiry: { id: values.sourceId, enUU: values.enUU, recorderUU: values.recorderUU, code: values.inquiryCode, }, userUU: values.userUU, userName: values.userName, userTel: values.userTel, currency: "RMB", taxrate: values.taxrate, leadtime: values.leadtime, // 交期 replies: values.detail.map(function(d) { return { lapQty: d.lapQty, price: d.price } }), // 梯度价格, date: Ext.Date.format(new Date(), 'Y-m-d H:i:s'), // 当前日期 qutoApp: "sp", // 固定标识 endDate: values.endDate, prodTitle: values.prodName, spec: values.prodSpec, cmpCode: values.prodOrispeccode, inbrand: values.prodBrand, isReplace: 0, }; view.setLoading(true); saas.util.BaseUtil.request({ // url: 'http://10.1.80.23:8560/api/sale/sale/businessChance/saveQuote', url: '/api/sale/sale/businessChance/saveQuote', params: JSON.stringify(params), method: 'POST' }).then(function (res) { view.setLoading(false); saas.util.BaseUtil.showSuccessToast('报价成功'); view.close(); view.listView.refresh(); }).catch(function (e) { view.setLoading(false); saas.util.BaseUtil.showErrorToast('报价失败: ' + e.message); }); }, });