Commit fc65d5be authored by lvzhuangzhuang's avatar lvzhuangzhuang

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	ruoyi-ui/src/views/system/supplies/index.vue
parents c37d519c 5c5f50e2
......@@ -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">
......@@ -111,7 +110,6 @@ export default {
this.depss = response.rows;
});
},
/** 下拉选和页面luckysheet绑定 */
handleOptionChange() {
......@@ -235,91 +233,346 @@ 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('管理费用', ['财务部', '综合办公室', '纪委监察科', '工会', '团委', '安全管理部', '经营管理部', '党委组织部(人力资源部)', '党委宣传部', '生产技术部', '机电运输部', '科协', '节能环保法律办公室', '党委组织部', '人力资源部']);
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){
let num=data[i][key_i].m;
}
//循环得到汇总结果
//console.log(map);
let cells;
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"
}
});
}
});
}
}
}).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);
}else{
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);
}
}
}
//循环得到汇总结果
console.log(map);
if (map.size === 0) {
throw new Error("导入失败,导入文件错误");
}
//循环得到汇总结果
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"
}
});
}
}
});
}
materialConvert(smallMat).then(response => {
}).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++) {
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++) {
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;
if (isNaN(a)) {
a = 0;
}
values.push(a);
}catch (err){
throw new Error("导入失败,导入文件不匹");
}
}else{
}
} 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 +580,182 @@ 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);
}
}
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); // 异步请求出错
}
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",
......@@ -385,102 +766,186 @@ export default {
"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, {
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 = [];
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);
}
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){
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() {
// 处理点击事件
......@@ -501,5 +966,15 @@ 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;
}
}
}
</script>
......@@ -3,6 +3,7 @@
<el-form ref="queryForm" size="small" :inline="true" >
<el-form-item label="行" prop="row">
<el-input
oninput="value=value.replace(/[^\d]/g,'')"
v-model="row"
placeholder="请输入开始行"
clearable
......@@ -10,6 +11,12 @@
maxlength="8"
/>
</el-form-item>
<!-- <el-form-item>
<el-checkbox v-model="zero">是否比较0或空</el-checkbox>
</el-form-item>-->
<el-form-item>
<el-checkbox v-model="numm">是否只比较数值</el-checkbox>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
......@@ -19,6 +26,7 @@
ref="upload"
:before-upload="handleFileChange"
action=''
accept='.xlsx'
:limit="1"
:file-list="fileList"
:show-file-list=false
......@@ -33,6 +41,7 @@
ref="upload"
:before-upload="handleFileChange1"
action=''
accept='.xlsx'
:limit="1"
:file-list="fileList"
:disabled="disableNextButton"
......@@ -48,27 +57,30 @@
icon="el-icon-upload2"
size="mini"
@click="handleExport"
v-hasPermi="['ruoyi-myexcel:myexcel:export']"
>导出</el-button>
</el-col>
<el-col :span="1.5">
<el-button icon="el-icon-refresh" size="mini" @click="addToMap">生成</el-button>
</el-col><el-col :span="1.5">
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button icon="el-icon-s-opportunity
" size="mini" @click="addToMap">生成</el-button>
</el-col>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery" class="right-float">重置</el-button>
</el-row>
<!-- luckysheet容器 -->
<div
id="luckysheet"
style="margin: 0px; padding: 0px; position: absolute; width: 100%;left: 0px; top: 120px; height: 1000px; z-index: 0"
style="margin: 0px; padding: 0px; position: absolute; width: 100%;left: 0px; top: 105px; height: 1000px; z-index: 0"
>
</div>
</div>
</template>
<style>
.right-float {
float: right;
}
</style>
<script>
/*import luckysheet from 'luckysheet'*/
......@@ -82,11 +94,13 @@ var fileName="新建XLSX工作表"; //定义表名
var data1;
var name1;
var map=new Map();
var maper=new Map();
export default {
name: "Mymodule",
data() {
return {
row:'',
row:1,
numm:false,
//弹出页面的表名
// 是否显示弹出层
fileList:[],
......@@ -120,10 +134,13 @@ export default {
//刷新下拉选框内容
fileName="新建XLSX工作表";
this.disableNextButton='';
this.row="";
this.row=1;
//刷新luckysheet表格
this.init();
map.clear();
maper.clear();
//this.zero=false;
this.numm=false;
},
/** Luckyexcel文档 */
init() {
......@@ -217,17 +234,19 @@ export default {
userInfo: exportJson.info.name.creator
})
data1=exportJson.sheets[0];
name1=exportJson.sheets[0].name;
let suffixArr = exportJson.info.name.split('.');
fileName = suffixArr[0];
this.row='';
}
)
},
/** 生成标签*/
addToMap(){
map.forEach((value,key)=>{
for(let i=0;i<value.length;i++){
let row=value[i][0],cell=value[i][1];
let row=value[i][0]-1,cell=this.stringTonum(value[i][1])-1;
//let row=value[i][0]-1,cell=value[i][1]-1;
let sd=luckysheet.getCellValue(row,cell,{type:"ps"});
if(sd===null){
luckysheet.setCellValue(row, cell, {bg: "#e85f5f"})
......@@ -241,6 +260,7 @@ export default {
"isshow": false //批注框为显示状态
}
})
maper.set("("+(row+1)+","+value[i][1]+")",1);
}else{
let sd=luckysheet.getCellValue(row,cell,{type:"ps"}).value;
luckysheet.setCellValue(row, cell, {
......@@ -253,13 +273,74 @@ export default {
"isshow": false //批注框为显示状态
}
})
maper.set("("+(row+1)+","+value[i][1]+")",maper.get("("+(row+1)+","+value[i][1]+")")+1);
}
}
})
/*let num=luckysheet.getSheet().data[0].length;
let data=luckysheet.getSheet().data;
for(let j=0;j<map.size;j++){
let cell;
for(let i=0;i<num;i++){
if(data[0][i]==null){
cell=i;
break;
}
}
let dfs=map.get(2);
let a=value.join("==");
luckysheet.setCellValue(j,cell,map);
luckysheet.setCellValue(j,cell+1 ,);
})
}*/
let row;
let num=luckysheet.getSheet().data[0].length;
let data=luckysheet.getSheet().data;
for(let i=0;i<num;i++){
if(data[i][0]==null){
row=i;
break;
}
}
row=row+1;
let k=0;
for (let [key,value] of map.entries()) {
let a="("+value.join("),(")+")";
luckysheet.setCellValue(row+k,0,key);
luckysheet.setCellValue(row+k,1 ,a);
k++
}
let froms = Array.from(maper);
froms.sort((a, b) => {
return b[1] - a[1];
});
for (let i=0;i<froms.length;i++){
luckysheet.setCellValue(row+k,0,froms[i][0]);
luckysheet.setCellValue(row+k,1 ,froms[i][1]);
k++;
}
/*let k=0;
map.forEach((value,key)=>{
let num=luckysheet.getSheet().data[0].length;
let data=luckysheet.getSheet().data;
let cell;
for(let i=0;i<num;i++){
if(data[0][i]==null){
cell=i;
break;
}
}
let a=value.join("==");
luckysheet.setCellValue(k,cell,key);
luckysheet.setCellValue(k,cell+1 ,a);
k++
})
*/
},
handleFileChange1(evt) {
if (this.row==="") {
......@@ -278,7 +359,6 @@ export default {
type: "warning"});
return
}
LuckyExcel.transformExcelToLucky(
evt,
(exportJson) =>{
......@@ -289,33 +369,61 @@ export default {
});
return
}
let ddd=data1;
let as=0;
let d1=window.luckysheet.transToData(ddd.celldata);
let d2=window.luckysheet.transToData(exportJson.sheets[0].celldata);
debugger
name1=exportJson.sheets[0].name;
let array=[];
let r=this.row-1;
try {
for(let i=r;i<d1.length;i++) {
for (let j = 0; j <=d1[0].length; j++) {
if(d1[i][j]==null){
break
//第一个表的单元格为null直接跳出
if(d1[i][j]==null ){
continue
}
//第二个表的单元格为null直接跳出
if(d2[i][j]==null ){
continue
}
//第一个表内数据为0 且 第二个表只有样式内部为空
if(d2[i][j].v==0 && d1[i][j].v==undefined ){
continue
}
if(d2[i][j]==null){
break
//第一个表内数据为0 且 第二个表只有样式内部为空
if( d1[i][j].v==0 && d2[i][j].v==undefined ){
continue
}
// 第一个表内数据为string型 且 第二个表只有样式内部为空
/*if((typeof(d1[i][j].v)=="string" && d2[i][j].v==undefined)){
continue
}*/
if((isNaN(d1[i][j].v) && d2[i][j].v==undefined)){
continue
}
if (d1[i][j].m==undefined && d2[i][j].m==undefined){
// 第二个表内数据为string型 且 第一个表只有样式内部为空
if(isNaN(d2[i][j].v)&& d1[i][j].v==undefined){
continue
}
// 没有选只比较数值 且 第一个表内数据为string型 且 第二个表内数据位string型
if(this.numm!=false &&(isNaN(d1[i][j].v)&&isNaN(d2[i][j].v))){
continue;
}
// 两个表的值都是0
if(d1[i][j].v==0 && d2[i][j].v==0 ){
continue
}
// 两个表都是只有样式没有数据
if(d1[i][j].v==undefined && d2[i][j].v==undefined ){
}else if (d1[i][j].m==undefined || d2[i][j].m==undefined){
}else if (d1[i][j].v==undefined || d2[i][j].v==undefined){
luckysheet.setCellValue(i, j, {bg: "#e85f5f"})
as++
array.push([i,j]);
let s = this.numToString(j+1);
array.push([i+1,s]);
//array.push([i+1,j+1]);
}else {
if (d1[i][j].m!= d2[i][j].m) {
if (d1[i][j].v!= d2[i][j].v) {
luckysheet.setCellValue(i, j, {bg: "#e85f5f"})
//查看是否有标签
/*luckysheet.setCellValue(i, j, {
......@@ -330,7 +438,9 @@ export default {
}
})*/
as++
array.push([i,j]);
let s = this.numToString(j+1);
array.push([i+1,s]);
//array.push([i+1,j+1]);
}
}
}
......@@ -359,8 +469,39 @@ export default {
/** 导出设置 */
handleExport: debounce(function() {
// 处理点击事件
exportExcel(luckysheet.getAllSheets(),fileName+"(对比后数据)")
exportExcel(luckysheet.getSheet(),fileName+"(对比后数据)")
}, 500), // 设置延迟时间,单位为毫秒
numToString(numm){
let char=[];
char.length = 0;
let numToStringAction = function(nnum){
let num = nnum - 1;
let a = parseInt(num / 26);
let b = num % 26;
char.push(String.fromCharCode(64 + parseInt(b+1)));
if(a>0){
numToStringAction(a);
}
}
numToStringAction(numm);
return char.reverse().join("");
},
stringTonum(a) {
var str = a.toLowerCase().split("");
var num = 0;
var al = str.length;
var getCharNumber = function (charx) {
return charx.charCodeAt() - 96;
};
var numout = 0;
var charnum = 0;
for (var i = 0; i < al; i++) {
charnum = getCharNumber(str[i]);
numout += charnum * Math.pow(26, al - i - 1);
}
;
return numout;
},
}
// 配置项111
};
......
<template>
<div class="app-container">
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-upload
type="file"
name="file"
ref="upload"
:before-upload="handleFileChange"
action=''
accept='.xlsx'
:limit="1"
:file-list="fileList"
:show-file-list=false
>
<el-button plain size="mini" icon="el-icon-download" type="primary" >导入初始文件</el-button>
</el-upload>
</el-col>
<el-col :span="1.5">
<el-upload
type="file"
name="file"
ref="upload"
:before-upload="handleFileChange1"
action=''
accept='.xlsx'
:limit="1"
:file-list="fileList"
:disabled="disableNextButton"
:show-file-list=false
>
<el-button plain size="mini" icon="el-icon-download" type="primary" :disabled="disableNextButton" >导入对比文件</el-button>
</el-upload>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-upload2"
size="mini"
@click="handleExport"
>导出</el-button>
<el-checkbox style="left: 15px" v-model="numm">是否只比较数值</el-checkbox>
</el-col>
<el-col :span="1.5">
</el-col>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery" class="right-float">重置</el-button>
</el-row>
<!-- luckysheet容器 -->
<div
id="luckysheet"
style="margin: 0px; padding: 0px; position: absolute; width: 100%;left: 0px; top: 60px; height: 1000px; z-index: 0"
>
</div>
</div>
</template>
<style>
.right-float {
float: right;
}
</style>
<script>
/*import luckysheet from 'luckysheet'*/
import LuckyExcel from 'luckyexcel'
//导入库export.js 这个文件是es6的,不能在普通的HTML文件直接引入js文件(虽然都是js文件,但是有区别,具体请百度es6与es5)!需要把es6转es5才可以直接引入使用!
import { exportExcel } from '../../../../public/exportExcel';
import {vueScript} from "@/utils/generator/html";
var fileName="新建XLSX工作表"; //定义表名
var data1;
var name1;
export default {
name: "Mymodule",
data() {
return {
numm:false,
//弹出页面的表名
// 是否显示弹出层
fileList:[],
disableNextButton: true,
// 查询参数
queryParams: {
status:0
},
};
},
created() {
},
mounted() {
this.init();
fileName="新建XLSX工作表";
},
methods:{
/** 回车事件和保存提交绑定 */
handleEnter(event) {
if (event.keyCode === 13) {
event.preventDefault(); // 阻止默认的回车事件
// 触发确定操作
this.handleFileChange1();
}
},
/** 重置按钮操作 */
resetQuery() {
//刷新下拉选框内容
fileName="新建XLSX工作表";
this.disableNextButton='';
//刷新luckysheet表格
this.init();
map.clear();
this.numm=false;
},
/** Luckyexcel文档 */
init() {
let options = {
container: 'luckysheet', //luckysheet为容器id
title:'',
lang:'zh',
showinfobar:false,
data:[
{
"name": "sheet1", //工作表名称
"color": "", //工作表颜色
"index": 0, //工作表索引
"status": 1, //激活状态
"order": 0, //工作表的下标
"hide": 0,//是否隐藏
"row": 50, //行数
"column": 50, //列数
"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);
},
/** 导入事件*/
handleFileChange(evt) {
this.disableNextButton=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,
(exportJson)=> {
if (exportJson.sheets === null || exportJson.sheets.length === 0) {
this.$message({
message: "导入失败,请检查上传的文件是否正确",
type: "warning"
});
return
}
luckysheet.destroy()
luckysheet.create({
container: 'luckysheet', //luckysheet is the container id
title: exportJson.info.name,
lang: 'zh', // 设定表格语言
showinfobar: false,
data: exportJson.sheets,
userInfo: exportJson.info.name.creator
})
data1=exportJson.sheets[0];
name1=exportJson.sheets[0].name;
let suffixArr = exportJson.info.name.split('.');
fileName = suffixArr[0];
}
)
},
handleFileChange1(evt) {
let name = evt.name
let suffixArr = name.split('.'),
suffix = suffixArr[suffixArr.length - 1];
name=suffixArr[0]
if (suffix !== 'xlsx') {
this.$message({
message: "上传格式不正确,请上传xlsx格式文件",
type: "warning"});
return
}
LuckyExcel.transformExcelToLucky(
evt,
(exportJson) =>{
if (exportJson.sheets === null || exportJson.sheets.length === 0) {
this.$message({
message: "导入失败,请检查上传的文件是否正确",
type: "warning"
});
return
}
let ddd=data1;
let as=0;
let d1=window.luckysheet.transToData(ddd.celldata);
let d2=window.luckysheet.transToData(exportJson.sheets[0].celldata);
try {
for(let i=0;i<d1.length;i++) {
for (let j = 0; j <=d1[0].length; j++) {
//第一个表的单元格为null直接跳出
if(d1[i][j]==null ){
continue
}
//第二个表的单元格为null直接跳出
if(d2[i][j]==null ){
continue
}
//第一个表内数据为0 且 第二个表只有样式内部为空
if(d2[i][j].v==0 && d1[i][j].v==undefined ){
continue
}
//第一个表内数据为0 且 第二个表只有样式内部为空
if( d1[i][j].v==0 && d2[i][j].v==undefined ){
continue
}
// 第一个表内数据为string型 且 第二个表只有样式内部为空
/*if((typeof(d1[i][j].v)=="string" && d2[i][j].v==undefined)){
continue
}*/
if((isNaN(d1[i][j].v) && d2[i][j].v==undefined)){
continue
}
// 第二个表内数据为string型 且 第一个表只有样式内部为空
if(isNaN(d2[i][j].v)&& d1[i][j].v==undefined){
continue
}
// 没有选只比较数值 且 第一个表内数据为string型 且 第二个表内数据位string型
if(this.numm!=false &&(isNaN(d1[i][j].v)&&isNaN(d2[i][j].v))){
continue;
}
// 两个表的值都是0
if(d1[i][j].v==0 && d2[i][j].v==0 ){
continue
}
if (d1[i][j].v==undefined && d2[i][j].v==undefined){
}else if (d1[i][j].v==undefined || d2[i][j].v==undefined){
luckysheet.setCellValue(i, j, {bg: "#e85f5f"})
luckysheet.setCellValue(i, j, {
ps: { //批注
"left": 92, //批注框左边距
"top": 10, //批注框上边距暖色
"width": 91, //批注框宽度
"height": 48, //批注框高度
"value": name1+"表有误", //批准内容
"isshow": false //批注框为显示状态
}
})
as++
}else {
if (d1[i][j].v!= d2[i][j].v) {
luckysheet.setCellValue(i, j, {bg: "#e85f5f"})
//查看是否有标签
luckysheet.setCellValue(i, j, {
ps: { //批注
"left": 92, //批注框左边距
"top": 10, //批注框上边距暖色
"width": 91, //批注框宽度
"height": 48, //批注框高度
"value": name1+"表有误", //批准内容
"isshow": false //批注框为显示状态
}
})
as++
}
}
}
}
if(as>0){
this.$message({
message: "导入完成,本次导入共发现"+as+"条不同数据",
type: "warning"});
}else{
this.$message({
message: "导入完成,本次导入未发现不同数据",
type: "success"});
}
}catch (err){
this.$message({
message: "导入失败,导入文件与对比文件有所不匹",
type: "error"});
}
}
)
},
/** 导出设置 */
handleExport: debounce(function() {
// 处理点击事件
exportExcel(luckysheet.getSheet(),fileName+"(对比后数据)")
}, 500), // 设置延迟时间,单位为毫秒
}
// 配置项111
};
// debounce函数定义
function debounce(func, delay) {
let timer;
return function () {
const context = this;
const args = arguments;
clearTimeout(timer);
timer = setTimeout(function () {
func.apply(context, args);
}, delay);
};
}
</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