|
@@ -94,12 +94,14 @@ let searchCodeList = [];
|
|
$(document).ready(() => {
|
|
$(document).ready(() => {
|
|
const changeSpreadSetting = {
|
|
const changeSpreadSetting = {
|
|
cols: [
|
|
cols: [
|
|
|
|
+ {title: '计价', colSpan: '1', rowSpan: '2', field: 'is_valuation', hAlign: 1, width: 50, cellType: 'checkbox', readOnly: 'readOnly.isEdit3'},
|
|
{title: '清单编号', colSpan: '1', rowSpan: '2', field: 'code', hAlign: 0, width: 80, formatter: '@', readOnly: 'readOnly.isEdit2'},
|
|
{title: '清单编号', colSpan: '1', rowSpan: '2', field: 'code', hAlign: 0, width: 80, formatter: '@', readOnly: 'readOnly.isEdit2'},
|
|
{title: '名称', colSpan: '1', rowSpan: '2', field: 'name', hAlign: 0, width: 120, formatter: '@', readOnly: 'readOnly.isEdit2'},
|
|
{title: '名称', colSpan: '1', rowSpan: '2', field: 'name', hAlign: 0, width: 120, formatter: '@', readOnly: 'readOnly.isEdit2'},
|
|
{title: '单位', colSpan: '1', rowSpan: '2', field: 'unit', hAlign: 1, width: 60, formatter: '@', readOnly: 'readOnly.isEdit2', cellType: 'unit', comboItems: changeUnits, comboEdit: true},
|
|
{title: '单位', colSpan: '1', rowSpan: '2', field: 'unit', hAlign: 1, width: 60, formatter: '@', readOnly: 'readOnly.isEdit2', cellType: 'unit', comboItems: changeUnits, comboEdit: true},
|
|
{title: '单价', colSpan: '1', rowSpan: '2', field: 'unit_price', hAlign: 2, width: 60, type: 'Number', readOnly: 'readOnly.isEdit2', getValue: 'getValue.unit_price'},
|
|
{title: '单价', colSpan: '1', rowSpan: '2', field: 'unit_price', hAlign: 2, width: 60, type: 'Number', readOnly: 'readOnly.isEdit2', getValue: 'getValue.unit_price'},
|
|
{title: '变更部位', colSpan: '1', rowSpan: '2', field: 'bwmx', hAlign: 0, width: 120, formatter: '@', readOnly: 'readOnly.isEdit2'},
|
|
{title: '变更部位', colSpan: '1', rowSpan: '2', field: 'bwmx', hAlign: 0, width: 120, formatter: '@', readOnly: 'readOnly.isEdit2'},
|
|
{title: '变更详情', colSpan: '1', rowSpan: '2', field: 'detail', hAlign: 0, width: 120, formatter: '@', readOnly: false},
|
|
{title: '变更详情', colSpan: '1', rowSpan: '2', field: 'detail', hAlign: 0, width: 120, formatter: '@', readOnly: false},
|
|
|
|
+ {title: '计量上限(%)', colSpan: '1', rowSpan: '2', field: 'delimit', hAlign: 2, width: 60, type: 'Number', readOnly: false, visible: openChangeState},
|
|
{title: '原设计|数量', colSpan: '2|1', rowSpan: '1|1', field: 'oamount', hAlign: 2, width: 60, type: 'Number', readOnly: 'readOnly.isEdit', getValue: 'getValue.oamount'},
|
|
{title: '原设计|数量', colSpan: '2|1', rowSpan: '1|1', field: 'oamount', hAlign: 2, width: 60, type: 'Number', readOnly: 'readOnly.isEdit', getValue: 'getValue.oamount'},
|
|
{title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'oa_tp', hAlign: 2, width: 80, type: 'Number', readOnly: true, getValue: 'getValue.oa_tp'},
|
|
{title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'oa_tp', hAlign: 2, width: 80, type: 'Number', readOnly: true, getValue: 'getValue.oa_tp'},
|
|
{title: '申请变更增(+)减(-)|数量', colSpan: '2|1', rowSpan: '1|1', field: 'camount', hAlign: 2, width: 60, type: 'Number', readOnly: false, getValue: 'getValue.camount'},
|
|
{title: '申请变更增(+)减(-)|数量', colSpan: '2|1', rowSpan: '1|1', field: 'camount', hAlign: 2, width: 60, type: 'Number', readOnly: false, getValue: 'getValue.camount'},
|
|
@@ -173,15 +175,20 @@ $(document).ready(() => {
|
|
isEdit2: function (data) {
|
|
isEdit2: function (data) {
|
|
return !readOnly && (data.lid != 0 || (data.lid == 0 && _.findIndex(changeUsedData, { cbid: data.id }) !== -1));
|
|
return !readOnly && (data.lid != 0 || (data.lid == 0 && _.findIndex(changeUsedData, { cbid: data.id }) !== -1));
|
|
},
|
|
},
|
|
|
|
+ isEdit3: function (data) {
|
|
|
|
+ return !readOnly && _.findIndex(changeUsedData, { cbid: data.id }) === -1;
|
|
|
|
+ },
|
|
},
|
|
},
|
|
};
|
|
};
|
|
// 数字只判断几个值(unit_price, oamount, camount)
|
|
// 数字只判断几个值(unit_price, oamount, camount)
|
|
- const numField = ['unit_price', 'oamount', 'camount'];
|
|
|
|
|
|
+ const numField = ['unit_price', 'oamount'];
|
|
const changeSpreadObj = {
|
|
const changeSpreadObj = {
|
|
makeSjsFooter: function () {
|
|
makeSjsFooter: function () {
|
|
// 增加汇总行并设为锁定禁止编辑状态
|
|
// 增加汇总行并设为锁定禁止编辑状态
|
|
changeSpreadSheet.addRows(changeSpreadSheet.getRowCount(), 1);
|
|
changeSpreadSheet.addRows(changeSpreadSheet.getRowCount(), 1);
|
|
changeSpreadSheet.setValue(changeSpreadSheet.getRowCount() - 1, 0, '合计');
|
|
changeSpreadSheet.setValue(changeSpreadSheet.getRowCount() - 1, 0, '合计');
|
|
|
|
+ const cellType1 = new GC.Spread.Sheets.CellTypes.Text();
|
|
|
|
+ changeSpreadSheet.getCell(changeSpreadSheet.getRowCount() - 1, 0).cellType(cellType1);
|
|
changeSpreadSheet.setStyle(changeSpreadSheet.getRowCount() - 1, -1, style1);
|
|
changeSpreadSheet.setStyle(changeSpreadSheet.getRowCount() - 1, -1, style1);
|
|
changeSpreadObj.countSum();
|
|
changeSpreadObj.countSum();
|
|
},
|
|
},
|
|
@@ -191,13 +198,13 @@ $(document).ready(() => {
|
|
cSum = 0,
|
|
cSum = 0,
|
|
cdSum = 0;
|
|
cdSum = 0;
|
|
for(var i = 0; i < rowCount - 1; i++){
|
|
for(var i = 0; i < rowCount - 1; i++){
|
|
- oSum = ZhCalc.add(oSum, changeSpreadSheet.getValue(i, 7));
|
|
|
|
- cSum = ZhCalc.add(cSum, changeSpreadSheet.getValue(i, 9));
|
|
|
|
- cdSum = ZhCalc.add(cdSum, changeSpreadSheet.getValue(i, 11));
|
|
|
|
|
|
+ oSum = ZhCalc.add(oSum, changeSpreadSheet.getValue(i, startLimit));
|
|
|
|
+ cSum = ZhCalc.add(cSum, changeSpreadSheet.getValue(i, startLimit + 2));
|
|
|
|
+ cdSum = ZhCalc.add(cdSum, changeSpreadSheet.getValue(i, startLimit + 4));
|
|
}
|
|
}
|
|
- changeSpreadSheet.setValue(changeSpreadSheet.getRowCount() - 1, 7, oSum !== 0 ? oSum : null);
|
|
|
|
- changeSpreadSheet.setValue(changeSpreadSheet.getRowCount() - 1, 9, cSum !== 0 ? cSum : null);
|
|
|
|
- changeSpreadSheet.setValue(changeSpreadSheet.getRowCount() - 1, 11, cdSum !== 0 ? cdSum : null);
|
|
|
|
|
|
+ changeSpreadSheet.setValue(changeSpreadSheet.getRowCount() - 1, startLimit, oSum !== 0 ? oSum : null);
|
|
|
|
+ changeSpreadSheet.setValue(changeSpreadSheet.getRowCount() - 1, startLimit + 2, cSum !== 0 ? cSum : null);
|
|
|
|
+ changeSpreadSheet.setValue(changeSpreadSheet.getRowCount() - 1, startLimit + 4, cdSum !== 0 ? cdSum : null);
|
|
},
|
|
},
|
|
add: function () {
|
|
add: function () {
|
|
let select = null;
|
|
let select = null;
|
|
@@ -236,6 +243,8 @@ $(document).ready(() => {
|
|
postData(window.location.pathname + '/save', {type: 'batchadd', num, postData: select ? select.order : null}, function (result) {
|
|
postData(window.location.pathname + '/save', {type: 'batchadd', num, postData: select ? select.order : null}, function (result) {
|
|
if (result) {
|
|
if (result) {
|
|
changeList = result;
|
|
changeList = result;
|
|
|
|
+ SpreadJsObj.initSpreadSettingEvents(changeSpreadSetting, changeCol);
|
|
|
|
+ SpreadJsObj.initSheet(changeSpreadSheet, changeSpreadSetting);
|
|
SpreadJsObj.loadSheetData(changeSpreadSheet, SpreadJsObj.DataType.Data, changeList);
|
|
SpreadJsObj.loadSheetData(changeSpreadSheet, SpreadJsObj.DataType.Data, changeList);
|
|
changeSpreadObj.makeSjsFooter();
|
|
changeSpreadObj.makeSjsFooter();
|
|
changeSpreadObj.resetXmjSpread();
|
|
changeSpreadObj.resetXmjSpread();
|
|
@@ -393,6 +402,15 @@ $(document).ready(() => {
|
|
}
|
|
}
|
|
SpreadJsObj.loadSheetData(xmjSpread.getActiveSheet(), SpreadJsObj.DataType.Data, xmj);
|
|
SpreadJsObj.loadSheetData(xmjSpread.getActiveSheet(), SpreadJsObj.DataType.Data, xmj);
|
|
},
|
|
},
|
|
|
|
+ editStarting: function (e, info) {
|
|
|
|
+ const col = info.sheet.zh_setting.cols[info.col];
|
|
|
|
+ const select = SpreadJsObj.getSelectObject(info.sheet);
|
|
|
|
+ if (col.field === 'camount') {
|
|
|
|
+ if (select.camount_expr && select.camount_expr !== '') {
|
|
|
|
+ info.sheet.getCell(info.row, info.col).text(select.camount_expr);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ },
|
|
selectionChanged: function (e, info) {
|
|
selectionChanged: function (e, info) {
|
|
const sel = info.sheet.getSelections()[0];
|
|
const sel = info.sheet.getSelections()[0];
|
|
const col = info.sheet.zh_setting.cols[sel.col];
|
|
const col = info.sheet.zh_setting.cols[sel.col];
|
|
@@ -400,6 +418,11 @@ $(document).ready(() => {
|
|
if (col && col.field === 'del_list' && data && !_.find(changeUsedData, { cbid: data.id })) {
|
|
if (col && col.field === 'del_list' && data && !_.find(changeUsedData, { cbid: data.id })) {
|
|
changeSpreadObj.del();
|
|
changeSpreadObj.del();
|
|
}
|
|
}
|
|
|
|
+ if (col && col.field === 'camount' && data) {
|
|
|
|
+ $('#camount-expr').removeAttr('readonly').val(data.camount_expr ? data.camount_expr : data.camount);
|
|
|
|
+ } else {
|
|
|
|
+ $('#camount-expr').attr('readonly', true).val('');
|
|
|
|
+ }
|
|
changeSpreadObj.resetXmjSpread(data);
|
|
changeSpreadObj.resetXmjSpread(data);
|
|
changeSpreadObj.refreshActn();
|
|
changeSpreadObj.refreshActn();
|
|
},
|
|
},
|
|
@@ -439,34 +462,47 @@ $(document).ready(() => {
|
|
if (info.sheet.zh_setting) {
|
|
if (info.sheet.zh_setting) {
|
|
const select = SpreadJsObj.getSelectObject(info.sheet);
|
|
const select = SpreadJsObj.getSelectObject(info.sheet);
|
|
const col = info.sheet.zh_setting.cols[info.col];
|
|
const col = info.sheet.zh_setting.cols[info.col];
|
|
- if (col.field === 'del_list') {
|
|
|
|
|
|
+ if (col.field === 'del_list' || col.field === 'is_valuation') {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- // 未改变值则不提交
|
|
|
|
let validText = is_numeric(info.editingText) && _.indexOf(numField, col.field) !== -1 ? parseFloat(info.editingText) : (info.editingText ? trimInvalidChar(info.editingText) : '');
|
|
let validText = is_numeric(info.editingText) && _.indexOf(numField, col.field) !== -1 ? parseFloat(info.editingText) : (info.editingText ? trimInvalidChar(info.editingText) : '');
|
|
- const orgValue = select[col.field];
|
|
|
|
- if (orgValue == validText || ((!orgValue || orgValue === '') && (validText === ''))) {
|
|
|
|
|
|
+ let orgValue;
|
|
|
|
+ if (col.field === 'camount') {
|
|
|
|
+ orgValue = validText && validText !== ''
|
|
|
|
+ ? (_.toNumber(validText) ? select.camount : select.camount_expr)
|
|
|
|
+ : (select.camount_expr && select.camount_expr !== '' ? select.camount_expr : select.camount);
|
|
|
|
+ } else {
|
|
|
|
+ orgValue = select[col.field];
|
|
|
|
+ }
|
|
|
|
+ if (orgValue == validText || ((!orgValue || orgValue === '') && (validText === '' || validText === null))) {
|
|
SpreadJsObj.reLoadRowData(info.sheet, info.row);
|
|
SpreadJsObj.reLoadRowData(info.sheet, info.row);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
+ // // 未改变值则不提交
|
|
|
|
+ // let validText = is_numeric(info.editingText) && _.indexOf(numField, col.field) !== -1 ? parseFloat(info.editingText) : (info.editingText ? trimInvalidChar(info.editingText) : '');
|
|
|
|
+ // const orgValue = select[col.field];
|
|
|
|
+ // if (orgValue == validText || ((!orgValue || orgValue === '') && (validText === ''))) {
|
|
|
|
+ // SpreadJsObj.reLoadRowData(info.sheet, info.row);
|
|
|
|
+ // return;
|
|
|
|
+ // }
|
|
// 判断部分值是否输入的是数字判断和数据计算
|
|
// 判断部分值是否输入的是数字判断和数据计算
|
|
- if (col.type === 'Number') {
|
|
|
|
- if (isNaN(validText)) {
|
|
|
|
- toastr.error('不能输入其它非数字类型字符');
|
|
|
|
|
|
+ if(col.field === 'camount') {
|
|
|
|
+ const exprQuantity = {
|
|
|
|
+ expr: '',
|
|
|
|
+ quantity: 0,
|
|
|
|
+ };
|
|
|
|
+ const [valid, msg] = changeSpreadObj._checkExpr(validText, exprQuantity);
|
|
|
|
+ if (!valid) {
|
|
|
|
+ toastr.error(msg);
|
|
SpreadJsObj.reLoadRowData(info.sheet, info.row);
|
|
SpreadJsObj.reLoadRowData(info.sheet, info.row);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- if (col.field === 'unit_price') {
|
|
|
|
- validText = ZhCalc.round(validText, unitPriceUnit);
|
|
|
|
- } else {
|
|
|
|
- validText = ZhCalc.round(validText, findDecimal(select.unit)) || 0;
|
|
|
|
|
|
+ if (isNaN(exprQuantity.quantity)) {
|
|
|
|
+ toastr.error('不能输入其它非数字类型字符');
|
|
|
|
+ SpreadJsObj.reLoadRowData(info.sheet, info.row);
|
|
|
|
+ return;
|
|
}
|
|
}
|
|
- }
|
|
|
|
- if (col.field === 'unit') {
|
|
|
|
- select.camount = ZhCalc.round(select.camount, findDecimal(validText)) || 0;
|
|
|
|
- select.oamount = ZhCalc.round(select.oamount, findDecimal(validText)) || 0;
|
|
|
|
- }
|
|
|
|
- if(col.field === 'camount') {
|
|
|
|
|
|
+ validText = parseFloat(exprQuantity.quantity);
|
|
// 判断是否 正数必须大于等于限制值,负数必须小于等于限制值,否则无法更改
|
|
// 判断是否 正数必须大于等于限制值,负数必须小于等于限制值,否则无法更改
|
|
const usedInfo = _.find(changeUsedData, { cbid: select.id });
|
|
const usedInfo = _.find(changeUsedData, { cbid: select.id });
|
|
if (usedInfo && usedInfo.qty >= 0 && validText < usedInfo.qty) {
|
|
if (usedInfo && usedInfo.qty >= 0 && validText < usedInfo.qty) {
|
|
@@ -479,6 +515,41 @@ $(document).ready(() => {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
select.spamount = ZhCalc.round(validText, findDecimal(select.unit)) || 0;
|
|
select.spamount = ZhCalc.round(validText, findDecimal(select.unit)) || 0;
|
|
|
|
+ select.camount_expr = exprQuantity.expr;
|
|
|
|
+ }
|
|
|
|
+ if (col.type === 'Number') {
|
|
|
|
+ if (isNaN(validText)) {
|
|
|
|
+ toastr.error('不能输入其它非数字类型字符');
|
|
|
|
+ SpreadJsObj.reLoadRowData(info.sheet, info.row);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ if (col.field === 'unit_price') {
|
|
|
|
+ validText = ZhCalc.round(validText, unitPriceUnit);
|
|
|
|
+ } else {
|
|
|
|
+ validText = ZhCalc.round(validText, findDecimal(select.unit)) || 0;
|
|
|
|
+ }
|
|
|
|
+ if (col.field === 'delimit') {
|
|
|
|
+ const reg = /^(\d{1,2}|100)$/;
|
|
|
|
+ if (!(_.isNumber(validText) && reg.test(validText))) {
|
|
|
|
+ toastr.error('计量上限默认值只能输入0-100之间的整数');
|
|
|
|
+ SpreadJsObj.reLoadRowData(info.sheet, info.row);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ // 需要判断是否已调用,已调用的则不能低于原有值大小
|
|
|
|
+ const usedInfo = _.find(changeUsedData, { cbid: select.id });
|
|
|
|
+ if (usedInfo && usedInfo.qty) {
|
|
|
|
+ const minLimit = Math.ceil(ZhCalc.mul(ZhCalc.div(usedInfo.qty, select.camount), 100));
|
|
|
|
+ if (validText < minLimit) {
|
|
|
|
+ toastr.error('计量上限值至少大于等于 ' + minLimit);
|
|
|
|
+ SpreadJsObj.reLoadRowData(info.sheet, info.row);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (col.field === 'unit') {
|
|
|
|
+ select.camount = ZhCalc.round(select.camount, findDecimal(validText)) || 0;
|
|
|
|
+ select.oamount = ZhCalc.round(select.oamount, findDecimal(validText)) || 0;
|
|
}
|
|
}
|
|
select[col.field] = validText;
|
|
select[col.field] = validText;
|
|
// console.log(select);
|
|
// console.log(select);
|
|
@@ -505,7 +576,7 @@ $(document).ready(() => {
|
|
};
|
|
};
|
|
const range = info.cellRange;
|
|
const range = info.cellRange;
|
|
const sortData = info.sheet.zh_data || [];
|
|
const sortData = info.sheet.zh_data || [];
|
|
- if (info.cellRange.row + info.cellRange.rowCount > sortData.length) {
|
|
|
|
|
|
+ if (range.row + range.rowCount > sortData.length) {
|
|
toastMessageUniq(hint.cellError);
|
|
toastMessageUniq(hint.cellError);
|
|
// SpreadJsObj.loadSheetData(materialSpread.getActiveSheet(), SpreadJsObj.DataType.Data, materialBillsData);
|
|
// SpreadJsObj.loadSheetData(materialSpread.getActiveSheet(), SpreadJsObj.DataType.Data, materialBillsData);
|
|
SpreadJsObj.reLoadSheetHeader(changeSpreadSheet);
|
|
SpreadJsObj.reLoadSheetHeader(changeSpreadSheet);
|
|
@@ -513,7 +584,7 @@ $(document).ready(() => {
|
|
changeSpreadObj.makeSjsFooter();
|
|
changeSpreadObj.makeSjsFooter();
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- if (sortData.length > 0 && range.col + range.colCount > 10) {
|
|
|
|
|
|
+ if (sortData.length > 0 && range.col + range.colCount > 14) {
|
|
toastMessageUniq(hint.cellError);
|
|
toastMessageUniq(hint.cellError);
|
|
SpreadJsObj.reLoadSheetHeader(changeSpreadSheet);
|
|
SpreadJsObj.reLoadSheetHeader(changeSpreadSheet);
|
|
SpreadJsObj.reLoadSheetData(changeSpreadSheet);
|
|
SpreadJsObj.reLoadSheetData(changeSpreadSheet);
|
|
@@ -529,12 +600,12 @@ $(document).ready(() => {
|
|
const curRow = range.row + iRow;
|
|
const curRow = range.row + iRow;
|
|
// const materialData = JSON.parse(JSON.stringify(sortData[curRow]));
|
|
// const materialData = JSON.parse(JSON.stringify(sortData[curRow]));
|
|
const cLData = { id: sortData[curRow].id };
|
|
const cLData = { id: sortData[curRow].id };
|
|
- const hintRow = range.rowCount > 1 ? curRow : '';
|
|
|
|
|
|
+ const hintRow = range.rowCount >= 1 ? curRow : '';
|
|
let sameCol = 0;
|
|
let sameCol = 0;
|
|
for (let iCol = 0; iCol < range.colCount; iCol++) {
|
|
for (let iCol = 0; iCol < range.colCount; iCol++) {
|
|
const curCol = range.col + iCol;
|
|
const curCol = range.col + iCol;
|
|
let colSetting = info.sheet.zh_setting.cols[curCol];
|
|
let colSetting = info.sheet.zh_setting.cols[curCol];
|
|
- if ((needColAdd && curCol > 5) || (needCopyIgnore && curCol === 5)) { // 要判断是否已隐藏了变更详情,是则变更详情后面的curCol要+1
|
|
|
|
|
|
+ if ((needColAdd && curCol > 6) || (needCopyIgnore && curCol === 6)) { // 要判断是否已隐藏了变更详情,是则变更详情后面的curCol要+1
|
|
const newCurCol = curCol + 1;
|
|
const newCurCol = curCol + 1;
|
|
needColAdd = true;
|
|
needColAdd = true;
|
|
colSetting = info.sheet.zh_setting.cols[newCurCol];
|
|
colSetting = info.sheet.zh_setting.cols[newCurCol];
|
|
@@ -543,7 +614,14 @@ $(document).ready(() => {
|
|
|
|
|
|
let validText = info.sheet.getText(curRow, curCol);
|
|
let validText = info.sheet.getText(curRow, curCol);
|
|
validText = is_numeric(validText) && _.indexOf(numField, colSetting.field) !== -1 ? parseFloat(validText) : (validText ? trimInvalidChar(validText) : '');
|
|
validText = is_numeric(validText) && _.indexOf(numField, colSetting.field) !== -1 ? parseFloat(validText) : (validText ? trimInvalidChar(validText) : '');
|
|
- const orgValue = sortData[curRow][colSetting.field];
|
|
|
|
|
|
+ let orgValue;
|
|
|
|
+ if (colSetting.field === 'camount') {
|
|
|
|
+ orgValue = validText && validText !== ''
|
|
|
|
+ ? (_.toNumber(validText) ? sortData[curRow].camount : sortData[curRow].camount_expr)
|
|
|
|
+ : (sortData[curRow].camount_expr && sortData[curRow].camount_expr !== '' ? sortData[curRow].camount_expr : sortData[curRow].camount);
|
|
|
|
+ } else {
|
|
|
|
+ orgValue = sortData[curRow][colSetting.field];
|
|
|
|
+ }
|
|
if (orgValue == validText || ((!orgValue || orgValue === '') && (validText === ''))) {
|
|
if (orgValue == validText || ((!orgValue || orgValue === '') && (validText === ''))) {
|
|
sameCol++;
|
|
sameCol++;
|
|
if (range.colCount === sameCol) {
|
|
if (range.colCount === sameCol) {
|
|
@@ -552,6 +630,37 @@ $(document).ready(() => {
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if(colSetting.field === 'camount') {
|
|
|
|
+ const exprQuantity = {
|
|
|
|
+ expr: '',
|
|
|
|
+ quantity: 0,
|
|
|
|
+ };
|
|
|
|
+ const [valid, msg] = changeSpreadObj._checkExpr(validText, exprQuantity);
|
|
|
|
+ if (!valid) {
|
|
|
|
+ toastMessageUniq(getPasteHint(msg, hintRow));
|
|
|
|
+ bPaste = false;
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ if (isNaN(exprQuantity.quantity)) {
|
|
|
|
+ toastMessageUniq(getPasteHint(hint.numberExpr, hintRow));
|
|
|
|
+ bPaste = false;
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ validText = parseFloat(exprQuantity.quantity);
|
|
|
|
+ // 判断是否 正数必须大于等于限制值,负数必须小于等于限制值,否则无法更改
|
|
|
|
+ const usedInfo = _.find(changeUsedData, { cbid: sortData[curRow].id });
|
|
|
|
+ if (usedInfo && usedInfo.qty >= 0 && validText < usedInfo.qty) {
|
|
|
|
+ toastr.error(hintRow ? '清单第' + (hintRow+1) + '行变更数值必须大于等于已调用值 ' + usedInfo.qty : '清单变更数值必须大于等于已调用值 ' + usedInfo.qty);
|
|
|
|
+ bPaste = false;
|
|
|
|
+ continue;
|
|
|
|
+ } else if (usedInfo && usedInfo.qty < 0 && validText > usedInfo.qty) {
|
|
|
|
+ toastr.error(hintRow ? '清单第' + (hintRow+1) + '行变更数值必须小于等于已调用值 ' + usedInfo.qty : '清单变更数值必须小于等于已调用值 ' + usedInfo.qty);
|
|
|
|
+ bPaste = false;
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ cLData.camount_expr = exprQuantity.expr;
|
|
|
|
+ sortData[curRow].camount_expr = exprQuantity.expr;
|
|
|
|
+ }
|
|
if (colSetting.type === 'Number') {
|
|
if (colSetting.type === 'Number') {
|
|
if (isNaN(validText)) {
|
|
if (isNaN(validText)) {
|
|
toastMessageUniq(getPasteHint(hint.numberExpr, hintRow));
|
|
toastMessageUniq(getPasteHint(hint.numberExpr, hintRow));
|
|
@@ -563,18 +672,23 @@ $(document).ready(() => {
|
|
} else {
|
|
} else {
|
|
validText = ZhCalc.round(validText, findDecimal(sortData[curRow].unit)) || 0;
|
|
validText = ZhCalc.round(validText, findDecimal(sortData[curRow].unit)) || 0;
|
|
}
|
|
}
|
|
- if(colSetting.field === 'camount') {
|
|
|
|
- // 判断是否 正数必须大于等于限制值,负数必须小于等于限制值,否则无法更改
|
|
|
|
- const usedInfo = _.find(changeUsedData, { cbid: sortData[curRow].id });
|
|
|
|
- if (usedInfo && usedInfo.qty >= 0 && validText < usedInfo.qty) {
|
|
|
|
- toastr.error(hintRow ? '清单' + (hintRow+1) + '行变更数值必须大于等于已调用值 ' + usedInfo.qty : '清单变更数值必须大于等于已调用值 ' + usedInfo.qty);
|
|
|
|
- bPaste = false;
|
|
|
|
- continue;
|
|
|
|
- } else if (usedInfo && usedInfo.qty < 0 && validText > usedInfo.qty) {
|
|
|
|
- toastr.error(hintRow ? '清单' + (hintRow+1) + '行变更数值必须小于等于已调用值 ' + usedInfo.qty : '清单变更数值必须小于等于已调用值 ' + usedInfo.qty);
|
|
|
|
|
|
+ if (colSetting.field === 'delimit') {
|
|
|
|
+ const reg = /^(\d{1,2}|100)$/;
|
|
|
|
+ if (!(_.isNumber(validText) && reg.test(validText))) {
|
|
|
|
+ toastr.error('清单第' + (hintRow+1) + '行计量上限默认值只能粘贴0-100之间的整数');
|
|
bPaste = false;
|
|
bPaste = false;
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
+ // 需要判断是否已调用,已调用的则不能低于原有值大小
|
|
|
|
+ const usedInfo = _.find(changeUsedData, { cbid: sortData[curRow].id });
|
|
|
|
+ if (usedInfo && usedInfo.qty) {
|
|
|
|
+ const minLimit = Math.ceil(ZhCalc.mul(ZhCalc.div(usedInfo.qty, sortData[curRow].camount), 100));
|
|
|
|
+ if (validText < minLimit) {
|
|
|
|
+ toastr.error('清单第' + (hintRow+1) + '行计量上限值至少大于等于 ' + minLimit);
|
|
|
|
+ bPaste = false;
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
let unitdecimal = validText;
|
|
let unitdecimal = validText;
|
|
@@ -615,10 +729,159 @@ $(document).ready(() => {
|
|
return;
|
|
return;
|
|
});
|
|
});
|
|
},
|
|
},
|
|
|
|
+ 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_valuation') {
|
|
|
|
+ if (info.sheet.isEditing()) {
|
|
|
|
+ info.sheet.endEdit(true);
|
|
|
|
+ }
|
|
|
|
+ if (_.findIndex(changeUsedData, { cbid: select.id }) !== -1) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ select.is_valuation = info.sheet.getValue(info.row, info.col) ? 0 : 1;
|
|
|
|
+ delete select.waitingLoading;
|
|
|
|
+ // 更新至服务器
|
|
|
|
+ postData(window.location.pathname + '/save', { type:'update', updateData: select }, function (result) {
|
|
|
|
+ changeList.splice(info.row, 1, select);
|
|
|
|
+ SpreadJsObj.reLoadRowData(info.sheet, info.row);
|
|
|
|
+ }, function () {
|
|
|
|
+ select.is_valuation = info.sheet.getValue(info.row, info.col) ? 1 : 0;
|
|
|
|
+ SpreadJsObj.reLoadRowData(info.sheet, info.row);
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ },
|
|
valueChanged(e, info) {
|
|
valueChanged(e, info) {
|
|
// 防止ctrl+z撤销数据
|
|
// 防止ctrl+z撤销数据
|
|
SpreadJsObj.reLoadRowData(info.sheet, info.row);
|
|
SpreadJsObj.reLoadRowData(info.sheet, info.row);
|
|
- }
|
|
|
|
|
|
+ },
|
|
|
|
+ _checkExprValid(expr) {
|
|
|
|
+ if (!expr) return [true, null];
|
|
|
|
+ const param = [];
|
|
|
|
+ let num = '', base = '';
|
|
|
|
+ for (let i = 0, iLen = expr.length; i < iLen; i++) {
|
|
|
|
+ if (/^[\d\.%]+/.test(expr[i])) {
|
|
|
|
+ if (base !== '') {
|
|
|
|
+ param.push({type: 'base', value: base});
|
|
|
|
+ base = '';
|
|
|
|
+ }
|
|
|
|
+ num = num + expr[i];
|
|
|
|
+ } else if (expr[i] === '(') {
|
|
|
|
+ if (num !== '') {
|
|
|
|
+ param.push({type: 'num', value: num});
|
|
|
|
+ num = '';
|
|
|
|
+ }
|
|
|
|
+ if (base !== '') {
|
|
|
|
+ param.push({type: 'base', value: base});
|
|
|
|
+ base = '';
|
|
|
|
+ }
|
|
|
|
+ param.push({type: 'left', value: '('});
|
|
|
|
+ } else if (expr[i] === ')') {
|
|
|
|
+ if (num !== '') {
|
|
|
|
+ param.push({type: 'num', value: num});
|
|
|
|
+ num = '';
|
|
|
|
+ }
|
|
|
|
+ if (base !== '') {
|
|
|
|
+ param.push({type: 'base', value: base});
|
|
|
|
+ base = '';
|
|
|
|
+ }
|
|
|
|
+ param.push({type: 'right', value: ')'});
|
|
|
|
+ } else if (/^[\+\-*\/]/.test(expr[i])) {
|
|
|
|
+ if (num !== '') {
|
|
|
|
+ param.push({type: 'num', value: num});
|
|
|
|
+ num = '';
|
|
|
|
+ }
|
|
|
|
+ if (base !== '') {
|
|
|
|
+ param.push({type: 'base', value: base});
|
|
|
|
+ base = '';
|
|
|
|
+ }
|
|
|
|
+ param.push({type: 'calc', value: expr[i]});
|
|
|
|
+ } else {
|
|
|
|
+ return [false, '输入的表达式含有非法字符: ' + expr[i]];
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (num !== '') {
|
|
|
|
+ param.push({type: 'num', value: num});
|
|
|
|
+ num = '';
|
|
|
|
+ }
|
|
|
|
+ if (base !== '') {
|
|
|
|
+ param.push({type: 'base', value: base});
|
|
|
|
+ base = '';
|
|
|
|
+ }
|
|
|
|
+ if (param.length === 0) return true;
|
|
|
|
+ if (param.length > 1) {
|
|
|
|
+ if (param[0].value === '-') {
|
|
|
|
+ param[1].value = '-' + param[1];
|
|
|
|
+ }
|
|
|
|
+ param.unshift();
|
|
|
|
+ }
|
|
|
|
+ const iLen = param.length;
|
|
|
|
+ let iLeftCount = 0, iRightCount = 0;
|
|
|
|
+ for (const [i, p] of param.entries()) {
|
|
|
|
+ if (p.type === 'calc') {
|
|
|
|
+ if (i === 0 || i === iLen - 1)
|
|
|
|
+ return [false, '输入的表达式非法:计算符号' + p.value + '前后应有数字'];
|
|
|
|
+ }
|
|
|
|
+ if (p.type === 'num') {
|
|
|
|
+ num = p.value.replace('%', '');
|
|
|
|
+ if (p.value.length - num.length > 1)
|
|
|
|
+ return [false, '输入的表达式非法:' + p.value + '不是一个有效的数字'];
|
|
|
|
+ num = _.toNumber(num);
|
|
|
|
+ if (num === undefined || num === null || _.isNaN(num))
|
|
|
|
+ return [false, '输入的表达式非法:' + p.value + '不是一个有效的数字'];
|
|
|
|
+ if (i > 0) {
|
|
|
|
+ if (param[i - 1].type !== 'calc' && param[i - 1].type !== 'left') {
|
|
|
|
+ return [false, '输入的表达式非法:' + p.value + '前应有运算符'];
|
|
|
|
+ } else if (param[i - 1].value === '/' && num === 0) {
|
|
|
|
+ return [false, '输入的表达式非法:请勿除0'];
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (p.type === 'base') {
|
|
|
|
+ if (i > 0 && (param[i - 1].type === 'num' || param[i - 1].type === 'right'))
|
|
|
|
+ return [false, '输入的表达式非法:' + p.value + '前应有运算符'];
|
|
|
|
+ }
|
|
|
|
+ if (p.type === 'left') {
|
|
|
|
+ iLeftCount += 1;
|
|
|
|
+ if (i !== 0 && param[i-1].type !== 'calc')
|
|
|
|
+ return [false, '输入的表达式非法:(前应有运算符'];
|
|
|
|
+ }
|
|
|
|
+ if (p.type === 'right') {
|
|
|
|
+ iRightCount += 1;
|
|
|
|
+ if (i !== iLen - 1 && param[i+1].type !== 'calc')
|
|
|
|
+ return [false, '输入的表达式非法:)后应有运算符'];
|
|
|
|
+ if (iRightCount > iLeftCount)
|
|
|
|
+ return [false, '输入的表达式非法:")"前无对应的"("'];
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (iLeftCount > iRightCount)
|
|
|
|
+ return [false, '输入的表达式非法:"("后无对应的")"'];
|
|
|
|
+ return [true, ''];
|
|
|
|
+ },
|
|
|
|
+ _checkExpr: function (text, data) {
|
|
|
|
+ if (text) {
|
|
|
|
+ const num = _.toNumber(text);
|
|
|
|
+ if (num) {
|
|
|
|
+ data.quantity = num;
|
|
|
|
+ data.expr = '';
|
|
|
|
+ } else {
|
|
|
|
+ const expr = $.trim(text).replace('\t', '').replace('=', '').toLowerCase();
|
|
|
|
+ const [valid, msg] = this._checkExprValid(expr);
|
|
|
|
+ if (!valid) return [valid, msg];
|
|
|
|
+ data.expr = expr;
|
|
|
|
+ data.quantity = ZhCalc.calcExpr.calcExprStrRpn(expr.replace('%', '/100'));
|
|
|
|
+ // const ce = new CalcEvalMin();
|
|
|
|
+ // data.quantity = ce.eval(expr);
|
|
|
|
+ // console.log(data.quantity);
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ data.quantity = 0;
|
|
|
|
+ data.expr = '';
|
|
|
|
+ }
|
|
|
|
+ return [true, ''];
|
|
|
|
+ },
|
|
};
|
|
};
|
|
|
|
|
|
const preUrl = window.location.pathname.split('/').slice(0, 4).join('/');
|
|
const preUrl = window.location.pathname.split('/').slice(0, 4).join('/');
|
|
@@ -736,18 +999,20 @@ $(document).ready(() => {
|
|
$('#up-move').click(changeSpreadObj.upMove);
|
|
$('#up-move').click(changeSpreadObj.upMove);
|
|
$('#down-move').click(changeSpreadObj.downMove);
|
|
$('#down-move').click(changeSpreadObj.downMove);
|
|
changeSpread.bind(spreadNS.Events.EditEnded, changeSpreadObj.editEnded);
|
|
changeSpread.bind(spreadNS.Events.EditEnded, changeSpreadObj.editEnded);
|
|
|
|
+ changeSpread.bind(spreadNS.Events.EditStarting, changeSpreadObj.editStarting);
|
|
changeSpread.bind(spreadNS.Events.SelectionChanged, changeSpreadObj.selectionChanged);
|
|
changeSpread.bind(spreadNS.Events.SelectionChanged, changeSpreadObj.selectionChanged);
|
|
changeSpread.bind(spreadNS.Events.ClipboardPasted, changeSpreadObj.clipboardPasted);
|
|
changeSpread.bind(spreadNS.Events.ClipboardPasted, changeSpreadObj.clipboardPasted);
|
|
changeSpread.bind(spreadNS.Events.ValueChanged, changeSpreadObj.valueChanged);
|
|
changeSpread.bind(spreadNS.Events.ValueChanged, changeSpreadObj.valueChanged);
|
|
|
|
+ changeSpread.bind(spreadNS.Events.ButtonClicked, changeSpreadObj.buttonClicked);
|
|
SpreadJsObj.addDeleteBind(changeSpread, changeSpreadObj.deletePress);
|
|
SpreadJsObj.addDeleteBind(changeSpread, changeSpreadObj.deletePress);
|
|
- changeSpreadSheet.getCell(-1, 12).foreColor('#dc3545');
|
|
|
|
|
|
+ changeSpreadSheet.getCell(-1, startLimit + 5).foreColor('#dc3545');
|
|
const delCommand = {
|
|
const delCommand = {
|
|
canUndo: false,
|
|
canUndo: false,
|
|
execute: function (context, options, isUndo) {
|
|
execute: function (context, options, isUndo) {
|
|
const Commands = GC.Spread.Sheets.Commands;
|
|
const Commands = GC.Spread.Sheets.Commands;
|
|
const sel = changeSpreadSheet.getSelections()[0];
|
|
const sel = changeSpreadSheet.getSelections()[0];
|
|
const col = changeSpreadSheet.zh_setting.cols[sel.col];
|
|
const col = changeSpreadSheet.zh_setting.cols[sel.col];
|
|
- if (col && col.field !== 'changed_tp') {
|
|
|
|
|
|
+ if (col && col.field !== 'sa_tp') {
|
|
isUndo = true;
|
|
isUndo = true;
|
|
}
|
|
}
|
|
if (isUndo) {
|
|
if (isUndo) {
|
|
@@ -837,7 +1102,7 @@ $(document).ready(() => {
|
|
name: '添加空白清单',
|
|
name: '添加空白清单',
|
|
icon: 'fa-sign-in',
|
|
icon: 'fa-sign-in',
|
|
visible: function () {
|
|
visible: function () {
|
|
- return changeOrder === 0;
|
|
|
|
|
|
+ return changeOrder === 0 && openChangeWhiteList;
|
|
},
|
|
},
|
|
callback: function (key, opt) {
|
|
callback: function (key, opt) {
|
|
changeSpreadObj.add(changeSpreadSheet);
|
|
changeSpreadObj.add(changeSpreadSheet);
|
|
@@ -849,7 +1114,7 @@ $(document).ready(() => {
|
|
value: '2',
|
|
value: '2',
|
|
icon: 'fa-sign-in',
|
|
icon: 'fa-sign-in',
|
|
visible: function () {
|
|
visible: function () {
|
|
- return changeOrder === 0;
|
|
|
|
|
|
+ return changeOrder === 0 && openChangeWhiteList;
|
|
},
|
|
},
|
|
batchInsert: function (obj, root) {
|
|
batchInsert: function (obj, root) {
|
|
if (_.toNumber(obj.value) > _.toNumber(obj.max)) {
|
|
if (_.toNumber(obj.value) > _.toNumber(obj.max)) {
|
|
@@ -890,7 +1155,7 @@ $(document).ready(() => {
|
|
name: '插入空白清单',
|
|
name: '插入空白清单',
|
|
icon: 'fa-sign-in',
|
|
icon: 'fa-sign-in',
|
|
visible: function () {
|
|
visible: function () {
|
|
- return changeOrder === 1;
|
|
|
|
|
|
+ return changeOrder === 1 && openChangeWhiteList;
|
|
},
|
|
},
|
|
// disabled: function (key, opt) {
|
|
// disabled: function (key, opt) {
|
|
// const select = SpreadJsObj.getSelectObject(changeSpreadSheet);
|
|
// const select = SpreadJsObj.getSelectObject(changeSpreadSheet);
|
|
@@ -913,7 +1178,7 @@ $(document).ready(() => {
|
|
value: '2',
|
|
value: '2',
|
|
icon: 'fa-sign-in',
|
|
icon: 'fa-sign-in',
|
|
visible: function () {
|
|
visible: function () {
|
|
- return changeOrder === 1;
|
|
|
|
|
|
+ return changeOrder === 1 && openChangeWhiteList;
|
|
},
|
|
},
|
|
// disabled: function (key, opt) {
|
|
// disabled: function (key, opt) {
|
|
// const select = SpreadJsObj.getSelectObject(changeSpreadSheet);
|
|
// const select = SpreadJsObj.getSelectObject(changeSpreadSheet);
|
|
@@ -974,6 +1239,70 @@ $(document).ready(() => {
|
|
},
|
|
},
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
+
|
|
|
|
+ // 表达式判断
|
|
|
|
+ $('#camount-expr').change(function () {
|
|
|
|
+ if (this.readOnly) return;
|
|
|
|
+ let validText = $(this).val();
|
|
|
|
+ const sel = changeSpreadSheet.getSelections()[0];
|
|
|
|
+ const row = sel ? sel.row : -1;
|
|
|
|
+ const col = changeSpreadSheet.zh_setting.cols[sel.col];
|
|
|
|
+ if (row === -1 || !(col && col.field === 'camount')) return;
|
|
|
|
+ const select = SpreadJsObj.getSelectObject(changeSpreadSheet);
|
|
|
|
+ if (!select) return;
|
|
|
|
+ validText = is_numeric(validText) ? parseFloat(validText) : (validText ? trimInvalidChar(validText) : '');
|
|
|
|
+ let orgValue = validText && validText !== ''
|
|
|
|
+ ? (_.toNumber(validText) ? select.camount : select.camount_expr)
|
|
|
|
+ : (select.camount_expr && select.camount_expr !== '' ? select.camount_expr : select.camount);
|
|
|
|
+ const orgExprValue = _.clone(select.camount_expr);
|
|
|
|
+ if (orgValue == validText || ((!orgValue || orgValue === '') && (validText === '' || validText === null))) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ const exprQuantity = {
|
|
|
|
+ expr: '',
|
|
|
|
+ quantity: 0,
|
|
|
|
+ };
|
|
|
|
+ const [valid, msg] = changeSpreadObj._checkExpr(validText, exprQuantity);
|
|
|
|
+ if (!valid) {
|
|
|
|
+ toastr.error(msg);
|
|
|
|
+ $(this).val(select.camount_expr ? select.camount_expr : select.camount);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ if (isNaN(exprQuantity.quantity)) {
|
|
|
|
+ toastr.error('不能输入其它非数字类型字符');
|
|
|
|
+ $(this).val(select.camount_expr ? select.camount_expr : select.camount);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ validText = parseFloat(exprQuantity.quantity);
|
|
|
|
+ // 判断是否 正数必须大于等于限制值,负数必须小于等于限制值,否则无法更改
|
|
|
|
+ const usedInfo = _.find(changeUsedData, { cbid: select.id });
|
|
|
|
+ if (usedInfo && usedInfo.qty >= 0 && validText < usedInfo.qty) {
|
|
|
|
+ toastr.error('清单变更数值必须大于等于已调用值 ' + usedInfo.qty);
|
|
|
|
+ $(this).val(select.camount_expr ? select.camount_expr : select.camount);
|
|
|
|
+ return;
|
|
|
|
+ } else if (usedInfo && usedInfo.qty < 0 && validText > usedInfo.qty) {
|
|
|
|
+ toastr.error('清单变更数值必须小于等于已调用值 ' + usedInfo.qty);
|
|
|
|
+ $(this).val(select.camount_expr ? select.camount_expr : select.camount);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ select.spamount = ZhCalc.round(validText, findDecimal(select.unit)) || 0;
|
|
|
|
+ select.camount_expr = exprQuantity.expr;
|
|
|
|
+ select.camount = validText;
|
|
|
|
+ // console.log(select);
|
|
|
|
+ delete select.waitingLoading;
|
|
|
|
+
|
|
|
|
+ // 更新至服务器
|
|
|
|
+ postData(window.location.pathname + '/save', { type:'update', updateData: select }, function (result) {
|
|
|
|
+ changeList.splice(row, 1, select);
|
|
|
|
+ SpreadJsObj.reLoadRowData(changeSpreadSheet, row);
|
|
|
|
+ changeSpreadObj.countSum();
|
|
|
|
+ }, function () {
|
|
|
|
+ select.camount = orgValue;
|
|
|
|
+ select.camount_expr = orgExprValue;
|
|
|
|
+ select.spamount = orgValue;
|
|
|
|
+ SpreadJsObj.reLoadRowData(changeSpreadSheet, row);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
}
|
|
}
|
|
|
|
|
|
// 清单选中和移除
|
|
// 清单选中和移除
|
|
@@ -986,7 +1315,7 @@ $(document).ready(() => {
|
|
const data_charu = $(this).attr('data-charu') ? $(this).attr('data-charu').split('$#$') : [];
|
|
const data_charu = $(this).attr('data-charu') ? $(this).attr('data-charu').split('$#$') : [];
|
|
const isDeal = $(this).data('gcl') !== undefined ? true : false;
|
|
const isDeal = $(this).data('gcl') !== undefined ? true : false;
|
|
let codeHtml = '<tr quantity="'+ $(this).children('td').eq(5).text() +'" gcl_id="" mx_id=""><td class="text-center">1</td><td colspan="7" class="colspan_1"> </td><td class="colspan_2 text-center"><input type="checkbox"></td></tr>';
|
|
let codeHtml = '<tr quantity="'+ $(this).children('td').eq(5).text() +'" gcl_id="" mx_id=""><td class="text-center">1</td><td colspan="7" class="colspan_1"> </td><td class="colspan_2 text-center"><input type="checkbox"></td></tr>';
|
|
- console.log(isDeal, isCheck);
|
|
|
|
|
|
+ // console.log(isDeal, isCheck);
|
|
if (isDeal) {
|
|
if (isDeal) {
|
|
const lid = $(this).data('lid');
|
|
const lid = $(this).data('lid');
|
|
let gcl = _.find(gclGatherData, function (item) {
|
|
let gcl = _.find(gclGatherData, function (item) {
|
|
@@ -1128,7 +1457,10 @@ $(document).ready(() => {
|
|
postData(window.location.pathname + '/save', { type:'ledger_list', updateData: newLedgerList, postData: select ? select.order : null }, function (result) {
|
|
postData(window.location.pathname + '/save', { type:'ledger_list', updateData: newLedgerList, postData: select ? select.order : null }, function (result) {
|
|
changeList = result.changeList;
|
|
changeList = result.changeList;
|
|
changeUsedData = result.usedList;
|
|
changeUsedData = result.usedList;
|
|
|
|
+ SpreadJsObj.initSpreadSettingEvents(changeSpreadSetting, changeCol);
|
|
|
|
+ SpreadJsObj.initSheet(changeSpreadSheet, changeSpreadSetting);
|
|
SpreadJsObj.loadSheetData(changeSpreadSheet, SpreadJsObj.DataType.Data, changeList);
|
|
SpreadJsObj.loadSheetData(changeSpreadSheet, SpreadJsObj.DataType.Data, changeList);
|
|
|
|
+ // SpreadJsObj.reLoadSheetData(changeSpreadSheet);
|
|
changeSpreadObj.makeSjsFooter();
|
|
changeSpreadObj.makeSjsFooter();
|
|
const select = SpreadJsObj.getSelectObject(changeSpreadSheet);
|
|
const select = SpreadJsObj.getSelectObject(changeSpreadSheet);
|
|
changeSpreadObj.resetXmjSpread(select);
|
|
changeSpreadObj.resetXmjSpread(select);
|
|
@@ -1527,7 +1859,7 @@ $(document).ready(() => {
|
|
// 更新至服务器
|
|
// 更新至服务器
|
|
postData(window.location.pathname + '/save', { type:'info', updateData: changeInfo }, function (result) {
|
|
postData(window.location.pathname + '/save', { type:'info', updateData: changeInfo }, function (result) {
|
|
$('.reduction-code').attr('data-code', $('input[name="code"]').val());
|
|
$('.reduction-code').attr('data-code', $('input[name="code"]').val());
|
|
- toastr.success(result);
|
|
|
|
|
|
+ toastr.success(result ? result.msg : '');
|
|
$('#show-save-btn').hide();
|
|
$('#show-save-btn').hide();
|
|
$('#sp-btn').show();
|
|
$('#sp-btn').show();
|
|
$('.title-main').removeClass('bg-warning');
|
|
$('.title-main').removeClass('bg-warning');
|
|
@@ -1536,6 +1868,18 @@ $(document).ready(() => {
|
|
changeInfo.expr = changeInfo.expr.replace(/[\r\n]/g, '<br>');
|
|
changeInfo.expr = changeInfo.expr.replace(/[\r\n]/g, '<br>');
|
|
changeInfo.memo = changeInfo.memo.replace(/[\r\n]/g, '<br>');
|
|
changeInfo.memo = changeInfo.memo.replace(/[\r\n]/g, '<br>');
|
|
back_changeInfo = Object.assign({}, changeInfo);
|
|
back_changeInfo = Object.assign({}, changeInfo);
|
|
|
|
+ if (result.changeList) {
|
|
|
|
+ deLimit = result.deLimit;
|
|
|
|
+ changeList = result.changeList;
|
|
|
|
+ SpreadJsObj.initSpreadSettingEvents(changeSpreadSetting, changeCol);
|
|
|
|
+ SpreadJsObj.initSheet(changeSpreadSheet, changeSpreadSetting);
|
|
|
|
+ SpreadJsObj.loadSheetData(changeSpreadSheet, SpreadJsObj.DataType.Data, changeList);
|
|
|
|
+ // SpreadJsObj.reLoadSheetData(changeSpreadSheet);
|
|
|
|
+ changeSpreadObj.makeSjsFooter();
|
|
|
|
+ const select = SpreadJsObj.getSelectObject(changeSpreadSheet);
|
|
|
|
+ changeSpreadObj.resetXmjSpread(select);
|
|
|
|
+ changeSpreadObj.refreshActn();
|
|
|
|
+ }
|
|
});
|
|
});
|
|
return false;
|
|
return false;
|
|
});
|
|
});
|
|
@@ -1567,7 +1911,10 @@ $(document).ready(() => {
|
|
$('.order_text').text('插入');
|
|
$('.order_text').text('插入');
|
|
changeOrder = newChangeOrder;
|
|
changeOrder = newChangeOrder;
|
|
}
|
|
}
|
|
- changeList = result;
|
|
|
|
|
|
+ changeList = result.changeList;
|
|
|
|
+ changeUsedData = result.usedList;
|
|
|
|
+ SpreadJsObj.initSpreadSettingEvents(changeSpreadSetting, changeCol);
|
|
|
|
+ SpreadJsObj.initSheet(changeSpreadSheet, changeSpreadSetting);
|
|
SpreadJsObj.loadSheetData(changeSpreadSheet, SpreadJsObj.DataType.Data, changeList);
|
|
SpreadJsObj.loadSheetData(changeSpreadSheet, SpreadJsObj.DataType.Data, changeList);
|
|
changeSpreadObj.makeSjsFooter();
|
|
changeSpreadObj.makeSjsFooter();
|
|
changeSpreadObj.resetXmjSpread(SpreadJsObj.getSelectObject(changeSpreadSheet));
|
|
changeSpreadObj.resetXmjSpread(SpreadJsObj.getSelectObject(changeSpreadSheet));
|
|
@@ -1929,6 +2276,7 @@ function remakeChangeSpread(cOrder = changeOrder) {
|
|
unit_price: price,
|
|
unit_price: price,
|
|
oamount,
|
|
oamount,
|
|
camount: scnum,
|
|
camount: scnum,
|
|
|
|
+ camount_expr: '',
|
|
detail: '',
|
|
detail: '',
|
|
lid,
|
|
lid,
|
|
xmj_code,
|
|
xmj_code,
|
|
@@ -1938,6 +2286,8 @@ function remakeChangeSpread(cOrder = changeOrder) {
|
|
xmj_fxgc,
|
|
xmj_fxgc,
|
|
gcl_id,
|
|
gcl_id,
|
|
mx_id,
|
|
mx_id,
|
|
|
|
+ is_valuation: 1,
|
|
|
|
+ delimit: deLimit,
|
|
};
|
|
};
|
|
const radionInfo = changeList.find(function (info) {
|
|
const radionInfo = changeList.find(function (info) {
|
|
//return info.code === code && (info.lid == lid || parseInt(info.lid) === parseInt(lindex)) && gcl_id == info.gcl_id && (info.bwmx === bwmx || (info.bwmx === xmj_jldy && info.mx_id && info.mx_id === mx_id)) && parseInt(info.oamount) === parseInt(oamount);
|
|
//return info.code === code && (info.lid == lid || parseInt(info.lid) === parseInt(lindex)) && gcl_id == info.gcl_id && (info.bwmx === bwmx || (info.bwmx === xmj_jldy && info.mx_id && info.mx_id === mx_id)) && parseInt(info.oamount) === parseInt(oamount);
|
|
@@ -1945,7 +2295,10 @@ function remakeChangeSpread(cOrder = changeOrder) {
|
|
});
|
|
});
|
|
if (radionInfo) {
|
|
if (radionInfo) {
|
|
trlist.camount = radionInfo.camount;
|
|
trlist.camount = radionInfo.camount;
|
|
|
|
+ trlist.camount_expr = radionInfo.camount_expr;
|
|
trlist.detail = radionInfo.detail;
|
|
trlist.detail = radionInfo.detail;
|
|
|
|
+ trlist.is_valuation = radionInfo.is_valuation;
|
|
|
|
+ trlist.delimit = radionInfo.delimit;
|
|
}
|
|
}
|
|
newTableList.push(trlist);
|
|
newTableList.push(trlist);
|
|
}
|
|
}
|
|
@@ -2016,6 +2369,7 @@ function changeFormRemake() {
|
|
$('#change_form select[name="quality"]').val(changeInfo.quality);
|
|
$('#change_form select[name="quality"]').val(changeInfo.quality);
|
|
$('#change_form select[name="company"]').val(changeInfo.company);
|
|
$('#change_form select[name="company"]').val(changeInfo.company);
|
|
$('#change_form input[name="charge"][value="'+ changeInfo.charge +'"]').prop('checked', true);
|
|
$('#change_form input[name="charge"][value="'+ changeInfo.charge +'"]').prop('checked', true);
|
|
|
|
+ $('#change_form input[name="state"][value="'+ changeInfo.state +'"]').prop('checked', true);
|
|
$('#change_form input[name="type[]"]').prop('checked', false);
|
|
$('#change_form input[name="type[]"]').prop('checked', false);
|
|
const typecheck = changeInfo.type.split(',');
|
|
const typecheck = changeInfo.type.split(',');
|
|
for (const type of typecheck) {
|
|
for (const type of typecheck) {
|