FormPanel.js 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911
  1. Ext.define('make.view.make.makeBase.FormPanel', {
  2. extend: 'saas.view.core.form.FormPanel',
  3. xtype: ['make-makebase-formpanel', 'makebase-formpanel'],
  4. controller: 'make-makebase-formpanel',
  5. viewModel: 'make-makebase-formpanel',
  6. viewName: 'make-makebase-formpanel',
  7. caller: 'Make',
  8. //字段属性
  9. _title: '制造单',
  10. _idField: 'id',
  11. _codeField: 'ma_code',
  12. _statusField: 'ma_status',
  13. _statusCodeField: 'ma_statuscode',
  14. _auditmanField: 'ma_auditman',
  15. _auditdateField: 'ma_auditdate',
  16. _relationColumn: 'mm_maid',
  17. _readUrl: '/api/make/make/read',
  18. _saveUrl: '/api/make/make/save',
  19. _auditUrl: '/api/make/make/audit',
  20. _unAuditUrl: '/api/make/make/unAudit',
  21. _deleteUrl: '/api/make/make/delete',
  22. _calMaterial:'/api/make/make/calMaterial',
  23. _turnPick:'/api/make/make/turnPick',
  24. _turnBack:'/api/make/make/turnBack',
  25. _turnScrap:'/api/make/make/turnScrap',
  26. _turnIn:'/api/make/make/turnIn',
  27. _end:'/api/make/make/end',
  28. _resEnd:'/api/make/make/resEnd',
  29. _modifyMaterial:'/api/make/make/modifyMaterial',
  30. initId: 0,
  31. getToolBarItems: function() {
  32. let me = this, items = [];
  33. let codeHeaderItems = [{
  34. xtype: 'tbtext',
  35. bind: {
  36. html: '<span class="x-tb x-no">NO. </span>' +
  37. '<span class="x-tb x-code">{base.codeEditable ? "" : ' + me._codeField + '}</span>'
  38. }
  39. }, {
  40. xtype: 'textfield',
  41. name: me._codeField,
  42. minHeight: 24,
  43. maxHeight: 24,
  44. width: 200,
  45. cls: 'x-codeeditor',
  46. hidden: true,
  47. allowBlank: false,
  48. regex: /^[^\s~`!!@#¥$%\^……&*(())\-——\-_=+【\[\]】{{}}\|、\\;;::‘\'“”\",,《<。.》>、\/\?\?]*$/,
  49. regexText: '不允许输入特殊字符',
  50. bind: {
  51. value: '{' + me._codeField + '}',
  52. hidden: '{!base.codeEditable}'
  53. },
  54. enableKeyEvents: true,
  55. listeners: {
  56. blur: 'codeEditorBlur',
  57. keydown: function(th, e, eOpts) {
  58. if(e.keyCode == 13) {
  59. th.fireEvent('blur');
  60. }
  61. },
  62. show: function (field, eOpts) {
  63. field.focus();
  64. }
  65. }
  66. }, {
  67. xtype: 'tbtext',
  68. cls: 'x-audited',
  69. hidden: true,
  70. bind: {
  71. hidden: '{!(' + me._statusCodeField + ' == "AUDITED" || '+ me._statusCodeField + ' == "END" )}',
  72. html: `{${me._statusCodeField}=="AUDITED" ? "已审核" : "已结案"}`
  73. }
  74. }, {
  75. xtype: 'button',
  76. cls: 'x-codeeditor-btn',
  77. bind: {
  78. iconCls: 'fa {base.codeEditable ? "fa-check-circle" : "fa-edit"}',
  79. hidden: '{!base.editable || (' + me._statusCodeField + ' == "AUDITED" || '+ me._statusCodeField + ' == "END")}'
  80. },
  81. handler: 'codeEditorClick'
  82. }, '->'];
  83. if(me.codeInHeader) {
  84. items = items.concat(codeHeaderItems);
  85. }
  86. items.push('->');
  87. items = items.concat(me.toolBtns.map(function (btn) {
  88. btn.cls = btn.cls ? btn.cls + ' x-formpanel-btn-blue' : 'x-formpanel-btn-blue';
  89. return btn;
  90. }).concat(me.defaultBtns))
  91. return items;
  92. },
  93. /**
  94. * 一些初始化viewModel的方法
  95. */
  96. initViewModel: function () {
  97. let me = this,
  98. codeField = me._codeField,
  99. statusField = me._statusField,
  100. statusCodeField = me._statusCodeField,
  101. viewModel = me.getViewModel(),
  102. auditTexts = me.auditTexts;
  103. viewModel.set(codeField, '');
  104. viewModel.set('createTime', Ext.Date.format(new Date(), 'Y-m-d H:i:s'));
  105. viewModel.set('updateTime', Ext.Date.format(new Date(), 'Y-m-d H:i:s'));
  106. viewModel.set('creatorId', viewModel.get('account').id);
  107. viewModel.set('creatorName', viewModel.get('account').realname);
  108. if (statusCodeField) {
  109. let o = {};
  110. o['bindEditable'] = {
  111. bind: '{' + statusCodeField + '}',
  112. get: function(value) {
  113. // viewModel.set(statusField, value == 'AUDITED' ? '已审核' : '未审核');
  114. viewModel.set(statusField, value ? (value == auditTexts.auditCode ? auditTexts.auditText : auditTexts.unAuditText) : null);
  115. // viewModel.set('auditBtnText', value == 'AUDITED' ? '反审核' : '审核');
  116. viewModel.set('auditBtnText', value == auditTexts.auditCode ? auditTexts.unAuditBtnText : auditTexts.auditBtnText);
  117. // me.setEditable(value != 'AUDITED');
  118. // form.editable表示强制设置表单编辑属性,与状态无关
  119. if (!Ext.isBoolean(me.editable)) {
  120. me.setEditable(value != auditTexts.auditCode && value != me.submitConfig.submittedCode && value != 'END');
  121. }
  122. return value;
  123. }
  124. };
  125. viewModel.setFormulas(o);
  126. // viewModel.set(statusCodeField, "UNAUDITED");
  127. viewModel.set(statusCodeField, auditTexts.unAuditCode);
  128. } else {
  129. // viewModel.set('auditBtnText', "审核");
  130. viewModel.set('auditBtnText', auditTexts.auditBtnText);
  131. }
  132. },
  133. initComponent: function () {
  134. var me = this;
  135. me.defaultBtns = [{
  136. cls: 'x-formpanel-btn-blue',
  137. xtype: 'button',
  138. text: '新增',
  139. hidden: true,
  140. bind: {
  141. hidden: '{!showAddBtn || !id}'
  142. },
  143. handler: 'add'
  144. }, {
  145. hidden: true,
  146. xtype: 'button',
  147. text: '复制',
  148. handler: 'onCopy',
  149. bind: {
  150. hidden: '{!showCopyBtn || !'+ me._idField + '}',
  151. }
  152. }, {
  153. hidden: true,
  154. xtype: 'button',
  155. text: '保存',
  156. handler: 'onSave',
  157. cls:'save-btn',
  158. bind: {
  159. hidden: '{!showSaveBtn || '+ me._statusCodeField + ' == "AUDITED" || '+ me._statusCodeField + ' == "END"}',
  160. disabled: '{!base.valid || '+ me._statusCodeField + ' == "AUDITED" || '+ me._statusCodeField + ' == "END"}',
  161. tooltip:'{formBlank}'
  162. }
  163. }, {
  164. hidden: true,
  165. xtype: 'button',
  166. text: '删除',
  167. bind: {
  168. hidden: '{!showDeleteBtn || deleteHidden || ' + me._statusCodeField + ' == "AUDITED" || '+ me._statusCodeField + ' == "END" || '+me._statusCodeField+'=="' + me.submitConfig.submittedCode + '"}'
  169. },
  170. handler: 'delete'
  171. }, {
  172. hidden: true,
  173. xtype: 'button',
  174. bind: {
  175. text: `{${me._statusCodeField}=="${me.submitConfig.submittedCode}"?"${me.submitConfig.unSubmitBtnText}":"${me.submitConfig.submitBtnText}"}`,
  176. disabled: '{!base.valid}',
  177. hidden:`{!showSubmitBtn || !id || ${me._statusCodeField}=="AUDITED" || ${me._statusCodeField}=="END"}`
  178. },
  179. handler: "onSubmitBtnClick",
  180. }, {
  181. hidden: true,
  182. xtype: 'button',
  183. bind: {
  184. text: '{auditBtnText}',
  185. disabled: '{!base.valid}',
  186. hidden:'{!showAuditBtn}'
  187. },
  188. handler: "auditBtnClick",
  189. }];
  190. Ext.apply(this, {
  191. toolBtns: [{
  192. xtype: 'button',
  193. text: '用料计算',
  194. hidden: true,
  195. bind: {
  196. hidden: '{ !(id && ma_statuscode =="UNAUDITED") }'
  197. },
  198. handler: 'calMaterial'
  199. },{
  200. text: '转领料',
  201. xtype: 'button',
  202. handler: 'turnPick',
  203. bind:{
  204. hidden: '{turnHidden}',
  205. },
  206. menu: {
  207. cls:'x-query-menu',
  208. anchor: '100%',
  209. items:[{
  210. text:'转退料',
  211. handler:'turnBack'
  212. },{
  213. text:'转报废',
  214. handler:'turnScrap'
  215. }],
  216. }
  217. },{
  218. xtype: 'button',
  219. text: '转完工',
  220. hidden: true,
  221. bind: {
  222. hidden: '{turnHidden}'
  223. },
  224. handler: 'turnIn'
  225. },{
  226. xtype: 'button',
  227. text: '结案',
  228. hidden: true,
  229. bind: {
  230. hidden: '{turnHidden}'
  231. },
  232. handler: 'end'
  233. },{
  234. xtype: 'button',
  235. text: '反结案',
  236. hidden: true,
  237. bind: {
  238. hidden: '{!(ma_statuscode=="END")}'
  239. },
  240. handler: 'resEnd'
  241. },{
  242. xtype: 'button',
  243. text: '用料修改',
  244. hidden: true,
  245. bind: {
  246. hidden: '{turnHidden}'
  247. },
  248. handler: 'modifyMaterial'
  249. },{
  250. xtype: 'button',
  251. text: '工单变更',
  252. hidden: true,
  253. bind: {
  254. hidden: '{turnHidden}'
  255. },
  256. handler: 'modifyMake'
  257. }],
  258. defaultItems: [{
  259. xtype: 'hidden',
  260. name: 'id',
  261. fieldLabel: 'id',
  262. allowBlank: true,
  263. columnWidth: 0
  264. },{
  265. xtype: 'productMDbfindTrigger',
  266. name: 'ma_prodcode',
  267. fieldLabel: '产品编号',
  268. allowBlank: false,
  269. },{
  270. xtype: 'textfield',
  271. name: "pr_detail",
  272. fieldLabel: "产品名称",
  273. readOnly: "true",
  274. ignore: true
  275. },{
  276. xtype: 'textfield',
  277. name: "pr_spec",
  278. fieldLabel: "产品规格",
  279. readOnly: "true",
  280. maxLength: 200,
  281. hidden: true,
  282. ignore: true
  283. },{
  284. xtype: 'tipTextfield',
  285. name: "pr_orispeccode",
  286. fieldLabel: "产品型号",
  287. editable: false,
  288. ignore: true,
  289. bind:{
  290. otherInfoTip:'厂家/品牌:{pr_brand}<br>产品规格:{pr_spec}'
  291. }
  292. },{
  293. xtype: 'hidden',
  294. name: "pr_brand",
  295. fieldLabel: "厂家/品牌",
  296. ignore: true,
  297. },{
  298. xtype: 'hidden',
  299. name: "ma_prodid",
  300. fieldLabel: "产品ID",
  301. },{
  302. xtype: "remotecombo",
  303. name: "ma_kind",
  304. fieldLabel: "制造类型",
  305. storeUrl:'/api/make/kind/list/make',
  306. valueField:'mk_name',
  307. displayField: 'mk_name',
  308. allowBlank: false,
  309. columnWidth: 0.25,
  310. addHandler: function (b) {
  311. var form = this.ownerCmp.ownerCt;
  312. this.dialog = form.add({
  313. xtype: 'make-makekind-window',
  314. bind: {
  315. title: '新增制造类型'
  316. },
  317. dataKind: 'makekind',
  318. _parent: form,
  319. _combo: this.ownerCmp,
  320. record: null,
  321. session: true,
  322. viewModel: {
  323. data: {
  324. theKind: {
  325. id:0,
  326. mk_name: null,
  327. mk_makind: 'MAKE',
  328. mk_allowover: null,
  329. mk_unsetfinish:null,
  330. mk_zeroprice:1,
  331. mk_autoend:null,
  332. mk_reminddays:null,
  333. mk_ifmrpkind:null,
  334. mk_makind_h:true
  335. },
  336. zeropricehide:true,
  337. }
  338. }
  339. });
  340. this.dialog.show();
  341. },
  342. editHandler:function(btn,type){
  343. saas.util.BaseUtil.openTab('make-makekind-makekindlist', '制造类型设置','maintab--make-makekind-makekindlist');
  344. var combo = btn.ownerCt.up('remotecombo');
  345. if(combo){
  346. combo.collapse();
  347. }
  348. },
  349. listeners:{
  350. change:function(f, newValue, oldValue, eOpts){
  351. var me=this;
  352. let form = f.ownerCt
  353. if(newValue !=''){
  354. saas.util.BaseUtil.request({
  355. url: '/api/make/kind/list/make',
  356. method: 'GET'
  357. }).then(function(res) {
  358. if(res.success){
  359. if(res.data){
  360. var flag=false;
  361. Ext.Array.each(res.data,function(d,index){
  362. if(d.mk_name == newValue){
  363. form.down('[name=ma_kindid]').setValue(d.id);
  364. flag = true;
  365. }
  366. if(flag){
  367. return false;
  368. }
  369. });
  370. }
  371. }
  372. }).catch(function(res) {
  373. saas.util.BaseUtil.showErrorToast('选择的制造类型有误: ' + res.message);
  374. });
  375. }
  376. }
  377. }
  378. },{
  379. xtype: 'hidden',
  380. name: "ma_kindid",
  381. fieldLabel: "制造类型ID",
  382. },{
  383. xtype: 'numberfield',
  384. name: 'ma_qty',
  385. fieldLabel: '数量',
  386. allowBlank: false,
  387. }, {
  388. xtype: 'numberfield',
  389. name: 'ma_madeqty',
  390. fieldLabel: '已完工数',
  391. readOnly:true,
  392. thousandSeparator: ',',
  393. renderer: function (v){
  394. if(!v){
  395. v=0;
  396. }
  397. return '<p class="money-rtl"><B>'+saas.util.BaseUtil.numberFixFormat(v, 6, true)+''
  398. },
  399. ignore:true,
  400. }, {
  401. xtype: 'datefield',
  402. name: 'ma_planbegindate',
  403. fieldLabel: '计划开工日期',
  404. allowBlank: false,
  405. labelWidth:110,
  406. labelAlign : 'right',
  407. format: 'Y-m-d',
  408. },{
  409. xtype: 'datefield',
  410. name: 'ma_planenddate',
  411. fieldLabel: '计划完工日期',
  412. allowBlank: false,
  413. labelWidth:110,
  414. labelAlign : 'right',
  415. format: 'Y-m-d',
  416. },{
  417. xtype: 'remotecombo',
  418. storeUrl: '/api/document/workcenter/getCombo',
  419. name: "ma_wcname",
  420. fieldLabel: "工作中心",
  421. addHandler: function (b) {
  422. var form = this.ownerCmp.ownerCt;
  423. this.dialog = form.add({
  424. xtype: 'document-workcenter-window',
  425. bind: {
  426. title: '新增工作中心'
  427. },
  428. dataKind: 'workcenter',
  429. _parent: form,
  430. _combo: this.ownerCmp,
  431. record: null,
  432. session: true
  433. });
  434. this.dialog.show();
  435. },
  436. editHandler:function(btn,type){
  437. saas.util.BaseUtil.openTab('document-workcenter-datalist', '工作中心','maintab--document-workcenter-datalist');
  438. var combo = btn.ownerCt.up('remotecombo');
  439. if(combo){
  440. combo.collapse();
  441. }
  442. }
  443. },{
  444. xtype: "saledetailDbfindTrigger",
  445. name: "ma_salecode",
  446. fieldLabel: "订单编号",
  447. columnWidth: 0.25,
  448. defaultCondition:"sa_statuscode='AUDITED' and pr_manutype IN('MAKE','OSMAKE')"
  449. },{
  450. xtype: 'hidden',
  451. name: "ma_saleid",
  452. fieldLabel: "订单ID",
  453. },{
  454. xtype: 'hidden',
  455. name: "ma_sfcode",
  456. fieldLabel: "备货编号",
  457. ignore:true
  458. },{
  459. xtype: "customerDbfindTrigger",
  460. name: "ma_custname",
  461. fieldLabel: "客户名称",
  462. columnWidth: 0.25,
  463. },{
  464. xtype: 'hidden',
  465. name: "ma_custcode",
  466. fieldLabel: "客户编号",
  467. },{
  468. xtype: 'hidden',
  469. name: "ma_custid",
  470. fieldLabel: "客户ID",
  471. },{
  472. xtype: "datefield",
  473. name: "ma_delivery",
  474. fieldLabel: "交货日期"
  475. },{
  476. xtype: 'hidden',
  477. name:'ma_tasktype',
  478. fieldLabel: '单据类型',
  479. allowBlank: false,
  480. defaultValue:'MAKE'
  481. },{
  482. name: "detailGridField",
  483. xtype: "detailGridField",
  484. storeModel: 'make.model.make.MakeMaterial',
  485. deleteDetailUrl: '/api/make/make/deleteDetail',
  486. allowEmpty: true,
  487. detnoColumn: 'mm_detno',
  488. columns: [{
  489. text: "id",
  490. dataIndex: "id",
  491. xtype: "numbercolumn",
  492. hidden: true
  493. }, {
  494. text: "物料id",
  495. dataIndex: "mm_prodid",
  496. xtype: "numbercolumn",
  497. hidden: true
  498. },{
  499. text: "物料编号",
  500. width: 150,
  501. dataIndex: "mm_prodcode",
  502. items: null,
  503. editor: {
  504. displayField: "display",
  505. editable: true,
  506. format: "",
  507. hideTrigger: false,
  508. maxLength: 100,
  509. minValue: null,
  510. positiveNum: false,
  511. queryMode: "local",
  512. store: null,
  513. valueField: "value",
  514. xtype: "productMultiDbfindTrigger"
  515. }
  516. }, {
  517. text: "厂家/品牌",
  518. hidden:true,
  519. width: 100.0,
  520. dataIndex: "pr_brand",
  521. ignore: true,
  522. renderer: function (v, m, r) {
  523. if (!v) {
  524. return r.data["productDTO"] ? r.data["productDTO"][m.column.dataIndex] : null;
  525. }
  526. return v;
  527. }
  528. },{
  529. text: "物料名称",
  530. width: 150.0,
  531. dataIndex: "pr_detail",
  532. ignore: true,
  533. renderer: function (v, m, r) {
  534. if (!v) {
  535. return r.data["productDTO"] ? r.data["productDTO"][m.column.dataIndex] : null;
  536. }
  537. return v;
  538. }
  539. }, {
  540. text: "型号",
  541. width: 200.0,
  542. dataIndex: "pr_orispeccode",
  543. ignore: true,
  544. renderer: function (v, m, r) {
  545. var str = '';
  546. if(r.data["productDTO"] ){
  547. if(r.data["productDTO"]['pr_brand']){
  548. str += '厂家/品牌:'+ r.data["productDTO"]['pr_brand'] + '<br>';
  549. }
  550. if(r.data["productDTO"]['pr_spec']){
  551. str += '规格:' + r.data["productDTO"]['pr_spec'];
  552. }
  553. if(str) m.tdAttr = 'data-qtip="'+ str +'"';
  554. if (!v) {
  555. return r.data["productDTO"] ? r.data["productDTO"][m.column.dataIndex] : null;
  556. }
  557. }
  558. return v;
  559. }
  560. }, {
  561. text: "单位",
  562. width: 65.0,
  563. dataIndex: "pr_unit",
  564. ignore: true,
  565. renderer: function (v, m, r) {
  566. if (!v) {
  567. return r.data["productDTO"] ? r.data["productDTO"][m.column.dataIndex] : null;
  568. }
  569. return v;
  570. }
  571. },{
  572. text: "数量小数位数",
  573. dataIndex: "pu_decimal",
  574. ignore: true,
  575. hidden:true,
  576. renderer: function (v, m, r) {
  577. if (!v) {
  578. return r.data["productDTO"] ? r.data["productDTO"][m.column.dataIndex] : null;
  579. }
  580. return v;
  581. }
  582. },{
  583. text: "单位用量",
  584. dataIndex: "mm_oneuseqty",
  585. xtype: 'numbercolumn',
  586. width: 110.0,
  587. editor: {
  588. xtype: "numberfield",
  589. decimalPrecision: 6,
  590. minValue: 0,
  591. listeners:{
  592. change:'onOneUseChange'
  593. }
  594. },
  595. renderer: function(v, m, r) {
  596. return saas.util.BaseUtil.numberFormat(v, 6, true);
  597. },
  598. },{
  599. text: "需求数",
  600. dataIndex: "mm_qty",
  601. xtype: 'numbercolumn',
  602. width: 110,
  603. editor: {
  604. xtype: "numberfield",
  605. decimalPrecision: 6,
  606. minValue: 0
  607. },
  608. renderer: function(v, m, r) {
  609. return saas.util.BaseUtil.numberFormat(v, 6, true);
  610. }
  611. }, {
  612. text: 'model映射需要',
  613. dataIndex: 'productDTO',
  614. hidden: true,
  615. },{
  616. text: "已领数",
  617. xtype: 'numbercolumn',
  618. dataIndex: "mm_havegetqty",
  619. width: 110,
  620. renderer: function(v, m, r) {
  621. return saas.util.BaseUtil.numberFormat(v, 6, true);
  622. },
  623. ignore:true,
  624. }, {
  625. text: "已转领料数",
  626. xtype: 'numbercolumn',
  627. dataIndex: "mm_turngetqty",
  628. width: 110,
  629. renderer: function(v, m, r) {
  630. return saas.util.BaseUtil.numberFormat(v, 6, true);
  631. },
  632. ignore:true,
  633. }, {
  634. text: "未领数",
  635. xtype: 'numbercolumn',
  636. dataIndex: "mm_restgetqty",
  637. width: 110,
  638. ignore: true,
  639. renderer : function(v, m, r) {
  640. v = r.get('mm_qty') + (r.get('mm_scrapqty')||0) - (r.get('mm_havegetqty')||0)-(r.get('mm_turngetqty')||0);
  641. return saas.util.BaseUtil.numberFormat(v, 6, true);
  642. },
  643. ignore:true,
  644. }, {
  645. text: "已转退料数",
  646. xtype: 'numbercolumn',
  647. dataIndex: "mm_turnbackqty",
  648. width: 110,
  649. renderer: function(v, m, r) {
  650. return saas.util.BaseUtil.numberFormat(v, 6, true);
  651. },
  652. ignore:true,
  653. },{
  654. text: "制程不良数",
  655. xtype: 'numbercolumn',
  656. dataIndex: "mm_returnmqty",
  657. width: 110,
  658. renderer: function(v, m, r) {
  659. return saas.util.BaseUtil.numberFormat(v, 6, true);
  660. },
  661. ignore:true,
  662. }, {
  663. text: "报废数",
  664. xtype: 'numbercolumn',
  665. dataIndex: "mm_scrapqty",
  666. width: 110,
  667. renderer: function(v, m, r) {
  668. return saas.util.BaseUtil.numberFormat(v, 6, true);
  669. },
  670. ignore:true,
  671. }, {
  672. text: "已转报废数",
  673. xtype: 'numbercolumn',
  674. dataIndex: "mm_turnscrapqty",
  675. width: 110,
  676. renderer: function(v, m, r) {
  677. return saas.util.BaseUtil.numberFormat(v, 6, true);
  678. },
  679. ignore:true,
  680. }, {
  681. text: "备注",
  682. dataIndex: "mm_remark",
  683. editor: {
  684. xtype: "textfield"
  685. },
  686. width: 250,
  687. },{
  688. text: "规格",
  689. hidden:true,
  690. width: 200,
  691. dataIndex: "pr_spec",
  692. ignore: true,
  693. renderer: function (v, m, r) {
  694. if (!v) {
  695. return r.data["productDTO"] ? r.data["productDTO"][m.column.dataIndex] : null;
  696. }
  697. return v;
  698. }
  699. }, ]
  700. }, {
  701. xtype: "textfield",
  702. name: "ma_remark",
  703. fieldLabel: "备注",
  704. columnWidth: 0.5
  705. }, {
  706. xtype: "displayfield",
  707. name: "ma_getstatus",
  708. fieldLabel: "领料状态",
  709. columnWidth: 0.25,
  710. renderer: function (v){
  711. if(v == '未领料' || v == "部分领料"){
  712. return '<p style="text-align:left;padding-left:16%;"><font color="#404040"><B>'+v+'</font>'
  713. }else if(v == '已领料'){
  714. return '<p style="text-align:left;padding-left:16%;"><font color="red"><B>'+v+'</font>'
  715. }else{
  716. return '';
  717. }
  718. },
  719. ignore:true,
  720. }, {
  721. xtype: "displayfield",
  722. name: "ma_finishstatus",
  723. fieldLabel: "完工状态",
  724. columnWidth: 0.25,
  725. renderer: function (v){
  726. if(v == '未完工' || v == "部分完工"){
  727. return '<p style="text-align:left;padding-left:16%;"><font color="#404040"><B>'+v+'</font>'
  728. }else if(v == '已完工'){
  729. return '<p style="text-align:left;padding-left:16%;"><font color="red"><B>'+v+'</font>'
  730. }else{
  731. return '';
  732. }
  733. },
  734. ignore:true,
  735. },{
  736. xtype: "hidden",
  737. name: "creatorId",
  738. fieldLabel: "录入人ID",
  739. readOnly: true
  740. }, {
  741. xtype: "textfield",
  742. name: "creatorName",
  743. fieldLabel: "录入人",
  744. readOnly: true,
  745. columnWidth: 0.3
  746. }, {
  747. xtype: "datefield",
  748. name: "createTime",
  749. fieldLabel: "单据日期",
  750. readOnly: true,
  751. defaultValue: new Date()
  752. }, {
  753. xtype: "hidden",
  754. name: "updaterId",
  755. fieldLabel: "更新人ID",
  756. readOnly: true
  757. }, {
  758. xtype: "hidden",
  759. name: "updaterName",
  760. fieldLabel: "更新人",
  761. readOnly: true
  762. }, {
  763. xtype: "hidden",
  764. name: "updateTime",
  765. fieldLabel: "更新日期",
  766. readOnly: true,
  767. defaultValue: new Date()
  768. }, {
  769. xtype: "textfield",
  770. name: "ma_auditman",
  771. fieldLabel: "审核人",
  772. columnWidth: 0.3,
  773. readOnly: true
  774. }, {
  775. xtype: "hidden",
  776. name: "ma_auditdate",
  777. fieldLabel: "审核日期",
  778. readOnly: true
  779. }],
  780. });
  781. this.callParent(arguments);
  782. },
  783. beforeAudit: function () {
  784. var me = this,
  785. controller = me.getController(),
  786. viewModel = me.getViewModel(),
  787. store = viewModel.get('detail0').detailStore,
  788. items = store.getData().items,
  789. str = '';
  790. //工单数量为0
  791. if(!viewModel.get('ma_qty')){
  792. saas.util.BaseUtil.showErrorToast("工单数量不允许为0");
  793. return false;
  794. }
  795. 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");
  796. 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");
  797. //计划完工日期小于计划开工日期时限制保存并提示
  798. if(begin > end ){
  799. saas.util.BaseUtil.showErrorToast("计划完工日期不允许小于计划开工日期");
  800. return false;
  801. }
  802. Ext.Array.each(items, function (item, i) {
  803. if (!item.get('mm_oneuseqty') && item.get('mm_prodcode')) {
  804. str = str + item.get('mm_detno') + ','
  805. }
  806. });
  807. if (str != '') {
  808. saas.util.BaseUtil.showConfirm('提示', '行: ' + str + '物料单位用量为0,是否继续审核?')
  809. .then(function (y) {
  810. if (y == 'yes') {
  811. controller.audit();
  812. }
  813. });
  814. } else {
  815. controller.audit();
  816. }
  817. return false;
  818. },
  819. beforeSave: function () {
  820. var me = this,
  821. controller = me.getController(),
  822. viewModel = me.getViewModel(),
  823. store = viewModel.get('detail0').detailStore,
  824. items = store.getData().items,
  825. controller = me.getController(),
  826. str = '';
  827. //工单数量为0
  828. if(!viewModel.get('ma_qty')){
  829. saas.util.BaseUtil.showErrorToast("工单数量不允许为0");
  830. return false;
  831. }
  832. 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");
  833. 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");
  834. //计划完工日期小于计划开工日期时限制保存并提示
  835. if(begin > end ){
  836. saas.util.BaseUtil.showErrorToast("计划完工日期不允许小于计划开工日期");
  837. return false;
  838. }
  839. Ext.Array.each(items, function (item, i) {
  840. if (!item.get('mm_oneuseqty') && item.get('mm_prodcode')) {
  841. str = str + item.get('mm_detno') + ','
  842. }
  843. });
  844. if (str != '') {
  845. saas.util.BaseUtil.showConfirm('提示', '行: ' + str + '物料单位用量为0,是否继续保存?')
  846. .then(function (y) {
  847. if (y == 'yes') {
  848. controller.save();
  849. }
  850. });
  851. } else {
  852. controller.save();
  853. }
  854. return false;
  855. },
  856. setInquiry: function () {
  857. var form = this;
  858. var ma_kind = form.down('[name=ma_kind]');
  859. if(!ma_kind.getValue()){
  860. saas.util.BaseUtil.request({
  861. url: '/api/make/kind/list/make',
  862. method: 'GET'
  863. }).then(function(res) {
  864. if(res.success){
  865. if(res.data){
  866. var flag=false;
  867. Ext.Array.each(res.data,function(d,index){
  868. if(d.mk_ifmrpkind){
  869. form.down('[name=ma_kind]').setValue(d.mk_name);
  870. flag = true;
  871. }
  872. if(flag){
  873. return false;
  874. }
  875. });
  876. }
  877. }
  878. }).catch(function(res) {
  879. saas.util.BaseUtil.showErrorToast(res.message);
  880. });
  881. }
  882. //有预测来源无订单编号的工单 展示预测来源编号
  883. var ma_salecode = form.down('[name=ma_salecode]');
  884. var ma_sfcode = form.down('[name=ma_sfcode]');
  885. if(!ma_salecode.getValue()&&ma_sfcode.getValue()){
  886. ma_salecode.setValue(ma_sfcode.getValue());
  887. }
  888. return true;
  889. }
  890. });