Commit 137782ef authored by tangzhichun's avatar tangzhichun Committed by 刘_震

增加材料明细模版、中间工资汇总

parent 7c77feb6
import { setXRow } from "@/utils/tzc";
/**
* @function 林西矿工资数据处理
* @description
* @param jsonData 导入的数据
* @return 处理后的luckysheet的一维数组
* @author cwl 2024年6月17日11:37:45
*/
export function machLxGzdata(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;
var r = dList[dName];
item.r = r;
item.v = item.value;
});
// 对比 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 importTSExcel(data) {
return request({
url: "/power/dExcel",
method: "post",
headers: {
"Content-Type": "multipart/form-data",
},
data: data,
});
}
\ No newline at end of file
import request from '@/utils/request'
// 特殊表(填写数据)的导入接口
export function power(data) {
return request({
url: '/power',
method: 'post',
data: data
})
}
export function powerall(data) {
return request({
url: '/power/all',
method: 'post',
headers: {
"Content-Type": "application/json",
},
data: data
})
}
//展示前端所需要数据的接口
export function powerdata(data) {
return request({
url: `/power?mineId=${data.mineId} &date=${data.date}`,
method: 'get',
// params: data
})
}
// 电力表的对照表的导入接口
export function cExcel(data) {
return request({
url: '/power/cExcel',
method: 'post',
headers: {
"Content-Type": "multipart/form-data",
},
data: data
})
}
// 电力表的详细数据的导入接口
export function dExcel(data) {
return request({
url: '/power/dExcel',
method: 'post',
headers: {
"Content-Type": "multipart/form-data",
},
data: data
})
}
......@@ -325,3 +325,19 @@ export function listMyluckyexcel(query) {
// params: query
// })
// }
export function asiccData(data) {
return request({
url: 'asicc/getData',
method: "post",
data,
});
}
export function asmInfoSave(data) {
return request({
url: 'asmInfo/save',
method: "post",
data,
});
}
.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
This diff is collapsed.
......@@ -10,6 +10,7 @@ export function MoneyMine(money, DepartmentColumns, name, materianame, c, Compos
k++;
}
}
// luckysheet.insertRow(5, { number: 6 });
//部门 因为部门再第0列 所以条件 obj.c不满足 需要单独写出来
let Department = c.flat().filter(obj => obj.c !== undefined && obj.c == DepartmentColumns && obj.r > headRow)
......
......@@ -9,20 +9,6 @@ export function Tangshan(money, c, name, CompositeTable, headRow, researchs) {
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)) {
......@@ -60,6 +46,9 @@ export function Tangshan(money, c, name, CompositeTable, headRow, researchs) {
if (obj.v.name.includes('洗煤')) {
obj.v.name = '基本生产-洗煤'
}
if (obj.v.name=='办公费用') {
obj.v.name = '管理费用-'
}
if (obj.v.name == '其他业务成本') {
obj.v.name += '-厂区服务'
}
......
export function Tangshan(money, c, name, CompositeTable, headRow) {
//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++;
}
}
function findValueInArray(arr, value) {
for (let obj of arr) {
if (JSON.stringify(obj).includes(value)) {
return obj;
}
}
return null;
}
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.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 (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];
}
}
}
duplicateData.forEach(obj=>{
if(obj.r>8){
obj.c=10
}
})
let duplicateDatas = {
duplicateData: duplicateData,
CompositeTable: CompositeTable
}
return duplicateDatas
}
\ No newline at end of file
export function Tangshan(money,code,codess,CompositeTable,Department,classify,headRow) {
let newobj = []
//把这三个数组push到newobj里
newobj.unshift(money);
newobj.unshift(code);
newobj.unshift(Department);
//跟材料表的数据对比 如果编码一样 则把导入表的列数换成模板的列数
codess.forEach(c => {
let codeLength = String(c.code).length;
let codeToCompare = String(c.code).substring(0, codeLength);
newobj[1].forEach(column => {
let columnIdString = String(column.v.v);
let idToMatch = columnIdString.substring(0, codeLength);
if (idToMatch === codeToCompare) {
column.ccc = c.oneLevel * 1;
}
});
});
//按照部门划分,去找到他所在科室分类
newobj = newobj.map(subArr => {
return subArr.map(obj => {
let v = obj.v.v;
for (let key in classify) {
if (classify[key].includes(v)) {
obj.v.m = key;
obj.v.v = key;
obj.v.name = key
obj.whether = true
return obj;
}
}
obj.whether = false
return obj;
});
});
newobj[2].forEach((item, i) => {
if ('name' in newobj[0][i].v) {
item.v.name = newobj[0][i].v.name;
}
});
//直接luck表格初始化 替换数据
//找到所在的行数,按照 -的前后去找,前面是标题,后面是标题后的小分类,如选煤,洗煤等
CompositeTable[0].data = luckysheet.transToData(CompositeTable[0]["celldata"])
newobj[0].forEach((item) => {
if (item.v.m !== undefined) {
let index = item.v.m.indexOf("-");
if (index !== -1) {
let substrBeforeDash = item.v.m.slice(0, index);
let DepartColumns = CompositeTable[0]["celldata"].flat().find(obj =>
obj.v && obj.v.v && typeof obj.v.v === 'string' && obj.v.v.includes(item.v.m.slice(0, index))
);
if (DepartColumns && DepartColumns.r) {
let index = item.v.m.indexOf("-")
if (index !== -1) {
let substrAfterDash = item.v.m.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;
default:
// 默认情况
}
}
}
}
}
});
//把原来分类找不到的放到其他数据类型中,最后一列其他列中
newobj[1].forEach((item, i) => {
if (item.ccc && newobj[0][i].r < 8) {
item.c = item.ccc;
delete item.ccc;
} else {
item.c = 10;
}
});
//金额列和行是原先导入表的行列 要替换掉模板表的行列
newobj[0].forEach((item, i) => {
if (item.whether) {
newobj[2][i].r = item.r;
newobj[2][i].c = newobj[1][i].c;
newobj[2][i].v.v = Number(newobj[2][i].v.v);
} else {
newobj[2][i].r = '';
newobj[2][i].c = '';
}
});
//同一个单元格的数据 金额相加。
let i = headRow - 1
let duplicateData=[]
let seen = new Map();
// 根据行列信息合并重复数据并记录索引
for (let obj of newobj[2]) {
i += 1;
let key = obj.r + ',' + obj.c;
if (seen.has(key)) {
let existingObj = seen.get(key);
existingObj.v.v += obj.v.v;
existingObj.v.m = (parseInt(existingObj.v.m) + parseInt(obj.v.m)).toString();
existingObj.index.push(newobj[1][i].r);
} else {
obj.index = [newobj[1][i].r];
seen.set(key, obj);
}
}
// 将合并后的数据放入 duplicateData 数组
for (let obj of seen.values()) {
if (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)
}
};
});
// 替换金额所在列和行相同的模板表中的数据
//金额所在列和行,去模板表中查找,如果行列一致则替换
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 duplicateDatas={
duplicateData:duplicateData,
CompositeTable:CompositeTable
}
return duplicateDatas
}
\ No newline at end of file
This diff is collapsed.
//todo 各个矿需要那些凭证的配置
/*
todo 需要提取 {classary, money,name,}
{
classary: 凭证分录摘要 // todo 必须 用于classary
sheetsName: 在那个表里面取 //todo 必须
oldColumnName: 金额列是那一列 todo 用于开始行 金额列 必须 用于money
itemName: 项目名是那一列 todo 项目列 非必须 默认是项目 用于name
jishuhang:是number 代表第几个合计的,todo 用结束行 //非必需默认是0
isFilterStartsWith: 项目是否包含数字 // todo 默认过滤掉 布尔值 非必需
}
*/
const tsk = [
{ "classary": "转电力分配", "oldColumnName": "合计金额", "sheetsName": "3月" },
{
classary: '提取一孩补贴',
oldColumnName: '独生子女补贴',
sheetsName: '待分析工资明细表(也可作为提取一孩、班中餐等附件)',//从那个表里面取
jishuhang: 2, //结束行是第几个合计
},
{
classary: '提取班中餐',
oldColumnName: '班中餐',
sheetsName: '待分析工资明细表(也可作为提取一孩、班中餐等附件)',//从那个表里面取
jishuhang: 2, //结束行是第几个合计
},
{
classary: '提取基本养老保险',
oldColumnName: '金额',
sheetsName: '基本养老保险分配明细表',//从那个表里面取
},
{
classary: '提取补充养老保险',
oldColumnName: '金额',
sheetsName: '补充养老保险分配明细表',//从那个表里面取
},
{
classary: '提取包干工资',
oldColumnName: '金额',
sheetsName: '提取包干',//从那个表里面取
},
{
classary: '提取工伤保险',
oldColumnName: '金额',
sheetsName: '工伤保险',//从那个表里面取
},
{
classary: '提取补充医疗保险',
oldColumnName: '金额',
sheetsName: '补充医疗保险',//从那个表里面取
},
{
classary: '提取基本医疗保险',
oldColumnName: '金额',
sheetsName: '基本医疗保险',//从那个表里面取
},
{
classary: '提取工会经费',
oldColumnName: '工会经费',
sheetsName: '计提工会经费',//从那个表里面取
},
{
classary: '提取住房公积金',
oldColumnName: '金额',
sheetsName: '住房公积金',//从那个表里面取
},
{
classary: '提取职工教育经费',
oldColumnName: '职工教育经费',
sheetsName: '提职工教育经费',//从那个表里面取
},
{
classary: '提取失业保险',
oldColumnName: '金额',
sheetsName: '失业保险',//从那个表里面取
},
]
const lxk = [
{ "classary": "转电力分配", "oldColumnName": "电费", "sheetsName": "附件4-电力分配" ,isFilterStartsWith:false},
{ "classary": "基本养老保险费用结转待分析", "oldColumnName": "金额", "sheetsName": "分配养老保险" },
{ "classary": "补充养老保险结转待分析", "oldColumnName": "金额", "sheetsName": "分配年金" },
{ "classary": "计提基本养老保险", "oldColumnName": "金额", "sheetsName": "分配养老保险" },
{ "classary": "计提补充养老保险", "oldColumnName": "金额", "sheetsName": "分配年金" },
{
"classary": "工伤保险结转待分析",
"oldColumnName": "金额",
"sheetsName": "分配工伤保险"
},
{
"classary": "补充医疗保险结转待分析",
"oldColumnName": "金额",
"sheetsName": "分配补充医疗"
},
{
"classary": "基本医疗保险结转待分析",
"oldColumnName": "金额",
"sheetsName": "分配基本医疗"
},
{
"classary": "失业保险结转待分析",
"oldColumnName": "金额",
"sheetsName": "分配失业保险"
},
{
"classary": "计提工伤保险",
"oldColumnName": "金额",
"sheetsName": "分配工伤保险"
},
{
"classary": "计提补充医疗保险",
"oldColumnName": "金额",
"sheetsName": "分配补充医疗"
},
{
"classary": "计提失业保险",
"oldColumnName": "金额",
"sheetsName": "分配失业保险"
},
{
"classary": "计提基本医疗保险",
"oldColumnName": "金额",
"sheetsName": "分配基本医疗"
},
{
"classary": "应付包干工资结转包干工资",
isFilterStartsWith:false,
"oldColumnName": "工资",
"sheetsName": "工资-提取"
},
{
"classary": "计提职工教育经费",
"oldColumnName": "职工教育经费",
"sheetsName": "计提职教费"
},
{
"classary": "计提工会经费",
"oldColumnName": "工会经费",
"sheetsName": "计提工会经费"
},
{
"classary": "营养餐",
"oldColumnName": "营养餐",
"sheetsName": "待分析工资明细表"
},
{
"classary": "工资",
"oldColumnName": "工资",
"sheetsName": "待分析工资明细表"
},
{
"classary": "月票",
"oldColumnName": "月票",
"sheetsName": "待分析工资明细表"
},
{
"classary": "生日补贴",
"oldColumnName": "生日补贴",
"sheetsName": "待分析工资明细表"
},
{
"classary": "班中餐",
"oldColumnName": "班中餐",
"sheetsName": "待分析工资明细表"
},
{
"classary": "保健费",
"oldColumnName": "保健费",
"sheetsName": "待分析工资明细表"
},
{
"classary": "独生子女补贴",
"oldColumnName": "独生子女补贴",
"sheetsName": "待分析工资明细表"
},
{
"classary": "困补",
"oldColumnName": "困补",
"sheetsName": "待分析工资明细表"
},
{
"classary": "司机出车补助",
"oldColumnName": "司机出车补助",
"sheetsName": "待分析工资明细表"
},
{
"classary": "工资分配",
"oldColumnName": "合计",
"sheetsName": "工资分配明细表",
jishuhang: 1, //结束行是第几个合计
},
/* todo 特殊处理
{
"classary": "核销待分析工资明细",
"oldColumnName": "发放金额",
itemName:'发放项目',
"sheetsName": "核销劳保工资"
},
{ "classary": "计提补充养老保险(电厂转入人员)", "oldColumnName": "金额", "sheetsName": "没有不取" },
{
"classary": "伙食补贴",
"oldColumnName": "伙食补贴",
"sheetsName": "待分析工资明细表"
},
{
"classary": "2023年集团员工数学素养提升培训",
"sheetsName": "随资费用",
},
{
"classary": "自救器培训(安全)",
"oldColumnName": "金额",
"sheetsName": ""
},
{
"classary": "入矿新工培训教师讲课费(安全)",
"oldColumnName": "金额",
"sheetsName": ""
},
{
"classary": "基层区科班组群监员、急救员培训(安全)",
"oldColumnName": "金额",
"sheetsName": ""
},
{
"classary": "2023年安管人员培训(安全)",
"oldColumnName": "金额",
"sheetsName": ""
},
{
"classary": "2023年班组长培训(安全)",
"oldColumnName": "金额",
"sheetsName": ""
},
{
"classary": "2023年特种作业人员培训(安全)",
"oldColumnName": "金额",
"sheetsName": ""
},
{
"classary": "2023年12月女工协管员业务培训(安全)",
"oldColumnName": "金额",
"sheetsName": ""
},
{
"classary": "2023年度宣传报道先进单位、宣传报道积极分子、宣传报道先进个人表彰",
"oldColumnName": "金额",
"sheetsName": ""
},
{
"classary": "2023年岗位描述、手指口述比赛表彰",
"oldColumnName": "金额",
"sheetsName": ""
},
{
"classary": "警示教育中心讲解费",
"oldColumnName": "金额",
"sheetsName": ""
},
{
"classary": "2023年度安全文化建设、精神文明创建评委会成员及工作人员表彰",
"oldColumnName": "金额",
"sheetsName": ""
},
{
"classary": "《启明星》杂志第二十期稿费",
"oldColumnName": "金额",
"sheetsName": ""
},
{
"classary": "2023年四季度通讯稿、广播稿费",
"oldColumnName": "金额",
"sheetsName": ""
},
*/
]
const tsdl = [
{ "classary": "转电力分配", "oldColumnName": "合计金额", "sheetsName": "3月" },
]
const ALL = {
tsk,//唐山矿
lxk,//林西矿
tsdl//唐山电力
}
let kNameID = {
'010101':'tsk',
'011704':'lxk',
'010102':'tsdl',
}
export { kNameID }
export function getMineProofConfig (kName = 'tsk') {
return ALL[kName]
}
......@@ -164,7 +164,11 @@ export default {
{
name: '宏丰',
id: '011502'
}
},
{
name: '云飞',
id: '011504'
},
],
types: [
{
......
<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($event, {
name: '林西矿',
id: '011704'
})">
<el-option v-for="item in depss.filter(item => [1248,1280].includes(item.id))" :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 @click="handleClose()">取 消</el-button>
<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>
<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="mineId" size="mini" filterable placeholder="请选择单位">
<el-option v-for="dict in deptOptions" :key="dict.dictValue" :label="dict.dictLabel"
:value="dict.dictValue"></el-option>
</el-select>
</el-form-item>
<el-form-item label="类型" prop="name">
<el-select v-model="type" ref="mySelect" size="mini" filterable placeholder="请选择单位">
<el-option v-for="dict in typeOptions" :key="dict.dictValue" :label="dict.dictLabel"
:value="dict.dictValue"></el-option>
</el-select>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<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 size="mini" icon="el-icon-download" type="primary">导入</el-button> </el-upload>
</el-col>
</el-row>
<div v-if="showMask" class="mask">
<div class="loading-spinner"></div>
</div>
<el-table v-loading="loading" :data="comList">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="单位" prop="mineId" :formatter="deptFormat" width="150">
</el-table-column>
<el-table-column label="类型" prop="type" :formatter="typeFormat" width="120" />
<el-table-column label="版本" prop="versionId" :show-overflow-tooltip="true" width="100" />
<el-table-column label="a1" prop="a1" :show-overflow-tooltip="true" width="150" />
<el-table-column label="a2" prop="a2" :show-overflow-tooltip="true" width="150" />
<el-table-column label="a3" prop="a3" :show-overflow-tooltip="true" width="150" />
<el-table-column label="a4" prop="a4" :show-overflow-tooltip="true" width="150" />
<el-table-column label="a5" prop="a5" :show-overflow-tooltip="true" width="150" />
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize" @pagination="getList" />
</div>
</template>
<script>
import {
compilationExcel, getWagesCompilationList
} from "@/api/conversion/index";
var modify = false;
var that;
export default {
name: "Mymodule",
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 对照表数据
comList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
roleName: undefined,
roleKey: undefined,
status: undefined
},
// 表单参数
form: {},
comList: [],
mineId: '010101',
type: '0',
//单位数据字典
deptOptions: [{ dictLabel: '唐山矿', dictValue: '010101' }, { dictLabel: '林西矿', dictValue: '011704' }],
//单位数据字典
typeOptions: [{ dictLabel: '工资总表', dictValue: '0' }, { dictLabel: '财务用表', dictValue: '1' }, { dictLabel: '保险总表', dictValue: '2' }, { dictLabel: '保险研发表', dictValue: '3' }],
};
},
created() {
that = this;
this.getList();
},
methods: {
// 单位字典翻译
deptFormat(row, column) {
return this.selectDictLabel(this.deptOptions, row.mineId);
},
// 类型字典翻译
typeFormat(row, column) {
return this.selectDictLabel(this.typeOptions, row.type);
},
getList() {
this.loading = true;
getWagesCompilationList().then(
response => {
this.comList = response;
this.loading = false;
}
);
},
handleFileChange(evt) {
//组装后台接口数据
var param = new FormData();
param.append("file", evt);
param.append("mineId", this.mineId);//矿id
param.append("type", this.type);//类型
compilationExcel(param).then((res) => {
//导入成功
if (res.code == 200) {
that.getList();
this.$message.success("导入成功!");
} else {
this.$message.error("后台数据导入失败!");
}
});
}
}
};
</script>
// 给唐山汇总表放数据
function setDataV(itemName, CName, data, CConfig, itemConfig) {
let getValue = (arr, keys) => {
if (!arr || !keys){return null}
let shu = arr[0];
if(shu['类别'] === '合计'){
shu = arr.find((item) => item['编码'] === '50000')
}
if(!shu){return null}
let key = ''
if (keys.length === 1) {
key = keys[0]
} else if (keys.length > 1){
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 (shu && key && shu[key]) {
return shu[key]
} else { return null }
}
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]) {
if(item === '合计'){
console.log(data[item],1111)
}
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
}
}
export function setTs(TSdL, luckyData, CConfig, itemConfig) {
//第一步先处理后端返回的数据
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]
}
}
});
})
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, "");
if(itemName === '合计'){break}
let row = data[i];
row.forEach((item, index) => {
let cName = data[1] && data[1][index] && data[1][index].v;
if (cName && itemName) {
let v = setDataV(itemName, cName, newData, CConfig, itemConfig)
if (v) {
data[i][index].bg = 'red'
v = Number(Number(v).toFixed(2))
data[i][index].v = v
data[i][index].m = v
}
}
})
}
luckysheet.destroy();
luckyData[0].celldata = luckysheet.transToCellData(data);
luckyData[0].calcChain = [];
let as = luckyData[0].celldata.filter(
(item) => item.v.f
);
as.forEach((item) => {
let sum = {
index: luckyData[0].index,
r: item.r,
c: item.c,
};
luckyData[0].calcChain.push(sum);
});
delete luckyData[0].data;
luckysheet.create({
container: "luckysheet", // Luckysheet 的容器元素 ID
lang: 'zh',
data: luckyData, // Excel 数据
forceCalculation:true
});
// luckysheet.refreshFormula();
}
export function jxdfxt(luckysheets) {
let data = luckysheets.find(item => {
return ['填写数据'].includes(item.name)
})
data.data = luckysheet.transToData(data.celldata)
let arr = []
data.data.forEach(row => {
let obj = {}
row.forEach((ceil, i) => {
if (ceil && ceil.v) {
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
})
});
let zui = shuju.map(item => {
return Object.assign(JSON.parse(JSON.stringify(obj)), item)
})
let transformedJSON = {};
Object.keys(obj).forEach((key, index) => {
transformedJSON[key] = `a${index + 1}`;
});
let transformed = zui.map(el => {
return Object.fromEntries(Object.entries(el).map(([key, value]) => {
return [transformedJSON[key], value];
}))
})
let swapped = {};
for (const key in transformedJSON) {
swapped[transformedJSON[key]] = key;
}
let trans = {
transformedJSON: swapped,
transformed: transformed
}
return trans
}
This diff is collapsed.
<template>
<testComponent
:kobj = ' { name: "林西矿", id: "011704" }'
:depssfilter = '[1282]'
></testComponent>
</template>
<script>
//1.先使用import导入你要在该组件中使用的子组件
import testComponent from './index.vue'
export default {
//2.然后,在components中写入子组件
components: {testComponent},
}
</script>
<template>
<testComponent :kobj='{ name: "唐山矿", id: "010101" }' :depssfilter='[1281]' :CConfig="CConfig" :itemConfig="itemConfig" ></testComponent>
</template>
<script>
//1.先使用import导入你要在该组件中使用的子组件
import testComponent from './index.vue'
export default {
//2.然后,在components中写入子组件
components: { testComponent },
data() {
return {
CConfig: {
'加收管理费': ['电费-基本'],
'照明电量': ["电量-峰", "电量-平", "电量-尖", "电量-谷", '电量-合计'],//前四个有就不填,都没有填电量-合计
'电光电费': ["电费-峰", "电费-平", "电费-尖", "电费-谷", '电费-合计'],
'峰段电量': ['电量-峰'],
'峰段金额': ['电费-峰'],
'平段电量': ['电量-平'],
'平段金额': ['电费-平'],
'谷段电量': ['电量-谷'],
'谷段金额': ['电费-谷'],
},
itemConfig : {
'基本生产,原煤': ['原煤生产'],
'基本生产,洗煤': ['洗煤厂(高压)'],
'制造费用,原煤': ['矿井水净化', '地面维修', '联合建筑', '厂区服务', '供水供暖'],//todo 缺少
'管理用电': ['综合办', '工会楼', '小车房', '绿化保洁'],
'其他业务成本,住宿': ['住宿餐饮(集体宿舍)'],
'其他业务成本,餐饮': ['住宿餐饮(东门食堂)', ' 住宿餐饮(风井食堂)'],
'其他业务成本,厂区服务,集团大院': ['集团公司大院'],
'内部结算单位,开滦宾馆': ['开滦宾馆高压'],
'金属加工厂': ['金属制修中心'],
'内部结算单位,社区': ['社区小车房', '离退科', '开滦实业公司'],
'内部结算单位,运输部': ['运输部'],
'外界电费,鲸喜惠(唐山永芊企业管理服务有限公司原唐山飞佳轩便利店)': ['鲸喜惠(唐山永芊企业管理服务有限公司'],
'劳服公司': ['合计'],
}
}
}
}
</script>
import {powerdata} from "@/api/power/power.js";
//celldata:表格的celldata的数据 electricity:后端返回的数据 expectedAttributes:需要的数据的中文名字 transform:哪些数据需要加起来
export function Summary(celldata,electricity,expectedAttributes,transform){
let obj = []
let newarray = []
// 每个属性名代表的意思
let keyobj = [
{
key: 'a11',
value: '加收管理费'
},
{
key: 'a10',
value: '照明电量'
},
{
key: 'a6',
value: '电光电费'
},
{
key: 'a7',
value: '峰段电量'
},
{
key: 'a13',
value: '峰段金额'
},
{
key: 'a8',
value: '平段电量'
},
{
key: 'a14',
value: '平段金额'
},
{
key: 'a9',
value: '谷段电量'
},
{
key: 'a15',
value: '谷段金额'
},
]
electricity.data.forEach(es => {
//第一步:把后端返回的数据的对照表的数据的-去除掉 并放入到 cleanedEsDatas中
let foundAttributes = [];
let cleanedEsDatas = {};
Object.entries(es.datas).forEach(([key, v]) => {
cleanedEsDatas[key] = v && v.replace && v.replace(/-/g, '')
});
//第二步:根据后端返回的类别名称跟cleanedEsDatas这个对应上 看中文的数据 在英文里叫什么名字 比如a1=类别
expectedAttributes.forEach((attrName, index) => {
let foundKey = Object.keys(cleanedEsDatas).find(key => cleanedEsDatas[key] === attrName);
if (foundKey) {
foundAttributes[index] = foundKey;
} else {
foundAttributes[index] = null;
}
});
//根据对应上的关系 取详细表所有数据取数并放到一个新数组obj中
es.details.forEach(element => {
let funct = {
key: element[foundAttributes[0]],
a11: element[foundAttributes[1]],
a10: element[foundAttributes[2]],
a16: element[foundAttributes[3]],
a7: element[foundAttributes[4]],
a13: element[foundAttributes[5]],
a8: element[foundAttributes[6]],
a14: element[foundAttributes[7]],
a9: element[foundAttributes[8]],
a15: element[foundAttributes[9]],
r: '',
}
//合并的单元格数据 这种格式 transform = [ {host: '管理部门', child: '综合办' }] key代表类别名称 如果他跟child一样 证明需要合并
transform.forEach(item => {
if (funct.key==item.child) {
funct.key = item.host;
}
});
obj.push(funct)
});
})
//先根据类别名称跟汇总表的项目挂上钩 找到r行,然后根据每个属性名代表的意思循环obj找到对应的列 创建一个新的数据 只包含了 行列和金额
keyobj.forEach(keycell => {
let couloum = celldata.filter(item => item.v && item.v.v && item.v.v == keycell.value)[0].c
obj.forEach(es => {
es.r = celldata.filter(item => item.v && item.v.v && item.v.v == es.key)[0]?.r
let flag1 = ['照明电量', '电光电费'].includes(keycell.value) && !(es.a7 && es.a8 && es.a9)
if (flag1 || !['照明电量', '电光电费'].includes(keycell.value)) {
let fun = {
r: es.r,
c: couloum,
value: es[keycell.key]
}
if (fun.r && fun.value && fun.value > 0) {
newarray.push(fun)
}
}
})
})
//把行,列代表k值 如果有重复的就加起来
let duplicateData = [];
let seen = new Map();
// // 根据行列信息合并重复数据并记录索引
for (let obj of newarray) {
let key = obj.r + ',' + obj.c;
if (seen.has(key)) {
let existingObj = seen.get(key);
existingObj.value= parseFloat(existingObj.value) + parseFloat(obj.value);
existingObj.value= (parseInt(existingObj.value) + parseInt(obj.value)).toString();
} else {
seen.set(key, obj);
}
}
// 将合并后的数据放入 duplicateData 数组
for (let obj of seen.values()) {
if (Math.abs(obj.value) > 0 || Math.abs(parseInt(obj.value)) > 0) {
duplicateData.push(obj);
}
}
//合并 把处理完的数据合并起来
celldata.forEach(item=>{
duplicateData.forEach(obj=>{
if(obj.r==item.r && obj.c== item.c){
item.v.v=obj.value
item.v.m=obj.value
}
})
})
return celldata
}
\ No newline at end of file
<script>
import {
getSuppliesTemplate,
} from "@/api/ruoyi-myLuckyexcel/myluckyexcel";
import { exportExcel } from "../../../../public/exportExcel";
var fileName = "新建XLSX工作表"; //定义表名
export default {
data() {
return {
mine:'',
date: '',
selectedOption: [
{
name: '东欢坨矿',
id: '010102'
},
{
name: '范各庄',
id: '011701'
},
{
name: '林西矿',
id: '011704'
},
{
name: '吕矿',
id: '011702'
},
{
name: '唐山矿',
id: '010101'
},
{
name: '单侯煤矿',
id: '011204'
},
{
name: '钱家营矿',
id: '010105'
},
{
name: '宏丰',
id: '011502'
},
{
name: '云飞',
id: '011504'
},
{
name: '中润',
id: '011706'
},
],
};
},
created() {
//刷新页面时进行的操作
this.getList();
},
mounted() {
this.init();
fileName = "新建XLSX工作表";
},
methods: {
/** 页面刷新时展示的数据*/
getList() {
getSuppliesTemplate('1285').then(response => {
luckysheet.create({
container: "luckysheet", // Luckysheet 的容器元素 ID
title: fileName, // Excel 文件名
data: JSON.parse(response.rows[0].templateContent), // Excel 数据
showinfobar: false, //是否显示顶部名称栏
lang: "zh",
});
})
},
/** Luckyexcel文档 */
init() {
let options = {
container: "luckysheet", //luckysheet为容器id
title: "",
lang: "zh",
showinfobar: false,
data: [
{
name: "sheet1", //工作表名称
color: "", //工作表颜色
index: 0, //工作表索引
status: 1, //激活状态
order: 0, //工作表的下标
hide: 0, //是否隐藏
row: 50, //行数
column: 20, //列数
defaultRowHeight: 19, //自定义行高
defaultColWidth: 73, //自定义列宽
celldata: [], //初始化使用的单元格数据
config: {
merge: {}, //合并单元格
rowlen: {}, //表格行高
columnlen: {}, //表格列宽
rowhidden: {}, //隐藏行
colhidden: {}, //隐藏列
borderInfo: {}, //边框
authority: {}, //工作表保护
},
},
],
};
luckysheet.create(options);
},
handleSelectChange() {
console.log(this.date, this.mine)
},
handleExport: debounce(function () {
// 导出
exportExcel(luckysheet.getAllSheets(), fileName);
}, 500),
},
};
// debounce函数定义
function debounce(func, delay) {
let timer;
return function () {
const context = this;
const args = arguments;
clearTimeout(timer);
timer = setTimeout(function () {
func.apply(context, args);
}, delay);
};
}
</script>
<template>
<div class="app-container">
<el-form ref="queryForm" size="small" :inline="true" label-width="68px">
<el-form-item label="所属矿">
<el-select v-model="mine" placeholder="请选择">
<el-option v-for="item in selectedOption" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="时间" prop="date">
<el-date-picker v-model="date" value-format="yyyy-MM" type="month" placeholder="选择月">
</el-date-picker>
</el-form-item>
<el-button size="small" @click="handleSelectChange" :disabled="!date || !mine">确认</el-button>
</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-row>
<!-- luckysheet容器 -->
<div id="luckysheet"
style="margin: 0px; padding: 0px; position: absolute; width: 100%; height:80vh; z-index: 0">
</div>
</div>
</template>
export function ex(luckysheet) {
let list = []
for (let index = 1; index < luckysheet.length; index++) {
let funct = {}
luckysheet[index].forEach((item, e) => {
if (item &&item.v && (e == 5 || e == 9 || e == 10)) {
let name = luckysheet[0][e].v;
funct[name] = item.v;
}
});
list.push(funct);
}
console.log(list)
}
\ No newline at end of file
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="模板ID" prop="tempId">
<el-input
v-model="queryParams.tempId"
placeholder="请输入模板ID"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="规则名称" prop="roleName">
<el-input
v-model="queryParams.roleName"
placeholder="请输入规则名称"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable size="small">
<el-option
v-for="dict in statusOptions"
:key="dict.dictValue"
:label="dict.dictLabel"
:value="dict.dictValue"
/>
</el-select>
</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-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['system:suppliesrole:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['system:suppliesrole:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['system:suppliesrole:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['system:suppliesrole:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="suppliesroleList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="ID" align="center" prop="id" />
<el-table-column label="模板ID" align="center" prop="tempId" />
<el-table-column label="规则名称" align="center" prop="roleName" />
<el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:suppliesrole:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:suppliesrole:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改导入规则对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="模板ID" prop="tempId">
<el-select v-model="form.tempId" filterable placeholder="请选择关联项" >
<el-option
v-for="option in options"
:key="option.templateName"
:label="option.templateName"
:value="option.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="规则名称" prop="roleName">
<el-input v-model="form.roleName" placeholder="请输入规则名称" />
</el-form-item>
<el-form-item label="状态">
<el-radio-group v-model="form.status">
<el-radio
v-for="dict in statusOptions"
:key="dict.dictValue"
:label="parseInt(dict.dictValue)"
>{{dict.dictLabel}}</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listSuppliesrole, getSuppliesrole, delSuppliesrole, addSuppliesrole, updateSuppliesrole, exportSuppliesrole,saveSid } from "@/api/system/suppliesrole";
export default {
name: "Suppliesrole",
components: {
},
data() {
return {
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 导入规则表格数据
suppliesroleList: [],
options:[],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 状态数据字典
statusOptions: [],
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
tempId: null,
roleName: null,
status: null,
},
// 表单参数
form: {},
// 表单校验
rules: {
tempId: [
{ required: true, message: "关联id不能为空", trigger: "change" }
]
}
};
},
created() {
this.getList();
this.getnameid();
this.getDicts("sys_normal_disable").then(response => {
this.statusOptions = response.data;
});
},
methods: {
/** 查询上级id*/
getnameid(){
saveSid().then(response =>{
this.options = response.rows;
})
},
/** 查询导入规则列表 */
getList() {
this.loading = true;
listSuppliesrole(this.queryParams).then(response => {
this.suppliesroleList = response.rows;
this.total = response.total;
this.loading = false;
});
},
// 岗位状态字典翻译
statusFormat(row, column) {
return this.selectDictLabel(this.statusOptions, row.status);
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: null,
tempId: null,
roleName: null,
status: 0,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加导入规则";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getSuppliesrole(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改导入规则";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateSuppliesrole(this.form).then(response => {
this.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addSuppliesrole(this.form).then(response => {
this.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$confirm('是否确认删除导入规则编号为"' + ids + '"的数据项?', "警告", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(function() {
return delSuppliesrole(ids);
}).then(() => {
this.getList();
this.msgSuccess("删除成功");
})
},
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams;
this.$confirm('是否确认导出所有导入规则数据项?', "警告", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(function() {
return exportSuppliesrole(queryParams);
}).then(response => {
this.download(response.msg);
})
}
}
};
</script>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment