提交 18ae5a3d authored 作者: 钟是志's avatar 钟是志

导出文件函数修改

上级 8dea8c22
...@@ -4,67 +4,68 @@ import { Modal, message, notification, Tooltip, Spin, Popover, Popconfirm } from ...@@ -4,67 +4,68 @@ import { Modal, message, notification, Tooltip, Spin, Popover, Popconfirm } from
import { giveFilePostDataInfoForTrue } from '@/webPublic/one_stop_public/Base16'; import { giveFilePostDataInfoForTrue } from '@/webPublic/one_stop_public/Base16';
import { import {
getSpanJson, getSpanJson,
getColumns, getColumns,
getColumnsDataRealize, getColumnsDataRealize,
getColumnsSqlKeyRealize, getColumnsSqlKeyRealize,
getWord, getWord,
renderContentAll, renderContentAll,
renderContentRow, renderContentRow, downloadFile,
} from './globalFunction'; } from './globalFunction';
export function giveSmartFormGlobalProps({ export function giveSmartFormGlobalProps({
fromStart = false, fromStart = false,
hasSingle = false, hasSingle = false,
isHandle = false, isHandle = false,
onlyRead = false, // 是否此表单所有组件只读 onlyRead = false, // 是否此表单所有组件只读
taskCells = [], taskCells = [],
data = {}, data = {},
nextUsers = {}, // nextUsers = {}, //
calculateFlowData = [], // 移动端使用 用于分块块 禅道 23933 移动端全表单后审核步骤的显示问题优化 calculateFlowData = [], // 移动端使用 用于分块块 禅道 23933 移动端全表单后审核步骤的显示问题优化
}) { }) {
window.smartFormGlobalProps = { window.smartFormGlobalProps = {
fromStart, fromStart,
hasSingle, hasSingle,
isHandle, isHandle,
taskCells, taskCells,
data, data,
nextUsers, nextUsers,
calculateFlowData, calculateFlowData,
onlyRead, onlyRead,
apiList: { apiList: {
giveFilePostDataInfoForTrue, giveFilePostDataInfoForTrue,
getSpanJson, getSpanJson,
getColumns, getColumns,
getColumnsDataRealize, getColumnsDataRealize,
getColumnsSqlKeyRealize, getColumnsSqlKeyRealize,
getWord, getWord,
renderContentAll, downloadFile,
renderContentRow, renderContentAll,
remark: { renderContentRow,
'giveFilePostDataInfoForTrue(params, url) ': `将接口参数 二进制文件化 并返回新的接口地址与参数';`, remark: {
'getSpanJson(mergeKey, data, eliminateStr)': `列表获取纵向合并数据 ;参数-> mergeKey : 需要合并的表头key data : 列表数据 eliminateStr : 需要忽略合并的数据`, downloadFile: '下载文件函数.',
'getColumns(columns)': `获取ant表头的属性 ;参数->columns : ant的表头`, 'giveFilePostDataInfoForTrue(params, url) ': `将接口参数 二进制文件化 并返回新的接口地址与参数';`,
'getColumnsDataRealize({data, mergeKey, columns, styles, defect, fileName, ext , eliminateStr})': `下载列表合并的数据;参数-> 前三个必填data, mergeKey, columns`, 'getSpanJson(mergeKey, data, eliminateStr)': `列表获取纵向合并数据 ;参数-> mergeKey : 需要合并的表头key data : 列表数据 eliminateStr : 需要忽略合并的数据`,
'getColumnsSqlKeyRealize({sqlKey, columns, styles, fileName, ext})': `下载列表表头合并的数据;参数->前两个个必填sqlKey, columns`, 'getColumns(columns)': `获取ant表头的属性 ;参数->columns : ant的表头`,
'getWord({templatePath,params, title, allValues, listConfig, ext})': `下载文档地址 ;参数->前五个必填 templatePath,params, title, allValues, listConfig`, 'getColumnsDataRealize({data, mergeKey, columns, styles, defect, fileName, ext , eliminateStr})': `下载列表合并的数据;参数-> 前三个必填data, mergeKey, columns`,
'renderContentAll(value, row, index, key, spanData, cloumnNames) ': `ant表头横向、纵向合并 ;参数->所有必填 value, row, index, key, spanData, cloumnNames 实例:render:(value, row, index)=>{return renderContentAll(value, row, index,"inst_name",spanData,cloumnNames)}`, 'getColumnsSqlKeyRealize({sqlKey, columns, styles, fileName, ext})': `下载列表表头合并的数据;参数->前两个个必填sqlKey, columns`,
'renderContentRow(value, row, index, key, spanData, cloumnNames) ': `ant表头纵向合并 ;参数->所有必填 value, row, index, key, spanData, cloumnNames 实例:render:(value, row, index)=>{return renderContentRow(value, row, index,"inst_name",spanData,cloumnNames)}`, 'getWord({templatePath,params, title, allValues, listConfig, ext})': `下载文档地址 ;参数->前五个必填 templatePath,params, title, allValues, listConfig`,
}, 'renderContentAll(value, row, index, key, spanData, cloumnNames) ': `ant表头横向、纵向合并 ;参数->所有必填 value, row, index, key, spanData, cloumnNames 实例:render:(value, row, index)=>{return renderContentAll(value, row, index,"inst_name",spanData,cloumnNames)}`,
}, 'renderContentRow(value, row, index, key, spanData, cloumnNames) ': `ant表头纵向合并 ;参数->所有必填 value, row, index, key, spanData, cloumnNames 实例:render:(value, row, index)=>{return renderContentRow(value, row, index,"inst_name",spanData,cloumnNames)}`,
activeJsonConfig: { },
}, // 27282 双选会报名后管理员修改举办时间 但是单位申请信息么有随着更新 },
publicComponent: { activeJsonConfig: {}, // 27282 双选会报名后管理员修改举办时间 但是单位申请信息么有随着更新
React, publicComponent: {
Modal, React,
message, Modal,
notification, message,
Tooltip, notification,
Spin, Tooltip,
Popover, Spin,
Popconfirm, Popover,
moment, Popconfirm,
}, moment,
}; },
return true; };
return true;
} }
import { giveFilePostDataInfoForTrue } from '@/webPublic/one_stop_public/Base16'; import { giveFilePostDataInfoForTrue } from '@/webPublic/one_stop_public/Base16';
import { queryOauthActionPath } from '@/webPublic/one_stop_public/utils/queryConfig'; import { queryOauthActionPath } from '@/webPublic/one_stop_public/utils/queryConfig';
import { getToken } from '@/webPublic/one_stop_public/utils/token'; import { getToken } from '@/webPublic/one_stop_public/utils/token';
import { deepCopy, getHeaders } from '@/webPublic/zyd_public/utils/utils'; import { deepCopy } from '@/webPublic/zyd_public/utils/utils';
const apiUrl = queryOauthActionPath(); const apiUrl = queryOauthActionPath();
...@@ -21,108 +21,111 @@ const apiUrl = queryOauthActionPath(); ...@@ -21,108 +21,111 @@ const apiUrl = queryOauthActionPath();
* rowSpanData 列合并数据,colSpanData行合并数据 * rowSpanData 列合并数据,colSpanData行合并数据
* */ * */
export function getSpanJson({ export function getSpanJson({
mergeKey, data, eliminateRow = [], eliminateCol = [] mergeKey,
}) { data,
eliminateRow = [],
try { eliminateCol = []
let dataList = deepCopy(data); }) {
return {
rowSpanData: getRowSpanJson(mergeKey,dataList, eliminateRow), try {
colSpanData: getColSpanJson(mergeKey, dataList, eliminateCol), let dataList = deepCopy(data);
}; return {
} catch (err) { rowSpanData: getRowSpanJson(mergeKey, dataList, eliminateRow),
console.table(err); colSpanData: getColSpanJson(mergeKey, dataList, eliminateCol),
} };
} catch (err) {
console.table(err);
}
} }
function getRowSpanJson(cloumnNames, data, eliminateStr = []) { function getRowSpanJson(cloumnNames, data, eliminateStr = []) {
data = deepCopy(data); data = deepCopy(data);
//纵向合并 //纵向合并
// 获取列的 dataIndex 集合 // 获取列的 dataIndex 集合
var rowSpanJson = {}; var rowSpanJson = {};
//保存上一个name //保存上一个name
var beforeNameMap = {}; var beforeNameMap = {};
//相同name出现的次数 //相同name出现的次数
var countMap = {}; var countMap = {};
//该name第一次出现的位置 //该name第一次出现的位置
var startIndexMap = {}; var startIndexMap = {};
for (var idx = 0; idx < data.length; idx++) { for (var idx = 0; idx < data.length; idx++) {
var dataItem = data[idx]; var dataItem = data[idx];
for (var idj = 0; idj < cloumnNames.length; idj++) { for (var idj = 0; idj < cloumnNames.length; idj++) {
var keyItem = cloumnNames[idj]; var keyItem = cloumnNames[idj];
var dataItemValue = dataItem[keyItem]; var dataItemValue = dataItem[keyItem];
if (idx === 0) { if (idx === 0) {
beforeNameMap[keyItem] = dataItem[keyItem]; beforeNameMap[keyItem] = dataItem[keyItem];
countMap[keyItem] = 1; countMap[keyItem] = 1;
startIndexMap[keyItem] = 0; startIndexMap[keyItem] = 0;
rowSpanJson[keyItem] = new Array(data.length); rowSpanJson[keyItem] = new Array(data.length);
rowSpanJson[keyItem][0] = 1; rowSpanJson[keyItem][0] = 1;
continue; continue;
} }
if (dataItemValue === beforeNameMap[keyItem] && eliminateStr.indexOf(dataItemValue) === -1) { if (dataItemValue === beforeNameMap[keyItem] && eliminateStr.indexOf(dataItemValue) === -1) {
countMap[keyItem] = countMap[keyItem] + 1; countMap[keyItem] = countMap[keyItem] + 1;
rowSpanJson[keyItem][startIndexMap[keyItem]] = countMap[keyItem]; rowSpanJson[keyItem][startIndexMap[keyItem]] = countMap[keyItem];
rowSpanJson[keyItem][idx] = 0; rowSpanJson[keyItem][idx] = 0;
} else { } else {
countMap[keyItem] = 1; countMap[keyItem] = 1;
beforeNameMap[keyItem] = dataItemValue; beforeNameMap[keyItem] = dataItemValue;
startIndexMap[keyItem] = idx; startIndexMap[keyItem] = idx;
rowSpanJson[keyItem][idx] = 1; rowSpanJson[keyItem][idx] = 1;
} }
}
} }
return rowSpanJson; }
return rowSpanJson;
} }
function getColSpanJson(cloumnNames, data, eliminateStr = []) { function getColSpanJson(cloumnNames, data, eliminateStr = []) {
data = deepCopy(data); data = deepCopy(data);
//横向合并 //横向合并
var colSpanJson = {}; var colSpanJson = {};
for (let idx = 0; idx < data.length; idx++) { for (let idx = 0; idx < data.length; idx++) {
let dataItem = data[idx]; let dataItem = data[idx];
let colSum = 1; //宽度 let colSum = 1; //宽度
let triggerColIndex = null; //记录触发时得位置 let triggerColIndex = null; //记录触发时得位置
let triggerColSum = 1; //记录触发时得位置 let triggerColSum = 1; //记录触发时得位置
let isCol = false; let isCol = false;
for (let idj = 0; idj < cloumnNames.length; idj++) { for (let idj = 0; idj < cloumnNames.length; idj++) {
let keyItem = cloumnNames[idj]; let keyItem = cloumnNames[idj];
let dataItemValue = dataItem[keyItem]; let dataItemValue = dataItem[keyItem];
let dataItemValueNext = idj < cloumnNames.length - 1 ? dataItem[cloumnNames[idj + 1]] : null; let dataItemValueNext = idj < cloumnNames.length - 1 ? dataItem[cloumnNames[idj + 1]] : null;
//console.log("dataItemValue",dataItemValue,idj) //console.log("dataItemValue",dataItemValue,idj)
if (idx === 0) { if (idx === 0) {
colSpanJson[keyItem] = new Array(getRowSpanJson.length); colSpanJson[keyItem] = new Array(getRowSpanJson.length);
} }
if ( if (
!isCol && !isCol &&
dataItemValue === dataItemValueNext && dataItemValue === dataItemValueNext &&
eliminateStr.indexOf(dataItemValue) === -1 eliminateStr.indexOf(dataItemValue) === -1
) { ) {
//触发合并 //触发合并
triggerColIndex = keyItem; triggerColIndex = keyItem;
isCol = true; isCol = true;
} }
if (isCol && (dataItemValue !== dataItemValueNext || dataItemValueNext == null)) { if (isCol && (dataItemValue !== dataItemValueNext || dataItemValueNext == null)) {
//合并结束 //合并结束
isCol = false; isCol = false;
} }
if (isCol) { if (isCol) {
//计数 //计数
triggerColSum++; triggerColSum++;
} }
if (!isCol && triggerColIndex !== null) { if (!isCol && triggerColIndex !== null) {
colSpanJson[triggerColIndex][idx] = triggerColSum; colSpanJson[triggerColIndex][idx] = triggerColSum;
colSpanJson[keyItem][idx] = 0; colSpanJson[keyItem][idx] = 0;
triggerColIndex = null; triggerColIndex = null;
} else if(isCol && triggerColIndex !== null ) { } else if (isCol && triggerColIndex !== null) {
colSpanJson[keyItem][idx] = 0; colSpanJson[keyItem][idx] = 0;
} else { } else {
colSpanJson[keyItem][idx] = colSum; colSpanJson[keyItem][idx] = colSum;
} }
}
} }
//console.log("colSpanJson",colSpanJson) }
return colSpanJson; //console.log("colSpanJson",colSpanJson)
return colSpanJson;
} }
/** /**
...@@ -136,105 +139,111 @@ function getColSpanJson(cloumnNames, data, eliminateStr = []) { ...@@ -136,105 +139,111 @@ function getColSpanJson(cloumnNames, data, eliminateStr = []) {
* columnsHeight 行数 * columnsHeight 行数
* */ * */
export function getColumns(columns) { export function getColumns(columns) {
columns = deepCopy(columns); columns = deepCopy(columns);
const uj = { const uj = {
t: 1, t: 1,
v: '序号', v: '序号',
s: 'header', s: 'header',
}; };
let columnsHeight = 0; let columnsHeight = 0;
getColumnsMaxLevel(columns); //递归行数 getColumnsMaxLevel(columns); //递归行数
let columnsKey = []; let columnsKey = [];
const columnsList = new Array(columnsHeight).fill([]); const columnsList = new Array(columnsHeight).fill([]);
let col = 1; let col = 1;
for (var i in columnsList) { for (var i in columnsList) {
columnsList[i] = new Array(getColumnsWidth(columns)).fill({}); columnsList[i] = new Array(getColumnsWidth(columns)).fill({});
} }
function getColumnsData(data = [], res = [], level = 1) { function getColumnsData(data = [], res = [], level = 1) {
try{ try {
for (let item of data) { for (let item of data) {
//item.key = i; //item.key = i;
let isLast = !item.children; let isLast = !item.children;
item.level = level; item.level = level;
item.isLast = isLast; item.isLast = isLast;
item.width = !isLast ? getColumnsWidth(item.children) : 1; item.width = !isLast ? getColumnsWidth(item.children) : 1;
item.col = col; item.col = col;
res.push(item); res.push(item);
columnsList[level - 1][col - 1] = { columnsList[level - 1][col - 1] = {
...uj, ...uj,
v: item.title, v: item.title,
}; };
if (!isLast) { if (!isLast) {
if (Array.isArray(item.children)) { if (Array.isArray(item.children)) {
let x = level + 1; let x = level + 1;
getColumnsData(item.children, res, x); getColumnsData(item.children, res, x);
}
} else {
col++;
columnsKey.push(item['dataIndex']);
} }
} else {
col++;
columnsKey.push(item['dataIndex']);
} }
return res;
}catch (e) {
debugger;
console.table(e);
return false;
} }
return res;
} catch (e) {
debugger;
console.table(e);
return false;
} }
}
//递归行数
function getColumnsMaxLevel(data = [], level = 1) { //递归行数
for (let item of data) { function getColumnsMaxLevel(data = [], level = 1) {
let isLast = !item.children; for (let item of data) {
if (!isLast && Array.isArray(item.children)) { let isLast = !item.children;
let x = level + 1; if (!isLast && Array.isArray(item.children)) {
if (columnsHeight < x) { let x = level + 1;
columnsHeight = x; if (columnsHeight < x) {
} columnsHeight = x;
getColumnsMaxLevel(item.children, x);
}else{
columnsHeight += 1;
}
} }
return level; getColumnsMaxLevel(item.children, x);
} else {
columnsHeight += 1;
}
} }
return level;
//递归当前数据宽度 }
function getColumnsWidth(data = [], sum = 0) {
for (let item of data) { //递归当前数据宽度
if (!item.children) { function getColumnsWidth(data = [], sum = 0) {
sum++; for (let item of data) {
} else { if (!item.children) {
sum = getColumnsWidth(item.children, sum); sum++;
} } else {
} sum = getColumnsWidth(item.children, sum);
return sum; }
} }
return sum;
}
let columnsHandle = getColumnsData(columns).filter((v, i) => { let columnsHandle = getColumnsData(columns)
return (v.level < columnsHeight && v.isLast) || v.width > 1; .filter((v, i) => {
return (v.level < columnsHeight && v.isLast) || v.width > 1;
}); });
let columnsMerges = []; let columnsMerges = [];
columnsHandle.forEach((v, i) => { columnsHandle.forEach((v, i) => {
let { isLast, width, col, level } = v; let {
let nowCol = col - 1; isLast,
let nowLevel = level - 1; width,
if (isLast && width === 1) { col,
//合并表格的 开始行、结束行、开始列、结束列 level
columnsMerges.push([nowLevel, columnsHeight - 1, nowCol, nowCol]); } = v;
} let nowCol = col - 1;
if (!isLast && width > 1) { let nowLevel = level - 1;
columnsMerges.push([nowLevel, nowLevel, nowCol, nowCol + width - 1]); if (isLast && width === 1) {
} //合并表格的 开始行、结束行、开始列、结束列
}); columnsMerges.push([nowLevel, columnsHeight - 1, nowCol, nowCol]);
return { }
columnsList, if (!isLast && width > 1) {
columnsMerges, columnsMerges.push([nowLevel, nowLevel, nowCol, nowCol + width - 1]);
columnsKey, }
columnsHeight, });
}; return {
columnsList,
columnsMerges,
columnsKey,
columnsHeight,
};
} }
/** /**
...@@ -249,74 +258,78 @@ export function getColumns(columns) { ...@@ -249,74 +258,78 @@ export function getColumns(columns) {
* 返回值 * 返回值
* */ * */
export function getColumnsSqlKeyRealize({ export function getColumnsSqlKeyRealize({
sqlKey, sqlKey,
columns, columns,
styles, styles,
fileName = '导出文件', fileName = '导出文件',
ext = 'xlsx', ext = 'xlsx',
}) { }) {
columns = deepCopy(columns); columns = deepCopy(columns);
let { columnsList, columnsMerges, columnsKey } = getColumns(columns); let {
columnsList,
let content = { columnsMerges,
sheets: [ columnsKey
{ } = getColumns(columns);
name: fileName,
cells: columnsList, let content = {
merges: columnsMerges, sheets: [
sqlKey: sqlKey, //sql编码 {
sqlKeyHeader: columnsKey, //sql对应key对应列 name: fileName,
}, cells: columnsList,
], merges: columnsMerges,
styles: { sqlKey: sqlKey, //sql编码
header: { sqlKeyHeader: columnsKey, //sql对应key对应列
font: { },
bold: false, ],
fontHeightInPoints: 12, styles: {
}, header: {
alignment: 'CENTER', font: {
borderLeft: 'THIN', bold: false,
borderTop: 'THIN', fontHeightInPoints: 12,
borderBottom: 'THIN',
borderRight: 'THIN',
verticalAlignment: 'CENTER', //TOP、CENTER、BOTTOM、JUSTIFY、DISTRIBUTED
wrapText: true,
rowHeights: 20,
colWidths: 250,
},
head: {
font: {
bold: true,
},
alignment: 'CENTER',
},
}, },
}; alignment: 'CENTER',
if (styles) { borderLeft: 'THIN',
content.styles = styles; borderTop: 'THIN',
} borderBottom: 'THIN',
try { borderRight: 'THIN',
let getFileData = giveFilePostDataInfoForTrue( verticalAlignment: 'CENTER', //TOP、CENTER、BOTTOM、JUSTIFY、DISTRIBUTED
{ wrapText: true,
content: JSON.stringify(content), rowHeights: 20,
title: fileName, colWidths: 250,
}, },
`${apiUrl + '/DataObjApi/exportCustom'}`, head: {
); font: {
let token = getToken(); bold: true,
downloadFile( },
getFileData.url, alignment: 'CENTER',
{ },
...getFileData.datas, },
token: token, };
}, if (styles) {
fileName, content.styles = styles;
ext, }
); try {
} catch (err) { let getFileData = giveFilePostDataInfoForTrue(
console.table(err); {
} content: JSON.stringify(content),
title: fileName,
},
`${apiUrl + '/DataObjApi/exportCustom'}`,
);
let token = getToken();
downloadFile(
getFileData.url,
{
...getFileData.datas,
token: token,
},
fileName,
ext,
);
} catch (err) {
console.table(err);
}
} }
/** /**
...@@ -333,168 +346,182 @@ export function getColumnsSqlKeyRealize({ ...@@ -333,168 +346,182 @@ export function getColumnsSqlKeyRealize({
* 返回值 * 返回值
* */ * */
export function getColumnsDataRealize({ export function getColumnsDataRealize({
data = [], data = [],
mergeKey = [], mergeKey = [],
columns, columns,
styles, styles,
defect = null, defect = null,
fileName = '导出文件', fileName = '导出文件',
ext = 'xlsx', ext = 'xlsx',
eliminateRow = [], eliminateRow = [],
eliminateCol = [], eliminateCol = [],
}) { }) {
columns = deepCopy(columns); columns = deepCopy(columns);
data = deepCopy(data); data = deepCopy(data);
let { columnsList, columnsMerges, columnsKey, columnsHeight } = getColumns(columns); let {
let { colSpanData, rowSpanData } = getSpanJson({ mergeKey, data, eliminateRow, eliminateCol }); columnsList,
// 处理数据 columnsMerges,
let bodyData = []; columnsKey,
let dataMerges = []; columnsHeight
const uj = { } = getColumns(columns);
t: 1, let {
v: '序号', colSpanData,
s: 'header', rowSpanData
}; } = getSpanJson({
try { mergeKey,
data.forEach((dv, di) => { data,
let nowArroy = new Array(columnsKey.length).fill({}); eliminateRow,
columnsKey.forEach((av, ai) => { eliminateCol
nowArroy[ai] = { });
...uj, // 处理数据
v: av in dv && dv[av] != null ? dv[av].toString() : defect || '', let bodyData = [];
}; let dataMerges = [];
}); const uj = {
bodyData.push(nowArroy); t: 1,
}); v: '序号',
// 处理合并数据 s: 'header',
mergeKey.forEach((mv, mi) => { };
rowSpanData[mv].forEach((cv, ci) => { try {
if (cv > 1) { data.forEach((dv, di) => {
//合并表格的 开始行、结束行、开始列、结束列 let nowArroy = new Array(columnsKey.length).fill({});
let rowIndex = columnsKey.indexOf(mv); columnsKey.forEach((av, ai) => {
dataMerges.push([columnsHeight + ci, columnsHeight + ci + cv - 1, rowIndex, rowIndex]); nowArroy[ai] = {
} ...uj,
}); v: av in dv && dv[av] != null ? dv[av].toString() : defect || '',
colSpanData[mv].forEach((cv, ci) => { };
if (cv > 1) { });
//合并表格的 开始行、结束行、开始列、结束列 bodyData.push(nowArroy);
let rowIndex = columnsKey.indexOf(mv); });
dataMerges.push([columnsHeight + ci, columnsHeight + ci, rowIndex, rowIndex + cv - 1]); // 处理合并数据
} mergeKey.forEach((mv, mi) => {
}); rowSpanData[mv].forEach((cv, ci) => {
}); if (cv > 1) {
} catch (err) { //合并表格的 开始行、结束行、开始列、结束列
console.table(err); let rowIndex = columnsKey.indexOf(mv);
} dataMerges.push([columnsHeight + ci, columnsHeight + ci + cv - 1, rowIndex, rowIndex]);
}
});
let content = { colSpanData[mv].forEach((cv, ci) => {
sheets: [ if (cv > 1) {
{ //合并表格的 开始行、结束行、开始列、结束列
name: fileName, let rowIndex = columnsKey.indexOf(mv);
cells: [...columnsList, ...bodyData], dataMerges.push([columnsHeight + ci, columnsHeight + ci, rowIndex, rowIndex + cv - 1]);
merges: [...columnsMerges, ...dataMerges], }
}, });
], });
styles: { } catch (err) {
header: { console.table(err);
font: { }
bold: false,
fontHeightInPoints: 12,
}, let content = {
alignment: 'CENTER', sheets: [
borderLeft: 'THIN', {
borderTop: 'THIN', name: fileName,
borderBottom: 'THIN', cells: [...columnsList, ...bodyData],
borderRight: 'THIN', merges: [...columnsMerges, ...dataMerges],
verticalAlignment: 'CENTER', //TOP、CENTER、BOTTOM、JUSTIFY、DISTRIBUTED },
wrapText: true, ],
rowHeights: 20, styles: {
colWidths: 250, header: {
}, font: {
head: { bold: false,
font: { fontHeightInPoints: 12,
bold: true,
},
alignment: 'CENTER',
},
}, },
}; alignment: 'CENTER',
if (styles) { borderLeft: 'THIN',
content.styles = styles; borderTop: 'THIN',
} borderBottom: 'THIN',
try { borderRight: 'THIN',
let getFileData = giveFilePostDataInfoForTrue( verticalAlignment: 'CENTER', //TOP、CENTER、BOTTOM、JUSTIFY、DISTRIBUTED
{ wrapText: true,
content: JSON.stringify(content), rowHeights: 20,
title: fileName, colWidths: 250,
}, },
`${apiUrl + '/DataObjApi/exportCustom'}`, head: {
); font: {
let token = getToken(); bold: true,
downloadFile( },
getFileData.url, alignment: 'CENTER',
{ },
...getFileData.datas, },
token: token, };
}, if (styles) {
fileName, content.styles = styles;
ext, }
); try {
} catch (err) { let getFileData = giveFilePostDataInfoForTrue(
console.table(err); {
} content: JSON.stringify(content),
title: fileName,
},
`${apiUrl + '/DataObjApi/exportCustom'}`,
);
let token = getToken();
downloadFile(
getFileData.url,
{
...getFileData.datas,
token: token,
},
fileName,
ext,
);
} catch (err) {
console.table(err);
}
} }
// ant列表组件合并表格 render属性,合并纵向、横向。 // ant列表组件合并表格 render属性,合并纵向、横向。
export function renderContentAll(value, row, index, key, spanData, cloumnNames = []) { export function renderContentAll(value, row, index, key, spanData, cloumnNames = []) {
let colSpan, rowSpan = null; let colSpan,
try { rowSpan = null;
colSpan = spanData.colSpanData[key][index];// 横向合并 try {
rowSpan = spanData.rowSpanData[key][index];// 纵向合并 colSpan = spanData.colSpanData[key][index];// 横向合并
} catch (err) { rowSpan = spanData.rowSpanData[key][index];// 纵向合并
console.table(err); } catch (err) {
console.table(err);
}
const obj = {
children: value,
props: {
rowSpan: rowSpan,
colSpan: colSpan
} }
const obj = { };
children: value, return obj;
props: {
rowSpan: rowSpan,
colSpan: colSpan
}
};
return obj;
} }
// ant列表组件合并表格 render属性,合并纵向。 meanwhileKey :key 是本身字段key,value 是同步的字段key // ant列表组件合并表格 render属性,合并纵向。 meanwhileKey :key 是本身字段key,value 是同步的字段key
export function renderContentRow(value, row, index, key, spanData, cloumnNames = [], meanwhileKey = {}) { export function renderContentRow(value, row, index, key, spanData, cloumnNames = [], meanwhileKey = {}) {
let colSpan, rowSpan = null; let colSpan,
try { rowSpan = null;
if (cloumnNames.indexOf(key) !== -1) { try {
rowSpan = spanData.rowSpanData[key][index];// 纵向合并 if (cloumnNames.indexOf(key) !== -1) {
} else { rowSpan = spanData.rowSpanData[key][index];// 纵向合并
if (key in meanwhileKey && meanwhileKey[key]) { } else {
let meanwhileKeyValue = meanwhileKey[key]; if (key in meanwhileKey && meanwhileKey[key]) {
rowSpan = spanData.rowSpanData[meanwhileKeyValue][index];// 同步字段 的纵向合并 let meanwhileKeyValue = meanwhileKey[key];
} else { rowSpan = spanData.rowSpanData[meanwhileKeyValue][index];// 同步字段 的纵向合并
rowSpan = 1; } else {
} rowSpan = 1;
} }
} catch (err) {
console.table(err);
} }
const obj = { } catch (err) {
children: value, console.table(err);
props: { }
rowSpan: rowSpan, const obj = {
colSpan: 1 children: value,
} props: {
}; rowSpan: rowSpan,
return obj; colSpan: 1
}
};
return obj;
} }
/** /**
* 表头和数据导出(合并表格) * 表头和数据导出(合并表格)
* templatePath : word文档模板地址 * templatePath : word文档模板地址
...@@ -506,126 +533,130 @@ export function renderContentRow(value, row, index, key, spanData, cloumnNames = ...@@ -506,126 +533,130 @@ export function renderContentRow(value, row, index, key, spanData, cloumnNames =
* 返回值 * 返回值
* */ * */
export function getWord({ export function getWord({
templatePath, templatePath,
params, params,
title, title,
allValues = {}, allValues = {},
listConfig = {}, listConfig = {},
ext = 'docx', ext = 'docx',
}) { }) {
try { try {
let getFileData = giveFilePostDataInfoForTrue( let getFileData = giveFilePostDataInfoForTrue(
{ {
templatePath: templatePath, templatePath: templatePath,
params: JSON.stringify({ params: JSON.stringify({
...listConfig, ...listConfig,
...setObjectKey(params), ...setObjectKey(params),
}), }),
title: `${title}.${ext}`, title: `${title}.${ext}`,
allValues: JSON.stringify({ ...allValues }), allValues: JSON.stringify({ ...allValues }),
}, },
apiUrl + `/DataColumnApi/exportWord`, apiUrl + `/DataColumnApi/exportWord`,
); );
let token = getToken(); let token = getToken();
downloadFile( downloadFile(
getFileData.url, getFileData.url,
{ {
...getFileData.datas, ...getFileData.datas,
token: token, token: token,
}, },
title, title,
ext, ext,
); );
} catch (err) { } catch (err) {
console.table(err); console.table(err);
} }
//可更新的
//可更新的
function setObjectKey(data) {
return ( function setObjectKey(data) {
Object.keys(data) return (
//.filter((key) => data[key] !== null && data[key] !== undefined) Object.keys(data)
.reduce( //.filter((key) => data[key] !== null && data[key] !== undefined)
(acc, key) => ({ .reduce(
...acc, (acc, key) => ({
['${' + key + '}']: data[key] === null ? '' : data[key], ...acc,
}), ['${' + key + '}']: data[key] === null ? '' : data[key],
{}, }),
) {},
); )
} );
}
} }
// 下载附件FormdataWrapper // 下载附件FormdataWrapper
function isObject(value) { function isObject(value) {
return value === Object(value); return value === Object(value);
} }
function isArray(value) { function isArray(value) {
return Array.isArray(value); return Array.isArray(value);
} }
function isFile(value) { function isFile(value) {
return value instanceof File; return value instanceof File;
} }
function makeArrayKey(key) { function makeArrayKey(key) {
return key; return key;
} }
function FormdataWrapper(obj, fd, pre) { function FormdataWrapper(obj, fd, pre) {
fd = fd || new FormData(); fd = fd || new FormData();
Object.keys(obj).forEach(function (prop) { Object.keys(obj)
var key = pre ? pre + '[' + prop + ']' : prop; .forEach(function (prop) {
if (isObject(obj[prop]) && !isArray(obj[prop]) && !isFile(obj[prop])) { var key = pre ? pre + '[' + prop + ']' : prop;
FormdataWrapper(obj[prop], fd, key); if (isObject(obj[prop]) && !isArray(obj[prop]) && !isFile(obj[prop])) {
} else if (isArray(obj[prop])) { FormdataWrapper(obj[prop], fd, key);
obj[prop].forEach(function (value) { } else if (isArray(obj[prop])) {
var arrayKey = makeArrayKey(key); obj[prop].forEach(function (value) {
if (isObject(value) && !isFile(value)) { var arrayKey = makeArrayKey(key);
FormdataWrapper(value, fd, arrayKey); if (isObject(value) && !isFile(value)) {
} else { FormdataWrapper(value, fd, arrayKey);
fd.append(arrayKey, value); } else {
} fd.append(arrayKey, value);
}); }
} else { });
if (obj[prop] != null) fd.append(key, obj[prop]); } else {
} if (obj[prop] != null) fd.append(key, obj[prop]);
}
}); });
return fd; return fd;
} }
function downloadFile(url, params, fileName = '导出文件', ext = 'xlsx') { export function downloadFile(url, params, fileName = '导出文件', ext = 'xlsx') {
// console.log("downloadFile",url); // console.log("downloadFile",url);
fetch(url, { fetch(url, {
method: 'POST', method: 'POST',
body: FormdataWrapper(params), body: FormdataWrapper(params),
...getHeaders(), headers: {
Authorization: `bearer ${localStorage.getItem('antd-pro-token-onestop')}`,
},
})
.then((res) => {
if (res.status + '' !== '200') {
return res.json();
} else {
return res.blob();
}
}) })
.then((res) => { .then((data) => {
if (res.status + '' !== '200') { if (data instanceof Blob) {
return res.json(); let a = document.createElement('a');
} else { let url = window.URL.createObjectURL(data);
return res.blob(); let filename = fileName + '.' + ext;
} a.href = url;
}) a.download = filename;
.then((data) => { a.click();
if (data instanceof Blob) { window.URL.revokeObjectURL(url);
let a = document.createElement('a'); a = null;
let url = window.URL.createObjectURL(data); } else {
let filename = fileName + '.' + ext; }
a.href = url; })
a.download = filename; .catch((err) => {
a.click(); console.log(err);
window.URL.revokeObjectURL(url); })
a = null; .finally(() => {
} else { return true;
} });
})
.catch((err) => {
console.log(err);
})
.finally(() => {
return true;
});
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论