'use strict';
/**
*
*
* @author Zhong
* @date 2019/6/5
* @version
*/
//导出接口相关
const ExportView = (() => {
let _base = XML_EXPORT_BASE,
_cache = _base.CACHE,
_util = _base.UTIL;
// 导出数据缓存
let _exportCache = [];
//设置工程编号表格数据设置
const sheetSetting = {
header: [
{headerName: '名称', headerWidth: 200, dataCode: 'name', dataType: 'String'},
{headerName: '工程编号', headerWidth: 200, dataCode: 'code', dataType: 'String'},
],
view: {
lockColumns: ['name'],
lockRows: [0]
}
};
//操作状态
const STATE = {
checking: false, //自检
exporting: false, //导出
confirming: false //导出确认
};
let spread = null;
//初始化设置工程编号表格
function initSpread(datas) {
if (spread) {
return;
}
spread = SheetDataHelper.createNewSpread($("#exportSpread")[0], 1);
sheetCommonObj.spreadDefaultStyle(spread);
let sheet = spread.getSheet(0);
sheetCommonObj.initSheet(sheet, sheetSetting, 30);
sheet.setRowCount(datas.length);
sheetCommonObj.showTreeData(sheet, sheetSetting, datas);
}
//获取设置的工程编号
function getCodeFromSheet(sheet) {
let codeCol = 1;
let rst = [];
//排除建设项目行
for (let row = 1; row < sheet.getRowCount(); row++) {
rst.push(sheet.getText(row, codeCol) || '');
}
return rst;
}
// 回到初始状态,需要清空cache中的数据
function resetState() {
_exportCache = [];
_cache.clear();
}
// 设置提示高度样式
function setHeightByInfo(infos) {
if (infos.length * 20 > 400) {
$('#hintBox_caption').addClass('export-check');
}
}
// 显示工程编码设置窗口
function showSetCodeModal(isPring) {
if (isPring) {
setTimeout(() => {
$('#exportCode').modal('show');
}, 300);
} else {
$('#exportCode').modal('show');
}
}
//事件监听
function exportListener() {
//导出接口-项目自检
$('#export-check').click(async function () {
let failList = _cache.getItem('failList');
let checkedDatas = $('#export input[type="checkbox"]:checked');
if (!checkedDatas.length) {
return;
}
if (STATE.checking) {
return;
}
STATE.checking = true;
let pr = new SCComponent.InitProgressBar();
try {
if (!_exportCache || !_exportCache.length) {
pr.start('导出数据接口', '正在自检,请稍候……');
for (let checkedData of checkedDatas) {
let fileKind = parseInt($(checkedData).val());
let exportData = await _base.extractExportData(XMLStandard.entry, _base.CONFIG.GRANULARITY.PROJECT,
fileKind, projectObj.project.ID(), userID);
_exportCache.push(...exportData);
}
}
failList = _util.deWeightHints(failList);
if (failList.length) {
//设置提示弹窗
setHeightByInfo(failList);
throw failList.join('
');
}
// 弱自检
const infos = _util.softCheck();
if (infos.length) {
setHeightByInfo(infos);
throw infos.join('
');
}
throw '自检完成,未检测到错误数据。'
} catch (err) {
alert(err);
}
pr.end();
setTimeout(() => {
STATE.checking = false;
}, 300);
});
//导出接口,如果没有错误,弹出工程编号设置窗口
$('#export-confirm').click(async function () {
let failList = _cache.getItem('failList');
let checkedDatas = $('#export input[type="checkbox"]:checked');
if (!checkedDatas.length) {
return;
}
if (STATE.exporting) {
return;
}
STATE.exporting = true;
let pr = new SCComponent.InitProgressBar();
try {
let isPring = false; //是否调用了进度条(控制工程窗口什么时候显示,优化交互)
if (!_exportCache || !_exportCache.length) {
isPring = true;
pr.start('导出数据接口', '正在导出文件,请稍候……');
for (let checkedData of checkedDatas) {
let fileKind = parseInt($(checkedData).val());
let exportData = await _base.extractExportData(XMLStandard.entry, _base.CONFIG.GRANULARITY.PROJECT,
fileKind, projectObj.project.ID(), userID);
_exportCache.push(...exportData);
}
pr.end();
}
failList = _util.deWeightHints(failList);
if (failList.length) {
//错误-设置提示弹窗
setHeightByInfo(failList);
throw failList.join('
');
}
// 如果没有自检过,需要进行弱自检,并且弹出的窗口包含“继续、取消”按钮
const infos = _util.softCheck();
if (infos.length) {
const doYes = () => {
showSetCodeModal(isPring);
};
hintBox.infoBox('系统提示', infos.join('
'), hintBox.btnType.yesNo, doYes, null, ['继续', '取消']);
setTimeout(() => {
STATE.exporting = false;
}, 300);
return;
}
//弹出工程编号设置窗口
showSetCodeModal(isPring);
} catch (err) {
console.log(err);
pr.end();
alert(err);
}
setTimeout(() => {
STATE.exporting = false;
}, 300);
});
//工程编号设置窗口-----
//设置工程编号
$('#exportCode').on('shown.bs.modal', function () {
if (!_exportCache || !_exportCache.length) {
alert('数据错误!');
$(this).modal('hide');
return false;
}
let projectData = _cache.getItem('projectData');
initSpread(XML_EXPORT_BASE.UTIL.getCodeSheetData(projectData));
});
//设置完工程编号后,导出数据。如果选中多个文件,导出压缩包
$('#exportCode-confirm').click(async function () {
if (!spread || !_exportCache || !_exportCache.length) {
return false;
}
if (STATE.confirming) {
return;
}
STATE.confirming = true;
let pr = new SCComponent.InitProgressBar();
try {
// 工程编号
let codes = getCodeFromSheet(spread.getSheet(0));
if (codes.includes('')) {
alert('单项、单位工程工程编号不可为空。');
STATE.confirming = false;
return false;
}
if ([...new Set(codes)].length !== codes.length) {
alert('单项、单位工程工程编号必须唯一。');
STATE.confirming = false;
return false;
}
pr.start('导出数据接口', '正在导出文件,请稍候……');
// 导出文件
await _base.exportFile(codes, _exportCache, XMLStandard.resetContentCode, XMLStandard.saveAsFile);
} catch (err) {
console.log(err);
alert(err);
}
pr.end();
$('#exportCode').modal('hide');
$('#export').modal('hide');
setTimeout(() => {
STATE.confirming = false;
}, 300);
});
//导出窗口--------
$('#export').on('hide.bs.modal', function() {
resetState();
STATE.checking = false;
STATE.exporting = false;
STATE.confirming = false;
//恢复设置提示弹窗 因为是共用的alert
$('#hintBox_caption').removeClass('export-check');
$('#export input[type="checkbox"]:eq(0)').prop('checked', true);
if (spread) {
spread.destroy();
spread = null;
}
});
$('#export input[type="checkbox"]').click(function () {
resetState();
});
}
return {exportListener}
})();