|
@@ -0,0 +1,878 @@
|
|
|
|
+(function () {
|
|
|
|
+ var lists = [];
|
|
|
|
+ let viewState = z.ui.comm.getUrlParam("_o");
|
|
|
|
+ let isKp = z.ui.comm.getUrlParam("kp");
|
|
|
|
+ let read = z.ui.comm.getUrlParam("read");
|
|
|
|
+ var totalContractAmount = 0;
|
|
|
|
+ var totalReturnAmount =0;
|
|
|
|
+ var totalInvoiceAmount = 0;
|
|
|
|
+ var contractInvoiceList = [];
|
|
|
|
+ let flowInstanceId = "";
|
|
|
|
+ var contractId = $("[name='contractInvoice$contractId']").val()
|
|
|
|
+ var contractInvoiceId = $("[name='contractInvoice$id']").val()
|
|
|
|
+ var contractMilestoneId = $("[name='contractInvoice$contractMilestoneId']").val()
|
|
|
|
+ var contractMilestoneName = $("[name='contractInvoice$contractMilestoneName']").val()
|
|
|
|
+ let isView = "";
|
|
|
|
+ window.onload = function () {
|
|
|
|
+ flowInstanceId = z.ui.comm.getUrlParam("flowInstanceId");
|
|
|
|
+ bindEvents();
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ function bindEvents() {
|
|
|
|
+ initData();
|
|
|
|
+ bindGenerateSerial();
|
|
|
|
+ bindSelectMilestone();
|
|
|
|
+ initContractReturnMoney();
|
|
|
|
+ initContractInvoiceList();
|
|
|
|
+ bindCalcInvoiceAmount();
|
|
|
|
+ bindReturnMoney();
|
|
|
|
+ initReturnReg();
|
|
|
|
+ z.workflow.saveBtn.addListener("onSaveClick", submit);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ function initData(){
|
|
|
|
+ initPayCompany();
|
|
|
|
+ initInvoiceCompany();
|
|
|
|
+ initLpr();
|
|
|
|
+ }
|
|
|
|
+ function initLpr() {
|
|
|
|
+ z.ui.ajax({
|
|
|
|
+ type: "get",
|
|
|
|
+ url: "/common/user-tree",
|
|
|
|
+ data: {},
|
|
|
|
+ success: function (res) {
|
|
|
|
+ if (res && res.length > 0) {
|
|
|
|
+ selecttree("[name='lpr']", res, clickLpr, allowChildClick,null,setLpr);
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ error: function () {
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ function setLpr(){
|
|
|
|
+ var id = $("[name='contractInvoice$lprId']").val();
|
|
|
|
+ if(id){
|
|
|
|
+ z.ui.selecttree("[name='lpr']").setValue(id);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ function clickLpr(even, treeId, treeNode) {
|
|
|
|
+ if (treeNode.type === 3) {
|
|
|
|
+ $("[name='contractInvoice$lpr']").val(treeNode.name);
|
|
|
|
+ $("[name='contractInvoice$lprId']").val(treeNode.id);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ function initReturnReg(){
|
|
|
|
+ let register = z.ui.comm.getUrlParam("registerReturn");
|
|
|
|
+ if(register === '1'){
|
|
|
|
+ $("[name=addData]").show().removeClass("z-hide").removeClass("z-readonly");
|
|
|
|
+ $("[name=return-header]").css("display", "flex").removeClass("z-hide").removeClass("z-readonly");
|
|
|
|
+ $("[name=return-body]").css("display", "flex").removeClass("z-hide").removeClass("z-readonly");
|
|
|
|
+ $("[name=returnStats]").css("display", "flex").removeClass("z-hide").removeClass("z-readonly");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ function bindGenerateSerial(){
|
|
|
|
+ $("#generateSerial").on("click",function(){
|
|
|
|
+ var serial = $("[name='contractInvoice$invoiceNumber'] input").val();
|
|
|
|
+ var postdata = {"name": '开票单号'};
|
|
|
|
+ if(serial) {
|
|
|
|
+ z.ui.confirm("confirm").init({
|
|
|
|
+ content: '已有编号[' +serial + '],重新生成会覆盖原有编号,是否继续?',
|
|
|
|
+ onConfirm: function() {
|
|
|
|
+ z.ui.ajax({
|
|
|
|
+ type: "post",
|
|
|
|
+ contentType: "application/json",
|
|
|
|
+ url: "/common/generate-serial-number",
|
|
|
|
+ data: JSON.stringify(postdata),
|
|
|
|
+ success: function (res) {
|
|
|
|
+ if(res && res.code === 0){
|
|
|
|
+ $("[name='contractInvoice$invoiceNumber'] input").val(res.data)
|
|
|
|
+ } else {
|
|
|
|
+ z.ui.alertWarning(res.msg);
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ error: function () {
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ },
|
|
|
|
+ onCancel: function () {
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ } else {
|
|
|
|
+ z.ui.ajax({
|
|
|
|
+ type: "post",
|
|
|
|
+ contentType: "application/json",
|
|
|
|
+ url: "/common/generate-serial-number",
|
|
|
|
+ data: JSON.stringify(postdata),
|
|
|
|
+ success: function (res) {
|
|
|
|
+ if(res && res.code === 0){
|
|
|
|
+ $("[name='contractInvoice$invoiceNumber'] input").val(res.data)
|
|
|
|
+ } else {
|
|
|
|
+ z.ui.alertWarning(res.msg);
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ error: function () {
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ function bindSelectMilestone(){
|
|
|
|
+ $("#selectMilestone").click(function () {
|
|
|
|
+ var contractId = $("[name='contractInvoice$contractId']").val();
|
|
|
|
+ selectMilestone(contractId, setMilestone);
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ function setMilestone(res) {
|
|
|
|
+ if (res.data) {
|
|
|
|
+ $("[name='contractInvoice$contractMilestoneName']").val(res.data.name);
|
|
|
|
+ $("[name='contractInvoice$contractMilestoneId']").val(res.data.id);
|
|
|
|
+ contractMilestoneName = res.data.name;
|
|
|
|
+ contractMilestoneId = res.data.id;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ function submit(all, istransfer) {
|
|
|
|
+ var postData = z.ui.form.getFormFields("[name=flow-form]", {validatorRequired: istransfer});
|
|
|
|
+ if (postData === false) {
|
|
|
|
+ all({success: false});
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ z.ui.ajax({
|
|
|
|
+ url: z.ui.comm.getEntranceUrl("/flow/invoice/update"),
|
|
|
|
+ data: z.ui.form.childStringify(postData),
|
|
|
|
+ success: function () {
|
|
|
|
+ all({success: true});
|
|
|
|
+ },
|
|
|
|
+ error: function () {
|
|
|
|
+ all({success: false});
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ function initContractInvoiceList(){
|
|
|
|
+ var contractList = JSON.parse(window.contractList);
|
|
|
|
+ if(!contractList || contractList.length<2){
|
|
|
|
+ $("[name=invoice-header]").hide();
|
|
|
|
+ $("[name=invoice-body]").hide();
|
|
|
|
+ return ;
|
|
|
|
+ }
|
|
|
|
+ if (contractList.length > 0) {
|
|
|
|
+ for (let i = 0; i < contractList.length; i++) {
|
|
|
|
+ let obj = {
|
|
|
|
+ type: contractList[i].contractType || "",
|
|
|
|
+ zrbm: contractList[i].zrbm || "",
|
|
|
|
+ xmjl: contractList[i].xmjl || "",
|
|
|
|
+ virtualAmount: contractList[i].virtualAmount || "",
|
|
|
|
+ invoiceAmount: contractList[i].invoiceAmount || "",
|
|
|
|
+ returnAmount: contractList[i].returnAmount || "",
|
|
|
|
+ id: contractList[i].id || ""
|
|
|
|
+ }
|
|
|
|
+ contractInvoiceList.push(obj)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ updateContractInoviceListView()
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ function updateContractInoviceListView() {
|
|
|
|
+ let tbodyQjsq = document.querySelector('[name=contractInvoiceList]')
|
|
|
|
+ let html = ''
|
|
|
|
+ for (let i = 0; i < contractInvoiceList.length; i++) {
|
|
|
|
+ var type = contractInvoiceList[i].type === 1? '主合同': '子合同'
|
|
|
|
+ html += '<tr class="qjsjClass" id="contract_invoce_list' + i + '" style="background:#fff">'
|
|
|
|
+ + '<td name="contract_invoce_list_seq">' + (i + 1) + '</td>'
|
|
|
|
+ + '<td>'
|
|
|
|
+ + '<div class="form-flex">'
|
|
|
|
+ + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
|
|
|
|
+ + '<input type="hidden" name="Contract[' + i + ']$id" value="'+contractInvoiceList[i].id+'"/>'
|
|
|
|
+ + '<div class="z-comp-input" name="Contract[' + i + ']$type">'
|
|
|
|
+ + '<input type="text" value="'+type+'">'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</td>'
|
|
|
|
+ + '<td>'
|
|
|
|
+ + '<div class="form-flex">'
|
|
|
|
+ + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
|
|
|
|
+ + '<div class="z-comp-input" name="Contract[' + i + ']$zrbm">'
|
|
|
|
+ + '<input type="text" value="'+contractInvoiceList[i].zrbm+'">'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</td>'
|
|
|
|
+ + '<td>'
|
|
|
|
+ + '<div class="form-flex">'
|
|
|
|
+ + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
|
|
|
|
+ + '<div class="z-comp-input" name="Contract[' + i + ']$xmjl">'
|
|
|
|
+ + '<input type="text" value="'+contractInvoiceList[i].xmjl+'">'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</td>'
|
|
|
|
+ + '<td>'
|
|
|
|
+ + '<div class="form-flex">'
|
|
|
|
+ + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
|
|
|
|
+ + '<div class="z-comp-input" name="Contract[' + i + ']$virtualAmount">'
|
|
|
|
+ + '<input type="text" class="contractAmount" value="'+contractInvoiceList[i].virtualAmount+'">'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</td>'
|
|
|
|
+ + '<td>'
|
|
|
|
+ + '<div class="form-flex">'
|
|
|
|
+ + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
|
|
|
|
+ + '<div class="z-comp-input" name="Contract[' + i + ']$invoiceAmount">'
|
|
|
|
+ + '<input type="text" class="contractInvoice" value="'+contractInvoiceList[i].invoiceAmount+'">'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</td>'
|
|
|
|
+ + '<td>'
|
|
|
|
+ + '<div class="form-flex">'
|
|
|
|
+ + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
|
|
|
|
+ + '<div class="z-comp-input" name="Contract[' + i + ']$returnAmount">'
|
|
|
|
+ + '<input type="text" class="invoiceReturnAmount" value="'+contractInvoiceList[i].returnAmount+'">'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</td>'
|
|
|
|
+ + '<td>';
|
|
|
|
+ if(viewState !== "v") {
|
|
|
|
+ html += '<div id="invoiceEditBtn_' + (i) + '" class="table-btn editBtn_' + (i) + '" data-index="' + (i) + '">'
|
|
|
|
+ + '<span>编辑</span>'
|
|
|
|
+ + '</div>';
|
|
|
|
+ }
|
|
|
|
+ html += '</td>'
|
|
|
|
+ + '</tr>';
|
|
|
|
+ }
|
|
|
|
+ tbodyQjsq.innerHTML = html
|
|
|
|
+ for (let i = 0; i < contractInvoiceList.length; i++) {
|
|
|
|
+ if(viewState !== "v") {
|
|
|
|
+ $("#invoiceEditBtn_" + i).click(function () {
|
|
|
|
+ const span = $(this).find("span");
|
|
|
|
+ const html = span.html();
|
|
|
|
+ var tr = $("#contract_invoce_list" + i);
|
|
|
|
+ var invoiceInput = tr.find("[name='Contract[" + i + "]$invoiceAmount'] input");
|
|
|
|
+ if (html === '编辑') {
|
|
|
|
+ span.html('保存')
|
|
|
|
+ invoiceInput.removeAttr('disabled').removeClass("z-readonly").addClass("z-write");
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ if (html === '保存') {
|
|
|
|
+
|
|
|
|
+ var invoiceAmount = invoiceInput.val();
|
|
|
|
+
|
|
|
|
+ var returnAmount = tr.find("[name='Contract[" + i + "]$returnAmount'] input").val();
|
|
|
|
+ var id = tr.find("[name='Contract[" + i + "]$id']").val();
|
|
|
|
+
|
|
|
|
+ z.ui.ajax({
|
|
|
|
+ url: z.ui.comm.getEntranceUrl("/contract-invoice-relation"),
|
|
|
|
+ type: 'put',
|
|
|
|
+ contentType: 'application/json',
|
|
|
|
+ data: JSON.stringify({
|
|
|
|
+ 'id': id,
|
|
|
|
+ 'returnAmount': returnAmount,
|
|
|
|
+ 'invoiceAmount': invoiceAmount
|
|
|
|
+ }),
|
|
|
|
+ success: function (res) {
|
|
|
|
+ if (res.code === 0) {
|
|
|
|
+ z.ui.alertSuccess("保存成功");
|
|
|
|
+ invoiceInput.addClass("z-readonly").removeClass("z-write");
|
|
|
|
+ invoiceInput[0].disabled = true;
|
|
|
|
+ span.html("编辑")
|
|
|
|
+ } else {
|
|
|
|
+ z.ui.alertWarning(res.msg);
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ error: function () {
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ detailReadonly(i,false,"contract_invoce_list")
|
|
|
|
+ $("#contract_invoce_list" + i).addClass("form-table-disable")
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ function bindCalcInvoiceAmount(){
|
|
|
|
+ $("[name='contractInvoice$invoiceAmount'] input").change(function(){
|
|
|
|
+ if(!parseFloat($(this).val())){
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ totalContractAmount = 0;
|
|
|
|
+ let arr = $('.contractAmount');
|
|
|
|
+ for (let i = 0; i < arr.length; i++) {
|
|
|
|
+ if(parseFloat($(arr[i]).val())) {
|
|
|
|
+ totalContractAmount += parseFloat($(arr[i]).val())
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ for (let i = 0; i < arr.length; i++) {
|
|
|
|
+ var dom = $(arr[i]).closest("tr").find(".contractInvoice");
|
|
|
|
+ $(dom).val(($(arr[i]).val() / totalContractAmount * $(this).val()).toFixed(2));
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ function bindReturnMoney(){
|
|
|
|
+ var arr = $('.contractInvoice');
|
|
|
|
+ for(var i =0 ;i < arr.length;i++){
|
|
|
|
+ $(arr[i]).change(function(){
|
|
|
|
+ calcReturnAmount();
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ $("[name=returnMoney]").delegate('.returnAmount',"propertychange input",function(){
|
|
|
|
+ calcReturnAmount();
|
|
|
|
+ })
|
|
|
|
+ // var arr = $('.returnAmount');
|
|
|
|
+ // for(var i =0 ;i < arr.length;i++){
|
|
|
|
+ // $(arr[i]).change(function(){
|
|
|
|
+ // calcReturnAmount();
|
|
|
|
+ // })
|
|
|
|
+ // }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ function calcReturnAmount(){
|
|
|
|
+ calcTotalReturnAmount();
|
|
|
|
+ calcTotalInvoiceAmount()
|
|
|
|
+ let arr = $('.invoiceReturnAmount');
|
|
|
|
+ for (let i = 0; i < arr.length; i++) {
|
|
|
|
+ var ia = $(arr[i]).closest("tr").find(".contractInvoice").val();
|
|
|
|
+ $(arr[i]).val((ia / totalInvoiceAmount * totalReturnAmount).toFixed(2));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ function calcTotalInvoiceAmount(){
|
|
|
|
+ totalInvoiceAmount = 0;
|
|
|
|
+ let arr = $('.contractInvoice');
|
|
|
|
+ for (let i = 0; i < arr.length; i++) {
|
|
|
|
+ if(parseFloat($(arr[i]).val())) {
|
|
|
|
+ totalInvoiceAmount += parseFloat($(arr[i]).val());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ function calcTotalReturnAmount(){
|
|
|
|
+ totalReturnAmount = 0;
|
|
|
|
+ let arr = $('.returnAmount');
|
|
|
|
+ for (let i = 0; i < arr.length; i++) {
|
|
|
|
+ if(parseFloat($(arr[i]).val())) {
|
|
|
|
+ if(parseFloat($(arr[i]).val())){
|
|
|
|
+ totalReturnAmount += parseFloat($(arr[i]).val())
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ function initContractReturnMoney(){
|
|
|
|
+ var returnMoney = JSON.parse(window.returnMoneyList);
|
|
|
|
+ if (returnMoney.length > 0) {
|
|
|
|
+ totalReturnAmount = 0;
|
|
|
|
+ for (let i = 0; i < returnMoney.length; i++) {
|
|
|
|
+ totalReturnAmount += returnMoney[i].returnAmount;
|
|
|
|
+ let obj = {
|
|
|
|
+ contractMilestoneName: returnMoney[i].contractMilestoneName || contractMilestoneName,
|
|
|
|
+ contractMilestoneId: returnMoney[i].contractId || contractMilestoneId,
|
|
|
|
+ returnAmount: returnMoney[i].returnAmount || "",
|
|
|
|
+ returnDate: returnMoney[i].returnDate || "",
|
|
|
|
+ bz: returnMoney[i].bz || "",
|
|
|
|
+ id: returnMoney[i].id || "",
|
|
|
|
+ contractId: returnMoney[i].contractId || contractId,
|
|
|
|
+ contractInvoiceId: returnMoney[i].contractInvoiceId || contractInvoiceId,
|
|
|
|
+ sortnum: returnMoney[i].sortnum || ""
|
|
|
|
+ }
|
|
|
|
+ lists.push(obj)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ $("#addData").click(function(){
|
|
|
|
+ addContractReturnMoney();
|
|
|
|
+ })
|
|
|
|
+ updateView()
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ function updateList(){
|
|
|
|
+ lists = [];
|
|
|
|
+ var postData = z.ui.form.getFormFields("[name=flow-form]", {validatorRequired: false});
|
|
|
|
+ for (let key of Object.keys(postData)) {
|
|
|
|
+ let mealName = postData[key];
|
|
|
|
+ if (key.startsWith("ContractReturnMoney")) {
|
|
|
|
+ var dataObj = {
|
|
|
|
+ contractMilestoneName: contractMilestoneName,
|
|
|
|
+ contractMilestoneId: contractMilestoneId,
|
|
|
|
+ returnAmount: mealName.returnAmount,
|
|
|
|
+ returnDate: mealName.returnDate,
|
|
|
|
+ bz: mealName.bz,
|
|
|
|
+ id: mealName.id,
|
|
|
|
+ contractId: contractId,
|
|
|
|
+ contractInvoiceId: contractInvoiceId,
|
|
|
|
+ sortnum: lists.length
|
|
|
|
+ }
|
|
|
|
+ lists.push(dataObj);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ function getCurrentDate() {
|
|
|
|
+ const now = new Date();
|
|
|
|
+ const year = now.getFullYear();
|
|
|
|
+ const month = (now.getMonth() + 1).toString().padStart(2, '0');
|
|
|
|
+ const day = now.getDate().toString().padStart(2, '0');
|
|
|
|
+ return `${year}-${month}-${day}`;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ function addContractReturnMoney(){
|
|
|
|
+ var trFragment = document.createDocumentFragment();
|
|
|
|
+ let tbody = document.querySelectorAll('[name=returnMoney] tr')
|
|
|
|
+ let qjsjElements = document.getElementsByName("contract_return_seq");
|
|
|
|
+ var dataObj = {
|
|
|
|
+ contractMilestoneName: contractMilestoneName,
|
|
|
|
+ contractMilestoneId: contractMilestoneId,
|
|
|
|
+ returnAmount: window.invoiceReceivable,
|
|
|
|
+ returnDate: getCurrentDate(),
|
|
|
|
+ bz: "",
|
|
|
|
+ id: "",
|
|
|
|
+ contractId: contractId,
|
|
|
|
+ contractInvoiceId: contractInvoiceId,
|
|
|
|
+ sortnum: ""
|
|
|
|
+ }
|
|
|
|
+ lists.push(dataObj);
|
|
|
|
+ trFragment.appendChild(generateTableTrHtml(lists.length-1))
|
|
|
|
+ var index = lists.length - 1;
|
|
|
|
+ $("[name=returnMoney]").append(trFragment)
|
|
|
|
+ $("#delBtn_" + index).click(function () {
|
|
|
|
+ var i = this.id.substring(this.id.indexOf("_") + 1)
|
|
|
|
+ var tr =$("#contract_return_" + i);
|
|
|
|
+ var returnId = tr.find("[name='ContractReturnMoney["+i+"]$id']").val();
|
|
|
|
+ z.ui.confirm("compid").init({
|
|
|
|
+ content: "确定删除吗?",
|
|
|
|
+ onConfirm: function () {
|
|
|
|
+ z.ui.ajax({
|
|
|
|
+ url: z.ui.comm.getEntranceUrl("/contract-return-money?id="+returnId),
|
|
|
|
+ type: 'delete',
|
|
|
|
+ contentType: 'application/json',
|
|
|
|
+ data: {},
|
|
|
|
+ success: function (res) {
|
|
|
|
+ if(res.code === 0){
|
|
|
|
+ z.ui.alertSuccess("删除成功");
|
|
|
|
+ var element = document.getElementById("contract_return_" + i);
|
|
|
|
+ element.remove();
|
|
|
|
+ buildSeq();
|
|
|
|
+ updateList();
|
|
|
|
+ //lists.splice(i,1);
|
|
|
|
+ updateView();
|
|
|
|
+ } else {
|
|
|
|
+ z.ui.alertWarning(res.msg);
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ error: function () {
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ },
|
|
|
|
+ onCancel: function () {
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ })
|
|
|
|
+ $("#editBtn_" + index).click(function () {
|
|
|
|
+ var i = this.id.substring(this.id.indexOf("_") + 1)
|
|
|
|
+ const span = $(this).find("span");
|
|
|
|
+ const html = span.html();
|
|
|
|
+ var tr =$("#contract_return_" + i);
|
|
|
|
+ if (html === '保存') {
|
|
|
|
+ var returnAmount = tr.find("[name='ContractReturnMoney["+i+"]$returnAmount'] input").val();
|
|
|
|
+ var returnId = tr.find("[name='ContractReturnMoney["+i+"]$id']").val();
|
|
|
|
+ var dom = $("[name^='ContractReturnMoney['][name$='$returnAmount'] input");
|
|
|
|
+ var totalReturnAmount = 0;
|
|
|
|
+ for (let j = 0; j < dom.length; j++) {
|
|
|
|
+ var tmp = $(dom[j]).val()
|
|
|
|
+ if(parseFloat(tmp)){
|
|
|
|
+ totalReturnAmount += parseFloat(tmp);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ var invoiceAmount = $("[name='contractInvoice$invoiceAmount'] input").val();
|
|
|
|
+ if(!returnAmount){
|
|
|
|
+ z.ui.alertWarning("请填写回款金额");
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ if(!parseFloat(returnAmount)){
|
|
|
|
+ z.ui.alertWarning("回款金额有误");
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ if(parseFloat(invoiceAmount) && (totalReturnAmount > parseFloat(invoiceAmount))){
|
|
|
|
+ z.ui.alertWarning("回款金额不能超过开票金额");
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ var returnDate = tr.find("[name='ContractReturnMoney["+i+"]$returnDate'] input").val();
|
|
|
|
+ if(!returnDate){
|
|
|
|
+ z.ui.alertWarning("请填写回款日期");
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ var bz =tr.find("[name='ContractReturnMoney["+i+"]$bz'] input").val();
|
|
|
|
+ var formInfo = z.ui.form.getFormFields("[name=flow-form]", {validatorRequired: false});
|
|
|
|
+ var relationList = [];
|
|
|
|
+ for (let key of Object.keys(formInfo)) {
|
|
|
|
+ let mealName = formInfo[key];
|
|
|
|
+ if (key.startsWith("Contract[")) {
|
|
|
|
+ relationList.push(z.ui.form.childStringify(mealName));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ z.ui.ajax({
|
|
|
|
+ url: z.ui.comm.getEntranceUrl("/contract-return-money"),
|
|
|
|
+ type: 'post',
|
|
|
|
+ contentType: 'application/json',
|
|
|
|
+ data: JSON.stringify({
|
|
|
|
+ 'id': returnId,
|
|
|
|
+ 'contractId' : contractId,
|
|
|
|
+ 'contractInvoiceId' : contractInvoiceId,
|
|
|
|
+ 'contractMilestoneId' : contractMilestoneId,
|
|
|
|
+ 'contractMilestoneName' : contractMilestoneName,
|
|
|
|
+ 'returnAmount': returnAmount,
|
|
|
|
+ 'returnDate': returnDate,
|
|
|
|
+ 'bz': bz,
|
|
|
|
+ 'relationList': relationList
|
|
|
|
+ }),
|
|
|
|
+ success: function (res) {
|
|
|
|
+ if(res.code === 0){
|
|
|
|
+ if(!returnId){
|
|
|
|
+ tr.find("[name='ContractReturnMoney["+i+"]$id']").val(res.data);
|
|
|
|
+ }
|
|
|
|
+ z.ui.alertSuccess("回款添加成功");
|
|
|
|
+ detailReadonly(i, false,"contract_return_")
|
|
|
|
+ $("#addData").removeAttr('disabled')
|
|
|
|
+ tr.addClass("form-table-disable")
|
|
|
|
+ span.html('编辑');
|
|
|
|
+ } else {
|
|
|
|
+ z.ui.alertWarning(res.msg);
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ error: function () {
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ } else if (html === '编辑') {
|
|
|
|
+ span.html('保存')
|
|
|
|
+ detailWrite(i);
|
|
|
|
+ $("#addData").attr('disabled', "true");
|
|
|
|
+ tr.removeClass("form-table-disable")
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ z.ui.date("[name='ContractReturnMoney[" + (lists.length-1) + "]$returnDate']").init()
|
|
|
|
+ buildSeq();
|
|
|
|
+
|
|
|
|
+ for (let i = 0; i < tbody.length; i++) {
|
|
|
|
+ z.ui.date("[name='ContractReturnMoney[" + i + "]$returnDate']").init({
|
|
|
|
+ done: function (value, date, endDate) {
|
|
|
|
+ //改变日期后触发
|
|
|
|
+ console.log(value);
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ function buildSeq() {
|
|
|
|
+ let elementsByName = document.getElementsByName("contract_return_seq");
|
|
|
|
+ for (let i = 0; i < elementsByName.length; i++) {
|
|
|
|
+ const seqElement = elementsByName[i];
|
|
|
|
+ seqElement.innerHTML = i + 1;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ function initInvoiceCompany(){
|
|
|
|
+ z.ui.ajax({
|
|
|
|
+ type: "get",
|
|
|
|
+ url: "/common/company-tree",
|
|
|
|
+ data: {},
|
|
|
|
+ success: function (res) {
|
|
|
|
+ if(res && res.code === 0 && res.data.length > 0){
|
|
|
|
+ selecttree("[name='invoiceCompany']",res.data,clickInvoiceCompany,null,null,setInvoiceCompany)
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ error: function () {
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ function setInvoiceCompany(){
|
|
|
|
+ var id = $("[name='contractInvoice$invoiceCompanyId']").val();
|
|
|
|
+ if(id){
|
|
|
|
+ z.ui.selecttree("[name='invoiceCompany']").setValue(id);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ function clickInvoiceCompany(even, treeId, treeNode) {
|
|
|
|
+ $("[name='contractInvoice$invoiceCompany']").val(treeNode.name);
|
|
|
|
+ $("[name='contractInvoice$invoiceCompanyId']").val(treeNode.id);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ function initPayCompany(){
|
|
|
|
+ z.ui.ajax({
|
|
|
|
+ type: "get",
|
|
|
|
+ url: "/customer-tree",
|
|
|
|
+ data: {},
|
|
|
|
+ success: function (res) {
|
|
|
|
+ if(res && res.code === 0 && res.data.length > 0){
|
|
|
|
+ selecttree("[name='payCompany']",res.data,clickPayCompany,null,null,setPayCompany);
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ error: function () {
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ function setPayCompany(){
|
|
|
|
+ var id = $("[name='contractInvoice$payCompanyId']").val();
|
|
|
|
+ if(id){
|
|
|
|
+ z.ui.selecttree("[name='payCompany']").setValue(id);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ function clickPayCompany(even, treeId, treeNode) {
|
|
|
|
+ $("[name='contractInvoice$payCompany']").val(treeNode.name);
|
|
|
|
+ $("[name='contractInvoice$payCompanyId']").val(treeNode.id);
|
|
|
|
+ $("[name='contractInvoice$payTaxNumber'] input").val(treeNode.extendData.taxNumber);
|
|
|
|
+ $("[name='contractInvoice$payAddress'] input").val(treeNode.extendData.payAddress);
|
|
|
|
+ $("[name='contractInvoice$payBank'] input").val(treeNode.extendData.bankaccount);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ function updateView() {
|
|
|
|
+ let tbodyQjsq = document.querySelector('[name=returnMoney]')
|
|
|
|
+ let html = ''
|
|
|
|
+ for (let i = 0; i < lists.length; i++) {
|
|
|
|
+ // var ratio = '';
|
|
|
|
+ // if(parseFloat(contractAmount) && parseFloat(contractAmount) > 0 ){
|
|
|
|
+ // ratio = ((lists[i].returnAmount / parseFloat(contractAmount)) * 100).toFixed(2) + '%';
|
|
|
|
+ // }
|
|
|
|
+ html += '<tr class="qjsjClass" id="contract_return_' + i + '" style="background:#fff">'
|
|
|
|
+ + '<td name="contract_return_seq">' + (i + 1) + '</td>'
|
|
|
|
+ + '<td>'
|
|
|
|
+ + '<div class="form-flex">'
|
|
|
|
+ + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
|
|
|
|
+ + '<input type="hidden" name="ContractReturnMoney[' + i + ']$id" value="'+lists[i].id+'"/>'
|
|
|
|
+ + '<input type="hidden" name="ContractReturnMoney[' + i + ']$sortnum" value="'+lists[i].sortnum+'"/>'
|
|
|
|
+ + '<input type="hidden" name="ContractReturnMoney[' + i + ']$contractInvoiceId" value="'+lists[i].contractInvoiceId+'"/>'
|
|
|
|
+ + '<input type="hidden" name="ContractReturnMoney[' + i + ']$contractId" value="'+lists[i].contractId+'"/>'
|
|
|
|
+ + '<input type="hidden" name="ContractReturnMoney[' + i + ']$contractMilestoneId" value="'+lists[i].contractMilestoneId+'"/>'
|
|
|
|
+ + '<div class="z-comp-input" name="ContractReturnMoney[' + i + ']$returnAmount">'
|
|
|
|
+ + '<input type="text" class="returnAmount" value="'+lists[i].returnAmount+'">'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</td>'
|
|
|
|
+ + '<td>'
|
|
|
|
+ + '<div class="form-flex">'
|
|
|
|
+ + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
|
|
|
|
+ + '<div class="z-comp-date" name="ContractReturnMoney[' + i + ']$returnDate">'
|
|
|
|
+ + '<input type="text" value="'+lists[i].returnDate+'">'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</td>'
|
|
|
|
+ + '<td>'
|
|
|
|
+ + '<div class="form-flex">'
|
|
|
|
+ + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
|
|
|
|
+ + '<div class="z-comp-input" name="ContractReturnMoney[' + i + ']$bz">'
|
|
|
|
+ + '<input type="text" value="'+lists[i].bz+'">'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</td>'
|
|
|
|
+ + '<td>'
|
|
|
|
+ + '<div style="display: flex;white-space: nowrap">'
|
|
|
|
+ + '<div id="editBtn_' + (i) + '" class="table-btn editBtn_' + (i) + '" data-index="' + (i) + '">'
|
|
|
|
+ + '<span>编辑</span>'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '<div id="delBtn_' + (i) + '" class="table-btn delBtn_' + (i) + '" data-index="' + (i) + '">'
|
|
|
|
+ + '<span>删除</span>'
|
|
|
|
+ + '</div></div>'
|
|
|
|
+ + '</td></tr>';
|
|
|
|
+ }
|
|
|
|
+ tbodyQjsq.innerHTML = html
|
|
|
|
+ for (let i = 0; i < lists.length; i++) {
|
|
|
|
+ z.ui.date("[name='ContractReturnMoney[" + i + "]$returnDate']").init()
|
|
|
|
+ $("#delBtn_" + i).click(function () {
|
|
|
|
+ var tr =$("#contract_return_" + i);
|
|
|
|
+ var returnId = tr.find("[name='ContractReturnMoney["+i+"]$id']").val();
|
|
|
|
+ z.ui.confirm("compid").init({
|
|
|
|
+ content: "确定删除吗?",
|
|
|
|
+ onConfirm: function () {
|
|
|
|
+ z.ui.ajax({
|
|
|
|
+ url: z.ui.comm.getEntranceUrl("/contract-return-money?id="+returnId),
|
|
|
|
+ type: 'delete',
|
|
|
|
+ contentType: 'application/json',
|
|
|
|
+ data: {},
|
|
|
|
+ success: function (res) {
|
|
|
|
+ if(res.code === 0){
|
|
|
|
+ z.ui.alertSuccess("删除成功");
|
|
|
|
+ var element = document.getElementById("contract_return_" + i);
|
|
|
|
+ element.remove();
|
|
|
|
+ buildSeq();
|
|
|
|
+ updateList();
|
|
|
|
+ //lists.splice(i,1);
|
|
|
|
+ updateView();
|
|
|
|
+ } else {
|
|
|
|
+ z.ui.alertWarning(res.msg);
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ error: function () {
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ },
|
|
|
|
+ onCancel: function () {
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+ $("#editBtn_" + i).click(function () {
|
|
|
|
+ const span = $(this).find("span");
|
|
|
|
+ const html = span.html();
|
|
|
|
+ var tr =$("#contract_return_" + i);
|
|
|
|
+ var returnAmount = tr.find("[name='ContractReturnMoney["+i+"]$returnAmount'] input").val();
|
|
|
|
+
|
|
|
|
+ var returnDate = tr.find("[name='ContractReturnMoney["+i+"]$returnDate'] input").val();
|
|
|
|
+ var returnId = tr.find("[name='ContractReturnMoney["+i+"]$id']").val();
|
|
|
|
+
|
|
|
|
+ var bz =tr.find("[name='ContractReturnMoney["+i+"]$bz'] input").val();
|
|
|
|
+ if (html === '保存') {
|
|
|
|
+
|
|
|
|
+ z.ui.ajax({
|
|
|
|
+ url: z.ui.comm.getEntranceUrl("/contract-return-money"),
|
|
|
|
+ type: 'post',
|
|
|
|
+ contentType: 'application/json',
|
|
|
|
+ data: JSON.stringify({
|
|
|
|
+ 'id': returnId,
|
|
|
|
+ 'contractId' : contractId,
|
|
|
|
+ 'contractInvoiceId' : contractInvoiceId,
|
|
|
|
+ 'contractMilestoneId' : contractMilestoneId,
|
|
|
|
+ 'contractMilestoneName' : contractMilestoneName,
|
|
|
|
+ 'returnAmount': returnAmount,
|
|
|
|
+ 'returnDate': returnDate,
|
|
|
|
+ 'bz': bz
|
|
|
|
+ }),
|
|
|
|
+ success: function (res) {
|
|
|
|
+ if(res.code === 0){
|
|
|
|
+ if(!returnId){
|
|
|
|
+ tr.find("[name='ContractReturnMoney["+i+"]$id']").val(res.data);
|
|
|
|
+ }
|
|
|
|
+ z.ui.alertSuccess("回款添加成功");
|
|
|
|
+ detailReadonly(i, false,"contract_return_")
|
|
|
|
+ $("#addData").removeAttr('disabled')
|
|
|
|
+ tr.addClass("form-table-disable")
|
|
|
|
+ span.html('编辑');
|
|
|
|
+ } else {
|
|
|
|
+ z.ui.alertWarning(res.msg);
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ error: function () {
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ } else if (html === '编辑'){
|
|
|
|
+ span.html('保存')
|
|
|
|
+ detailWrite(i);
|
|
|
|
+ $("#addData").attr('disabled', "true");
|
|
|
|
+ tr.removeClass("form-table-disable")
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ })
|
|
|
|
+ detailReadonly(i,false,"contract_return_")
|
|
|
|
+ $("#contract_return_" + i).addClass("form-table-disable")
|
|
|
|
+ }
|
|
|
|
+ // detailTotalInit()
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ function detailReadonly(i, isBool = true,prefix) {
|
|
|
|
+ if (isBool) {
|
|
|
|
+ $("#delBtn_" + i).css("display", "none");
|
|
|
|
+ $("#editBtn_" + i).css("display", "none");
|
|
|
|
+ }
|
|
|
|
+ let detailElement = document.getElementById(prefix + i);
|
|
|
|
+ let detailInput = detailElement.getElementsByTagName("input");
|
|
|
|
+ for (let j = 0; j < detailInput.length; j++) {
|
|
|
|
+ detailInput[j].disabled = true;
|
|
|
|
+ detailInput[j].className += " z-readonly"
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ function detailWrite(i) {
|
|
|
|
+ //财务审核时可以核减修改金额
|
|
|
|
+ let detailElement = document.getElementById("contract_return_" + i);
|
|
|
|
+ let detailInput = detailElement.getElementsByTagName("input");
|
|
|
|
+ for (let j = 0; j < detailInput.length; j++) {
|
|
|
|
+ detailInput[j].disabled = false;
|
|
|
|
+ $(detailInput[j]).removeClass(" z-readonly")
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ function generateTableTrHtml(index) {
|
|
|
|
+ var trDom = document.createElement("tr");
|
|
|
|
+ trDom.style.backgroundColor = "#fff";
|
|
|
|
+ trDom.id = "contract_return_" + index;
|
|
|
|
+ trDom.className = 'qjsjClass';
|
|
|
|
+ trDom.innerHTML = '<td name="contract_return_seq">' + (index + 1) + '</td>'
|
|
|
|
+ + '<td>'
|
|
|
|
+ + '<div class="form-flex">'
|
|
|
|
+ + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
|
|
|
|
+ + '<input type="hidden" name="ContractReturnMoney[' + index + ']$id" value="'+lists[index].id+'"/>'
|
|
|
|
+ + '<input type="hidden" name="ContractReturnMoney[' + index + ']$sortnum" value="'+lists[index].sortnum+'"/>'
|
|
|
|
+ + '<input type="hidden" name="ContractReturnMoney[' + index + ']$contractInvoiceId" value="'+lists[index].contractInvoiceId+'"/>'
|
|
|
|
+ + '<input type="hidden" name="ContractReturnMoney[' + index + ']$contractId" value="'+lists[index].contractId+'"/>'
|
|
|
|
+ + '<input type="hidden" name="ContractReturnMoney[' + index + ']$contractMilestoneId" value="'+lists[index].contractMilestoneId+'"/>'
|
|
|
|
+ + '<div class="z-comp-input" name="ContractReturnMoney[' + index + ']$returnAmount">'
|
|
|
|
+ + '<input type="text" class="returnAmount" value="'+lists[index].returnAmount+'">'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</td>'
|
|
|
|
+ + '<td>'
|
|
|
|
+ + '<div class="form-flex">'
|
|
|
|
+ + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
|
|
|
|
+ + '<div class="z-comp-date" name="ContractReturnMoney[' + index + ']$returnDate">'
|
|
|
|
+ + '<input type="text" value="'+lists[index].returnDate+'">'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</td>'
|
|
|
|
+ + '<td>'
|
|
|
|
+ + '<div class="form-flex">'
|
|
|
|
+ + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
|
|
|
|
+ + '<div class="z-comp-input" name="ContractReturnMoney[' + index + ']$bz">'
|
|
|
|
+ + '<input type="text" value="">'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '</td>'
|
|
|
|
+ + '<td>'
|
|
|
|
+ + '<div style="display: flex;white-space: nowrap">'
|
|
|
|
+ + '<div id="editBtn_' + (index) + '" class="table-btn editBtn_' + (index) + '" data-index="' + (index) + '">'
|
|
|
|
+ + '<span>保存</span>'
|
|
|
|
+ + '</div>'
|
|
|
|
+ + '<div id="delBtn_' + (index) + '" class="table-btn delBtn_' + (index) + '" data-index="' + (index) + '">'
|
|
|
|
+ + '<span>删除</span>'
|
|
|
|
+ + '</div></div>'
|
|
|
|
+ + '</td>';
|
|
|
|
+ return trDom;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+}())
|