Commit a4fb04dd authored by 刘_震's avatar 刘_震

根据编码找到对应的一级,二级分类名称以及前端代码

parent 528ea3fb
## 开发1 ## 开发
```bash ```bash
# 克隆项目 # 克隆项目
......
...@@ -5,8 +5,14 @@ import { ...@@ -5,8 +5,14 @@ import {
listMyluckyexcel, listMyluckyexcel,
getyy, getyy,
} from "@/api/ruoyi-myLuckyexcel/myluckyexcel"; } from "@/api/ruoyi-myLuckyexcel/myluckyexcel";
import { transformJson, tzcCreateData, gettransformJson } from "@/utils/tzc"
import { conversionSave, surface, getRecentFormulas } from "@/api/conversion/index"; import {
conversionSave,
surface,
getRecentFormulas,
importLxWagesExcel,
lxSummary
} from "@/api/conversion/index";
// import luckysheet from 'luckysheet' // import luckysheet from 'luckysheet'
import LuckyExcel from "luckyexcel"; import LuckyExcel from "luckyexcel";
//导入库export.js 这个文件是es6的,不能在普通的HTML文件直接引入js文件(虽然都是js文件,但是有区别,具体请百度es6与es5)!需要把es6转es5才可以直接引入使用! //导入库export.js 这个文件是es6的,不能在普通的HTML文件直接引入js文件(虽然都是js文件,但是有区别,具体请百度es6与es5)!需要把es6转es5才可以直接引入使用!
...@@ -17,13 +23,17 @@ import { TableColumn } from "element-ui"; ...@@ -17,13 +23,17 @@ import { TableColumn } from "element-ui";
import { watch } from "vue"; import { watch } from "vue";
import { machGzdata } from "@/Wages/conversTsk.js"; import { machGzdata } from "@/Wages/conversTsk.js";
import { machLxGzdata } from "@/Wages/conversLxk.js";
import { data } from "jquery"; import { data } from "jquery";
import { transformJson, tzcCreateData, newGettransformJson } from "@/utils/tzc"
// import { config } from "vue/types/umd"; // import { config } from "vue/types/umd";
var fileName = "新建XLSX工作表"; //定义表名 var fileName = "新建XLSX工作表"; //定义表名
var rule = []; var rule = [];
var tempId; var tempId;
var uuid1; var uuid1;
var modify = false; var modify = false;
var that;
export default { export default {
name: "Mymodule", name: "Mymodule",
data() { data() {
...@@ -41,18 +51,20 @@ export default { ...@@ -41,18 +51,20 @@ export default {
luckysheetDatas: "", luckysheetDatas: "",
depss: [], depss: [],
fileList: [], fileList: [],
VoucherForm: '', VoucherForm: "",
dialogTableVisible: false, dialogTableVisible: false,
all: '', all: "",
jsonhead: [], jsonhead: [],
sum: [], sum: [],
// 查询参数 // 查询参数
queryParams: { queryParams: {
status: 0, status: 0,
}, },
mineId:'',//矿ID
}; };
}, },
created() { created() {
that=this;
//刷新页面时进行的操作 //刷新页面时进行的操作
this.getList(); this.getList();
}, },
...@@ -156,7 +168,6 @@ export default { ...@@ -156,7 +168,6 @@ export default {
//工资数据后台导入成功后,数据展示到前台 //工资数据后台导入成功后,数据展示到前台
loadTableData(evt) { loadTableData(evt) {
this.sum.push(evt); this.sum.push(evt);
if (modify) { if (modify) {
this.$confirm( this.$confirm(
"再次导入将会清空表内数据,是否继续操作?", "再次导入将会清空表内数据,是否继续操作?",
...@@ -189,8 +200,8 @@ export default { ...@@ -189,8 +200,8 @@ export default {
modify = false; modify = false;
this.open(this.sum); this.open(this.sum);
}) })
.then(async () => { }) .then(async () => {})
.catch(() => { }); .catch(() => {});
}) })
.catch(() => { .catch(() => {
// 用户点击了取消按钮 // 用户点击了取消按钮
...@@ -205,7 +216,7 @@ export default { ...@@ -205,7 +216,7 @@ export default {
LuckyExcel(evt, (exportJson) => { LuckyExcel(evt, (exportJson) => {
//获取导入表格所有数据exportJson //获取导入表格所有数据exportJson
this.open(exportJson) this.open(exportJson)
.then(async () => { }) .then(async () => {})
.catch((error) => { .catch((error) => {
this.$message({ this.$message({
message: error.message, message: error.message,
...@@ -221,8 +232,25 @@ export default { ...@@ -221,8 +232,25 @@ export default {
}, },
async handleFileChange(evt) { async handleFileChange(evt) {
if (this.value.includes('凭证')) { if (this.value.includes("凭证")) {
this.loadTableData(evt) this.loadTableData(evt);
} else if (this.value.includes("林西")) {
//组装后台接口数据
var param = new FormData();
param.append("file", evt);
param.append("date", this.wageMonth);
param.append("mineId", this.mineId);
param.append("identification", "0");
//林西矿工资基础数据导入
importLxWagesExcel(param).then((res) => {
//导入成功
if (res.code == 200) {
this.loadTableData(evt);
} else {
this.$message.error("后台数据导入失败!");
}
});
} else { } else {
//组装后台接口数据 //组装后台接口数据
var param = new FormData(); var param = new FormData();
...@@ -240,10 +268,17 @@ export default { ...@@ -240,10 +268,17 @@ export default {
} }
//前台加载数据 //前台加载数据
}, },
handleOptionChange(value) { handleOptionChange(value,mine_id) {
that.mineId=mine_id.id
let lod = this.$loading({
lock: true,
text: "加载中",
background: "rgba(0, 0, 0, 0.7)",
});
//根据选中的下拉选项值获取相应的信息 //根据选中的下拉选项值获取相应的信息
getSuppliesTemplate(this.selectedOption) getSuppliesTemplate(this.selectedOption)
.then((response) => { .then((response) => {
lod.close();
modify = false; modify = false;
tempId = this.selectedOption; tempId = this.selectedOption;
uuid1 = this.uuid = uuidv4().substring(0, 8); uuid1 = this.uuid = uuidv4().substring(0, 8);
...@@ -252,8 +287,6 @@ export default { ...@@ -252,8 +287,6 @@ export default {
var json_data = JSON.parse(sysSupplies[0].templateContent); var json_data = JSON.parse(sysSupplies[0].templateContent);
this.jsondata = json_data; this.jsondata = json_data;
roleList(value).then((response) => { roleList(value).then((response) => {
this.luckyrule = response.rows; this.luckyrule = response.rows;
}); });
...@@ -271,40 +304,60 @@ export default { ...@@ -271,40 +304,60 @@ export default {
status: "1", //激活状态 status: "1", //激活状态
}); });
this.value = fileName; this.value = fileName;
if (!fileName.includes('凭证')) {
let head = this.jsondata[0].celldata.filter(item => item.r && item.r == 2 && item.c > 0)
head.forEach(item => { if (!fileName.includes("凭证")) {
var excel_r=0;//读取行
var excel_c=0;//读取起始列
if (fileName.includes("唐山")) {
excel_r=2;
} else if(fileName.includes("林西")){
excel_r=3;
}
let head = this.jsondata[0].celldata.filter(
(item) => item.r && item.r == excel_r && item.c > excel_c
);
this.jsonhead=[];
head.forEach((item) => {
let funct = { let funct = {
label: item.v.v + '=', label: item.v.v + "=",
c: item.c, c: item.c,
value: '' value: "",
} };
this.jsonhead.push(funct) this.jsonhead.push(funct);
}); });
//获取最新的公式 //获取最新的公式
getRecentFormulas().then((response) => { getRecentFormulas(that.mineId).then((response) => {
if (response.code == 200) { if (response.code == 200) {
var data = response.data; var data = response.data;
if (data) { if (data) {
var json = JSON.parse(data); var json = JSON.parse(data);
json.forEach(item => { json.forEach((item) => {
if (item.value) { if (item.value) {
this.jsonhead.forEach(head => { this.jsonhead.forEach(
if (item.label == head.label) { (head) => {
head.value = item.value; if (
item.label ==
head.label
) {
head.value =
item.value;
} }
}); }
);
} }
}); });
} }
} }
}); });
} }
}) })
.catch(() => { .catch(() => {
lod.close();
// 处理错误逻辑,这里是一个空的错误处理函数 // 处理错误逻辑,这里是一个空的错误处理函数
this.$message.error("查询失败,发生未知错误!"); this.$message.error("查询失败,发生未知错误!");
}); });
...@@ -312,31 +365,70 @@ export default { ...@@ -312,31 +365,70 @@ export default {
initData() { initData() {
try { try {
// 将 this.jsonhead 转换为 JSON 字符串 // 将 this.jsonhead 转换为 JSON 字符串
const postData = this.jsonhead.filter(item => item.value.trim() != ''); const postData = this.jsonhead.filter(
var jsonString = JSON.stringify(this.jsonhead); (item) => item.value.trim() != ""
);
// 使用 localStorage 存储 // 使用 localStorage 存储
//localStorage.setItem('myData', jsonString); //localStorage.setItem('myData', jsonString);
this.dialogTableVisible = false this.dialogTableVisible = false;
const CompositeTable = this.jsondata; const CompositeTable = this.jsondata;
var putJson = { var putJson = {
date: this.wageMonth, date: this.wageMonth,
data: postData data: postData,
};
//林西矿
if (this.selectedOption == 1280) {
//林西矿工资汇总
lxSummary(putJson).then((response) => {
if (response.code == 200) {
var data = response.data;
let myCompositeTable = machLxGzdata(
data,
CompositeTable
);
this.setLuckysheetData(CompositeTable,myCompositeTable);
} else {
} }
});
} else {
//唐山工资汇总
surface(putJson).then((response) => { surface(putJson).then((response) => {
if (response.code == 200) { if (response.code == 200) {
var data = response.data; var data = response.data;
let myCompositeTable = machGzdata(data, CompositeTable); let myCompositeTable = machGzdata(
data,
CompositeTable
);
this.setLuckysheetData(CompositeTable,myCompositeTable);
} else {
}
});
}
} catch {
this.open4();
modify = true;
this.showMask = false;
}
},
//工资数据后台汇总完后,回显到前台
setLuckysheetData(CompositeTable,myCompositeTable){
CompositeTable[0].data = luckysheet.transToData( CompositeTable[0].data = luckysheet.transToData(
myCompositeTable[0].celldata myCompositeTable[0].celldata
); );
CompositeTable[0].calcChain = []; CompositeTable[0].calcChain = [];
let as = CompositeTable[0].celldata.filter((item) => item.v.f); let as = CompositeTable[0].celldata.filter(
(item) => item.v.f
);
as.forEach((item) => { as.forEach((item) => {
let sum = { let sum = {
index: CompositeTable[0].index, index: CompositeTable[0].index,
...@@ -355,37 +447,20 @@ export default { ...@@ -355,37 +447,20 @@ export default {
showinfobar: false, showinfobar: false,
lang: "zh", lang: "zh",
}); });
var jsonString = JSON.stringify(this.jsonhead);
} else {
}
});
let obj = { let obj = {
yearMonth: this.wageMonth, yearMonth: this.wageMonth,
jsonData: JSON.stringify(CompositeTable), jsonData: JSON.stringify(CompositeTable),
value: jsonString value: jsonString,
mineId:that.mineId
}; };
modify = true; modify = true;
this.showMask = false; that.showMask = false;
conversionSave(obj).then((response) => { }); conversionSave(obj).then((response) => {});
} catch {
this.open4();
modify = true;
this.showMask = false;
}
}, },
//转换方法 //转换方法
zhuan() { zhuan() {
const promises = this.sum.map((item) => { const promises = this.sum.map((item) => {
...@@ -404,8 +479,8 @@ export default { ...@@ -404,8 +479,8 @@ export default {
if (this.value.includes("凭证")) { if (this.value.includes("凭证")) {
this.VoucherForms(sum); this.VoucherForms(sum);
} else { } else {
this.all = sum this.all = sum;
this.dialogTableVisible = true this.dialogTableVisible = true;
} }
}); });
// .catch(error => { // .catch(error => {
...@@ -413,11 +488,21 @@ export default { ...@@ -413,11 +488,21 @@ export default {
// // 处理错误情况 // // 处理错误情况
// }); // });
}, },
//公式窗口关闭回调
handleClose(){
that.dialogTableVisible = false;
that.showMask=false;
},
async VoucherForms(sum) { async VoucherForms(sum) {
// try { // try {
let objks = await gettransformJson(sum) let objks = await newGettransformJson(sum,that.mineId)
let createData = tzcCreateData(this.luckysheetDatas[0], transformJson(objks.data), luckysheet, this.phone, this.wageMonth) let createData = tzcCreateData(
this.luckysheetDatas[0],
transformJson(objks.data),
luckysheet,
this.phone,
this.wageMonth
);
luckysheet.create({ luckysheet.create({
container: "luckysheet", // Luckysheet 的容器元素 ID container: "luckysheet", // Luckysheet 的容器元素 ID
...@@ -426,7 +511,7 @@ export default { ...@@ -426,7 +511,7 @@ export default {
data: createData, // Excel 数据 data: createData, // Excel 数据
showinfobar: false, //是否显示顶部名称栏 showinfobar: false, //是否显示顶部名称栏
lang: "zh", lang: "zh",
}) });
modify = true; modify = true;
this.showMask = false; this.showMask = false;
...@@ -444,7 +529,6 @@ export default { ...@@ -444,7 +529,6 @@ export default {
}, },
}; };
// debounce函数定义 // debounce函数定义
function debounce(func, delay) { function debounce(func, delay) {
let timer; let timer;
...@@ -457,4 +541,3 @@ function debounce(func, delay) { ...@@ -457,4 +541,3 @@ function debounce(func, delay) {
}, delay); }, delay);
}; };
} }
// 工资汇总 // 工资汇总
import request from '@/utils/request' import request from "@/utils/request";
// 新增 // 新增
export function conversionSave(data) { export function conversionSave(data) {
return request({ return request({
url: '/conversion/save', url: "/conversion/save",
method: 'post', method: "post",
data: data data: data,
}) });
} }
// 工资汇总列表 // 工资汇总列表
export function conversionGetWagesData(query) { export function conversionGetWagesData(query) {
return request({ url: '/conversion/getWagesData', method: 'get', params: query }) return request({
url: "/conversion/getWagesData",
method: "post",
data: query,
});
} }
// 修改 // 修改
export function conversionUpdate(data) { export function conversionUpdate(data) {
return request({ url: '/conversion/update', method: 'post', data }) return request({ url: "/conversion/update", method: "post", data });
} }
export function getWagesDataById(id) { export function getWagesDataById(id) {
return request({ url: `/conversion/getWagesDataById/${id}`, method: 'get' }) return request({
url: `/conversion/getWagesDataById/${id}`,
method: "get",
});
} }
//唐山矿工资转换 //唐山矿工资转换
export function surface(data) { export function surface(data) {
return request({ return request({
url: '/wages/calculate/surface', url: "/wages/calculate/surface",
method: 'post', method: "post",
data: data data: data,
}) });
} }
//获取最近的公式 //获取最近的公式
export function getRecentFormulas(id) { export function getRecentFormulas(mineId) {
return request({ url: '/conversion/recentFormulas', method: 'get'}) return request({
url: `/conversion/recentFormulas/${mineId}`,
method: "get"
});
}
//=======林西矿接口
//
export function importLxWagesExcel(data) {
return request({
url: "/wages/lxWages",
method: "post",
headers: {
"Content-Type": "multipart/form-data",
},
data: data,
});
}
//林西矿工资汇总
export function lxSummary(data) {
return request({
url: "/wages/lxSummary",
method: "post",
data: data,
});
} }
//对照表接口
export function compilationExcel(data) {
return request({
url: "/wages/compilation/excel",
method: "post",
headers: {
"Content-Type": "multipart/form-data",
},
data: data,
});
}
//对照表列表查询
export function getWagesCompilationList() {
return request({
url: "/wages/compilation/list",
method: "get"
});
}
...@@ -32,19 +32,19 @@ export function Linxi(names, Department, money, code, duplicateData, CompositeTa ...@@ -32,19 +32,19 @@ 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));
// // 提取特定属性值相同的数据
// const Electromechanical = "机电制造分公司";
// money = money.filter(item => item.remark !== Electromechanical);
// 替换属性值 // 替换属性值
money.forEach(item => { money.forEach(item => {
if (item.head === "坑木") item.head = "木材"; if (item.head === "坑木") item.head = "木材";
if (!item.remark) item.v.name = "基本生产-原煤"; if (!item.remark) item.v.name = "基本生产-原煤";
}); });
// 提取特定属性值相同的数据
const Electromechanical = "机电制造分公司";
money = money.filter(item => item.remark !== Electromechanical);
// // 对比替换导入表和模板的列数 // // 对比替换导入表和模板的列数
codess.forEach(code => { codess.forEach(code => {
let codeLength = String(code.code).length; let codeLength = String(code.code).length;
......
...@@ -312,17 +312,6 @@ export function MoneyMine(money, DepartmentColumns, name, materianame, c, Compos ...@@ -312,17 +312,6 @@ export function MoneyMine(money, DepartmentColumns, name, materianame, c, Compos
Fusion.v.m=item.v.v Fusion.v.m=item.v.v
CompositeTable[0]["celldata"].push(Fusion) CompositeTable[0]["celldata"].push(Fusion)
}) })
// 替换金额所在列和行相同的模板表中的数据
//金额所在列和行,去模板表中查找,如果行列一致则替换
// 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];
// }
// }
// }
let duplic = { let duplic = {
duplicateData: duplicateData, duplicateData: duplicateData,
CompositeTable: CompositeTable CompositeTable: CompositeTable
......
...@@ -31,21 +31,6 @@ export function Tangshan(money, c, name, CompositeTable, headRow, researchs) { ...@@ -31,21 +31,6 @@ export function Tangshan(money, c, name, CompositeTable, headRow, researchs) {
} }
return null; 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 targetValue = "器材大类";
let resultObject = findValueInArray(c, targetValue); let resultObject = findValueInArray(c, targetValue);
let material = c.flat().filter(obj => obj.c && obj.c == resultObject.c && obj.r > headRow) let material = c.flat().filter(obj => obj.c && obj.c == resultObject.c && obj.r > headRow)
...@@ -64,9 +49,6 @@ export function Tangshan(money, c, name, CompositeTable, headRow, researchs) { ...@@ -64,9 +49,6 @@ export function Tangshan(money, c, name, CompositeTable, headRow, researchs) {
money[i].v.material = material[i].v.v; 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 => { money.forEach(obj => {
if (!obj.v.material) { if (!obj.v.material) {
......
...@@ -97,31 +97,6 @@ export function YunFei(money, Department, code, name, codess, newArrayhong) { ...@@ -97,31 +97,6 @@ export function YunFei(money, Department, code, name, codess, newArrayhong) {
} }
}; };
}); });
// 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++) { for (let i = 0; i < duplicateData.length; i++) {
// // 对比 c 和 r 是否与 newArrayhong[0]["celldata"] 中相应对象相同 // // 对比 c 和 r 是否与 newArrayhong[0]["celldata"] 中相应对象相同
......
...@@ -183,7 +183,6 @@ export function ZhongRun(Department, money, materianame, name, CompositeTable, q ...@@ -183,7 +183,6 @@ export function ZhongRun(Department, money, materianame, name, CompositeTable, q
}) })
Secondcoloumn.forEach(item => { Secondcoloumn.forEach(item => {
CompositeTable[0].celldata.forEach(obj => { CompositeTable[0].celldata.forEach(obj => {
if (obj.v && obj.v.v && obj.v.v.includes(item.materianame)) { if (obj.v && obj.v.v && obj.v.v.includes(item.materianame)) {
item.r = obj.r item.r = obj.r
} }
......
...@@ -33,6 +33,7 @@ import LuckyExcel from "luckyexcel"; ...@@ -33,6 +33,7 @@ import LuckyExcel from "luckyexcel";
import { exportExcel } from "../../public/exportExcel"; import { exportExcel } from "../../public/exportExcel";
import { v4 as uuidv4 } from "uuid"; import { v4 as uuidv4 } from "uuid";
import { min } from "moment/moment"; import { min } from "moment/moment";
import { setXRow, setXColumn } from '@/utils/tzc'
var fileName = "新建XLSX工作表"; //定义表名 var fileName = "新建XLSX工作表"; //定义表名
var rule = []; var rule = [];
...@@ -132,6 +133,7 @@ export default { ...@@ -132,6 +133,7 @@ export default {
// this.list() // this.list()
}, },
methods: { methods: {
delect() { delect() {
this.mine = ""; this.mine = "";
this.selectname = ""; this.selectname = "";
...@@ -153,15 +155,7 @@ export default { ...@@ -153,15 +155,7 @@ export default {
//const json_data = response.data; //const json_data = response.data;
this.jsondata = JSON.parse(sysSupplies[0].templateContent); this.jsondata = JSON.parse(sysSupplies[0].templateContent);
}); });
// //单侯煤矿需要的东西
// getSuppliesTemplate(1264).then(response => {
// const sysSupplies = response.rows;
// this.newArray = JSON.parse(sysSupplies[0].templateContent);
// })
// getSuppliesTemplate(1268).then(response => {
// const sysSupplies = response.rows;
// this.newArrayhong = JSON.parse(sysSupplies[0].templateContent);
// })
}, },
//手机号 //手机号
open(evt) { open(evt) {
...@@ -477,6 +471,7 @@ export default { ...@@ -477,6 +471,7 @@ export default {
}, },
//转换方法 //转换方法
transformPromises() { transformPromises() {
// try { // try {
let result = this.result let result = this.result
this.dialogTableVisible = false this.dialogTableVisible = false
...@@ -502,8 +497,9 @@ export default { ...@@ -502,8 +497,9 @@ export default {
let cjson = JSON.stringify(c); let cjson = JSON.stringify(c);
let config = cc.sheets[0].config; let config = cc.sheets[0].config;
//表头所在行 //表头所在行
let headRow = this.cleaning[0].HeaderRow - 2; let headRow = this.cleaning[0].HeaderRow - 2;
let headROWs = c.flat().filter(obj => obj.c && obj.r == headRow)
//部门所在列及所有部门的数据
let DepartmentColumns = let DepartmentColumns =
this.cleaning[0].DepartmentColumn - 1; this.cleaning[0].DepartmentColumn - 1;
let Department = c let Department = c
...@@ -559,6 +555,7 @@ export default { ...@@ -559,6 +555,7 @@ export default {
let names = this.cleaning[0].sourceColoumn let names = this.cleaning[0].sourceColoumn
? this.cleaning[0].sourceColoumn - 1 ? this.cleaning[0].sourceColoumn - 1
: null; : null;
let name = names let name = names
? c ? c
.flat() .flat()
...@@ -569,6 +566,7 @@ export default { ...@@ -569,6 +566,7 @@ export default {
obj.r > headRow obj.r > headRow
) )
: null; : null;
//材料名称所在列 //材料名称所在列
let materias = this.cleaning[0].NameColumn - 1; let materias = this.cleaning[0].NameColumn - 1;
let materianame = c let materianame = c
...@@ -748,28 +746,30 @@ export default { ...@@ -748,28 +746,30 @@ export default {
item.v && item.v &&
((typeof item.v.v === "string" && ((typeof item.v.v === "string" &&
item.v.v.includes("其他材料")) || item.v.v.includes("其他材料")) ||
(typeof item.v.m === "string" && (typeof item.v.v === "string" &&
item.v.m.includes("材料"))) item.v.v.includes("生产材料")))
)[0].r; )[0].r;
let material = CompositeTable[0]["celldata"] let material = CompositeTable[0]["celldata"]
.flat() .flat()
.filter((obj) => obj.r && obj.r === matchedItems); .filter((obj) => obj.r && obj.r === matchedItems);
console.log(material)
duplicateData.forEach((obj) => { duplicateData.forEach((obj) => {
obj.v.material=''
material.forEach((cell) => { material.forEach((cell) => {
if (obj.c === cell.c) { if (obj.c === cell.c) {
obj.v.material = cell.v.v; obj.v.material = cell.v.v;
} }
}); });
}); });
console.log(duplicateData,'2222222222')
var cellList = []; var cellList = [];
var newHistoryContent = JSON.parse( var newHistoryContent = JSON.parse(
this.ImportTables.historyContent this.ImportTables.historyContent
); );
let maxC = Math.max(...newHistoryContent[0].celldata.map(item => item.c)); let maxC = headROWs.length - 1
duplicateData.forEach((item) => { duplicateData.forEach((item) => {
//新加字段内容拼接 //新加字段内容拼接
var newName = item.v.name + "-" + item.v.material; var newName = item.v.name + "-" + item.v.material;
item.index.forEach((i) => { item.index.forEach((i) => {
var cell26 = { var cell26 = {
r: i, r: i,
...@@ -796,21 +796,21 @@ export default { ...@@ -796,21 +796,21 @@ export default {
newHistoryContent[0].data = luckysheet.transToData( newHistoryContent[0].data = luckysheet.transToData(
newHistoryContent[0]["celldata"] newHistoryContent[0]["celldata"]
); );
if (!this.value.includes("凭证") || this.mining == "011706") {
if (!this.value.includes("凭证")) {
luckysheet.create({ luckysheet.create({
forceCalculation: true,
container: "luckysheet", // Luckysheet 的容器元素 ID container: "luckysheet", // Luckysheet 的容器元素 ID
title: fileName, // Excel 文件名 title: fileName, // Excel 文件名
data: CompositeTable, // Excel 数据 data: CompositeTable, // Excel 数据
showinfobar: false, //是否显示顶部名称栏 showinfobar: false, //是否显示顶部名称栏
lang: "zh", lang: "zh",
// allowEdit: false
}); });
// luckysheet.refreshFormula(); //渲染公式 luckysheet.refreshFormula(); //渲染公式
modify = true; modify = true;
this.showMask = false; this.showMask = false;
} }
if (this.mining == '011706') {
duplicateData = workbookCreateAfter(CompositeTable, this.mining)
}
this.ImportTables.historyContent = JSON.stringify(newHistoryContent) this.ImportTables.historyContent = JSON.stringify(newHistoryContent)
this.generate.historyContent = this.generate.historyContent =
JSON.stringify(CompositeTable); JSON.stringify(CompositeTable);
...@@ -838,33 +838,8 @@ export default { ...@@ -838,33 +838,8 @@ export default {
//类别名称 //类别名称
let names = this.cleaning[0].sourceColoumn ? this.cleaning[0].sourceColoumn - 1 : null; let names = this.cleaning[0].sourceColoumn ? this.cleaning[0].sourceColoumn - 1 : null;
let name = names ? c.flat().filter(obj => obj.c && obj.c === names && obj.r > headRow) : null; let name = names ? c.flat().filter(obj => obj.c && obj.c === names && obj.r > headRow) : null;
//最大行数
let maxC = Math.max(...c.map(item => item.c));
//研发和安全
// if (this.mining == '010101') {
// let newArray=c.filter(item=>item.v &&item.v.v);
// let research = [];
// let researchs = c.flat().filter(obj => obj.c && obj.c == maxC && obj.r > headRow)
// researchs.forEach(item => {
// if (item.v.v) {
// let newArray = {
// old: item.v.v,
// new: ''
// }
// research.push(newArray)
// }
// })
// //去重
// this.research = research.reduce((acc, curr) => {
// if (acc.findIndex(item => item.old === curr.old) === -1) {
// acc.push(curr);
// }
// return acc;
// }, []);
// this.dialogTableVisible = true
// }else{
this.transformPromises() this.transformPromises()
// }
}); });
}, },
//成本表往凭证但转 //成本表往凭证但转
...@@ -894,7 +869,6 @@ export default { ...@@ -894,7 +869,6 @@ export default {
item.v = Number(item.v).toFixed(2); item.v = Number(item.v).toFixed(2);
}); });
sum = sum.filter((item) => item.v !== "0.00"); sum = sum.filter((item) => item.v !== "0.00");
const VoucherForm = JSON.parse(this.VoucherForm); const VoucherForm = JSON.parse(this.VoucherForm);
const filteredData = VoucherForm[0].celldata.filter( const filteredData = VoucherForm[0].celldata.filter(
(obj) => obj.r === 5 (obj) => obj.r === 5
...@@ -1036,7 +1010,7 @@ export default { ...@@ -1036,7 +1010,7 @@ export default {
{} {}
) )
); );
if (sum.length == 1) { if (sum.length == 1 ) {
filteredArr.pop(); filteredArr.pop();
} }
this.ImportTables.historyRole = filteredArr.map((item) => { this.ImportTables.historyRole = filteredArr.map((item) => {
...@@ -1094,6 +1068,7 @@ export default { ...@@ -1094,6 +1068,7 @@ export default {
} }
} }
} }
let isArray = []; let isArray = [];
for (let i = 0; i < filteredArr.length; i++) { for (let i = 0; i < filteredArr.length; i++) {
let newRow1 = { let newRow1 = {
...@@ -1153,7 +1128,6 @@ export default { ...@@ -1153,7 +1128,6 @@ export default {
isArray.push(newRow1, newRow2); isArray.push(newRow1, newRow2);
} }
const newRows = [];
for (let i = 0; i < filteredArr.length; i++) { for (let i = 0; i < filteredArr.length; i++) {
const codeValue = filteredArr[i]?.accountingCode; const codeValue = filteredArr[i]?.accountingCode;
if (codeValue) { if (codeValue) {
...@@ -1266,7 +1240,10 @@ export default { ...@@ -1266,7 +1240,10 @@ export default {
}; };
isArray.push(newRow, newRow1); isArray.push(newRow, newRow1);
} }
VoucherForm[0].celldata.push(...isArray); VoucherForm[0].celldata.push(...isArray);
if (this.value.includes("凭证")) { if (this.value.includes("凭证")) {
luckysheet.create({ luckysheet.create({
container: "luckysheet", // Luckysheet 的容器元素 ID container: "luckysheet", // Luckysheet 的容器元素 ID
...@@ -1280,6 +1257,7 @@ export default { ...@@ -1280,6 +1257,7 @@ export default {
modify = true; modify = true;
this.showMask = false; this.showMask = false;
} }
console.log(list,'11111111111')
addInsert(list).then((response) => { addInsert(list).then((response) => {
if (response.code == 200) { if (response.code == 200) {
this.$message({ this.$message({
...@@ -1289,26 +1267,93 @@ export default { ...@@ -1289,26 +1267,93 @@ export default {
} }
}); });
if (this.mining !== "011701") { if (this.mining !== "011701") {
this.list();
this.historyContent = []; this.historyContent = [];
this.duplicateData = []; this.duplicateData = [];
} }
VoucherForm[0].celldata = []; VoucherForm[0].celldata = [];
}); });
}, },
handleExport: debounce(function () { handleExport: debounce(function () {
// handleExport // handleExport
let mineId=JSON.stringify(this.mining) let mineId = JSON.stringify(this.mining)
datahistoryContentCopy({mineId}).then(res=>{ datahistoryContentCopy({ mineId }).then(res => {
}) })
exportExcel(luckysheet.getAllSheets(), fileName); exportExcel(luckysheet.getAllSheets(), fileName);
}, 500), }, 500),
}, },
}; };
// 配置项111 // 配置项111
function getss(data) {
let setXColumnObj = setXColumn(data, 2, '', 0, 9)
let arrkses = Object.keys(setXColumnObj)
let arr = []
for (let rowIndex = 3; rowIndex < 34; rowIndex++) {
let obj = {}
arrkses.forEach(item => {
let cell = data[rowIndex][setXColumnObj[item]];
if (!item.includes('分配金额') && ['安全费用'] && ['内投工程材料'] && ['研发支出']) {
// 去除
if (!['分配金额', '安全费用', '内投工程材料', '研发支出'].find((key) => item.includes(key))) {
obj[item] = cell && cell.v || ''
}
}
})
if (!/^\d/.test(obj['费用列支'])) {
arr.push(obj)
}
}
return arr
}
function workbookCreateAfter(operate, mining) {
let gets = getss(operate[0].data)
let neearray = []
gets.forEach(item => {
let value = Object.values(item)
// 找到括号内的内容
let start = value[0].indexOf('(');
let end = value[0].indexOf(')');
let obj = ''
let contentBeforeParentheses = ''
if (start !== -1 && end !== -1) {
let contentWithinParentheses = value[0].substring(start + 1, end);
obj = contentWithinParentheses.split(',');
obj = obj.map(newitem => newitem.trim());
}
let parenthesesIndex = value[0].indexOf('(');
if (parenthesesIndex !== -1) {
contentBeforeParentheses = value[0].substring(0, parenthesesIndex).trim();
}
let key = Object.keys(item)
value.forEach((items, index) => {
if (items && index != 0) {
let funs = {
v: {
v: items,
name: key[index] + '-',
material: contentBeforeParentheses,
},
mining: mining,
r: ''
}
funs.v.material = funs.v.material.includes('净化车间') ? '净化车间' : funs.v.material
if (index == 1) {
funs.r = obj[0]
} else {
funs.r = obj[1] ? obj[1] : obj[0]
}
neearray.push(funs)
}
})
})
return neearray
}
// debounce函数定义 // debounce函数定义
function debounce(func, delay) { function debounce(func, delay) {
let timer; let timer;
return function () { return function () {
......
...@@ -14,7 +14,6 @@ export function hongMine(money, Department, code, name, codess, newArrayhong) { ...@@ -14,7 +14,6 @@ export function hongMine(money, Department, code, name, codess, newArrayhong) {
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;
} }
...@@ -27,7 +26,6 @@ export function hongMine(money, Department, code, name, codess, newArrayhong) { ...@@ -27,7 +26,6 @@ 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) => {
......
...@@ -189,7 +189,7 @@ export function lvMine(CompositeTable,cjson,codess,code) { ...@@ -189,7 +189,7 @@ export function lvMine(CompositeTable,cjson,codess,code) {
} }
} }
} }
duplicateData = duplicateData.filter(item => !item.v.name.includes('研发费用')&&!item.v.name.includes('安全费用')&&!item.v.name.includes('维简及井巷费')); // duplicateData = duplicateData.filter(item => !item.v.name.includes('研发费用')&&!item.v.name.includes('安全费用')&&!item.v.name.includes('维简及井巷费'));
let duplic={ let duplic={
duplicateData:duplicateData, duplicateData:duplicateData,
CompositeTable:CompositeTable CompositeTable:CompositeTable
......
...@@ -13,42 +13,58 @@ ...@@ -13,42 +13,58 @@
import { v4 as uuidv4 } from "uuid"; import { v4 as uuidv4 } from "uuid";
import { getyy } from "@/api/ruoyi-myLuckyexcel/myluckyexcel" import { getyy } from "@/api/ruoyi-myLuckyexcel/myluckyexcel"
import { getMineProofConfig,kNameID } from "@/utils/MineProofConfig"
export function transitionJson1(data, setting = {}) { export class CreateNewCellData {
let arr = [] constructor(cellData){
data.forEach((rows, rowIndex) => { this.data = cellData;
let sr = !setting.startRow || setting.startRow <= rowIndex; this.lasti = 0;
let er = !setting.endRow || setting.endRow >= rowIndex; // 缓存 值对应的 行和列
let obj = {}; this.cacheV = {}
if (sr && er && rows) { // 缓存 行和列 值对应的
rows.forEach((item, index) => { this.cacheRC = {}
let sc = !setting.startColumn || setting.startColumn <= index; }
let ec = !setting.endColumn || setting.endColumn >= index; buildcache(fn,...args){
if (sc && ec && item) { if (this.lasti >= this.data.length){return fn(...args)}
let key1 = data[setting.titleR || setting.startRow || 0][index] for (this.lasti; this.lasti < this.data.length; this.lasti++){
key1 = key1 && key1.v || index; let cell = this.data[this.lasti];
if (item.v || item.v === 0) { if(cell && cell.v && cell.v.v){
if (Object.keys(obj).includes(key1) && setting.cover !== '覆盖') { let cacheKey = String(cell.v.v).replaceAll(' ','');
obj[`${key1}${index}`] = item.v let obj = { r:cell.r, c:cell.c, v:cell.v.v}
} else { this.cacheRC[`${cell.r},${cell.c}`] = cell.v.v;
obj[key1] = item.v if(this.cacheV[cacheKey]){this.cacheV[cacheKey].push(obj)
} else {this.cacheV[cacheKey] = [obj]}
if(fn(...args)){
return fn(...args)
}
}
}
console.log('没有找到',fn,...args)
}
getCellV(v,n=0){
v = String(v).replaceAll(' ','');
if(['undefined','null',''].includes(v)){return;}
let fn = (v,n) => this.cacheV[v] && this.cacheV[v][n]
if(fn(v,n)){return fn(v,n)}
else{
return this.buildcache(fn,v,n)
}
}
// key 值 (r,c)
getCellRC(key){
let fn = (key) => this.cacheRC[key]
if(fn(key)){
return fn(key)
}else if(this.buildcache(fn,key)){
return this.buildcache(fn,key)
} }
} }
}
})
}
if (Object.keys(obj).length) {
arr.push(obj)
}
})
return arr
} }
// 获取项目行 // 获取项目行
export function setXRow(arr, c = 0, chong = '--干部') { export function setXRow(arr, c = 0, chong = '--干部') {
let obj = {} let obj = {}
arr.forEach((item, rowIndex) => { arr.forEach((item, rowIndex) => {
// rowIndex 代表第几行 // rowIndex 代表第几行
if (item[c] && item[c].v) { if (item && item[c] && item[c].v) {
if (obj[item[c].v]) { if (obj[item[c].v]) {
obj[item[c].v + chong] = rowIndex obj[item[c].v + chong] = rowIndex
} else { } else {
...@@ -59,10 +75,10 @@ export function setXRow(arr, c = 0, chong = '--干部') { ...@@ -59,10 +75,10 @@ export function setXRow(arr, c = 0, chong = '--干部') {
return obj; return obj;
} }
// 获取列 r是低几行 // 获取列 r是低几行
export function setXColumn(arr, r = 0, chong = '--干部') { export function setXColumn(arr, r = 0, chong = '--干部',sc = 0 ,se = 9999) {
let obj = {} let obj = {}
arr[r].forEach((item, column) => { arr[r].forEach((item, column) => {
if (item.v) { if (item && item.v && column >= sc && column <= se) {
if (obj[item.v]) { if (obj[item.v]) {
obj[item.v + chong] = column obj[item.v + chong] = column
} else { } else {
...@@ -81,175 +97,84 @@ export function transformJson(json) { ...@@ -81,175 +97,84 @@ export function transformJson(json) {
}) })
return obj return obj
} }
export function gettransformJson(sum) { export function getyyData(sum,kid = ''){
console.log(kNameID[kid],2222)
let variableMappings = { let conFigList = getMineProofConfig(kNameID[kid] || 'tsk')
"班中餐": 'schoolLunchValue', let allAll = []
"基本养老保险": 'basicPensionValue', let err = []
"补充养老保险": 'supPensionValue', conFigList.forEach(cong => {
"提取包干": 'lumpSumWithdrawalValue', let sheets = sum.find(item => item.name.includes(cong.sheetsName))
"工伤保险": 'workInjuryInsuranceValue', if(!sheets || !cong.sheetsName){
"补充医疗保险": 'supMedicalValue', err.push(cong)
"基本医疗保险": 'basicMedicalValue', return;
"计提工会经费": 'unionFundsValue', }
"住房公积金": 'housingFundValue', let cellData = sheets && sheets.celldata || [];
"提职工教育经费": 'employeeEducationFundsValue', let newCellData = new CreateNewCellData(cellData)
"失业保险": 'unemploymentInsuranceValue' let data = sheets && sheets.data || luckysheet.transToData(cellData)
}; let columnCell = newCellData.getCellV(cong.oldColumnName); //获取列单元格
let obj = {}; let endList = newCellData.getCellV('合计',cong.jishuhang || 0); //获取 “v是合计的” 单元格数组
let itemCellColumn = newCellData.getCellV(cong.itemName || '项目');
sum.forEach(item => { if( !columnCell || !endList || !itemCellColumn){
Object.keys(variableMappings).forEach(key => { console.error(cong.oldColumnName,newCellData,columnCell,endList);
if (item.name.includes(key)) { return
obj[variableMappings[key]] = item }
} //获取项目的单元格的列数
let itemCellColumnIndex = itemCellColumn.c;
// 取那一列的数
let columnIndex = columnCell.c;
// 开始行是那一行
let startRowIndex = columnCell.r;
// 结束行是那一行
let endRowIndex =endList.r;
for (let currentRowIndex in data){
if (currentRowIndex >= endRowIndex){break;}
let rowList = data[currentRowIndex];
if(currentRowIndex > startRowIndex ){
let name = rowList[itemCellColumnIndex] && rowList[itemCellColumnIndex].v
let money = rowList[columnIndex] && rowList[columnIndex].m || rowList[columnIndex].v
let isFilterStartsWith = cong.isFilterStartsWith !== false && /^\d/.test(name && name.replace && name.replace(/\s+/g, ''))
if(Number(money) > 0 && !isFilterStartsWith){
allAll.push({
classary: cong.classary,
money,
name,
}) })
});
let schoolLunchValues = []
function name() {
let names = [
{
name: '独生子女补贴',
value: '提取一孩补贴'
},
{
name: '班中餐',
value: '提取班中餐'
},
{
name: '金额',
value: '提取基本养老保险'
},
{
name: '金额',
value: '提取补充养老保险'
},
{
name: '金额',
value: '提取包干工资'
},
{
name: '金额',
value: '提取工伤保险'
},
{
name: '金额',
value: '提取补充医疗保险'
},
{
name: '金额',
value: '提取基本医疗保险'
},
{
name: '金额',
value: '提取工会经费'
},
{
name: '金额',
value: '提取住房公积金'
},
{
name: '金额',
value: '提取职工教育经费'
},
{
name: '金额',
value: '提取失业保险'
},
]
let sums = [
obj.schoolLunchValue.celldata,
obj.schoolLunchValue.celldata,
obj.basicPensionValue.celldata,
obj.supPensionValue.celldata,
obj.lumpSumWithdrawalValue.celldata,
obj.workInjuryInsuranceValue.celldata,
obj.supMedicalValue.celldata,
obj.basicMedicalValue.celldata,
obj.unionFundsValue.celldata,
obj.housingFundValue.celldata,
obj.employeeEducationFundsValue.celldata,
obj.unemploymentInsuranceValue.celldata,
]
let i = 0
names.forEach(item => {
if (i < 2) {
//结束行
let end = sums[i].filter(obj => obj.v && obj.v.v && obj.v.v === '合计')[2]
ex(sums[i], item, end, i)
} else {
let end = sums[i].find(obj => obj.v && obj.v.v && obj.v.v.replace && (obj.v.v.replace(/\s+/g, '') === '合计'))
ex(sums[i], item, end, i)
}
i++;
})
}
function ex(newarray, Begins, end) {
// ?/项目//
let head = newarray.find(obj => obj.v && obj.v.v && (obj.v.v.replace && obj.v.v.replace(/\s+/g, '') === '项目'))
let heads = newarray.filter(obj => obj.c === head.c)
//开始行
let Begin = newarray.find(obj => obj.v && obj.v.v && (obj.v.v === Begins.name || obj.v.v === '工会经费' || obj.v.v === '职工教育经费'))
newarray.forEach(item => {
if (item.r > Begin.r + 1 && item.r < end.r && item.c === Begin.c && item.v.v && item.v.v > 0) {
let Funct = {
classary: Begins.value,
money: item.v.m || item.v.v,
name: ''
} }
heads.forEach(headItem => {
if (item.r === headItem.r) {
Funct.name = heads[heads.indexOf(headItem)].v.v;
} }
});
schoolLunchValues.push(Funct)
} }
}) })
if(err.length){
console.log(err)
} }
name(obj) return allAll
}
let vouchers = { // 生成凭证第二步调取后端数据
//借方 export function newGettransformJson(sum,kid) {
borrow: schoolLunchValues.map(item => ({ ...item, is_debit: 0, mining: '010101' })), let schoolLunchValues = getyyData(sum,kid)
//贷方 let borrow = []; //借方
loan: schoolLunchValues.map(item => ({ ...item, is_debit: 1, mining: '010101' })) let analyzedBorrow = [];//借方待分析
} let loan = [];//贷方
vouchers.loan = vouchers.loan.filter(item => { return !item.name.includes('(') || !item.name.includes('') }) let analyzedLoan = [];//贷方待分析
vouchers.borrow = vouchers.borrow.filter(item => { return !item.name.includes('研发') }) schoolLunchValues.forEach(item => {
vouchers = { if(!item.name.includes('研发')){
//借方 let obj = { ...item, is_debit: 0, mining: '010101' }
borrow: vouchers.borrow.map(item => ({ ...item })), borrow.push(obj)
//贷方 let analyzedBorrowObj = {...obj}
loan: vouchers.loan.map(item => ({ ...item })), analyzedBorrowObj.classary = analyzedBorrowObj.classary.replace('提取', '待分析');
//借方待分析 analyzedBorrow.push(analyzedBorrowObj)
analyzedBorrow: vouchers.borrow.map(item => ({ ...item })), }
//贷方待分析 if(!item.name.includes('(') || !item.name.includes('')){
analyzedloan: vouchers.loan.map(item => ({ ...item })) let obj1 = { ...item, is_debit: 1, mining: '010101' }
loan.push(obj1);
let analyzedLoanObj = {...obj1}
analyzedLoanObj.classary = analyzedLoanObj.classary.replace('提取', '待分析');
analyzedLoan.push(analyzedLoanObj)
} }
vouchers.analyzedBorrow.forEach(item => {
item.classary = item.classary.replace('提取', '待分析');
}) })
vouchers.analyzedloan.forEach(item => { let objJson = { borrow, loan, analyzedLoan, analyzedBorrow }
item.classary = item.classary.replace('提取', '待分析');
})
let objJson = {
//提取借方
borrow: vouchers.borrow.map(item => ({ ...item })),
//提取贷方
loan: vouchers.loan.map(item => ({ ...item })),
//待分析贷方
analyzedLoan: vouchers.loan.map(item => ({ ...item })),
//待分析借方
analyzedBorrow: vouchers.borrow.map(item => ({ ...item }))
}
return getyy(JSON.stringify(objJson)) return getyy(JSON.stringify(objJson))
} }
// 生成凭证第三步生成凭证luckysheet.create.Data的数据
export function tzcCreateData(old, json, luckysheet, mobile, ywrq) { export function tzcCreateData(old, json, luckysheet, mobile, ywrq) {
return Object.entries(json).map(([key, json], index) => { return Object.entries(json).map(([key, json], index) => {
let obj = JSON.parse(JSON.stringify(old)); let obj = JSON.parse(JSON.stringify(old));
...@@ -271,16 +196,17 @@ export function tzcCreateData(old, json, luckysheet, mobile, ywrq) { ...@@ -271,16 +196,17 @@ export function tzcCreateData(old, json, luckysheet, mobile, ywrq) {
// "account_code": "2211005", // "account_code": "2211005",
// "mining": "010101" // "mining": "010101"
toData[rowIndex + 8] = []; toData[rowIndex + 9] = [];
toData[rowIndex + 8][columnObj['*制单人']] = vule(mobile); toData[rowIndex + 9][columnObj['制单人']] = vule(mobile);
toData[rowIndex + 8][columnObj['*会计主体']] = vule(item.mining); toData[rowIndex + 9][columnObj['*制单人']] = vule(mobile);
toData[rowIndex + 8][columnObj['*核算账簿']] = vule(item.mining); toData[rowIndex + 9][columnObj['*会计主体']] = vule(item.mining);
toData[rowIndex + 8][columnObj['*分录摘要']] = vule(item.classary); toData[rowIndex + 9][columnObj['*核算账簿']] = vule(item.mining);
toData[rowIndex + 8][columnObj['*凭证类型']] = vule(item.classary); toData[rowIndex + 9][columnObj['*分录摘要']] = vule(item.classary);
toData[rowIndex + 8][columnObj['*单据日期']] = vule(ywrq) toData[rowIndex + 9][columnObj['*凭证类型']] = '';
toData[rowIndex + 8][columnObj[item.is_debit === 0 ? '本币借方金额' : '本币贷方金额']] = vule(item.money); toData[rowIndex + 9][columnObj['*单据日期']] = vule(ywrq)
toData[rowIndex + 8][columnObj[item.is_debit === 0 ? '原币借方金额' : '原币贷方金额']] = vule(item.money); toData[rowIndex + 9][columnObj[item.is_debit === 0 ? '本币借方金额' : '本币贷方金额']] = vule(item.money);
toData[rowIndex + 8][columnObj['*科目编码']] = vule(item.account_code || ''); toData[rowIndex + 9][columnObj[item.is_debit === 0 ? '原币借方金额' : '原币贷方金额']] = vule(item.money);
toData[rowIndex + 9][columnObj['*科目编码']] = vule(item.account_code || '');
['auxiliary_item_a', 'auxiliary_item_b'].forEach(itemKey => { ['auxiliary_item_a', 'auxiliary_item_b'].forEach(itemKey => {
if (item[itemKey]) { if (item[itemKey]) {
let [key, value] = item[itemKey].split(':') let [key, value] = item[itemKey].split(':')
...@@ -288,15 +214,15 @@ export function tzcCreateData(old, json, luckysheet, mobile, ywrq) { ...@@ -288,15 +214,15 @@ export function tzcCreateData(old, json, luckysheet, mobile, ywrq) {
key = '物料基本分类--干部' key = '物料基本分类--干部'
} }
value = value && value.split('/') && value.split('/')[0] value = value && value.split('/') && value.split('/')[0]
toData[rowIndex + 8][columnObj[key]] = vule(value); toData[rowIndex + 9][columnObj[key]] = vule(value);
} }
}) })
// 还要修改的 // 还要修改的
toData[rowIndex + 8][columnObj['*币种']] = vule('CNY'); toData[rowIndex + 9][columnObj['*币种']] = vule('CNY');
toData[rowIndex + 8][columnObj['本币汇率类型']] = vule('E001'); toData[rowIndex + 9][columnObj['本币汇率类型']] = vule('E001');
toData[rowIndex + 8][columnObj['*本币汇率']] = vule('1.00000000', 'red'); toData[rowIndex + 9][columnObj['*本币汇率']] = vule('1.00000000', 'red');
toData[rowIndex + 8][columnObj['*手工码']] = vule(uuid); toData[rowIndex + 9][columnObj['*手工码']] = vule(uuid);
toData[rowIndex + 8][columnObj['*业务日期']] = vule(new Date().getFullYear() + '-' + (new Date().getMonth() + 1) + '-' + new Date().getDate()); toData[rowIndex + 9][columnObj['*业务日期']] = vule(new Date().getFullYear() + '-' + (new Date().getMonth() + 1) + '-' + new Date().getDate());
}) })
obj.celldata = luckysheet.transToCellData(toData) obj.celldata = luckysheet.transToCellData(toData)
return obj; return obj;
......
...@@ -3,8 +3,11 @@ ...@@ -3,8 +3,11 @@
<el-form ref="queryForm" size="small" :inline="true" label-width="68px"> <el-form ref="queryForm" size="small" :inline="true" label-width="68px">
<el-form-item label="模板" prop="name"> <el-form-item label="模板" prop="name">
<el-select v-model="selectedOption" ref="mySelect" size="mini" filterable placeholder="请选择您要查看的模板" <el-select v-model="selectedOption" ref="mySelect" size="mini" filterable placeholder="请选择您要查看的模板"
@change="handleOptionChange"> @change="handleOptionChange($event, {
<el-option v-for="item in depss" :key="item.id" :label="item.templateName" :value="item.id" name: '唐山矿',
id: '010101'
})">
<el-option v-for="item in depss.filter(item => [1270,1248].includes(item.id))" :key="item.id" :label="item.templateName" :value="item.id"
:disabled="item.disabled"> :disabled="item.disabled">
</el-option> </el-option>
</el-select> </el-select>
...@@ -28,12 +31,16 @@ ...@@ -28,12 +31,16 @@
</el-col> </el-col>
</el-row> </el-row>
<el-dialog title="取数规则" :visible.sync="dialogTableVisible" :close-on-click-modal="false" :show-close="false"> <el-dialog title="取数规则" :visible.sync="dialogTableVisible" :close-on-click-modal="false" :show-close="false">
<el-form label-width="120px">
<el-form label-width="120px" >
<el-form-item v-for="(item, index) in jsonhead" :key="index" :label="`${item.label}`"> <el-form-item v-for="(item, index) in jsonhead" :key="index" :label="`${item.label}`">
<el-input v-model="item.value"></el-input> <el-input v-model="item.value"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
<el-button @click="handleClose()">取 消</el-button>
<el-button type="primary" @click="initData()">确 定</el-button> <el-button type="primary" @click="initData()">确 定</el-button>
</span> </span>
</el-dialog> </el-dialog>
......
<template> <template>
<!-- 页面 工资汇总调研--> <div class="box">
<div class="app-container"> <div style="display: flex;padding-bottom:20px;align-items: center;justify-content: space-between;width: 100%">
<el-form ref="queryForm" size="small" :inline="true" label-width="68px"> <div>材料分解预算</div>
<el-form-item label="模板" prop="name"> <div style="display: flex">
<el-select v-model="form.template" <el-button size="mini" @click="setTs">
ref="mySelect" size="mini" 唐山电费汇总表放数据
filterable placeholder="请选择您要查看的模板" </el-button>
@change="changeTemplate"> <el-button size="mini" @click="jxdfxt">
<el-option v-for="item in templateList" :key="item.id" :label="item.templateName" :value="item.id" :disabled="item.disabled"> 解析电费系统
</el-option> </el-button>
</el-select> <el-button size="mini" @click="lxdlcrpz">
</el-form-item> 林西电力生凭证
<el-form-item label="时间" prop="wageMonth"> </el-button>
<el-date-picker v-model="form.wageMonth" value-format="yyyy-MM" type="month" placeholder="选择月"></el-date-picker> <el-button size="mini" @click="tsdlcrpz">
</el-form-item> 唐山电力生凭证
</el-form> </el-button>
<el-row :gutter="10" class="mb8"> <el-button size="mini" @click="crpz">
<el-col :span="1.5"> 生凭证
<el-button type="warning" plain icon="el-icon-upload2" size="mini" @click="handleExport">导出</el-button> </el-button>
</el-col> <el-button size="mini" style="margin-right: 10px" @click="handleExport">导出</el-button>
<el-col :span="1.5"> <el-upload type="file" :action="uploadAction" :before-upload="uploadFile" :show-file-list="false">
<el-upload type="file" name="file" ref="upload" :headers="{ 'Content-Type': 'multipart/form-data' }" <el-button size="mini">导入</el-button>
: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-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>
</div>
</template>
<style></style> </div>
<div style="flex:1;" v-loading="loading">
<div id="luckysheet" style="height: 100%"></div>
</div>
</div>
</template>
<script> <script>
import LuckyExcel from "luckyexcel";
import { listSuppliesTemplate } from "@/api/ruoyi-myLuckyexcel/myluckyexcel" import { exportExcel } from "/public/exportExcel";
import { exportExcel } from "../../../../../public/exportExcel" import { debounce } from '@/utils'
import LuckyExcel from "luckyexcel" import { department, getSuppliesTemplate, getyy } from '@/api/ruoyi-myLuckyexcel/myluckyexcel'
import { transitionJson, transitionJson1 } from "@/utils/tzc" import { getyyData, transformJson, tzcCreateData } from '@/utils/tzc'
import { TSdL } from '@/mock'
export default { export default {
name: "salarySummary", name: 'index',
data () { data() {
return { return {
form:{ uploadAction: process.env.VUE_APP_BASE_API + '/activiti/definition/upload',
template:'', loading: false,
wageMonth:'', luckysheetTitle: '材料分解预算',
classification: [],
codeRule: [
{
"oneLevel": "木材",
"codeStartsWithS": ["15", "16"]
}, },
templateList:[], {
file:null "oneLevel": "支护用品",
} "twoLevel": "支撑钢",
"codeStartsWithS": ["0150"]
},
{
"oneLevel": "支护用品",
"twoLevel": "卡缆",
"codeStartsWithS": ["110601", "110602"]
},
{
"oneLevel": "支护用品",
"twoLevel": "锚杆",
"codeStartsWithS": ["1107"]
},
{
"oneLevel": "支护用品",
"twoLevel": "金属网",
"codeStartsWithS": ["1111"]
},
{
"codeStartsWithS": [
"0101",
"0102",
"0103",
"0104",
"0151",
"0152",
"0153",
"0120",
"0121",
"0122",
"0124",
"0140",
"0141",
"0142",
"1108",
"1110",
"1112",
"1115",
"0105",
"0108",
"0109",
"0110",
"0111",
"0113",
"0114",
"0115",
"0116",
"0117",
"0120",
"0121",
"0122",
"0126",
"1101",
"1102",
"1105",
"1106",
"1113"
],
"oneLevel": "支护用品",
"twoLevel": "其他"
},
{
"codeStartsWithS": [
"619701"
],
"oneLevel": "火工用品",
"twoLevel": "雷管"
},
{
"codeStartsWithS": [
"619702"
],
"oneLevel": "火工用品",
"twoLevel": "火药"
},
{
"codeStartsWithS": [
"6199"
],
"oneLevel": "火工用品",
"twoLevel": "其他"
},
{
"codeStartsWithS": [
"0130",
"0132",
"0133",
"0134"
],
"oneLevel": "大型材料",
"twoLevel": "钢铁管"
},
{
"codeStartsWithS": [
"0154"
],
"oneLevel": "大型材料",
"twoLevel": "钢轨"
},
{
"codeStartsWithS": [
"0202"
],
"oneLevel": "大型材料",
"twoLevel": "钢丝绳"
},
{
"codeStartsWithS": [
"40"
],
"oneLevel": "大型材料",
"twoLevel": "电缆"
},
{
"codeStartsWithS": [
"6001"
],
"oneLevel": "大型材料",
"twoLevel": "皮带"
},
{
"codeStartsWithS": [
"0201",
"0203",
"0208",
"0210",
"6004",
"204",
"6002",
"6005",
"6006",
"6009",
"6011",
"6012",
"6013",
"6014",
"6030",
"6032",
"6033",
"6034",
"6036",
"6045",
"6046",
"6099",
"0204"
],
"oneLevel": "大型材料",
"twoLevel": "其他"
},
{
"codeStartsWithS": [
"3101"
],
"oneLevel": "配件",
"twoLevel": "综机配件"
},
{
"codeStartsWithS": [
"3114"
],
"oneLevel": "配件",
"twoLevel": "掘进机配件"
},
{
"codeStartsWithS": [],
"oneLevel": "配件",
"twoLevel": "溜槽"
}, },
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", //工作表名称 "codeStartsWithS": [
index: 0, //工作表索引 "310301",
status: 1, //激活状态 "310302"
celldata: [], //初始化使用的单元格数据 ],
"oneLevel": "配件",
"twoLevel": "大链"
},
{
"codeStartsWithS": [
"3103",
"3107",
"3116",
"3120",
"3150",
"3175",
"3177",
"3179",
"3183",
"3185",
"3187",
"3189",
"3191",
"3193",
"3195",
"3197",
"3198",
"3199"
],
"oneLevel": "配件",
"twoLevel": "其他配件"
},
{
"codeStartsWithS": [
"420128"
],
"oneLevel": "专用工具",
"twoLevel": "矿灯"
},
{
"codeStartsWithS": [
"5136"
],
"oneLevel": "专用工具",
"twoLevel": "7.5KV及以下水泵"
}, },
{
"codeStartsWithS": [
"5112",
"903003"
], ],
}; "oneLevel": "专用工具",
luckysheet.create(options); "twoLevel": "矿车"
},
{
"codeStartsWithS": [],
"oneLevel": "专用工具",
"twoLevel": "综合保护器"
},
{
"codeStartsWithS": [
"5104",
"5105",
"5106",
"5109",
"5110",
"5111",
"5115",
"5120",
"5122",
"5124",
"5126",
"5128",
"5130",
"5199"
],
"oneLevel": "专用工具",
"twoLevel": "其他"
},
{
"codeStartsWithS": [],
"oneLevel": "自用煤"
},
{
"codeStartsWithS": [
"62"
],
"oneLevel": "劳保用品"
},
{
"codeStartsWithS": [
"6301"
],
"oneLevel": "建工材料",
"twoLevel": "水泥"
},
{
"codeStartsWithS": [
"6302",
"6303",
"6305",
"6306",
"6309",
"6310",
"6311",
"6312",
"6313",
"6314"
],
"oneLevel": "建工材料",
"twoLevel": "其他"
},
{
"codeStartsWithS": [
"610101"
],
"oneLevel": "油脂及乳化液",
"twoLevel": "汽油"
},
{
"codeStartsWithS": [
"610102"
],
"oneLevel": "油脂及乳化液",
"twoLevel": "柴油"
},
{
"codeStartsWithS": [
"6102"
],
"oneLevel": "油脂及乳化液",
"twoLevel": "润滑油"
},
{
"codeStartsWithS": [
"610635"
],
"oneLevel": "油脂及乳化液",
"twoLevel": "乳化液"
},
{
"codeStartsWithS": [
"6106"
],
"oneLevel": "油脂及乳化液",
"twoLevel": "液压油"
},
{
"codeStartsWithS": [
"6103",
"6110",
"6111",
"6101",
"6102",
"6106",
"6115",
"6120",
"6122",
"6124",
"6132"
],
"oneLevel": "油脂及乳化液",
"twoLevel": "其他"
},
]
}
}, },
methods: { methods: {
handleSuccess(evt){ // 给唐山汇总表放数据
console.log(evt,'Success') setDataV(...arg) {
}, let getValue = (arr, keys) => {
// 导入 let shu = arr[0];
handleFileChange(evt) { let key = ''
let self = this if (keys.length === 1) {
this.file = evt; key = keys[0]
LuckyExcel.transformExcelToLucky(self.file, (lucksheetfile) => { } else {
setTimeout(()=>{ let flag = keys.slice(0, keys.length - 1).some((item) => shu[item])
if (!flag && shu[keys[keys.length - 1]]) {
key = keys[keys.length - 1];
}
}
if (key && shu[key]) {
return shu[key]
} else { return null }
}
let CConfig = {
'加收管理费': ['电费-基本'],
'照明电量': ["电量-峰", "电量-平", "电量-尖", "电量-谷", '电量-合计'],//前四个有就不填,都没有填电量-合计
'电光电费': ["电费-峰", "电费-平", "电费-尖", "电费-谷", '电费-合计'],
'峰段电量': ['电量-峰'],
'峰段金额': ['电费-峰'],
'平段电量': ['电量-平'],
'平段金额': ['电费-平'],
'谷段电量': ['电量-谷'],
'谷段金额': ['电费-谷'],
}
let itemConfig = {
'基本生产,原煤': ['原煤生产'],
'基本生产,洗煤': ['洗煤厂(高压)'],
'制造费用,原煤': ['矿井水净化', '地面维修', '联合建筑', '厂区服务', '供水供暖'],//todo 缺少
'管理用电': ['综合办', '工会楼', '小车房', '绿化保洁'],
'其他业务成本,住宿': ['住宿餐饮(集体宿舍)'],
'其他业务成本,餐饮': ['住宿餐饮(东门食堂)', ' 住宿餐饮(风井食堂)'],
'其他业务成本,厂区服务,集团大院': ['集团公司大院'],
}
let [itemName, CName, data] = arg;
if (!CConfig[CName]) { return null }
let lastName = itemName.split(',')
lastName = lastName[lastName.length - 1]
// 特殊处理的 情况
if (itemConfig[itemName]) {
let sum = 0
itemConfig[itemName].forEach((item) => {
let funV = null;
if (data[item]) {
funV = getValue(data[item], CConfig[CName])
} else {
let obj = Object.entries(data).find(([key]) => {
if (key.includes(item)) {
return true
}
})
if (obj) { funV = getValue(obj[1], CConfig[CName]) }
}
if (funV) { sum = Number(sum) + Number(funV) }
})
if (sum > 0) {
return sum
} else { return null }
}
else if (data[itemName] || data[lastName]) {
return getValue(data[itemName] || data[lastName], CConfig[CName])
} else {
return null
}
},
setTs() {
//第一步先处理后端返回的数据
let newData = {};
TSdL.data.forEach((item) => {
item.details.forEach(el => {
let obj = {}
Object.entries(el).forEach(([K, V]) => {
if (V) {
if (K.startsWith('a')) {
obj[item.datas[K] && item.datas[K].replace(',', '-').replace('', '-')] = V;
} else {
obj[K] = V;
}
}
})
if (obj['类别']) {
if (newData[obj['类别']]) {
newData[obj['类别']].push(obj)
} else {
newData[obj['类别']] = [obj]
}
}
});
})
console.log(newData)
let self = this;
let luckyData = luckysheet.getAllSheets();
let data = luckyData[0].data
for (let i = 2; i < data.length; i++) {
let itemName = data[i][0] && data[i][0].v && data[i][0].v.replaceAll(/\s+/g, "");
let row = data[i];
row.forEach((item, index) => {
let cName = data[1] && data[1][index] && data[1][index].v;
if (cName && itemName) {
let v = self.setDataV(itemName, cName, newData)
if (v) {
data[i][index].bg = 'red'
v = Number(Number(v).toFixed(2))
data[i][index].v = data[i][index].v || '' + `(${v})`
data[i][index].m = data[i][index].m || '' + `(${v})`
}
}
})
}
luckysheet.destroy();
luckyData[0].celldata = luckysheet.transToCellData(data);
delete luckyData[0].data;
luckysheet.create({ luckysheet.create({
container: 'luckysheet', // luckysheet is the container id container: "luckysheet", // Luckysheet 的容器元素 ID
data:lucksheetfile.sheets, lang: 'zh',
title:lucksheetfile.info.name, data: luckyData // Excel 数据
userInfo:lucksheetfile.info.name.creator
}); });
},
handleExport: debounce(function () {
let vm = this;
exportExcel(luckysheet.getAllSheets(), vm.luckysheetTitle);
}, 500),
uploadFile(file) {
let vm = this;
vm.loading = true;
LuckyExcel.transformExcelToLucky(file, function (exportJson) {
vm.createluckysheet1(exportJson)
// vm.createPZ(exportJson)
});
},
createluckysheet1(exportJson) {
let vm = this;
vm.loading = false;
exportJson.sheets.forEach(sheet => {
let transToData = luckysheet.transToData(sheet.celldata);
// 一级类别列
let firstIndex = transToData[1].findIndex((item, index) => item === null && index > 0);
// 二级类别列
let twoIndex = firstIndex + 1;
// 部门分类
let depClass = twoIndex + 1;
// 编码列
let codeIndex = transToData[1].findIndex((item) => !!(item && item.v && item.v.includes && item.v.includes('编码')));
let depIndex = transToData[1].findIndex((item) => !!(item && item.v && item.v.includes && item.v.includes('部门')));
let setCell = (v) => { return { ct: { fa: '@', t: 's' }, m: v, qp: 1, tb: 1, v: v } }
transToData[1][firstIndex] = setCell('一级类别');
transToData[1][twoIndex] = setCell('二级类别');
transToData[1][depClass] = setCell('部门分类');
for (let i = 2; i < transToData.length; i++) {
let row = transToData[i];
// 设置部门分类
row[depIndex] && row[depIndex].v && (row[depClass] = setCell(vm.classification[row[depIndex].v.replaceAll(' ', '')]))
//设置一二级分类
if (row[codeIndex] && row[codeIndex].v) {
let getName = (code) => vm.codeRule.find(item => !!item.codeStartsWithS.find(codeStart => code.startsWith(codeStart)))
let name = getName(String(row[codeIndex].v))
if (name) {
name.oneLevel && (row[firstIndex] = setCell(name.oneLevel));
name.twoLevel && (row[twoIndex] = setCell(name.twoLevel));
} else {
row[firstIndex] = setCell('其他材料')
}
}
}
sheet.celldata = luckysheet.transToCellData(transToData);
}) })
// let obj = {} vm.luckysheetTitle = exportJson.info.name;
// let setting = { vm.createluckysheet(exportJson.sheets)
// '本月手工分配工资表': { },
// startRow:2 createluckysheet(data) {
// } let vm = this;
// } luckysheet.destroy();
// lucksheetfile.sheets[2] luckysheet.create({
// lucksheetfile.sheets.map(el => { container: "luckysheet", // Luckysheet 的容器元素 ID
// let data = luckysheet.transToData(el.celldata) lang: 'zh',
// obj[el.name] = transitionJson1(data,setting[el.name]) title: vm.luckysheetTitle, // Excel 文件名
// }) data, // Excel 数据
let data = luckysheet.transToData(lucksheetfile.sheets[1].celldata) });
console.log(lucksheetfile.sheets[1].celldata) },
async crpz() {
// 第一步取数
let data = getyyData(luckysheet.getAllSheets(), '011704')
// 第二步调后端
let borrow = JSON.parse(JSON.stringify(data)).filter(item => {
item.is_debit = 0;
item.mining = '011704'
if (!item.classary.includes('计提') || !item.name.includes('研发')) {
return true
}
})
let loan = JSON.parse(JSON.stringify(data)).filter(item => {
item.is_debit = 1;
item.mining = '011704'
if (!item.name.includes('(') || !item.name.includes('')) {
return true
}
})
let objJson = { borrow, loan }
let res = await getyy(JSON.stringify(objJson))
// 第三步 生成凭证
let template = await getSuppliesTemplate(1248)
let createData = tzcCreateData(
JSON.parse(template.rows[0].templateContent)[0],
transformJson(res.data),
luckysheet,
13112312312,
'2024-06'
);
luckysheet.create({
container: "luckysheet", // Luckysheet 的容器元素 ID
title: '凭证', // Excel 文件名
allowEdit: false, //作用:是否允许前台编辑
data: createData, // Excel 数据
showinfobar: false, //是否显示顶部名称栏
lang: "zh",
});
},
async tsdlcrpz() {
// 第一步取数
let data = getyyData(luckysheet.getAllSheets(), '010101')
let objJson = {
borrow: data.map(item => { return { ...item, is_debit: 0, mining: '010101' } })
}
// 第二步调接口处理res
let res = await getyy(JSON.stringify(objJson))
let loan = [{
is_debit: 1,
money: 0,
name: '其他贷方金额',
account_code: '2241005',
classary: "转电力分配",
mining: "010101"
}]
res.data.borrow.forEach(item => {
if (item.account_code) {
loan[0].money = (Number(item.money) + Number(loan[0].money)).toFixed(2);
}
})
res.data.loan = loan;
// 第三步 生成凭证
let template = await getSuppliesTemplate(1248)
let createData = tzcCreateData(
JSON.parse(template.rows[0].templateContent)[0],
transformJson(res.data),
luckysheet,
13112312312,
'2024-06'
);
luckysheet.create({
container: "luckysheet", // Luckysheet 的容器元素 ID
title: '凭证', // Excel 文件名
allowEdit: false, //作用:是否允许前台编辑
data: createData, // Excel 数据
showinfobar: false, //是否显示顶部名称栏
lang: "zh",
});
},
// 林西电力生成凭证
lxdlcrpz() {
let data = getyyData(luckysheet.getAllSheets(), '011704')
let newdata = JSON.parse(JSON.stringify(data))
newdata.forEach((item, i) => {
item.name = item.name.replace(/\s+/g, '')
if (!(/^\d/.test(item.name))) {
item.fj = /^\d/.test(newdata[i - 1].name) ? newdata[i - 1].name : newdata[i - 1].fj
}
})
console.log(newdata)
console.log(data) console.log(data)
console.log(transitionJson1(data)) },
// let newObj = {} jxdfxt() {
// Object.keys(obj).forEach(key => { let data = luckysheet.getAllSheets().find(item => {
// obj[key].forEach(el => { return ['填写数据'].includes(item.name)
// if(!newObj[key]){ })
// newObj[key] = {} let arr = []
// } data.data.forEach(row => {
// newObj[key][el['单位名称']] = el let obj = {}
// }) row.forEach((ceil, i) => {
// }) if (ceil && ceil.v) {
// console.log(newObj) obj[i] = ceil.v
} else if (ceil && ceil.ct && ceil.ct.s) {
obj[i] = ceil.ct.s.map(item => item.v).join('')
}
})
if (Object.keys(obj).length) {
arr.push(obj)
}
})
let yiKey = {};
let erKey = {};
let newaasss = []
let shuju = []
let sj = (old, yi, er) => {
if (!old[1]) { old[1] = newaasss[newaasss.length - 1]['原始数据'][1] }
newaasss.push({ '原始数据': old, '第一级数据': yi, '第二级数据': er })
let obj = {}
Object.entries(old).forEach(([key, value]) => {
let yikey = yi[key];
let erkey = er[key];
if (yikey && erkey) {
let objkey = `${yikey}-${erkey}`
objkey = objkey.replaceAll('"', '').replace(/[\r\n]/g, "").replaceAll(" ", '')
obj[objkey] = value;
} else if (yikey && !erkey) {
yikey = yikey.replaceAll('"', '').replaceAll("", '').replaceAll(" ", '')
obj[yikey] = value;
} else if (erkey && !yikey) {
let xy = ''
for (let i = key; i > 0; i--) {
if (yi[i]) {
xy = `${yi[i]}`
break;
}
}
let objkey = ''
if (xy) {
objkey = `${xy}-${erkey}`
} else {
objkey = erkey
}
objkey = objkey.replaceAll('"', '').replace(/[\r\n]/g, "").replaceAll(" ", '')
obj[objkey] = value;
}
})
if (Object.keys(obj).length) {
shuju.push(obj)
}
}
for (let rowi = 3; rowi < arr.length; rowi++) {
let RowObj = arr[rowi];
if (RowObj[1] && RowObj[1] !== '项目') {
if (!arr[rowi - 2][0] || arr[rowi - 2][0] === '序号') {
yiKey = arr[rowi - 2];
}
erKey = arr[rowi - 1];
}
if (RowObj[0] !== '序号' && (RowObj[0] || RowObj[2])) {
sj(RowObj, yiKey, erKey)
}
}
let obj = {}
shuju.forEach(item => {
Object.keys(item).forEach(key => {
obj[key] = null
})
}); });
// LuckyExcel.transformExcelToLucky(evt, let zui = shuju.map(item => {
// function(exportJson, luckysheetfile){ return Object.assign(JSON.parse(JSON.stringify(obj)), item)
// console.log(exportJson) })
// console.log(luckysheetfile) let transformedJSON = {};
// }, Object.keys(obj).forEach((key, index) => {
// function(error){ transformedJSON[key] = `a${index + 1}`;
// // handle error if any thrown });
// }) let transformed = zui.map(el => {
//前台加载数据 return Object.fromEntries(Object.entries(el).map(([key, value]) => {
}, return [transformedJSON[key], value];
// 导出 }))
handleExport: debounce(function () { })
// handleExport console.log(transformedJSON)
exportExcel(luckysheet.getAllSheets(), '新建XLSX工作表'); console.log(transformed)
}, 500),
// 切换模版
changeTemplate(){},
} }
} },
function debounce(func, delay) { mounted() {
let timer; this.createluckysheet([{}])
return function () { this.loading = true;
const context = this; department('011704').then(res => {
const args = arguments; this.loading = false;
clearTimeout(timer); if (Array.isArray(res)) {
timer = setTimeout(function () { this.classification = Object.fromEntries(res.map(item => [item.name, item.nameType]))
func.apply(context, args); }
}, delay); }).catch(() => {
}; this.loading = false;
})
},
} }
</script> </script>
<style scoped>
.box {
box-sizing: border-box;
padding: 20px;
position: absolute;
width: 100%;
height: 100%;
left: 0;
top: 0;
display: flex;
flex-direction: column;
}
</style>
<!--todo 中间工资汇总-->
<template> <template>
<div class="app-container" :class="{'app-container1':views.luckysheet}" v-loading="views.loading"> <div class="app-container" :class="{'app-container1':views.luckysheet}" v-loading="views.loading">
<template v-if="!views.luckysheet"> <template v-if="!views.luckysheet">
<el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px" @submit.native.prevent> <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px" @submit.native.prevent>
<el-form-item label="标题" prop="historyName"> <el-form-item label="年月" prop="wageMonth">
<el-input <el-date-picker v-model="queryParams.wageMonth"
v-model="queryParams.historyName" placeholder="请输入标题" clearable size="small" size="mini"
@keyup.enter.native="handleQuery" value-format="yyyy-MM" type="month" placeholder="选择月"></el-date-picker>
/>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
...@@ -71,10 +71,10 @@ ...@@ -71,10 +71,10 @@
</style> </style>
<script> <script>
import { exportExcel } from "../../../../../public/exportExcel" import { exportExcel } from "/public/exportExcel"
import { debounce } from '@/utils' import { debounce } from '@/utils'
import { conversionGetWagesData, conversionUpdate, getWagesDataById } from "@/api/conversion" import { conversionGetWagesData, conversionUpdate, getWagesDataById } from "@/api/conversion"
import { transformJson, tzcCreateData ,gettransformJson} from "@/utils/tzc" import { transformJson, tzcCreateData, newGettransformJson } from "@/utils/tzc"
import { getSuppliesTemplate } from "@/api/ruoyi-myLuckyexcel/myluckyexcel" import { getSuppliesTemplate } from "@/api/ruoyi-myLuckyexcel/myluckyexcel"
export default { export default {
...@@ -86,7 +86,7 @@ export default { ...@@ -86,7 +86,7 @@ export default {
total: 0, total: 0,
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
historyName: null, wageMonth: null,
}, },
views: { views: {
//编辑还是查看 look 查看 //编辑还是查看 look 查看
...@@ -128,7 +128,7 @@ export default { ...@@ -128,7 +128,7 @@ export default {
let template = await getSuppliesTemplate(1248) let template = await getSuppliesTemplate(1248)
let optionsData = JSON.parse(template.rows[0].templateContent); let optionsData = JSON.parse(template.rows[0].templateContent);
// 获取数据 // 获取数据
let objks = await gettransformJson(luckysheet.getAllSheets()) let objks = await newGettransformJson(luckysheet.getAllSheets())
this.views.loading = false; this.views.loading = false;
//value 手机号 //value 手机号
//this.currentRow.yearMonth 年月 //this.currentRow.yearMonth 年月
...@@ -142,7 +142,6 @@ export default { ...@@ -142,7 +142,6 @@ export default {
showinfobar: false, //是否显示顶部名称栏 showinfobar: false, //是否显示顶部名称栏
lang: "zh", lang: "zh",
}) })
}, },
// 修改保存 // 修改保存
save () { save () {
...@@ -227,7 +226,9 @@ export default { ...@@ -227,7 +226,9 @@ export default {
// 列表查询 // 列表查询
async getList () { async getList () {
this.views.loading = true this.views.loading = true
let asyncConversionGetWagesData = await conversionGetWagesData(this.queryParams) let obj = {...this.queryParams};
delete obj.total;
let asyncConversionGetWagesData = await conversionGetWagesData(obj)
this.views.loading = false this.views.loading = false
this.historydataList = asyncConversionGetWagesData?.rows || 0 this.historydataList = asyncConversionGetWagesData?.rows || 0
this.queryParams.total = asyncConversionGetWagesData?.total || 0 this.queryParams.total = asyncConversionGetWagesData?.total || 0
......
...@@ -33,10 +33,19 @@ module.exports = { ...@@ -33,10 +33,19 @@ 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://192.168.0.61:8080`, // target: `http://192.168.0.192:8080`,
// target: `http://192.168.0.61:8080`,
// target: `http://192.168.111.228:8080`,
// target: `http://192.168.3.247:8080`,
// target: `http://192.168.3.241:8080`,
// target: `http://192.168.0.99:8080`, // target: `http://192.168.0.99:8080`,
//target: `http://192.168.3.247:8080`,
// target: `http://localhost:5001`, // target: `http://localhost:5001`,
//target: `http://192.168.111.226:8080`, target: `http://192.168.111.226:8080`,
changeOrigin: true, changeOrigin: true,
pathRewrite: { pathRewrite: {
......
package com.ruoyi.system.controller;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.system.model.wages.dao.AsiccDAO;
import com.ruoyi.system.model.wages.vo.AsiccVo;
import com.ruoyi.system.service.AsiccSuppliesService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
/**
* @author haiwe
* @date 2024/7/5
*/
@RestController
@RequestMapping("/asicc")
@RequiredArgsConstructor
public class AsiccSuppliesController {
private final AsiccSuppliesService asiccSuppliesService;
@PostMapping("/data")
public AjaxResult getData(@RequestBody AsiccDAO asiccDAO){
Map<String,Object> voList = asiccSuppliesService.getData(asiccDAO);
if (!voList.isEmpty()) {
return AjaxResult.success(voList);
}else{
return AjaxResult.error();
}
}
}
package com.ruoyi.system.mapper;
import com.ruoyi.system.domain.ActSupplies;
import com.ruoyi.system.domain.ActSuppliesImportCleaningAcc;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author haiwe
* @date 2024/7/5
*/
public interface AsiccSuppliesMapper {
List<ActSuppliesImportCleaningAcc> selectByCodeAndMineId(@Param("mineId") String mineId, @Param("code") String code);
ActSupplies selectByCodes(@Param("codes") String codes);
ActSupplies selectByOneLevel(@Param("oneLevel") String oneLevel);
}
package com.ruoyi.system.model.wages.dao;
import com.ruoyi.system.domain.ActSuppliesImportCleaningAcc;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
/**
* @author haiwe
* @date 2024/7/5
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class AsiccDAO {
private String mineId;
private List<String> codes;
}
package com.ruoyi.system.model.wages.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author haiwe
* @date 2024/7/5
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class AsiccVo {
private String oneLevel;
private String twoLevel;
}
package com.ruoyi.system.service;
import com.ruoyi.system.model.wages.dao.AsiccDAO;
import com.ruoyi.system.model.wages.vo.AsiccVo;
import java.util.List;
import java.util.Map;
/**
* @author haiwe
* @date 2024/7/5
*/
public interface AsiccSuppliesService {
Map<String,Object> getData(AsiccDAO asiccDAO);
}
package com.ruoyi.system.service.impl;
import com.ruoyi.system.domain.ActSupplies;
import com.ruoyi.system.domain.ActSuppliesImportCleaningAcc;
import com.ruoyi.system.mapper.AsiccSuppliesMapper;
import com.ruoyi.system.model.wages.dao.AsiccDAO;
import com.ruoyi.system.model.wages.vo.AsiccVo;
import com.ruoyi.system.service.AsiccSuppliesService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.*;
/**
* @author haiwe
* @date 2024/7/5
*/
@Service
@RequiredArgsConstructor
public class AsiccSuppliesServiceImpl implements AsiccSuppliesService {
private final AsiccSuppliesMapper asiccSuppliesMapper;
@Override
public Map<String,Object> getData(AsiccDAO asiccDAO) {
Map<String,Object> map = new HashMap<>();
List<String> codesList = asiccDAO.getCodes();
String mineId = asiccDAO.getMineId();
for (String code : codesList) {
List<String> voList = new ArrayList<>();
List<ActSuppliesImportCleaningAcc> accList = asiccSuppliesMapper.selectByCodeAndMineId(mineId,code);
accList.forEach(acc -> {
String codes = acc.getCategories();
ActSupplies supplies = asiccSuppliesMapper.selectByCodes(codes);
Long level = supplies.getLevel();
if (level == 1) {
String suppliesName = supplies.getSuppliesName();
voList.add(suppliesName);
voList.add(null);
map.put(code, voList);
}else if (level == 2){
//此时为二级分类名称
String twoSupplies = supplies.getSuppliesName();
//获取对应的一级分类
String oneLevel = supplies.getOneLevel();
ActSupplies suppliesInfo = asiccSuppliesMapper.selectByOneLevel(oneLevel);
String oneSupplies = suppliesInfo.getSuppliesName();
voList.add(oneSupplies);
voList.add(twoSupplies);
map.put(code, voList);
}
});
}
return map;
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.AsiccSuppliesMapper">
<resultMap type="com.ruoyi.system.domain.ActSupplies" id="ActSuppliesResult">
<result property="id" column="id" />
<result property="oneLevel" column="one_level" />
<result property="twoLevel" column="two_level" />
<result property="threeLevel" column="three_level" />
<result property="codes" column="codes"/>
<result property="suppliesName" column="supplies_name" />
<result property="level" column="level" />
<result property="status" column="status" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
</resultMap>
<select id="selectByCodeAndMineId" resultType="com.ruoyi.system.domain.ActSuppliesImportCleaningAcc">
select distinct(categories)
from act_supplies_import_cleaning_copy1
where ssk_id = #{mineId} and code_column = #{code}
</select>
<select id="selectByCodes" resultMap="ActSuppliesResult">
select one_level, two_level, three_level, codes, supplies_name, level, status
from act_supplies
where codes = #{codes}
</select>
<select id="selectByOneLevel" resultMap="ActSuppliesResult">
select one_level, two_level, three_level, codes, supplies_name, level, status
from act_supplies
where one_level = #{oneLevel} and level = 1
</select>
</mapper>
\ No newline at end of file
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