|
@@ -12,6 +12,10 @@ function checkTzMeasureType () {
|
|
|
return tender.measure_type === measureType.tz.value;
|
|
|
}
|
|
|
|
|
|
+function transExpr(expr) {
|
|
|
+ return expr.replace('=', '').replace('%', '/100');
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* 从cookie中读取缓存的列显示设置,没有则取默认
|
|
|
* @returns {*[]}
|
|
@@ -481,6 +485,22 @@ $(document).ready(() => {
|
|
|
SpreadJsObj.initSheet(spSpread.getActiveSheet(), posSpreadSetting);
|
|
|
|
|
|
const stageTreeSpreadObj = {
|
|
|
+ loadExprToInput(sheet) {
|
|
|
+ const sel = sheet.getSelections()[0];
|
|
|
+ const col = sheet.zh_setting.cols[sel.col], cell = sheet.getCell(sel.row, sel.col);
|
|
|
+ if (col.type === 'Number') {
|
|
|
+ const data = SpreadJsObj.getSelectObject(sheet);
|
|
|
+ const nodePos = stagePos.getLedgerPos(data.id);
|
|
|
+ if (nodePos && nodePos.length > 0) {
|
|
|
+ $('#bills-expr').val('').attr('readOnly', true);
|
|
|
+ } else {
|
|
|
+ $('#bills-expr').val(data[col.field]).attr('field', col.field).attr('org', data[col.field])
|
|
|
+ .attr('readOnly', readOnly || cell.locked());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ $('#bills-expr').val('').attr('readOnly', true);
|
|
|
+ }
|
|
|
+ },
|
|
|
refreshTreeNodes: function (sheet, nodes) {
|
|
|
const tree = sheet.zh_tree;
|
|
|
if (!tree) { return }
|
|
@@ -497,7 +517,22 @@ $(document).ready(() => {
|
|
|
const node = sortData[info.row], updateData = {};
|
|
|
|
|
|
const orgValue = node[col.field];
|
|
|
- const newValue = col.type === 'Number' ? parseFloat(info.editingText) : info.editingText;
|
|
|
+ let newValue = info.editingText;
|
|
|
+
|
|
|
+ if (col.type === 'Number') {
|
|
|
+ const num = _.toNumber(newValue);
|
|
|
+ if (num) {
|
|
|
+ newValue = num;
|
|
|
+ } else {
|
|
|
+ try {
|
|
|
+ newValue = math.evaluate(transExpr(newValue));
|
|
|
+ } catch(err) {
|
|
|
+ toastr.error('输入的表达式非法');
|
|
|
+ SpreadJsObj.reLoadRowData(info.sheet, info.row);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
if (orgValue == newValue || ((!orgValue || orgValue === '') && (newValue === ''))) {
|
|
|
return;
|
|
|
}
|
|
@@ -548,6 +583,7 @@ $(document).ready(() => {
|
|
|
posSearch.search();
|
|
|
}
|
|
|
SpreadJsObj.saveTopAndSelect(info.sheet, ckBillsSpread);
|
|
|
+ stageTreeSpreadObj.loadExprToInput(info.sheet);
|
|
|
},
|
|
|
deletePress(sheet) {
|
|
|
if (sheet.zh_setting && sheet.zh_dataType === 'tree') {
|
|
@@ -625,13 +661,14 @@ $(document).ready(() => {
|
|
|
if (info.sheet.zh_setting && info.sheet.zh_tree) {
|
|
|
const sheet = info.sheet, setting = info.sheet.zh_setting;
|
|
|
const filterNodes = [], datas = [], dgnDatas = [];
|
|
|
+ let bHint = false;
|
|
|
|
|
|
for (let iRow = 0; iRow < info.cellRange.rowCount; iRow++) {
|
|
|
const curRow = iRow + info.cellRange.row;
|
|
|
const node = sheet.zh_tree.getItemsByIndex(curRow);
|
|
|
|
|
|
const data = {lid: node.id}, dgnData = {id: node.id};
|
|
|
- let filter = true, filterDgn = true;
|
|
|
+ let filter = false, filterDgn = false;
|
|
|
for (let iCol = 0; iCol < info.cellRange.colCount; iCol++) {
|
|
|
const curCol = info.cellRange.col + iCol;
|
|
|
const col = info.sheet.zh_setting.cols[curCol];
|
|
@@ -644,12 +681,41 @@ $(document).ready(() => {
|
|
|
if (nodePos && nodePos.length > 0) continue;
|
|
|
}
|
|
|
|
|
|
+ const text = sheet.getText(curRow, curCol);
|
|
|
if (setting.dgnUpFields.indexOf(col.field) !== -1) {
|
|
|
- dgnData[col.field] = _.toNumber(sheet.getText(curRow, curCol));
|
|
|
- filterDgn = false;
|
|
|
+ const num = _.toNumber(text);
|
|
|
+ if (num) {
|
|
|
+ dgnData[col.field] = num;
|
|
|
+ } else {
|
|
|
+ try {
|
|
|
+ dgnData[col.field] = math.evaluate(transExpr(text));
|
|
|
+ } catch(err) {
|
|
|
+ if (!bHint) {
|
|
|
+ toastr.warning('粘贴了非法表达式,已过滤');
|
|
|
+ bHint = true;
|
|
|
+ }
|
|
|
+ filterDgn = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
} else {
|
|
|
- data[col.field] = col.type === 'Number' ? _.toNumber(sheet.getText(curRow, curCol)) : sheet.getText(curRow, curCol);
|
|
|
- filter = false;
|
|
|
+ if (col.type === 'Number') {
|
|
|
+ const num = _.toNumber(text);
|
|
|
+ if (num) {
|
|
|
+ data[col.field] = num;
|
|
|
+ } else {
|
|
|
+ try {
|
|
|
+ data[col.field] = math.evaluate(transExpr(text));
|
|
|
+ } catch(err) {
|
|
|
+ if (!bHint) {
|
|
|
+ toastr.warning('粘贴了非法表达式,已过滤');
|
|
|
+ bHint = true;
|
|
|
+ }
|
|
|
+ filter = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ data[col.field] = text;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
if (filter && filterDgn) {
|
|
@@ -837,8 +903,61 @@ $(document).ready(() => {
|
|
|
},
|
|
|
}
|
|
|
});
|
|
|
+ if (!readOnly) {
|
|
|
+ $('#bills-expr').bind('change mouseleave', function () {
|
|
|
+ const expr = $(this);
|
|
|
+ const sheet = slSpread.getActiveSheet();
|
|
|
+ const select = SpreadJsObj.getSelectObject(sheet);
|
|
|
+ const field = expr.attr('field'), orgValue = expr.attr('org'), updateData = {};
|
|
|
+ let newValue = expr.val();
|
|
|
+
|
|
|
+ const num = _.toNumber(newValue);
|
|
|
+ if (num) {
|
|
|
+ newValue = num;
|
|
|
+ } else {
|
|
|
+ try {
|
|
|
+ newValue = math.evaluate(transExpr(newValue));
|
|
|
+ } catch(err) {
|
|
|
+ toastr.error('输入的表达式非法');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (orgValue === newValue || (!orgValue && newValue == '')) { return; }
|
|
|
+
|
|
|
+ if (field.indexOf('_dgn_') > 0) {
|
|
|
+ updateData.dgn = {
|
|
|
+ id: select.id
|
|
|
+ };
|
|
|
+ updateData.dgn[field] = newValue;
|
|
|
+ } else {
|
|
|
+ updateData.stage = {
|
|
|
+ lid: select.id
|
|
|
+ };
|
|
|
+ updateData.stage[field] = newValue;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新至服务器
|
|
|
+ postData(window.location.pathname + '/update', {bills: updateData}, function (result) {
|
|
|
+ const nodes = stageTree.loadPostStageData(result);
|
|
|
+ expr.val(select[field]);
|
|
|
+ stageTreeSpreadObj.refreshTreeNodes(slSpread.getActiveSheet(), nodes);
|
|
|
+ });
|
|
|
+ });
|
|
|
+ }
|
|
|
+ stageTreeSpreadObj.loadExprToInput(slSpread.getActiveSheet());
|
|
|
|
|
|
const stagePosSpreadObj = {
|
|
|
+ loadExprToInput(sheet) {
|
|
|
+ const sel = sheet.getSelections()[0];
|
|
|
+ const col = sheet.zh_setting.cols[sel.col], cell = sheet.getCell(sel.row, sel.col);
|
|
|
+ if (col.type === 'Number') {
|
|
|
+ const data = SpreadJsObj.getSelectObject(sheet);
|
|
|
+ $('#pos-expr').val(data[col.field]).attr('field', col.field).attr('org', data[col.field])
|
|
|
+ .attr('row', sel.row).attr('readOnly', readOnly || cell.locked());
|
|
|
+ } else {
|
|
|
+ $('#pos-expr').val('').attr('readOnly', true);
|
|
|
+ }
|
|
|
+ },
|
|
|
/**
|
|
|
* 加载部位明细 根据当前台账选择节点
|
|
|
*/
|
|
@@ -913,7 +1032,22 @@ $(document).ready(() => {
|
|
|
} else {
|
|
|
data.updateType = 'update';
|
|
|
data.updateData = {pid: posData.id, lid: posData.lid};
|
|
|
- data.updateData[col.field] = col.type === 'Number' ? parseFloat(info.editingText) : info.editingText;
|
|
|
+ if (col.type === 'Number') {
|
|
|
+ const num = _.toNumber(info.editingText);
|
|
|
+ if (num) {
|
|
|
+ data.updateData[col.field] = num;
|
|
|
+ } else {
|
|
|
+ try {
|
|
|
+ data.updateData[col.field] = math.evaluate(transExpr(info.editingText));
|
|
|
+ } catch(err) {
|
|
|
+ toastr.error('输入的表达式非法');
|
|
|
+ SpreadJsObj.reLoadRowData(info.sheet, info.row);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ data.updateData[col.field] = info.editingText;
|
|
|
+ }
|
|
|
}
|
|
|
// 提交数据到服务器
|
|
|
postData(window.location.pathname + '/update', {pos: data}, function (result) {
|
|
@@ -982,8 +1116,20 @@ $(document).ready(() => {
|
|
|
const curCol = info.cellRange.col + iCol;
|
|
|
const colSetting = info.sheet.zh_setting.cols[curCol];
|
|
|
newData[colSetting.field] = info.sheet.getText(curRow, curCol);
|
|
|
- if (colSetting.type === 'Number') {
|
|
|
- newData[colSetting.field] = _.toNumber(newData[colSetting.field]);
|
|
|
+ if (col.type === 'Number') {
|
|
|
+ const num = _.toNumber(newData[colSetting.field]);
|
|
|
+ if (num) {
|
|
|
+ newData[colSetting.field] = num;
|
|
|
+ } else {
|
|
|
+ try {
|
|
|
+ newData[colSetting.field] = math.evaluate(transExpr(newData[colSetting.field]));
|
|
|
+ } catch(err) {
|
|
|
+ toastr.error('输入的表达式非法');
|
|
|
+ self.loadCurPosData();
|
|
|
+ return;
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
data.updateData.push(newData);
|
|
@@ -999,8 +1145,19 @@ $(document).ready(() => {
|
|
|
const curCol = info.cellRange.col + iCol;
|
|
|
const colSetting = info.sheet.zh_setting.cols[curCol];
|
|
|
newData[colSetting.field] = info.sheet.getText(curRow, curCol);
|
|
|
- if (colSetting.type === 'Number') {
|
|
|
- newData[colSetting.field] = _.toNumber(newData[colSetting.field]);
|
|
|
+ if (col.type === 'Number') {
|
|
|
+ const num = _.toNumber(newData[colSetting.field]);
|
|
|
+ if (num) {
|
|
|
+ newData[colSetting.field] = num;
|
|
|
+ } else {
|
|
|
+ try {
|
|
|
+ newData[colSetting.field] = math.evaluate(transExpr(newData[colSetting.field]));
|
|
|
+ } catch(err) {
|
|
|
+ toastr.error('输入的表达式非法');
|
|
|
+ self.loadCurPosData();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
data.updateData.push(newData);
|
|
@@ -1090,6 +1247,9 @@ $(document).ready(() => {
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
+ selectionChanged: function (e, info) {
|
|
|
+ stagePosSpreadObj.loadExprToInput(info.sheet);
|
|
|
+ }
|
|
|
};
|
|
|
// 加载上下窗口resizer
|
|
|
$.divResizer({
|
|
@@ -1116,7 +1276,42 @@ $(document).ready(() => {
|
|
|
spSpread.bind(spreadNS.Events.ClipboardPasting, stagePosSpreadObj.clipboardPasting);
|
|
|
spSpread.bind(spreadNS.Events.ClipboardPasted, stagePosSpreadObj.clipboardPasted);
|
|
|
spSpread.bind(spreadNS.Events.EditStarting, stagePosSpreadObj.editStarting);
|
|
|
+ spSpread.bind(spreadNS.Events.SelectionChanged, stagePosSpreadObj.selectionChanged);
|
|
|
SpreadJsObj.addDeleteBind(spSpread, stagePosSpreadObj.deletePress);
|
|
|
+ if (!readOnly) {
|
|
|
+ $('#pos-expr').bind('change mouseleave', function () {
|
|
|
+ const expr = $(this);
|
|
|
+ const posSheet = spSpread.getActiveSheet();
|
|
|
+ const select = SpreadJsObj.getSelectObject(posSheet);
|
|
|
+ const field = expr.attr('field'), orgValue = expr.attr('org'), newValue = expr.val(), row = expr.attr('row');
|
|
|
+ if (orgValue === newValue || (!orgValue && newValue == '')) { return; }
|
|
|
+
|
|
|
+ const data = {pid: select.id, lid: select.lid};
|
|
|
+ const num = _.toNumber(newValue);
|
|
|
+ if (num) {
|
|
|
+ data[field] = num;
|
|
|
+ } else {
|
|
|
+ try {
|
|
|
+ data[field] = math.evaluate(transExpr(newValue));
|
|
|
+ } catch (err) {
|
|
|
+ toastr.error('输入的表达式非法');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 提交数据到服务器
|
|
|
+ postData(window.location.pathname + '/update', {pos: {updateType: 'update', updateData: data}}, function (result) {
|
|
|
+ if (result.pos) {
|
|
|
+ stagePos.updateDatas(result.pos.pos);
|
|
|
+ stagePos.loadCurStageData(result.pos.curStageData);
|
|
|
+ expr.val(select[field]);
|
|
|
+ SpreadJsObj.reLoadRowData(posSheet, _.toNumber(row));
|
|
|
+ }
|
|
|
+ const refreshData = stageTree.loadPostStageData(result.ledger);
|
|
|
+ stageTreeSpreadObj.refreshTreeNodes(slSpread.getActiveSheet(), refreshData);
|
|
|
+ });
|
|
|
+ });
|
|
|
+ }
|
|
|
if (!checkTzMeasureType()) {
|
|
|
$.contextMenu({
|
|
|
selector: '#stage-pos',
|