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

增加公共函数

上级 0751573a
import React from 'react'; import React from 'react';
import moment from 'moment'; import moment from 'moment';
import {Modal, message, notification, Tooltip, Spin, Popover, Popconfirm} from 'antd'; import { Modal, message, notification, Tooltip, Spin, Popover, Popconfirm } from 'antd';
import { giveFilePostDataInfoForTrue } from '@/webPublic/one_stop_public/Base16'; import { giveFilePostDataInfoForTrue } from '@/webPublic/one_stop_public/Base16';
import { getSpanJson,getColumns,getColumnsDataRealize,getColumnsSqlKeyRealize,getWord } from '@/webPublic/one_stop_public/Table'; import {
getSpanJson,
getColumns,
getColumnsDataRealize,
getColumnsSqlKeyRealize,
getWord,
} 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, remark: `
remark: `'giveFilePostDataInfoForTrue(params, url); //将接口参数 二进制文件化 并返回新的接口地址与参数'; giveFilePostDataInfoForTrue(params, url); //将接口参数 二进制文件化 并返回新的接口地址与参数';
getSpanJson(mergeKey, data, eliminateStr); //列表获取纵向合并数据 mergeKey : 需要合并的表头key data : 列表数据 eliminateStr : 需要忽略合并的数据 getSpanJson(mergeKey, data, eliminateStr); //列表获取纵向合并数据 mergeKey : 需要合并的表头key data : 列表数据 eliminateStr : 需要忽略合并的数据
getColumns(columns); //获取ant表头的属性 columns : ant的表头 getColumns(columns); //获取ant表头的属性 columns : ant的表头
getColumnsDataRealize(data, mergeKey, columns, styles, defect, fileName, ext , url, eliminateStr); // 下载列表合并的数据,前三个必填data, mergeKey, columns getColumnsDataRealize({data, mergeKey, columns, styles, defect, fileName, ext , eliminateStr}); // 下载列表合并的数据,前三个必填data, mergeKey, columns
getColumnsSqlKeyRealize(sqlKey, columns, styles, fileName, ext, url); // 下载列表表头合并的数据,前两个个必填sqlKey, columns getColumnsSqlKeyRealize({sqlKey, columns, styles, fileName, ext}); // 下载列表表头合并的数据,前两个个必填sqlKey, columns
getWord(templatePath,params, title, allValues, listConfig, ext);// 下载文档地址 ,前五个必填 templatePath,params, title, allValues, listConfig getWord({templatePath,params, title, allValues, listConfig, ext});// 下载文档地址 ,前五个必填 templatePath,params, title, allValues, listConfig
`, `,
}, },
publicComponent: { publicComponent: {
React, React,
Modal, Modal,
message, message,
notification, notification,
Tooltip, Tooltip,
Spin, Spin,
Popover, Popover,
Popconfirm, Popconfirm,
moment, 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 { getToken } from '@/webPublic/one_stop_public/utils/token';
/** /**
* 公共函数代码 * 公共函数代码
...@@ -6,187 +8,214 @@ import { giveFilePostDataInfoForTrue } from '@/webPublic/one_stop_public/Base16' ...@@ -6,187 +8,214 @@ import { giveFilePostDataInfoForTrue } from '@/webPublic/one_stop_public/Base16'
* */ * */
/** /**
* 列表获取纵向合并数据 * 列表获取纵向合并数据
* mergeKey : 需要合并的表头key * mergeKey : 需要合并的表头key
* data : 列表数据 * data : 列表数据
* eliminateStr : 需要忽略合并的数据 * eliminateStr : 需要忽略合并的数据
* *
* 返回值 * 返回值
* rowSpanData 列合并数据,colSpanData行合并数据 * rowSpanData 列合并数据,colSpanData行合并数据
* */ * */
export default 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 集合 //纵向合并
var rowSpanJson = {}; // 获取列的 dataIndex 集合
//保存上一个name var rowSpanJson = {};
var beforeNameMap = {}; //保存上一个name
//相同name出现的次数 var beforeNameMap = {};
var countMap = {}; //相同name出现的次数
//该name第一次出现的位置 var countMap = {};
var startIndexMap = {}; //该name第一次出现的位置
for (var idx = 0; idx < data.length; idx++) { var startIndexMap = {};
var dataItem = data[idx]; for (var idx = 0; idx < data.length; idx++) {
for (var idj = 0; idj < cloumnNames.length; idj++) { var dataItem = data[idx];
for (var idj = 0; idj < cloumnNames.length; idj++) {
var keyItem = cloumnNames[idj];
var dataItemValue = dataItem[keyItem];
if (idx === 0) {
beforeNameMap[keyItem] = dataItem[keyItem];
countMap[keyItem] = 1;
startIndexMap[keyItem] = 0;
rowSpanJson[keyItem] = new Array(data.length);
rowSpanJson[keyItem][0] = 1;
continue;
}
if (dataItemValue === beforeNameMap[keyItem] && eliminateStr.indexOf(dataItemValue) === -1) {
countMap[keyItem] = countMap[keyItem] + 1;
rowSpanJson[keyItem][startIndexMap[keyItem]] = countMap[keyItem];
rowSpanJson[keyItem][idx] = 0;
} else {
countMap[keyItem] = 1;
beforeNameMap[keyItem] = dataItemValue;
startIndexMap[keyItem] = idx;
var keyItem = cloumnNames[idj]; rowSpanJson[keyItem][idx] = 1;
var dataItemValue = dataItem[keyItem]; }
if (idx === 0) {
beforeNameMap[keyItem] = dataItem[keyItem];
countMap[keyItem] = 1;
startIndexMap[keyItem] = 0;
rowSpanJson[keyItem] = new Array(data.length);
rowSpanJson[keyItem][0] = 1;
continue;
}
if (dataItemValue === beforeNameMap[keyItem] && eliminateStr.indexOf(dataItemValue) === -1) {
countMap[keyItem] = countMap[keyItem] + 1;
rowSpanJson[keyItem][startIndexMap[keyItem]] = countMap[keyItem];
rowSpanJson[keyItem][idx] = 0;
} else {
countMap[keyItem] = 1;
beforeNameMap[keyItem] = dataItemValue;
startIndexMap[keyItem] = idx;
rowSpanJson[keyItem][idx] = 1;
}
}
} }
return rowSpanJson; }
return rowSpanJson;
} }
function getColSpanJson(cloumnNames, data, eliminateStr = []) { //横向合并 function getColSpanJson(cloumnNames, data, eliminateStr = []) {
var colSpanJson = {}; //横向合并
for (let idx = 0; idx < data.length; idx++) { var colSpanJson = {};
let dataItem = data[idx]; for (let idx = 0; idx < data.length; idx++) {
let colSum = 1;//宽度 let dataItem = data[idx];
let triggerColIndex = null;//记录触发时得位置 let colSum = 1; //宽度
let triggerColSum = 1;//记录触发时得位置 let triggerColIndex = null; //记录触发时得位置
let isCol = false; let triggerColSum = 1; //记录触发时得位置
for (let idj = 0; idj < cloumnNames.length; idj++) { let isCol = false;
let keyItem = cloumnNames[idj]; for (let idj = 0; idj < cloumnNames.length; idj++) {
let dataItemValue = dataItem[keyItem]; let keyItem = cloumnNames[idj];
let dataItemValueNext = idj < cloumnNames.length - 1 ? dataItem[cloumnNames[idj + 1]] : null; let dataItemValue = dataItem[keyItem];
//console.log("dataItemValue",dataItemValue,idj) let dataItemValueNext = idj < cloumnNames.length - 1 ? dataItem[cloumnNames[idj + 1]] : null;
if (idx === 0) { //console.log("dataItemValue",dataItemValue,idj)
colSpanJson[keyItem] = new Array(getRowSpanJson.length); if (idx === 0) {
} colSpanJson[keyItem] = new Array(getRowSpanJson.length);
if (!isCol && dataItemValue === dataItemValueNext && eliminateStr.indexOf(dataItemValue) === -1) {//触发合并 }
triggerColIndex = keyItem; if (
isCol = true; !isCol &&
} dataItemValue === dataItemValueNext &&
if (isCol && (dataItemValue !== dataItemValueNext || dataItemValueNext == null)) {//合并结束 eliminateStr.indexOf(dataItemValue) === -1
isCol = false; ) {
} //触发合并
if (isCol) {//计数 triggerColIndex = keyItem;
triggerColSum++; isCol = true;
} }
if (!isCol && triggerColIndex !== null) { if (isCol && (dataItemValue !== dataItemValueNext || dataItemValueNext == null)) {
colSpanJson[triggerColIndex][idx] = triggerColSum //合并结束
colSpanJson[keyItem][idx] = 0; isCol = false;
triggerColIndex = null; }
} else { if (isCol) {
colSpanJson[keyItem][idx] = colSum; //计数
}; triggerColSum++;
}
} if (!isCol && triggerColIndex !== null) {
colSpanJson[triggerColIndex][idx] = triggerColSum;
colSpanJson[keyItem][idx] = 0;
triggerColIndex = null;
} else {
colSpanJson[keyItem][idx] = colSum;
}
} }
//console.log("colSpanJson",colSpanJson) }
return colSpanJson; //console.log("colSpanJson",colSpanJson)
return colSpanJson;
} }
/** /**
* ant表头转换成二维数组对象。 * ant表头转换成二维数组对象。
* columns : ant的表头 * columns : ant的表头
* *
* 返回值 * 返回值
* columnsList 基础数据 * columnsList 基础数据
* columnsMerges 合并数据 * columnsMerges 合并数据
* columnsKey key对应的列 * columnsKey key对应的列
* columnsHeight 行数 * columnsHeight 行数
* */ * */
export default function getColumns(columns) { export function getColumns(columns) {
const uj = { "t": 1, "v": "序号", s: "header" }; const uj = {
let columnsHeight = 0; t: 1,
getColumnsMaxLevel(columns);//递归行数 v: '序号',
let columnsKey = []; s: 'header',
const columnsList = new Array(columnsHeight).fill([]); };
let col = 1; let columnsHeight = 0;
for (var i in columnsList) { getColumnsMaxLevel(columns); //递归行数
columnsList[i] = new Array(getColumnsWidth(columns)).fill({}); let columnsKey = [];
}; const columnsList = new Array(columnsHeight).fill([]);
function getColumnsData(data = [], res = [], level = 1) { let col = 1;
for (let item of data) { for (var i in columnsList) {
//item.key = i; columnsList[i] = new Array(getColumnsWidth(columns)).fill({});
let isLast = !item.children; }
item.level = level;
item.isLast = isLast; function getColumnsData(data = [], res = [], level = 1) {
item.width = !isLast ? getColumnsWidth(item.children) : 1; for (let item of data) {
item.col = col; //item.key = i;
res.push(item); let isLast = !item.children;
columnsList[level - 1][col - 1] = { ...uj, v: item.title }; item.level = level;
if (!isLast) { item.isLast = isLast;
if (Array.isArray(item.children)) { item.width = !isLast ? getColumnsWidth(item.children) : 1;
let x = level + 1; item.col = col;
getColumnsData(item.children, res, x); res.push(item);
} columnsList[level - 1][col - 1] = {
} else { ...uj,
col++; v: item.title,
columnsKey.push(item["dataIndex"]); };
} if (!isLast) {
} if (Array.isArray(item.children)) {
return res; let x = level + 1;
}; getColumnsData(item.children, res, x);
//递归行数
function getColumnsMaxLevel(data = [], level = 1) {
for (let item of data) {
let isLast = !item.children;
if (!isLast && Array.isArray(item.children)) {
let x = level + 1;
if (columnsHeight < x) {
columnsHeight = x;
}
getColumnsMaxLevel(item.children, x);
}
} }
return level; } else {
}; col++;
//递归当前数据宽度 columnsKey.push(item['dataIndex']);
function getColumnsWidth(data = [], sum = 0) { }
for (let item of data) { }
if (!item.children) { return res;
sum++; }
} else {
sum = getColumnsWidth(item.children, sum); //递归行数
} function getColumnsMaxLevel(data = [], level = 1) {
for (let item of data) {
let isLast = !item.children;
if (!isLast && Array.isArray(item.children)) {
let x = level + 1;
if (columnsHeight < x) {
columnsHeight = x;
} }
return sum; getColumnsMaxLevel(item.children, x);
}; }
let columnsHandle = getColumnsData(columns).filter((v, i) => { }
return (v.level < columnsHeight && v.isLast) || v.width > 1 return level;
}); }
let columnsMerges = [];
columnsHandle.forEach((v, i) => {
let { isLast, width, col, level } = v;
let nowCol = col - 1;
let nowLevel = level - 1;
if (isLast && width === 1) {
//合并表格的 开始行、结束行、开始列、结束列
columnsMerges.push([nowLevel, columnsHeight - 1, nowCol, nowCol]);
};
if (!isLast && width > 1) {
columnsMerges.push([nowLevel, nowLevel, nowCol, nowCol + width - 1]);
};
}); //递归当前数据宽度
return { columnsList, columnsMerges, columnsKey, columnsHeight }; function getColumnsWidth(data = [], sum = 0) {
}; for (let item of data) {
if (!item.children) {
sum++;
} else {
sum = getColumnsWidth(item.children, sum);
}
}
return sum;
}
let columnsHandle = getColumnsData(columns)
.filter((v, i) => {
return (v.level < columnsHeight && v.isLast) || v.width > 1;
});
let columnsMerges = [];
columnsHandle.forEach((v, i) => {
let {
isLast,
width,
col,
level
} = v;
let nowCol = col - 1;
let nowLevel = level - 1;
if (isLast && width === 1) {
//合并表格的 开始行、结束行、开始列、结束列
columnsMerges.push([nowLevel, columnsHeight - 1, nowCol, nowCol]);
}
if (!isLast && width > 1) {
columnsMerges.push([nowLevel, nowLevel, nowCol, nowCol + width - 1]);
}
});
return {
columnsList,
columnsMerges,
columnsKey,
columnsHeight,
};
}
/** /**
* 表头和sql数据导出(表头合并表格,数据不合并表格) * 表头和sql数据导出(表头合并表格,数据不合并表格)
...@@ -196,63 +225,76 @@ export default function getColumns(columns) { ...@@ -196,63 +225,76 @@ export default function getColumns(columns) {
* fileName : 导出文件名 * fileName : 导出文件名
* ext : 导出后缀 目前xecl、dbf * ext : 导出后缀 目前xecl、dbf
* url : 接口地址 * url : 接口地址
* *
* 返回值 * 返回值
* */ * */
export default function getColumnsSqlKeyRealize(sqlKey, columns, styles, fileName = "导出文件", ext = 'xlsx', url = `/DataObjApi/exportCustom`) { export function getColumnsSqlKeyRealize({
let { columnsList, columnsMerges, columnsKey } = getColumns(columns); sqlKey,
let content = { columns,
"sheets": [ styles,
{ fileName = '导出文件',
"name": fileName, ext = 'xlsx',
"cells": columnsList, }) {
"merges": columnsMerges, let {
"sqlKey": sqlKey,//sql编码 columnsList,
"sqlKeyHeader": columnsKey//sql对应key对应列 columnsMerges,
} columnsKey
], } = getColumns(columns);
"styles": { let content = {
"header": { sheets: [
"font": { {
"bold": false, name: fileName,
"fontHeightInPoints": 12 cells: columnsList,
}, merges: columnsMerges,
"alignment": "CENTER", sqlKey: sqlKey, //sql编码
"borderLeft": "THIN", sqlKeyHeader: columnsKey, //sql对应key对应列
"borderTop": "THIN", },
"borderBottom": "THIN", ],
"borderRight": "THIN", styles: {
"verticalAlignment": "CENTER",//TOP、CENTER、BOTTOM、JUSTIFY、DISTRIBUTED header: {
"wrapText": true, font: {
"rowHeights": 20, bold: false,
"colWidths": 200 fontHeightInPoints: 12,
},
"head": {
"font": {
"bold": true
},
"alignment": "CENTER",
}
}
};
if (styles) {
content.styles = styles;
}
let getFileData = giveFilePostDataInfoForTrue(
{
content: JSON.stringify(content),
title: fileName
}, },
`${window.location.origin}/produce/v1/api/onestop${url}` alignment: 'CENTER',
); borderLeft: 'THIN',
let token = localStorage.getItem('antd-pro-token-onestop'); borderTop: 'THIN',
downloadFile(getFileData.url, { borderBottom: 'THIN',
...getFileData.datas, borderRight: 'THIN',
token: token verticalAlignment: 'CENTER', //TOP、CENTER、BOTTOM、JUSTIFY、DISTRIBUTED
}, fileName, ext); wrapText: true,
rowHeights: 20,
}; colWidths: 200,
},
head: {
font: {
bold: true,
},
alignment: 'CENTER',
},
},
};
if (styles) {
content.styles = styles;
}
let getFileData = giveFilePostDataInfoForTrue(
{
content: JSON.stringify(content),
title: fileName,
},
`${queryOauthActionPath() + '/DataObjApi/exportCustom'}`,
);
let token = getToken();
downloadFile(
getFileData.url,
{
...getFileData.datas,
token: token,
},
fileName,
ext,
);
}
/** /**
* 表头和数据导出(合并表格) * 表头和数据导出(合并表格)
...@@ -266,89 +308,115 @@ export default function getColumnsSqlKeyRealize(sqlKey, columns, styles, fileNam ...@@ -266,89 +308,115 @@ export default function getColumnsSqlKeyRealize(sqlKey, columns, styles, fileNam
* eliminateStr : 忽略合并的值 * eliminateStr : 忽略合并的值
* 返回值 * 返回值
* */ * */
export default function getColumnsDataRealize(data = [], mergeKey = [], columns, styles, defect = null, fileName = "导出文件", ext = 'xlsx', url = `/DataObjApi/exportCustom`, eliminateStr = []) { export function getColumnsDataRealize({
let { columnsList, columnsMerges, columnsKey, columnsHeight } = getColumns(columns); data = [],
let { colSpanData, rowSpanData } = getSpanJson(mergeKey, data, eliminateStr); mergeKey = [],
// 处理数据 columns,
let bodyData = []; styles,
const uj = { "t": 1, "v": "序号", s: "header" }; defect = null,
data.forEach((dv, di) => { fileName = '导出文件',
let nowArroy = new Array(columnsKey.length).fill({}); ext = 'xlsx',
columnsKey.forEach((av, ai) => { eliminateStr = [],
nowArroy[ai] = { }) {
...uj, let {
v: av in dv ? dv[av].toString() : (defect || "") columnsList,
}; columnsMerges,
}); columnsKey,
bodyData.push(nowArroy); columnsHeight
}) } = getColumns(columns);
// 处理合并数据 let {
let dataMerges = []; colSpanData,
mergeKey.forEach((mv, mi) => { rowSpanData
rowSpanData[mv].forEach((cv, ci) => { } = getSpanJson(mergeKey, data, eliminateStr);
if (cv > 1) {//合并表格的 开始行、结束行、开始列、结束列 // 处理数据
let rowIndex = columnsKey.indexOf(mv); let bodyData = [];
dataMerges.push([columnsHeight + ci, columnsHeight + ci + cv - 1, rowIndex, rowIndex]); const uj = {
} t: 1,
}); v: '序号',
colSpanData[mv].forEach((cv, ci) => { s: 'header',
if (cv > 1) {//合并表格的 开始行、结束行、开始列、结束列 };
let rowIndex = columnsKey.indexOf(mv); data.forEach((dv, di) => {
dataMerges.push([columnsHeight + ci, columnsHeight + ci, rowIndex, rowIndex + cv - 1]); let nowArroy = new Array(columnsKey.length).fill({});
} columnsKey.forEach((av, ai) => {
}); nowArroy[ai] = {
...uj,
v: av in dv ? dv[av].toString() : defect || '',
};
}); });
bodyData.push(nowArroy);
});
// 处理合并数据
let dataMerges = [];
mergeKey.forEach((mv, mi) => {
rowSpanData[mv].forEach((cv, ci) => {
if (cv > 1) {
//合并表格的 开始行、结束行、开始列、结束列
let rowIndex = columnsKey.indexOf(mv);
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",
"borderLeft": "THIN",
"borderTop": "THIN",
"borderBottom": "THIN",
"borderRight": "THIN",
"verticalAlignment": "CENTER",//TOP、CENTER、BOTTOM、JUSTIFY、DISTRIBUTED
"wrapText": true,
"rowHeights": 20,
"colWidths": 200
},
"head": {
"font": {
"bold": true
},
"alignment": "CENTER",
}
}
};
if (styles) {
content.styles = styles;
}
let getFileData = giveFilePostDataInfoForTrue(
{
content: JSON.stringify(content),
title: fileName
}, },
`${window.location.origin}/produce/v1/api/onestop${url}` alignment: 'CENTER',
); borderLeft: 'THIN',
let token = localStorage.getItem('antd-pro-token-onestop'); borderTop: 'THIN',
downloadFile(getFileData.url, { borderBottom: 'THIN',
...getFileData.datas, borderRight: 'THIN',
token: token verticalAlignment: 'CENTER', //TOP、CENTER、BOTTOM、JUSTIFY、DISTRIBUTED
}, fileName, ext); wrapText: true,
}; rowHeights: 20,
colWidths: 200,
},
head: {
font: {
bold: true,
},
alignment: 'CENTER',
},
},
};
if (styles) {
content.styles = styles;
}
let getFileData = giveFilePostDataInfoForTrue(
{
content: JSON.stringify(content),
title: fileName,
},
`${queryOauthActionPath() + '/DataObjApi/exportCustom'}`,
);
let token = localStorage.getItem('antd-pro-token-onestop');
downloadFile(
getFileData.url,
{
...getFileData.datas,
token: token,
},
fileName,
ext,
);
}
/** /**
* 表头和数据导出(合并表格) * 表头和数据导出(合并表格)
...@@ -356,94 +424,128 @@ export default function getColumnsDataRealize(data = [], mergeKey = [], columns, ...@@ -356,94 +424,128 @@ export default function getColumnsDataRealize(data = [], mergeKey = [], columns,
* params : word文档的替换参数 * params : word文档的替换参数
* title : 导出文件名 * title : 导出文件名
* allValues : sql参数 * allValues : sql参数
* listConfig : 导出列表配置 * listConfig : 导出列表配置
* ext : 导出后缀 目前xecl、dbf * ext : 导出后缀 目前xecl、dbf
* 返回值 * 返回值
* */ * */
export default function getWord(templatePath,params, title, allValues = {}, listConfig = {}, ext = 'docx') { export function getWord({
//可更新的 templatePath,
let getFileData = giveFilePostDataInfoForTrue( params,
{ title,
templatePath: "/u/templateOnestop/SXH.docx", allValues = {},
params: JSON.stringify({ listConfig = {},
...listConfig, ext = 'docx',
...setObjectKey(params) }
}), ) {
title: `${title}.${ext}`, //可更新的
allValues: JSON.stringify({ ...allValues }) let getFileData = giveFilePostDataInfoForTrue(
}, {
`${window.location.origin}/produce/v1/api/onestop` + `/DataColumnApi/exportWord` templatePath: templatePath,
params: JSON.stringify({
...listConfig,
...setObjectKey(params),
}),
title: `${title}.${ext}`,
allValues: JSON.stringify({ ...allValues }),
},
`${queryOauthActionPath()}` + `/DataColumnApi/exportWord`,
);
let token = getToken();
downloadFile(
getFileData.url,
{
...getFileData.datas,
token: token,
},
title,
ext,
);
function setObjectKey(data) {
return (
Object.keys(data)
//.filter((key) => data[key] !== null && data[key] !== undefined)
.reduce(
(acc, key) => ({
...acc,
['${' + key + '}']: data[key] === null ? '' : data[key],
}),
{},
)
); );
let token = localStorage.getItem('antd-pro-token-onestop'); }
downloadFile(getFileData.url, {
...getFileData.datas,
token: token
}, title, ext);
function setObjectKey(data) {
return Object.keys(data)
//.filter((key) => data[key] !== null && data[key] !== undefined)
.reduce((acc, key) => ({ ...acc, ["${" + key + "}"]: (data[key] === null ? "" : data[key]) }), {});
}
} }
// 下载附件FormdataWrapper
function isObject(value) {
return value === Object(value);
}
function isArray(value) {
return Array.isArray(value);
}
function isFile(value) {
return value instanceof File;
}
function makeArrayKey(key) {
return key;
}
// 下载附件FormdataWrapper
function isObject(value) { return value === Object(value) }
function isArray(value) { return Array.isArray(value) }
function isFile(value) { return value instanceof File }
function makeArrayKey(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') { 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) => {
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;
});
};
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论