123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301 |
- /**
- * Created by Zhong on 2018/1/25.
- */
- let rationInstObj = {
- IDMapping: null, //ID - name
- feeItem: null, //name - ID
- sheet: null,
- rationRepId: null,
- curRation: null,
- cache: [],
- setting: {
- header:[
- {headerName:"费用项",headerWidth:120,dataCode:"feeItem", dataType: "String", hAlign: 'left'},
- {headerName:"分册章节",headerWidth:400,dataCode:"section", dataType: "String", hAlign: 'left'}
- ],
- view:{
- comboBox:[],
- lockColumns:[]
- },
- },
- buildSheet: function(sheet) {
- let me = this;
- me.sheet = sheet;
- me.sheet.options.clipBoardOptions = GC.Spread.Sheets.ClipboardPasteOptions.values;
- me.rationRepId = parseInt(pageOprObj.rationLibId); // 不可靠,有时取不到
- if (me.rationRepId == undefined){me.rationRepId = parseInt(getQueryString('repository'))};
- sheetCommonObj.initSheet(me.sheet, me.setting, 30);
- me.sheet.bind(GC.Spread.Sheets.Events.ClipboardPasting, me.onClipboardPasting);
- me.sheet.bind(GC.Spread.Sheets.Events.ClipboardPasted, me.onClipboardPasted);
- me.sheet.bind(GC.Spread.Sheets.Events.EnterCell, me.onEnterCell);
- me.sheet.bind(GC.Spread.Sheets.Events.EditStarting, me.onEditStarting);
- me.sheet.bind(GC.Spread.Sheets.Events.EditEnded, me.onEditEnded);
- //右键
- // me.onContextmenuOpr();
- },
- renderFunc: function (sheet, func) {
- sheet.suspendPaint();
- sheet.suspendEvent();
- if(func){
- func();
- }
- sheet.resumePaint();
- sheet.resumeEvent();
- },
- isDef: function (v) {
- return v !== undefined && v !== null;
- },
- getInstallation: function (rationRepId, callback) {
- let me = this;
- CommonAjax.post('/rationRepository/api/getInstallation', {rationRepId: rationRepId}, function (rstData) {
- //建立name - ID 映射, ID - name 映射
- me.feeItem = {};
- me.IDMapping = {feeItem: {}, section: {}};
- for(let feeItem of rstData){
- me.feeItem[feeItem.feeItem] = {ID: feeItem.ID, section: {}};
- me.IDMapping['feeItem'][feeItem.ID] = feeItem.feeItem;
- for(let section of feeItem.section){
- me.feeItem[feeItem.feeItem]['section'][section.name] = section.ID;
- me.IDMapping['section'][section.ID] = section.name;
- }
- }
- if(callback){
- callback(rstData);
- }
- });
- },
- getFeeItemCombo: function () {
- let feeItemArr = [];
- for(let name in this.feeItem){
- feeItemArr.push(name);
- }
- let combo = sheetCommonObj.getDynamicCombo();
- combo.items(feeItemArr).itemHeight(10).editable(false);
- return combo;
- },
- getSectionCombo: function (feeItem) {
- let sectionObjs = this.feeItem[feeItem]['section'];
- let sectionArr = [];
- for(let name in sectionObjs){
- sectionArr.push(name);
- }
- let combo = sheetCommonObj.getDynamicCombo();
- combo.items(sectionArr).itemHeight(10).editable(false);
- return combo;
- },
- getInstItems: function (ration, callback) {
- let me = this, rst = [];
- me.curRation = ration;
- me.cache = ration.rationInstList;
- for(let inst of me.cache){
- let data = Object.create(null);
- let feeItem = me.IDMapping['feeItem'][inst.feeItemId];
- let section = me.IDMapping['section'][inst.sectionId];
- data.feeItem = me.isDef(feeItem) ? feeItem : '';
- data.section = me.isDef(section) ? section : '';
- rst.push(data);
- }
- me.showInstItems(rst);
- if(callback){
- callback();
- }
- },
- showInstItems: function (data) {
- let me = this;
- sheetCommonObj.showData(this.sheet, this.setting, data);
- //init combo
- this.renderFunc(this.sheet, function () {
- let feeIemCombo = me.getFeeItemCombo();
- let rowCount = me.sheet.getRowCount();
- for(let i = 0, len = rowCount.length; i < len; i++){
- me.getRange(i, -1, 1, -1).cellType(null);
- }
- me.sheet.getRange(-1, 0, -1, 1).cellType(feeIemCombo);
- for(let i = 0, len = data.length; i < len; i++){
- let sectionCombo = me.getSectionCombo(data[i].feeItem);
- me.sheet.getCell(i, 1).cellType(sectionCombo);
- }
- });
- },
- onEnterCell: function (sender, args) {
- args.sheet.repaint();
- },
- onEditStarting: function (sender, args) {
- let me = rationInstObj;
- if(!me.isDef(me.curRation)){
- args.cancel = true;
- return;
- }
- if(!me.isDef(me.cache[args.row]) && args.col === 1){
- args.cancel = true;
- return;
- }
- },
- onEditEnded: function (sender, args) {
- let me = rationInstObj;
- let v = me.isDef(args.editingText) ? args.editingText.toString().trim() : '';
- let field = me.setting.header[args.col]['dataCode'];
- let inst = me.cache[args.row];
- let toUpdate = false;
- //update
- if(me.isDef(inst)){
- if(field === 'feeItem'){
- let feeItemId = me.isDef(me.feeItem[v]) ? me.feeItem[v]['ID'] : null;
- if(feeItemId){
- inst.feeItemId = feeItemId;
- toUpdate = true;
- }
- else {
- me.sheet.setValue(args.row, args.col, me.IDMapping['feeItem'][inst.feeItemId]);
- return;
- }
- }
- else{
- let sectionId = me.isDef(me.feeItem[me.IDMapping['feeItem'][inst.feeItemId]]) ? me.feeItem[me.IDMapping['feeItem'][inst.feeItemId]]['section'][v] : null;
- inst.sectionId = sectionId;
- toUpdate = true;
- }
- }
- //insert
- else{
- let feeItemId = me.isDef(me.feeItem[v]) ? me.feeItem[v]['ID'] : null;
- if(feeItemId){
- let obj = {feeItemId: feeItemId, sectionId: null};
- me.cache.push(obj);
- toUpdate = true;
- }
- }
- if(toUpdate){
- me.updateRation(me.curRation, function () {
- me.getInstItems(me.curRation);
- });
- }
- },
- validUpdatePaste: function (rowData, data) {
- if(this.isDef(data.feeItem) && this.isDef(data.section) && data.feeItem !== '' && data.section !== ''){
- if(!this.isDef(this.feeItem[data.feeItem])){
- return false;
- }
- if(!this.isDef(this.feeItem[data.feeItem]['section'][data.section])){
- return false;
- }
- }
- else if(this.isDef(data.feeItem) && data.feeItem !== ''){
- if(!this.isDef(this.feeItem[data.feeItem])){
- return false;
- }
- }
- else if(this.isDef(data.section) && data.section !== ''){
- if(!this.isDef(this.feeItem[this.IDMapping['feeItem'][rowData.feeItemId]]['section'][data.section])){
- return false;
- }
- }
- return true;
- },
- validInsertPaste: function (data) {
- if(!this.isDef(data.feeItem) || data.feeItem == ''){
- return false;
- }
- if(!this.isDef(this.feeItem[data.feeItem])){
- return false;
- }
- if(this.isDef(data.section) && data.section !== '' && !this.isDef(this.feeItem[data.feeItem]['section'][data.section])){
- return false;
- }
- return true;
- },
- toSaveData: function (data, rowData = null) {
- let obj = {feeItemId: null, sectionId: null};
- if(this.isDef(data.feeItem) && data.feeItem !== ''){
- obj.feeItemId = this.isDef(this.feeItem[data.feeItem]) ? this.feeItem[data.feeItem]['ID'] : null;
- }
- else if(this.isDef(rowData)){
- obj.feeItemId = rowData.feeItemId;
- }
- if(this.isDef(data.section) && data.section !== ''){
- obj.sectionId = this.isDef(this.feeItem[this.IDMapping['feeItem'][obj.feeItemId]]['section'][data.section]) ?
- this.feeItem[this.IDMapping['feeItem'][obj.feeItemId]]['section'][data.section]: null;
- }
- return obj;
- },
- bindRationInstDel: function () {
- let me = this;
- let workBook = me.sheet.getParent();
- workBook.commandManager().register('rationInstDel', function () {
- let toUpdate = false;
- let sels = me.sheet.getSelections();
- for(let i = 0, len = sels.length; i < len; i++){
- let sel = sels[i];
- //delete
- if(sel.colCount === me.setting.header.length){
- for(let j = 0, jLen = sel.rowCount; j < jLen; j++){
- let row = sel.row + j;
- let inst = me.cache[row];
- //有数据,删除数据
- if(me.isDef(inst)){
- if(!toUpdate){
- toUpdate = true;
- }
- }
- }
- //front delete
- me.cache.splice(sel.row, sel.rowCount);
- }
- }
- if(toUpdate && me.curRation){
- me.updateRation(me.curRation, function () {
- me.getInstItems(me.curRation);
- });
- }
- });
- workBook.commandManager().setShortcutKey(null, GC.Spread.Commands.Key.del, false, false, false, false);
- workBook.commandManager().setShortcutKey('rationInstDel', GC.Spread.Commands.Key.del, false, false, false, false);
- },
- onClipboardPasting: function (sender, info) {
- let me = rationInstObj;
- if(!me.isDef(me.curRation)){
- info.cancel = true;
- }
- },
- onClipboardPasted: function (sender, info) {
- let me = rationInstObj;
- let items = sheetCommonObj.analyzePasteData(me.setting, info);
- let toUpdate = false;
- for(let i = 0, len = items.length; i < len; i++){
- let row = info.cellRange.row + i;
- //update
- let inst = me.cache[row];
- if(me.isDef(inst)){
- if(me.validUpdatePaste(inst, items[i])){
- let updateObj = me.toSaveData(items[i], inst);
- for(let attr in updateObj){
- inst[attr] = updateObj[attr];
- }
- toUpdate = true;
- }
- }
- //insert
- else{
- if(me.validInsertPaste(items[i])){
- me.cache.push(me.toSaveData(items[i]));
- toUpdate = true;
- }
- }
- }
- if(toUpdate){
- me.updateRation(me.curRation, function () {
- me.getInstItems(me.curRation);
- });
- }
- else {
- me.getInstItems(me.curRation);
- }
- },
- updateRation: function (ration,callback) {
- rationOprObj.mixUpdateRequest([ration], [], [], function () {
- if(callback){
- callback();
- }
- });
- }
- };
|