|
|
@@ -24,7 +24,7 @@ let projFeatureView = {
|
|
|
combos: [],
|
|
|
dateRows: [],
|
|
|
locked: {
|
|
|
- rows: [0],
|
|
|
+ rows: [],
|
|
|
cols: [0]
|
|
|
}
|
|
|
},
|
|
|
@@ -51,12 +51,14 @@ let projFeatureView = {
|
|
|
},
|
|
|
|
|
|
getComboItemsByRow: function (row) {
|
|
|
- for(let i = 0, len = this.setting.combos.length; i < len; i++){
|
|
|
- if(this.setting.combos[i].row === row){
|
|
|
- return this.setting.combos[i].items;
|
|
|
- }
|
|
|
+ let data = this.datas[row];
|
|
|
+ if (!data) {
|
|
|
+ return null;
|
|
|
}
|
|
|
- return null;
|
|
|
+ if (!data.cellType || data.cellType !== 'comboBox') {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ return data.options ? data.options.split('@') : [];
|
|
|
},
|
|
|
|
|
|
buildHeader: function (sheet, headers) {
|
|
|
@@ -80,7 +82,7 @@ let projFeatureView = {
|
|
|
if(!this.workBook){
|
|
|
this.workBook = new GC.Spread.Sheets.Workbook($('#projFeatureSpread')[0], {sheetCount: 1});
|
|
|
sheetCommonObj.spreadDefaultStyle(this.workBook);
|
|
|
- sheetCommonObj.bindEscKey(this.workBook, [{sheet: this.workBook.getSheet(0), editStarting: null, editEnded: this.onEditEnded}]);
|
|
|
+ sheetCommonObj.bindEscKey(this.workBook, [{sheet: this.workBook.getSheet(0), editStarting: this.onEditStarting, editEnded: this.onEditEnded}]);
|
|
|
this.setOptions(this.workBook, this.setting.options);
|
|
|
this.buildHeader(this.workBook.getActiveSheet(), this.setting.header);
|
|
|
this.bindEvent(this.workBook);
|
|
|
@@ -90,9 +92,10 @@ let projFeatureView = {
|
|
|
bindEvent: function (workBook) {
|
|
|
const _events = GC.Spread.Sheets.Events;
|
|
|
let sheet = workBook.getActiveSheet();
|
|
|
- sheet.options.isProtected = true;
|
|
|
+ sheet.bind(_events.EditStarting, this.onEditStarting);
|
|
|
sheet.bind(_events.EditEnded, this.onEditEnded);
|
|
|
sheet.bind(_events.EnterCell, this.onEnterCell);
|
|
|
+ sheet.bind(_events.ClipboardPasting, this.onClipboardPasting);
|
|
|
sheet.bind(_events.ClipboardPasted, this.onClipboardPasted);
|
|
|
},
|
|
|
|
|
|
@@ -104,35 +107,75 @@ let projFeatureView = {
|
|
|
sheet.setRowCount(datas.length);
|
|
|
me.initTree(sheet, true, datas);
|
|
|
sheet.setFormatter(-1, 1, '@');
|
|
|
- for(let row = 0;row < datas.length ; row ++){
|
|
|
- //锁定
|
|
|
- if (!me.setting.locked.rows.includes(row)) {
|
|
|
- sheet.getCell(row, 1).locked(false);
|
|
|
- }
|
|
|
- if(datas[row].cellType == 'comboBox'){
|
|
|
- let options = datas[row].options?datas[row].options.split("@"):[];
|
|
|
- me.setCombo(sheet, row, options);
|
|
|
- }else if(datas[row].cellType == 'number'){
|
|
|
- me.setting.numRows.push(row);
|
|
|
- }
|
|
|
- for(let col = 0;col < cols.length;col++){
|
|
|
- sheet.setValue(row, col, datas[row][cols[col]['dataCode']]);
|
|
|
- }
|
|
|
- }
|
|
|
+ //兼容旧数据
|
|
|
+ let compatLockedKeys = ['engineering'],
|
|
|
+ compatNumKeys = [
|
|
|
+ 'buildingArea',
|
|
|
+ 'basementBuildingArea',
|
|
|
+ 'totalFloors',
|
|
|
+ 'basementFloors',
|
|
|
+ 'buildingFloors',
|
|
|
+ 'buildingHeight',
|
|
|
+ 'basementHeight',
|
|
|
+ 'firstFloorHeight',
|
|
|
+ 'podiumBuildingHeight',
|
|
|
+ 'standardFloorHeight'
|
|
|
+ ];
|
|
|
+ for(let row = 0;row < datas.length ; row ++){
|
|
|
+ if(datas[row].cellType == 'comboBox'){
|
|
|
+ let options = datas[row].options?datas[row].options.split("@"):[];
|
|
|
+ me.setCombo(sheet, row, options);
|
|
|
+ } else if(datas[row].cellType == 'number' || compatNumKeys.includes(datas[row].key)){
|
|
|
+ me.setting.numRows.push(row);
|
|
|
+ } else if (datas[row].cellType === 'date') {
|
|
|
+ me.setting.dateRows.push(row);
|
|
|
+ }
|
|
|
+ let readOnly = typeof datas[row].readOnly === 'string' ? JSON.parse(datas[row].readOnly) : datas[row].readOnly;
|
|
|
+ if (readOnly || datas[row].items || compatLockedKeys.includes(datas[row].key)) {
|
|
|
+ me.setting.locked.rows.push(row);
|
|
|
+ }
|
|
|
+ for(let col = 0;col < cols.length;col++){
|
|
|
+ sheet.setValue(row, col, datas[row][cols[col]['dataCode']]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ basicInfoView.setDatePicker(sheet, me.setting.dateRows);
|
|
|
};
|
|
|
this.renderSheetFuc(sheet, fuc);
|
|
|
},
|
|
|
+ onEditStarting: function (sender, args) {
|
|
|
+ let me = projFeatureView;
|
|
|
+ if(me.setting.locked.cols.indexOf(args.col) !== -1){
|
|
|
+ args.cancel = true;
|
|
|
+ }
|
|
|
+ if(args.col === 1 && me.setting.locked.rows.indexOf(args.row) !== -1){
|
|
|
+ args.cancel = true;
|
|
|
+ }
|
|
|
+ },
|
|
|
|
|
|
onEditEnded: function (sender, args) {
|
|
|
let me = projFeatureView;
|
|
|
let v = args.editingText ? args.editingText.toString().trim() : '';
|
|
|
if(args.row < me.datas.length){
|
|
|
- if(me.setting.numRows.indexOf(args.row) !== -1){//控制数值
|
|
|
+ let required = typeof me.datas[args.row].required === 'string' ? JSON.parse(me.datas[args.row].required) : me.datas[args.row].required;
|
|
|
+ if (required && !v) {
|
|
|
+ v = me.datas[args.row].value;
|
|
|
+ args.sheet.setValue(args.row, args.col, v);
|
|
|
+ } else if(me.setting.numRows.indexOf(args.row) !== -1){//控制数值
|
|
|
if(!me.isNum(v)){
|
|
|
alert('只能输入数值');
|
|
|
v = me.datas[args.row].value && me.isNum(me.datas[args.row].value) ? me.datas[args.row].value : '';
|
|
|
args.sheet.setValue(args.row, args.col, v);
|
|
|
}
|
|
|
+ } else if(me.setting.dateRows.indexOf(args.row) !== -1){
|
|
|
+ if(v.length > 0){
|
|
|
+ v = formatDate(new Date(v), 'yyyy-MM-dd');
|
|
|
+ v = basicInfoView.filtDate(v);
|
|
|
+ if(!v){
|
|
|
+ alert('请输入正确的日期格式yyyy-mm-dd');
|
|
|
+ args.sheet.setValue(args.row, args.col, me.datas[args.row].value ? me.datas[args.row].value : '');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
me.datas[args.row].value = v;
|
|
|
}
|
|
|
@@ -141,7 +184,12 @@ let projFeatureView = {
|
|
|
onEnterCell: function (sender, args) {
|
|
|
args.sheet.repaint();
|
|
|
},
|
|
|
-
|
|
|
+ onClipboardPasting: function (sender, args) {
|
|
|
+ let me = projFeatureView;
|
|
|
+ if(me.setting.locked.cols.indexOf(args.cellRange.col) !== -1){
|
|
|
+ args.cancel = true;
|
|
|
+ }
|
|
|
+ },
|
|
|
onClipboardPasted: function (sender, args) {
|
|
|
let me = projFeatureView;
|
|
|
let items = sheetCommonObj.analyzePasteData(me.setting, args);
|
|
|
@@ -152,13 +200,28 @@ let projFeatureView = {
|
|
|
for(let i = 0, len = items.length; i < len; i++){
|
|
|
let row = i + args.cellRange.row;
|
|
|
let comboItems = me.getComboItemsByRow(row);
|
|
|
+ let required = typeof me.datas[row].required === 'string' ? JSON.parse(me.datas[row].required) : me.datas[row].required;
|
|
|
+ if(me.setting.locked.rows.indexOf(row) !== -1){
|
|
|
+ recRows.push(row);
|
|
|
+ }
|
|
|
+ else if (required && !items[i].value) {
|
|
|
+ recRows.push(row);
|
|
|
+ }
|
|
|
//粘贴下拉框数据过滤
|
|
|
- if(comboItems && comboItems.indexOf(items[i].value) !== -1){
|
|
|
+ else if(comboItems && !comboItems.includes(items[i].value)){
|
|
|
recRows.push(row);
|
|
|
}
|
|
|
else if(me.setting.numRows.indexOf(row) !== -1 && !me.isNum(items[i].value)){
|
|
|
recRows.push(row);
|
|
|
}
|
|
|
+ else if(me.setting.dateRows.indexOf(row) !== -1){
|
|
|
+ items[i].value = basicInfoView.filtDate(items[i].value);
|
|
|
+ if(!me.isDef(items[i].value)){
|
|
|
+ recRows.push(row);
|
|
|
+ } else {
|
|
|
+ me.datas[row].value = items[i].value;
|
|
|
+ }
|
|
|
+ }
|
|
|
else {
|
|
|
me.datas[row].value = items[i].value;
|
|
|
}
|
|
|
@@ -204,12 +267,6 @@ let projFeatureView = {
|
|
|
initDatas: function (datas) {
|
|
|
this.datas = [];
|
|
|
for(let i = 0, len = datas.length; i < len; i++){
|
|
|
- if (typeof datas[i].readOnly === 'string') {
|
|
|
- datas[i].readOnly = JSON.parse(datas[i].readOnly);
|
|
|
- }
|
|
|
- if (datas[i].readOnly && !this.setting.locked.rows.includes(i)) {
|
|
|
- this.setting.locked.rows.push(i);
|
|
|
- }
|
|
|
this.datas.push(this.copyObj(datas[i]));
|
|
|
}
|
|
|
},
|