|
@@ -2198,7 +2198,7 @@ $(document).ready(function() {
|
|
|
{title: '单位', field: 'unit', hAlign: 1, width: 50, formatter: '@'},
|
|
|
{title: '单价', field: 'unit_price', hAlign: 2, width: 50},
|
|
|
{title: '数量', field: 'quantity', hAlign: 2, width: 50},
|
|
|
- {title: '金额', field: 'total_price', hAlign: 2, width: 50},
|
|
|
+ {title: '金额', field: 'total_price', hAlign: 2, width: 50, readOnly: true},
|
|
|
],
|
|
|
emptyRows: 3,
|
|
|
headRows: 1,
|
|
@@ -2266,6 +2266,180 @@ $(document).ready(function() {
|
|
|
this.spread = SpreadJsObj.createNewSpread(this.obj);
|
|
|
this.sheet = this.spread.getActiveSheet();
|
|
|
SpreadJsObj.initSheet(this.spread.getActiveSheet(), this.spreadSetting);
|
|
|
+
|
|
|
+
|
|
|
+ this.OprObj = {
|
|
|
+ /**
|
|
|
+ * 删除按钮响应事件
|
|
|
+ * @param sheet
|
|
|
+ */
|
|
|
+ deletePress: function (sheet) {
|
|
|
+ if (!sheet.zh_setting || readOnly || sheet.zh_setting.readOnly) return;
|
|
|
+
|
|
|
+ const sortData = sheet.zh_data;
|
|
|
+ const datas = [];
|
|
|
+ const sels = sheet.getSelections();
|
|
|
+ if (!sels || !sels[0]) return;
|
|
|
+
|
|
|
+ for (let iRow = sels[0].row; iRow < sels[0].row + sels[0].rowCount; iRow++) {
|
|
|
+ let bDel = false;
|
|
|
+ const node = sortData[iRow];
|
|
|
+ if (node) {
|
|
|
+ const data = {id: node.id};
|
|
|
+ for (let iCol = sels[0].col; iCol < sels[0].col + sels[0].colCount; iCol++) {
|
|
|
+ const colSetting = sheet.zh_setting.cols[iCol];
|
|
|
+ if (colSetting.field === 'code') {
|
|
|
+ toastr.error('清单编号不能为空,如需删除签约清单请使用右键删除');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ const style = sheet.getStyle(iRow, iCol);
|
|
|
+ if (!style.locked) {
|
|
|
+ const colSetting = sheet.zh_setting.cols[iCol];
|
|
|
+ data[colSetting.field] = null;
|
|
|
+ bDel = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (bDel) {
|
|
|
+ datas.push(data);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (datas.length > 0) {
|
|
|
+ postData(self.url + '/update', {update: datas}, function (result) {
|
|
|
+ self.loadUpdateData(result);
|
|
|
+ SpreadJsObj.reLoadSheetData(sheet);
|
|
|
+ }, function () {
|
|
|
+ SpreadJsObj.reLoadSheetData(sheet);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ },
|
|
|
+ delete: function (sheet) {
|
|
|
+ if (!sheet.zh_setting || readOnly || sheet.zh_setting.readOnly) return;
|
|
|
+
|
|
|
+ const sortData = sheet.zh_data;
|
|
|
+ const datas = [];
|
|
|
+ const sels = sheet.getSelections();
|
|
|
+ if (!sels || !sels[0]) return;
|
|
|
+
|
|
|
+ for (let iRow = sels[0].row, iLen = sels[0].row + sels[0].rowCount; iRow < iLen; iRow++) {
|
|
|
+ const node = sortData[iRow];
|
|
|
+ datas.push(node.id);
|
|
|
+ }
|
|
|
+ if (datas.length > 0) {
|
|
|
+ postData(self.url + '/update', {del: datas}, function (result) {
|
|
|
+ self.loadUpdateData(result);
|
|
|
+ SpreadJsObj.reLoadSheetData(sheet);
|
|
|
+ }, function () {
|
|
|
+ SpreadJsObj.reLoadSheetData(sheet);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ },
|
|
|
+ editEnded: function (e, info) {
|
|
|
+ if (!info.sheet.zh_setting || !info.sheet.zh_data || info.sheet.zh_setting.readOnly) return;
|
|
|
+
|
|
|
+ const node = info.sheet.zh_data[info.row];
|
|
|
+ const col = info.sheet.zh_setting.cols[info.col];
|
|
|
+ const data = {};
|
|
|
+
|
|
|
+ if (node) {
|
|
|
+ data.update = {};
|
|
|
+ data.update.id = node.id;
|
|
|
+
|
|
|
+ const oldValue = node ? node[col.field] : null;
|
|
|
+ const newValue = trimInvalidChar(info.editingText);
|
|
|
+ if (oldValue == info.editingText || ((!oldValue || oldValue === '') && (newValue === ''))) {
|
|
|
+ SpreadJsObj.reLoadRowData(info.sheet, info.row);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ data.update[col.field] = newValue;
|
|
|
+ } else {
|
|
|
+ if (col.field !== 'code') {
|
|
|
+ toastr.warning('新增签约清单,请先输入清单编号');
|
|
|
+ SpreadJsObj.reLoadRowData(info.sheet, info.row);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ data.add = {};
|
|
|
+ data.add.order = info.row + 1;
|
|
|
+ data.add.code = trimInvalidChar(info.editingText);
|
|
|
+ }
|
|
|
+
|
|
|
+ postData(self.url + '/update', data, function (result) {
|
|
|
+ self.loadUpdateData(result);
|
|
|
+ SpreadJsObj.reLoadSheetData(info.sheet);
|
|
|
+ }, function () {
|
|
|
+ SpreadJsObj.reLoadRowData(info.sheet, info.row);
|
|
|
+ });
|
|
|
+ },
|
|
|
+ clipboardPasting(e, info) {
|
|
|
+ const setting = info.sheet.zh_setting, sortData = info.sheet.zh_data;
|
|
|
+ info.cancel = true;
|
|
|
+
|
|
|
+ if (!setting || !sortData || setting.readOnly) return;
|
|
|
+ const pasteData = info.pasteData.html
|
|
|
+ ? SpreadJsObj.analysisPasteHtml(info.pasteData.html)
|
|
|
+ : (info.pasteData.text === ''
|
|
|
+ ? SpreadJsObj.Clipboard.getAnalysisPasteText()
|
|
|
+ : SpreadJsObj.analysisPasteText(info.pasteData.text));
|
|
|
+ const hint = {
|
|
|
+ code: {type: 'warning', msg: '签约清单编号不可为空,已过滤'},
|
|
|
+ unit_price: {type: 'warning', msg: '输入的 单价 非法,已过滤'},
|
|
|
+ quantity: {type: 'warning', msg: '输入的 数量 非法,已过滤'},
|
|
|
+ };
|
|
|
+
|
|
|
+ const uDatas = [], iDatas = [];
|
|
|
+ for (let iRow = 0; iRow < info.cellRange.rowCount; iRow++) {
|
|
|
+ const curRow = info.cellRange.row + iRow;
|
|
|
+ const node = sortData[curRow];
|
|
|
+
|
|
|
+ let bPaste = false;
|
|
|
+ const data = {};
|
|
|
+ for (let iCol = 0; iCol < info.cellRange.colCount; iCol++) {
|
|
|
+ const curCol = info.cellRange.col + iCol;
|
|
|
+ const colSetting = setting.cols[curCol];
|
|
|
+ const value = trimInvalidChar(pasteData[iRow][iCol]);
|
|
|
+
|
|
|
+ if (colSetting.field === 'code' && (!value || value === '')) {
|
|
|
+ toastMessageUniq(hint.code);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if (colSetting.type === 'Number') {
|
|
|
+ const num = _.toNumber(value);
|
|
|
+ if (num) {
|
|
|
+ data[colSetting.field] = num;
|
|
|
+ bPaste = true;
|
|
|
+ } else if (colSetting.field === 'unit_price') {
|
|
|
+ toastMessageUniq(hint.unit_price);
|
|
|
+ } else if (colSetting.field === 'quantity') {
|
|
|
+ toastMessageUniq(hint.quantity);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ data[colSetting.field] = value;
|
|
|
+ bPaste = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (bPaste) {
|
|
|
+ if (node) {
|
|
|
+ data.id = node.id;
|
|
|
+ uDatas.push(data);
|
|
|
+ } else {
|
|
|
+ data.order = curRow + 1;
|
|
|
+ iDatas.push(data);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ const updateData = {};
|
|
|
+ if (uDatas.length > 0) updateData.update = uDatas;
|
|
|
+ if (iDatas.length > 0) updateData.add = iDatas;
|
|
|
+ if (uDatas.length > 0 || iDatas.length > 0) {
|
|
|
+ postData(self.url + '/update', updateData, function (result) {
|
|
|
+ self.loadUpdateData(result);
|
|
|
+ SpreadJsObj.reLoadSheetData(info.sheet);
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ SpreadJsObj.reLoadSheetData(info.sheet);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ };
|
|
|
if (!readOnly) {
|
|
|
this.spread.bind(spreadNS.Events.CellDoubleClick, function (e, info) {
|
|
|
const dealSheet = info.sheet;
|
|
@@ -2305,6 +2479,9 @@ $(document).ready(function() {
|
|
|
posOperationObj.loadCurPosData();
|
|
|
});
|
|
|
});
|
|
|
+ this.spread.bind(spreadNS.Events.EditEnded, this.OprObj.editEnded);
|
|
|
+ this.spread.bind(spreadNS.Events.ClipboardPasting, this.OprObj.clipboardPasting);
|
|
|
+ SpreadJsObj.addDeleteBind(this.spread, this.OprObj.deletePress);
|
|
|
}
|
|
|
$('#upload-deal-bills').click(function () {
|
|
|
const file = $('#deal-bills-file')[0];
|
|
@@ -2359,7 +2536,7 @@ $(document).ready(function() {
|
|
|
return !select;
|
|
|
},
|
|
|
callback: function (key, opt) {
|
|
|
-
|
|
|
+ self.OprObj.delete(self.sheet);
|
|
|
},
|
|
|
},
|
|
|
sprEdit: '---------',
|
|
@@ -2412,6 +2589,30 @@ $(document).ready(function() {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ loadUpdateData(updateData) {
|
|
|
+ if (updateData.add) {
|
|
|
+ for (const a of updateData.add) {
|
|
|
+ this.data.push(a);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (updateData.update) {
|
|
|
+ for (const u of updateData.update) {
|
|
|
+ const d = this.data.find(function (x) {
|
|
|
+ return u.id === x.id;
|
|
|
+ });
|
|
|
+ if (d) {
|
|
|
+ _.assign(d, u);
|
|
|
+ } else {
|
|
|
+ this.data.push(d);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (updateData.del) {
|
|
|
+ _.remove(this.data, function (d) {
|
|
|
+ return updateData.del.indexOf(d.id) >= 0;
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
class BatchInsertBillsPosObj {
|
|
|
constructor (obj) {
|