123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548 |
- 'use strict';
- /**
- * 变更令上报和重新上报功能js
- *
- * @author EllisRan.
- * @date 2018/11/22
- * @version
- */
- $(document).ready(() => {
- // 上报时按钮点击
- $('a[data-target="#sub-ap"]').on('click', function () {
- let category = $(this).data('category');
- if (category === 'save_change') {
- // 保存修改modal
- $('.up-change').hide();
- $('.save-change').show();
- } else {
- // 上报审批modal
- $('.up-change').show();
- $('.save-change').hide();
- }
- });
- // 提交表单
- // 上报时按钮点击
- $('button[data-sumbit="sumbit_change"]').on('click', function () {
- let category = $(this).data('category');
- if (category === 'save_change') {
- // 保存修改modal
- $('#changeStatus').val(2);
- // 获取auditlist并填入input中
- getAuditList();
- if ($('input[name="code"]').val() === '') {
- toastr.error('申请编号不能为空!');
- return;
- }
- if ($('input[name="name"]').val() === '') {
- toastr.error('工程名称不能为空!');
- return;
- }
- $('#change_form').submit();
- } else {
- // 上报审批modal
- $('#changeStatus').val(1);
- getAuditList();
- let returnFlag = false;
- // 表单判断
- if ($('input[name="code"]').val() === '') {
- toastr.error('申请编号不能为空!');
- returnFlag = true;
- }
- if ($('input[name="name"]').val() === '') {
- toastr.error('工程名称不能为空!');
- returnFlag = true;
- }
- if ($('textarea[name="content"]').val() === '') {
- toastr.error('工程变更理由及内容不能为空!');
- returnFlag = true;
- }
- if ($('#change-list').val() === '' && $('#change-whitelist').val() === '') {
- toastr.error('请添加变更清单!');
- returnFlag = true;
- } else {
- let changeList = [];
- if ($('#change-list').val() !== '') {
- changeList = $('#change-list').val().split('^_^');
- }
- let changeWhiteList = [];
- if ($('#change-whitelist').val() !== '') {
- changeWhiteList = $('#change-whitelist').val().split('^_^');
- }
- changeList.push.apply(changeList, changeWhiteList);
- for (const [index, cl] of changeList.entries()) {
- const clInfo = cl.split(';');
- if (clInfo[0] === '' || clInfo[1] === '' || clInfo[3] === '' || clInfo[4] === '' || clInfo[5] === '') {
- toastr.error('变更清单第' + (index+1) + '行未完整填写数据(变更详情可空)');
- returnFlag = true;
- }
- }
- }
- if ($('#changeaudit').val() === '') {
- toastr.error('请添加审批流程!');
- returnFlag = true;
- }
- if (returnFlag) {
- return;
- }
- $('#change_form').submit();
- $(this).attr('disabled', true);
- }
- });
- // 搜索用户
- $('#search_audit_btn').click(function () {
- const keyword = $('#search_audit_input').val();
- if (keyword === '') {
- toastr.error('请输入姓名进行检索!');
- } else {
- $('#search_audit_list').html('');
- const data = { keyword: keyword, type: 'more' };
- postData('/search/user', data, function (result) {
- const searchList = result;
- $('#search_audit_list').html('');
- if (searchList.length === 0) {
- toastr.error('不存在该用户姓名!');
- } else {
- let search_audit_html = '';
- for (const s of searchList) {
- search_audit_html += '<div class="card border-primary" style="margin-bottom: 5px;">' +
- '<div class="card-body">' +
- '<h5 class="card-title">' +
- '<a class="btn btn-primary btn-sm pull-right add_audit_btn" ' +
- 'href="javascript:void(0);" data-user="' + s.id + '/%/' + s.name + '/%/' + s.role + '/%/' + s.company + '">添加</a>' + s.name +
- '</h5>' +
- '<h6 class="card-subtitle mb-2 text-muted">' + s.role + '</h6>' +
- '<p class="card-text">' + s.company + '</p>' +
- '</div>' +
- '</div>';
- }
- $('#search_audit_list').html(search_audit_html);
- }
- });
- }
- });
- // 添加到审批流程中
- $('body').on('click', '.add_audit_btn', function () {
- const userData = $(this).data('user').split('/%/');
- // 先判断是否已存在该审批流程的审批人,再添加(不包括上报)
- let auditListIdData = [];
- $('#auditList li').each(function () {
- let aid = $(this).data('auditid');
- auditListIdData.push(aid);
- });
- if (!in_array(auditListIdData, userData[0])) {
- // 令其它的审批人流程图标转换
- $('#auditList li i').removeClass('fa-stop-circle').addClass('fa-chevron-circle-down');
- // 添加新审批人
- const addhtml = '<li class="list-group-item" data-auditmsg="' + $(this).data('user') + '"' +
- 'data-auditid="' + userData[0] + '" >' +
- '<a href="javascript:void(0);" class="text-danger pull-right remove_audit_btn">移除</a>' +
- '<i class="fa fa-stop-circle"></i>' +
- userData[1] + '<small class="text-muted">' + userData[2] + '</small>' +
- '</li>';
- $('#auditList').append(addhtml);
- } else {
- toastr.error('审批流程中已存在该用户!');
- }
- });
- // 移除审批流程的审批人
- $('body').on('click', '.remove_audit_btn', function () {
- $(this).parents('li').remove();
- // 令最后一个图标转换
- if ($('#auditList li').length !== 0 && !$('#auditList li i').hasClass('fa-stop-circle')) {
- $('#auditList li').eq($('#auditList li').length-1).children('i')
- .removeClass('fa-chevron-circle-down').addClass('fa-stop-circle');
- }
- });
- // 打开签约清单modal并删除之前的操作
- $('#open-list-modal').click(function () {
- $('#table-list-select tr').removeClass('table-success');
- });
- // 清单选中和移除
- $('#table-list-select tr').on('click', function () {
- if ($(this).hasClass('table-success')) {
- $(this).removeClass('table-success');
- // 选中
- } else {
- $(this).addClass('table-success');
- // 移除
- }
- });
- // 添加空白清单or签约清单
- $('.add-list-btn').on('click', function () {
- //生成table清单
- if($(this).hasClass('btn-outline-primary')){
- maketablelist('addwhite');
- }else{
- maketablelist();
- }
- $('#addlist').modal('hide');
- });
- // 选中input所有值
- $('body').on('focus', ".clist input", function() {
- $(this).select();
- });
- // 移除已选清单并重新编号
- $('body').on('click', '#list td a', function () {
- const index = $(this).parents('tr').data('index');
- const lid = $(this).parents('tr').data('lid');
- // 判断属于空白还是普通清单,并删除对应的index值
- const changelist = isNaN(lid) ? $('#change-list').val().split('^_^') : $('#change-whitelist').val().split('^_^');
- if($.trim(changelist) != ''){
- changelist.splice(index, 1);
- if (isNaN(lid)) {
- $('#change-list').val(changelist.join('^_^'));
- } else {
- $('#change-whitelist').val(changelist.join('^_^'));
- }
- }
- // 重新绘制table
- maketablelist();
- });
- // 清单输入监控并更新
- $('body').on('valuechange', '.clist input', function (e, previous) {
- const index = $(this).parents('tr').data('index');
- const lid = $(this).parents('tr').data('lid');
- const isWhite = !isNaN(lid) ? true : false;
- const tr = $('#list tr[data-lid="' + lid + '"]').eq(0);
- const site = parseInt($(this).parents('td').data('site'));
- switch (site) {
- case 0:
- case 1:
- case 2:
- case 4:
- tr.children('td[data-site="' + site + '"]').children('input').val($(this).val());
- break;
- case 5:
- case 7:
- default:
- break;
- }
- const code = $.trim(tr.children('td[data-site="0"]').children('input').val()) || $.trim(tr.children('td[data-site="0"]').text());
- const name = $.trim(tr.children('td[data-site="1"]').children('input').val()) || $.trim(tr.children('td[data-site="1"]').text());
- const unit = $.trim(tr.children('td[data-site="3"]').children('select').val()) || $.trim(tr.children('td[data-site="3"]').text());
- const price = (tr.children('td[data-site="4"]').children('input').val() != '-' ? tr.children('td[data-site="4"]').children('input').val() : '') || tr.children('td[data-site="4"]').text();
- const oamount = (tr.children('td[data-site="5"]').children('input').val() != '-' ? tr.children('td[data-site="5"]').children('input').val() : '') || tr.children('td[data-site="5"]').text();
- const scnum = tr.children('td[data-site="7"]').children('input').val() != '-' ? tr.children('td[data-site="7"]').children('input').val() : '';
- const detail = $.trim(tr.children('td[data-site="2"]').children('input').val());
- const trlist = [code,name,unit,price,oamount,scnum,detail];
- console.log(code);
- if (isWhite) {
- let changelist = $('#change-whitelist').val().split('^_^');
- trlist.push(0);
- changelist.splice(index, 1, trlist.join(';'));
- $('#change-whitelist').val(changelist.join('^_^'));
- } else {
- let changelist = $('#change-list').val().split('^_^');
- trlist.push(lid.split('_')[0]);
- changelist.splice(index, 1, trlist.join(';'));
- $('#change-list').val(changelist.join('^_^'));
- }
- tr.children('td[data-site="6"]').text(price != '' && oamount != '' ? roundnum(parseFloat(price).mul(parseFloat(oamount)),totalPriceUnit) : '');
- tr.children('td[data-site="8"]').text(price != '' && scnum != '' ? roundnum(parseFloat(price).mul(parseFloat(scnum)),totalPriceUnit) : '');
- totalamount(totalPriceUnit);
- });
- // 空白清单单位选择监控并更新小数位数
- $('body').on("change", '.clist select', function () {
- const index = $(this).parents('tr').data('index');
- const tr = $('#list tr[data-lid="' + index + '"]');
- const code = $.trim(tr.children('td[data-site="0"]').children('input').val());
- const name = $.trim(tr.children('td[data-site="1"]').children('input').val());
- const unit = $(this).val();
- const price = tr.children('td[data-site="4"]').children('input').val() != '-' ? tr.children('td[data-site="4"]').children('input').val() : '';
- let oamount = tr.children('td[data-site="5"]').children('input').val() != '-' ? tr.children('td[data-site="5"]').children('input').val() : '';
- let scnum = tr.children('td[data-site="7"]').children('input').val() != '-' ? tr.children('td[data-site="7"]').children('input').val() : '';
- const detail = $.trim(tr.children('td[data-site="2"]').children('input').val());
- // 根据单位更新数量位数和合计
- const numdecimal = findDecimal(unit);
- oamount = roundnum(oamount, numdecimal);
- scnum = roundnum(scnum, numdecimal);
- tr.children('td[data-site="5"]').children('input').val(oamount);
- tr.children('td[data-site="5"]').children('input').attr('onkeyup','RegNum(this,event,'+ numdecimal +')');
- tr.children('td[data-site="7"]').children('input').val(scnum);
- tr.children('td[data-site="7"]').children('input').attr('onkeyup','RegNum(this,event,'+ numdecimal +')');
- const trlist = [code,name,unit,price,oamount,scnum,detail,0];
- let changelist = $('#change-whitelist').val().split('^_^');
- changelist.splice(index, 1, trlist.join(';'));
- $('#change-whitelist').val(changelist.join('^_^'));
- tr.children('td[data-site="6"]').text(price != '' && oamount != '' ? roundnum(parseFloat(price).mul(parseFloat(oamount)),totalPriceUnit) : '');
- tr.children('td[data-site="8"]').text(price != '' && scnum != '' ? roundnum(parseFloat(price).mul(parseFloat(scnum)),totalPriceUnit) : '');
- totalamount(totalPriceUnit);
- });
- // 自动编号
- $('.reduction-code').click(function () {
- const code = $(this).data('code');
- $('input[name="code"]').val(code);
- });
- });
- //判断元素是否在数组中,相当于php的in_array();
- function in_array(arr, obj) {
- let i = arr.length;
- while (i--) {
- if (arr[i] == obj) {
- return true;
- }
- }
- return false;
- }
- // 获取审批流程中审批人列表数据
- function getAuditList() {
- if ($('#auditList li').length === 0) {
- $('#changeaudit').val('');
- } else {
- let auditInfoArray = [];
- $('#auditList li').each(function () {
- const aMsg = $(this).data('auditmsg');
- auditInfoArray.push(aMsg);
- });
- $('#changeaudit').val(auditInfoArray.join(','));
- }
- }
- // 重新生成清单
- function maketablelist(status){
- // 金额位数
- const decimal = totalPriceUnit;
- let html = '';
- // 原有清单(不含空白清单)
- let radionList = $('#change-list').val() !== '' ? $('#change-list').val().split('^_^') : [];
- // 获取选中的签约清单并插入到原有清单中
- $('#table-list-select .table-success').each(function(){
- let code = $(this).children('td').eq(1).text();
- let name = $(this).children('td').eq(2).text();
- let unit = $(this).children('td').eq(3).text();
- let price = $(this).children('td').eq(4).text();
- let oamount = $(this).children('td').eq(5).text();
- // 根据单位获取数量的位数,并得出
- let numdecimal = findDecimal(unit);
- let scnum = makedecimalzero(numdecimal);
- let detail = '';
- let lid = $(this).data('lid');
- let trlist = [code, name, unit, price, oamount, scnum, detail, lid];
- radionList.push(trlist.join(';'));
- });
- // 排序
- radionList.sort();
- let index = 0;
- let whiteIndex = 0;
- let deteletr = '<td><a class="text-danger">移除</a></td>';
- for (const radion of radionList) {
- const radionArray = radion.split(';');
- let code = radionArray[0];
- let name = radionArray[1];
- let unit = radionArray[2];
- let price = radionArray[3];
- let oamount = radionArray[4];
- let scnum = radionArray[5];
- let detail = radionArray[6];
- let lid = radionArray[7];
- let sctotal = scnum !== '' && scnum !== '-' ? roundnum(parseFloat(price).mul(parseFloat(scnum)),decimal) : '';
- // 根据单位获取数量的位数,并得出
- let numdecimal = findDecimal(unit);
- html += '<tr class="clist clid" data-lid="' + lid + '_' + index + '" data-index="' + index + '">' +
- '<td data-site="0">'+ code +'</td>' +
- '<td data-site="1">'+ name +'</td>' +
- '<td data-site="2"><input class="form-control input-sm" type="text" placeholder="变更详情" value="' + detail + '"></td>' +
- '<td data-site="3">'+ unit +'</td>' +
- '<td data-site="4">'+ roundnum(price, decimal) +'</td>' +
- '<td data-site="5">'+ roundnum(oamount, numdecimal) +'</td>' +
- '<td data-site="6">'+ roundnum(parseFloat(price).mul(parseFloat(oamount)),decimal) +'</td>' +
- '<td data-site="7"><input class="form-control input-sm" type="text" onkeyup="RegNum(this,event,'+ numdecimal +')" placeholder="请输入变更数量" value="'+ (scnum != '-' ? roundnum(scnum, numdecimal) : '') +'"></td>' +
- '<td data-site="8">'+ sctotal +'</td>'+
- deteletr +'</tr>';
- index ++;
- }
- $('#change-list').val(radionList.join('^_^'));
- let radionWhiteList = $('#change-whitelist').val() !== '' ? $('#change-whitelist').val().split('^_^') : [];
- //判断是否添加空白清单
- if(status == 'addwhite'){
- let trlist = ['','',changeUnits.t.unit,makedecimalzero(decimal),makedecimalzero(changeUnits.t.value),makedecimalzero(changeUnits.t.value),'',0];
- radionWhiteList.push(trlist.join(';'));
- }
- for (const rw of radionWhiteList) {
- const radionArray = rw.split(';');
- let code = radionArray[0];
- let name = radionArray[1];
- let unit = radionArray[2];
- let price = radionArray[3];
- let oamount = radionArray[4];
- let scnum = radionArray[5];
- let detail = radionArray[6];
- let ototal = price != '' && oamount != '' ? roundnum(parseFloat(price).mul(parseFloat(oamount)),decimal) : '';
- let sctotal = price != '' && scnum != '' ? roundnum(parseFloat(price).mul(parseFloat(scnum)),decimal) : '';
- let optionlist = '';
- for (const j in changeUnits) {
- if (changeUnits[j].unit !== undefined && changeUnits[j].unit === unit) {
- optionlist += '<option selected="selected">'+ changeUnits[j].unit +'</option>';
- } else if(changeUnits[j].unit !== undefined) {
- optionlist += '<option>'+ changeUnits[j].unit +'</option>';
- }
- }
- // 根据单位获取数量的位数,并得出
- let numdecimal = findDecimal(unit);
- html += '<tr class="clist" data-lid="' + whiteIndex + '" data-index="' + whiteIndex + '">' +
- '<td data-site="0"><input class="form-control input-sm" type="text" value="'+ code +'" placeholder="请输入清单编号"></td>' +
- '<td data-site="1"><input class="form-control input-sm" type="text" value="'+ name +'" placeholder="请输入名称"></td>' +
- '<td data-site="2"><input class="form-control input-sm" type="text" value="'+ detail +'" placeholder="变更详情"></td>' +
- '<td data-site="3"><select class="form-control input-sm">'+ optionlist +'</select></td>' +
- '<td data-site="4"><input class="form-control input-sm" type="text" onkeyup="RegNum(this,event,'+ decimal +')" value="'+ roundnum(price, decimal) +'" placeholder="请输入单价"></td>' +
- '<td data-site="5"><input class="form-control input-sm" type="text" onkeyup="RegNum(this,event,'+ numdecimal +')" value="'+ roundnum(oamount, numdecimal) +'" placeholder="请输入数量"></td>' +
- '<td data-site="6">'+ ototal +'</td>' +
- '<td data-site="7"><input class="form-control input-sm" type="text" onkeyup="RegNum(this,event,'+ numdecimal +')" value="'+ roundnum(scnum, numdecimal) +'" placeholder="请输入变更数量"></td>' +
- '<td data-site="8">'+ sctotal +'</td>'+
- deteletr +'</tr>';
- whiteIndex ++;
- }
- $('#change-whitelist').val(radionWhiteList.join('^_^'));
- table.destroy();
- $('#list').html(html);
- table = $('#tablelist').removeAttr('width').DataTable({
- columnDefs: [
- { className: 'allwidth1', width: 100, targets: 0 },
- { className: 'allwidth2', width: 150, targets: [1,2] },
- { className: 'allwidth4', width: 40, targets: 9 },
- { className: 'allwidth5', width: 60, targets: 3 },
- { className: 'allwidth3',width: 80, targets: '_all' }
- ],
- fixedColumns: {
- leftColumns: 5
- }
- });
- // 判断是否显示变更详情
- if (!$('.change-detail-checkbox').is(':checked')) {
- const column = table.column(2);
- column.visible(!column.visible());
- }
- totalamount(decimal);
- $('#table-list-select tr').removeClass('table-success');
- }
- //统计合计金额
- function totalamount(decimal){
- let zero = makedecimalzero(decimal);
- let ctotalnum = 0;
- let ototalnum = 0;
- $('.clist').each(function(){
- let ctotal = $(this).children('td[data-site="8"]').text();
- ctotalnum = ctotal != '' ? parseFloat(ctotalnum).add(parseFloat(ctotal)) : parseFloat(ctotalnum);
- let ototal = $(this).children('td[data-site="6"]').text();
- ototalnum = ototal != '' ? parseFloat(ototalnum).add(parseFloat(ototal)) : parseFloat(ototalnum);
- });
- $('.ctatalamount').eq(1).text(ctotalnum != 0 ? roundnum(ctotalnum,decimal) : zero);
- $('.otatalamount').eq(1).text(ototalnum != 0 ? roundnum(ototalnum,decimal) : zero);
- }
- //四舍五入或末尾加零,实现类似php的 sprintf("%.".decimal."f", val);
- function roundnum(val,decimals){
- if(val !== ''){
- val = parseFloat(val);
- if(decimals < 1){
- val = (Math.round(val)).toString();
- }else{
- let num = val.toString();
- if(num.lastIndexOf('.') == -1){
- num += '.';
- num += makezero(decimals);
- val = num;
- }else{
- let valdecimals = num.split('.')[1].length;
- if(parseInt(valdecimals) < parseInt(decimals)){
- num += makezero(parseInt(decimals)-parseInt(valdecimals));
- val = num;
- }else if(parseInt(valdecimals) > parseInt(decimals)){
- val = parseFloat(val) != 0 ? Math.round(val.mul(makemultiple(decimals))).div(makemultiple(decimals)) : makedecimalzero(decimals);
- let num = val.toString();
- if(num.lastIndexOf('.') == -1){
- num += '.';
- num += makezero(decimals);
- val = num;
- }else {
- let valdecimals = num.split('.')[1].length;
- if (parseInt(valdecimals) < parseInt(decimals)) {
- num += makezero(parseInt(decimals) - parseInt(valdecimals));
- val = num;
- }
- }
- }
- }
- }
- }
- return val;
- }
- //根据位数生成编号,3位-》001 ,5位-》00001
- function makenum(num){
- let arr = new Array(num);
- for(let i=0;i< num;i++){
- if(i != num-1){
- arr[i] = 0;
- }else{
- arr[i] = 1;
- }
- }
- return arr.join('');
- }
- //生成num位的0
- function makezero(num){
- let arr = new Array(num);
- for(let i=0;i< num;i++){
- arr[i] = 0;
- }
- return arr.join('');
- }
- //生成num小数位数的0.
- function makedecimalzero(num){
- if(num < 1){
- return '0';
- }else{
- return '0.'+makezero(num);
- }
- }
- //生成num位的10倍数
- function makemultiple(num){
- return Math.pow(10,parseInt(num));
- }
- // 找出单位对应的小数位数值
- function findDecimal(unit) {
- let value = 2;
- for (const d in changeUnits) {
- if (changeUnits[d].unit !== undefined && changeUnits[d].unit === unit) {
- value = changeUnits[d].value;
- break;
- }
- }
- return value;
- }
|