Commit cabffdc0 authored by xiangjiaojunxp's avatar xiangjiaojunxp

导出权限修改

parent 4799ccd8
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form ref="queryForm" size="small" :inline="true" label-width="68px"> <el-form ref="queryForm" size="small" :inline="true" label-width="68px">
<el-form-item label="模板" prop="name" > <el-form-item label="模板" prop="name" >
<el-select v-model="selectedOption" ref="mySelect" size="mini" @change="handleOptionChange" filterable placeholder="请选择您要查看的模板"> <el-select v-model="selectedOption" ref="mySelect" size="mini" @change="handleOptionChange" filterable placeholder="请选择您要查看的模板">
<!-- <el-option label="自设的模板名" value="使用空白模板"></el-option>--> <!-- <el-option label="自设的模板名" value="使用空白模板"></el-option>-->
<el-option <el-option
v-for="item in depss" :key="item.id" :label="item.templateName" :value="item.id"> v-for="item in depss" :key="item.id" :label="item.templateName" :value="item.id">
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="规则" prop="rule"> <el-form-item label="规则" prop="rule">
<el-select v-model="selectedRule" ref="mySelect" size="mini" @change="handleRuleChange" filterable placeholder="请选择您要查看的规则" > <el-select v-model="selectedRule" ref="mySelect" size="mini" @change="handleRuleChange" filterable placeholder="请选择您要查看的规则" >
<el-option <el-option
v-for="iem in luckyrule" :key="iem.id" :label="iem.roleName" :value="iem.id"> v-for="iem in luckyrule" :key="iem.id" :label="iem.roleName" :value="iem.id">
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="warning" type="warning"
plain plain
icon="el-icon-upload2" icon="el-icon-upload2"
size="mini" size="mini"
@click="handleExport" @click="handleExport"
v-hasPermi="['ruoyi-myexcel:myexcel:export']" >导出</el-button>
>导出</el-button> </el-col>
</el-col> <el-col :span="1.5">
<el-col :span="1.5"> <el-upload
<el-upload type="file"
type="file" name="file"
name="file" ref="upload"
ref="upload" :before-upload="handleFileChange"
:before-upload="handleFileChange" action=''
action='' :limit="1"
:limit="1" :file-list="fileList"
:file-list="fileList" :disabled="disableNextButton"
:disabled="disableNextButton" >
<el-button plain size="mini" icon="el-icon-download" type="primary" :disabled="disableNextButton" >导入</el-button>
</el-upload>
</el-col>
</el-row>
<!-- luckysheet容器 -->
<div
id="luckysheet"
style="margin: 0px; padding: 0px; position: absolute; width: 100%;left: 0px; top: 110px; height: 1000px; z-index: 0"
> >
<el-button plain size="mini" icon="el-icon-download" type="primary" :disabled="disableNextButton" >导入</el-button> </div>
</el-upload>
</el-col>
</el-row>
<!-- luckysheet容器 -->
<div
id="luckysheet"
style="margin: 0px; padding: 0px; position: absolute; width: 100%;left: 0px; top: 110px; height: 1000px; z-index: 0"
>
</div>
</div> </div>
</template> </template>
...@@ -72,434 +71,910 @@ var fileName="新建XLSX工作表"; //定义表名 ...@@ -72,434 +71,910 @@ var fileName="新建XLSX工作表"; //定义表名
var rule=[]; var rule=[];
var tempId; var tempId;
export default { export default {
name: "Mymodule", name: "Mymodule",
data() { data() {
return { return {
//弹出页面的表名 //弹出页面的表名
from_name : "", from_name : "",
// 是否显示弹出层 // 是否显示弹出层
dialogVisible : false, dialogVisible : false,
selectedOption:'', selectedOption:'',
selectedRule:'', selectedRule:'',
luckysheetData: '', luckysheetData: '',
fileList:[], fileList:[],
disableNextButton: true, disableNextButton: true,
luckyrule:[], luckyrule:[],
depss:[], depss:[],
// 表单参数 // 表单参数
form: {}, form: {},
// 查询参数 // 查询参数
queryParams: { queryParams: {
status:0 status:0
}, },
}; };
}, },
created() { created() {
//刷新页面时进行的操作 //刷新页面时进行的操作
this.getList(); this.getList();
},
mounted() {
this.init();
fileName="新建XLSX工作表";
},
methods:{
/** 页面刷新时展示的数据*/
getList() {
listSuppliesTemplate(this.queryParams).then(response => {
this.depss = response.rows;
});
},
/** 下拉选和页面luckysheet绑定 */
handleOptionChange() {
this.selectedRule='';
this.disableNextButton = this.selectedRule === '';
//根据选中的下拉选项值获取相应的信息
getSuppliesTemplate(this.selectedOption).then(response => {
tempId= this.selectedOption;
const sysSupplies = response.rows;
this.luckysheetData = sysSupplies[0].templateContent;
//将接收到的json存到json_data中
//const json_data = response.data;
var json_data = JSON.parse(sysSupplies[0].templateContent);
roleList(this.selectedOption).then(response => {
this.luckyrule = response.rows;
});
let suffixArr = sysSupplies[0].templateName.split('.');
fileName = suffixArr[0];
//luckysheet.destroy()
luckysheet.create({
container: "luckysheet", // Luckysheet 的容器元素 ID
title: fileName, // Excel 文件名
data: json_data, // Excel 数据
showinfobar: false, //是否显示顶部名称栏
lang:'zh',
});
}).catch(() => {
// 处理错误逻辑,这里是一个空的错误处理函数
this.$message.error('查询失败,发生未知错误!');
});
}, },
/** 规则下拉选 调佣后端的方法*/ mounted() {
handleRuleChange(){
if (this.selectedOption==='') {
this.selectedRule='';
this.$message.warning("选择规则前请先选择模板!");
return ; // 如果按钮被禁用,提前返回,避免执行下一步操作
}
this.disableNextButton = this.selectedRule === '';
roleListid(this.selectedRule).then(response => {
rule=response.rows;
});
},
/** 回车事件和保存提交绑定 */
handleEnter(event) {
if (event.keyCode === 13) {
event.preventDefault(); // 阻止默认的回车事件
// 触发确定操作
this.submit_from();
}
},
/** 重置按钮操作 */
resetQuery() {
//刷新下拉选框内容
fileName="新建XLSX工作表";
this.selectedOption='';
this.disableNextButton='';
this.selectedRule='';
this.luckyrule=[];
//刷新luckysheet表格
this.init(); this.init();
fileName="新建XLSX工作表";
}, },
/** Luckyexcel文档 */ methods:{
init() { /** 页面刷新时展示的数据*/
let options = { getList() {
container: 'luckysheet', //luckysheet为容器id listSuppliesTemplate(this.queryParams).then(response => {
title:'', this.depss = response.rows;
lang:'zh', });
showinfobar:false,
data:[ },
{ /** 下拉选和页面luckysheet绑定 */
"name": "sheet1", //工作表名称 handleOptionChange() {
"color": "", //工作表颜色 this.selectedRule='';
"index": 0, //工作表索引 this.disableNextButton = this.selectedRule === '';
"status": 1, //激活状态 //根据选中的下拉选项值获取相应的信息
"order": 0, //工作表的下标 getSuppliesTemplate(this.selectedOption).then(response => {
"hide": 0,//是否隐藏 tempId= this.selectedOption;
"row": 8, //行数 const sysSupplies = response.rows;
"column": 10, //列数 this.luckysheetData = sysSupplies[0].templateContent;
"defaultRowHeight": 19, //自定义行高 //将接收到的json存到json_data中
"defaultColWidth": 73, //自定义列宽 //const json_data = response.data;
"celldata": [ var json_data = JSON.parse(sysSupplies[0].templateContent);
roleList(this.selectedOption).then(response => {
this.luckyrule = response.rows;
], //初始化使用的单元格数据 });
"config": { let suffixArr = sysSupplies[0].templateName.split('.');
"merge": { fileName = suffixArr[0];
}, //合并单元格 //luckysheet.destroy()
"rowlen":{}, //表格行高 luckysheet.create({
"columnlen":{}, //表格列宽 container: "luckysheet", // Luckysheet 的容器元素 ID
"rowhidden":{}, //隐藏行 title: fileName, // Excel 文件名
"colhidden":{}, //隐藏列 data: json_data, // Excel 数据
"borderInfo":{ showinfobar: false, //是否显示顶部名称栏
lang:'zh',
}, //边框 });
"authority":{}, //工作表保护 }).catch(() => {
}, // 处理错误逻辑,这里是一个空的错误处理函数
}, this.$message.error('查询失败,发生未知错误!');
/*{ });
"name": "Sheet2", },
"color": "", /** 规则下拉选 调佣后端的方法*/
"index": 1, handleRuleChange(){
"status": 0, if (this.selectedOption==='') {
"order": 1, this.selectedRule='';
"celldata": [], this.$message.warning("选择规则前请先选择模板!");
"config": {} return ; // 如果按钮被禁用,提前返回,避免执行下一步操作
}, }
{ this.disableNextButton = this.selectedRule === '';
"name": "Sheet3", roleListid(this.selectedRule).then(response => {
"color": "", rule=response.rows;
"index": 2, });
"status": 0,
"order": 2, },
"celldata": [], /** 回车事件和保存提交绑定 */
"config": {}, handleEnter(event) {
}*/ if (event.keyCode === 13) {
] event.preventDefault(); // 阻止默认的回车事件
// 触发确定操作
} this.submit_from();
luckysheet.create(options); }
},
}, /** 重置按钮操作 */
resetQuery() {
/** 导入事件*/ //刷新下拉选框内容
handleFileChange(evt) { fileName="新建XLSX工作表";
if (this.disableNextButton) { this.selectedOption='';
this.$message.warning("请先选择模板再进行导入!"); this.disableNextButton='';
return false; // 如果按钮被禁用,提前返回,避免执行下一步操作 this.selectedRule='';
} this.luckyrule=[];
let name = evt.name //刷新luckysheet表格
let suffixArr = name.split('.'), this.init();
suffix = suffixArr[suffixArr.length - 1] },
if (suffix !== 'xlsx') { /** Luckyexcel文档 */
this.$message({ init() {
message: "上传格式不正确,请上传xlsx格式文件", let options = {
type: "warning"}); container: 'luckysheet', //luckysheet为容器id
return title:'',
} lang:'zh',
LuckyExcel.transformExcelToLucky( showinfobar:false,
evt, data:[
function(exportJson) { {
if (exportJson.sheets === null || exportJson.sheets.length === 0) { "name": "sheet1", //工作表名称
this.$message({ "color": "", //工作表颜色
message: "导入失败,请检查上传的文件是否正确", "index": 0, //工作表索引
type: "warning" "status": 1, //激活状态
}); "order": 0, //工作表的下标
return "hide": 0,//是否隐藏
"row": 8, //行数
"column": 10, //列数
"defaultRowHeight": 19, //自定义行高
"defaultColWidth": 73, //自定义列宽
"celldata": [
], //初始化使用的单元格数据
"config": {
"merge": {
}, //合并单元格
"rowlen":{}, //表格行高
"columnlen":{}, //表格列宽
"rowhidden":{}, //隐藏行
"colhidden":{}, //隐藏列
"borderInfo":{
}, //边框
"authority":{}, //工作表保护
},
},
/*{
"name": "Sheet2",
"color": "",
"index": 1,
"status": 0,
"order": 1,
"celldata": [],
"config": {}
},
{
"name": "Sheet3",
"color": "",
"index": 2,
"status": 0,
"order": 2,
"celldata": [],
"config": {},
}*/
]
}
luckysheet.create(options);
},
/** 导入事件*/
async handleFileChange(evt) {
let exx;
const cons = new Promise((resolve, reject) => {
LuckyExcel.transformExcelToLucky(evt, exportJson => {
exx = exportJson;
resolve(exx);
});
});
try {
const exportJson = await cons;
await this.summary(exportJson);
console.log('summary 执行完毕');
this.submit(exportJson);
} catch (Error) {
this.$message({
message: Error.message,
type: "error"});
console.log(Error.message);
console.log("这里是最外面的地方");
}
},
/** 物料转换汇总到页面*/
summary(exportJson){
let sysRulez;
let sysRules;
let sysConver;
let value=[];
let data;
//获取规则 sysRulez是物料转换 sysRules是数据汇总规则 13
for(let i=0;i<rule.length;i++){
if (rule[i].convertStatus==1){
sysRulez = JSON.parse(rule[i].detailContent);
} }
let sysRulez; if(rule[i].convertStatus==2){
let sysRules; if (parseInt(rule[i].detailYS)===1){
let value=[]; sysConver = JSON.parse(rule[i].detailContent)
let map=new Map(); }else {
//获取物料转换的规则
//
for(let i=0;i<rule.length;i++){
if (rule[i].convertStatus===1){
sysRulez = JSON.parse(rule[i].detailContent);
}
if(rule[i].convertStatus===2){
sysRules = JSON.parse(rule[i].detailContent); sysRules = JSON.parse(rule[i].detailContent);
} }
} }
}
try {
//获取物料转换的sheet表 //获取物料转换的sheet表
let data=window.luckysheet.transToData(exportJson.sheets[sysRulez[0].se].celldata); data=window.luckysheet.transToData(exportJson.sheets[sysRulez[0].se].celldata);
window.luckysheet.set }
let key_i=sysRulez[0].ce; catch (err){
//获取物料转换的数据 throw new Error("导入失败,所选文件或规则有误");
for (let i=0;i<sysRules.length;i++){ }
//value.push(data[sysRules[i].re][sysRules[i].ce].m); //获取物料转换中导入表的列,用来获取物料名
let key_i=parseInt(sysRulez[0].ce);
value.push(sysRules[i].ce); //获取物料转换的数据
} for (let i=0;i<sysRules.length;i++){
//value.push(data[sysRules[i].re][sysRules[i].ce].m);
value.push(sysRules[i].ce);
}
//console.log("value的值为:"+value);
return new Promise((resolve, reject) => {
const asyncTasks = [];
switch (tempId) {
case 2:
{
let departmentMap = new Map();
let departments = [];
departmentMap.set('原煤', ['综一队', '综二队', '综三队', '开一区', '开二区', '准备一区', '准备二区', '掘进一区', '掘进二区', '掘进三区', '开拓项目部', '巷修区', '井运区', '通风区', '机电运转中心', '皮带运输中心']);
departmentMap.set('风选煤', '洗煤厂');
departmentMap.set('制造费用', ['机电检修中心', '地测科', '设备管理科', '旧品利用中心', '机修加工中心', '网络安全与信息通讯中心', '保卫科', '煤质管理科', '迁建科', '综合服务中心']);
departmentMap.set('管理费用', ['财务部', '综合办公室', '纪委监察科', '工会', '团委', '安全管理部', '经营管理部', '党委组织部(人力资源部)', '党委宣传部', '生产技术部', '机电运输部', '科协', '节能环保法律办公室', '党委组织部', '人力资源部']);
for (let i = parseFloat(sysRulez[0].re) + 1; i < data.length; i++) {
let n = parseInt(sysRules[0].ce) + 2;
if (data[i][key_i] != null && data[i][n] != null) {
let num = data[i][n].m;
//根据得到的num,找到对应的key
let keyy = getKeyByValue(departmentMap, num);
departments.push(keyy);
} else {
departments.push(null);
}
}
for (let key of departmentMap.keys()) {
let map = new Map();
let smallMat = [];
//console.log(departments);
for (let i = parseFloat(sysRulez[0].re) + 1; i < data.length; i++) {
if (data[i][key_i] != null && departments[i - 1] === key) {
let num = data[i][key_i].m;
smallMat.push(num);
} else {
smallMat.push(null);
}
}
//console.log(smallMat);
asyncTasks.push(
new Promise((innerResolve, innerReject) => {
const allNull = smallMat.every(item =>item===null);
if (allNull ) {
throw new Error("导入失败,导入文件错误,所选文件与模板规则不匹");
}
materialConvert(smallMat)
.then(response => {
let array = response.rows;
//console.log(array);
//luckysheet.setCellValue(12, 1, {bg:"#FF0000"})
for (let i = parseFloat(sysRulez[0].re) + 1; i < data.length; i++) {
let values = [];
if (data[i][13] != null && departments[i - 1] === key && data[i][key_i] != null) {
for (let j = 0; j < value.length; j++) {
let a = parseFloat(data[i][value[j]].v);
values.push(a);
}
//插入多个value的值
let index = smallMat.indexOf(data[i][key_i].m);
let key = array[index];
if (map.has(key)) {
let oldValues = map.get(key);
for (let i = 0; i < values.length; i++) {
values[i] = parseFloat(parseFloat(values[i] + oldValues[i]).toFixed(2));
}
map.set(key, values);
} else {
map.set(key, values);
}
}
let smallMat=[]; }
for(let i=parseInt(sysRulez[0].re)+1;i<data.length;i++){ //循环得到汇总结果
if(data[i][key_i]!=null){ //console.log(map);
let num=data[i][key_i].m; let cells;
smallMat.push(num); let rowss = luckysheet.find(key);
}else{ if (rowss.length != 0) {
smallMat.push(null); for (let i = 0; i < sysRules.length; i++) {
map.forEach((value, key) => {
let searchResult = luckysheet.find(key);
if (searchResult.length != 0 && key != null) {
cells = searchResult[0].column;
luckysheet.setCellValue(rowss[0].row, cells, value[i]);
luckysheet.setCellValue(rowss[0].row, cells, {
"ct": {
"fa": "General",
"t": "n"
}
});
}
});
}
}
}).catch(Error => {
console.log("这里是单个异步请求出错处");
//必须加,不能删除
innerReject(Error); // 异步请求出错
});
}));
}
} }
} break;
case 6: {
let deps = [];
let exps = [];
let map = new Map();
let smallMat = [];
for (let i = parseFloat(sysRulez[0].re) + 1; i < data.length; i++) {
if (data[i][key_i] != null) {
let num = data[i][key_i].m;
let dep = data[i][1].m;
let exp = data[i][14].m;
smallMat.push(num);
deps.push(dep);
exps.push(exp);
} else {
smallMat.push(null);
deps.push(null);
exps.push(null);
}
}
//console.log(smallMat);
asyncTasks.push(
new Promise((innerResolve, innerReject) => {
const allNull = smallMat.every(item =>item===null);
const allNull1 = deps.every(item =>item===null);
const allNull2 = exps.every(item =>item===null);
if (allNull || allNull1 ||allNull2) {
throw new Error("导入失败,导入文件错误,所选文件与模板规则不匹");
}
materialConvert(smallMat)
.then(response => {
let array = response.rows;
//console.log(array);
//luckysheet.setCellValue(12, 1, {bg:"#FF0000"})
for (let i = parseFloat(sysRulez[0].re) + 1, k = 0; i < data.length; i++, k++) {
let values = [];
if (data[i][key_i] != null) {
for (let j = 0; j < value.length; j++) {
try{
let a = parseFloat(data[i][value[j]].v);
values.push(a);
}catch(err){
throw new Error("导入失败,导入文件不匹");
}
}
//插入多个value的值
let key = exps[k] + '/' + deps[k] + '/' + array[k];
if (map.has(key)) {
let oldValues = map.get(key);
for (let i = 0; i < values.length; i++) {
values[i] = parseFloat(parseFloat(values[i] + oldValues[i]).toFixed(2));
}
map.set(key, values);
} else {
map.set(key, values);
}
}
materialConvert(smallMat).then(response => { }
debugger //循环得到汇总结果
let array = response.rows; console.log(map);
//luckysheet.setCellValue(12, 1, {bg:"#FF0000"}) if (map.size === 0) {
for (let i =parseInt(sysRulez[0].re)+1; i < data.length; i++) { throw new Error("导入失败,导入文件错误");
let values = [];
if(data[i][key_i]!=null){
for(let j=0;j<value.length;j++) {
let a = parseFloat(data[i][value[j]].v);
if (isNaN(a)){
a=0;
} }
values.push(a); //循环得到汇总结果
let cells;
let rowws;
let con=0;
let warn;
for (let i = 0; i < sysRules.length; i++) {
map.forEach((value, key) => {
const suffixArr = key.split('/'), mat = suffixArr[2], depp = suffixArr[1],
expp = suffixArr[0];
//console.log(expp);console.log(depp);console.log(mat);
let searchResult = luckysheet.find(expp);
if (searchResult.length === 0 && expp == null) {
warn++;
return
}
rowws = searchResult[0].row;
for (let i = 1; i < 10000000000000000000000000; i++) {
let n = rowws + i;
let gg = luckysheet.getCellValue(n, 0);
if (gg!==null) {
con = rowws + i;
break;
}
}
searchResult= luckysheet.find(depp);
let k=0;
let r;
for(let i=0;i<searchResult.length;i++){
r = searchResult[i].row;
if(r<con&&r>=rowws){
k=1;
break;
}
}
if(k===1){
let matResult = luckysheet.find(mat);
if (matResult.length !== 0 && mat != null) {
cells = matResult[0].column;
luckysheet.setCellValue(r, cells, value[i]);
luckysheet.setCellValue(r, cells, {
"ct": {
"fa": "General",
"t": "n"
}
});
}
}
});
}
}).catch(Error => {
console.log("这里是单个异步请求出错处");
//必须加,不能删除
innerReject(Error); // 异步请求出错
});
}));
}
break;
case 1: {
let map = new Map();
let smallMat = [];
for (let i = parseInt(sysRulez[0].re) + 1; i < data.length; i++) {
if (data[i][key_i] != null) {
let num = data[i][key_i].m;
smallMat.push(num);
} else {
smallMat.push(null);
} }
}else{
break;
} }
//插入多个value的值 for (let j = 0; j < value.length; j++) {
let index = smallMat.indexOf(data[i][key_i].m); if (data[sysRulez[0].re][value[j]] != null) {
let key = array[index]; let num = data[sysRulez[0].re][value[j]].m;
key = key+"-"+data[i][sysRulez[1].ce].m smallMat.push(num);
if (map.has(key)) { } else {
let oldValues = map.get(key); smallMat.push(null);
for (let i=0;i<values.length;i++){
values[i] = parseFloat(parseFloat(parseFloat(values[i]) + parseFloat(oldValues[i])).toFixed(2));
} }
map.set(key, values);
} else {
map.set(key, values);
} }
} //console.log(smallMat);
//循环得到汇总结果 asyncTasks.push(
let row; new Promise((innerResolve, innerReject) => {
map.forEach((value, key) => { const allNull = smallMat.every(item =>item===null);
let splitElement = key.split("-"); if (allNull ) {
row = luckysheet.find(splitElement[0])[0].row throw new Error("导入失败,导入文件错误,所选文件与模板规则不匹");
if (splitElement[1] !== 'undefined') { }
materialConvert(smallMat)
let find = luckysheet.find(splitElement[1])[0]; .then(response => {
if (find != null && luckysheet.getCellValue(find.row, 0) === 0) { let array = response.rows;
// for (let i =0;i<value.length;i++) { //console.log(array);
// luckysheet.setCellValue(sysConver[i].rt, sysConver[i].ct, value[i]); //luckysheet.setCellValue(12, 1, {bg:"#FF0000"})
// luckysheet.setCellValue(sysConver[i].rt, sysConver[i].ct, { for (let i = parseInt(sysRulez[0].re) + 1; i < data.length; i++) {
// "ct": { let values = [];
// "fa": "General", if (data[i][key_i] != null) {
// "t": "n" for (let j = 0; j < value.length; j++) {
// } try{
// }); let a = parseFloat(data[i][value[j]].v);
// } if (isNaN(a)) {
a = 0;
}
values.push(a);
}catch (err){
throw new Error("导入失败,导入文件不匹");
}
}
} else { } else {
break;
let rowindex; }
let colindex; //插入多个value的值
let config; let index = smallMat.indexOf(data[i][key_i].m);
let key = array[index];
// let bord={ if (map.has(key)) {
// "rangeType": "cell", let oldValues = map.get(key);
// "value": { for (let i = 0; i < values.length; i++) {
// "row_index": 0, values[i] = parseFloat(parseFloat(parseFloat(values[i]) + parseFloat(oldValues[i])).toFixed(2));
// "col_index": 0,
// "l": {
// "style": 1,
// "color": "#000000"
// },
// "r": {
// "style": 1,
// "color": "#000000"
// },
// "t": {
// "style": 1,
// "color": "#000000"
// },
// "b": {
// "style": 1,
// "color": "#000000"
// }
// }
// };
let bord = {
"rangeType": "range",
"borderType": "border-all",
"style": "1",
"color": "#000000",
"range": [{
"row": [0, 0],
"column": [0, 0]
}]
} }
map.set(key, values);
} else {
let cellValue = luckysheet.getcellvalue(row); map.set(key, values);
luckysheet.insertRow(row + 1) }
luckysheet.setCellValue(row + 1, sysRulez[0].ct, splitElement[0]); }
luckysheet.setCellValue(row + 1, sysRulez[0].ct, cellValue[0]); if (map.size === 0) {
throw new Error("导入失败,导入文件错误");
// config = luckysheet.getConfig(0); }
// bord.value.row_index = row+1; //循环得到汇总结果
// bord.value.col_index = parseInt(sysRulez[0].ct); let row;
// config.borderInfo.push(bord); let con;
// luckysheet.setConfig(config); let warn=0;
// console.log(map);
// config = luckysheet.getConfig(0); for (let i = 0; i < sysRules.length; i++) {
// bord.value.row_index = row+1;
// bord.value.col_index = parseInt(sysRulez[0].ct)+1; map.forEach((value, key) => {
// config.borderInfo.push(bord); let matchingCells = [];
// luckysheet.setConfig(config); let name = data[sysRules[i].re][sysRules[i].ce].m
if (name.includes("洗煤")) {
luckysheet.setCellValue(row + 1, sysRulez[1].ct, splitElement[1]); row = sysRules[i].rt;
luckysheet.setCellValue(row + 1, sysRulez[1].ct, cellValue[2]); con = parseInt(sysRules[i].rt) + 10;
} else {
// config = luckysheet.getConfig(0); row = sysRules[i].rt;
// bord.value.row_index = row+1; con = 54;
// bord.value.col_index = parseInt(sysRulez[1].ct);
// config.borderInfo.push(bord);
// luckysheet.setConfig(config);
if (value[0]===0){
luckysheet.setCellValue(row + 1, parseInt(sysRules[0].ct) + 1, 0);
luckysheet.setCellValue(row + 1, parseInt(sysRules[0].ct) + 1, cellValue[4]);
}else {
luckysheet.setCellValue(row + 1, parseInt(sysRules[0].ct) + 1, value[1] / value[0]);
luckysheet.setCellValue(row + 1, parseInt(sysRules[0].ct) + 1, cellValue[4]);
} }
// config = luckysheet.getConfig(0); for (; row <= con; row++) {
// bord.value.row_index = row+1; let cellValue = luckysheet.getCellValue(row, parseInt(sysRulez[0].ct));
// bord.value.col_index = parseInt(sysRules[0].ct)+1; if (cellValue === null) {
// config.borderInfo.push(bord); warn++
// luckysheet.setConfig(config); } else {
if (cellValue.includes(key)) {
for (let i = 0; i < value.length; i++) { luckysheet.setCellValue(row, sysRules[i].ct, value[i]);
luckysheet.setCellValue(row + 1, sysRules[i].ct, value[i]); luckysheet.setCellValue(row, sysRules[i].ct, {
luckysheet.setCellValue(row + 1, sysRules[i].ct, { "ct": {
"ct": { "fa": "General",
"fa": "General", "t": "n"
"t": "n" }
});
break;
}else{
} }
}); }
luckysheet.setCellValue(row + 1, sysRules[i].ct, cellValue[3]);
// config = luckysheet.getConfig(0);
// bord.value.row_index = row+1;
// bord.value.col_index = parseInt(sysRules[i].ct);
// config.borderInfo.push(bord);
// luckysheet.setConfig(config);
} }
});
config = luckysheet.getConfig(0); }
bord.range[0].row = [row + 1, row + 1]; let value2 = [];
bord.range[0].column = [sysRulez[0].ct, sysRules[sysRules.length - 1].ct]; let map2 = new Map;
config.borderInfo.push(bord); for (let i = 0; i < sysConver.length; i++) {
luckysheet.setConfig(config); //value.push(data[sysRules[i].re][sysRules[i].ce].m);
value2.push(sysConver[i].ce);
}
for (let i = parseInt(sysRulez[0].re) + 1; i < data.length; i++) {
let values2 = [];
if (data[i][key_i] != null) {
for (let j = 0; j < value2.length; j++) {
try{
let a = parseFloat(data[i][value2[j]].v);
if (isNaN(a)) {
a = 0;
}
values2.push(a);
}catch (err){
throw new Error("导入失败,导入文件不匹");
}
}
} else {
break;
} }
}else { //插入多个value的值
luckysheet.setCellValue(row, parseInt(sysRulez[1].ct), ""); let key = data[sysConver[0].re][sysConver[0].ce].v;
if (value[0]===0){ if (map2.has(key)) {
luckysheet.setCellValue(row, parseInt(sysRules[0].ct) + 1, 0); let oldValues = map2.get(key);
}else { for (let i = 0; i < values2.length; i++) {
luckysheet.setCellValue(row, parseInt(sysRules[0].ct) + 1, value[1] / value[0]); values2[i] = parseFloat(parseFloat(parseFloat(values2[i]) + parseFloat(oldValues[i])).toFixed(2));
}
map2.set(key, values2);
} else {
map2.set(key, values2);
}
}
if (map2.size === 0) {
throw new Error("导入失败,导入文件错误");
} }
map2.forEach((value, key) => {
for (let i = 0; i < value.length; i++) { for (let i = 0; i < value.length; i++) {
luckysheet.setCellValue(row, sysRules[i].ct, value[i]); luckysheet.setCellValue(sysConver[i].rt, sysConver[i].ct, value[i]);
// config = luckysheet.getConfig(0); luckysheet.setCellValue(sysConver[i].rt, sysConver[i].ct, {
// bord.value.row_index = row+1; "ct": {
// bord.value.col_index = parseInt(sysRules[i].ct); "fa": "General",
// config.borderInfo.push(bord); "t": "n"
// luckysheet.setConfig(config); }
});
}
})
}).catch(Error => {
console.log("这里是单个异步请求出错处");
//必须加,不能删除
innerReject(Error); // 异步请求出错
});
}));
}
break;
case 7: {
let map = new Map();
let smallMat = [];
let deps = [];
for (let i = parseFloat(sysRulez[0].re) + 1; i < data.length; i++) {
if (data[i][sysRulez[1].ce]!= null && data[i][key_i]!= null ) {
let num = data[i][key_i].m;
let dep = data[i][sysRulez[1].ce].m;
if(dep){
smallMat.push(null);
deps.push(null);
}else{
smallMat.push(num);
deps.push(dep);
}
} else {
smallMat.push(null);
deps.push(null);
}
}
debugger
console.log(deps);
asyncTasks.push(
new Promise((innerResolve, innerReject) => {
const allNull = smallMat.every(item =>item===null);
if (allNull ) {
throw new Error("导入失败,导入文件错误,所选文件与模板规则不匹");
}
materialConvert(smallMat)
.then(response => {
let array = response.rows;
for (let i = parseFloat(sysRulez[0].re) + 1, k = 0; i < data.length; i++, k++) {
let values = [];
if (data[i][key_i] != null) {
for (let j = 0; j < value.length; j++) {
try{
let a = parseFloat(data[i][value[j]].v);
values.push(a);
}catch (err){
this.$message({
message: "导入失败,导入文件不匹",
type: "error"
});
innerReject(error); // 异步请求出错
}
}
//插入多个value的值
//此方法只适用于一对一唯一值
/*let index = smallMat.indexOf(data[i][key_i].m);
let key = array[index];*/
let key = array[k] + '/' + deps[k];
if (map.has(key)) {
let oldValues = map.get(key);
for (let i = 0; i < values.length; i++) {
values[i] = parseFloat(parseFloat(values[i] + oldValues[i]).toFixed(2));
}
map.set(key, values);
} else {
map.set(key, values);
}
} }
} }
//循环得到汇总结果
console.log(map);
if (map.size === 0) {
this.$message({
message: "导入失败,导入文件错误",
type: "error"
});
innerReject(error); // 异步请求出错
}
//返回单元格第二行的数据
//let celn=luckysheet.getcellvalue(1);
//返回当前工作表第1列数据
//let cown=luckysheet.getcellvalue(null,0);
let rowws;
let config;
let bord = {
"rangeType": "range",
"borderType": "border-all",
"style": "1",
"color": "#000000",
"range": [{
"row": [0, 0],
"column": [0, 0]
}]
}
let warn=0;
map.forEach((value, key) => {
const suffixArr = key.split('/'), mat = suffixArr[0], depp = suffixArr[1];
//console.log(mat);console.log(depp);
let searchResult = luckysheet.find(mat);
rowws = searchResult[0].row;
if (searchResult.length != 0 && key != null) {
luckysheet.insertRow(rowws + 1);
//输出部门数量金额
luckysheet.setCellValue(rowws + 1, sysRulez[1].ct, depp);
for (let i = 0; i < sysRules.length; i++) {
luckysheet.setCellValue(rowws + 1, sysRules[i].ct, value[i]);
//修改单元格样式
/*luckysheet.setCellValue(rowws+g, sysRules[i].ct, {
"ct": {
"fa": "General",
"t": "n"
}
});*/
}
//输出单价
luckysheet.setCellValue(rowws + 1, parseInt(sysRules[0].ct) + 1, value[1] / value[0]);
//修改单价样式
/*luckysheet.setCellValue(rowws+g,parseInt(sysRules[0].ct)+1,{
"ct": {
"fa": "0.0000",
"t": "n"
}
});*/
} else{
warn++;
}
config = luckysheet.getConfig(0);
bord.range[0].row = [rowws + 1, rowws + 1];
bord.range[0].column = [0, sysRules[sysRules.length - 1].ct];
config.borderInfo.push(bord);
luckysheet.setConfig(config);
});
console.log(warn);
/*let find1 = luckysheet.find("合计");
let number = parseInt(find1[0].row)-1;
luckysheet.setCellValue(find1[0].row, sysRules[sysRules.length-1].ct, "=SUM(F2:F"+number+")")*/
}).catch(Error => {
console.log("这里是单个异步请求出错处");
//必须加,不能删除
innerReject(Error); // 异步请求出错
}); });
let find1 = luckysheet.find("合计"); }));
let number = parseInt(find1[0].row)-1;
luckysheet.setCellValue(find1[0].row, sysRules[sysRules.length-1].ct, "=SUM(F2:F"+number+")");
}).catch(() => { }
// 处理错误逻辑,这里是一个空的错误处理函数 break;
console.log("走到这了,物料转换后续处理出问题了!!"); default :
{
let map = new Map();
let smallMat = [];
for (let i = parseFloat(sysRulez[0].re) + 1; i < data.length; i++) {
if (data[i][key_i] != null) {
let num = data[i][key_i].m;
smallMat.push(num);
} else {
smallMat.push(null);
}
}
asyncTasks.push(
new Promise((innerResolve, innerReject) => {
const allNull = smallMat.every(item =>item===null);
if (allNull ) {
throw new Error("导入失败,导入文件错误,所选文件与模板规则不匹");
}
materialConvert(smallMat)
.then(response => {
let array = response.rows;
for (let i = parseFloat(sysRulez[0].re) + 1; i < data.length; i++) {
let values = [];
let index;
if (data[i][key_i] != null) {
for (let j = 0; j < value.length; j++) {
try{
let a = parseFloat(data[i][value[j]].v);
values.push(a);
}catch (err){
throw new Error("导入失败,导入文件不匹");
}
}
//插入多个value的值
index = smallMat.indexOf(data[i][key_i].m);
let key = array[index];
if (map.has(key)) {
let oldValues = map.get(key);
for (let i = 0; i < values.length; i++) {
values[i] = parseFloat(parseFloat(values[i] + oldValues[i]).toFixed(2));
}
map.set(key, values);
} else {
map.set(key, values);
}
}
}); }
//循环得到汇总结果
console.log(map);
if (map.size === 0) {
throw new Error("导入失败,导入文件错误");
}
let rowws;
let warn = 0;
for (let i = 0; i < sysRules.length; i++) {
map.forEach((value, key) => {
let searchResult;
searchResult= luckysheet.find(key);
if (searchResult && searchResult.length !== 0 && key != null) {
rowws = searchResult[0].row;
luckysheet.setCellValue(rowws, sysRules[i].ct, value[i]);
luckysheet.setCellValue(rowws, sysRules[i].ct, {
"ct": {
"fa": "General",
"t": "n"
}
});
} else {
warn++;
}
});
}
if (warn / sysRules.length === map.size) {
throw new Error("导入文件与所选模板规则不匹配");
} else if (warn > 0) {
this.$message({
message: "还有"+warn/sysRules.length+"条大类未能匹配到",
type: "warning"});
}
resolve(response.rows);
innerResolve(); // 标记当前异步任务完成
}).catch(Error => {
console.log("这里是单个异步请求出错处");
//必须加,不能删除
innerReject(Error); // 异步请求出错
});
}));
}
break;
}
//切换到想要的sheet //切换到想要的sheet
luckysheet.setSheetActive(0); luckysheet.setSheetActive(0);
}) Promise.all(asyncTasks)
.then(() => {
}, resolve(); // 所有异步请求执行完成
})
/** 导出设置 */ .catch(Error => {
handleExport: debounce(function() { console.log("这里是所有的异步请求出错处");
// 处理点击事件 reject(Error); // 异步请求出错
exportExcel(luckysheet.getAllSheets(),fileName) });
}, 500), // 设置延迟时间,单位为毫秒 });
} },
/** 保存导入文件和生成文件 */
submit(contents){
debugger
console.log("还是执行了保存方法");
const name = contents.info.name;
let objsheet = luckysheet.getAllSheets() // 得到表的数据
//LuckyExcel = objsheet // 将表的数据保存本地
let strsheet = JSON.stringify(objsheet)// 对象转化为字符串
const data={name :name,jsons:strsheet};
/*addMyluckyexcel(data).then(response => {
if(response.code==200){
this.$message({
message: '保存成功', type: 'success'
});
this.dialogVisible=false;
//this.$router.replace({ path: '/' }); //刷新整个页面会出错
//window.location.reload();//也是全局刷新,不合适
this.$router.go(-1);
}else{
this.$message.error('保存失败');
}
});*/
},
/** 导出设置 */
handleExport: debounce(function() {
// 处理点击事件
exportExcel(luckysheet.getAllSheets(),fileName)
}, 500), // 设置延迟时间,单位为毫秒
}
// 配置项111 // 配置项111
}; };
// debounce函数定义 // debounce函数定义
function debounce(func, delay) { function debounce(func, delay) {
let timer; let timer;
return function () { return function () {
const context = this; const context = this;
const args = arguments; const args = arguments;
clearTimeout(timer); clearTimeout(timer);
timer = setTimeout(function () { timer = setTimeout(function () {
func.apply(context, args); func.apply(context, args);
}, delay); }, delay);
}; };
}
function getKeyByValue(map, value) {
for (let [key, val] of map) {
if (val === value) {
return key;
}
if (Array.isArray(val) && val.includes(value)) {
return key;
}
}
} }
</script> </script>
...@@ -48,7 +48,6 @@ ...@@ -48,7 +48,6 @@
icon="el-icon-upload2" icon="el-icon-upload2"
size="mini" size="mini"
@click="handleExport" @click="handleExport"
v-hasPermi="['ruoyi-myexcel:myexcel:export']"
>导出</el-button> >导出</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment