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

增加公共函数

上级 bfa4224f
...@@ -17,96 +17,96 @@ import { getToken } from '@/webPublic/one_stop_public/utils/token'; ...@@ -17,96 +17,96 @@ import { getToken } from '@/webPublic/one_stop_public/utils/token';
* rowSpanData 列合并数据,colSpanData行合并数据 * rowSpanData 列合并数据,colSpanData行合并数据
* */ * */
export function getSpanJson(mergeKey, data, eliminateStr = []) { export function getSpanJson(mergeKey, data, eliminateStr = []) {
return { return {
rowSpanData: getRowSpanJson(mergeKey, data, eliminateStr), rowSpanData: getRowSpanJson(mergeKey, data, eliminateStr),
colSpanData: getColSpanJson(mergeKey, data, eliminateStr), colSpanData: getColSpanJson(mergeKey, data, eliminateStr),
}; };
} }
function getRowSpanJson(cloumnNames, data, eliminateStr = []) { function getRowSpanJson(cloumnNames, data, eliminateStr = []) {
//纵向合并 //纵向合并
// 获取列的 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 = []) {
//横向合并 //横向合并
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 { } else {
colSpanJson[keyItem][idx] = colSum; colSpanJson[keyItem][idx] = colSum;
} }
} }
} }
//console.log("colSpanJson",colSpanJson) //console.log("colSpanJson",colSpanJson)
return colSpanJson; return colSpanJson;
} }
/** /**
...@@ -120,101 +120,95 @@ function getColSpanJson(cloumnNames, data, eliminateStr = []) { ...@@ -120,101 +120,95 @@ function getColSpanJson(cloumnNames, data, eliminateStr = []) {
* columnsHeight 行数 * columnsHeight 行数
* */ * */
export function getColumns(columns) { export function getColumns(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) {
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 { } else {
col++; col++;
columnsKey.push(item['dataIndex']); columnsKey.push(item['dataIndex']);
} }
} }
return res; return res;
} }
//递归行数 //递归行数
function getColumnsMaxLevel(data = [], level = 1) { function getColumnsMaxLevel(data = [], level = 1) {
for (let item of data) { for (let item of data) {
let isLast = !item.children; let isLast = !item.children;
if (!isLast && Array.isArray(item.children)) { if (!isLast && Array.isArray(item.children)) {
let x = level + 1; let x = level + 1;
if (columnsHeight < x) { if (columnsHeight < x) {
columnsHeight = x; columnsHeight = x;
} }
getColumnsMaxLevel(item.children, x); getColumnsMaxLevel(item.children, x);
} }
} }
return level; return level;
} }
//递归当前数据宽度 //递归当前数据宽度
function getColumnsWidth(data = [], sum = 0) { function getColumnsWidth(data = [], sum = 0) {
for (let item of data) { for (let item of data) {
if (!item.children) { if (!item.children) {
sum++; sum++;
} else { } else {
sum = getColumnsWidth(item.children, sum); sum = getColumnsWidth(item.children, sum);
} }
} }
return sum; return sum;
} }
let columnsHandle = getColumnsData(columns) let columnsHandle = getColumnsData(columns).filter((v, i) => {
.filter((v, i) => { return (v.level < columnsHeight && v.isLast) || v.width > 1;
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,
};
} }
/** /**
...@@ -229,71 +223,67 @@ export function getColumns(columns) { ...@@ -229,71 +223,67 @@ export function getColumns(columns) {
* 返回值 * 返回值
* */ * */
export function getColumnsSqlKeyRealize({ export function getColumnsSqlKeyRealize({
sqlKey, sqlKey,
columns, columns,
styles, styles,
fileName = '导出文件', fileName = '导出文件',
ext = 'xlsx', ext = 'xlsx',
}) { }) {
let { let { columnsList, columnsMerges, columnsKey } = getColumns(columns);
columnsList, let content = {
columnsMerges, sheets: [
columnsKey {
} = getColumns(columns); name: fileName,
let content = { cells: columnsList,
sheets: [ merges: columnsMerges,
{ sqlKey: sqlKey, //sql编码
name: fileName, sqlKeyHeader: columnsKey, //sql对应key对应列
cells: columnsList, },
merges: columnsMerges, ],
sqlKey: sqlKey, //sql编码 styles: {
sqlKeyHeader: columnsKey, //sql对应key对应列 header: {
}, font: {
], bold: false,
styles: { fontHeightInPoints: 12,
header: { },
font: { alignment: 'CENTER',
bold: false, borderLeft: 'THIN',
fontHeightInPoints: 12, borderTop: 'THIN',
}, borderBottom: 'THIN',
alignment: 'CENTER', borderRight: 'THIN',
borderLeft: 'THIN', verticalAlignment: 'CENTER', //TOP、CENTER、BOTTOM、JUSTIFY、DISTRIBUTED
borderTop: 'THIN', wrapText: true,
borderBottom: 'THIN', rowHeights: 20,
borderRight: 'THIN', colWidths: 200,
verticalAlignment: 'CENTER', //TOP、CENTER、BOTTOM、JUSTIFY、DISTRIBUTED },
wrapText: true, head: {
rowHeights: 20, font: {
colWidths: 200, bold: true,
}, },
head: { alignment: 'CENTER',
font: { },
bold: true, },
}, };
alignment: 'CENTER', if (styles) {
}, content.styles = styles;
}, }
}; let getFileData = giveFilePostDataInfoForTrue(
if (styles) { {
content.styles = styles; content: JSON.stringify(content),
} title: fileName,
let getFileData = giveFilePostDataInfoForTrue( },
{ `${queryOauthActionPath() + '/DataObjApi/exportCustom'}`,
content: JSON.stringify(content), );
title: fileName, let token = getToken();
}, downloadFile(
`${queryOauthActionPath() + '/DataObjApi/exportCustom'}`, getFileData.url,
); {
let token = getToken(); ...getFileData.datas,
downloadFile( token: token,
getFileData.url, },
{ fileName,
...getFileData.datas, ext,
token: token, );
},
fileName,
ext,
);
} }
/** /**
...@@ -309,113 +299,105 @@ export function getColumnsSqlKeyRealize({ ...@@ -309,113 +299,105 @@ 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',
eliminateStr = [], eliminateStr = [],
}) { }) {
let { let { columnsList, columnsMerges, columnsKey, columnsHeight } = getColumns(columns);
columnsList, let { colSpanData, rowSpanData } = getSpanJson(mergeKey, data, eliminateStr);
columnsMerges, // 处理数据
columnsKey, let bodyData = [];
columnsHeight const uj = {
} = getColumns(columns); t: 1,
let { v: '序号',
colSpanData, s: 'header',
rowSpanData };
} = getSpanJson(mergeKey, data, eliminateStr); data.forEach((dv, di) => {
// 处理数据 let nowArroy = new Array(columnsKey.length).fill({});
let bodyData = []; columnsKey.forEach((av, ai) => {
const uj = { nowArroy[ai] = {
t: 1, ...uj,
v: '序号', v: av in dv ? dv[av].toString() : defect || '',
s: 'header', };
}; });
data.forEach((dv, di) => { bodyData.push(nowArroy);
let nowArroy = new Array(columnsKey.length).fill({}); });
columnsKey.forEach((av, ai) => { // 处理合并数据
nowArroy[ai] = { let dataMerges = [];
...uj, mergeKey.forEach((mv, mi) => {
v: av in dv ? dv[av].toString() : defect || '', rowSpanData[mv].forEach((cv, ci) => {
}; if (cv > 1) {
}); //合并表格的 开始行、结束行、开始列、结束列
bodyData.push(nowArroy); let rowIndex = columnsKey.indexOf(mv);
}); dataMerges.push([columnsHeight + ci, columnsHeight + ci + cv - 1, rowIndex, rowIndex]);
// 处理合并数据 }
let dataMerges = []; });
mergeKey.forEach((mv, mi) => { colSpanData[mv].forEach((cv, ci) => {
rowSpanData[mv].forEach((cv, ci) => { if (cv > 1) {
if (cv > 1) { //合并表格的 开始行、结束行、开始列、结束列
//合并表格的 开始行、结束行、开始列、结束列 let rowIndex = columnsKey.indexOf(mv);
let rowIndex = columnsKey.indexOf(mv); dataMerges.push([columnsHeight + ci, columnsHeight + ci, rowIndex, rowIndex + cv - 1]);
dataMerges.push([columnsHeight + ci, columnsHeight + ci + cv - 1, rowIndex, rowIndex]); }
} });
}); });
colSpanData[mv].forEach((cv, ci) => {
if (cv > 1) {
//合并表格的 开始行、结束行、开始列、结束列
let rowIndex = columnsKey.indexOf(mv);
dataMerges.push([columnsHeight + ci, columnsHeight + ci, rowIndex, rowIndex + cv - 1]);
}
});
});
let content = { let content = {
sheets: [ sheets: [
{ {
name: fileName, name: fileName,
cells: [...columnsList, ...bodyData], cells: [...columnsList, ...bodyData],
merges: [...columnsMerges, ...dataMerges], merges: [...columnsMerges, ...dataMerges],
}, },
], ],
styles: { styles: {
header: { header: {
font: { font: {
bold: false, bold: false,
fontHeightInPoints: 12, fontHeightInPoints: 12,
}, },
alignment: 'CENTER', alignment: 'CENTER',
borderLeft: 'THIN', borderLeft: 'THIN',
borderTop: 'THIN', borderTop: 'THIN',
borderBottom: 'THIN', borderBottom: 'THIN',
borderRight: 'THIN', borderRight: 'THIN',
verticalAlignment: 'CENTER', //TOP、CENTER、BOTTOM、JUSTIFY、DISTRIBUTED verticalAlignment: 'CENTER', //TOP、CENTER、BOTTOM、JUSTIFY、DISTRIBUTED
wrapText: true, wrapText: true,
rowHeights: 20, rowHeights: 20,
colWidths: 200, colWidths: 200,
}, },
head: { head: {
font: { font: {
bold: true, bold: true,
}, },
alignment: 'CENTER', alignment: 'CENTER',
}, },
}, },
}; };
if (styles) { if (styles) {
content.styles = styles; content.styles = styles;
} }
let getFileData = giveFilePostDataInfoForTrue( let getFileData = giveFilePostDataInfoForTrue(
{ {
content: JSON.stringify(content), content: JSON.stringify(content),
title: fileName, title: fileName,
}, },
`${queryOauthActionPath() + '/DataObjApi/exportCustom'}`, `${queryOauthActionPath() + '/DataObjApi/exportCustom'}`,
); );
let token = localStorage.getItem('antd-pro-token-onestop'); let token = localStorage.getItem('antd-pro-token-onestop');
downloadFile( downloadFile(
getFileData.url, getFileData.url,
{ {
...getFileData.datas, ...getFileData.datas,
token: token, token: token,
}, },
fileName, fileName,
ext, ext,
); );
} }
/** /**
...@@ -429,123 +411,121 @@ export function getColumnsDataRealize({ ...@@ -429,123 +411,121 @@ export function getColumnsDataRealize({
* 返回值 * 返回值
* */ * */
export function getWord({ export function getWord({
templatePath, templatePath,
params, params,
title, title,
allValues = {}, allValues = {},
listConfig = {}, listConfig = {},
ext = 'docx', ext = 'docx',
} }) {
) { //可更新的
//可更新的 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 }), },
}, `${queryOauthActionPath()}` + `/DataColumnApi/exportWord`,
`${queryOauthActionPath()}` + `/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, );
);
function setObjectKey(data) { function setObjectKey(data) {
return ( return (
Object.keys(data) Object.keys(data)
//.filter((key) => data[key] !== null && data[key] !== undefined) //.filter((key) => data[key] !== null && data[key] !== undefined)
.reduce( .reduce(
(acc, key) => ({ (acc, key) => ({
...acc, ...acc,
['${' + key + '}']: data[key] === null ? '' : data[key], ['${' + 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) Object.keys(obj).forEach(function(prop) {
.forEach(function (prop) { var key = pre ? pre + '[' + prop + ']' : prop;
var key = pre ? pre + '[' + prop + ']' : prop; if (isObject(obj[prop]) && !isArray(obj[prop]) && !isFile(obj[prop])) {
if (isObject(obj[prop]) && !isArray(obj[prop]) && !isFile(obj[prop])) { FormdataWrapper(obj[prop], fd, key);
FormdataWrapper(obj[prop], fd, key); } else if (isArray(obj[prop])) {
} else if (isArray(obj[prop])) { obj[prop].forEach(function(value) {
obj[prop].forEach(function (value) { var arrayKey = makeArrayKey(key);
var arrayKey = makeArrayKey(key); if (isObject(value) && !isFile(value)) {
if (isObject(value) && !isFile(value)) { FormdataWrapper(value, fd, arrayKey);
FormdataWrapper(value, fd, arrayKey); } else {
} else { fd.append(arrayKey, value);
fd.append(arrayKey, value); }
} });
}); } else {
} else { if (obj[prop] != null) fd.append(key, obj[prop]);
if (obj[prop] != null) fd.append(key, obj[prop]); }
} });
}); return fd;
return fd;
} }
function downloadFile(url, params, fileName = '导出文件', ext = 'xlsx') { 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),
}) })
.then((res) => { .then((res) => {
if (res.status + '' !== '200') { if (res.status + '' !== '200') {
return res.json(); return res.json();
} else { } else {
return res.blob(); return res.blob();
} }
}) })
.then((data) => { .then((data) => {
if (data instanceof Blob) { if (data instanceof Blob) {
let a = document.createElement('a'); let a = document.createElement('a');
let url = window.URL.createObjectURL(data); let url = window.URL.createObjectURL(data);
let filename = fileName + '.' + ext; let filename = fileName + '.' + ext;
a.href = url; a.href = url;
a.download = filename; a.download = filename;
a.click(); a.click();
window.URL.revokeObjectURL(url); window.URL.revokeObjectURL(url);
a = null; a = null;
} else { } else {
} }
}) })
.catch((err) => { .catch((err) => {
console.log(err); console.log(err);
}) })
.finally(() => { .finally(() => {
return true; return true;
}); });
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论