Commit f9c3f9ca authored by xiangjiaojunxp's avatar xiangjiaojunxp

物料转换

parent 12e41918
......@@ -29,7 +29,6 @@
icon="el-icon-upload2"
size="mini"
@click="handleExport"
v-hasPermi="['ruoyi-myexcel:myexcel:export']"
>导出</el-button>
</el-col>
<el-col :span="1.5">
......@@ -39,6 +38,7 @@
ref="upload"
:before-upload="handleFileChange"
action=''
accept='.xlsx'
:limit="1"
:file-list="fileList"
:disabled="disableNextButton"
......@@ -61,20 +61,23 @@
<script>
import { getSuppliesTemplate, listSuppliesTemplate,roleList,materialConvert,roleListid} from "@/api/ruoyi-myLuckyexcel/myluckyexcel";
import {addInsert}from "@/api/system/historydata"
/*import luckysheet from 'luckysheet'*/
import LuckyExcel from 'luckyexcel'
//导入库export.js 这个文件是es6的,不能在普通的HTML文件直接引入js文件(虽然都是js文件,但是有区别,具体请百度es6与es5)!需要把es6转es5才可以直接引入使用!
import { exportExcel } from '../../../../public/exportExcel';
import { v4 as uuidv4 } from 'uuid';
var fileName="新建XLSX工作表"; //定义表名
var rule=[];
var tempId;
var roleId;
var uuid1;
export default {
name: "Mymodule",
data() {
return {
uuid:'',
//弹出页面的表名
from_name : "",
// 是否显示弹出层
......@@ -87,7 +90,8 @@ export default {
luckyrule:[],
depss:[],
// 表单参数
form: {},
from: {},
dfrom:{},
// 查询参数
queryParams: {
status:0
......@@ -111,7 +115,6 @@ export default {
this.depss = response.rows;
});
},
/** 下拉选和页面luckysheet绑定 */
handleOptionChange() {
......@@ -120,6 +123,8 @@ export default {
//根据选中的下拉选项值获取相应的信息
getSuppliesTemplate(this.selectedOption).then(response => {
tempId= this.selectedOption;
uuid1=this.uuid=uuidv4().substring(0,8);
console.log(this.uuid);
const sysSupplies = response.rows;
this.luckysheetData = sysSupplies[0].templateContent;
//将接收到的json存到json_data中
......@@ -152,6 +157,7 @@ export default {
}
this.disableNextButton = this.selectedRule === '';
roleListid(this.selectedRule).then(response => {
roleId=this.selectedRule;
rule=response.rows;
});
......@@ -172,6 +178,7 @@ export default {
this.disableNextButton='';
this.selectedRule='';
this.luckyrule=[];
uuid1='';
//刷新luckysheet表格
this.init();
},
......@@ -235,91 +242,395 @@ export default {
luckysheet.create(options);
},
/** 导入事件*/
handleFileChange(evt) {
if (this.disableNextButton) {
this.$message.warning("请先选择模板再进行导入!");
return false; // 如果按钮被禁用,提前返回,避免执行下一步操作
}
let name = evt.name
let suffixArr = name.split('.'),
suffix = suffixArr[suffixArr.length - 1]
if (suffix !== 'xlsx') {
this.$message({
message: "上传格式不正确,请上传xlsx格式文件",
type: "warning"});
return
}
LuckyExcel.transformExcelToLucky(
evt,
function(exportJson) {
if (exportJson.sheets === null || exportJson.sheets.length === 0) {
this.$message({
message: "导入失败,请检查上传的文件是否正确",
type: "warning"
async handleFileChange(evt) {
let exx;
const cons = new Promise((resolve, reject) => {
LuckyExcel.transformExcelToLucky(evt, exportJson => {
exx = exportJson;
resolve(exx);
});
});
return
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 map=new Map();
//获取物料转换的规则
//
let data;
//获取规则 sysRulez是物料转换 sysRules是数据汇总规则 13
for(let i=0;i<rule.length;i++){
if (rule[i].convertStatus===1){
if (rule[i].convertStatus==1){
sysRulez = JSON.parse(rule[i].detailContent);
}
if(rule[i].convertStatus===2){
if(rule[i].convertStatus==2){
if (parseInt(rule[i].detailYS)===1){
sysConver = JSON.parse(rule[i].detailContent)
}else {
sysRules = JSON.parse(rule[i].detailContent);
}
}
}
try {
//获取物料转换的sheet表
let data=window.luckysheet.transToData(exportJson.sheets[sysRulez[0].se].celldata);
window.luckysheet.set
let key_i=sysRulez[0].ce;
data=window.luckysheet.transToData(exportJson.sheets[sysRulez[0].se].celldata);
}
catch (err){
throw new Error("导入失败,所选文件或规则有误");
}
//获取物料转换中导入表的列,用来获取物料名
let key_i=parseInt(sysRulez[0].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('管理费用', ['财务部', '综合办公室', '纪委监察科', '工会', '团委', '安全管理部', '经营管理部', '党委组织部(人力资源部)', '党委宣传部', '生产技术部', '机电运输部', '科协', '节能环保法律办公室', '党委组织部', '人力资源部']);
try{
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);
}
}
console.log(departments);
console.log(departmentMap);
}catch(err){
throw new Error("导入失败,导入文件与模板规则不匹");
}
for (let key of departmentMap.keys()) {
console.log(key);
let map = new Map();
let smallMat = [];
//console.log(departments);
try {
for (let i = parseFloat(sysRulez[0].re) + 1; i < data.length; i++) {
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;
if (data[i][key_i] != null && departments[i - 1] === key) {
let num = data[i][key_i].m;
smallMat.push(num);
} else {
smallMat.push(null);
}
}
}catch(err){
throw new Error("导入失败,导入文件与模板规则不匹");
}
//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++) {
try{
let a = parseFloat(data[i][value[j]].v);
values.push(a);
}catch (err){
throw new Error("导入失败,导入文件不匹");
}
}
//插入多个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);
}
}
}
//循环得到汇总结果
console.log(map);
if (map.size === 0) {
throw new Error("导入失败,导入文件错误");
}
let cells;
let warn;
let rowss = luckysheet.find(key);
if (rowss.length != 0) {
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"
}
});
}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;
case 6: {
let deps = [];
let exps = [];
let map = new Map();
let smallMat = [];
try{
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);
}
}
}catch(err){
throw new Error("导入失败,导入文件与模板规则不匹");
}
materialConvert(smallMat).then(response => {
debugger
//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 =parseInt(sysRulez[0].re)+1; i < data.length; i++) {
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++) {
if (data[i][key_i] != null) {
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("导入失败,导入文件不匹");
}
}
//插入多个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);
}
}
}
//循环得到汇总结果
console.log(map);
if (map.size === 0) {
throw new Error("导入失败,导入文件错误");
}
//循环得到汇总结果
let cells;
let rowws;
let con=0;
let warn=0;
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 ) {
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);
if(searchResult.length !== 0 ){
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"
}
});
}else{
warn++;
}
}else{
warn++;
}
}
}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;
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);
}
}
for (let j = 0; j < value.length; j++) {
if (data[sysRulez[0].re][value[j]] != null) {
let num = data[sysRulez[0].re][value[j]].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 = parseInt(sysRulez[0].re) + 1; i < data.length; i++) {
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);
if (isNaN(a)) {
a = 0;
}
values.push(a);
}catch (err){
throw new Error("导入失败,导入文件不匹");
}
}
} else {
break;
}
//插入多个value的值
let index = smallMat.indexOf(data[i][key_i].m);
let key = array[index];
key = key+"-"+data[i][sysRulez[1].ce].m
if (map.has(key)) {
let oldValues = map.get(key);
for (let i=0;i<values.length;i++){
for (let i = 0; i < values.length; i++) {
values[i] = parseFloat(parseFloat(parseFloat(values[i]) + parseFloat(oldValues[i])).toFixed(2));
}
map.set(key, values);
......@@ -327,54 +638,181 @@ export default {
map.set(key, values);
}
}
if (map.size === 0) {
throw new Error("导入失败,导入文件错误");
}
//循环得到汇总结果
let row;
let con;
let warn=0;
console.log(map);
for (let i = 0; i < sysRules.length; i++) {
map.forEach((value, key) => {
let splitElement = key.split("-");
row = luckysheet.find(splitElement[0])[0].row
if (splitElement[1] !== 'undefined') {
let find = luckysheet.find(splitElement[1])[0];
if (find != null && luckysheet.getCellValue(find.row, 0) === 0) {
// for (let i =0;i<value.length;i++) {
// luckysheet.setCellValue(sysConver[i].rt, sysConver[i].ct, value[i]);
// luckysheet.setCellValue(sysConver[i].rt, sysConver[i].ct, {
// "ct": {
// "fa": "General",
// "t": "n"
// }
// });
// }
let matchingCells = [];
let name = data[sysRules[i].re][sysRules[i].ce].m
if (name.includes("洗煤")) {
row = sysRules[i].rt;
con = parseInt(sysRules[i].rt) + 10;
} else {
row = sysRules[i].rt;
con = 54;
}
for (; row <= con; row++) {
let cellValue = luckysheet.getCellValue(row, parseInt(sysRulez[0].ct));
if (cellValue === null) {
warn++
} else {
if (cellValue.includes(key)) {
luckysheet.setCellValue(row, sysRules[i].ct, value[i]);
luckysheet.setCellValue(row, sysRules[i].ct, {
"ct": {
"fa": "General",
"t": "n"
}
});
break;
}else{
}
}
}
});
}
let value2 = [];
let map2 = new Map;
for (let i = 0; i < sysConver.length; i++) {
//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;
}
//插入多个value的值
let key = data[sysConver[0].re][sysConver[0].ce].v;
if (map2.has(key)) {
let oldValues = map2.get(key);
for (let i = 0; i < values2.length; i++) {
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++) {
luckysheet.setCellValue(sysConver[i].rt, sysConver[i].ct, value[i]);
luckysheet.setCellValue(sysConver[i].rt, sysConver[i].ct, {
"ct": {
"fa": "General",
"t": "n"
}
});
}
})
}).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);
}
}
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); // 异步请求出错
}
let rowindex;
let colindex;
let config;
// let bord={
// "rangeType": "cell",
// "value": {
// "row_index": 0,
// "col_index": 0,
// "l": {
// "style": 1,
// "color": "#000000"
// },
// "r": {
// "style": 1,
// "color": "#000000"
// },
// "t": {
// "style": 1,
// "color": "#000000"
// },
// "b": {
// "style": 1,
// "color": "#000000"
// }
// }
// };
}
//插入多个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",
......@@ -382,105 +820,206 @@ export default {
"color": "#000000",
"range": [{
"row": [0, 0],
"column": [0, 0]
}]
}
let cellValue = luckysheet.getcellvalue(row);
luckysheet.insertRow(row + 1)
luckysheet.setCellValue(row + 1, sysRulez[0].ct, splitElement[0]);
luckysheet.setCellValue(row + 1, sysRulez[0].ct, cellValue[0]);
// config = luckysheet.getConfig(0);
// bord.value.row_index = row+1;
// bord.value.col_index = parseInt(sysRulez[0].ct);
// config.borderInfo.push(bord);
// luckysheet.setConfig(config);
//
// config = luckysheet.getConfig(0);
// bord.value.row_index = row+1;
// bord.value.col_index = parseInt(sysRulez[0].ct)+1;
// config.borderInfo.push(bord);
// luckysheet.setConfig(config);
luckysheet.setCellValue(row + 1, sysRulez[1].ct, splitElement[1]);
luckysheet.setCellValue(row + 1, sysRulez[1].ct, cellValue[2]);
// config = luckysheet.getConfig(0);
// bord.value.row_index = row+1;
// 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);
// bord.value.row_index = row+1;
// bord.value.col_index = parseInt(sysRules[0].ct)+1;
// config.borderInfo.push(bord);
// luckysheet.setConfig(config);
for (let i = 0; i < value.length; i++) {
luckysheet.setCellValue(row + 1, sysRules[i].ct, value[i]);
luckysheet.setCellValue(row + 1, sysRules[i].ct, {
"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(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);
});*/
}
//输出单价
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 = [row + 1, row + 1];
bord.range[0].column = [sysRulez[0].ct, sysRules[sysRules.length - 1].ct];
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); // 异步请求出错
});
}));
}
}else {
luckysheet.setCellValue(row, parseInt(sysRulez[1].ct), "");
if (value[0]===0){
luckysheet.setCellValue(row, parseInt(sysRules[0].ct) + 1, 0);
}else {
luckysheet.setCellValue(row, parseInt(sysRules[0].ct) + 1, value[1] / value[0]);
break;
default :
{
let map = new Map();
let smallMat = [];
try{
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);
}
for (let i = 0; i < value.length; i++) {
luckysheet.setCellValue(row, sysRules[i].ct, value[i]);
// 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);
}
} catch(err){
throw new Error("导入失败,导入文件与模板规则不匹");
}
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("导入失败,导入文件不匹");
}
});
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(() => {
// 处理错误逻辑,这里是一个空的错误处理函数
console.log("走到这了,物料转换后续处理出问题了!!");
}
//插入多个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
luckysheet.setSheetActive(0);
Promise.all(asyncTasks)
.then(() => {
resolve(); // 所有异步请求执行完成
})
.catch(Error => {
console.log("这里是所有的异步请求出错处");
reject(Error); // 异步请求出错
});
});
},
/** 保存导入文件和生成文件 */
submit(contents){
console.log("还是执行了保存方法");
const name = contents.info.name;
const obj=contents.sheets;
let list=[];
//导入文件内容转json
let str = JSON.stringify(obj)// 对象转化为字符串
let objsheet = luckysheet.getAllSheets() // 得到表的数据
//生成文件转json
let strsheet = JSON.stringify(objsheet)// 对象转化为字符串
this.from.templateId=this.dfrom.templateId=tempId;
this.from.importUuid=this.dfrom.importUuid=uuid1;
this.from.roleId=this.dfrom.roleId=roleId;
this.dfrom.historyName=name;
this.dfrom.historyContent=str;
this.dfrom.identifyingCode=0;
this.from.status=this.dfrom.status=0;
list.push(this.dfrom);
this.from.historyName=fileName+'(生成文件)';
this.from.historyContent=strsheet;
this.from.identifyingCode=1;
list.push(this.from);
console.log(list);
addInsert(list).then(response=>{
if(response.code==200){
this.$message({
message: '保存成功', type: 'success'
})
}
});
},
/** 导出设置 */
handleExport: debounce(function() {
// 处理点击事件
......@@ -501,5 +1040,20 @@ function debounce(func, 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;
}
}
}
function generateUUID() {
let array = new Uint32Array(4);
window.crypto.getRandomValues(array);
return array.join("-");
}
</script>
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