Commit 1686861c authored by chengwenlong's avatar chengwenlong

工资系统提交

parent b6ed6281
...@@ -2,7 +2,12 @@ ...@@ -2,7 +2,12 @@
```bash ```bash
# 克隆项目 # 克隆项目
git clone https://gitee.com/y_project/RuoYi-Vue git clone http://192.168.111.222:3000/chengwenlong/kailuanUI.git
master是线上分支
dev是公用的分支
自己用自己的分支开发
合并将自己分支合并到dev:
基准分支是dev,对比分支就是自己的那个分支
# 进入项目目录 # 进入项目目录
cd ruoyi-ui cd ruoyi-ui
......
...@@ -14,6 +14,7 @@ const exportExcel = function (luckysheet, value, contrast, id) { ...@@ -14,6 +14,7 @@ const exportExcel = function (luckysheet, value, contrast, id) {
luckysheet = [luckysheet]; luckysheet = [luckysheet];
} }
luckysheet.forEach(function (table) { luckysheet.forEach(function (table) {
if (table.data.length === 0) { return true; } if (table.data.length === 0) { return true; }
// ws.getCell('B2').fill = fills. // ws.getCell('B2').fill = fills.
const worksheet = workbook.addWorksheet(table.name); const worksheet = workbook.addWorksheet(table.name);
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
import { setXRow } from "@/utils/tzc";
/**
* @function 单位名称转换
* @description 后台数据中的单位名称转换成汇总表中对应的单位名称
* @param name {string} 单位名称
* @param isGB {bool} 是否干部
* @return string
* @author cwl 2024年5月22日 15:22:03
*/
function getUnitName(name, isGB = false) {
var newName;
//洗煤厂特殊处理
switch (name) {
case "后勤服务一科":
newName = "(1)后勤服务一科";
break;
case "后勤服务二科":
newName = "(2)后勤服务二科";
break;
case "精神病院劳务":
newName = "(3)精神病院劳务";
break;
case "低热值煤炭":
newName = "(4)低热值煤炭";
break;
case "后勤办公室":
newName = "(5)后勤办公室";
break;
case "保卫科":
newName = "(1)保卫科(矿)";
break;
case "直属警察队":
newName = "(2)直属警察队(社区)";
break;
case "物资管理科":
newName="回收厂";
break;
case "煤类产品管理检测科":
newName="煤管科";
break;
default:
newName = name;
break;
}
if (name == "洗煤厂" && isGB) {
newName = "6.制造费洗煤";
} else if (name == "洗煤厂" && !isGB) {
newName = "4.基本生产洗煤";
} else if (isGB) {
newName += "--干部";
}
return newName;
}
/**
* @function 唐山矿工资数据处理
* @description
* @param jsonData 导入的数据
* @return 处理后的luckysheet的一维数组
* @author cwl 2024年5月22日 15:22:03
*/
export function machGzdata(list,jsonData) {
var CompositeTable = jsonData;
//后台返回数据
CompositeTable[0].data = luckysheet.transToData(CompositeTable[0].celldata);
var dList = setXRow(CompositeTable[0].data);//汇总表中单位集合包含行数
list.forEach((item) => {
let dName = item.dep;
let uNameGB = getUnitName(dName, true);
let uNameGR = getUnitName(dName);
//如果含有干部和工人数
if (item.worker=="0" && item.cadre=="0") {
var r = dList[uNameGR];
item.r = r;
item.v = item.value;
} else {
//干部人数
var newItem = {};
newItem.dep = uNameGB;
newItem.r = dList[uNameGB];
newItem.v = item.cadre;
newItem.c = item.c;
list.push(newItem);
//工人数
item.dep = uNameGR;
item.r = dList[uNameGR];
item.v = item.worker;
}
});
console.log("123", list);
// 对比 c 和 r 是否与 CompositeTable[0]["celldata"] 中相应对象相同
for (let k = 0; k < CompositeTable[0]["celldata"].length; k++) {
for (let i = 0; i < list.length; i++) {
if (
list[i].r == CompositeTable[0]["celldata"][k].r &&
list[i].c == CompositeTable[0]["celldata"][k].c
) {
// 如果相同,则进行替换
CompositeTable[0]["celldata"][k].v.v = list[i].v;
}
}
}
return CompositeTable;
}
// 工资汇总
import request from '@/utils/request'
// 新增
export function conversionSave(data) {
return request({
url: '/conversion/save',
method: 'post',
data: data
})
}
// 工资汇总列表
export function conversionGetWagesData(query) {
return request({ url: '/conversion/getWagesData', method: 'get', params: query })
}
// 修改
export function conversionUpdate(data) {
return request({ url: '/conversion/update', method: 'post', data })
}
export function getWagesDataById(id) {
return request({ url: `/conversion/getWagesDataById/${id}`, method: 'get' })
}
//唐山矿工资转换
export function surface(data) {
return request({
url: '/wages/calculate/surface',
method: 'post',
data: data
})
}
//获取最近的公式
export function getRecentFormulas(id) {
return request({ url: '/conversion/recentFormulas', method: 'get'})
}
...@@ -79,6 +79,14 @@ export function addInsertAccount1(data) { ...@@ -79,6 +79,14 @@ export function addInsertAccount1(data) {
data: data data: data
}) })
} }
//材料清洗
export function datahistoryContentCopy(data) {
return request({
url: '/act/read/data/historyContentCopy',
method: 'post',
data: data
})
}
//清洗通用凭证单 //清洗通用凭证单
export function addInsertAccount2(data) { export function addInsertAccount2(data) {
...@@ -121,3 +129,4 @@ export function selectExport(id) { ...@@ -121,3 +129,4 @@ export function selectExport(id) {
method: 'get' method: 'get'
}) })
} }
...@@ -33,7 +33,6 @@ export function DongMine(money, code, codess, CompositeTable, Department, classi ...@@ -33,7 +33,6 @@ export function DongMine(money, code, codess, CompositeTable, Department, classi
item.v.name = ''; item.v.name = '';
item.index = item.r item.index = item.r
}); });
for (let i = 0; i < money.length; i++) { for (let i = 0; i < money.length; i++) {
if (money[i].r == code[i].r) { if (money[i].r == code[i].r) {
money[i].code = code[i].v.v; money[i].code = code[i].v.v;
...@@ -68,7 +67,7 @@ export function DongMine(money, code, codess, CompositeTable, Department, classi ...@@ -68,7 +67,7 @@ export function DongMine(money, code, codess, CompositeTable, Department, classi
}); });
//东欢坨矿的规则 如果部门为旧品和设备 并且他们的材料为支护用品和大型材料就把他们放到基本生产里 //东欢坨矿的规则 如果部门为旧品和设备 并且他们的材料为支护用品和大型材料就把他们放到基本生产里
money.forEach((item) => { money.forEach((item) => {
if (item.remark == "旧品利用中心" || item.remark == "设备管理科") { if (item.remark.includes("旧品利用中心") || item.remark.includes("设备管理科")) {
if (item.cc == 3 || item.cc == 2) { if (item.cc == 3 || item.cc == 2) {
item.v.name = "基本生产-原煤"; item.v.name = "基本生产-原煤";
} }
...@@ -158,7 +157,7 @@ export function DongMine(money, code, codess, CompositeTable, Department, classi ...@@ -158,7 +157,7 @@ export function DongMine(money, code, codess, CompositeTable, Department, classi
cellMap.set(key, money[i]); cellMap.set(key, money[i]);
} }
} }
duplicateData = Array.from(cellMap.values()).filter(item => item.v.v > 0 || parseInt(item.v.m) > 0); duplicateData = Array.from(cellMap.values()).filter(item => Math.abs(item.v.v) > 0 || Math.abs(parseInt(item.v.m)) > 0);
duplicateData = duplicateData.map(item => { duplicateData = duplicateData.map(item => {
return { return {
...item, ...item,
...@@ -170,15 +169,38 @@ export function DongMine(money, code, codess, CompositeTable, Department, classi ...@@ -170,15 +169,38 @@ export function DongMine(money, code, codess, CompositeTable, Department, classi
}); });
// 替换原始数据中的重复单元格数据 // 替换原始数据中的重复单元格数据
//金额所在列和行,去模板表中查找,如果行列一致则替换 //金额所在列和行,去模板表中查找,如果行列一致则替换
for (let i = 0; i < duplicateData.length; i++) { // for (let i = 0; i < duplicateData.length; i++) {
// // 对比 c 和 r 是否与 CompositeTable[0]["celldata"] 中相应对象相同 // // // 对比 c 和 r 是否与 CompositeTable[0]["celldata"] 中相应对象相同
for (let k = 0; k < CompositeTable[0]["celldata"].length; k++) { // for (let k = 0; k < CompositeTable[0]["celldata"].length; k++) {
if (duplicateData[i].r === CompositeTable[0]["celldata"][k].r && duplicateData[i].c === CompositeTable[0]["celldata"][k].c) { // if (duplicateData[i].r === CompositeTable[0]["celldata"][k].r && duplicateData[i].c === CompositeTable[0]["celldata"][k].c) {
// 如果相同,则进行替换 // // 如果相同,则进行替换
CompositeTable[0]["celldata"][k] = duplicateData[i]; // CompositeTable[0]["celldata"][k] = duplicateData[i];
// }
// }
// }
duplicateData.forEach(item => {
const Fusion = {
"r": '',
"c": '',
"v": {
"ct": {
"fa": "@",
"t": "s"
},
"fs": 8,
"ff": "微软雅黑",
"tb": 2,
"v": "",
"qp": 1,
"m": ""
} }
} };
} Fusion.r=item.r
Fusion.c=item.c
Fusion.v.v=item.v.v
Fusion.v.m=item.v.v
CompositeTable[0]["celldata"].push(Fusion)
})
let duplicateDatas = { let duplicateDatas = {
duplicateData: duplicateData, duplicateData: duplicateData,
CompositeTable: CompositeTable CompositeTable: CompositeTable
......
export function Linxi(names, Department, money, code, duplicateData, CompositeTable, codess, classify, DepartmentColumns, codecolumn) { export function Linxi(names, Department, money, code, duplicateData, CompositeTable, codess, classify, DepartmentColumns, codecolumn) {
let results = ['加工修理'] let results = ['加工修理','6.制造费用固定资产修理','7.制造费用材料修理']
let insert = CompositeTable[0].celldata.filter(obj => obj.v.v == '5.其他业务成本')[0].r let insert = CompositeTable[0].celldata.filter(obj => obj.v.v == '5.其他业务成本')[0].r
for (let i = 0, k = 0; i < CompositeTable[0].celldata.length && k < results.length; i++) { for (let i = 0, k = 0; i < CompositeTable[0].celldata.length && k < results.length; i++) {
if (CompositeTable[0].celldata[i] && CompositeTable[0].celldata[i].r && CompositeTable[0].celldata[i].r >= insert + 2 && CompositeTable[0].celldata[i].r < insert + 4 && CompositeTable[0].celldata[i].c == 0) { if (CompositeTable[0].celldata[i] && CompositeTable[0].celldata[i].r && CompositeTable[0].celldata[i].r >= insert+1 && CompositeTable[0].celldata[i].r < insert+4 && CompositeTable[0].celldata[i].c == 0) {
CompositeTable[0].celldata[i].v.v = results[k]; CompositeTable[0].celldata[i].v.v = results[k];
CompositeTable[0].celldata[i].v.m = results[k]; CompositeTable[0].celldata[i].v.m = results[k];
k++; k++;
...@@ -20,7 +20,7 @@ export function Linxi(names, Department, money, code, duplicateData, CompositeTa ...@@ -20,7 +20,7 @@ export function Linxi(names, Department, money, code, duplicateData, CompositeTa
entry.index = entry.r entry.index = entry.r
}); });
// 合并数组 // 合并数组
let newobj = [...name1, ...code]; let newobj = [...name1, ...code];
// 匹配赋值 // 匹配赋值
money.forEach(m => { money.forEach(m => {
newobj.forEach(a => { newobj.forEach(a => {
...@@ -32,7 +32,6 @@ export function Linxi(names, Department, money, code, duplicateData, CompositeTa ...@@ -32,7 +32,6 @@ export function Linxi(names, Department, money, code, duplicateData, CompositeTa
} }
}); });
}); });
// 删除指定分类 // 删除指定分类
const filteredClassifications = ["研发费用", "基金", "安全费用"]; const filteredClassifications = ["研发费用", "基金", "安全费用"];
money = money.filter(item => !filteredClassifications.includes(item.classify)); money = money.filter(item => !filteredClassifications.includes(item.classify));
...@@ -45,14 +44,8 @@ export function Linxi(names, Department, money, code, duplicateData, CompositeTa ...@@ -45,14 +44,8 @@ export function Linxi(names, Department, money, code, duplicateData, CompositeTa
// 提取特定属性值相同的数据 // 提取特定属性值相同的数据
const Electromechanical = "机电制造分公司"; const Electromechanical = "机电制造分公司";
const filteredMoney = money.filter(item => { money = money.filter(item => item.remark !== Electromechanical);
if (item.remark === Electromechanical) { // // 对比替换导入表和模板的列数
money.splice(money.indexOf(item), 1);
return true;
}
return false;
});
// 对比替换导入表和模板的列数
codess.forEach(code => { codess.forEach(code => {
let codeLength = String(code.code).length; let codeLength = String(code.code).length;
money.forEach(m => { money.forEach(m => {
...@@ -153,9 +146,8 @@ export function Linxi(names, Department, money, code, duplicateData, CompositeTa ...@@ -153,9 +146,8 @@ export function Linxi(names, Department, money, code, duplicateData, CompositeTa
seen.set(key, obj); seen.set(key, obj);
} }
}); });
seen.forEach(obj => { seen.forEach(obj => {
if (obj.v.v > 0 || parseInt(obj.v.m) > 0) { if (Math.abs(obj.v.v) > 0 || Math.abs(parseInt(obj.v.m)) > 0) {
duplicateData.push(obj); duplicateData.push(obj);
} }
}); });
...@@ -168,6 +160,29 @@ export function Linxi(names, Department, money, code, duplicateData, CompositeTa ...@@ -168,6 +160,29 @@ export function Linxi(names, Department, money, code, duplicateData, CompositeTa
} }
}; };
}); });
duplicateData.forEach(item => {
const Fusion = {
"r": '',
"c": '',
"v": {
"ct": {
"fa": "@",
"t": "s"
},
"fs": 8,
"ff": "微软雅黑",
"tb": 2,
"v": "",
"qp": 1,
"m": ""
}
};
Fusion.r=item.r
Fusion.c=item.c
Fusion.v.v=item.v.v
Fusion.v.m=item.v.v
CompositeTable[0]["celldata"].push(Fusion)
})
//金额所在列和行,去模板表中查找,如果行列一致则替换 //金额所在列和行,去模板表中查找,如果行列一致则替换
for (let i = 0; i < duplicateData.length; i++) { for (let i = 0; i < duplicateData.length; i++) {
// // 对比 c 和 r 是否与 CompositeTable[0]["celldata"] 中相应对象相同 // // 对比 c 和 r 是否与 CompositeTable[0]["celldata"] 中相应对象相同
...@@ -182,6 +197,5 @@ export function Linxi(names, Department, money, code, duplicateData, CompositeTa ...@@ -182,6 +197,5 @@ export function Linxi(names, Department, money, code, duplicateData, CompositeTa
duplicateData:duplicateData, duplicateData:duplicateData,
CompositeTable:CompositeTable CompositeTable:CompositeTable
} }
return duplicateDatas return duplicateDatas
} }
\ No newline at end of file
This diff is collapsed.
export function Tangshan(money, c, name, CompositeTable, headRow, researchs) {
//money 总金额 c导入表所有数据,name 来源类别,CompositeTable 材料汇总表数据, headRow 数据行
let results = ['金属厂']
let insert = CompositeTable[0].celldata.filter(obj => obj.v.v == '7.代付单位(XXX单位)')[0].r
for (let i = 0, k = 0; i < CompositeTable[0].celldata.length && k < results.length; i++) {
if (CompositeTable[0].celldata[i] && CompositeTable[0].celldata[i].r && CompositeTable[0].celldata[i].r >= insert + 1 && CompositeTable[0].celldata[i].r < insert + 4 && CompositeTable[0].celldata[i].c == 0) {
CompositeTable[0].celldata[i].v.v = results[k];
CompositeTable[0].celldata[i].v.m = results[k];
k++;
}
}
// let insi = CompositeTable[0].celldata.filter(obj => obj.v.v == '6.研发支出')[0].r
// CompositeTable[0].celldata.forEach(item=>{
// if(item.r && item.r>insi){
// item.r=item.r+researchs.length
// }
// })
// for (let i = 0, k = 0; i < CompositeTable[0].celldata.length && k < researchs.length; i++) {
// if (CompositeTable[0].celldata[i] && CompositeTable[0].celldata[i].r && CompositeTable[0].celldata[i].r >= insi + 1 && CompositeTable[0].celldata[i].r < insert + 4 && CompositeTable[0].celldata[i].c == 0) {
// CompositeTable[0].celldata[i].v.v = researchs[k];
// CompositeTable[0].celldata[i].v.m = researchs[k];
// k++;
// }
// }
function findValueInArray(arr, value) {
for (let obj of arr) {
if (JSON.stringify(obj).includes(value)) {
return obj;
}
}
return null;
}
// money.forEach(obj => {
// researchs.forEach(item => {
// if (obj.r == item.r) {
// obj.research = item.v.v
// }
// })
// research.forEach(item => {
// if (obj.research == item.old) {
// if (item.new) {
// obj.research = item.new
// }
// }
// })
// })
let targetValue = "器材大类";
let resultObject = findValueInArray(c, targetValue);
let material = c.flat().filter(obj => obj.c && obj.c == resultObject.c && obj.r > headRow)
money.forEach(entry => {
entry.department = '';
entry.v.name = '';
entry.v.material = '';
entry.index = entry.r
});
// 匹配赋值
for (let i = 0; i < money.length; i++) {
if (money[i].r == name[i].r) {
money[i].v.name = name[i].v.v;
}
if (money[i].r == material[i].r) {
money[i].v.material = material[i].v.v;
}
}
// money = money.filter(obj => obj.v.name == "基本生产" || obj.v.name == "制造费用" || obj.v.name.includes('洗煤') || obj.v.name == "其他业务成本" || obj.v.name == "其他费用" || obj.v.name == "管理费用" || obj.v.name == "销售费用")
//对费用来源列和材料分类列进行处理
money.forEach(obj => {
if (!obj.v.material) {
obj.v.material = '其他材料'
}
if (obj.v.name == '基本生产' || obj.v.name == '制造费用') {
obj.v.name += '-原煤'
}
if (obj.v.name.includes('洗煤')) {
obj.v.name = '基本生产-洗煤'
}
if (obj.v.name == '其他业务成本') {
obj.v.name += '-厂区服务'
}
if (obj.v.name == '其他费用') {
obj.v.name = '代付单位(XXX单位)-金属厂'
}
// 如果不包含连字符,就在末尾添加一个连字符
if (obj.v.name.indexOf('-') === -1) {
obj.v.name += '-';
}
})
//材料分类列和汇总列数值一样的话,列数就一样
money.forEach(obj => {
CompositeTable[0].celldata.forEach(cell => {
if (obj.v.material == cell.v.v) {
obj.c = cell.c
}
})
})
money.forEach(item => {
if (item.v.name !== undefined) {
let index = item.v.name.indexOf("-");
if (index !== -1) {
let substrBeforeDash = item.v.name.slice(0, index);
let DepartColumns = CompositeTable[0]["celldata"].flat().filter(obj => {
if (obj.v && obj.v.v && typeof obj.v.v === 'string') {
return obj.v.v.includes(item.v.name.slice(0, index));
}
return false;
})[0];
if (DepartColumns && DepartColumns.r) {
let index = item.v.name.indexOf("-");
if (index !== -1) {
let substrAfterDash = item.v.name.slice(index + 1);
switch (substrAfterDash) {
case '':
item.r = DepartColumns.r;
break;
case '原煤':
item.r = DepartColumns.r + 1;
break;
case '洗煤':
item.r = DepartColumns.r + 2;
break;
case '选煤':
item.r = DepartColumns.r + 3;
break;
case '厂区服务':
item.r = DepartColumns.r + 1;
break;
case '加工修理':
item.r = DepartColumns.r + 4;
break;
case '金属厂':
item.r = DepartColumns.r + 1
default:
// 默认情况
}
}
}
}
}
});
// 同一个单元格,金额相加
let seen = new Map();
let duplicateData = []
money.forEach((obj) => {
let key = obj.r + ',' + obj.c;
if (seen.has(key)) {
let existingObj = seen.get(key);
existingObj.v.v = Number(existingObj.v.v) + Number(obj.v.v);
existingObj.v.m = existingObj.v.v.toString();
existingObj.index.push(obj.index);
} else {
obj.index = [obj.index];
seen.set(key, obj);
}
});
seen.forEach(obj => {
if (Math.abs(obj.v.v) > 0 || Math.abs(parseInt(obj.v.m)) > 0) {
duplicateData.push(obj);
}
});
duplicateData = duplicateData.map(item => {
return {
...item,
v: {
...item.v,
v: isNaN(item.v.v) ? item.v.v : Number(item.v.v).toFixed(2),
m: Number(item.v.m).toFixed(2)
}
};
});
duplicateData.forEach(item => {
const Fusion = {
"r": '',
"c": '',
"v": {
"ct": {
"fa": "@",
"t": "s"
},
"fs": 8,
"ff": "微软雅黑",
"tb": 2,
"v": "",
"qp": 1,
"m": ""
}
};
Fusion.r = item.r
Fusion.c = item.c
Fusion.v.v = item.v.v
Fusion.v.m = item.v.v
CompositeTable[0]["celldata"].push(Fusion)
})
let duplicateJSON = JSON.stringify(duplicateData)
duplicateJSON = JSON.parse(duplicateJSON)
duplicateJSON.forEach(item => {
if (item.r > 9) {
item.c = 10
}
})
let duplicateDatas = {
duplicateData: duplicateJSON,
CompositeTable: CompositeTable
}
return duplicateDatas
}
\ No newline at end of file
export function YunFei(money, Department, code, name, codess, newArrayhong) {
money.forEach(element => {
//对比编码之后的列数
element.coloumn = ''
//编码
element.code = ''
//类别名称
element.v.name = ''
//部门
element.v.Department = ''
element.row = ''
element.index = element.r
});
for (let i = 0; i < money.length; i++) {
//编码列
if (money[i].r == code[i].r) {
money[i].code = code[i].v.v;
}
//部门列
if (money[i].r == Department[i].r) {
money[i].v.Department = Department[i].v.v;
}
//来源分类列
if (money[i].r == name[i].r) {
money[i].v.name = name[i].v.v;
}
}
money = money.filter(obj => obj.v.name == '成本费用')
//如果部门里包含洗煤,就给他放到洗煤里
money.forEach((item) => {
if (item.v.Department.includes('洗煤')) {
item.v.Department = '洗煤厂'
}
});
codess.forEach(code => {
let codemin = String(code.codeMin).length;
money.forEach(m => {
let columnIdString = String(m.code);
let moneycode = columnIdString.substring(0, codemin);
if (moneycode <= String(code.codeMax) && moneycode>=String(code.codeMin)) {
m.coloumn = code.materialCodeType * 1;
}
});
});
money.forEach(obj => {
let matchedItems = newArrayhong[0]["celldata"].filter(item => item.v && item.v.v && item.v.v.includes(obj.v.Department));
if (matchedItems.length > 0) {
obj.row = matchedItems[matchedItems.length - 1].r;
} else {
obj.row = '';
}
});
for (let k = 0; k < money.length; k++) {
let columnIdString = String(money[k].code);
let Officeexpenses = columnIdString.substring(0, 4)
if (Officeexpenses == '6601' && money[k].row < 17) {
money[k].coloumn = 9
}
}
money.forEach((item) => {
item.c = item.coloumn ? item.coloumn * 1 : 10;
item.r = item.row ? item.row * 1 : ''
});
// 同一个单元格,金额相加
let seen = new Map();
let duplicateData = []
money.forEach((obj) => {
let key = obj.r + ',' + obj.c;
if (seen.has(key)) {
let existingObj = seen.get(key);
existingObj.v.v = Number(existingObj.v.v) + Number(obj.v.v);
existingObj.index.push(obj.index);
} else {
obj.index = [obj.index];
seen.set(key, obj);
}
});
seen.forEach(obj => {
if (Math.abs(obj.v.v) > 0 || Math.abs(parseInt(obj.v.m)) > 0) {
duplicateData.push(obj);
}
});
duplicateData = duplicateData.map(item => {
return {
...item,
v: {
...item.v,
v: isNaN(item.v.v) ? item.v.v : Number(item.v.v).toFixed(2),
m: Math.abs(isNaN(item.v.v) ? item.v.v : Number(item.v.v).toFixed(2)),
}
};
});
// console.log(duplicateData)
// duplicateData.forEach(item => {
// const Fusion = {
// "r": '',
// "c": '',
// "v": {
// "ct": {
// "fa": "@",
// "t": "s"
// },
// "fs": 8,
// "ff": "微软雅黑",
// "tb": 2,
// "v": "",
// "qp": 1,
// "m": ""
// }
// };
// Fusion.r=item.r
// Fusion.c=item.c
// Fusion.v.v=item.v.v
// Fusion.v.m=item.v.v
// newArrayhong[0]["celldata"].push(Fusion)
// })
// 替换原始数据中的重复单元格数据
//金额所在列和行,去模板表中查找,如果行列一致则替换
for (let i = 0; i < duplicateData.length; i++) {
// // 对比 c 和 r 是否与 newArrayhong[0]["celldata"] 中相应对象相同
for (let k = 0; k < newArrayhong[0]["celldata"].length; k++) {
if (duplicateData[i].r === newArrayhong[0]["celldata"][k].r && duplicateData[i].c === newArrayhong[0]["celldata"][k].c) {
// 如果相同,则进行替换
newArrayhong[0]["celldata"][k] = duplicateData[i];
}
}
}
let matchedItems = newArrayhong[0]["celldata"].filter(item => item.v && (typeof item.v.v === 'string' && item.v.v.includes('办公费用') || typeof item.v.m === 'string' && item.v.m.includes('办公费用')))[0].c;
let other = newArrayhong[0]["celldata"].filter(item => item.v && (typeof item.v.v === 'string' && item.v.v == '其他材料' || typeof item.v.m === 'string' && item.v.m == '其他材料'))[0].c;
let duplicateJSON = JSON.stringify(duplicateData)
duplicateJSON = JSON.parse(duplicateJSON)
duplicateJSON.forEach(obj => {
if (obj.c === matchedItems) {
obj.v.name = '管理费用-';
obj.c = other;
} else if (obj.v.Department === '洗煤厂') {
obj.v.name = '制造费用-选混煤';
obj.c=other
} else {
obj.v.name = '基本生产-原煤';
}
});
let duplicateDatas = {
duplicateData: duplicateJSON,
CompositeTable: newArrayhong
}
return duplicateDatas
}
\ No newline at end of file
import { cos } from "mathjs";
export function ZhongRun(Department, money, materianame, name, CompositeTable, quantity, model, Unitprice, code, units) {
money.forEach(element => {
//材料名称
element.materianame = ''
element.index = element.r
//部门
element.v.Department = ''
//数量
element.quantity = ''
//型号
element.model = ''
//单价
element.Unitprice = ''
element.code = ''
element.v.name = ''
element.units = ''
});
for (let i = 0; i < money.length; i++) {
//materianame 材料名称
if (money[i].r == materianame[i].r) {
money[i].materianame = materianame[i].v.v;
}
//部门列
if (money[i].r == Department[i].r) {
money[i].v.Department = Department[i].v.v;
}
//来源分类列
if (money[i].r == name[i].r) {
money[i].v.name = name[i].v.v;
}
if (money[i].r == quantity[i].r) {
money[i].quantity = quantity[i].v.v;
}
if (money[i].r == model[i].r) {
money[i].model = model[i].v.v;
}
if (money[i].r == Unitprice[i].r) {
money[i].Unitprice = Unitprice[i].v.v;
}
if (money[i].r == code[i].r) {
money[i].code = code[i].v.v;
}
if (money[i].r == units[i].r) {
money[i].units = units[i].v.v;
}
}
let moneys = JSON.stringify(money)
let Secondcoloumn = money.filter(item => item.v && item.v.Department == '净化分厂' && (item.materianame == '硫酸' || item.materianame == '洗油'))
const SecondHalf = CompositeTable[0].celldata.flat().filter(item => item.c && item.c > 12 && item.v.v)
const Secondrow = CompositeTable[0].celldata.flat().filter(item => item.r && item.r > 40 && item.v.v && item.c == 0)
money.forEach(item => {
SecondHalf.forEach(obj => {
if (obj.v.v == item.v.Department) {
item.r = obj.r
}
if (obj.v.v.includes(item.v.name)) {
item.c = obj.c
}
})
})
let seen = new Map()
let duplicateData = []
money.forEach((obj) => {
let key = obj.r + ',' + obj.c;
if (seen.has(key)) {
let existingObj = seen.get(key);
existingObj.v.v = Number(existingObj.v.v) + Number(obj.v.v);
existingObj.v.m = existingObj.v.v.toString();
existingObj.index.push(obj.index);
} else {
obj.index = [obj.index];
seen.set(key, obj);
}
});
seen.forEach(obj => {
if (Math.abs(obj.v.v) > 0 || parseInt(obj.v.m) > 0) {
duplicateData.push(obj);
}
});
duplicateData = duplicateData.map(item => {
return {
...item,
v: {
...item.v,
v: isNaN(item.v.v) ? item.v.v : Number(item.v.v).toFixed(2),
m: Number(item.v.m).toFixed(2)
}
};
});
for (let i = 0; i < duplicateData.length; i++) {
// // 对比 c 和 r 是否与 CompositeTable[0]["celldata"] 中相应对象相同
for (let k = 0; k < CompositeTable[0]["celldata"].length; k++) {
if (duplicateData[i].r === CompositeTable[0]["celldata"][k].r && duplicateData[i].c === CompositeTable[0]["celldata"][k].c) {
// 如果相同,则进行替换
CompositeTable[0]["celldata"][k] = duplicateData[i];
}
}
}
function mergeAndSum(data) {
// 创建一个空对象用于存储合并后的结果
let mergedData = {};
// 遍历原始数据数组
data.forEach(item => {
// 生成合并的键,即使用指定属性的值拼接起来作为键
let key = `${item.v.Department}-${item.v.name}-${item.materianame}-${item.model}-${item.Unitprice}`;
// 如果已经存在该键,则将 v.v 和 quantity 相加
if (mergedData[key]) {
mergedData[key].v.v = (parseFloat(mergedData[key].v.v) + parseFloat(item.v.v)).toFixed(2);
mergedData[key].quantity = parseInt(mergedData[key].quantity) + parseInt(item.quantity);
} else {
// 否则,将当前条目添加到 mergedData 中
mergedData[key] = {
...item,
v: { ...item.v }
};
}
});
// 将合并后的结果对象转换为数组并返回
return Object.values(mergedData);
}
// 调用函数进行合并并相加
let mergedData = mergeAndSum(JSON.parse(moneys));
// 输出结果
mergedData = mergedData.filter(obj => obj.materianame && obj.materianame == '液体氢氧化钠')
mergedData.forEach(item => {
item.index = true
})
Secondrow.forEach(item => {
let matched = false;
mergedData.forEach(obj => {
if (item.v.v === obj.v.Department && !matched && obj.index) {
obj.r = item.r;
matched = true;
obj.index = false
}
});
});
// 创建 Fusion 对象的函数
function createFusionObject(row, item, column) {
return {
"r": row,
"c": column,
"v": {
"ct": {
"fa": "@",
"t": "g/n"
},
"fs": 8,
"ff": "微软雅黑",
"tb": 2,
"v": item,
"qp": 1,
"m": item
}
};
}
// 遍历 mergedData,生成所有 Fusion 对象
const fusionList = mergedData.map(item => [
createFusionObject(item.r, item.code, 4),
createFusionObject(item.r, item.materianame, 5),
createFusionObject(item.r, item.model, 6),
createFusionObject(item.r, item.units, 7),
createFusionObject(item.r, item.quantity, 8),
createFusionObject(item.r, item.Unitprice, 9),
createFusionObject(item.r, item.v.v, 10)
]);
const celldata = CompositeTable[0]["celldata"]
// 将所有 Fusion 对象推送到 CompositeTable[0]["celldata"]
fusionList.forEach(fusionArray => {
fusionArray.forEach(fusion => celldata.push(fusion));
});
Secondcoloumn.forEach(item => {
if (item.materianame == '硫酸') {
item.materianame = '净化分厂硫酸'
}
if (item.materianame == '洗油') {
item.materianame = '净化分厂洗油'
}
})
Secondcoloumn.forEach(item => {
CompositeTable[0].celldata.forEach(obj => {
if (obj.v && obj.v.v && obj.v.v.includes(item.materianame)) {
item.r = obj.r
}
if (obj.v && obj.v.v && obj.v.v.includes(item.v.name)) {
item.c = obj.c
}
})
})
let seenS = new Map()
let duplicateDataS = []
Secondcoloumn.forEach((obj) => {
let key = obj.r + ',' + obj.c;
if (seenS.has(key)) {
let existingObj = seenS.get(key);
existingObj.v.v = Number(existingObj.v.v) + Number(obj.v.v);
existingObj.v.m = existingObj.v.v.toString();
existingObj.index.push(obj.index);
} else {
obj.index = [obj.index];
seenS.set(key, obj);
}
});
seenS.forEach(obj => {
if (Math.abs(obj.v.v) > 0 || parseInt(obj.v.m) > 0) {
duplicateDataS.push(obj);
}
});
duplicateDataS = duplicateDataS.map(item => {
return {
...item,
v: {
...item.v,
v: isNaN(item.v.v) ? item.v.v : Number(item.v.v).toFixed(2),
m: Number(item.v.m).toFixed(2)
}
};
});
for (let i = 0; i < duplicateDataS.length; i++) {
// // 对比 c 和 r 是否与 CompositeTable[0]["celldata"] 中相应对象相同
for (let k = 0; k < CompositeTable[0]["celldata"].length; k++) {
if (duplicateDataS[i].r === CompositeTable[0]["celldata"][k].r && duplicateDataS[i].c === CompositeTable[0]["celldata"][k].c) {
// 如果相同,则进行替换
CompositeTable[0]["celldata"][k] = duplicateDataS[i];
}
}
}
let duplicateDatas = {
duplicateData: duplicateData,
CompositeTable: CompositeTable
}
return duplicateDatas
}
\ No newline at end of file
This diff is collapsed.
...@@ -30,9 +30,8 @@ export function danMine(newArray,c,Department,money,code,classify,codess,name,he ...@@ -30,9 +30,8 @@ export function danMine(newArray,c,Department,money,code,classify,codess,name,he
return (matchingCode && matchingRemark && matchingFyly); return (matchingCode && matchingRemark && matchingFyly);
}); });
money.forEach((item) => { money.forEach((item) => {
if (item.Department.startsWith('物管科')) { if (item.Department.includes('物管科')) {
item.Department = '物管科'; item.Department = '物管科';
} }
if (item.Department.endsWith('储运科')) { if (item.Department.endsWith('储运科')) {
...@@ -107,7 +106,7 @@ export function danMine(newArray,c,Department,money,code,classify,codess,name,he ...@@ -107,7 +106,7 @@ export function danMine(newArray,c,Department,money,code,classify,codess,name,he
} }
} }
for (let obj of seen.values()) { for (let obj of seen.values()) {
if (obj.v.v > 0 || parseInt(obj.v.m) > 0) { if (Math.abs(obj.v.v) > 0 || Math.abs(parseInt(obj.v.m)) > 0) {
duplicateData.push(obj); duplicateData.push(obj);
} }
} }
......
...@@ -23,21 +23,29 @@ export function fanMine(money, codess, code, CompositeTable, name) { ...@@ -23,21 +23,29 @@ export function fanMine(money, codess, code, CompositeTable, name) {
money = money.filter(obj => obj.code); // 删除 m.code 为空的元素 money = money.filter(obj => obj.code); // 删除 m.code 为空的元素
//对比编码 //对比编码
codess.forEach(code => { codess.forEach(code => {
let codeLength = String(code.code).length; let codemin = String(code.codeMin).length;
money.forEach(m => { money.forEach(m => {
let columnIdString = String(m.code); let columnIdString = String(m.code);
let idToMatch = columnIdString.substring(0, codeLength); let moneycode = columnIdString.substring(0, codemin);
if (idToMatch === String(code.code).substring(0, codeLength)) { if (moneycode <= String(code.codeMax) && moneycode>=String(code.codeMin) && (m.v.name.includes('洗煤')? '02'==code.varietyOfCoal : '01'==code.varietyOfCoal )) {
m.coloumn = code.oneLevel * 1; m.coloumn = code.materialCodeType * 1;
} }
}); });
}); });
money.forEach(item => { money.forEach(item => {
// 检查v.name是否包含连字符 if ((item.code.startsWith('64') ||item.code.startsWith('65')) && item.v.name.includes('洗煤')) {
if (item.v.name.indexOf('-') === -1) { item.v.name = '制造费用-洗煤'
// 如果不包含连字符,就在末尾添加一个连字符
item.v.name += '-';
} }
})
money.forEach(item => {
let categories = item.v.name;
if (categories.includes('--') || categories.includes('-')) {
categories = categories.replace(/--/g, '-');
} else {
categories += '-';
}
item.v.name = categories;
return item;
}); });
money.forEach(item => { money.forEach(item => {
if (item.v.name !== undefined) { if (item.v.name !== undefined) {
...@@ -103,7 +111,7 @@ export function fanMine(money, codess, code, CompositeTable, name) { ...@@ -103,7 +111,7 @@ export function fanMine(money, codess, code, CompositeTable, name) {
}); });
seen.forEach(obj => { seen.forEach(obj => {
if (obj.v.v > 0 || parseInt(obj.v.m) > 0) { if (Math.abs(obj.v.v) > 0 || Math.abs(parseInt(obj.v.m)) > 0) {
duplicateData.push(obj); duplicateData.push(obj);
} }
}); });
...@@ -117,6 +125,7 @@ export function fanMine(money, codess, code, CompositeTable, name) { ...@@ -117,6 +125,7 @@ export function fanMine(money, codess, code, CompositeTable, name) {
} }
}; };
}); });
// 替换原始数据中的重复单元格数据 // 替换原始数据中的重复单元格数据
//金额所在列和行,去模板表中查找,如果行列一致则替换 //金额所在列和行,去模板表中查找,如果行列一致则替换
for (let i = 0; i < duplicateData.length; i++) { for (let i = 0; i < duplicateData.length; i++) {
...@@ -128,7 +137,7 @@ export function fanMine(money, codess, code, CompositeTable, name) { ...@@ -128,7 +137,7 @@ export function fanMine(money, codess, code, CompositeTable, name) {
} }
} }
} }
duplicateData=duplicateData.filter(obj=>obj.row!=='') duplicateData = duplicateData.filter(obj => obj.row !== '')
let duplicateDatas = { let duplicateDatas = {
duplicateData: duplicateData, duplicateData: duplicateData,
CompositeTable: CompositeTable CompositeTable: CompositeTable
......
...@@ -27,7 +27,7 @@ export function hongMine(money, Department, code, name, codess, newArrayhong) { ...@@ -27,7 +27,7 @@ export function hongMine(money, Department, code, name, codess, newArrayhong) {
money[i].v.name = name[i].v.v; money[i].v.name = name[i].v.v;
} }
} }
console.log(money)
money = money.filter(obj => obj.v.name == '成本费用') money = money.filter(obj => obj.v.name == '成本费用')
//如果部门里包含洗煤,就给他放到洗煤里 //如果部门里包含洗煤,就给他放到洗煤里
money.forEach((item) => { money.forEach((item) => {
...@@ -36,21 +36,16 @@ export function hongMine(money, Department, code, name, codess, newArrayhong) { ...@@ -36,21 +36,16 @@ export function hongMine(money, Department, code, name, codess, newArrayhong) {
} }
}); });
for (let i = 0; i < codess.length; i++) { codess.forEach(code => {
let codeLength = String(codess[i].code).length; let codemin = String(code.codeMin).length;
let codeToCompare = String(codess[i].code).substring(0, codeLength); money.forEach(m => {
for (let k = 0; k < money.length; k++) { let columnIdString = String(m.code);
let columnIdString = String(money[k].code); let moneycode = columnIdString.substring(0, codemin);
let idToMatch = columnIdString.substring(0, codeLength); if (moneycode <= String(code.codeMax) && moneycode>=String(code.codeMin)) {
if (idToMatch === codeToCompare) { m.coloumn = code.materialCodeType * 1;
if (codess[i].oneLevel == 9) {
codess[i].oneLevel = 10
}
money[k].coloumn = codess[i].oneLevel * 1
} }
} });
} });
money.forEach(obj => { money.forEach(obj => {
let matchedItems = newArrayhong[0]["celldata"].filter(item => item.v && item.v.v && item.v.v.includes(obj.v.Department)); let matchedItems = newArrayhong[0]["celldata"].filter(item => item.v && item.v.v && item.v.v.includes(obj.v.Department));
...@@ -80,7 +75,6 @@ export function hongMine(money, Department, code, name, codess, newArrayhong) { ...@@ -80,7 +75,6 @@ export function hongMine(money, Department, code, name, codess, newArrayhong) {
if (seen.has(key)) { if (seen.has(key)) {
let existingObj = seen.get(key); let existingObj = seen.get(key);
existingObj.v.v = Number(existingObj.v.v) + Number(obj.v.v); existingObj.v.v = Number(existingObj.v.v) + Number(obj.v.v);
existingObj.v.m = existingObj.v.v.toString();
existingObj.index.push(obj.index); existingObj.index.push(obj.index);
} else { } else {
obj.index = [obj.index]; obj.index = [obj.index];
...@@ -89,7 +83,7 @@ export function hongMine(money, Department, code, name, codess, newArrayhong) { ...@@ -89,7 +83,7 @@ export function hongMine(money, Department, code, name, codess, newArrayhong) {
}); });
seen.forEach(obj => { seen.forEach(obj => {
if (obj.v.v > 0 || parseInt(obj.v.m) > 0) { if (Math.abs(obj.v.v) > 0 || Math.abs(parseInt(obj.v.m)) > 0) {
duplicateData.push(obj); duplicateData.push(obj);
} }
}); });
...@@ -99,12 +93,36 @@ export function hongMine(money, Department, code, name, codess, newArrayhong) { ...@@ -99,12 +93,36 @@ export function hongMine(money, Department, code, name, codess, newArrayhong) {
v: { v: {
...item.v, ...item.v,
v: isNaN(item.v.v) ? item.v.v : Number(item.v.v).toFixed(2), v: isNaN(item.v.v) ? item.v.v : Number(item.v.v).toFixed(2),
m: Number(item.v.m).toFixed(2) m: Math.abs(isNaN(item.v.v) ? item.v.v : Number(item.v.v).toFixed(2)),
} }
}; };
}); });
// duplicateData.forEach(item => {
// const Fusion = {
// "r": '',
// "c": '',
// "v": {
// "ct": {
// "fa": "@",
// "t": "s"
// },
// "fs": 8,
// "ff": "微软雅黑",
// "tb": 2,
// "v": "",
// "qp": 1,
// "m": ""
// }
// };
// Fusion.r=item.r
// Fusion.c=item.c
// Fusion.v.v=item.v.v
// Fusion.v.m=item.v.v
// newArrayhong[0]["celldata"].push(Fusion)
// })
// 替换原始数据中的重复单元格数据 // 替换原始数据中的重复单元格数据
//金额所在列和行,去模板表中查找,如果行列一致则替换 // 金额所在列和行,去模板表中查找,如果行列一致则替换
for (let i = 0; i < duplicateData.length; i++) { for (let i = 0; i < duplicateData.length; i++) {
// // 对比 c 和 r 是否与 newArrayhong[0]["celldata"] 中相应对象相同 // // 对比 c 和 r 是否与 newArrayhong[0]["celldata"] 中相应对象相同
for (let k = 0; k < newArrayhong[0]["celldata"].length; k++) { for (let k = 0; k < newArrayhong[0]["celldata"].length; k++) {
......
export function lvMine(CompositeTable,cjson,codess) { export function lvMine(CompositeTable,cjson,codess,code) {
let results = ['10.安全费用', '11.研究费用', '12.维简及井巷费'] let results = ['10.安全费用', '11.研究费用', '12.维简及井巷费']
//先把安全费用 研发什么的插入到成本材料表中 //先把安全费用 研发什么的插入到成本材料表中
let insert=CompositeTable[0].celldata.filter(obj=>obj.v.v=='9.专项储备')[0].r let insert=CompositeTable[0].celldata.filter(obj=>obj.v.v=='9.专项储备')[0].r
...@@ -13,10 +13,12 @@ export function lvMine(CompositeTable,cjson,codess) { ...@@ -13,10 +13,12 @@ export function lvMine(CompositeTable,cjson,codess) {
// 使用 filter 方法筛选 r 值为 1 的对象,得到贷款信息 // 使用 filter 方法筛选 r 值为 1 的对象,得到贷款信息
const loan = c.filter(obj => obj.r === 1); const loan = c.filter(obj => obj.r === 1);
// 使用 filter 方法筛选 r 值为 0 的对象,得到表头信息 // 使用 filter 方法筛选 r 值为 0 的对象,得到表头信息
const head = c.filter(obj => obj.r === 0); let head = c.filter(obj => obj.r === 0);
// 找出空白列 // 找出空白列
const mincolumn = head.filter(obj => !obj.v.v); let mincolumn = head.filter(obj => !obj.v.v);
// 获取最大列 // 获取最大列
if(mincolumn.length!==0){
const maxcolumn = loan[loan.length - 1].c; const maxcolumn = loan[loan.length - 1].c;
// 遍历空白列,根据表头信息进行填充 // 遍历空白列,根据表头信息进行填充
for (let k = 0; k < mincolumn.length; k++) { for (let k = 0; k < mincolumn.length; k++) {
...@@ -37,6 +39,9 @@ export function lvMine(CompositeTable,cjson,codess) { ...@@ -37,6 +39,9 @@ export function lvMine(CompositeTable,cjson,codess) {
matchingCell.v.v = min.v.v; matchingCell.v.v = min.v.v;
} }
}); });
}else{
mincolumn=head.filter(item=>item.c>=12)
}
// 获取最小列 // 获取最小列
const min = mincolumn[0].c - 1; const min = mincolumn[0].c - 1;
// 使用 filter 方法筛选包含有效值的对象 // 使用 filter 方法筛选包含有效值的对象
...@@ -59,8 +64,8 @@ export function lvMine(CompositeTable,cjson,codess) { ...@@ -59,8 +64,8 @@ export function lvMine(CompositeTable,cjson,codess) {
obj.category = max.find(c => c.c === coulumn && c.r === 1)?.v.v; obj.category = max.find(c => c.c === coulumn && c.r === 1)?.v.v;
} }
}); });
// 输出整理后的表格数据 // // 输出整理后的表格数据
const code = max.filter(obj => obj.r >= 2 && obj.c == 2); // const code = max.filter(obj => obj.r >= 2 && obj.c == 0);
// 获取金额列 // 获取金额列
const moneycolumn = max.filter(obj => obj.r >= 2 && obj.c >= min); const moneycolumn = max.filter(obj => obj.r >= 2 && obj.c >= min);
moneycolumn.forEach(money => { moneycolumn.forEach(money => {
...@@ -69,18 +74,9 @@ export function lvMine(CompositeTable,cjson,codess) { ...@@ -69,18 +74,9 @@ export function lvMine(CompositeTable,cjson,codess) {
money.code = matchingCode.v.v; money.code = matchingCode.v.v;
} }
}); });
const money = moneycolumn.filter(obj => (obj.category.includes('单价') || obj.category.includes('数量')));
// 计算总金额 // 计算总金额
const moneys=money.filter(obj=>obj.category=='出库单价') const moneys=moneycolumn.filter(obj=>obj.category=='出库金额')
moneys.forEach(item=>{
item.v.quantity=money.filter(obj=>obj.r==item.r&&obj.c==item.c-1)[0].v.v
if(item.v.v && item.v.quantity){
item.v.v=item.v.v*item.v.quantity
item.v.m=item.v.v
}else{
this.$message.error('请仔细检查所导入表');
}
})
// 对 部门分类 进行处理 // 对 部门分类 进行处理
moneys.forEach(item => { moneys.forEach(item => {
let categories = item.v.name; let categories = item.v.name;
...@@ -94,6 +90,7 @@ export function lvMine(CompositeTable,cjson,codess) { ...@@ -94,6 +90,7 @@ export function lvMine(CompositeTable,cjson,codess) {
}); });
moneys.forEach(item => { moneys.forEach(item => {
item.index = item.r item.index = item.r
item.coloumn=item.c
if (item.v.name !== undefined) { if (item.v.name !== undefined) {
let index = item.v.name.indexOf("-"); let index = item.v.name.indexOf("-");
if (index !== -1) { if (index !== -1) {
...@@ -133,30 +130,32 @@ export function lvMine(CompositeTable,cjson,codess) { ...@@ -133,30 +130,32 @@ export function lvMine(CompositeTable,cjson,codess) {
} }
} }
}); });
codess.forEach(codeItem => { codess.forEach(code => {
let codeLength = String(codeItem.code).length; let codemin = String(code.codeMin).length;
let codeToCompare = String(codeItem.code).substring(0, codeLength); moneys.forEach(m => {
let matchingItem = moneys.find(duplicateItem => String(duplicateItem.code).startsWith(codeToCompare)); let columnIdString = String(m.code);
if (matchingItem) { let moneycode = columnIdString.substring(0, codemin);
matchingItem.cc = codeItem.oneLevel * 1; if (moneycode <= String(code.codeMax) && moneycode>=String(code.codeMin) &&( m.v.name.includes('洗煤')? '02'==code.varietyOfCoal : '01'==code.varietyOfCoal) ) {
} m.cc = code.materialCodeType * 1;
}
});
}); });
moneys.forEach((item) => { moneys.forEach((item) => {
item.c = item.cc ? item.cc * 1 : 10; item.c = item.cc ? item.cc * 1 : 10;
if(item.r>8){ if(item.r>8 ||item.code.startsWith('1521')){
item.c=10 item.c=10
} }
}); });
//同一个单元格的数据 金额相加。 // 同一个单元格的数据 金额相加。
let duplicateData = []; let duplicateData = [];
let seen = new Map(); let seen = new Map();
// 根据行列信息合并重复数据并记录索引 // // 根据行列信息合并重复数据并记录索引
for (let obj of moneys) { for (let obj of moneys) {
let key = obj.r + ',' + obj.c; let key = obj.r + ',' + obj.c;
if (seen.has(key)) { if (seen.has(key)) {
let existingObj = seen.get(key); let existingObj = seen.get(key);
existingObj.v.v += obj.v.v; existingObj.v.v = parseFloat(existingObj.v.v) + parseFloat(obj.v.v);
existingObj.v.m = (parseInt(existingObj.v.m) + parseInt(obj.v.m)).toString(); existingObj.v.m = (parseInt(existingObj.v.v) + parseInt(obj.v.v)).toString();
existingObj.index.push(obj.index); existingObj.index.push(obj.index);
} else { } else {
obj.index = [obj.index]; obj.index = [obj.index];
...@@ -165,7 +164,7 @@ export function lvMine(CompositeTable,cjson,codess) { ...@@ -165,7 +164,7 @@ export function lvMine(CompositeTable,cjson,codess) {
} }
// 将合并后的数据放入 duplicateData 数组 // 将合并后的数据放入 duplicateData 数组
for (let obj of seen.values()) { for (let obj of seen.values()) {
if (obj.v.v > 0 || parseInt(obj.v.m) > 0) { if (Math.abs(obj.v.v) > 0 || Math.abs(parseInt(obj.v.m)) > 0) {
duplicateData.push(obj); duplicateData.push(obj);
} }
} }
...@@ -178,6 +177,7 @@ export function lvMine(CompositeTable,cjson,codess) { ...@@ -178,6 +177,7 @@ export function lvMine(CompositeTable,cjson,codess) {
} }
}; };
}); });
duplicateData=duplicateData.filter(item=> !item.v.name.includes('贸易部'))
// 替换金额所在列和行相同的模板表中的数据 // 替换金额所在列和行相同的模板表中的数据
//金额所在列和行,去模板表中查找,如果行列一致则替换 //金额所在列和行,去模板表中查找,如果行列一致则替换
for (let i = 0; i < duplicateData.length; i++) { for (let i = 0; i < duplicateData.length; i++) {
......
This diff is collapsed.
<script> <script>
export default { export default {
created() { created() {
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<el-select v-model="selectedOption" ref="mySelect" size="mini" @change="handleOptionChange($event, { <el-select v-model="selectedOption" ref="mySelect" size="mini" @change="handleOptionChange($event, {
name: '东欢坨矿', name: '东欢坨矿',
id: '010102' id: '010102'
}, '010102')" filterable }, '010102','1257')" filterable
placeholder="请选择您要查看的模板"> placeholder="请选择您要查看的模板">
<el-option v-for="item in depss" :key="item.id" :label="item.templateName" :value="item.id" <el-option v-for="item in depss" :key="item.id" :label="item.templateName" :value="item.id"
:disabled="item.disabled"> :disabled="item.disabled">
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<el-select v-model="selectedOption" ref="mySelect" size="mini" @change="handleOptionChange($event, { <el-select v-model="selectedOption" ref="mySelect" size="mini" @change="handleOptionChange($event, {
name: '林西矿', name: '林西矿',
id: '011704' id: '011704'
}, '011704')" filterable placeholder="请选择您要查看的模板"> }, '011704','1257')" filterable placeholder="请选择您要查看的模板">
<el-option v-for="item in depss" :key="item.id" :label="item.templateName" :value="item.id" <el-option v-for="item in depss" :key="item.id" :label="item.templateName" :value="item.id"
:disabled="item.disabled"> :disabled="item.disabled">
</el-option> </el-option>
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<el-select v-model="selectedOption" ref="mySelect" size="mini" @change="handleOptionChange($event, { <el-select v-model="selectedOption" ref="mySelect" size="mini" @change="handleOptionChange($event, {
name: '吕矿', name: '吕矿',
id: '011702' id: '011702'
},'011702')" filterable },'011702','1257')" filterable
placeholder="请选择您要查看的模板"> placeholder="请选择您要查看的模板">
<el-option v-for="item in depss" :key="item.id" :label="item.templateName" :value="item.id" <el-option v-for="item in depss" :key="item.id" :label="item.templateName" :value="item.id"
:disabled="item.disabled"> :disabled="item.disabled">
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<el-select v-model="selectedOption" ref="mySelect" size="mini" @change="handleOptionChange($event, { <el-select v-model="selectedOption" ref="mySelect" size="mini" @change="handleOptionChange($event, {
name: '钱家营', name: '钱家营',
id: '010105' id: '010105'
}, '010105')" filterable }, '010105','1257')" filterable
placeholder="请选择您要查看的模板"> placeholder="请选择您要查看的模板">
<el-option v-for="item in depss" :key="item.id" :label="item.templateName" :value="item.id" <el-option v-for="item in depss" :key="item.id" :label="item.templateName" :value="item.id"
:disabled="item.disabled"> :disabled="item.disabled">
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<el-select v-model="selectedOption" ref="mySelect" size="mini" @change="handleOptionChange($event, { <el-select v-model="selectedOption" ref="mySelect" size="mini" @change="handleOptionChange($event, {
name: '唐山矿', name: '唐山矿',
id: '010101' id: '010101'
}, '010101')" filterable placeholder="请选择您要查看的模板"> }, '010101', '1257')" filterable placeholder="请选择您要查看的模板">
<el-option v-for="item in depss" :key="item.id" :label="item.templateName" :value="item.id" <el-option v-for="item in depss" :key="item.id" :label="item.templateName" :value="item.id"
:disabled="item.disabled"> :disabled="item.disabled">
</el-option> </el-option>
...@@ -31,8 +31,8 @@ ...@@ -31,8 +31,8 @@
<el-button type="warning" plain icon="el-icon-upload2" size="mini" @click="handleExport">导出</el-button> <el-button type="warning" plain icon="el-icon-upload2" size="mini" @click="handleExport">导出</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-upload type="file" name="file" ref="upload" :before-upload="handleFileChange" action='' accept='.xlsx' <el-upload type="file" name="file" ref="upload" :before-upload="handleFileChange" action=''
:limit="1" :file-list="fileList" :disabled="disableNextButton" :show-file-list=false> 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 plain size="mini" icon="el-icon-download" type="primary" :disabled="disableNextButton"
@click="rulesdate">导入</el-button> @click="rulesdate">导入</el-button>
</el-upload> </el-upload>
...@@ -40,8 +40,10 @@ ...@@ -40,8 +40,10 @@
</el-col> </el-col>
</el-row> </el-row>
<!-- luckysheet容器 --> <!-- luckysheet容器 -->
<div id="luckysheet" style="margin: 0px; padding: 0px; position: absolute; width: 100%; height:80vh; z-index: 0"> <div id="luckysheet"
style="margin: 0px; padding: 0px; position: absolute; width: 100%; height:80vh; z-index: 0">
</div> </div>
<div v-if="showMask" class="mask"> <div v-if="showMask" class="mask">
<div class="loading-spinner"></div> <div class="loading-spinner"></div>
......
<template>
<div class="app-container">
<el-form ref="queryForm" size="small" :inline="true" label-width="68px">
<el-form-item label="模板" prop="name">
<el-select v-model="selectedOption" ref="mySelect" size="mini" @change="handleOptionChange($event, {
name: '云飞',
id: '011504'
}, '011504','1268')" filterable placeholder="请选择您要查看的模板">
<el-option v-for="item in depss" :key="item.id" :label="item.templateName" :value="item.id"
:disabled="item.disabled">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="清洗规则" prop="roleid">
<el-select v-model="selectedRule" ref="mySelect" size="mini" @change="handleRuleChange" filterable
placeholder="请选择您要查看的规则">
<el-option v-for="iem in luckyrule" :key="iem.id" :label="iem.roleName" :value="iem.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="时间" prop="date">
<el-date-picker @change="handledateChange" v-model="date" type="month" placeholder="选择月">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-upload2" size="mini" @click="handleExport">导出</el-button>
</el-col>
<el-col :span="1.5">
<el-upload type="file" name="file" ref="upload" :before-upload="handleFileChange" 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"
@click="rulesdate">导入</el-button>
</el-upload>
<el-button :plain="true" style="display: none;" @click="open4">错误</el-button>
</el-col>
</el-row>
<!-- luckysheet容器 -->
<div id="luckysheet" style="margin: 0px; padding: 0px; position: absolute; width: 100%; height:80vh; z-index: 0">
</div>
<div v-if="showMask" class="mask">
<div class="loading-spinner"></div>
</div>
</div>
</template>
<script src="@/conversion/conversion"></script>
<style scoped src="./actsuppMine.css"></style>
<template>
<div class="app-container">
<el-form ref="queryForm" size="small" :inline="true" label-width="68px">
<el-form-item label="模板" prop="name">
<el-select v-model="selectedOption" ref="mySelect" size="mini" @change="handleOptionChange($event, {
name: '中润',
id: '011706',
}, '011706','1269')" filterable
placeholder="请选择您要查看的模板">
<el-option v-for="item in depss" :key="item.id" :label="item.templateName" :value="item.id"
:disabled="item.disabled">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="清洗规则" prop="roleid">
<el-select v-model="selectedRule" ref="mySelect" size="mini" @change="handleRuleChange" filterable
placeholder="请选择您要查看的规则">
<el-option v-for="iem in luckyrule" :key="iem.id" :label="iem.roleName" :value="iem.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="时间" prop="date">
<el-date-picker @change="handledateChange" v-model="date" type="month" placeholder="选择月">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-upload2" size="mini" @click="handleExport">导出</el-button>
</el-col>
<el-col :span="1.5">
<el-upload type="file" name="file" ref="upload" :before-upload="handleFileChange" 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"
@click="rulesdate">导入</el-button>
</el-upload>
<el-button :plain="true" style="display: none;" @click="open4">错误</el-button>
</el-col>
</el-row>
<!-- luckysheet容器 -->
<div id="luckysheet" style="margin: 0px; padding: 0px; position: absolute; width: 100%; height:80vh; z-index: 0">
</div>
<div v-if="showMask" class="mask">
<div class="loading-spinner"></div>
</div>
</div>
</template>
<script src="@/conversion/conversion"></script>
<style scoped src="./actsuppMine.css"></style>
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<el-select v-model="selectedOption" ref="mySelect" size="mini" @change="handleOptionChange($event, { <el-select v-model="selectedOption" ref="mySelect" size="mini" @change="handleOptionChange($event, {
name: '范矿', name: '范矿',
id: '011701' id: '011701'
}, '011701')" filterable }, '011701','1257')" filterable
placeholder="请选择您要查看的模板"> placeholder="请选择您要查看的模板">
<el-option v-for="item in depss" :key="item.id" :label="item.templateName" :value="item.id" <el-option v-for="item in depss" :key="item.id" :label="item.templateName" :value="item.id"
:disabled="item.disabled"> :disabled="item.disabled">
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<el-select v-model="selectedOption" ref="mySelect" size="mini" @change="handleOptionChange($event, { <el-select v-model="selectedOption" ref="mySelect" size="mini" @change="handleOptionChange($event, {
name: '宏丰', name: '宏丰',
id: '011502' id: '011502'
}, '011502')" filterable placeholder="请选择您要查看的模板"> }, '011502','1268')" filterable placeholder="请选择您要查看的模板">
<el-option v-for="item in depss" :key="item.id" :label="item.templateName" :value="item.id" <el-option v-for="item in depss" :key="item.id" :label="item.templateName" :value="item.id"
:disabled="item.disabled"> :disabled="item.disabled">
</el-option> </el-option>
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<el-select v-model="selectedOption" ref="mySelect" size="mini" @change="handleOptionChange($event, { <el-select v-model="selectedOption" ref="mySelect" size="mini" @change="handleOptionChange($event, {
name: '单侯煤矿', name: '单侯煤矿',
id: '011204' id: '011204'
}, '011204')" filterable placeholder="请选择您要查看的模板"> }, '011204','1264')" filterable placeholder="请选择您要查看的模板">
<el-option v-for="item in depss" :key="item.id" :label="item.templateName" :value="item.id" <el-option v-for="item in depss" :key="item.id" :label="item.templateName" :value="item.id"
:disabled="item.disabled"> :disabled="item.disabled">
</el-option> </el-option>
......
<template>
<div class="app-container">
<el-form ref="queryForm" size="small" :inline="true" label-width="68px">
<el-form-item label="模板" prop="name">
<el-select v-model="selectedOption" ref="mySelect" size="mini" filterable placeholder="请选择您要查看的模板"
@change="handleOptionChange">
<el-option v-for="item in depss" :key="item.id" :label="item.templateName" :value="item.id"
:disabled="item.disabled">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="时间" prop="wageMonth">
<el-date-picker v-model="wageMonth" value-format="yyyy-MM" type="month" placeholder="选择月">
</el-date-picker>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-upload2" size="mini" @click="handleExport">导出</el-button>
</el-col>
<el-col :span="1.5">
<el-upload type="file" name="file" ref="upload" :headers="{ 'Content-Type': 'multipart/form-data' }"
:before-upload="handleFileChange" action='' accept='.xlsx' :limit="3" multiple :file-list="fileList"
:show-file-list="false" :on-success="handleSuccess">
<el-button plain :disabled="!wageMonth || !jsondata" size="mini" icon="el-icon-download" type="primary">导入</el-button> </el-upload>
<el-button :plain="true" style="display: none;" @click="open4">错误</el-button>
</el-col>
</el-row>
<el-dialog title="取数规则" :visible.sync="dialogTableVisible" :close-on-click-modal="false" :show-close="false">
<el-form label-width="120px">
<el-form-item v-for="(item, index) in jsonhead" :key="index" :label="`${item.label}`">
<el-input v-model="item.value"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="initData()">确 定</el-button>
</span>
</el-dialog>
<!-- luckysheet容器 -->
<div id="luckysheet"
style="margin: 0px; padding: 0px; position: absolute; width: 100%; height:80vh; z-index: 0">
</div>
<div v-if="showMask" class="mask">
<div class="loading-spinner"></div>
</div>
</div>
</template>
<script src="@/Wages/convers"></script>
<style scoped src="./Wages.css"></style>
.mask {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
}
.loading-spinner {
/* 添加你的加载动画样式 */
width: 40px;
height: 40px;
border-radius: 50%;
border: 4px solid #f3f3f3;
border-top: 4px solid #3498db;
animation: spin 1s linear infinite;
}
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
\ No newline at end of file
...@@ -33,9 +33,10 @@ ...@@ -33,9 +33,10 @@
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
<el-table v-loading="loading" :data="historydataList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="historydataList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="75" align="center" />
<el-table-column label="序号" align="center" prop="id" /> <el-table-column label="序号" align="center" prop="id" />
<el-table-column label="模板" align="center" prop="templateName" /> <el-table-column label="模板" align="center" prop="templateName" />
<el-table-column label="所属矿" align="center" prop="mining" />
<el-table-column label="标题" align="center" prop="historyName" /> <el-table-column label="标题" align="center" prop="historyName" />
<el-table-column label="导入导出" align="center" prop="identifyingCode"> <el-table-column label="导入导出" align="center" prop="identifyingCode">
<template slot-scope="scope"> <template slot-scope="scope">
...@@ -131,6 +132,19 @@ export default { ...@@ -131,6 +132,19 @@ export default {
name: '钱家营矿', name: '钱家营矿',
id: '010105' id: '010105'
}, },
{
name: '宏丰',
id: '011502'
},
{
name: '云飞',
id: '011504'
},
{
name: '中润',
id: '011706'
},
], ],
positionValue: 'static', positionValue: 'static',
newArray: '', newArray: '',
...@@ -192,13 +206,13 @@ export default { ...@@ -192,13 +206,13 @@ export default {
getList() { getList() {
this.loading = true; this.loading = true;
listHistorydata(this.queryParams).then(response => { listHistorydata(this.queryParams).then(response => {
response.rows.forEach(item=>{
item.mining= this.miningValue.filter(obj => obj.id ==item.mining)[0].name
})
this.historydataList = response.rows; this.historydataList = response.rows;
this.total = response.total; this.total = response.total;
this.loading = false; this.loading = false;
}); });
}, },
// 取消按钮 // 取消按钮
...@@ -283,7 +297,6 @@ export default { ...@@ -283,7 +297,6 @@ export default {
this.form = response.data; this.form = response.data;
this.open = true; this.open = true;
this.title = "修改历史数据"; this.title = "修改历史数据";
this.positionValue = 'absolute'; this.positionValue = 'absolute';
luckysheet.destroy(); luckysheet.destroy();
luckysheet.create({ luckysheet.create({
...@@ -299,7 +312,6 @@ export default { ...@@ -299,7 +312,6 @@ export default {
functionButton: '<button id="exportButton" class="btn btn-primary" style=" padding:3px 6px; font-size: 16px;width: 100px;height: 27px; margin-right: 85px;" onclick="handleReturnButtonClick()">返回</button>', functionButton: '<button id="exportButton" class="btn btn-primary" style=" padding:3px 6px; font-size: 16px;width: 100px;height: 27px; margin-right: 85px;" onclick="handleReturnButtonClick()">返回</button>',
}); });
} catch (error) { } catch (error) {
console.error(error);
} }
}, },
/**详情返回按钮 */ /**详情返回按钮 */
......
<template>
<!-- 页面 工资汇总调研-->
<div class="app-container">
<el-form ref="queryForm" size="small" :inline="true" label-width="68px">
<el-form-item label="模板" prop="name">
<el-select v-model="form.template"
ref="mySelect" size="mini"
filterable placeholder="请选择您要查看的模板"
@change="changeTemplate">
<el-option v-for="item in templateList" :key="item.id" :label="item.templateName" :value="item.id" :disabled="item.disabled">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="时间" prop="wageMonth">
<el-date-picker v-model="form.wageMonth" value-format="yyyy-MM" type="month" placeholder="选择月"></el-date-picker>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-upload2" size="mini" @click="handleExport">导出</el-button>
</el-col>
<el-col :span="1.5">
<el-upload type="file" name="file" ref="upload" :headers="{ 'Content-Type': 'multipart/form-data' }"
:before-upload="handleFileChange" action='' accept='.xlsx' :limit="3" multiple
:show-file-list="false" >
<el-button plain size="mini" icon="el-icon-download" type="primary">导入</el-button>
</el-upload>
</el-col>
</el-row>
<!-- luckysheet容器 -->
<div id="luckysheet" style="margin: 0px; padding: 0px; position: absolute; width: 100%; height:80vh; z-index: 0">
</div>
</div>
</template>
<style></style>
<script>
import { listSuppliesTemplate } from "@/api/ruoyi-myLuckyexcel/myluckyexcel"
import { exportExcel } from "../../../../../public/exportExcel"
import LuckyExcel from "luckyexcel"
import { transitionJson, transitionJson1 } from "@/utils/tzc"
export default {
name: "salarySummary",
data () {
return {
form:{
template:'',
wageMonth:'',
},
templateList:[],
file:null
}
},
mounted () {
// 获取模版列表
listSuppliesTemplate({ status: 0, }).then((response) => {
response.rows.forEach((row) => {
if (row.templateName.includes("六矿")) {
row.disabled = true;
}
});
this.templateList = response.rows;
});
let options = {
container: "luckysheet", //luckysheet为容器id
lang: "zh",
data: [
{
name: "sheet1", //工作表名称
index: 0, //工作表索引
status: 1, //激活状态
celldata: [], //初始化使用的单元格数据
},
],
};
luckysheet.create(options);
},
methods: {
handleSuccess(evt){
console.log(evt,'Success')
},
// 导入
handleFileChange(evt) {
let self = this
this.file = evt;
LuckyExcel.transformExcelToLucky(self.file, (lucksheetfile) => {
setTimeout(()=>{
luckysheet.create({
container: 'luckysheet', // luckysheet is the container id
data:lucksheetfile.sheets,
title:lucksheetfile.info.name,
userInfo:lucksheetfile.info.name.creator
});
})
// let obj = {}
// let setting = {
// '本月手工分配工资表': {
// startRow:2
// }
// }
// lucksheetfile.sheets[2]
// lucksheetfile.sheets.map(el => {
// let data = luckysheet.transToData(el.celldata)
// obj[el.name] = transitionJson1(data,setting[el.name])
// })
let data = luckysheet.transToData(lucksheetfile.sheets[1].celldata)
console.log(lucksheetfile.sheets[1].celldata)
console.log(data)
console.log(transitionJson1(data))
// let newObj = {}
// Object.keys(obj).forEach(key => {
// obj[key].forEach(el => {
// if(!newObj[key]){
// newObj[key] = {}
// }
// newObj[key][el['单位名称']] = el
// })
// })
// console.log(newObj)
});
// LuckyExcel.transformExcelToLucky(evt,
// function(exportJson, luckysheetfile){
// console.log(exportJson)
// console.log(luckysheetfile)
// },
// function(error){
// // handle error if any thrown
// })
//前台加载数据
},
// 导出
handleExport: debounce(function () {
// handleExport
exportExcel(luckysheet.getAllSheets(), '新建XLSX工作表');
}, 500),
// 切换模版
changeTemplate(){},
}
}
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>
<template>
<div class="app-container" :class="{'app-container1':views.luckysheet}" v-loading="views.loading">
<template v-if="!views.luckysheet">
<el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px" @submit.native.prevent>
<el-form-item label="标题" prop="historyName">
<el-input
v-model="queryParams.historyName" placeholder="请输入标题" clearable size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-table :data="historydataList" v-loading="views.loading">
<el-table-column label="id" prop="id" width="200"/>
<el-table-column label="创建时间" prop="createTime"/>
<el-table-column label="操作时间" prop="updateTime"/>
<el-table-column label="年月" prop="yearMonth"/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="200px">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleDetails(scope.row,'look')">查看
</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleDetails(scope.row,'edit')">修改
</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="queryParams.total > 0" :total="queryParams.total" :page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</template>
<template v-else>
<el-row :gutter="10" class="mb8" >
<el-col :span="24" style="display: flex;justify-content: end;">
<el-button type="primary" size="mini" @click="handleReturnButtonClick">返回</el-button>
<el-button type="primary" size="mini" @click="handleExport">导出</el-button>
<el-button
type="primary" :disabled="views.saveLoading" :loading="views.saveLoading"
v-if="views.type === 'edit'"
size="mini" @click="save"
>保存
</el-button>
<el-button
type="primary" size="mini"
v-if="views.type === 'look'"
@click="btnGenerateCertificate"
>生凭证
</el-button>
</el-col>
</el-row>
<div id="luckysheet" ></div>
</template>
</div>
</template>
<style>
.app-container1 {
position: absolute;
width: 100%;
height: 100%;
}
#luckysheet {
height: 100%;
}
</style>
<script>
import { exportExcel } from "../../../../../public/exportExcel"
import { debounce } from '@/utils'
import { conversionGetWagesData, conversionUpdate, getWagesDataById } from "@/api/conversion"
import { transformJson, tzcCreateData ,gettransformJson} from "@/utils/tzc"
import { getSuppliesTemplate } from "@/api/ruoyi-myLuckyexcel/myluckyexcel"
export default {
name: "Historydata",
data () {
return {
// 查询参数
queryParams: {
total: 0,
pageNum: 1,
pageSize: 10,
historyName: null,
},
views: {
//编辑还是查看 look 查看
type: 'look',
//列表还是表格
luckysheet: false,
// 编辑保存loading
saveLoading: false,
loading: false,
},
// 表格列表
historydataList: [],
// 点击查看详情当前行的数据
currentRow: {},
// 当前行的详情
jsonData:{}
}
},
mounted () {
this.getList()
},
methods: {
btnGenerateCertificate() {
this.$prompt("请输入用友系统的用户名", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
inputPattern: /^(?:\+?86)?1[3-9]\d{9}$/,
inputErrorMessage: "手机号格式不正确",
})
.then(({ value }) => {
this.voucherForms(value);
})
},
// 调取生成凭证接口
async voucherForms(value){
this.views.type = 'PZ'
this.views.loading = true;
// 获取模版
let template = await getSuppliesTemplate(1248)
let optionsData = JSON.parse(template.rows[0].templateContent);
// 获取数据
let objks = await gettransformJson(luckysheet.getAllSheets())
this.views.loading = false;
//value 手机号
//this.currentRow.yearMonth 年月
// 构建新的数据 luckysheet.create.data数据
let createData = tzcCreateData(optionsData[0],transformJson(objks.data),luckysheet,value,this.currentRow.yearMonth)
luckysheet.create({
container: "luckysheet", // Luckysheet 的容器元素 ID
title: '凭证', // Excel 文件名
allowEdit: false, //作用:是否允许前台编辑
data:createData, // Excel 数据
showinfobar: false, //是否显示顶部名称栏
lang: "zh",
})
},
// 修改保存
save () {
let vm = this
if (!this.views.saveLoading) {
this.views.saveLoading = true
let data = {
id: vm.currentRow.id,
jsonData: JSON.stringify(luckysheet.getAllSheets())
}
conversionUpdate(data)
.then(() => {
vm.views.saveLoading = false
})
.catch(() => {
vm.views.saveLoading = false
})
}
},
// 导出
handleExport: debounce(function () {
console.log(1111)
exportExcel(luckysheet.getAllSheets(), '导出')
}, 500),
// 返回
handleReturnButtonClick () {
let vm = this
if(this.views.type === 'PZ'){
vm.views.type = 'look'
luckysheet.destroy({})
luckysheet.create({
forceCalculation: true,
showinfobar: false,//是否显示顶部信息栏
lang: "zh",//语言
container: "luckysheet",// 设定DOM容器的id
title: vm.currentRow.historyName,// 设定表格名称
data: JSON.parse(vm.jsonData),
})
return;
}
this.currentRow = {}
luckysheet.destroy()
this.views.luckysheet = false
this.views.loading = false
},
// 重置
resetQuery () {
this.resetForm("queryForm")
this.handleQuery()
},
// 查看修改
async handleDetails (row, type) {
let vm = this;
this.views.type = type
this.views.luckysheet = true
this.currentRow = row
this.views.loading = true
getWagesDataById(row.id).then(res => {
this.views.loading = false
vm.jsonData = res.jsonData || res.data.jsonData;
luckysheet.destroy({})
luckysheet.create({
forceCalculation: true,
showinfobar: false,//是否显示顶部信息栏
lang: "zh",//语言
container: "luckysheet",// 设定DOM容器的id
title: row.historyName,// 设定表格名称
data: JSON.parse(vm.jsonData),
hook: {
// 初始化表格
workbookCreateAfter: function (operate) {
console.info('workbookCreateAfter', operate)
},
// 表格更新
updated: function (operate) {
console.info('updated', operate)
},
},
})
})
},
// 列表查询
async getList () {
this.views.loading = true
let asyncConversionGetWagesData = await conversionGetWagesData(this.queryParams)
this.views.loading = false
this.historydataList = asyncConversionGetWagesData?.rows || 0
this.queryParams.total = asyncConversionGetWagesData?.total || 0
},
handleQuery () {
this.queryParams.pageNum = 1
this.getList()
},
}
}
</script>
...@@ -173,7 +173,9 @@ ...@@ -173,7 +173,9 @@
<el-form-item label="物料名称所在列" prop="cleanIng" class="form-item-inline" v-if="optionid === 6"> <el-form-item label="物料名称所在列" prop="cleanIng" class="form-item-inline" v-if="optionid === 6">
<el-input-number size="medium" v-model="cleanIng.NameColumn" :min="1" :step="1">1</el-input-number> <el-input-number size="medium" v-model="cleanIng.NameColumn" :min="1" :step="1">1</el-input-number>
</el-form-item> </el-form-item>
<el-form-item label="总额所在列" prop="moneycoloums" class="form-item-inline" v-if="optionid === 6">
<el-input-number size="medium" v-model="cleanIng.moneycoloums" :min="1" :step="1">1</el-input-number>
</el-form-item>
<el-form-item label="模板表列坐标" prop="detailML" class="form-item-inline" v-else> <el-form-item label="模板表列坐标" prop="detailML" class="form-item-inline" v-else>
<el-input-number size="medium" v-model="detailML[index - 1]" :min="1" :step="1">1</el-input-number> <el-input-number size="medium" v-model="detailML[index - 1]" :min="1" :step="1">1</el-input-number>
</el-form-item> </el-form-item>
...@@ -356,6 +358,7 @@ export default { ...@@ -356,6 +358,7 @@ export default {
detailYH: [], detailYH: [],
detailYL: [], detailYL: [],
cleanIng: { cleanIng: {
moneycoloums:'',
HeaderRow: '', HeaderRow: '',
NameColumn: '', NameColumn: '',
CodeColumn: '', CodeColumn: '',
...@@ -444,6 +447,7 @@ export default { ...@@ -444,6 +447,7 @@ export default {
this.detailYL = [] this.detailYL = []
this.instea = 0 this.instea = 0
this.cleanIng = { this.cleanIng = {
moneycoloums:'',
HeaderRow: '', HeaderRow: '',
NameColumn: '', NameColumn: '',
CodeColumn: '', CodeColumn: '',
......
...@@ -33,9 +33,10 @@ module.exports = { ...@@ -33,9 +33,10 @@ module.exports = {
proxy: { proxy: {
// detail: https://cli.vuejs.org/config/#devserver-proxy // detail: https://cli.vuejs.org/config/#devserver-proxy
[process.env.VUE_APP_BASE_API]: { [process.env.VUE_APP_BASE_API]: {
target: `http://localhost:8080`, target: `http://192.168.0.61:8080`,
// target: `http://192.168.0.99:8080`,
// target: `http://localhost:5001`, // target: `http://localhost:5001`,
// target: `http://192.168.111.228:8080`, //target: `http://192.168.111.226:8080`,
changeOrigin: true, changeOrigin: true,
pathRewrite: { pathRewrite: {
......
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