Forráskód Böngészése

变更令添加台账清单no.2 up

ellisran 1 éve
szülő
commit
41fe58c18a

+ 166 - 284
app/public/js/change_information_add_list.js

@@ -116,6 +116,7 @@ $(document).ready(() => {
             const xmjs = [];
             if (data && data.id) {
                 xmjs.push({
+                    deal_id: data.id,
                     cid: '',
                     is_change: _.findIndex(changeList, { lid: data.id }) !== -1 ? 1 : 0,
                     code: '',
@@ -129,6 +130,8 @@ $(document).ready(() => {
             } else if (data && data.leafXmjs) {
                 for (const leaf of data.leafXmjs) {
                     xmjs.push({
+                        gcl_id: leaf.gcl_id,
+                        mx_id: leaf.mx_id || '',
                         is_change: _.findIndex(changeList, { gcl_id: leaf.gcl_id, mx_id: leaf.mx_id || '' }) !== -1 ? 1 : 0,
                         cid: leaf.cid || '',
                         code: leaf.code,
@@ -147,6 +150,7 @@ $(document).ready(() => {
         selectionChanged: function (e, info) {
             const data = SpreadJsObj.getSelectObject(info.sheet);
             gclSpreadObj.resetXmjSpread(data);
+            xmjSearch.searchAndLocate($('#xmj-keyword').val());
         }
     };
 
@@ -188,7 +192,151 @@ $(document).ready(() => {
         readOnly: {
             isChangeList: function (data) {
                 if (!data) return true;
-                return !readOnly;
+                return readOnly;
+            }
+        }
+    };
+
+    const xmjSpreadObj = {
+        buttonClicked: function (e, info) {
+            if (info.sheet.zh_setting) {
+                const select = SpreadJsObj.getSelectObject(info.sheet);
+                const col = info.sheet.zh_setting.cols[info.col];
+                if (col.field === 'is_change') {
+                    if (xmjCol.readOnly.isChangeList(select)) {
+                        info.sheet.setValue(info.row, info.col, !select || !select.is_change ? 0 : 1);
+                        return
+                    }
+                    if (info.sheet.isEditing()) {
+                        info.sheet.endEdit(true);
+                    }
+                    const is_change = info.sheet.getValue(info.row, info.col) ? 1 : 0;
+                    let gclIndex = -1;
+                    let gclInfo = null;
+                    if (select.deal_id) {
+                        gclInfo = _.find(changeListData, function (item) {
+                            return item.id && item.id === select.deal_id; });
+                        gclIndex =_.findIndex(changeListData, function (item) {
+                            return item.id && item.id === select.deal_id; });
+                    } else {
+                        gclInfo = _.find(changeListData, function (item) {
+                            return item.leafXmjs && _.find(item.leafXmjs, function (item2) {
+                                return item2.gcl_id === select.gcl_id && (item2.mx_id === undefined || item2.mx_id === select.mx_id) });
+                        });
+                        gclIndex = _.findIndex(changeListData, function (item) {
+                            return item.leafXmjs && _.find(item.leafXmjs, function (item2) {
+                                return item2.gcl_id === select.gcl_id && (item2.mx_id === undefined || item2.mx_id === select.mx_id) });
+                        });
+                    }
+                    console.log(gclIndex);
+                    if (!gclInfo) {
+                        info.sheet.setValue(info.row, info.col, 0);
+                        return;
+                    }
+                    if (is_change) {
+                        const oldCInfo = select.deal_id ? _.find(oldChangeList, { lid: select.deal_id }) : _.find(oldChangeList, { gcl_id: select.gcl_id, mx_id: select.mx_id });
+                        const data = {};
+                        if (oldCInfo) {
+                            data.detail = oldCInfo.detail;
+                            data.camount = oldCInfo.camount;
+                            data.spamount = oldCInfo.spamount;
+                            data.is_valuation = oldCInfo.is_valuation;
+                            data.delimit = oldCInfo.delimit;
+                        }
+                        if (select.deal_id) {
+                            const newData = {
+                                lid: select.deal_id,
+                                code: gclInfo.code,
+                                name: gclInfo.name,
+                                unit: gclInfo.unit,
+                                unit_price: gclInfo.unit_price,
+                                oamount: gclInfo.quantity ? parseFloat(gclInfo.quantity) : 0,
+                                oamount2: oldCInfo ? oldCInfo.oamount2 : gclInfo.quantity ? parseFloat(gclInfo.quantity) : 0,
+                                bwmx: '',
+                                xmj_code: '',
+                                xmj_jldy: '',
+                                xmj_dwgc: '',
+                                xmj_fbgc: '',
+                                xmj_fxgc: '',
+                                gcl_id: '',
+                                mx_id: '',
+                            }
+                            _.assign(data, newData);
+                        } else {
+                            const xmjInfo = _.find(gclInfo.leafXmjs, function (item) {
+                                return item.gcl_id === select.gcl_id && (item.mx_id === undefined || item.mx_id === select.mx_id);
+                            });
+                            const newData = {
+                                lid: select.gcl_id,
+                                code: gclInfo.b_code,
+                                name: gclInfo.name,
+                                unit: gclInfo.unit,
+                                unit_price: gclInfo.unit_price,
+                                oamount: xmjInfo.quantity,
+                                oamount2: oldCInfo ? oldCInfo.oamount2 : xmjInfo.quantity,
+                                bwmx: xmjInfo.bwmx || xmjInfo.jldy || '',
+                                xmj_code: xmjInfo.code || '',
+                                xmj_jldy: xmjInfo.jldy || '',
+                                xmj_dwgc: xmjInfo.dwgc || '',
+                                xmj_fbgc: xmjInfo.fbgc || '',
+                                xmj_fxgc: xmjInfo.fxgc || '',
+                                gcl_id: select.gcl_id,
+                                mx_id: select.mx_id,
+                            }
+                            _.assign(data, newData);
+                        }
+                        console.log(data);
+                        // 更新至服务器
+                        postData('/tender/' + window.location.pathname.split('/')[2] + '/change/' + window.location.pathname.split('/')[4] + '/information/save', {
+                            type: 'add-change-list',
+                            postData: [data]
+                        }, function (result) {
+                            changeList = result.changeList;
+                            select.is_change = 1;
+                            changeListData[gclIndex].is_change = 1;
+                            SpreadJsObj.reLoadRowData(gclSpreadSheet, gclIndex);
+                        }, function () {
+                            info.sheet.setValue(info.row, info.col, 0);
+                        });
+                    } else {
+                        const cInfo = select.deal_id ? _.find(changeList, { lid: select.deal_id }) : _.find(changeList, { gcl_id: select.gcl_id, mx_id: select.mx_id });
+                        if (_.find(changeUsedData, {cbid: cInfo.id})) {
+                            toastr.warning('该清单已被使用,无法取消变更');
+                            info.sheet.setValue(info.row, info.col, 1);
+                            return
+                        } else if (checkIsSettle(cInfo)) {
+                            toastr.warning('该清单已结算,无法取消变更');
+                            info.sheet.setValue(info.row, info.col, 1);
+                            return
+                        } else {
+                            postData('/tender/' + window.location.pathname.split('/')[2] + '/change/' + window.location.pathname.split('/')[4] + '/information/save', {
+                                type: 'del-change-list',
+                                ids: [cInfo.id],
+                                postData: null
+                            }, function (result) {
+                                changeList = result.changeList;
+                                select.is_change = 0;
+                                if (select.deal_id) {
+                                    changeListData[gclIndex].is_change = 0;
+                                    SpreadJsObj.reLoadRowData(gclSpreadSheet, gclIndex);
+                                } else {
+                                    let isChange = false;
+                                    gclInfo.leafXmjs.forEach(function (item) {
+                                        if (item.gcl_id === select.gcl_id && (item.mx_id === undefined || item.mx_id === select.mx_id) && item.is_change) {
+                                            isChange = true;
+                                        }
+                                    });
+                                    if (!isChange) {
+                                        changeListData[gclIndex].is_change = 0;
+                                        SpreadJsObj.reLoadRowData(gclSpreadSheet, gclIndex);
+                                    }
+                                }
+                            }, function () {
+                                info.sheet.setValue(info.row, info.col, 1);
+                            });
+                        }
+                    }
+                }
             }
         }
     };
@@ -202,6 +350,7 @@ $(document).ready(() => {
     const xmjSpreadSheet = xmjSpread.getActiveSheet();
     sjsSettingObj.setGridSelectStyle(gclSpreadSetting);
     SpreadJsObj.initSheet(gclSpreadSheet, gclSpreadSetting);
+    sjsSettingObj.setGridSelectStyle(xmjSpreadSetting);
     SpreadJsObj.initSpreadSettingEvents(xmjSpreadSetting, xmjCol);
     SpreadJsObj.initSheet(xmjSpreadSheet, xmjSpreadSetting);
     postData(preUrl + '/defaultBills', { from: 'batch' }, function (result) {
@@ -261,6 +410,14 @@ $(document).ready(() => {
         gclSpreadObj.resetXmjSpread(SpreadJsObj.getSelectObject(gclSpreadSheet));
     });
     gclSpread.bind(spreadNS.Events.SelectionChanged, gclSpreadObj.selectionChanged);
+    xmjSpread.bind(spreadNS.Events.ButtonClicked, xmjSpreadObj.buttonClicked)
+
+    const xmjSearch = $.xmjSearch({
+        selector: '#xmj-search',
+        searchSpread: xmjSpread,
+        searchRangeStr: '输入项目节编号、细目、计量单元查找',
+
+    });
 
     $.divResizer({
         select: '#revise-right-spr',
@@ -362,289 +519,6 @@ $(document).ready(() => {
         gclSpread.refresh();
         xmjSpread.refresh();
     });
-
-    // 回车提交
-    $('#list-input').on('keypress', function () {
-        if(window.event.keyCode === 13) {
-            $(this).blur();
-        }
-    });
-    $('#list-input').on('blur', function () {
-        const select = parseInt($('#select-list').val());
-        const value = _.trim($(this).val());
-        const valueList = _.slice(_.without(_.uniq(_.replace(_.replace(value, /\'|\"/g, ''), /\t/g, ' ').split(' ')), ''), 0, 10);
-        // console.log(valueList);
-        // 判断是否存在多个分词,以换行或空格分隔,多个则显示左侧菜单
-        if (value !== '' && valueList.length > 1) {
-            if (_.without(_.uniq(value.split(' ')), '').length > 10) {
-                toastr.warning('最多筛选以空格分割的前10个不重复关键词');
-            }
-            $('#table-list').addClass('col-9').removeClass('col-12');
-            $('#table-list').siblings('.col-3').show();
-            $('#list-search-keyword').html('<tr data-keyword="" class="text-white bg-primary"><td class="border-primary">全部</td></tr>');
-            for (const v of valueList) {
-                $('#list-search-keyword').append(`<tr data-keyword="${v}" class=""><td>${v}</td></tr>`);
-            }
-            $('#list-input').val(valueList.join(' '));
-        } else {
-            $('#table-list').addClass('col-12').removeClass('col-9');
-            $('#table-list').siblings('.col-3').hide();
-            $('#list-search-keyword').html('<tr data-keyword="" class="text-white bg-primary border-primary"><td class="border-primary">全部</td></tr>');
-        }
-        let showListData = changeListData;
-        if (select === 1 && value !== '') {
-            $(this).siblings('a').show();
-            showListData = _.filter(changeListData, function (c) {
-                let flag = false;
-                if (c.cid) {
-                    for(const v of valueList) {
-                        if ((c.code && c.code.indexOf(v) !== -1) || (c.name && c.name.indexOf(v) !== -1)) {
-                            flag = true;
-                            break;
-                        }
-                    }
-                }
-                return flag;
-                // return ((c.code && c.code.indexOf(value) !== -1) || (c.name && c.name.indexOf(value) !== -1)) && c.cid;
-            });
-        } else if (select === 1 && value === '') {
-            $(this).siblings('a').hide();
-            showListData = _.filter(changeListData, function (c) {
-                return c.cid;
-            });
-        } else if (value !== '') {
-            $(this).siblings('a').show();
-            showListData = _.filter(changeListData, function (c) {
-                let flag = false;
-                for(const v of valueList) {
-                    if ((c.code && c.code.indexOf(v) !== -1) || (c.name && c.name.indexOf(v) !== -1)) {
-                        flag = true;
-                        break;
-                    }
-                }
-                return flag;
-                // return (c.code && c.code.indexOf(value) !== -1) || (c.name && c.name.indexOf(value) !== -1);
-            });
-        } else {
-            $(this).siblings('a').hide();
-        }
-        makeListTable(changeListData, showListData);
-        $('#table-list-select tr').removeClass('table-warning');
-        $('#code-input').val('');
-        $('#code-input').siblings('a').hide();
-        $('#code-list').html('');
-        $('#code-select-all').prop('checked', false);
-    });
-    // 双击编辑搜索值
-    $('body').on('dblclick', '#list-search-keyword tr', function () {
-        if ($(this).attr('data-keyword') !== '') {
-            $(this).children('td').html(`<input class="form-control form-control-sm" value="">`);
-            $(this).find('input').focus();
-            $(this).find('input').val($(this).attr('data-keyword'));
-        }
-    });
-    // 光标离开
-    $('body').on('blur', '#list-search-keyword tr td input', function () {
-        let val = $(this).val();
-        const oldVal = $(this).parents('tr').attr('data-keyword');
-        if (_.trim(val) === '') {
-            toastr.warning('不能为空');
-            val = oldVal;
-        } else if (_.trim(val) === oldVal) {
-            val = oldVal;
-        } else {
-            const value = _.trim($('#list-input').val());
-            const valueList = _.slice(_.without(_.uniq(_.replace(value, /\t/g, ' ').split(' ')), ''), 0, 10);
-            // console.log(_.indexOf(valueList, oldVal), valueList, val, oldVal);
-            if (_.indexOf(valueList, val) !== -1) {
-                toastr.warning('已存在相同的检索词');
-                val = oldVal;
-            }
-            valueList.splice(_.indexOf(valueList, oldVal), 1, val);
-            $('#list-input').val(valueList.join(' '));
-            const select = parseInt($('#select-list').val());
-            const showListData = _.filter(changeListData, function (c) {
-                return ((c.code && c.code.indexOf(val) !== -1) || (c.name && c.name.indexOf(val) !== -1)) && (select === 1 ? c.cid : 1);
-            });
-            makeListTable(changeListData, showListData);
-            $('#table-list-select tr').removeClass('table-warning');
-            $('#code-input').val('');
-            $('#code-input').siblings('a').hide();
-            $('#code-list').html('');
-            $('#code-select-all').prop('checked', false);
-        }
-        $(this).parents('tr').attr('data-keyword', val);
-        $(this).parents('td').html(`${val}`);
-    });
-    $('body').on('keypress', '#list-search-keyword tr td input', function () {
-        if(window.event.keyCode === 13) {
-            $(this).blur();
-        }
-    });
-    $("#addlist").draggable({ handle: '.modal-header, .modal-footer'});
-    // 检索关键字切换
-    $('body').on('click', '#list-search-keyword tr', function () {
-        if (!$(this).hasClass('bg-primary')) {
-            const keyword = $(this).attr('data-keyword');
-            $(this).siblings().removeClass('text-white bg-primary');
-            $(this).siblings().children('td').removeClass('border-primary');
-            $(this).addClass('text-white bg-primary');
-            $(this).children('td').addClass('border-primary');
-            if (keyword === '') {
-                $('#list-input').blur();
-            } else {
-                const select = parseInt($('#select-list').val());
-                const showListData = _.filter(changeListData, function (c) {
-                    return ((c.code && c.code.indexOf(keyword) !== -1) || (c.name && c.name.indexOf(keyword) !== -1)) && (select === 1 ? c.cid : 1);
-                });
-                makeListTable(changeListData, showListData);
-                $('#table-list-select tr').removeClass('table-warning');
-                $('#code-input').val('');
-                $('#code-input').siblings('a').hide();
-                $('#code-list').html('');
-                $('#code-select-all').prop('checked', false);
-            }
-        }
-    });
-    // 回车提交
-    $('#code-input').on('keypress', function () {
-        if(window.event.keyCode === 13) {
-            $(this).blur();
-        }
-    });
-    $('#code-input').on('blur', function () {
-        const value = $(this).val();
-        if (value !== '') {
-            $(this).siblings('a').show();
-        } else {
-            $(this).siblings('a').hide();
-        }
-        makeCodeTable($(this).val());
-        checkSelectAll();
-    });
-
-    $('.remove-btn').on('click', function () {
-        $(this).hide();
-        $(this).siblings('input').val('');
-        if ($(this).data('btn') === 'list') {
-            const select = parseInt($('#select-list').val());
-            let showListData = changeListData;
-            if (select === 1) {
-                showListData = _.filter(changeListData, function (c) {
-                    return c.cid;
-                });
-            }
-            makeListTable(changeListData, showListData);
-            $('#table-list-select tr').removeClass('table-warning');
-            $('#code-list').html('');
-            $('#table-list').addClass('col-12').removeClass('col-9');
-            $('#table-list').siblings('.col-3').hide();
-            $('#list-search-keyword').html('');
-            $('#list-search-keyword').siblings('a').addClass('active');
-        } else {
-            makeCodeTable();
-        }
-        checkSelectAll();
-    });
-    // 全选及取消
-    $('#code-select-all').click(function () {
-        // 全选checkbox
-        let index = $('#code-list').attr('data-index');
-        if (index) {
-            if ($(this).is(':checked')){
-                $('#code-list tr').each(function () {
-                    if ($(this).css('display') !== 'none' && $(this).find('input').prop('disabled') !== true) {
-                        $(this).find('input').prop('checked', true);
-                    }
-                })
-            } else {
-                $('#code-list tr').each(function () {
-                    if ($(this).css('display') !== 'none' && $(this).find('input').prop('disabled') !== true) {
-                        $(this).find('input').prop('checked', false);
-                    }
-                });
-            }
-            // 判断还有无选中项目节编号
-            if ($('#code-list input').is(':checked')) {
-                // 去除部分data-detail值
-                let data_bwmx = [];
-                let data_charu = [];
-                $('#code-list input:checked').each(function () {
-                    const tr = $(this).parents('tr');
-                    const length = tr.children('td').length;
-                    const gcl_id = tr.attr('gcl_id');
-                    const mx_id = tr.attr('mx_id');
-                    const bwmx = length === 9 ?
-                        tr.children('td').eq(1).text() + '!_!' +
-                        tr.children('td').eq(2).text() + '!_!' +
-                        tr.children('td').eq(3).text() + '!_!' +
-                        tr.children('td').eq(4).text() + '!_!' +
-                        tr.children('td').eq(5).text() + '!_!' + gcl_id + '!_!' + mx_id + '!_!' +
-                        (tr.children('td').eq(6).text() !== '' ? tr.children('td').eq(6).text() : tr.children('td').eq(2).text()) : '0';
-                    const quantity = tr.attr('quantity');
-                    const de_qu = bwmx + '*;*' + quantity;
-                    data_bwmx.push(de_qu);
-                    if (changeOrder && $(this).prop('disabled') !== true) {
-                        data_charu.push(de_qu);
-                    }
-                });
-                data_bwmx = data_bwmx.join('$#$');
-                $('#table-list-select tr[data-index="' + index + '"]').attr('data-bwmx', data_bwmx);
-                if (changeOrder) {
-                    data_charu = data_charu.join('$#$');
-                    $('#table-list-select tr[data-index="' + index + '"]').attr('data-charu', data_charu);
-                }
-                $('#table-list-select tr[data-index="' + index + '"]').addClass('table-success');
-            } else {
-                $('#table-list-select tr[data-index="' + index + '"]').removeClass('table-success');
-                $('#table-list-select tr[data-index="' + index + '"]').attr('data-bwmx', '');
-                if (changeOrder) {
-                    $('#table-list-select tr[data-index="' + index + '"]').attr('data-charu', '');
-                }
-            }
-        }
-    });
-    // 选中所有新增部位/清单
-    $('#select-all-revise').click(function() {
-        const qtySpr = '*;*', infoSpr = '!_!', recSpr = '$#$';
-        const gclTr = $('#table-list-select tr');
-        for (const tr of gclTr) {
-            const lid = $(tr).data('lid');
-            let gcl = _.find(gclGatherData, function (item) {
-                return item.leafXmjs && item.leafXmjs[0].gcl_id === lid;
-            });
-            if (!gcl) gcl = gclGatherData[$(this).data('gcl')];
-            if (!gcl || !gcl.cid) continue;
-
-            let data_bwmx = [];
-            if ($(tr).attr('data-bwmx') !== '') {
-                data_bwmx = $(tr).attr('data-bwmx').split(recSpr);
-                data_bwmx = data_bwmx.filter(x => {
-                    const rec = x.split(qtySpr);
-                    const info = rec[0].split(infoSpr);
-                    if (info.length < 8) return true;
-
-                    const leaf = gcl.leafXmjs.find(lx => { return lx.mx_id === info[6]});
-                    return !leaf || !leaf.cid || leaf.ccid !== window.location.pathname.split('/')[4];
-                });
-            }
-            let hasNew = false;
-            for (const [index, leaf] of gcl.leafXmjs.entries()) {
-                if (!leaf.cid || leaf.ccid !== window.location.pathname.split('/')[4]) continue;
-                const bwmx = [leaf.code, leaf.jldy || '', leaf.dwgc || '', leaf.fbgc || '', leaf.fxgc || '', leaf.gcl_id, leaf.mx_id, leaf.bwmx || leaf.jldy || ''];
-                const de_qu = bwmx.join(infoSpr) + qtySpr + (leaf.quantity || 0);
-                if (data_bwmx.indexOf(de_qu) < 0) data_bwmx.push(de_qu);
-                hasNew = true;
-            }
-            if (hasNew) $(tr).attr('data-bwmx', data_bwmx.join(recSpr)).addClass('table-success');
-        }
-
-        // 触发点击当前清单,重载当前全部部位
-        const dataIndex = $('#code-list').attr('data-index');
-        if (dataIndex) {
-            $(`tr[data-index=${dataIndex}]`).trigger('click');
-        }
-    });
 });
 function checkSelectAll() {
     let check = $('#code-list tr').length > 0 ? true : false;
@@ -675,3 +549,11 @@ function findDecimal(unit) {
     }
     return value;
 }
+// 判断是否是已结算清单
+function checkIsSettle(data) {
+    const info = data.mx_id ? _.find(settlePos, { lid: data.gcl_id, pid: data.mx_id }) : _.find(settleBills, { lid: data.gcl_id });
+    if (info && info.settle_status && info.settle_status === settleStatus.finish) {
+        return true;
+    }
+    return false;
+}

+ 1 - 1
app/public/js/change_information_approval.js

@@ -152,7 +152,7 @@ $(document).ready(() => {
         },
         resetXmjSpread: function(data = null) {
             const xmj = [];
-            if (data && data.lid != 0 && data.xmj_code !== '' && data.xmj_code !== null) {
+            if (data && data.lid != 0) {
                 if (data.bwmx === data.xmj_jldy) {
                     data.bwmx = '';
                 }

+ 4 - 4
app/public/js/change_information_set.js

@@ -400,7 +400,7 @@ $(document).ready(() => {
         },
         resetXmjSpread: function(data = null) {
             const xmj = [];
-            if (data && data.lid != 0 && data.xmj_code !== '' && data.xmj_code !== null) {
+            if (data && data.lid != 0) {
                 const newData = JSON.parse(JSON.stringify(data));
                 if (newData.bwmx === newData.xmj_jldy) {
                     newData.bwmx = '';
@@ -2254,9 +2254,9 @@ function makePushBwmx(clinfo, listinfo, removeList, updateList, lidIsNumber) {
                         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;
+                    } else if (leafInfo[key] === undefined && (leafInfo.jldy || '') !== clinfo[key]) {
+                        oneUpdate[key] = leafInfo.jldy || '';
+                        clinfo[key] = leafInfo.jldy || '';
                         needUpdate = true;
                     }
                 } else {

+ 1 - 1
app/public/js/change_information_show.js

@@ -124,7 +124,7 @@ $(document).ready(() => {
         },
         resetXmjSpread: function(data = null) {
             const xmj = [];
-            if (data && data.lid != 0 && data.xmj_code !== '' && data.xmj_code !== null) {
+            if (data && data.lid != 0) {
                 if (data.bwmx === data.xmj_jldy) {
                     data.bwmx = '';
                 }

+ 1 - 1
app/public/js/change_revise.js

@@ -1780,7 +1780,7 @@ $(document).ready(() => {
                             unit_price: gclInfo.unit_price,
                             oamount: xmjInfo.quantity,
                             oamount2: oldCInfo ? oldCInfo.oamount2 : xmjInfo.quantity,
-                            bwmx: xmjInfo.bwmx || xmjInfo.jldy,
+                            bwmx: xmjInfo.bwmx || xmjInfo.jldy || '',
                             xmj_code: xmjInfo.code || '',
                             xmj_jldy: xmjInfo.jldy || '',
                             xmj_dwgc: xmjInfo.dwgc || '',

+ 102 - 0
app/public/js/shares/cs_tools.js

@@ -765,6 +765,108 @@ const showSelectTab = function(select, spread, afterShow) {
         return {spread: resultSpread};
     };
 
+    $.xmjSearch = function (setting) {
+        if (!setting.selector || !setting.searchSpread) return;
+        if (!setting.searchRangeStr) setting.searchRangeStr = '输入项目节编号、细目、计量单元查找';
+        const searchHtml =
+            '                                <div class="ml-2">\n' +
+            '                                    <div class="input-group input-group-sm">\n' +
+            '                                        <input type="text" class="form-control" placeholder="'+ setting.searchRangeStr +'" id="xmj-keyword">\n' +
+            '                                        <div class="input-group-append">\n' +
+            '                                            <span class="input-group-text" id="xmj-search-hint">结果:0</span>\n' +
+            '                                        </div>\n' +
+            '                                        <div class="input-group-append" >\n' +
+            '                                            <button class="btn btn-outline-secondary" type="button" title="上一个" id="search-pre-xmj"><i class="fa fa-angle-double-left"></i></button>\n' +
+            '                                            <button class="btn btn-outline-secondary" type="button" title="下一个" id="search-next-xmj"><i class="fa fa-angle-double-right"></i></button>\n' +
+            '                                        </div>\n' +
+            '                                    </div>\n' +
+            '                                </div>\n';
+        $(setting.selector).html(searchHtml);
+        const sheet = setting.searchSpread.getActiveSheet();
+        const searchObj = (function () {
+            let resultArr = [];
+            const search = function (keyword) {
+                if (keyword && keyword !== '') {
+                    resultArr = [];
+                    const sortData = sheet.zh_data;
+                    if (sortData) {
+                        for (let i = 0, iLength = sortData.length; i < iLength; i++) {
+                            const sd = sortData[i];
+                            if ((sd.jldy && sd.jldy.indexOf(keyword) > -1) || (sd.code && sd.code.indexOf(keyword) > -1) || (sd.bwmx && sd.bwmx.indexOf(keyword) > -1)) {
+                                resultArr.push({index: i, data: sd});
+                            }
+                        }
+                    }
+                } else {
+                    resultArr = [];
+                }
+                $('#xmj-search-hint').html('结果:' + resultArr.length);
+            };
+            const searchAndLocate = function (keyword) {
+                search(keyword);
+                const sel = sheet.getSelections()[0];
+                const curRow = sel ? sel.row : 0;
+                sheet.setSelection(0, sel ? sel.col : 0, 1, 1);
+                SpreadJsObj.reloadRowsBackColor(sheet, [0, curRow]);
+                if (resultArr.length > 0) {
+                    const pos = resultArr[0];
+                    if (pos.index !== curRow) {
+                        sheet.setSelection(pos.index, sel ? sel.col : 0, 1, 1);
+                        sheet.getParent().focus();
+                        sheet.showRow(pos.index, spreadNS.VerticalPosition.center);
+                        SpreadJsObj.reloadRowsBackColor(sheet, [pos.index, curRow]);
+                    }
+                }
+            };
+            const locateNext = function () {
+                if (resultArr.length > 0) {
+                    const sel = sheet.getSelections()[0];
+                    const curRow = sel ? sel.row : 0;
+                    let next = _.find(resultArr, function (d) {
+                        return d.index > curRow;
+                    });
+                    if (!next) next = resultArr[0];
+                    if (next.index !== curRow) {
+                        sheet.setSelection(next.index, sel ? sel.col : 0, 1, 1);
+                        sheet.getParent().focus();
+                        sheet.showRow(next.index, spreadNS.VerticalPosition.center);
+                        SpreadJsObj.reloadRowsBackColor(sheet, [next.index, curRow]);
+                    }
+                }
+            };
+            const locatePre = function () {
+                if (resultArr.length > 0) {
+                    const sel = sheet.getSelections()[0];
+                    const curRow = sel ? sel.row : 0;
+                    let next = _.findLast(resultArr, function (d) {
+                        return d.index < curRow;
+                    });
+                    if (!next) next = resultArr[resultArr.length - 1];
+                    if (next.index !== curRow) {
+                        sheet.setSelection(next.index, sel ? sel.col : 0, 1, 1);
+                        sheet.getParent().focus();
+                        sheet.showRow(next.index, spreadNS.VerticalPosition.center);
+                        SpreadJsObj.reloadRowsBackColor(sheet, [next.index, curRow]);
+                    }
+                }
+            };
+            return {search, searchAndLocate, locateNext, locatePre};
+        })();
+        // $('#pos-keyword').bind('input propertychange', function () {
+        //     posSearch.search(this.value);
+        // });
+        $('#xmj-keyword').bind('keydown', function(e){
+            if (e.keyCode == 13) searchObj.searchAndLocate(this.value);
+        });
+        $('#search-pre-xmj').click(function () {
+            searchObj.locatePre();
+        });
+        $('#search-next-xmj').click(function () {
+            searchObj.locateNext();
+        });
+        return searchObj;
+    };
+
     $.billsTag = function (setting) {
         if (!setting.selector || !setting.relaSpread) return;
         if (!setting.tagType) setting.tagType = [

+ 1 - 1
app/view/change/addlist.ejs

@@ -24,7 +24,7 @@
                             <li class="nav-item">
                                 <a class="nav-link active" href="javascript:void(0)">所属项目节</a>
                             </li>
-                            <li class="nav-item" id="xmj-search">
+                            <li class="nav-item" style="width: 350px;" id="xmj-search">
                             </li>
                         </ul>
                     </div>

+ 2 - 1
app/view/change/information.ejs

@@ -392,7 +392,8 @@
                         <div class="m-1" id="list-tab">
                             <% if (!change.readOnly) { %>
                                 <div class="d-inline-block ml-1">
-                                    <a href="#addlist" data-toggle="modal" class="btn btn-sm btn-light text-primary" id="open-list-modal" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="添加清单"><i class="fa fa-plus" aria-hidden="true"></i> <span class="order_text"><% if (change.order_by === 0) { %>添加<% } else { %>插入<% } %></span>台账清单</a>
+<!--                                    <a href="#addlist" data-toggle="modal" class="btn btn-sm btn-light text-primary" id="open-list-modal" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="添加清单"><i class="fa fa-plus" aria-hidden="true"></i> <span class="order_text"><% if (change.order_by === 0) { %>添加<% } else { %>插入<% } %></span>台账清单</a>-->
+                                    <a href="/tender/<%- ctx.tender.id %>/change/<%- change.cid %>/information/revise" class="btn btn-sm btn-light text-primary" data-placement="bottom" title="" data-original-title="添加清单"><i class="fa fa-plus" aria-hidden="true"></i> <span class="order_text"><% if (change.order_by === 0) { %>添加<% } else { %>插入<% } %></span>台账清单</a>
                                 </div>
                                 <% if (ctx.session.sessionProject.page_show.openChangeWhiteList) { %>
                                     <div class="d-inline-block mr-1">