123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639 |
- (function () {
- var lists = [];
- let flowInstanceId = "";
- let viewState = z.ui.comm.getUrlParam("_o");
- let isFirst = z.ui.comm.getUrlParam("first");
- var contractId = $("[name='contract$id']").val()
- var contractAmount = $("[name='contract$contractAmount'] input").val()
- window.onload = function () {
- flowInstanceId = z.ui.comm.getUrlParam("flowInstanceId");
- bindEvents();
- };
- function bindEvents() {
- initData();
- initCalcTax();
- initContractMilestone();
- initSelectMainType();
- bindGenerateSerial();
- z.workflow.saveBtn.addListener("onSaveClick", submit);
- }
- function initData(){
- initClient();
- initAssignee()
- initAreaManager();
- }
- function initSelectMainType() {
- z.ui.select("[name='contract$mainType']").bindEvents({
- onAfterSelect:function(value,data){
- if(value === '5' ){
- $("#attach").show();
- } else {
- $("#attach").hide();
- }
- }
- });
- var now = z.ui.select("[name='contract$mainType']").getValue();
- if (now ==='5'){
- $("#attach").show();
- } else {
- $("#attach").hide();
- }
- }
- function bindGenerateSerial(){
- $("#generateSerial").on("click",function(){
- var serial = $("[name='contract$contractNumber'] input").val();
- var projectTypeCode = $("[name=projectTypeCode]").val();
- var xzqh = $("[name=xzqh]").val();
- var params = {"projectType": projectTypeCode,"xzqh": xzqh};
- var postdata = {"name": '合同编号',"params": params}
- 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='contract$contractNumber'] input").val(res.data)
- } else {
- z.ui.alertWarning(res.msg);
- }
- },
- error: function (res) {
- }
- })
- },
- 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='contract$contractNumber'] input").val(res.data)
- } else {
- z.ui.alertWarning(res.msg);
- }
- },
- error: function (res) {
- }
- })
- }
- })
- }
- function initClient(){
- z.ui.ajax({
- type: "get",
- url: "/customer-tree",
- data: {},
- success: function (res) {
- if(res && res.code === 0 && res.data.length > 0){
- selecttree("[name='client']",res.data,clickClient)
- }
- },
- error: function () {
- }
- })
- }
- function initAssignee(){
- z.ui.ajax({
- type: "get",
- url: "/common/company-tree",
- data: {},
- success: function (res) {
- if(res && res.code === 0 && res.data.length > 0){
- selecttree("[name='assignee']",res.data,clickAssignee)
- }
- },
- error: function () {
- }
- })
- }
- function initCalcTax(){
- $('[name="contract$taxHsjeJskf"] input').on('change',function (){
- calcTax();
- })
- $('[name="contract$taxHsjeFw"] input').on('change',function (){
- calcTax();
- })
- $('[name="contract$taxHsjeRjcp"] input').on('change',function (){
- calcTax();
- })
- $('[name="contract$taxHsjeYj"] input').on('change',function (){
- calcTax();
- })
- }
- function initContractMilestone(){
- var milestoneList = JSON.parse(window.milestoneList);
- if (milestoneList.length > 0) {
- for (let i = 0; i < milestoneList.length; i++) {
- let obj = {
- name: milestoneList[i].name || "",
- returnAmount: milestoneList[i].returnAmount || "",
- actualReturnAmount: milestoneList[i].actualReturnAmount || "",
- planReturnTime: milestoneList[i].planReturnTime || "",
- description: milestoneList[i].description || "",
- id: milestoneList[i].id || "",
- contractId: milestoneList[i].contractId || contractId,
- sortnum: milestoneList[i].sortnum || ""
- }
- lists.push(obj)
- }
- }
- $("#addData").click(function(){
- addContractMilestone();
- })
- updateView()
- }
- function submit(all, istransfer) {
- var postData = z.ui.form.getFormFields("[name=flow-form]", {validatorRequired: istransfer});
- if (postData === false) {
- all({success: false});
- return;
- }
- var milestoneFlag = false;
- var milestoneList = new Array()
- for (let key of Object.keys(postData)) {
- let mealName = postData[key];
- if (key.startsWith("ContractMilestone")) {
- if(parseFloat(mealName.actualReturnAmount) && parseFloat(mealName.actualReturnAmount) > 0 ){
- all({success: false, errorMsg: "里程碑回款金额不能大于0!"});
- return;
- }
- mealName.contractId = contractId;
- milestoneList.push(z.ui.form.childStringify(mealName));
- milestoneFlag =true;
- }
- }
- if(istransfer && !milestoneFlag){
- all({success: false, errorMsg: "请填写合同里程碑!"});
- return;
- }
- postData.milestoneList = milestoneList;
- z.ui.ajax({
- url: z.ui.comm.getEntranceUrl("/flow/contract/update"),
- data: z.ui.form.childStringify(postData),
- success: function () {
- all({success: true});
- },
- error: function () {
- all({success: false});
- }
- })
- }
- function calcTax() {
- var hsje_jskf = parseFloat($('[name="contract$taxHsjeJskf"] input').val()) || 0;
- var hsje_fw = parseFloat($('[name="contract$taxHsjeFw"] input').val()) || 0;
- var hsje_rjcp = parseFloat($('[name="contract$taxHsjeRjcp"] input').val()) || 0;
- var hsje_yj = parseFloat($('[name="contract$taxHsjeYj"] input').val()) || 0;
- var hsje_total = parseFloat((hsje_jskf + hsje_fw + hsje_rjcp + hsje_yj).toFixed(2));
- $('[name="contract$taxHsjeTotal"] input').val(hsje_total);
- var bhsje_jskf = parseFloat(hsje_jskf.toFixed(2));
- var bhsje_fw = parseFloat((hsje_fw / (1 + 0.06)).toFixed(2));
- var bhsje_rjcp = parseFloat((hsje_rjcp / (1 + 0.13)).toFixed(2));
- var bhsje_yj =parseFloat( (hsje_yj / (1 + 0.13)).toFixed(2));
- var bhsje_total = parseFloat((bhsje_jskf + bhsje_fw + bhsje_rjcp + bhsje_yj).toFixed(2));
- $('[name="contract$taxBhsze"] input').val(bhsje_total);
- $('[name="contract$taxZhsl"] input').val(((hsje_total - bhsje_total) / bhsje_total).toFixed(6));
- var zhsl = 0;
- var htje = parseFloat($('[name="contract$contractAmount"] input').val()) || 0;
- if (htje == 0){
- zhsl = 1;
- } else {
- zhsl = (1 - parseFloat(bhsje_total / htje)).toFixed(2);
- }
- }
- function initAreaManager(){
- z.ui.ajax({
- type: "get",
- url: "/common/user-tree",
- data: {},
- success: function (res) {
- if(res && res.length > 0){
- // selecttree("[name='areaManager']",res,onClear,clickAreaManager,setAreaManager,allowUserClick,{ "Y": "s", "N": "s" })
- selecttree("[name='areaManager']",res,clickAreaManager,allowUserClick,onClear,setAreaManager)
- }
- },
- error: function () {
- }
- })
- }
- function onClear(){
- $("[name='contract$areaManagerId']").val('');
- $("[name='contract$areaManager']").val('');
- }
- function setAreaManager(){
- var ids = $("[name='contract$areaManagerId']").val();
- if(ids){
- z.ui.selecttree("[name='areaManager']").setValue(ids.split(","));
- }
- }
- // function clickAreaManager(even, treeId, treeNode) {
- // var ids = [];
- // var names = [];
- // var nodes = z.ui.selecttree("[name='areaManager']").tree.getCheckedNodes();
- // for(var i in nodes){
- // ids.push(nodes[i].id);
- // names.push(nodes[i].name);
- // }
- // if(ids.length > 0){
- // $("[name='contract$areaManagerId']").val(ids.join(","));
- // $("[name='contract$areaManager']").val(names.join(","));
- // }
- // }
- function clickAreaManager(even, treeId, treeNode) {
- $("[name='contract$areaManagerId']").val(treeNode.id);
- $("[name='contract$areaManager']").val(treeNode.name);
- }
- function clickClient(even, treeId, treeNode) {
- $("[name='contract$clientName']").val(treeNode.name);
- $("[name='contract$clientId']").val(treeNode.id);
- $("[name='contract$clientNumber'] input").val(treeNode.extendData.customerNumber);
- }
- function clickAssignee(even, treeId, treeNode) {
- $("[name='contract$assigneeName']").val(treeNode.name);
- $("[name='contract$assigneeId']").val(treeNode.id);
- }
- 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("ContractMilestone")) {
- var dataObj = {
- name: mealName.name,
- returnAmount: mealName.returnAmount,
- actualReturnAmount: mealName.actualReturnAmount,
- planReturnTime: mealName.planReturnTime,
- description: mealName.description,
- id: mealName.id,
- contractId: contractId,
- sortnum: lists.length
- }
- lists.push(dataObj);
- }
- }
- }
- function addContractMilestone(){
- var trFragment = document.createDocumentFragment();
- let tbody = document.querySelectorAll('.tbody tr')
- let qjsjElements = document.getElementsByName("contract_milestone_seq");
- var dataObj = {
- name: "",
- returnAmount: "",
- actualReturnAmount: 0,
- planReturnTime: "",
- description: "",
- id: "",
- contractId: contractId,
- sortnum: lists.length - 1
- }
- lists.push(dataObj);
- trFragment.appendChild(generateTableTrHtml(lists.length-1))
- var index = lists.length - 1;
- $(".tbody").append(trFragment)
- $("#delBtn_" + index).click(function () {
- var i = this.id.substring(this.id.indexOf("_") + 1)
- z.ui.confirm("compid").init({
- content: "确定删除吗?",
- onConfirm: function () {
- var element = document.getElementById("contract_milestone_" + i);
- element.remove();
- buildSeq();
- updateList();
- //lists.splice(i,1);
- updateView();
- },
- onCancel: function () {
- }
- })
- })
- $("#editBtn_" + index).click(function () {
- var i = this.id.substring(this.id.indexOf("_") + 1)
- const span = $(this).find("span");
- const html = span.html();
- if (html === '编辑') {
- span.html('保存')
- detailWrite(i);
- $("#addData").attr('disabled', "true");
- $("#contract_milestone_" + i).removeClass("form-table-disable")
- return;
- }
- if (html === '保存') {
- span.html('编辑')
- detailReadonly(i, false,"contract_milestone_")
- $("#addData").removeAttr('disabled')
- $("#contract_milestone_" + i).addClass("form-table-disable")
- return;
- }
- })
- z.ui.date("[name='ContractMilestone[" + (lists.length-1) + "]$planReturnTime']").init()
- buildSeq();
- for (let i = 0; i < tbody.length; i++) {
- z.ui.date("[name='ContractMilestone[" + i + "]$planReturnTime']").init({
- done: function (value, date, endDate) {
- //改变日期后触发
- console.log(value);
- }
- });
- }
- }
- function buildSeq() {
- let elementsByName = document.getElementsByName("contract_milestone_seq");
- for (let i = 0; i < elementsByName.length; i++) {
- const seqElement = elementsByName[i];
- seqElement.innerHTML = i + 1;
- }
- }
- function updateView() {
- let tbodyQjsq = document.querySelector('.tbodyQjsq')
- 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_milestone_' + i + '" style="background:#fff">'
- + '<td name="contract_milestone_seq">' + (i + 1) + '</td>'
- + '<td>'
- + '<div class="form-flex">'
- + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
- + '<input type="hidden" name="ContractMilestone[' + i + ']$id" value="'+lists[i].id+'"/>'
- + '<input type="hidden" name="ContractMilestone[' + i + ']$sortnum" value="'+lists[i].sortnum+'"/>'
- + '<div class="z-comp-input" name="ContractMilestone[' + i + ']$name">'
- + '<input type="text" value="'+lists[i].name+'">'
- + '</div>'
- + '</div>'
- + '</div>'
- + '</td>'
- + '<td>'
- + '<div class="form-flex">'
- + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
- + '<div class="z-comp-input">'
- + '<input type="text" value="'+ratio+'">'
- + '</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="ContractMilestone[' + i + ']$returnAmount">'
- + '<input type="text" 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-input" name="ContractMilestone[' + i + ']$actualReturnAmount">'
- + '<input type="text" value="'+lists[i].actualReturnAmount+'">'
- + '</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="ContractMilestone[' + i + ']$planReturnTime">'
- + '<input type="text" value="'+lists[i].planReturnTime+'">'
- + '</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="ContractMilestone[' + i + ']$description">'
- + '<input type="text" value="'+lists[i].description+'">'
- + '</div>'
- + '</div>'
- + '</div>'
- + '</td>'
- + '<td>'
- if(isFirst === '1' && viewState !== 'v') {
- html += "<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>'
- }
- html += '</td></tr>';
- }
- tbodyQjsq.innerHTML = html
- for (let i = 0; i < lists.length; i++) {
- z.ui.date("[name='ContractMilestone[" + i + "]$planReturnTime']").init()
- if(isFirst === '1' && viewState !== 'v') {
- $("#delBtn_" + i).click(function () {
- z.ui.confirm("compid").init({
- content: "确定删除吗?",
- onConfirm: function () {
- var element = document.getElementById("contract_milestone_" + i);
- element.remove();
- buildSeq();
- updateList();
- //lists.splice(i, 1)
- updateView();
- },
- onCancel: function () {
- }
- })
- })
- $("#editBtn_" + i).click(function () {
- const span = $(this).find("span");
- const html = span.html();
- if (html === '编辑') {
- span.html('保存')
- detailWrite(i);
- $("#addData").attr('disabled', "true");
- $("#contract_milestone_" + i).removeClass("form-table-disable")
- return;
- }
- if (html === '保存') {
- span.html('编辑')
- detailReadonly(i, false, "contract_milestone_")
- $("#addData").removeAttr('disabled')
- $("#contract_milestone_" + i).addClass("form-table-disable")
- return;
- }
- })
- }
- detailReadonly(i,false,"contract_milestone_")
- $("#contract_milestone_" + i).addClass("form-table-disable")
- // if(viewState === 'v' || read=== '1'){
- // detailReadonly(i)
- // }
- }
- // detailTotalInit()
- }
- function generateTableTrHtml(index) {
- var trDom = document.createElement("tr");
- trDom.style.backgroundColor = "#fff";
- trDom.id = "contract_milestone_" + index;
- trDom.className = 'qjsjClass';
- trDom.innerHTML = '<td name="contract_milestone_seq">' + (index + 1) + '</td>'
- + '<td>'
- + '<div class="form-flex">'
- + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
- + '<input type="hidden" name="ContractMilestone[' + index + ']$sortnum" value="'+(index+1)+'">'
- + '<div class="z-comp-input" name="ContractMilestone[' + index + ']$name">'
- + '<input type="text" value="">'
- + '</div>'
- + '</div>'
- + '</div>'
- + '</td>'
- + '<td>'
- + '<div class="form-flex">'
- + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
- + '<div class="z-comp-input">'
- + '<input type="text" value="">'
- + '</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="ContractMilestone[' + index + ']$returnAmount">'
- + '<input type="text" value="">'
- + '</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="ContractMilestone[' + index + ']$actualReturnAmount">'
- + '<input type="text" value="'+lists[index].actualReturnAmount+'">'
- + '</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="ContractMilestone[' + index + ']$planReturnTime">'
- + '<input type="text" value="">'
- + '</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="ContractMilestone[' + index + ']$description">'
- + '<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;
- }
- 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_milestone_" + i);
- let detailInput = detailElement.getElementsByTagName("input");
- for (let j = 0; j < detailInput.length; j++) {
- detailInput[j].disabled = false;
- $(detailInput[j]).removeClass("z-readonly")
- }
- }
- // TODO tax valid
- // function Tax_ValidateInput() {
- // var flag = true;
- // var htje = Number(jPage.find('[name="CONTRACT0000HTJE"]').val()) || 0;
- // var hsje_total = Number(jPage.find('[name="CONTRACT0000TAX_HSJE_TOTAL"]').val()) || 0;
- // if (hsje_total != htje) {
- // W.Page.ShowError('含税金额(小计)与合同金额不一致!');
- // flag = false;
- // }
- //
- // var hsje_rjcp = parseFloat(jPage.find('[name="CONTRACT0000TAX_HSJE_RJCP"]').val()) || 0;
- // var tax_softpatent = jPage.find('[name="CONTRACT0000TAX_SOFTPATENT"]').val();
- // if (hsje_rjcp > 0 && !tax_softpatent) {
- // W.Page.ShowError('请选择一个具体的软件产品名称!');
- // flag = false;
- // }
- // if (hsje_rjcp == 0 && tax_softpatent)
- // jPage.find('[name="CONTRACT0000TAX_SOFTPATENT"]').val('');
- //
- // return flag;
- // }
- }())
|