<!doctype html> <html> <head> <meta charset="utf-8"><meta http-equiv="Expires" content="0"><meta http-equiv="Pragma" content="no-cache"><meta http-equiv="Cache-control" content="no-cache"><meta http-equiv="Cache" content="no-cache"> <title>å‘票编辑</title> <script src="../../../js/vue/vue.js"></script> <script src="../../../js/vue/element-ui/lib/index.js"></script> <script src="../../../js/myelement.js?v=20220425"></script> <script src="../../../js/vue/page.js?v=20220425"></script> <link href="../../../js/vue/element-ui/lib/theme-chalk/index.css" rel="stylesheet"> <link href="../../../css/myelement.css?v=20220425" rel="stylesheet"> <link href="../../../css/iconfont.css" rel="stylesheet"> <link href="../../../css/page.css?v=20220425" rel="stylesheet"> <link href="//at.alicdn.com/t/font_2374495_13ltsxm2eor.css" rel="stylesheet"> </head> <body> <div id="vbody"> <div id="page_root"> <div ref="popup_body" style="padding-right: 20px;"> <div class="el-dialog__header"> <div class="dialog-title"> <i class="iconfont icon-customermanagement"></i> <span> {{formAttr.title}} </span> </div> </div> <div style="height: 550px; overflow-y: auto;"> <div class="el-dialog__body"> <h-form ref="form1" :form-attr="formAttr" :table-fields="formFields" :form-data="formData" v-on:show-popup="showPopup" > </h-form> <div v-if="notdisabled" style="text-align: right;"> <el-button-group > <el-button @click="showOrder">新增数æ®</el-button> </el-button-group> </div> <h-table v-if="isRefresh" ref="table2" :table-fields="tableFields" :table-data="tableData2" :is-within-edit-table-data= "isWithinEditTableData" :is-edit-table-data="isEditTableData" :table-height="tableHeight2" :is-pagination="false" :is-show-index="true" v-on:cell-input-change="cellInputChange" v-on:edit-data="editData" v-on:del-data="delData" v-on:cell-click="cellClick" > </h-table> </div> </div> <div class="el-dialog__footer"> <el-button v-if="disabled" type="success" @click="closeDialog">通过</el-button> <el-button v-if="disabled" type="danger" @click="closeDialog">æ‹’ç»</el-button> <el-button type="default" @click="closeDialog">å– æ¶ˆ</el-button> <el-button v-if="notdisabled" type="primary" @click="saveRowTable">ä¿ å˜</el-button> </div> </div> </div> <div id="page_loading" style="position: absolute; top:0px; width: 100vw; height: 100vh;"> <div class="spinner"> <div class="cube1"></div> <div class="cube2"></div> </div> </div> </div> <script type="text/javascript"> new Vue({ el: "#vbody", data: { form_dataname: "sinvoice", table_dataname: "invoiceOrderDetail", newRowDefault: { id: uuid_short(), code: createCode("F"), statecode: "input", createtime: createDatetime(), docdate: createDate(), creator: window.top.userinfo.user.name, }, role: RootRole, disabled: false, notdisabled: true, formAttr: { istitle: false, title: "å‘票信æ¯", columnnumber: 2, labelwidth: "130px", labelposition: "right", size: "medium", border: "0px solid #c6c6c600" }, formFields: [], tableFields: [], tableData2: [], tableDataChange: {}, tableData: [], selectrow: {}, tableHeight2: 200, urlImg2: "./img/wushuju.png", isEditTableData:false, isWithinEditTableData:false, formData: {}, isRefresh: true, sum_noRate_: 0 }, created() { this.popupParames = clone(Root.popupParames); if (this.popupParames.data) { this.formData = clone(this.popupParames.data) }; if (this.popupParames.sceneCode) { if (this.popupParames.sceneCode == "browse") { this.formAttr.disabled = true; this.isWithinEditTableData = false; this.notdisabled = false; this.Approval = false; } else if (this.popupParames.sceneCode == "add") { if (this.newRowDefault) { let formData_ = clone(this.formData); for (var k in this.newRowDefault) { formData_[k] = this.newRowDefault[k]; } this.formData = formData_; } } else if (this.popupParames.sceneCode == "draw") { this.formAttr.disabled = true; this.isWithinEditTableData = false; this.notdisabled = false; this.Approval = false; } } }, mounted() { this.initFields(); if (this.popupParames.sceneCode != "add") { this.initData(); } this.$nextTick(() => { // 以æœåŠ¡çš„æ–¹å¼è°ƒç”¨çš„ Loading 需è¦å¼‚æ¥å…³é— document.getElementById('page_root').style.display = "block"; document.getElementById('page_loading').style.display = "none"; //釿–°è®¾ç½®å¼¹çª—宽高 this.$nextTick(function(){ let w_ = this.$refs.popup_body.offsetWidth + "px"; let h_ = this.$refs.popup_body.offsetHeight + "px"; Root.setPopupWH(w_, h_); }) }); }, methods:{ initFields() { let me = this me.tableFields = dataRootFields.tableFields.sinvoiceDetail_; me.formFields = dataRootFields.formFields.invoice_; }, initData() { let me = this let filter_table = "1<>1"; if (this.formData.id) { filter_table = "invoice_order_detail.parent_id = '" + this.formData.id + "'"; } let param_table = { isClientMode: false, dataname: "getInvoiceDetailAndDeliveryOrder", filter: filter_table, } Server.call("root/data/getEntitySet", param_table, function(result) { if (result && result.data) { me.tableData2= result.data.entityset; } }); }, closeDialog() { // Root.hidePopup(); Root.tab.removeItem(Root.tab.selected); Root.tab.open(this.popupParames.parentOption, true); }, saveRowTable() { var array_ = []; for (var id in this.tableDataChange) { array_.push(id); } this.doSave(array_); }, doSave(array){ var me = this; if (array.length) {//å˜åœ¨éœ€å¤„ç†çš„æ˜Žç»†æ•°æ® var id = array[0]; var row_ = this.tableDataChange[id]; var type = row_.type; var row = row_.data; var param = {}; let event = ""; if (type == "add") { param = row; param.isClientMode = false; event = "insertEntity"; } else if (type == "up") { param = row; param.isClientMode = false; event = "updateEntity"; } else if (type == "del") { param = { id: row.id, isClientMode: false } event = "deleteEntity"; } Server.call("root/data/" + event + "/" + this.table_dataname, param, function(result) { array.remove(id); me.doSave(array); }); } else { //1ä¿å˜formæ•°æ® let param = this.formData; param.isClientMode = false; let event = "updateEntity"; if(this.popupParames.sceneCode == "add") { event = "insertEntity" } Server.call("root/data/" + event + "/" + this.form_dataname, param, function(result) { //2回调 Root.tab.removeItem(Root.tab.selected); Root.tab.open(me.popupParames.parentOption, false); }); } }, rowChange(row, type) { //tc var id_ = row.id; if (this.tableDataChange[id_]) { this.tableDataChange[id_].data = row; } else { var changeRow_ = { type: type, data: row }; this.tableDataChange[id_] = changeRow_; } //t2 if (type == "add") { this.tableData2.unshift(row); } else if (type == "del") { this.tableData2.remove(row); } // var sum_beforetax_ = 0 ; // var sum_aftertax_ = 0 ; // var formData_ = clone(this.formData); // this.tableData2.map(e=>{ // sum_beforetax_ += (e.amt_beforetax ? e.amt_aftertax : 0 ) * 1; // }) // this.tableData2.map(e=>{ // sum_aftertax_ += (e.amt_aftertax ? e.amt_aftertax : 0 ) * 1; // }) // formData_.amt_beforetax = sum_beforetax_; // formData_.amt_aftertax = sum_aftertax_; // this.formData = formData_; this.$refs.form1.refresh(); }, editData(scope) { if (this.selectrow != {}) { this.selectrow.isWithinEdit = false; } this.selectrow = scope.row; scope.row.isWithinEdit = scope.row.isWithinEdit ? false : true; this.isRefresh = false; this.$nextTick(function(){ this.isRefresh = true; }) }, delData(scope) { let me = this; let row = scope.row; let index_ = scope.$index; Root.confirm('ç¡®å®šåˆ é™¤-' + row.productname + '-å—?', 'åˆ é™¤æç¤º', { confirmButtonText: 'åˆ é™¤', cancelButtonText: 'å–æ¶ˆ', type: 'warning' }).then(() => { me.rowChange(row, "del"); Root.message({ type: 'success', message: 'åˆ é™¤æˆåŠŸ!' }); }).catch(() => { Root.message({ type: 'info', message: '已喿¶ˆåˆ 除' }); }); }, cellClick(obj) { if(obj.column.property == "productname") { this.selectrow = obj.row; this.showPic("showPic", obj.row); } }, cellInputChange(scope) { let row = scope.row; let field = scope.column.property; if(field == "qty") { row.amt_aftertax = (row.qty ? row.qty : 0) * (row.price_unit ? row.price_unit : 0); this.rowChange(row, "up"); } row.isWithinEdit = false; }, showPic(code, row) { Root.popupParames = { url: "../md/product/sku/pic_list.html", }; Root.showPopup(Root.popupParames); }, showOrder(obj) { let me = this; let tableData2_ = clone(me.tableData2); let formData_ = clone(me.formData); let orderdeliveryid_ = ""; let orderdeliveryidList = ""; let orderparentid_ = ""; let orderparentidList = ""; // let filter_order = "sale_deliverydetail.qty - ifnull(sale_invoicedetail.invoice_qty,0) > 0"; let filter_order = "1=1"; if (me.tableData2.length > 0) { for (var i = 0; i < me.tableData2.length; i++) { orderdeliveryid_ = me.tableData2[i].orderdeliveryid; orderparentid_ = me.tableData2[i].parentid; if (orderdeliveryidList) { orderdeliveryidList += ",'" + orderdeliveryid_ + "'"; } else { orderdeliveryidList = "'" + orderdeliveryid_ + "'"; } } orderparentidList = me.tableData2[0].orderid; // filter_order = "sale_deliverydetail.id not in (" + orderdeliveryidList + ") and sale_orderdelivery.parentid = '" + orderparentidList + "' and (sale_orderdelivery.qty_order - ifnull(sale_orderdelivery.qty_invoice,0)) > 0" } Root.showPopup({ title: "å‘è´§å•选择", url: "../logistics/delivery/popup/delivery_list.html", width: 900, height: 550, type: "invoice", filter: filter_order, callback: function(array, callback) { if (array.length > 0) { for (var i = 0; i<array.length; i++) { let row_ = { id: uuid_short(), parentid: formData_.id, deliverydetailid: array[i].deliverydetailid, deliverycode: array[i].deliverycode, qty: array[i].qty_needInvoice, productid: array[i].productid, productname: array[i].productname, productcode: array[i].productcode, spec: array[i].spec, customername: array[i].customername, price_unit: array[i].priceunit, taxrate: array[i].taxrate, amt_beforetax: array[i].priceunit * array[i].qty_needInvoice, amt_aftertax: array[i].priceunit * array[i].qty_needInvoice * (1 + array[i].taxrate/100) }; me.rowChange(row_, "add"); } formData_.customercode = array[0].customercode; formData_.customername = array[0].customername; formData_.customerid = array[0].customerid; var sum_beforetax_ = 0 ; var sum_aftertax_ = 0 ; me.tableData2.map(e=>{ sum_beforetax_ += (e.amt_beforetax ? e.amt_beforetax : 0 ) * 1; }) me.tableData2.map(e=>{ sum_aftertax_ += (e.amt_aftertax ? e.amt_aftertax : 0 ) * 1; }) formData_.amt_beforetax = sum_beforetax_; formData_.amt_aftertax = sum_aftertax_; me.formData = formData_; me.showCustomer(); } if (callback) { callback(); } } }); }, showCustomer() { if (this.formData.customername) { filter_customer = "name = '" + this.formData.customername + "'" var formData_ = clone(this.formData); var me = this; let param_table = { isClientMode: false, dataname: "vCustomer", filter: filter_customer, } Server.call("root/data/getEntitySet", param_table, function(result) { var customerDetail = result.data.entityset[0]; formData_.invoice_title = customerDetail.invoice_title; formData_.invoice_taxno = customerDetail.invoice_taxno; formData_.officeaddress = customerDetail.officeaddress; formData_.phone = customerDetail.phone; formData_.invoice_bank = customerDetail.invoice_bank; formData_.invoice_bankaccount = customerDetail.invoice_bankaccount; me.formData = formData_; }); } }, showPopup(obj) { this.selectFormField = obj.obj; if (this.selectFormField.field == "customername") { let me = this; Root.showPopup({ url: "../md/customer/popup/customer_list.html", width: 800, height: 550, callback: function(obj, callback) { let formData_ = clone(me.formData); formData_.customername = obj.row.name; formData_.customercode = obj.row.code; formData_.customerid = obj.row.id; formData_.invoice_title = obj.row.invoice_title; formData_.invoice_taxno = obj.row.invoice_taxno; formData_.officeaddress = obj.row.officeaddress; formData_.phone = obj.row.phone; formData_.invoice_bank = obj.row.invoice_bank; formData_.invoice_bankaccount = obj.row.invoice_bankaccount; me.formData = formData_; if (callback) { callback(); } } }); } } } }); </script> <style> .el-input__inner{ padding: 0 2px; } .el-dialog { width: 80%; } </style> </body> </html>