|
@@ -10,7 +10,7 @@
|
|
|
<link rel="stylesheet" href="/web/maintain/bills_lib/css/main.css">
|
|
|
<link rel="stylesheet" href="/lib/font-awesome/font-awesome.min.css">
|
|
|
<!--spread-->
|
|
|
- <link rel="stylesheet" href="/lib/spreadjs/sheets/css/gc.spread.sheets.excel2013white.10.0.1.css">
|
|
|
+ <link rel="stylesheet" href="/lib/spreadjs/sheets/css/gc.spread.sheets.excel2013lightGray.10.0.1.css">
|
|
|
</head>
|
|
|
|
|
|
<body>
|
|
@@ -211,6 +211,7 @@
|
|
|
</div>
|
|
|
<!-- JS. -->
|
|
|
<script src="/lib/spreadjs/sheets/gc.spread.sheets.all.10.0.1.min.js"></script>
|
|
|
+ <script>GC.Spread.Sheets.LicenseKey = "559432293813965#A0y3iTOzEDOzkjMyMDN9UTNiojIklkI1pjIEJCLi4TPB9mM5AFNTd4cvZ7SaJUVy3CWKtWYXx4VVhjMpp7dYNGdx2ia9sEVlZGOTh7NRlTUwkWR9wEV4gmbjBDZ4ElR8N7cGdHVvEWVBtCOwIGW0ZmeYVWVr3mI0IyUiwCMzETN8kzNzYTM0IicfJye&Qf35VfiEzRwEkI0IyQiwiIwEjL6ByUKBCZhVmcwNlI0IiTis7W0ICZyBlIsIyNyMzM5ADI5ADNwcTMwIjI0ICdyNkIsIibj9SbvNmL4N7bjRnch56ciojIz5GRiwiI8+Y9sWY9QmZ0Jyp96uL9v6L0wap9biY9qiq95q197Wr9g+89iojIh94Wiqi";</script>
|
|
|
<script src="/lib/jquery/jquery.min.js"></script>
|
|
|
<script src="/lib/tether/tether.min.js"></script>
|
|
|
<script src="/lib/bootstrap/bootstrap.min.js"></script>
|
|
@@ -223,21 +224,23 @@
|
|
|
<script src="/public/web/tree_sheet/tree_sheet_helper.js"></script>
|
|
|
<script src="/web/maintain/bills_lib/scripts/bills_lib_setting.js"></script>
|
|
|
<script src="/web/maintain/bills_lib/scripts/bills_lib_tree.js"></script>
|
|
|
- <script src="/test/tmp_data/bills_grid_setting.js"></script>
|
|
|
<script src="/web/maintain/bills_lib/scripts/db_controller.js"></script>
|
|
|
<script src="/web/maintain/bills_lib/scripts/tools.js"></script>
|
|
|
</body>
|
|
|
<script type="text/javascript">
|
|
|
autoFlashHeight();
|
|
|
- var maxJobsNumber;
|
|
|
- var maxItemsNumber;
|
|
|
- var orgJobData;
|
|
|
- var orgItemData;
|
|
|
- var billsTree = billsLibTree.createBillsTree();
|
|
|
- var billsLibId = getQueryString("billsLibId");
|
|
|
+ let maxJobsNumber;
|
|
|
+ let maxItemsNumber;
|
|
|
+ let orgJobData;
|
|
|
+ let orgItemData;
|
|
|
+ let billsTree = billsLibTree.createBillsTree();
|
|
|
+ let billsLibId = getQueryString("billsLibId");
|
|
|
+ let sheetDatas;
|
|
|
+ let sheetItemsDatas;
|
|
|
+ let sheetBillsDatas;
|
|
|
tools.redirect(billsLibId, 'stdBillsmain');
|
|
|
- var jobsSpread = new GC.Spread.Sheets.Workbook($("#spreadJobs")[0], {sheetCount: 1});
|
|
|
- var itemsSpread = new GC.Spread.Sheets.Workbook($("#spreadItems")[0], {sheetCount: 1});
|
|
|
+ let jobsSpread = new GC.Spread.Sheets.Workbook($("#spreadJobs")[0], {sheetCount: 1});
|
|
|
+ let itemsSpread = new GC.Spread.Sheets.Workbook($("#spreadItems")[0], {sheetCount: 1});
|
|
|
$(document).ready(function(){
|
|
|
$("#aStdJobs").attr('href', function(){
|
|
|
return 'stdJobs?billsLibId=' + billsLibId;
|
|
@@ -254,7 +257,7 @@
|
|
|
});
|
|
|
|
|
|
function nodeOpration(controller, totalJobs, totalItems){
|
|
|
- dbController.editData(controller, controller.sheet);
|
|
|
+ dbController.editData(controller);
|
|
|
$('#insert').click(function(){
|
|
|
dbController.insert(controller);
|
|
|
tools.clearData(jobsSpread.getActiveSheet());
|
|
@@ -279,13 +282,16 @@
|
|
|
|
|
|
|
|
|
function showBillsSheet(datas, jobsSheet, itemsSheet, setting) {
|
|
|
- var billsSpread = new GC.Spread.Sheets.Workbook($('#spreadBills')[0], {sheetCount: 1});
|
|
|
+ let billsSpread = new GC.Spread.Sheets.Workbook($('#spreadBills')[0], {sheetCount: 1});
|
|
|
+ //
|
|
|
+ /*let billsSheet = billsSpread.getActiveSheet();
|
|
|
+ billsSheet.setFormatter(-1, 0, "@", GC.Spread.Sheets.SheetArea.viewport);*/
|
|
|
+ //
|
|
|
setSheet.initSheet(billsSpread, setting);
|
|
|
+ //setSheet.formatter(billsSpread.getActiveSheet());
|
|
|
myKey.delKey(billsSpread);
|
|
|
billsTree.loadDatas(datas);
|
|
|
- //粘贴事件
|
|
|
- bindPasteBills(billsSpread.getActiveSheet(), setting);
|
|
|
- var controller = TREE_SHEET_CONTROLLER.createNew(billsTree.tree, billsSpread.getActiveSheet(), setting);
|
|
|
+ let controller = TREE_SHEET_CONTROLLER.createNew(billsTree.tree, billsSpread.getActiveSheet(), setting);
|
|
|
controller.showTreeData();
|
|
|
//setTagId
|
|
|
setTagID(controller, setting);
|
|
@@ -295,12 +301,17 @@
|
|
|
//刷新节点可进行操作的按钮
|
|
|
refreshBtn(controller);
|
|
|
controller.setTreeSelected(controller.tree.findNode(controller.sheet.getTag(0, 0)));
|
|
|
+ //粘贴事件
|
|
|
+ bindPasteBills(controller, billsSpread.getActiveSheet(), setting);
|
|
|
//补注内容改变
|
|
|
rechargeChange(controller);
|
|
|
//jobs
|
|
|
jobOperation(controller, jobsSheet, function(totalJobs){
|
|
|
+ //------关联表粘贴复制
|
|
|
+ bindPasteRel(jobsSheet, controller, totalJobs, jobsSetting);
|
|
|
//items
|
|
|
itemOperation(controller, itemsSheet, function(totalItems){
|
|
|
+ bindPasteItemsRel(itemsSheet, controller, totalItems, itemsSetting);
|
|
|
//节点操作
|
|
|
nodeOpration(controller, totalJobs, totalItems);
|
|
|
});
|
|
@@ -309,7 +320,7 @@
|
|
|
|
|
|
function setTagID(controller, setting){
|
|
|
if(controller.tree.items.length > 0){
|
|
|
- var length = controller.tree.items.length;
|
|
|
+ let length = controller.tree.items.length;
|
|
|
for(var i=0; i<length; i++){
|
|
|
setting.cols.forEach(function(col, colIdx){
|
|
|
if(controller.tree.items[i].data.ID){
|
|
@@ -322,11 +333,15 @@
|
|
|
|
|
|
function refreshBtn(controller){
|
|
|
controller.bind('refreshBaseActn', function (tree) {
|
|
|
- var showButton = function (show, btn) {
|
|
|
+ let showButton = function (show, btn) {
|
|
|
if (show) {
|
|
|
- btn.show();
|
|
|
+ //btn.show();
|
|
|
+ btn.css("opacity", "");
|
|
|
+ btn.removeClass("disabled");
|
|
|
} else {
|
|
|
- btn.hide();
|
|
|
+ //btn.hide();
|
|
|
+ btn.css("opacity", "0.2");
|
|
|
+ btn.addClass("disabled");
|
|
|
}
|
|
|
};
|
|
|
showButton(tree.selected && tree.selected.canUpLevel(), $('#upLevel'));
|
|
@@ -339,7 +354,7 @@
|
|
|
|
|
|
function rechargeChange(controller){
|
|
|
$('#exampleTextarea').bind('change', function(){
|
|
|
- var newData = $('#exampleTextarea').val();
|
|
|
+ let newData = $('#exampleTextarea').val();
|
|
|
if(controller.tree.selected){
|
|
|
rechargeController.updateRechar(controller.tree.selected, newData);
|
|
|
}
|
|
@@ -355,7 +370,7 @@
|
|
|
maxJobsNumber = result[0].code;
|
|
|
}
|
|
|
jobsAjax.getJobContent(billsLibId, function(datas){
|
|
|
- var totalJobs = createObj.newJobs();
|
|
|
+ let totalJobs = createObj.newJobs();
|
|
|
totalJobs.loadJobs(controller.tree.items, datas);
|
|
|
initData(controller, jobsSheet, jobsSetting, 'jobs');
|
|
|
myKey.delKey(jobsSpread, controller, totalJobs, jobsSetting, 'jobs');
|
|
@@ -377,7 +392,7 @@
|
|
|
maxItemsNumber = result[0].code;
|
|
|
}
|
|
|
itemsAjax.getItemCharacter(billsLibId, function(datas){
|
|
|
- var totalItems = createObj.newItems();
|
|
|
+ let totalItems = createObj.newItems();
|
|
|
totalItems.loadItems(controller.tree.items, datas);
|
|
|
initData(controller, itemsSheet, itemsSetting, 'items');
|
|
|
myKey.delKey(itemsSpread, controller, totalItems, itemsSetting, 'items');
|
|
@@ -393,10 +408,13 @@
|
|
|
//初始焦点工作表和项目表绑定数据
|
|
|
function initData(controller, sheet, setting, classify){
|
|
|
if(controller.tree.selected){
|
|
|
- var arr = controller.tree.selected[classify];
|
|
|
- var recharge = controller.tree.selected.data.recharge;
|
|
|
+ let arr = controller.tree.selected[classify];
|
|
|
+ let recharge = controller.tree.selected.data.recharge;
|
|
|
+ setSheet.setMaxRowCount(sheet, arr);
|
|
|
+ let prefix = classify === 'jobs' ? 'job' : 'item';
|
|
|
if(arr.length > 0){
|
|
|
- tools.reshowData(sheet, arr, setting, true);
|
|
|
+ //tools.reshowData(sheet, arr, setting, true);//update--
|
|
|
+ tools.orderReshowData(sheet, arr, setting, prefix,true);
|
|
|
}
|
|
|
if(recharge){
|
|
|
$('#exampleTextarea').val(recharge);
|
|
@@ -411,18 +429,23 @@
|
|
|
$('#exampleTextarea').val(controller.tree.selected.data.recharge);
|
|
|
tools.clearData(sheet);
|
|
|
if(field === 'jobs'){
|
|
|
- var jobs = controller.tree.selected.jobs;
|
|
|
+ let jobs = controller.tree.selected.jobs;
|
|
|
+ setSheet.setMaxRowCount(sheet, jobs);
|
|
|
if(jobs.length > 0){
|
|
|
- tools.reshowData(sheet, jobs, setting, true);
|
|
|
+ // tools.reshowData(sheet, jobs, setting, false);
|
|
|
+ tools.orderReshowData(sheet, jobs, setting, 'job', true);
|
|
|
orgJobData = sheet.getValue(0, 0);
|
|
|
}
|
|
|
+ sheetDatas = tools.getsheetDatas(sheet, 'jobs');
|
|
|
}
|
|
|
if(field === 'items'){
|
|
|
- var items = controller.tree.selected.items;
|
|
|
+ let items = controller.tree.selected.items;
|
|
|
+ setSheet.setMaxRowCount(sheet, items);
|
|
|
if(items.length > 0){
|
|
|
- tools.reshowData(sheet, items, setting, true);
|
|
|
+ tools.orderReshowData(sheet, items, setting, 'item', false);
|
|
|
orgItemData = sheet.getValue(0, 0);
|
|
|
}
|
|
|
+ sheetItemsDatas = tools.getsheetDatas(sheet, 'items');
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
@@ -432,45 +455,166 @@
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- function bindPasteBills(sheet, setting){
|
|
|
+ function bindPasteBills(controller, sheet, setting){
|
|
|
+ sheetBillsDatas = tools.getsheetDatas(sheet, 'bills', controller);
|
|
|
sheet.bind(GC.Spread.Sheets.Events.ClipboardPasted, function(sender, args){
|
|
|
- var datas = [], field;
|
|
|
- var orgRow = args.cellRange.row, orgCol = args.cellRange.col, rowCount = args.cellRange.rowCount, colCount = args.cellRange.colCount;
|
|
|
- var maxRow = orgRow + rowCount - 1, maxCol = orgCol + colCount -1;
|
|
|
- for(var i=orgRow; i<= maxRow; i++){
|
|
|
- var id = sheet.getTag(i, 0, GC.Spread.Sheets.SheetArea.viewport);
|
|
|
- if(id){
|
|
|
- var pasteJson = {billsLibId: billsLibId, ID: id, code: null, name: null, unit: null, ruleText: null};
|
|
|
- var colLen = sheet.getColumnCount(GC.Spread.Sheets.SheetArea.viewport);
|
|
|
- for(var j=0; j<colLen; j++){
|
|
|
+ let datas = [], field;
|
|
|
+ let orgRow = args.cellRange.row, orgCol = args.cellRange.col, rowCount = args.cellRange.rowCount, colCount = args.cellRange.colCount;
|
|
|
+ let maxRow = orgRow + rowCount - 1, maxCol = orgCol + colCount -1;
|
|
|
+ //let id = controller.tree.selected.getID();
|
|
|
+ let markRow = orgRow, colLen = sheet.getColumnCount(GC.Spread.Sheets.SheetArea.viewport);
|
|
|
+ //test
|
|
|
+ let validDatas = tools.getValidDatas(sheet, setting, args);
|
|
|
+ for(let i=orgRow, j=0; i<= maxRow; i++, j++){
|
|
|
+ let id = sheet.getTag(i, 0);
|
|
|
+ if(id && j< validDatas.length){
|
|
|
+ console.log(`id: ${id} row: ${i}`);
|
|
|
+ for(let k=0; k<colLen; k++){
|
|
|
setting.cols.forEach(function(col, colIdx){
|
|
|
- if(colIdx === j){
|
|
|
+ if(colIdx === k){
|
|
|
field = col.data.field;
|
|
|
}
|
|
|
});
|
|
|
- pasteJson[field] = sheet.getValue(i, j);
|
|
|
+ sheet.setValue(i, k, validDatas[j][field]);
|
|
|
}
|
|
|
- datas.push(pasteJson);
|
|
|
+ validDatas[j].billsLibId = billsLibId;
|
|
|
+ validDatas[j].ID = id;
|
|
|
+ datas.push(validDatas[j]);
|
|
|
+
|
|
|
+ }
|
|
|
+ else if(i< controller.tree.items.length && j>= validDatas.length) {
|
|
|
+ //reshow orgDatas
|
|
|
+ console.log(`rowIdx: ${i}`)
|
|
|
+ sheetBillsDatas.forEach(function(rowData){
|
|
|
+ if(rowData.rowIdx === i){
|
|
|
+ sheet.setValue(i, 0, rowData.code + '');
|
|
|
+ sheet.setValue(i, 1, rowData.name);
|
|
|
+ sheet.setValue(i, 2, rowData.unit + '');
|
|
|
+ sheet.setValue(i, 3, rowData.ruleText);
|
|
|
+ }
|
|
|
+ });
|
|
|
}
|
|
|
else {
|
|
|
sheet.clear(i, 0, 1, sheet.getColumnCount(), GC.Spread.Sheets.SheetArea.viewport,GC.Spread.Sheets.StorageType.data);
|
|
|
}
|
|
|
}
|
|
|
billsAjax.pasteBills(datas);
|
|
|
+ sheetBillsDatas = tools.getsheetDatas(sheet, 'bills', controller);
|
|
|
});
|
|
|
}
|
|
|
-
|
|
|
- function bindPasteRel(sheet, setting){
|
|
|
+ function bindPasteRel(sheet, controller, totalJobs, setting){
|
|
|
+ sheetDatas = tools.getsheetDatas(sheet, 'jobs');
|
|
|
sheet.bind(GC.Spread.Sheets.Events.ClipboardPasted, function(sender, args){
|
|
|
- var orgRow = args.cellRange.row, orgCol = args.cellRange.col, rowCount = args.cellRange.rowCount, colCount = args.cellRange.colCount;
|
|
|
- var maxRow = orgRow + rowCount - 1, maxCol = orgCol + colCount -1;
|
|
|
+ sheet.setColumnCount(2, GC.Spread.Sheets.SheetArea.viewport);
|
|
|
+ if(controller.tree.selected){
|
|
|
+ let orgRow = args.cellRange.row, orgCol = args.cellRange.col, rowCount = args.cellRange.rowCount, colCount = args.cellRange.colCount;
|
|
|
+ let maxRow = orgRow + rowCount - 1, maxCol = orgCol + colCount -1;
|
|
|
+ let pasteArr = [];
|
|
|
+ let crossedDatas = [];
|
|
|
+ let uncrossedDatas = [];
|
|
|
+ const colIdx = 1;
|
|
|
+ for(let i=orgRow; i<=maxRow; i++){
|
|
|
+ if(sheet.getCell(i, colIdx).value()){
|
|
|
+ pasteArr.push(sheet.getCell(i, colIdx).value());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ let uniqPasteArr = tools.uniqArr(pasteArr);
|
|
|
+ for(let i =orgRow, j=0; i<=uniqPasteArr.length+orgRow-1; i++, j++ ){
|
|
|
+ let flag = true;
|
|
|
+ let crossedData;
|
|
|
+ sheetDatas.forEach(function(rowData){
|
|
|
+ if(rowData.rowIdx === i && rowData.data !== uniqPasteArr[j]){
|
|
|
+ flag = false;
|
|
|
+ let serialNo = tools.getObj(controller.tree.selected.jobs, rowData.id, 'job');
|
|
|
+ crossedData = {
|
|
|
+ orgId: rowData.id,
|
|
|
+ newData: uniqPasteArr[j],
|
|
|
+ serialNo: serialNo
|
|
|
+ };
|
|
|
+ }
|
|
|
+ });
|
|
|
+ if(flag){
|
|
|
+ let serialNo = tools.getSerialNo(controller.tree.selected.jobs);
|
|
|
+ uncrossedDatas.push({data: uniqPasteArr[j], serialNo: serialNo});
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ crossedDatas.push(crossedData);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ let pasteDatas = tools.encapData(uncrossedDatas, crossedDatas, controller, totalJobs);
|
|
|
+ if(pasteDatas.updateDatas.length > 0 || pasteDatas.createDatas.length > 0){
|
|
|
+ billsAjax.pasteRel(pasteDatas.updateDatas, pasteDatas.createDatas, 'jobs', function(datas){
|
|
|
+ pasteController.frontOperator(sheet, setting, controller, totalJobs, datas);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ tools.orderReshowData(sheet, controller.tree.selected.jobs, setting, 'job', true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ tools.clearData(sheet);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ function bindPasteItemsRel(sheet, controller, totalItems, setting){
|
|
|
+ sheetItemsDatas = tools.getsheetDatas(sheet, 'items');
|
|
|
+ sheet.bind(GC.Spread.Sheets.Events.ClipboardPasted, function(sender, args){
|
|
|
+ sheet.setColumnCount(2, GC.Spread.Sheets.SheetArea.viewport);
|
|
|
+ if(controller.tree.selected){
|
|
|
+ let orgRow = args.cellRange.row, orgCol = args.cellRange.col, rowCount = args.cellRange.rowCount, colCount = args.cellRange.colCount;
|
|
|
+ let maxRow = orgRow + rowCount - 1, maxCol = orgCol + colCount -1;
|
|
|
+ let pasteArr = [];
|
|
|
+ let crossedDatas = [];
|
|
|
+ let uncrossedDatas = [];
|
|
|
+ const colIdx = 1;
|
|
|
+ for(let i=orgRow; i<=maxRow; i++){
|
|
|
+ if(sheet.getCell(i, colIdx).value()){
|
|
|
+ pasteArr.push(sheet.getCell(i, colIdx).value());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ let uniqPasteArr = tools.uniqArr(pasteArr);
|
|
|
+ for(let i =orgRow, j=0; i<=uniqPasteArr.length+orgRow-1; i++, j++ ){
|
|
|
+ let flag = true;
|
|
|
+ let crossedData;
|
|
|
+ sheetItemsDatas.forEach(function(rowData){
|
|
|
+ if(rowData.rowIdx === i && rowData.data !== uniqPasteArr[j]){
|
|
|
+ flag = false;
|
|
|
+ let serialNo = tools.getObj(controller.tree.selected.items, rowData.id, 'item');
|
|
|
+ crossedData = {
|
|
|
+ orgId: rowData.id,
|
|
|
+ newData: uniqPasteArr[j],
|
|
|
+ serialNo: serialNo
|
|
|
+ };
|
|
|
+ }
|
|
|
+ });
|
|
|
+ if(flag){
|
|
|
+ let serialNo = tools.getSerialNo(controller.tree.selected.items);
|
|
|
+ uncrossedDatas.push({data: uniqPasteArr[j], serialNo: serialNo});
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ crossedDatas.push(crossedData);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ let pasteDatas = tools.encapItemsData(uncrossedDatas, crossedDatas, controller, totalItems);
|
|
|
+ if(pasteDatas.updateDatas.length > 0 || pasteDatas.createDatas.length > 0){
|
|
|
+ billsAjax.pasteRel(pasteDatas.updateDatas, pasteDatas.createDatas, 'items', function(datas){
|
|
|
+ pasteController.frontItemsRelOperator(sheet, setting, controller, totalItems, datas);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ tools.orderReshowData(sheet, controller.tree.selected.items, setting, 'item', true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ tools.clearData(sheet);
|
|
|
+ }
|
|
|
});
|
|
|
}
|
|
|
|
|
|
|
|
|
function buildJobs(jobsSpread, setting){
|
|
|
setSheet.initSheet(jobsSpread, setting);
|
|
|
- setSheet.setMaxRowCount(jobsSpread.getActiveSheet(), 10);
|
|
|
+ // setSheet.setMaxRowCount(jobsSpread.getActiveSheet(), 10);
|
|
|
myKey.downKey(jobsSpread);
|
|
|
myKey.enterKey(jobsSpread);
|
|
|
TREE_SHEET_HELPER.loadSheetHeader(jobsSetting, jobsSpread.getActiveSheet());
|
|
@@ -478,7 +622,7 @@
|
|
|
|
|
|
function buildItems(itemsSpread, setting){
|
|
|
setSheet.initSheet(itemsSpread, setting);
|
|
|
- setSheet.setMaxRowCount(itemsSpread.getActiveSheet(), 10);
|
|
|
+ // setSheet.setMaxRowCount(itemsSpread.getActiveSheet(), 10);
|
|
|
myKey.downKey(itemsSpread);
|
|
|
myKey.enterKey(itemsSpread);
|
|
|
TREE_SHEET_HELPER.loadSheetHeader(itemsSetting, itemsSpread.getActiveSheet());
|