| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911 | /** * Created by zhang on 2019/5/15. */let materialAdjustObj = {  spread: null,  priceInfoSheet: null,  priceCoeSheet: null,  priceInfoDatas: [],  priceCoeDatas: [],  priceInfoSetting: {    header: [{        headerName: "关联",        headerWidth: 80,        dataCode: "is_related",        dataType: "String",        cellType: 'checkBox'      },      {        headerName: "材料号",        headerWidth: 80,        dataCode: "code",        dataType: "String"      },      {        headerName: "材料名称",        headerWidth: 160,        dataCode: "name",        dataType: "String",        cellType: 'tipsCell'      },      {        headerName: "规格型号",        headerWidth: 120,        dataCode: "specs",        hAlign: "left",        dataType: "String",        cellType: 'tipsCell'      },      {        headerName: "单位",        headerWidth: 45,        dataCode: "unit",        hAlign: "center",        dataType: "String"      },      {        headerName: "数量",        headerWidth: 90,        dataCode: "quantity",        hAlign: "right",        dataType: "Number",        decimalField: 'glj.quantity'      },      {        headerName: "风险系数%",        headerWidth: 80,        dataCode: "riskCoe",        hAlign: "right",        dataType: "Number",        validator: "number"      },      {        headerName: "基准单价",        headerWidth: 70,        dataCode: "standardPrice",        hAlign: "right",        dataType: "Number",        validator: "number"      },      {        headerName: "投标单价",        headerWidth: 70,        dataCode: "marketPrice",        hAlign: "right",        dataType: "Number",        validator: "number"      },      {        headerName: "合价",        headerWidth: 90,        dataCode: "totalPrice",        hAlign: "right",        dataType: "Number",        validator: "number",        decimalField: 'bills.totalPrice'      },      {        headerName: "供货方式",        headerWidth: 70,        dataCode: "supply",        hAlign: "center",        dataType: "String",        cellType: 'comboBox',        editorValueType: true,        options: supplyComboMap      },      {        headerName: "备注",        headerWidth: 100,        dataCode: "remark",        hAlign: "left",        dataType: "String"      }    ],    view: {      lockColumns: ["is_related", "quantity", "totalPrice", "originPlace", "vender", "supply"]    }  },  priceCoeSetting: {    header: [{        headerName: "关联",        headerWidth: 80,        dataCode: "is_related",        dataType: "String",        cellType: 'checkBox'      },      {        headerName: "材料号",        headerWidth: 80,        dataCode: "code",        dataType: "String"      },      {        headerName: "材料名称",        headerWidth: 160,        dataCode: "name",        dataType: "String",        cellType: 'tipsCell'      },      {        headerName: "规格型号",        headerWidth: 120,        dataCode: "specs",        hAlign: "left",        dataType: "String",        cellType: 'tipsCell'      },      {        headerName: "单位",        headerWidth: 45,        dataCode: "unit",        hAlign: "center",        dataType: "String"      },      {        headerName: "变值权重B",        headerWidth: 90,        dataCode: "varWeight",        hAlign: "right",        dataType: "Number",        validator: "number",        formatter: "0.00"      },      {        headerName: "基本价格指数F0",        headerWidth: 70,        dataCode: "FO",        hAlign: "right",        dataType: "Number",        validator: "number"      },      {        headerName: "现行价格指数Ft",        headerWidth: 70,        dataCode: "FI",        hAlign: "right",        dataType: "Number",        validator: "number"      },      {        headerName: "数量",        headerWidth: 90,        dataCode: "quantity",        hAlign: "right",        dataType: "Number",        decimalField: 'glj.quantity'      },      {        headerName: "单价",        headerWidth: 70,        dataCode: "marketPrice",        hAlign: "right",        dataType: "Number",        validator: "number"      },      {        headerName: "合价",        headerWidth: 90,        dataCode: "totalPrice",        hAlign: "right",        dataType: "Number",        validator: "number",        decimalField: 'bills.totalPrice'      },      {        headerName: "供货方式",        headerWidth: 70,        dataCode: "supply",        hAlign: "center",        dataType: "String",        cellType: 'comboBox',        editorValueType: true,        options: supplyComboMap      },      {        headerName: "备注",        headerWidth: 100,        dataCode: "remark",        hAlign: "left",        dataType: "String"      }    ],    view: {      lockColumns: ["is_related", "quantity", "totalPrice", "originPlace", "varWeight", "vender", "supply"]    }  },  refreshSheetDatas: function () {    //读项目属性的值,若没有则默认为造价信息差额调整法    let adjustType = $('#adjustType').val();    if (adjustType === 'priceInfo') {      materialAdjustObj.showPriceInfoDatas();    } else {      materialAdjustObj.showPriceCoeDatas();    }    configMaterialObj.showEvaluateRelateDatas();  },  getSheetDatas: function () {    let adjustType = $('#adjustType').val();    return adjustType === 'priceInfo' ? this.priceInfoDatas : this.priceCoeDatas;  },  getSheet: function () {    let adjustType = $('#adjustType').val();    return adjustType === 'priceInfo' ? this.priceInfoSheet : this.priceCoeSheet;  },  initPriceInfoSheet: function () {    this.priceInfoSheet = configMaterialObj.configSpread.getSheet(2);    sheetCommonObj.initSheet(this.priceInfoSheet, this.priceInfoSetting, 30);    this.priceInfoSheet.bind(GC.Spread.Sheets.Events.ValueChanged, this.onSheetValueChange);    this.priceInfoSheet.bind(GC.Spread.Sheets.Events.SelectionChanged, this.onSelectionChange);    this.priceInfoSheet.bind(GC.Spread.Sheets.Events.EditStarting, this.onPriceInfoEditString);    this.priceInfoSheet.bind(GC.Spread.Sheets.Events.RangeChanged, this.onSheetRangeChange);    this.priceInfoSheet.name('priceInfoSheet');    this.priceInfoSheet.setRowHeight(0, 36, 1);  },  initPriceCoeSheet: function () {    this.priceCoeSheet = configMaterialObj.configSpread.getSheet(3);    sheetCommonObj.initSheet(this.priceCoeSheet, this.priceCoeSetting, 30);    this.priceCoeSheet.bind(GC.Spread.Sheets.Events.ValueChanged, this.onSheetValueChange);    this.priceCoeSheet.bind(GC.Spread.Sheets.Events.SelectionChanged, this.onSelectionChange);    this.priceCoeSheet.bind(GC.Spread.Sheets.Events.EditStarting, this.onPriceInfoEditString);    this.priceCoeSheet.bind(GC.Spread.Sheets.Events.RangeChanged, this.onSheetRangeChange);    this.priceCoeSheet.name('priceCoeSheet');    this.priceCoeSheet.setRowHeight(0, 36, 1);  },  onSelectionChange: function (sender, args) {    let me = configMaterialObj;    let newSel = args.newSelections[0];    let oldSel = args.oldSelections ? args.oldSelections[0] : {};    if (newSel.row != oldSel.row) {      me.showEvaluateRelateDatas();      me.relateFilterAgain = false;    }  },  onSheetRangeChange: function (a, args) {    let me = materialAdjustObj,      updateMap = {},      tasks = [];    let projectGLJ = projectObj.project.projectGLJ;    let setting = $("#adjustType").val() == "priceInfo" ? me.priceInfoSetting : me.priceCoeSetting;    let datas = $("#adjustType").val() == "priceInfo" ? me.priceInfoDatas : me.priceCoeDatas;    for (let c of args.changedCells) {      let dataCode = setting.header[c.col].dataCode;      let value = args.sheet.getCell(c.row, c.col).text();      let recode = datas[c.row];      if (dataCode == "unit" && recode.is_related) {        me.refreshSheetDatas();        return;      }      if (value && !sheetCommonObj.checkData(c.col, setting, value)) {        alert('输入的数据类型不对,请重新输入!');        me.refreshSheetDatas();        return;      }      if (dataCode == 'marketPrice') {        dataCode = 'market_price';        if (recode.is_related) { //关联的情况下,直接修改工料机价格          return projectGLJ.updatePrice(recode, dataCode, value, 'rg', null, projectGljObject.refreshViewsData);        }      } else {        let tem = updateMap[recode.ID] ? updateMap[recode.ID] : {};        if (value && dataCode == "standardPrice") value = scMathUtil.roundForObj(value, getDecimal('glj.unitPrice')) + "";        if (value == recode[dataCode]) continue;        tem[dataCode] = value;        updateMap[recode.ID] = tem;      }    }    for (let ID in updateMap) {      let edata = {        type: "contractor_list",        doc: updateMap[ID],        action: "update",        ID: ID      };      tasks.push(edata);    }    if (tasks.length > 0) configMaterialObj.updateEvaluateMaterial(tasks, false);  },  onPriceInfoEditString: function (a, args) {    let me = materialAdjustObj;    let setting = $("#adjustType").val() == "priceInfo" ? me.priceInfoSetting : me.priceCoeSetting;    let datas = $("#adjustType").val() == "priceInfo" ? me.priceInfoDatas : me.priceCoeDatas;    let dataCode = setting.header[args.col].dataCode;    let recorde = datas[args.row];    if (recorde) {      if (recorde.is_related && dataCode == "unit") args.cancel = true;    }  },  onSheetValueChange: function (a, args) {    let me = materialAdjustObj,      row = args.row,      col = args.col;    let setting = $("#adjustType").val() == "priceInfo" ? me.priceInfoSetting : me.priceCoeSetting;    let datas = $("#adjustType").val() == "priceInfo" ? me.priceInfoDatas : me.priceCoeDatas;    let dataCode = setting.header[col].dataCode;    let evaluate = datas[row];    let value = args.newValue;    if (value && !sheetCommonObj.checkData(col, setting, value)) {      alert('输入的数据类型不对,请重新输入!');      return me.refreshSheetDatas();    }    if (dataCode == 'marketPrice') {      dataCode = 'market_price';      if (evaluate.is_evaluate == 1) {        alert("当前材料市场价已被锁定,修改请先返回人材机汇总界面解除锁定。");        return me.refreshSheetDatas();      }      if (evaluate.is_related) { //关联的情况下,直接修改工料机价格        return projectObj.project.projectGLJ.updatePrice(evaluate, dataCode, value, 'rg', null, projectGljObject.refreshViewsData);      }    }    if (dataCode == "standardPrice") value = scMathUtil.roundForObj(value, getDecimal('glj.unitPrice')) + "";    let edata = {      type: 'contractor_list',      doc: {},      action: "update",      ID: evaluate.ID    };    if (evaluate[dataCode] == value) return me.refreshSheetDatas();    edata.doc[dataCode] = value;    configMaterialObj.updateEvaluateMaterial([edata], false);  },  deleteAdjust: function () {    let me = this,      updateMap = {};    let projectGLJ = projectObj.project.projectGLJ;    let datas = $("#adjustType").val() == "priceInfo" ? me.priceInfoDatas : me.priceCoeDatas;    let sels = this.spread.getActiveSheet().getSelections();    let select = sels.length > 0 ? sels[0] : null;    if (!select) return;    for (let i = 0; i < select.rowCount; i++) {      let recode = datas[select.row + i];      if (recode) updateMap[recode.id] = {        is_info_adjust: 0,        is_coe_adjust: 0      };    }    if (_.isEmpty(updateMap)) return;    projectGLJ.batchUpdateGLJProperty(updateMap, materialAdjustObj.refreshSheetDatas);  },  showPriceInfoDatas: function () {    configMaterialObj.configSpread.setActiveSheetIndex(2);    let sel = this.priceInfoSheet.getSelections()[0];    let oldData = sel.row < this.priceInfoDatas.length ? this.priceInfoDatas[sel.row] : "";    this.priceInfoDatas = this.getPirceInfoDatas();    sheetCommonObj.showData(this.priceInfoSheet, this.priceInfoSetting, this.priceInfoDatas);    this.priceInfoSheet.setRowCount(this.priceInfoDatas.length);    sel.row = oldData ? _.findIndex(this.priceInfoDatas, {      'ID': oldData.ID    }) : '';    this.priceInfoSheet.setSelection(sel.row == -1 ? 0 : sel.row, sel.col, sel.rowCount, sel.colCount);  },  showPriceCoeDatas: function () {    configMaterialObj.configSpread.setActiveSheetIndex(3);    let sel = this.priceCoeSheet.getSelections()[0];    let oldData = sel.row < this.priceCoeDatas.length ? this.priceCoeDatas[sel.row] : "";    this.priceCoeDatas = this.getPriceCoeDatas();    sheetCommonObj.showData(this.priceCoeSheet, this.priceCoeSetting, this.priceCoeDatas);    this.priceCoeSheet.setRowCount(this.priceCoeDatas.length);    sel.row = oldData ? _.findIndex(this.priceCoeDatas, {      'ID': oldData.ID    }) : '';    this.priceCoeSheet.setSelection(sel.row == -1 ? 0 : sel.row, sel.col, sel.rowCount, sel.colCount);  },  getPirceInfoDatas: function (projectGLJList, contractor_list, decimalObj) {    let datas = [];    let pgljList = projectGLJList ? projectGLJList : projectObj.project.projectGLJ.datas.gljList;    let contractorList = contractor_list ? contractor_list : projectObj.project.contractor_list.datas;    let billsDecimal = decimalObj ? decimalObj.bills.totalPrice : getDecimal('bills.totalPrice');    let gljMap = _.indexBy(pgljList, 'id');    for (let e of contractorList) {      let t = {        ID: e.ID,        projectID: e.projectID,        is_related: e.is_related, //关联,1关,0不关        projectGLJID: e.projectGLJID, //关联工料机ID        seq: e.seq, //序号        code: e.code,        name: e.name,        specs: e.specs,        unit: e.unit,        type: e.type,        marketPrice: e.market_price,        quantity: e.quantity,        remark: e.remark,        supply: e.supply,        riskCoe: e.riskCoe,        is_evaluate: 0,        standardPrice: e.standardPrice      };      let pglj = gljMap[e.projectGLJID];      if (e.is_related && pglj) {        gljOprObj.setGLJPrice(t, pglj);        t.vender = pglj.vender;        t.supply = pglj.supply;        t.is_evaluate = pglj.is_evaluate;        t.quantity = pglj.quantity;      }      t.totalPrice = scMathUtil.roundForObj(parseFloat(t.quantity) * parseFloat(t.marketPrice), billsDecimal);      datas.push(t);    }    return _.sortByAll(datas, 'code');  },  getPriceCoeDatas: function (projectGLJList, contractor_list, totalFee, projectProperty) {    let pgljList = projectGLJList ? projectGLJList : projectObj.project.projectGLJ.datas.gljList;    let contractorList = contractor_list ? contractor_list : projectObj.project.contractor_list.datas;    let tprojectProperty = projectProperty?projectProperty:projectObj.project.projectInfo.property;    if (!gljUtil.isDef(totalFee)) {      let node = projectObj.project.Bills.getEngineeringCostNode(projectObj.mainController);      totalFee = node && node.data.feesIndex && node.data.feesIndex.common ? node.data.feesIndex.common.totalFee : 0;    }    return gljUtil.getPriceCoeDatas(pgljList, contractorList, totalFee, tprojectProperty,_,scMathUtil)    /* for (let e of contractorList) {      let t = {        ID: e.ID,        projectID: e.projectID,        is_related: e.is_related, //关联,1关,0不关        projectGLJID: e.projectGLJID, //关联工料机ID        seq: e.seq, //序号        code: e.code,        name: e.name,        specs: e.specs,        unit: e.unit,        type: e.type,        marketPrice: e.market_price,        quantity: e.quantity,        remark: e.remark,        supply: e.supply,        is_evaluate: 0,        FO: e.FO,        FI: e.FI      };      let pglj = gljMap[e.projectGLJID];      if (e.is_related && pglj) {        gljOprObj.setGLJPrice(t, pglj);        t.vender = pglj.vender;        t.supply = pglj.supply;        t.quantity = pglj.quantity;        t.is_evaluate = pglj.is_evaluate;      }      t.totalPrice = scMathUtil.roundForObj(parseFloat(t.quantity) * parseFloat(t.marketPrice), billsDecimal);      if (totalFee !== 0) t.varWeight = scMathUtil.roundForObj(t.totalPrice / totalFee, 2);      datas.push(t);    }    return _.sortByAll(datas, 'code'); */  },  getCommonObject: function (glj) {    let data = {      select: 0,      id: glj.id,      code: glj.code,      name: glj.name,      specs: glj.specs,      unit: glj.unit,      type: glj.type,      quantity: glj.quantity,      supply: glj.supply,      originPlace: glj.originPlace,      vender: glj.vender,      brand: glj.brand,      remark: glj.remark    };    gljOprObj.setGLJPrice(data, glj);    return data;  },  checkedDefualtOption: function (className) {    for (let a of $("." + className)) {      if (className == "pglj_sel_input" || a.id == "glj_sel_material" || a.id == "glj_sel_main" || a.id == "glj_sel_eqp") $(a).prop("checked", true)    }  },  insertEmptyRow: function () {    let ndata = {      type: "contractor_list",      doc: {},      action: "add"    };    ndata.doc['ID'] = uuid.v1();    ndata.doc['is_related'] = 0;    ndata.doc['seq'] = "";    ndata.doc['projectID'] = projectObj.project.ID();    ndata.doc['code'] = "";    ndata.doc['name'] = "";    ndata.doc['unit'] = "";    ndata.doc['originPlace'] = "";    ndata.doc['vender'] = "";    ndata.doc['remark'] = "";    ndata.doc['supply'] = "";    ndata.doc['riskCoe'] = "";    ndata.doc['standardPrice'] = "";    ndata.doc['FO'] = "";    ndata.doc['FI'] = "";    configMaterialObj.updateEvaluateMaterial([ndata], false);  }};let gljFromObj = {  spread: null,  sheet: null,  datas: [],  setting: {    header: [{        headerName: "选择",        headerWidth: 45,        dataCode: "select",        hAlign: "center",        dataType: "String",        cellType: 'checkBox'      },      {        headerName: "编码",        headerWidth: 80,        dataCode: "code",        dataType: "String"      },      {        headerName: "类型",        headerWidth: 30,        dataCode: "short_name",        hAlign: "center",        dataType: "String"      },      {        headerName: "名称",        headerWidth: 160,        dataCode: "name",        dataType: "String",        cellType: 'tipsCell'      },      {        headerName: "规格型号",        headerWidth: 100,        dataCode: "specs",        hAlign: "left",        dataType: "String",        cellType: 'tipsCell'      },      {        headerName: "单位",        headerWidth: 45,        dataCode: "unit",        hAlign: "center",        dataType: "String"      },      {        headerName: "总消耗量",        headerWidth: 90,        dataCode: "quantity",        hAlign: "right",        dataType: "Number",        decimalField: 'glj.quantity'      },      {        headerName: "市场价",        headerWidth: 70,        dataCode: "marketPrice",        hAlign: "right",        dataType: "Number",        validator: "number"      }, //,decimalField:"glj.unitPrice"      {        headerName: "供货方式",        headerWidth: 70,        dataCode: "supply",        hAlign: "center",        dataType: "String",        cellType: 'comboBox',        editorValueType: true,        options: supplyComboMap      },      {        headerName: "暂估",        headerWidth: 45,        dataCode: "is_evaluate",        hAlign: "center",        dataType: "String",        cellType: 'checkBox'      },      {        headerName: "产地",        headerWidth: 80,        dataCode: "originPlace",        hAlign: "left",        dataType: "String"      },      {        headerName: "厂家",        headerWidth: 80,        dataCode: "vender",        hAlign: "left",        dataType: "String"      },      {        headerName: "备注",        headerWidth: 100,        dataCode: "remark",        hAlign: "left",        dataType: "String"      }    ],    view: {      lockColumns: ["is_evaluate"]    }  },  checkType: "取消", //记住点击过的按钮的text  initSpread: function () {    if (!this.spread) {      this.spread = SheetDataHelper.createNewSpread($("#glj_from_sheet")[0]);      sheetCommonObj.spreadDefaultStyle(this.spread);    } else {      this.spread.refresh();    }    this.sheet = this.spread.getSheet(0);    sheetCommonObj.initSheet(this.sheet, this.setting);    this.sheet.bind(GC.Spread.Sheets.Events.EditStarting, this.onEditStarting);    this.sheet.bind(GC.Spread.Sheets.Events.ClipboardPasting, this.onClipboardPasting);    this.sheet.bind(GC.Spread.Sheets.Events.ValueChanged, this.onValueChanged);    this.sheet.setRowHeight(0, 36, 1);    disableRightMenu("glj_from_sheet", this.spread);  },  onEditStarting: function (e, args) {    args.cancel = true;  },  onClipboardPasting: function (e, args) {    args.cancel = true;  },  onValueChanged: function (e, args) {    let me = gljFromObj;    let value = args.newValue;    value = value == true ? 1 : 0;    me.datas[args.row].select = value;  },  showDatas: function () {    this.datas = [];    let gljList = projectObj.project.projectGLJ.datas.gljList;    gljList = this.filterGLJ(gljList);    gljList = sortProjectGLJ(gljList);    for (let glj of gljList) {      this.datas.push(this.getSheetDatas(glj));    }    this.refreshDatas();  },  filterGLJ: function (gljList) {    let typeMap = {};    for (let ch of $(".glj_sel_input:checked")) {      typeMap[$(ch).val()] = true;    }    let inputV = $("#glj_sel_input").val();    return _.filter(gljList, function (item) {      if (item.quantity === 0 || item.quantity === '0') return false;      if (!typeMap[0]) { //如果没有勾选所有,下面再细分        let firstS = (item.type + "").substring(0, 1);        if (!typeMap[firstS]) return false      }      if (inputV != "") { //输入的关键字过滤        if (item.code.indexOf(inputV) == -1 && item.name.indexOf(inputV) == -1) return false      }      return true;    });  },  refreshDatas: function () {    this.checkByType(this.checkType);    sheetCommonObj.showData(this.sheet, this.setting, this.datas);    this.sheet.setRowCount(this.datas.length);  },  getSheetDatas(glj) {    let projectGLJ = projectObj.project.projectGLJ;    let materialIdList = projectGLJ.datas.constData.materialIdList;    let data = materialAdjustObj.getCommonObject(glj);    data.select = 0;    data.short_name = projectGLJ.getShortNameByID(glj.type);    // 只有材料才显示是否暂估    if (materialIdList.indexOf(glj.type) >= 0) data.is_evaluate = glj.is_evaluate;    data.from = glj;    data.is_contractor_material = glj.is_contractor_material;    return data;  },  checkByType: function (type) {    for (let d of this.datas) {      d.select = 0;      switch (type) {        case "全选":          d.select = 1;          break;        case "全选主材":          if (d.type == 4) d.select = 1;          break;        case "全选设备":          if (d.type == 5) d.select = 1;          break;        case "取消":          d.select = d.is_contractor_material ? 1 : 0;          break;      }    }  },  confirmSelect: function () {    let tasks = [];    let datas = projectObj.project.contractor_list.datas,      modelType = 'contractor_list',      field = 'is_contractor_material';    let evaluateMap = _.indexBy(datas, "projectGLJID");    let evaluateKeyMap = {}; //关键字映射表    for (let e of datas) {      let eIndex = gljUtil.getIndex(e, gljUtil.materialKeyArray);      evaluateKeyMap[eIndex] = e;    }    for (let d of this.datas) {      if (d.select == 1) { //如果是选中状态        if (d[field] == 1) { //如果已经标记为承包人材料          let evl = evaluateMap[d.id];          if (evl) {            //这里应该是错误检查的保证,按正常是不应该出现这种情况的            if (evl.is_related != 1) tasks.push({              type: modelType,              doc: {                projectGLJID: d.id,                is_related: 1              },              action: "update",              ID: evl.ID            });          } else {            tasks.push(getNewEval(d, modelType))          }        } else { //如果不是暂估,要改成暂估          let pdata = {            id: d.id,            doc: {},            action: 'update',            type: "glj_list"          };          pdata.doc[field] = 1;          tasks.push(pdata);          let evaluate = evaluateKeyMap[gljUtil.getIndex(d, gljUtil.materialKeyArray)];          if (evaluate) { //如果已经存在5个关键字相同的暂估材料,则自动关联起来            let edata = {              type: modelType,              doc: {                projectGLJID: d.id,                is_related: 1              },              action: "update",              ID: evaluate.ID            };            tasks.push(edata);          } else { //如果不存在,则生成一条新的            tasks.push(getNewEval(d, modelType));          }        }      } else { //未选中状态的,检查一下是否存在关联的情况,取消关联        let tdoc = {};        tdoc[field] = 0;        if (d[field] == 1) tasks.push({          id: d.id,          doc: tdoc,          action: 'update',          type: "glj_list"        });        let evl = evaluateMap[d.id];        if (evl) {          if (evl.is_related == 1) tasks.push({            type: modelType,            doc: {              is_related: 0            },            action: "update",            ID: evl.ID          });        }        let evaluate = evaluateKeyMap[gljUtil.getIndex(d, gljUtil.materialKeyArray)];        if (evaluate) {          if (evaluate.is_related == 1) tasks.push({            type: modelType,            doc: {              is_related: 0            },            action: "update",            ID: evaluate.ID          });        }      }    }    if (tasks.length > 0) configMaterialObj.updateEvaluateMaterial(tasks);    function getNewEval(d, m_t) {      let ndata = {        type: m_t,        doc: {},        action: "add"      };      ndata.doc['ID'] = uuid.v1();      ndata.doc['projectGLJID'] = d.id;      ndata.doc['is_related'] = 1;      ndata.doc['seq'] = d.code;      ndata.doc['projectID'] = d.from.project_id;      ndata.doc['code'] = d.code;      ndata.doc['name'] = d.name;      ndata.doc['specs'] = d.specs;      ndata.doc['unit'] = d.unit;      ndata.doc['quantity'] = d.quantity;      ndata.doc['type'] = d.type;      ndata.doc['market_price'] = d.from.unit_price.market_price;      ndata.doc['originPlace'] = d.originPlace;      ndata.doc['vender'] = d.vender;      ndata.doc['remark'] = d.remark;      ndata.doc['supply'] = d.supply;      ndata.doc['riskCoe'] = "";      ndata.doc['standardPrice'] = d.from.unit_price.market_price;      ndata.doc['FO'] = "";      ndata.doc['FI'] = "";      return ndata;    }  }};$(function () {  $("#adjustType").change(function () {    materialAdjustObj.refreshSheetDatas();    let val = $(this).val();    let mixDatas = {      projectID: projectObj.project.projectInfo.ID,      updateType: 'update',      properties: {        'property.gljAdjustType': val      },      options: {},      labourCoes: {},      rations: [],      bills: []    };    CommonAjax.post('/pm/api/updateMixDatas', {      user_id: userID,      mixDataArr: mixDatas    }, function (rstData) {      projectObj.project.projectInfo.property.gljAdjustType = val;    });  });  $('#selectFromGLJ').on('shown.bs.modal', function (e) {    gljFromObj.checkType = "取消";    gljFromObj.initSpread();    gljFromObj.showDatas();  });  $(".glj_sel_input").change(function () {    let check = $(this).prop("checked");    if ($(this).val() == 0) { //勾选的是全选,其它的勾选项跟着改变      for (let a of $(".glj_sel_input")) {        $(a).prop("checked", check)      }    } else { //勾选其它选项      let a_checked = true;      for (let o of $(".glj_sel_input_other")) { //如果其它的有一个不勾选,则所有项也不打勾        if ($(o).prop("checked") === false) {          a_checked = false;          break;        }      }      $("#glj_sel_all").prop("checked", a_checked);    }    gljFromObj.showDatas();  });  $("#glj_sel_btn_find").click(function () {    gljFromObj.showDatas();  });  $(".glj_sel_check_btn").click(function () {    gljFromObj.checkType = $(this).text();    gljFromObj.refreshDatas();  })  $("#glj_sel_confirm").click(function () {    gljFromObj.confirmSelect();  })});
 |