12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250 |
- <!--删除标段-->
- <div class="modal fade" id="del-bg" data-backdrop="static">
- <div class="modal-dialog" role="document">
- <div class="modal-content">
- <div class="modal-header">
- <h5 class="modal-title">确认删除变更</h5>
- </div>
- <div class="modal-body">
- <h5>删除后,数据无法恢复,请谨慎操作。</h5>
- </div>
- <form class="modal-footer" action="/tender/<%- tender.id %>/change/delete" method="post">
- <input type="hidden" name="cid" id="delete-cid" value="">
- <input type="hidden" name="_csrf_j" value="<%= ctx.csrf %>" />
- <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">取消</button>
- <button type="submit" class="btn btn-danger btn-sm">确定删除</button>
- </form>
- </div>
- </div>
- </div>
- <!--审批流程/结果-->
- <div class="modal fade" id="sp-list" data-backdrop="static">
- <div class="modal-dialog modal-lg" role="document">
- <div class="modal-content">
- <div class="modal-header">
- <h5 class="modal-title">审批流程</h5>
- </div>
- <div class="modal-body">
- <div class="row">
- <div class="col-4 modal-height-500" style="overflow: auto">
- <div class="card mt-3">
- <ul class="list-group list-group-flush" id="auditor-list">
- </ul>
- </div>
- </div>
- <div class="col-8 modal-height-500" style="overflow: auto" id="audit-list">
- </div>
- </div>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
- </div>
- </div>
- </div>
- </div>
- <% if (tender.user_id === ctx.session.sessionUser.accountId || addPermission) { %>
- <!--弹出添加变更令-->
- <div class="modal fade" id="add-bj-modal" data-backdrop="static">
- <div class="modal-dialog" role="document">
- <div class="modal-content">
- <div class="modal-header">
- <h5 class="modal-title">新建变更令</h5>
- </div>
- <div class="modal-body">
- <div class="form-group">
- <label>申请编号<b class="text-danger">*</b></label>
- <div class="input-group">
- <input type="text" class="form-control form-control-sm is-invalid" placeholder="请输入变更令号" value="变更申请编号" id="bj-code">
- <div class="input-group-append" id="autoCodeShow" <% if (codeRule.length === 0) { %>style="display: none"<% } %>>
- <button class="btn btn-sm btn-outline-secondary" type="button" title="自动编号" id="autoCode"><i class="fa fa-repeat"></i></button>
- </div>
- <div class="invalid-feedback" style="display: none" id="bjHint">您输入的编号已存在。</div>
- </div>
- </div>
- <% if (ctx.session.sessionProject.page_show.openChangePlan) { %>
- <style>
- .select2-container {
- /*display: inline-block!important;*/
- /*height: 27px;*/
- width: 100% !important;
- }
- .select2-container--bootstrap4 .select2-selection--single {
- height: calc(1.1em + .75rem + 2px) !important;
- }
- /*.select2-container--bootstrap4 .select2-selection {*/
- /* background-color: #f8f9fa;*/
- /* !*border-color: #f8f9fa;*!*/
- /* border: 1px solid #f8f9fa;*/
- /*}*/
- /*.select2-container--bootstrap4 .select2-selection--single .select2-selection__rendered:focus{*/
- /* box-shadow: 0 0 0 0.2rem rgba(216,217,219,.5);*/
- /*}*/
- /*.select2-container--bootstrap4 .select2-selection--single .select2-selection__rendered:hover {*/
- /* background-color: #e2e6ea;*/
- /* border-color: #dae0e5;*/
- /*}*/
- .select2-container--bootstrap4 .select2-selection--single .select2-selection__rendered {
- line-height: calc(1.1em + .75rem);
- /*color: #007bff!important;*/
- border-radius: 0.2rem;
- /*background-color: #f8f9fa;*/
- /*border-color: #f8f9fa;*/
- }
- .select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow b {
- border-color: #007bff transparent transparent transparent;
- border-width: 4px 3.7px 0;
- }
- .select2-search--dropdown .select2-search__field {
- padding: 0.175rem 0.5rem;
- }
- </style>
- <div class="form-group">
- <label>关联变更方案</label>
- <select class="form-control form-control-sm" id="plan-code">
- <option></option>
- <% for (const cp of changePlanList) { %>
- <% if (ctx.helper._.indexOf(apLists, cp.code) === -1) { %>
- <option><%- cp.code %></option>
- <% } %>
- <% } %>
- </select>
- </div>
- <div class="form-group form-check">
- <input type="checkbox" class="form-check-input" id="add_plan_list">
- <label class="form-check-label" for="add_plan_list">同步方案清单</label>
- </div>
- <input value="" type="hidden" id="bj-name">
- <% } else { %>
- <div class="form-group">
- <label>变更工程名称<b class="text-danger">*</b></label>
- <input class="form-control form-control-sm" value="" type="text" id="bj-name">
- <div class="invalid-feedback" style="display: none" id="name_error_msg">名称超过100个字,请缩减名称。</div>
- </div>
- <input type="hidden" value="" id="plan-code">
- <% } %>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal" id="addCancel">关闭</button>
- <a href="javascript: void(0)" class="btn btn-primary btn-sm" id="addOk">确认新建</a>
- </div>
- </div>
- </div>
- </div>
- <!--设置-->
- <div class="modal fade" id="setting" data-backdrop="static">
- <div class="modal-dialog" role="document">
- <div class="modal-content">
- <div class="modal-header">
- <h5 class="modal-title">变更令设置</h5>
- </div>
- <div class="modal-body">
- <ul class="nav nav-tabs mb-3" role="tablist">
- <li class="nav-item">
- <a class="nav-link active" data-toggle="tab" href="#bianhao" role="tab" aria-controls="home" aria-selected="true">编号规则</a>
- </li>
- </ul>
- <div class="tab-content">
- <div class="tab-pane active" id="bianhao">
- <h5>
- 当前规则:
- <span id="preview">
- <% if (codeRule && codeRule instanceof Array) { %>
- <% const preview = []; %>
- <% for (const rule of codeRule) { %>
- <% preview.push(rule.preview); %>
- <% } %>
- <%- preview.join(tender.c_connector !== null && tender.c_connector !== '3' ? ruleConst.connectorString[tender.c_connector] : ''); %>
- <% } %>
- </span>
- </h5>
- <h5 id="ruleParts">
- <% if (codeRule && codeRule instanceof Array) { %>
- <% for (const rule of codeRule) { %>
- <span class="badge badge-light" title="<%- ruleConst.ruleString[rule.rule_type] %>">
- <span>
- <%- rule.preview %>
- </span>
- <a href="javascript: void(0);" class="text-danger" title="移除"><i class="fa fa-remove"></i></a>
- </span>
- <% } %>
- <% } %>
- </h5>
- <h5 class="my-3">连接符</h5>
- <div class="form-group">
- <select class="form-control form-control-sm connector-change">
- <option disabled selected>请选择</option>
- <% for (const index in ruleConst.connectorString) { %>
- <option value="<%- index %>" <% if (tender.c_connector !== null && tender.c_connector === parseInt(index)) { %>selected<% } %>><%- ruleConst.connectorString[index] %></option>
- <% } %>
- </select>
- </div>
- <h5 class="my-3">添加新规则组件</h5>
- <div class="form-group">
- <select class="form-control form-control-sm rule-change">
- <option disabled selected>请选择组件</option>
- <% for (const index in ruleConst.ruleString) { %>
- <option value="<%- index %>"><%- ruleConst.ruleString[index] %></option>
- <% } %>
- </select>
- </div>
- <div class="form-group" id="format" style="display: none">
- <label>自动编号位数</label>
- <input min="3" class="form-control form-control-sm" step="1" max="6" value="3" type="number">
- </div>
- <div class="form-group" id="text" style="display: none">
- <label>起始编号</label>
- <input class="form-control form-control-sm" value="001" type="text">
- </div>
- <button class="btn btn-sm btn-outline-primary" id="addRule">添加组件</button>
- </div>
- </div>
- </div>
- <div class="modal-footer">
- <% if (tender.c_rule_first) { %><button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal" id="changeFirst">暂时不需要</button><% } %>
- <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal" id="hide_modal" <% if (tender.c_rule_first) { %>style="display: none"<% } %>>关闭</button>
- <button type="button" class="btn btn-primary btn-sm" id="setRule">确定添加</button>
- </div>
- </div>
- </div>
- </div>
- <!--批量上报变更令-->
- <div class="modal fade" id="batch-sb" data-backdrop="static" style="">
- <div class="modal-dialog modal-lg" style="max-width:1100px;" role="document">
- <div class="modal-content">
- <div class="modal-header">
- <h5 class="modal-title">批量上报变更令</h5>
- <button type="button" class="close" data-dismiss="modal" aria-label="Close">
- <span aria-hidden="true">×</span>
- </button>
- </div>
- <div class="modal-body">
- <div class="row">
- <!-- 左侧变更令 -->
- <div class="col-6" >
- <div class="modal-height-500" style="height:521px;overflow-y:auto;">
- <table class="table table-hover table-bordered">
- <thead>
- <tr>
- <th width="10%" class="text-center"><div class="align-middle"><input id="select-all-uncheck" type="checkbox"></div></th>
- <th width="7%">序号</th>
- <th width="40%">变更令编号</th>
- <th width="">原审批流程</th>
- </tr>
- </thead>
- <tbody id="uncheck_list">
- </tbody>
- </table>
- </div>
- </div>
- <!-- 右侧新审批流程 -->
- <div class="col-6">
- <div class="ml-auto">
- <div class="dropdown row">
- <span class="col-7"><button class="btn btn-sm btn-primary" id="synchronize_shenpi_btn">同步流程至其它已勾选变更令</button></span>
- <span class="col-5 text-right" id="show-audit-select"></span>
- </div>
- <div class="card mt-1">
- <div class="card-header">
- 审批流程
- </div>
- <div class="modal-height-500" style="overflow-y:auto;">
- <ul class="list-group list-group-flush" id="auditList">
- </ul>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="alert alert-warning mt-2 mb-0">没有设置审批流的变更令将无法上报,请先设置审批流。</div>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">取消</button>
- <button class="btn btn-sm btn-primary" id="batch_uncheck_btn">确定上报</button>
- </div>
- </div>
- </div>
- </div>
- <!--批量上报变更令进度条modal-->
- <div class="modal fade" id="batch-sb-progress" data-backdrop="static" style="">
- <div class="modal-dialog" role="document">
- <div class="modal-content">
- <div class="modal-header">
- <h5 class="modal-title">批量上报变更令</h5>
- </div>
- <div class="modal-body">
- <div class="progress">
- <div class="progress-tz-bar progress-bar progress-bar-striped progress-bar-animated" role="progressbar" style="width: 100%" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100"></div>
- </div>
- <div class="mt-1 progress-tz-text">台账获取并处理中...</div>
- <div class="change-progress modal-height-500" style="overflow-y:auto;">
- </div>
- </div>
- <div class="modal-footer" style="display: none">
- <button class="btn btn-sm btn-primary" onclick="window.location.reload();">刷新页面</button>
- </div>
- </div>
- </div>
- </div>
- <% } %>
- <!--批量审批变更令-->
- <div class="modal fade" id="batch-sp" data-backdrop="static" style="">
- <div class="modal-dialog modal-lg" role="document">
- <div class="modal-content">
- <div class="modal-header">
- <h5 class="modal-title">批量审批变更令</h5>
- <button type="button" class="close" data-dismiss="modal" aria-label="Close">
- <span aria-hidden="true">×</span>
- </button>
- </div>
- <div class="modal-body">
- <div class="modal-height-500" style="overflow-y:auto;">
- <table class="table table-hover table-bordered">
- <thead>
- <tr>
- <th width="5%"><div class="align-middle text-center"><input type="checkbox" id="select-all-checking"></div></th>
- <th width="7%">序号</th>
- <th width="25%">变更令编号</th>
- <th width="">变更令名称</th>
- <th width="25%">批复编号</th>
- </tr>
- </thead>
- <tbody id="checking_list">
- </tbody>
- </table>
- </div>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">取消</button>
- <button type="button" class="btn btn-sm btn-primary" id="batch_checking_btn">确定</button>
- </div>
- </div>
- </div>
- </div>
- <!--批量审批变更令进度条modal-->
- <div class="modal fade" id="batch-sp-progress" data-backdrop="static" style="">
- <div class="modal-dialog" role="document">
- <div class="modal-content">
- <div class="modal-header">
- <h5 class="modal-title">批量审批变更令</h5>
- </div>
- <div class="modal-body">
- <div class="progress">
- <div class="progress-tz-bar progress-bar progress-bar-striped progress-bar-animated" role="progressbar" style="width: 100%" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100"></div>
- </div>
- <div class="mt-1 progress-tz-text">台账获取并处理中...</div>
- <div class="change-progress modal-height-500" style="overflow-y:auto;">
- </div>
- </div>
- <div class="modal-footer" style="display: none">
- <button class="btn btn-sm btn-primary" onclick="window.location.reload();">刷新页面</button>
- </div>
- </div>
- </div>
- </div>
- <script>
- const ruleType = <%- ruleType %>;
- const ruleConst = JSON.parse('<%- JSON.stringify(ruleConst) %>');
- let codeRule = JSON.parse('<%- JSON.stringify(codeRule) %>');
- let connectorRule = '<%- tender.c_connector %>';
- let cRuleFirst = '<%- tender.c_rule_first %>';
- const tenderId = '<%- ctx.tender.id %>';
- const auditConst = JSON.parse(unescape('<%- escape(JSON.stringify(auditConst)) %>'));
- const auditType = JSON.parse('<%- JSON.stringify(auditType) %>');
- $('#audit-list').on('click', 'a', function() {
- const type = $(this).data('target')
- const auditCard = $(this).parent().parent()
- if (type === 'show') {
- $(this).data('target', 'hide')
- auditCard.find('.fold-card').slideDown('swing', () => {
- auditCard.find('#end-target').text($(this).data('idx') + '#')
- auditCard.find('#fold-btn').text('收起历史审核记录')
- })
- } else {
- $(this).data('target', 'show')
- auditCard.find('.fold-card').slideUp('swing', () => {
- auditCard.find('#end-target').text('1#')
- auditCard.find('#fold-btn').text('展开历史审核记录')
- })
- }
- });
- </script>
- <script src="/public/js/moment/moment.min.js"></script>
- <script src="/public/js/decimal.min.js"></script>
- <script src="/public/js/zh_calc.js"></script>
- <script src="/public/js/path_tree.js"></script>
- <script src="/public/js/gcl_gather.js"></script>
- <script>
- const shenpiConst = JSON.parse(unescape('<%- escape(JSON.stringify(shenpiConst)) %>'));
- const precision = JSON.parse('<%- JSON.stringify(precision) %>');
- $(function () {
- const intervalIds = {};
- <% if (tender.user_id === ctx.session.sessionUser.accountId) { %>
- let this_cid = null;
- let shenpi_status = shenpiConst.sp_status.sqspr;
- let accountList, accountGroup;
- let uncheckList = [];
- // 批量上报变更令部分
- $('#batch-sb').on('show.bs.modal', function () {
- postData(`/tender/${tenderId}/change/batch/fun`, { type: 'get_report_list' }, function (res) {
- let html = '';
- $('#select-all-uncheck').prop('checked', false);
- shenpi_status = res.shenpi_status;
- uncheckList = res.uncheckList;
- if (res.uncheckList.length > 0) {
- for (const [i, l] of res.uncheckList.entries()) {
- html += '<tr>' +
- `<td class="text-center"><input type="checkbox" value="${l.cid}"></td><td>${i + 1}</td>` +
- `<td class=""><a href="/tender/${tenderId}/change/${l.cid}/information" target="_blank">${l.code}</a></td>` +
- '<td>' + setAuditList(l.auditList) +'</td>' +
- '</tr>';
- }
- }
- $('#uncheck_list').html(html);
- if (res.uncheckList.length > 0) {
- $('#uncheck_list tr').eq(0).addClass('table-warning');
- this_cid = res.uncheckList[0].cid;
- makeSpList(res.uncheckList[0].auditList);
- } else {
- $('#uncheck_list tr').removeClass('table-warning');
- this_cid = null;
- makeSpList([]);
- }
- let showAuditSelectHtml = '';
- if (res.spGroupList && res.spGroupList.length > 0 && shenpi_status === shenpiConst.sp_status.gdspl) {
- let optionHtml = '';
- for (const g of res.spGroupList) { %>
- optionHtml += `<option value="${g.id}" ${res.uncheckList.length > 0 && g.id === res.uncheckList[0].sp_group ? 'selected' : ''}>${g.name}</option>`;
- }
- showAuditSelectHtml += '<select class="form-control form-control-sm change-sp-group">' + optionHtml + '</select>';
- $('#synchronize_shenpi_btn').css('margin-top', '5px');
- } else {
- accountList = res.accountList;
- accountGroup = res.accountGroup;
- showAuditSelectHtml += getSelectAuditHtml('report');
- }
- $('#show-audit-select').html(showAuditSelectHtml);
- })
- });
- function setAuditList(auditList) {
- let html = [];
- // 去除原报
- if (auditList.length > 1) {
- for (const [i,a] of auditList.entries()) {
- if (i === 0) continue;
- const oneAuditNames = _.map(a, 'name');
- let names = oneAuditNames.join('、');
- if (oneAuditNames.length > 1) {
- names = (a[0].audit_type === auditType.key.and ? '(会)' : (a[0].audit_type === auditType.key.or ? '(或)' : '')) + names;
- }
- html.push(names);
- }
- }
- return html.join('-');
- }
- function getSelectAuditHtml(code) {
- let divhtml = '';
- accountGroup.forEach((group, idx) => {
- let didivhtml = '';
- if(group) {
- group.groupList.forEach(item => {
- didivhtml += '<dd class="border-bottom p-2 mb-0 " data-id="' + item.id + '" >\n' +
- '<p class="mb-0 d-flex"><span class="text-primary">' + item.name + '</span><span\n' +
- ' class="ml-auto">' + item.mobile + '</span></p>\n' +
- ' <span class="text-muted">' + item.role + '</span>\n' +
- ' </dd>\n';
- });
- divhtml += '<dt><a href="javascript: void(0);" class="acc-btn" data-groupid="' + idx + '" data-type="hide"><i class="fa fa-plus-square"></i></a> ' + group.groupName + '</dt>\n' +
- ' <div class="dd-content" data-toggleid="' + idx + '">\n' + didivhtml +
- ' </div>\n';
- }
- });
- const html =
- ' <button class="btn btn-outline-primary btn-sm dropdown-toggle" type="button" id="' + code + '_dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">\n' +
- ' 添加审批流程\n' +
- ' </button>\n' +
- ' <div class="dropdown-menu dropdown-menu-right" id="' + code + '_dropdownMenu" aria-labelledby="' + code + '_dropdownMenuButton" style="width:220px">\n' +
- ' <div class="mb-2 p-2"><input class="form-control form-control-sm gr-search"\n' +
- ' placeholder="姓名/手机 检索" autocomplete="off" data-code="' + code + '"></div>\n' +
- ' <dl class="list-unstyled book-list">\n' + divhtml +
- ' </dl>\n' +
- ' </div>\n';
- return html;
- }
- // uncheckList tr 切换
- $('#uncheck_list').on('click', 'tr', function () {
- $('#uncheck_list tr').removeClass('table-warning');
- $(this).addClass('table-warning');
- this_cid = $(this).find('a').attr('href').split('/')[4];
- makeSpList(uncheckList.find(l => l.cid === this_cid).auditList);
- });
- $('#uncheck_list').on('click', 'input[type="checkbox"]', function (e) {
- e.stopPropagation();
- });
- // uncheckList tr全选
- $('#select-all-uncheck').click(function () {
- $('#uncheck_list tr').find('input[type="checkbox"]').prop('checked', $(this).prop('checked'));
- });
- $('#synchronize_shenpi_btn').click(function () {
- const this_cid = $('#uncheck_list tr[class="table-warning"]').find('a').attr('href').split('/')[4];
- const info = uncheckList.find(l => l.cid === this_cid);
- if (!this_cid || !info) {
- toastr.error('请先选择一个变更令');
- return false;
- }
- if ($('#uncheck_list input:checked').length === 0) {
- toastr.error('请至少勾选一个变更令');
- return false;
- }
- const cids = [];
- $('#uncheck_list input:checked').each(function () {
- cids.push($(this).val());
- });
- if (cids.length === 1 && cids[0] === this_cid) {
- toastr.error('请至少勾选一个其它变更令');
- return false;
- }
- if (cids.indexOf(this_cid) !== -1) cids.splice(cids.indexOf(this_cid), 1);
- console.log(cids, info);
- postData(`/tender/${tenderId}/change/batch/fun`, { type: 'set_shenpi_list', cids, from_cid: this_cid }, function (res) {
- toastr.success('同步流程成功');
- uncheckList = res.uncheckList;
- for (const index in res.uncheckList) {
- $('#uncheck_list tr').eq(index).children('td').eq(3).html(setAuditList(res.uncheckList[index].auditList));
- }
- });
- });
- let timer = null;
- let oldSearchVal = null;
- $('body').on('input propertychange', 'div[id$="_dropdownMenu"] .gr-search', function(e) {
- oldSearchVal = e.target.value;
- timer && clearTimeout(timer);
- timer = setTimeout(() => {
- const newVal = $(this).val();
- const code = $(this).attr('data-code');
- let html = '';
- if (newVal && newVal === oldSearchVal) {
- accountList.filter(item => item && (item.name.indexOf(newVal) !== -1 || (item.mobile && item.mobile.indexOf(newVal) !== -1))).forEach(item => {
- html += `<dd class="border-bottom p-2 mb-0 " data-id="${item.id}" >
- <p class="mb-0 d-flex"><span class="text-primary">${item.name}</span><span
- class="ml-auto">${item.mobile || ''}</span></p>
- <span class="text-muted">${item.role || ''}</span>
- </dd>`;
- });
- $('#' + code + '_dropdownMenu .book-list').empty();
- $('#' + code + '_dropdownMenu .book-list').append(html);
- } else {
- if (!$('#' + code + '_dropdownMenu .acc-btn').length) {
- accountGroup.forEach((group, idx) => {
- if (!group) return;
- html += `<dt><a href="javascript: void(0);" class="acc-btn" data-groupid="${idx}" data-type="hide"><i class="fa fa-plus-square"></i>
- </a> ${group.groupName}</dt>
- <div class="dd-content" data-toggleid="${idx}">`;
- group.groupList.forEach(item => {
- // if (item.id !== changesUid) {
- html += `<dd class="border-bottom p-2 mb-0 " data-id="${item.id}" >
- <p class="mb-0 d-flex"><span class="text-primary">${item.name}</span><span
- class="ml-auto">${item.mobile || ''}</span></p>
- <span class="text-muted">${item.role || ''}</span>
- </dd>`;
- // }
- });
- html += '</div>';
- });
- $('#' + code + '_dropdownMenu .book-list').empty();
- $('#' + code + '_dropdownMenu .book-list').append(html);
- }
- }
- }, 400);
- });
- // 添加审批流程按钮逻辑
- $('body').on('click', 'div[id$="_dropdownMenu"] .book-list dt', function () {
- const idx = $(this).find('.acc-btn').attr('data-groupid');
- const type = $(this).find('.acc-btn').attr('data-type');
- if (type === 'hide') {
- $(this).parent().find(`div[data-toggleid="${idx}"]`).show(() => {
- $(this).children().find('i').removeClass('fa-plus-square').addClass('fa-minus-square-o');
- $(this).find('.acc-btn').attr('data-type', 'show');
- })
- } else {
- $(this).parent().find(`div[data-toggleid="${idx}"]`).hide(() => {
- $(this).children().find('i').removeClass('fa-minus-square-o').addClass('fa-plus-square');
- $(this).find('.acc-btn').attr('data-type', 'hide');
- })
- }
- return false;
- });
- // 添加到审批流程中
- $('body').on('click', 'div[id$="_dropdownMenu"] dl dd', function () {
- const id = parseInt($(this).data('id'));
- if (!this_cid) {
- toastr.error('请选择变更令');
- return false;
- }
- if (id !== 0) {
- postData('/tender/' + tenderId + '/change/' + this_cid + '/information/audit/add', { auditorId: id }, (datas) => {
- makeSpList(datas);
- const index = uncheckList.findIndex(item => item.cid === this_cid);
- if (index !== -1) {
- uncheckList[index].auditList = datas;
- $('#uncheck_list tr').eq(index).children('td').eq(3).html(setAuditList(datas));
- }
- });
- }
- });
- // 移除审批流程的审批人
- $('body').on('click', '#auditList li a', function () {
- const uid = $(this).parents('li').attr('data-auditid');
- const li = $(this).parents('li');
- const data = {
- auditorId: uid,
- };
- if (!this_cid) {
- toastr.error('请选择变更令');
- return false;
- }
- postData('/tender/' + tenderId + '/change/' + this_cid + '/information/audit/delete', data, (datas) => {
- li.remove();
- let liIndex = 1;
- $('#auditList li').each(function () {
- $(this).children('.col-auto').eq(0).text(liIndex);
- liIndex++;
- });
- const index = uncheckList.findIndex(item => item.cid === this_cid);
- if (index !== -1) {
- uncheckList[index].auditList = datas;
- $('#uncheck_list tr').eq(index).children('td').eq(3).html(setAuditList(datas));
- }
- });
- });
- // 切换审批组
- $('body').on('change', '.change-sp-group', function () {
- const data = {
- type: 'change_sp_group',
- sp_group: parseInt($(this).val()),
- }
- if (!this_cid) {
- toastr.error('请选择变更令');
- return false;
- }
- if (!data.sp_group) {
- toastr.error('请选择固定审批组');
- return false;
- }
- console.log(data);
- postData('/tender/' + tenderId + '/change/' + this_cid + '/information/audit/spgroup', data, (datas) => {
- makeSpList(datas);
- const index = uncheckList.findIndex(item => item.cid === this_cid);
- if (index !== -1) {
- uncheckList[index].auditList = datas;
- $('#uncheck_list tr').eq(index).children('td').eq(3).html(setAuditList(datas));
- }
- });
- });
- function makeSpList(datas) {
- const html = [];
- // 如果是重新上报,添加到重新上报列表中
- const auditorshtml = [];
- if (datas.length > 0) {
- for (const [index,data] of datas.entries()) {
- if (index !== 0) {
- html.push('<li class="list-group-item d-flex" data-auditid="'+ data[0].uid +'">');
- html.push(`<div class="col-auto">${index}</div>`);
- html.push('<div class="col">');
- for (const auditor of data) {
- html.push(`<div class="d-inline-block mx-1" auditorId="${auditor.uid}"><i class="fa fa-user text-muted"></i> ${auditor.name} <small class="text-muted">${auditor.role}</small></div>`);
- }
- html.push('</div>');
- html.push('<div class="col-auto">');
- // todo 添加会签或签时
- if (data[0].audit_type !== auditType.key.common) {
- html.push(`<span class="badge badge-pill badge-${auditType.info[data[0].audit_type].class} badge-bg-small"><small>${auditType.info[data[0].audit_type].long}</small></span>`);
- }
- if (shenpi_status === shenpiConst.sp_status.sqspr || (shenpi_status === shenpiConst.sp_status.gdzs && index+1 !== datas.length)) {
- html.push('<a href="javascript: void(0)" class="text-danger pull-right">移除</a>');
- }
- html.push('</div>');
- html.push('</li>');
- }
- }
- }
- $('#auditList').html(html.join(''));
- }
- $('#batch_uncheck_btn').click(function () {
- // 至少勾选一个
- if ($('#uncheck_list input:checked').length === 0) {
- toastr.error('请至少勾选一个变更令');
- return false;
- }
- const cids = [];
- $('#uncheck_list input:checked').each(function () {
- cids.push($(this).val());
- });
- $('#batch-sb').modal('hide');
- $('#batch-sb-progress').modal('show');
- $('#batch-sb-progress .progress-tz-bar').css('width', '0%');
- $('#batch-sb-progress .modal-footer').hide();
- setProgress($('#batch-sb-progress .progress-tz-bar'), 30, 'tz1');
- $('#batch-sb-progress .progress-tz-text').text('台账数据获取中...').removeClass('text-success');
- let changeListData;
- let gclGatherData;
- postData('/tender/' + tenderId + '/change/defaultBills', { form: 'batch' }, async function (result) {
- gclGatherModel.loadLedgerData(result.bills);
- gclGatherModel.loadPosData(result.pos);
- gclGatherData = gclGatherModel.gatherGclData();
- gclGatherData = _.filter(gclGatherData, function (item) {
- return item.leafXmjs && item.leafXmjs.length !== 0;
- });
- for (const ggd in gclGatherData) {
- if (gclGatherData[ggd].leafXmjs && gclGatherData[ggd].leafXmjs.length === 0) {
- gclGatherData.splice(ggd, 1);
- }
- gclGatherData[ggd].code = gclGatherData[ggd].b_code;
- let hadcid = 0;
- for (const xmj of gclGatherData[ggd].leafXmjs) {
- const changeLedger = _.find(result.changeLedgerList, { id: xmj.gcl_id });
- const changePos = _.find(result.changePosList, { id: xmj.mx_id, lid: xmj.gcl_id });
- if (changeLedger || changePos) {
- xmj.cid = 1;
- xmj.ccid = changeLedger ? changeLedger.ccid : changePos.ccid;
- hadcid = 1;
- }
- }
- if (hadcid !== 0) gclGatherData[ggd].cid = 1;
- }
- // console.log(gclGatherData);
- // 数组去重
- const dealBillList = result.dealBills;
- for (const db of gclGatherData) {
- const exist_index = dealBillList.findIndex(function (item) {
- return item.code === db.code && item.name === db.name && item.unit === db.unit && item.unit_price === db.unit_price;
- });
- if (exist_index !== -1) {
- dealBillList.splice(exist_index, 1);
- }
- }
- changeListData = gclGatherData.concat(dealBillList).sort(sortByCode);
- console.log(changeListData);
- stopProgress($('#batch-sb-progress .progress-tz-bar'), 'tz1');
- $('#batch-sb-progress .progress-tz-text').text('台账数据加载完成').addClass('text-success');
- $('#batch-sb-progress .change-progress').html('');
- for (const c of cids) {
- const cInfo = uncheckList.find(item => item.cid === c);
- if (cInfo) {
- $('#batch-sb-progress .change-progress').append(`<div class="mt-3" id="change-${cInfo.cid}-progress"><div>变更令 <a href="/tender/${cInfo.tid}/change/${cInfo.cid}/information" target="_blank"><b>${cInfo.code}</b></a> :</div><div class="progress">` +
- '<div class="progress-bar progress-bar-striped progress-bar-animated" role="progressbar" style="width: 0%" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"></div>' +
- '</div>' +
- `<div class="mt-1"><span class="progress-change-text">上报处理中...</span></div></div>`);
- await checkAndChange(cInfo, changeListData, result.changeLedgerList);
- }
- }
- $('#batch-sb-progress .modal-footer').show();
- });
- });
- <% } %>
- let checkingList = [];
- $('#batch-sp').on('show.bs.modal', function () {
- postData(`/tender/${tenderId}/change/batch/fun`, { type: 'get_shenpi_list' }, function (res) {
- let html = '';
- $('#select-all-checking').prop('checked', false);
- checkingList = res.checkingList;
- if (checkingList.length > 0) {
- for (const [i, l] of res.checkingList.entries()) {
- const finalHtml = l.is_finalAudit ? `<input type="text" class="form-control form-control-sm final_pcode_input" data-cid="${l.cid}" value="${l.p_code}" />` : '';
- html += '<tr>' +
- `<td class="text-center"><input type="checkbox" value="${l.cid}"></td>` +
- `<td>${i+1}</td>` +
- `<td class=""><a href="/tender/${tenderId}/change/${l.cid}/information" target="_blank">${l.code}</a></td>` +
- `<td>${l.name}</td>` +
- `<td>${finalHtml}</td>` +
- '</tr>';
- }
- }
- $('#checking_list').html(html);
- });
- });
- $('body').on('change', '.final_pcode_input', function () {
- const cid = $(this).data('cid');
- const cInfo = checkingList.find(item => item.cid === cid);
- cInfo.p_code = $(this).val();
- });
- $('#checking_list').on('click', 'input[type="checkbox"]', function (e) {
- e.stopPropagation();
- });
- // uncheckList tr全选
- $('#select-all-checking').click(function () {
- $('#checking_list tr').find('input[type="checkbox"]').prop('checked', $(this).prop('checked'));
- });
- $('#batch_checking_btn').click(function () {
- // 至少勾选一个
- if ($('#checking_list input:checked').length === 0) {
- toastr.error('请至少勾选一个变更令');
- return false;
- }
- const cids = [];
- $('#checking_list input:checked').each(function () {
- cids.push($(this).val());
- });
- $('#batch-sp').modal('hide');
- $('#batch-sp-progress').modal('show');
- $('#batch-sp-progress .progress-tz-bar').css('width', '0%');
- $('#batch-sp-progress .modal-footer').hide();
- setProgress($('#batch-sp-progress .progress-tz-bar'), 30, 'tz2');
- $('#batch-sp-progress .progress-tz-text').text('台账数据获取中...').removeClass('text-success');
- let changeListData;
- let gclGatherData;
- postData('/tender/' + tenderId + '/change/defaultBills', { from: 'batch' }, async function (result) {
- gclGatherModel.loadLedgerData(result.bills);
- gclGatherModel.loadPosData(result.pos);
- gclGatherData = gclGatherModel.gatherGclData();
- gclGatherData = _.filter(gclGatherData, function (item) {
- return item.leafXmjs && item.leafXmjs.length !== 0;
- });
- for (const ggd in gclGatherData) {
- if (gclGatherData[ggd].leafXmjs && gclGatherData[ggd].leafXmjs.length === 0) {
- gclGatherData.splice(ggd, 1);
- }
- gclGatherData[ggd].code = gclGatherData[ggd].b_code;
- let hadcid = 0;
- for (const xmj of gclGatherData[ggd].leafXmjs) {
- const changeLedger = _.find(result.changeLedgerList, { id: xmj.gcl_id });
- const changePos = _.find(result.changePosList, { id: xmj.mx_id, lid: xmj.gcl_id });
- if (changeLedger || changePos) {
- xmj.cid = 1;
- xmj.ccid = changeLedger ? changeLedger.ccid : changePos.ccid;
- hadcid = 1;
- }
- }
- if (hadcid !== 0) gclGatherData[ggd].cid = 1;
- }
- // console.log(gclGatherData);
- // 数组去重
- const dealBillList = result.dealBills;
- for (const db of gclGatherData) {
- const exist_index = dealBillList.findIndex(function (item) {
- return item.code === db.code && item.name === db.name && item.unit === db.unit && item.unit_price === db.unit_price;
- });
- if (exist_index !== -1) {
- dealBillList.splice(exist_index, 1);
- }
- }
- changeListData = gclGatherData.concat(dealBillList).sort(sortByCode);
- console.log(changeListData);
- stopProgress($('#batch-sp-progress .progress-tz-bar'), 'tz2');
- $('#batch-sp-progress .progress-tz-text').text('台账数据加载完成').addClass('text-success');
- $('#batch-sp-progress .change-progress').html('');
- for (const c of cids) {
- const cInfo = checkingList.find(item => item.cid === c);
- if (cInfo) {
- $('#batch-sp-progress .change-progress').append(`<div class="mt-3" id="change-${cInfo.cid}-progress"><div>变更令 <a href="/tender/${cInfo.tid}/change/${cInfo.cid}/information" target="_blank"><b>${cInfo.code}</b></a> :</div><div class="progress">` +
- '<div class="progress-bar progress-bar-striped progress-bar-animated" role="progressbar" style="width: 0%" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"></div>' +
- '</div>' +
- `<div class="mt-1"><span class="progress-change-text">审批处理中...</span></div></div>`);
- await checkAndChange(cInfo, changeListData, result.changeLedgerList, 'checking');
- }
- }
- $('#batch-sp-progress .modal-footer').show();
- }, function (res) {
- }, false);
- });
- let value = 0;
- // let interval;
- let stop = false;
- function setProgress(_this, time = 50, name) {
- let intervalId = setInterval(function () {
- if (value < 100) {
- value = parseInt(value) + 1;
- _this.css("width", value + "%").text(value + "%");
- } else if (value === 100) {
- value = parseInt(value) + 1;
- value = 30;
- }
- }, time);
- intervalIds[name] = intervalId;
- }
- function resetProgress(_this) {
- _this.removeClass('bg-success');
- _this.css("width", "0%").text("0%").attr('aria-valuenow', '0');
- }
- function failProgress(_this, name) {
- if (intervalIds[name]) {
- _this.addClass('bg-danger');
- _this.css("width", "100%").text("失败");
- value = 0;
- stop = true;
- clearInterval(intervalIds[name]);
- intervalIds[name] = 0;
- }
- }
- function stopProgress(_this, name) {
- if (intervalIds[name]) {
- _this.addClass('bg-success');
- _this.css("width", "100%").text("100%");
- value = 0;
- stop = true;
- clearInterval(intervalIds[name]);
- intervalIds[name] = 0;
- }
- }
- async function checkAndChange(cInfo, changeListData, changeLedgerList, status = 'uncheck') {
- setProgress($(`#change-${cInfo.cid}-progress .progress-bar`), 30, `change-${cInfo.cid}`);
- // 根据已添加的清单显示
- if (cInfo.changeList.length > 0 && cInfo.changeList[0]) {
- const removeList = [];
- const updateList = [];
- const updateGclIdList = [];
- for (const [index,clinfo] of cInfo.changeList.entries()) {
- if (clinfo.lid != 0) {
- let listinfo = changeListData.find(function (item) {
- return (item.id !== undefined && item.id == clinfo.lid) || (item.id === undefined && item.leafXmjs !== undefined && item.leafXmjs.length !== 0 && item.leafXmjs[0].gcl_id == clinfo.lid);
- });
- if (listinfo === undefined || (clinfo.lid && clinfo.gcl_id && clinfo.lid !== clinfo.gcl_id)) {
- // 有可能这部分台账发生变化,此时要更新清单lid信息,防止数据丢失
- const newlistinfo = changeListData.find(function (item) {
- return (item.id !== undefined && item.id == clinfo.gcl_id) || (item.id === undefined && item.leafXmjs !== undefined && item.leafXmjs.length !== 0 && _.find(item.leafXmjs, {gcl_id: clinfo.gcl_id }));
- });
- if ((listinfo === undefined && newlistinfo) || (listinfo && newlistinfo && !isObjEqual(listinfo, newlistinfo))) {
- listinfo = newlistinfo;
- updateList.push({id: clinfo.id, lid: newlistinfo.leafXmjs[0].gcl_id});
- // 更新lid
- cInfo.changeList[index].lid = newlistinfo.leafXmjs[0].gcl_id;
- }
- }
- if (listinfo === undefined) {
- // 针对旧数据获取清单信息
- listinfo = changeListData[clinfo.lid - 1];
- if (listinfo === undefined) {
- removeList.push(clinfo);
- break;
- }
- }
- const [info, needUpdate] = makePushBwmx(clinfo, listinfo, removeList, updateList);
- if (needUpdate) break;
- if (_.findIndex(changeLedgerList, { id: clinfo.gcl_id }) !== -1) {
- // 可能因为升降级关系:细目,分部分项等会发生变化,更新清单
- const updateInfo = {};
- if (info.code !== clinfo.xmj_code) {
- updateInfo.xmj_code = info.code;
- // changeList[index].xmj_code = info.code;
- }
- if (info.jldy !== clinfo.xmj_jldy) {
- updateInfo.xmj_jldy = info.jldy;
- // changeList[index].xmj_jldy = info.jldy;
- }
- if (info.dwgc !== clinfo.xmj_dwgc) {
- updateInfo.xmj_dwgc = info.dwgc;
- // changeList[index].xmj_dwgc = info.dwgc;
- }
- if (info.fbgc !== clinfo.xmj_fbgc) {
- updateInfo.xmj_fbgc = info.fbgc;
- // changeList[index].xmj_fbgc = info.fbgc;
- }
- if (info.fxgc !== clinfo.xmj_fxgc) {
- updateInfo.xmj_fxgc = info.fxgc;
- // changeList[index].xmj_fxgc = info.fxgc;
- }
- if (!_.isEmpty(updateInfo) && _.indexOf(updateGclIdList, clinfo.gcl_id) === -1) {
- updateGclIdList.push(clinfo.gcl_id);
- // updateInfo.gcl_id = info.id;
- updateList.push({ row: updateInfo, where: { tid: tenderId, gcl_id: clinfo.gcl_id } });
- break;
- }
- }
- }
- }
- await sleep(2000);
- if (updateList.length > 0 || removeList.length > 0) {
- console.log(updateList, removeList);
- failProgress($('#change-' + cInfo.cid + '-progress .progress-bar'), `change-${cInfo.cid}`);
- $('#change-' + cInfo.cid + '-progress .mt-1').addClass('text-danger');
- $('#change-' + cInfo.cid + '-progress .progress-change-text').text('清单数据发生变化,需要进入到详情页处理');
- return;
- }
- // 上报或审批变更令
- let ss = true;
- if (status === 'uncheck') {
- postDataWithAsync('/tender/' + tenderId + '/change/' + cInfo.cid + '/information/audit/start', {}, function () {
- }, function (res) {
- ss = false;
- failProgress($('#change-' + cInfo.cid + '-progress .progress-bar'), `change-${cInfo.cid}`);
- $('#change-' + cInfo.cid + '-progress .mt-1').addClass('text-danger');
- $('#change-' + cInfo.cid + '-progress .progress-change-text').text(res);
- return;
- }, false);
- } else {
- const pData = {
- change_id: cInfo.cid,
- w_code: cInfo.code,
- status: auditConst.status.checked,
- sdesc: '同意',
- }
- if (cInfo.is_finalAudit) {
- if (cInfo.p_code) {
- pData.p_code = cInfo.p_code;
- const postData2 = {
- p_code: cInfo.p_code,
- };
- let returnflag = true;
- postDataWithAsync('/tender/' + tenderId + '/change/' + cInfo.cid + '/check/codeRepeat',postData2, function (result) {
- }, function (data) {
- returnflag = false;
- });
- if (!returnflag) {
- failProgress($('#change-' + cInfo.cid + '-progress .progress-bar'), `change-${cInfo.cid}`);
- $('#change-' + cInfo.cid + '-progress .mt-1').addClass('text-danger');
- $('#change-' + cInfo.cid + '-progress .progress-change-text').text('批复编号不能与其它变更令重复!');
- return;
- }
- } else {
- failProgress($('#change-' + cInfo.cid + '-progress .progress-bar'), `change-${cInfo.cid}`);
- $('#change-' + cInfo.cid + '-progress .mt-1').addClass('text-danger');
- $('#change-' + cInfo.cid + '-progress .progress-change-text').text('变更令号(批复编号)不能为空!');
- return;
- }
- }
- postDataWithAsync('/tender/' + tenderId + '/change/approval', pData, function (result) {
- }, function (res) {
- ss = false;
- failProgress($('#change-' + cInfo.cid + '-progress .progress-bar'), `change-${cInfo.cid}`);
- $('#change-' + cInfo.cid + '-progress .mt-1').addClass('text-danger');
- $('#change-' + cInfo.cid + '-progress .progress-change-text').text(res);
- return;
- }, false);
- }
- if (ss) {
- stopProgress($('#change-' + cInfo.cid + '-progress .progress-bar'), `change-${cInfo.cid}`);
- $('#change-' + cInfo.cid + '-progress .mt-1').addClass('text-success');
- $('#change-' + cInfo.cid + '-progress .progress-change-text').text((status === 'uncheck' ? '上报' : '审批') + '成功');
- }
- }
- }
- const postDataWithAsync = function (url, data, successCallback, errorCallBack, showWaiting = true) {
- if (showWaiting) showWaitingView();
- $.ajax({
- type:"POST",
- url: url,
- data: {'data': JSON.stringify(data)},
- dataType: 'json',
- cache: false,
- async: false,
- timeout: 60000,
- beforeSend: function(xhr) {
- let csrfToken = Cookies.get('csrfToken_j');
- xhr.setRequestHeader('x-csrf-token', csrfToken);
- },
- success: function(result){
- if (result.err === 0) {
- if (successCallback) {
- successCallback(result.data);
- }
- } else {
- toastr.error(result.msg);
- if (errorCallBack) {
- errorCallBack(result.msg);
- }
- }
- if (showWaiting) closeWaitingView();
- },
- error: function(jqXHR, textStatus, errorThrown){
- toastr.error('error: ' + textStatus + " " + errorThrown);
- if (errorCallBack) {
- errorCallBack();
- }
- if (showWaiting) closeWaitingView();
- }
- });
- };
- function sleep(millisecond) {
- return new Promise(resolve => {
- setTimeout(() => {
- resolve()
- }, millisecond)
- })
- }
- function isObjEqual(o1,o2){
- var props1 = Object.getOwnPropertyNames(o1);
- var props2 = Object.getOwnPropertyNames(o2);
- if (props1.length != props2.length) {
- return false;
- }
- for (var i = 0,max = props1.length; i < max; i++) {
- var propName = props1[i];
- if (o1[propName] !== o2[propName]) {
- return false;
- }
- }
- return true;
- }
- function makePushBwmx(clinfo, listinfo, removeList, updateList) {
- let info = '';
- let needUpdate = false;
- const checkKey = ['name', 'code', 'unit', 'unit_price'];
- const checkLeafKey = ['oamount', 'bwmx', 'code', 'dwgc', 'fbgc', 'fxgc', 'jldy'];
- if (listinfo.leafXmjs !== undefined) {
- const leafInfo = listinfo.leafXmjs.find(function (item) {
- // const flag = (item.bwmx === undefined || item.bwmx === clinfo.bwmx || item.jldy === clinfo.bwmx) && item.gcl_id === clinfo.gcl_id && (!clinfo.mx_id || (item.mx_id && clinfo.mx_id && item.mx_id === clinfo.mx_id)) && (item.quantity !== null ? item.quantity === parseFloat(clinfo.oamount) : 0 === parseFloat(clinfo.oamount));
- const flag = item.gcl_id === clinfo.gcl_id && (!clinfo.mx_id || (item.mx_id && clinfo.mx_id && item.mx_id === clinfo.mx_id));
- if (flag && item.code === clinfo.xmj_code) {
- return flag && item.code === clinfo.xmj_code;
- }
- return flag;
- });
- if (leafInfo) {
- const oneUpdate = { id: clinfo.id };
- // 判断要不要更新名称,单位,原数量,单价
- checkKey.forEach(function (key) {
- if ((key === 'name' || key === 'unit') && listinfo[key] === null) {
- listinfo[key] = '';
- }
- if (listinfo[key] !== clinfo[key]) {
- oneUpdate[key] = listinfo[key];
- // clinfo[key] = listinfo[key];
- if (key === 'unit') {
- const changeKey = ['oamount', 'oamount2', 'camount'];
- changeKey.forEach(function (key) {
- const value = ZhCalc.round(clinfo[key], findDecimal(listinfo[key]));
- if (value !== clinfo[key]) {
- oneUpdate[key] = value;
- // clinfo[key] = value;
- }
- });
- }
- needUpdate = true;
- }
- });
- checkLeafKey.forEach(function (key) {
- // 只有数量是对比leafInfo,其它对比listinfo,且有些值需要重新计算
- if (key === 'oamount') {
- if (leafInfo.quantity !== clinfo[key]) {
- oneUpdate[key] = leafInfo.quantity;
- // clinfo[key] = leafInfo.quantity;
- needUpdate = true;
- }
- } else if (key === 'bwmx') {
- if (leafInfo[key] !== undefined && leafInfo[key] !== clinfo[key]) {
- oneUpdate[key] = leafInfo[key];
- // clinfo[key] = leafInfo[key];
- needUpdate = true;
- } else if (leafInfo[key] === undefined && leafInfo.jldy !== clinfo[key]) {
- oneUpdate[key] = leafInfo.jldy;
- // clinfo[key] = leafInfo.jldy;
- needUpdate = true;
- }
- } else {
- if (leafInfo[key] !== clinfo['xmj_' + key]) {
- oneUpdate['xmj_' + key] = leafInfo[key];
- // clinfo['xmj_' + key] = leafInfo[key];
- needUpdate = true;
- }
- }
- });
- if (needUpdate) {
- updateList.push(oneUpdate);
- }
- info = leafInfo;
- } else {
- removeList.push(clinfo);
- needUpdate = true;
- }
- }
- return [info, needUpdate];
- }
- function findDecimal(unit) {
- let value = precision.other.value;
- const changeUnits = precision;
- for (const d in changeUnits) {
- if (changeUnits[d].unit !== undefined && changeUnits[d].unit === unit) {
- value = changeUnits[d].value;
- break;
- }
- }
- return value;
- }
- // 编号排序,多重判断
- function sortByCode(a, b) {
- let code1 = a.code.split('-');
- let code2 = b.code.split('-');
- let code1length = code1.length;
- let code2length = code2.length;
- for (let i = 0; i < code1length; i ++) {
- if (i+1 <= code2length) {
- if (code1[i] != code2[i]) {
- if (/^\d+$/.test(code1[i]) && /^\d+$/.test(code2[i])) {
- return parseInt(code1[i]) - parseInt(code2[i]);
- } else if (!/^\d+$/.test(code1[i]) && /^\d+$/.test(code2[i])) {
- return 1;
- } else if (/^\d+$/.test(code1[i]) && !/^\d+$/.test(code2[i])) {
- return -1;
- } else {
- const str1length = code1[i].length;
- const str2length = code2[i].length;
- for (let j = 0; j < str1length; j++) {
- if (j+1 <= str2length) {
- if (code1[i].charAt(j) != code2[i].charAt(j)) {
- return code1[i].charAt(j).charCodeAt() - code2[i].charAt(j).charCodeAt();
- } else if (j+1 == str1length && code1[i].charAt(j) == code2[i].charAt(j)) {
- if (str1length == str2length) {
- return 0;
- } else {
- return str1length - str2length;
- }
- }
- } else {
- if (j+1 >= str1length) {
- return 1;
- } else {
- return -1;
- }
- }
- }
- }
- } else if (i+1 == code1length && code1[i] == code2[i]) {
- if (code1length == code2length) {
- return 0;
- } else {
- return code1length - code2length;
- }
- }
- } else {
- if (i+1 >= code1length) {
- return 1;
- } else {
- return -1;
- }
- }
- }
- }
- });
- </script>
|