Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
K
klck
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
位宇华
klck
Commits
f9c3f9ca
Commit
f9c3f9ca
authored
1 year ago
by
xiangjiaojunxp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
物料转换
parent
12e41918
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
993 additions
and
439 deletions
+993
-439
ruoyi-ui/src/views/system/supplies/index.vue
ruoyi-ui/src/views/system/supplies/index.vue
+993
-439
No files found.
ruoyi-ui/src/views/system/supplies/index.vue
View file @
f9c3f9ca
...
...
@@ -29,7 +29,6 @@
icon=
"el-icon-upload2"
size=
"mini"
@
click=
"handleExport"
v-hasPermi=
"['ruoyi-myexcel:myexcel:export']"
>
导出
</el-button>
</el-col>
<el-col
:span=
"1.5"
>
...
...
@@ -39,6 +38,7 @@
ref=
"upload"
:before-upload=
"handleFileChange"
action=
''
accept=
'.xlsx'
:limit=
"1"
:file-list=
"fileList"
:disabled=
"disableNextButton"
...
...
@@ -61,20 +61,23 @@
<
script
>
import
{
getSuppliesTemplate
,
listSuppliesTemplate
,
roleList
,
materialConvert
,
roleListid
}
from
"
@/api/ruoyi-myLuckyexcel/myluckyexcel
"
;
import
{
addInsert
}
from
"
@/api/system/historydata
"
/*import luckysheet from 'luckysheet'*/
import
LuckyExcel
from
'
luckyexcel
'
//导入库export.js 这个文件是es6的,不能在普通的HTML文件直接引入js文件(虽然都是js文件,但是有区别,具体请百度es6与es5)!需要把es6转es5才可以直接引入使用!
import
{
exportExcel
}
from
'
../../../../public/exportExcel
'
;
import
{
v4
as
uuidv4
}
from
'
uuid
'
;
var
fileName
=
"
新建XLSX工作表
"
;
//定义表名
var
rule
=
[];
var
tempId
;
var
roleId
;
var
uuid1
;
export
default
{
name
:
"
Mymodule
"
,
data
()
{
return
{
uuid
:
''
,
//弹出页面的表名
from_name
:
""
,
// 是否显示弹出层
...
...
@@ -87,7 +90,8 @@ export default {
luckyrule
:[],
depss
:[],
// 表单参数
form
:
{},
from
:
{},
dfrom
:{},
// 查询参数
queryParams
:
{
status
:
0
...
...
@@ -111,7 +115,6 @@ export default {
this
.
depss
=
response
.
rows
;
});
},
/** 下拉选和页面luckysheet绑定 */
handleOptionChange
()
{
...
...
@@ -120,6 +123,8 @@ export default {
//根据选中的下拉选项值获取相应的信息
getSuppliesTemplate
(
this
.
selectedOption
).
then
(
response
=>
{
tempId
=
this
.
selectedOption
;
uuid1
=
this
.
uuid
=
uuidv4
().
substring
(
0
,
8
);
console
.
log
(
this
.
uuid
);
const
sysSupplies
=
response
.
rows
;
this
.
luckysheetData
=
sysSupplies
[
0
].
templateContent
;
//将接收到的json存到json_data中
...
...
@@ -152,6 +157,7 @@ export default {
}
this
.
disableNextButton
=
this
.
selectedRule
===
''
;
roleListid
(
this
.
selectedRule
).
then
(
response
=>
{
roleId
=
this
.
selectedRule
;
rule
=
response
.
rows
;
});
...
...
@@ -172,6 +178,7 @@ export default {
this
.
disableNextButton
=
''
;
this
.
selectedRule
=
''
;
this
.
luckyrule
=
[];
uuid1
=
''
;
//刷新luckysheet表格
this
.
init
();
},
...
...
@@ -235,91 +242,395 @@ export default {
luckysheet
.
create
(
options
);
},
/** 导入事件*/
handleFileChange
(
evt
)
{
if
(
this
.
disableNextButton
)
{
this
.
$message
.
warning
(
"
请先选择模板再进行导入!
"
);
return
false
;
// 如果按钮被禁用,提前返回,避免执行下一步操作
}
let
name
=
evt
.
name
let
suffixArr
=
name
.
split
(
'
.
'
),
suffix
=
suffixArr
[
suffixArr
.
length
-
1
]
if
(
suffix
!==
'
xlsx
'
)
{
this
.
$message
({
message
:
"
上传格式不正确,请上传xlsx格式文件
"
,
type
:
"
warning
"
});
return
}
LuckyExcel
.
transformExcelToLucky
(
evt
,
function
(
exportJson
)
{
if
(
exportJson
.
sheets
===
null
||
exportJson
.
sheets
.
length
===
0
)
{
this
.
$message
({
message
:
"
导入失败,请检查上传的文件是否正确
"
,
type
:
"
warning
"
async
handleFileChange
(
evt
)
{
let
exx
;
const
cons
=
new
Promise
((
resolve
,
reject
)
=>
{
LuckyExcel
.
transformExcelToLucky
(
evt
,
exportJson
=>
{
exx
=
exportJson
;
resolve
(
exx
);
});
});
return
try
{
const
exportJson
=
await
cons
;
await
this
.
summary
(
exportJson
);
console
.
log
(
'
summary 执行完毕
'
);
this
.
submit
(
exportJson
);
}
catch
(
Error
)
{
this
.
$message
({
message
:
Error
.
message
,
type
:
"
error
"
});
console
.
log
(
Error
.
message
);
console
.
log
(
"
这里是最外面的地方
"
);
}
},
/** 物料转换汇总到页面*/
summary
(
exportJson
){
let
sysRulez
;
let
sysRules
;
let
sysConver
;
let
value
=
[];
let
map
=
new
Map
();
//获取物料转换的规则
//
let
data
;
//获取规则 sysRulez是物料转换 sysRules是数据汇总规则 13
for
(
let
i
=
0
;
i
<
rule
.
length
;
i
++
){
if
(
rule
[
i
].
convertStatus
=
==
1
){
if
(
rule
[
i
].
convertStatus
==
1
){
sysRulez
=
JSON
.
parse
(
rule
[
i
].
detailContent
);
}
if
(
rule
[
i
].
convertStatus
===
2
){
if
(
rule
[
i
].
convertStatus
==
2
){
if
(
parseInt
(
rule
[
i
].
detailYS
)
===
1
){
sysConver
=
JSON
.
parse
(
rule
[
i
].
detailContent
)
}
else
{
sysRules
=
JSON
.
parse
(
rule
[
i
].
detailContent
);
}
}
}
try
{
//获取物料转换的sheet表
let
data
=
window
.
luckysheet
.
transToData
(
exportJson
.
sheets
[
sysRulez
[
0
].
se
].
celldata
);
window
.
luckysheet
.
set
let
key_i
=
sysRulez
[
0
].
ce
;
data
=
window
.
luckysheet
.
transToData
(
exportJson
.
sheets
[
sysRulez
[
0
].
se
].
celldata
);
}
catch
(
err
){
throw
new
Error
(
"
导入失败,所选文件或规则有误
"
);
}
//获取物料转换中导入表的列,用来获取物料名
let
key_i
=
parseInt
(
sysRulez
[
0
].
ce
);
//获取物料转换的数据
for
(
let
i
=
0
;
i
<
sysRules
.
length
;
i
++
){
//value.push(data[sysRules[i].re][sysRules[i].ce].m);
value
.
push
(
sysRules
[
i
].
ce
);
}
//console.log("value的值为:"+value);
return
new
Promise
((
resolve
,
reject
)
=>
{
const
asyncTasks
=
[];
switch
(
tempId
)
{
case
2
:
{
let
departmentMap
=
new
Map
();
let
departments
=
[];
departmentMap
.
set
(
'
原煤
'
,
[
'
综一队
'
,
'
综二队
'
,
'
综三队
'
,
'
开一区
'
,
'
开二区
'
,
'
准备一区
'
,
'
准备二区
'
,
'
掘进一区
'
,
'
掘进二区
'
,
'
掘进三区
'
,
'
开拓项目部
'
,
'
巷修区
'
,
'
井运区
'
,
'
通风区
'
,
'
机电运转中心
'
,
'
皮带运输中心
'
]);
departmentMap
.
set
(
'
风选煤
'
,
'
洗煤厂
'
);
departmentMap
.
set
(
'
制造费用
'
,
[
'
机电检修中心
'
,
'
地测科
'
,
'
设备管理科
'
,
'
旧品利用中心
'
,
'
机修加工中心
'
,
'
网络安全与信息通讯中心
'
,
'
保卫科
'
,
'
煤质管理科
'
,
'
迁建科
'
,
'
综合服务中心
'
]);
departmentMap
.
set
(
'
管理费用
'
,
[
'
财务部
'
,
'
综合办公室
'
,
'
纪委监察科
'
,
'
工会
'
,
'
团委
'
,
'
安全管理部
'
,
'
经营管理部
'
,
'
党委组织部(人力资源部)
'
,
'
党委宣传部
'
,
'
生产技术部
'
,
'
机电运输部
'
,
'
科协
'
,
'
节能环保法律办公室
'
,
'
党委组织部
'
,
'
人力资源部
'
]);
try
{
for
(
let
i
=
parseFloat
(
sysRulez
[
0
].
re
)
+
1
;
i
<
data
.
length
;
i
++
)
{
let
n
=
parseInt
(
sysRules
[
0
].
ce
)
+
2
;
if
(
data
[
i
][
key_i
]
!=
null
&&
data
[
i
][
n
]
!=
null
)
{
let
num
=
data
[
i
][
n
].
m
;
//根据得到的num,找到对应的key
let
keyy
=
getKeyByValue
(
departmentMap
,
num
);
departments
.
push
(
keyy
);
}
else
{
departments
.
push
(
null
);
}
}
console
.
log
(
departments
);
console
.
log
(
departmentMap
);
}
catch
(
err
){
throw
new
Error
(
"
导入失败,导入文件与模板规则不匹
"
);
}
for
(
let
key
of
departmentMap
.
keys
())
{
console
.
log
(
key
);
let
map
=
new
Map
();
let
smallMat
=
[];
//console.log(departments);
try
{
for
(
let
i
=
parseFloat
(
sysRulez
[
0
].
re
)
+
1
;
i
<
data
.
length
;
i
++
)
{
let
smallMat
=
[];
for
(
let
i
=
parseInt
(
sysRulez
[
0
].
re
)
+
1
;
i
<
data
.
length
;
i
++
){
if
(
data
[
i
][
key_i
]
!=
null
){
let
num
=
data
[
i
][
key_i
].
m
;
if
(
data
[
i
][
key_i
]
!=
null
&&
departments
[
i
-
1
]
===
key
)
{
let
num
=
data
[
i
][
key_i
].
m
;
smallMat
.
push
(
num
);
}
else
{
smallMat
.
push
(
null
);
}
}
}
catch
(
err
){
throw
new
Error
(
"
导入失败,导入文件与模板规则不匹
"
);
}
//console.log(smallMat);
asyncTasks
.
push
(
new
Promise
((
innerResolve
,
innerReject
)
=>
{
const
allNull
=
smallMat
.
every
(
item
=>
item
===
null
);
if
(
allNull
)
{
throw
new
Error
(
"
导入失败,导入文件错误,所选文件与模板规则不匹
"
);
}
materialConvert
(
smallMat
)
.
then
(
response
=>
{
let
array
=
response
.
rows
;
//console.log(array);
//luckysheet.setCellValue(12, 1, {bg:"#FF0000"})
for
(
let
i
=
parseFloat
(
sysRulez
[
0
].
re
)
+
1
;
i
<
data
.
length
;
i
++
)
{
let
values
=
[];
if
(
data
[
i
][
13
]
!=
null
&&
departments
[
i
-
1
]
===
key
&&
data
[
i
][
key_i
]
!=
null
)
{
for
(
let
j
=
0
;
j
<
value
.
length
;
j
++
)
{
try
{
let
a
=
parseFloat
(
data
[
i
][
value
[
j
]].
v
);
values
.
push
(
a
);
}
catch
(
err
){
throw
new
Error
(
"
导入失败,导入文件不匹
"
);
}
}
//插入多个value的值
let
index
=
smallMat
.
indexOf
(
data
[
i
][
key_i
].
m
);
let
key
=
array
[
index
];
if
(
map
.
has
(
key
))
{
let
oldValues
=
map
.
get
(
key
);
for
(
let
i
=
0
;
i
<
values
.
length
;
i
++
)
{
values
[
i
]
=
parseFloat
(
parseFloat
(
values
[
i
]
+
oldValues
[
i
]).
toFixed
(
2
));
}
map
.
set
(
key
,
values
);
}
else
{
map
.
set
(
key
,
values
);
}
}
}
//循环得到汇总结果
console
.
log
(
map
);
if
(
map
.
size
===
0
)
{
throw
new
Error
(
"
导入失败,导入文件错误
"
);
}
let
cells
;
let
warn
;
let
rowss
=
luckysheet
.
find
(
key
);
if
(
rowss
.
length
!=
0
)
{
for
(
let
i
=
0
;
i
<
sysRules
.
length
;
i
++
)
{
map
.
forEach
((
value
,
key
)
=>
{
let
searchResult
=
luckysheet
.
find
(
key
);
if
(
searchResult
.
length
!=
0
&&
key
!=
null
)
{
cells
=
searchResult
[
0
].
column
;
luckysheet
.
setCellValue
(
rowss
[
0
].
row
,
cells
,
value
[
i
]);
luckysheet
.
setCellValue
(
rowss
[
0
].
row
,
cells
,
{
"
ct
"
:
{
"
fa
"
:
"
General
"
,
"
t
"
:
"
n
"
}
});
}
else
{
warn
++
;
}
});
}
}
if
(
warn
/
sysRules
.
length
===
map
.
size
)
{
throw
new
Error
(
"
导入文件与所选模板规则不匹配
"
);
}
else
if
(
warn
>
0
)
{
this
.
$message
({
message
:
"
还有
"
+
warn
/
sysRules
.
length
+
"
条大类未能匹配到
"
,
type
:
"
warning
"
});
}
resolve
(
response
.
rows
);
innerResolve
();
// 标记当前异步任务完成
}).
catch
(
Error
=>
{
console
.
log
(
"
这里是单个异步请求出错处
"
);
//必须加,不能删除
innerReject
(
Error
);
// 异步请求出错
});
}));
}
}
break
;
case
6
:
{
let
deps
=
[];
let
exps
=
[];
let
map
=
new
Map
();
let
smallMat
=
[];
try
{
for
(
let
i
=
parseFloat
(
sysRulez
[
0
].
re
)
+
1
;
i
<
data
.
length
;
i
++
)
{
if
(
data
[
i
][
key_i
]
!=
null
)
{
let
num
=
data
[
i
][
key_i
].
m
;
let
dep
=
data
[
i
][
1
].
m
;
let
exp
=
data
[
i
][
14
].
m
;
smallMat
.
push
(
num
);
deps
.
push
(
dep
);
exps
.
push
(
exp
);
}
else
{
smallMat
.
push
(
null
);
deps
.
push
(
null
);
exps
.
push
(
null
);
}
}
}
catch
(
err
){
throw
new
Error
(
"
导入失败,导入文件与模板规则不匹
"
);
}
materialConvert
(
smallMat
).
then
(
response
=>
{
debugger
//console.log(smallMat);
asyncTasks
.
push
(
new
Promise
((
innerResolve
,
innerReject
)
=>
{
const
allNull
=
smallMat
.
every
(
item
=>
item
===
null
);
const
allNull1
=
deps
.
every
(
item
=>
item
===
null
);
const
allNull2
=
exps
.
every
(
item
=>
item
===
null
);
if
(
allNull
||
allNull1
||
allNull2
)
{
throw
new
Error
(
"
导入失败,导入文件错误,所选文件与模板规则不匹
"
);
}
materialConvert
(
smallMat
)
.
then
(
response
=>
{
let
array
=
response
.
rows
;
//console.log(array);
//luckysheet.setCellValue(12, 1, {bg:"#FF0000"})
for
(
let
i
=
parseInt
(
sysRulez
[
0
].
re
)
+
1
;
i
<
data
.
length
;
i
++
)
{
for
(
let
i
=
parseFloat
(
sysRulez
[
0
].
re
)
+
1
,
k
=
0
;
i
<
data
.
length
;
i
++
,
k
++
)
{
let
values
=
[];
if
(
data
[
i
][
key_i
]
!=
null
){
for
(
let
j
=
0
;
j
<
value
.
length
;
j
++
)
{
if
(
data
[
i
][
key_i
]
!=
null
)
{
for
(
let
j
=
0
;
j
<
value
.
length
;
j
++
)
{
try
{
let
a
=
parseFloat
(
data
[
i
][
value
[
j
]].
v
);
if
(
isNaN
(
a
)){
a
=
0
;
}
values
.
push
(
a
);
}
catch
(
err
){
throw
new
Error
(
"
导入失败,导入文件不匹
"
);
}
}
//插入多个value的值
let
key
=
exps
[
k
]
+
'
/
'
+
deps
[
k
]
+
'
/
'
+
array
[
k
];
if
(
map
.
has
(
key
))
{
let
oldValues
=
map
.
get
(
key
);
for
(
let
i
=
0
;
i
<
values
.
length
;
i
++
)
{
values
[
i
]
=
parseFloat
(
parseFloat
(
values
[
i
]
+
oldValues
[
i
]).
toFixed
(
2
));
}
map
.
set
(
key
,
values
);
}
else
{
map
.
set
(
key
,
values
);
}
}
}
//循环得到汇总结果
console
.
log
(
map
);
if
(
map
.
size
===
0
)
{
throw
new
Error
(
"
导入失败,导入文件错误
"
);
}
//循环得到汇总结果
let
cells
;
let
rowws
;
let
con
=
0
;
let
warn
=
0
;
for
(
let
i
=
0
;
i
<
sysRules
.
length
;
i
++
)
{
map
.
forEach
((
value
,
key
)
=>
{
const
suffixArr
=
key
.
split
(
'
/
'
),
mat
=
suffixArr
[
2
],
depp
=
suffixArr
[
1
],
expp
=
suffixArr
[
0
];
//console.log(expp);console.log(depp);console.log(mat);
let
searchResult
=
luckysheet
.
find
(
expp
);
if
(
searchResult
.
length
!==
0
)
{
rowws
=
searchResult
[
0
].
row
;
for
(
let
i
=
1
;
i
<
10000000000000000000000000
;
i
++
)
{
let
n
=
rowws
+
i
;
let
gg
=
luckysheet
.
getCellValue
(
n
,
0
);
if
(
gg
!==
null
)
{
con
=
rowws
+
i
;
break
;
}
}
searchResult
=
luckysheet
.
find
(
depp
);
if
(
searchResult
.
length
!==
0
){
let
k
=
0
;
let
r
;
for
(
let
i
=
0
;
i
<
searchResult
.
length
;
i
++
){
r
=
searchResult
[
i
].
row
;
if
(
r
<
con
&&
r
>=
rowws
){
k
=
1
;
break
;
}
}
if
(
k
===
1
){
let
matResult
=
luckysheet
.
find
(
mat
);
if
(
matResult
.
length
!==
0
&&
mat
!=
null
)
{
cells
=
matResult
[
0
].
column
;
luckysheet
.
setCellValue
(
r
,
cells
,
value
[
i
]);
luckysheet
.
setCellValue
(
r
,
cells
,
{
"
ct
"
:
{
"
fa
"
:
"
General
"
,
"
t
"
:
"
n
"
}
});
}
else
{
warn
++
;
}
}
else
{
warn
++
;
}
}
}
else
{
warn
++
;
}
});
if
(
warn
/
sysRules
.
length
===
map
.
size
)
{
throw
new
Error
(
"
导入文件与所选模板规则不匹配
"
);
}
else
if
(
warn
>
0
)
{
this
.
$message
({
message
:
"
还有
"
+
warn
/
sysRules
.
length
+
"
条大类未能匹配到
"
,
type
:
"
warning
"
});
}
resolve
(
response
.
rows
);
innerResolve
();
// 标记当前异步任务完成
}
}).
catch
(
Error
=>
{
console
.
log
(
"
这里是单个异步请求出错处
"
);
//必须加,不能删除
innerReject
(
Error
);
// 异步请求出错
});
}));
}
break
;
case
1
:
{
let
map
=
new
Map
();
let
smallMat
=
[];
for
(
let
i
=
parseInt
(
sysRulez
[
0
].
re
)
+
1
;
i
<
data
.
length
;
i
++
)
{
if
(
data
[
i
][
key_i
]
!=
null
)
{
let
num
=
data
[
i
][
key_i
].
m
;
smallMat
.
push
(
num
);
}
else
{
smallMat
.
push
(
null
);
}
}
for
(
let
j
=
0
;
j
<
value
.
length
;
j
++
)
{
if
(
data
[
sysRulez
[
0
].
re
][
value
[
j
]]
!=
null
)
{
let
num
=
data
[
sysRulez
[
0
].
re
][
value
[
j
]].
m
;
smallMat
.
push
(
num
);
}
else
{
smallMat
.
push
(
null
);
}
}
//console.log(smallMat);
asyncTasks
.
push
(
new
Promise
((
innerResolve
,
innerReject
)
=>
{
const
allNull
=
smallMat
.
every
(
item
=>
item
===
null
);
if
(
allNull
)
{
throw
new
Error
(
"
导入失败,导入文件错误,所选文件与模板规则不匹
"
);
}
materialConvert
(
smallMat
)
.
then
(
response
=>
{
let
array
=
response
.
rows
;
//console.log(array);
//luckysheet.setCellValue(12, 1, {bg:"#FF0000"})
for
(
let
i
=
parseInt
(
sysRulez
[
0
].
re
)
+
1
;
i
<
data
.
length
;
i
++
)
{
let
values
=
[];
if
(
data
[
i
][
key_i
]
!=
null
)
{
for
(
let
j
=
0
;
j
<
value
.
length
;
j
++
)
{
try
{
let
a
=
parseFloat
(
data
[
i
][
value
[
j
]].
v
);
if
(
isNaN
(
a
))
{
a
=
0
;
}
values
.
push
(
a
);
}
catch
(
err
){
throw
new
Error
(
"
导入失败,导入文件不匹
"
);
}
}
}
else
{
break
;
}
//插入多个value的值
let
index
=
smallMat
.
indexOf
(
data
[
i
][
key_i
].
m
);
let
key
=
array
[
index
];
key
=
key
+
"
-
"
+
data
[
i
][
sysRulez
[
1
].
ce
].
m
if
(
map
.
has
(
key
))
{
let
oldValues
=
map
.
get
(
key
);
for
(
let
i
=
0
;
i
<
values
.
length
;
i
++
)
{
for
(
let
i
=
0
;
i
<
values
.
length
;
i
++
)
{
values
[
i
]
=
parseFloat
(
parseFloat
(
parseFloat
(
values
[
i
])
+
parseFloat
(
oldValues
[
i
])).
toFixed
(
2
));
}
map
.
set
(
key
,
values
);
...
...
@@ -327,54 +638,181 @@ export default {
map
.
set
(
key
,
values
);
}
}
if
(
map
.
size
===
0
)
{
throw
new
Error
(
"
导入失败,导入文件错误
"
);
}
//循环得到汇总结果
let
row
;
let
con
;
let
warn
=
0
;
console
.
log
(
map
);
for
(
let
i
=
0
;
i
<
sysRules
.
length
;
i
++
)
{
map
.
forEach
((
value
,
key
)
=>
{
let
splitElement
=
key
.
split
(
"
-
"
);
row
=
luckysheet
.
find
(
splitElement
[
0
])[
0
].
row
if
(
splitElement
[
1
]
!==
'
undefined
'
)
{
let
find
=
luckysheet
.
find
(
splitElement
[
1
])[
0
];
if
(
find
!=
null
&&
luckysheet
.
getCellValue
(
find
.
row
,
0
)
===
0
)
{
// for (let i =0;i
<
value
.
length
;
i
++
)
{
// luckysheet.setCellValue(sysConver[i].rt, sysConver[i].ct, value[i]);
// luckysheet.setCellValue(sysConver[i].rt, sysConver[i].ct, {
// "ct": {
// "fa": "General",
// "t": "n"
// }
// });
// }
let
matchingCells
=
[];
let
name
=
data
[
sysRules
[
i
].
re
][
sysRules
[
i
].
ce
].
m
if
(
name
.
includes
(
"
洗煤
"
))
{
row
=
sysRules
[
i
].
rt
;
con
=
parseInt
(
sysRules
[
i
].
rt
)
+
10
;
}
else
{
row
=
sysRules
[
i
].
rt
;
con
=
54
;
}
for
(;
row
<=
con
;
row
++
)
{
let
cellValue
=
luckysheet
.
getCellValue
(
row
,
parseInt
(
sysRulez
[
0
].
ct
));
if
(
cellValue
===
null
)
{
warn
++
}
else
{
if
(
cellValue
.
includes
(
key
))
{
luckysheet
.
setCellValue
(
row
,
sysRules
[
i
].
ct
,
value
[
i
]);
luckysheet
.
setCellValue
(
row
,
sysRules
[
i
].
ct
,
{
"
ct
"
:
{
"
fa
"
:
"
General
"
,
"
t
"
:
"
n
"
}
});
break
;
}
else
{
}
}
}
});
}
let
value2
=
[];
let
map2
=
new
Map
;
for
(
let
i
=
0
;
i
<
sysConver
.
length
;
i
++
)
{
//value.push(data[sysRules[i].re][sysRules[i].ce].m);
value2
.
push
(
sysConver
[
i
].
ce
);
}
for
(
let
i
=
parseInt
(
sysRulez
[
0
].
re
)
+
1
;
i
<
data
.
length
;
i
++
)
{
let
values2
=
[];
if
(
data
[
i
][
key_i
]
!=
null
)
{
for
(
let
j
=
0
;
j
<
value2
.
length
;
j
++
)
{
try
{
let
a
=
parseFloat
(
data
[
i
][
value2
[
j
]].
v
);
if
(
isNaN
(
a
))
{
a
=
0
;
}
values2
.
push
(
a
);
}
catch
(
err
){
throw
new
Error
(
"
导入失败,导入文件不匹
"
);
}
}
}
else
{
break
;
}
//插入多个value的值
let
key
=
data
[
sysConver
[
0
].
re
][
sysConver
[
0
].
ce
].
v
;
if
(
map2
.
has
(
key
))
{
let
oldValues
=
map2
.
get
(
key
);
for
(
let
i
=
0
;
i
<
values2
.
length
;
i
++
)
{
values2
[
i
]
=
parseFloat
(
parseFloat
(
parseFloat
(
values2
[
i
])
+
parseFloat
(
oldValues
[
i
])).
toFixed
(
2
));
}
map2
.
set
(
key
,
values2
);
}
else
{
map2
.
set
(
key
,
values2
);
}
}
if
(
map2
.
size
===
0
)
{
throw
new
Error
(
"
导入失败,导入文件错误
"
);
}
map2
.
forEach
((
value
,
key
)
=>
{
for
(
let
i
=
0
;
i
<
value
.
length
;
i
++
)
{
luckysheet
.
setCellValue
(
sysConver
[
i
].
rt
,
sysConver
[
i
].
ct
,
value
[
i
]);
luckysheet
.
setCellValue
(
sysConver
[
i
].
rt
,
sysConver
[
i
].
ct
,
{
"
ct
"
:
{
"
fa
"
:
"
General
"
,
"
t
"
:
"
n
"
}
});
}
})
}).
catch
(
Error
=>
{
console
.
log
(
"
这里是单个异步请求出错处
"
);
//必须加,不能删除
innerReject
(
Error
);
// 异步请求出错
});
}));
}
break
;
case
7
:
{
let
map
=
new
Map
();
let
smallMat
=
[];
let
deps
=
[];
for
(
let
i
=
parseFloat
(
sysRulez
[
0
].
re
)
+
1
;
i
<
data
.
length
;
i
++
)
{
if
(
data
[
i
][
sysRulez
[
1
].
ce
]
!=
null
&&
data
[
i
][
key_i
]
!=
null
)
{
let
num
=
data
[
i
][
key_i
].
m
;
let
dep
=
data
[
i
][
sysRulez
[
1
].
ce
].
m
;
if
(
dep
){
smallMat
.
push
(
null
);
deps
.
push
(
null
);
}
else
{
smallMat
.
push
(
num
);
deps
.
push
(
dep
);
}
}
else
{
smallMat
.
push
(
null
);
deps
.
push
(
null
);
}
}
console
.
log
(
deps
);
asyncTasks
.
push
(
new
Promise
((
innerResolve
,
innerReject
)
=>
{
const
allNull
=
smallMat
.
every
(
item
=>
item
===
null
);
if
(
allNull
)
{
throw
new
Error
(
"
导入失败,导入文件错误,所选文件与模板规则不匹
"
);
}
materialConvert
(
smallMat
)
.
then
(
response
=>
{
let
array
=
response
.
rows
;
for
(
let
i
=
parseFloat
(
sysRulez
[
0
].
re
)
+
1
,
k
=
0
;
i
<
data
.
length
;
i
++
,
k
++
)
{
let
values
=
[];
if
(
data
[
i
][
key_i
]
!=
null
)
{
for
(
let
j
=
0
;
j
<
value
.
length
;
j
++
)
{
try
{
let
a
=
parseFloat
(
data
[
i
][
value
[
j
]].
v
);
values
.
push
(
a
);
}
catch
(
err
){
this
.
$message
({
message
:
"
导入失败,导入文件不匹
"
,
type
:
"
error
"
});
innerReject
(
error
);
// 异步请求出错
}
let
rowindex
;
let
colindex
;
let
config
;
// let bord={
// "rangeType": "cell",
// "value": {
// "row_index": 0,
// "col_index": 0,
// "l": {
// "style": 1,
// "color": "#000000"
// },
// "r": {
// "style": 1,
// "color": "#000000"
// },
// "t": {
// "style": 1,
// "color": "#000000"
// },
// "b": {
// "style": 1,
// "color": "#000000"
// }
// }
// };
}
//插入多个value的值
//此方法只适用于一对一唯一值
/*let index = smallMat.indexOf(data[i][key_i].m);
let key = array[index];*/
let
key
=
array
[
k
]
+
'
/
'
+
deps
[
k
];
if
(
map
.
has
(
key
))
{
let
oldValues
=
map
.
get
(
key
);
for
(
let
i
=
0
;
i
<
values
.
length
;
i
++
)
{
values
[
i
]
=
parseFloat
(
parseFloat
(
values
[
i
]
+
oldValues
[
i
]).
toFixed
(
2
));
}
map
.
set
(
key
,
values
);
}
else
{
map
.
set
(
key
,
values
);
}
}
}
//循环得到汇总结果
console
.
log
(
map
);
if
(
map
.
size
===
0
)
{
this
.
$message
({
message
:
"
导入失败,导入文件错误
"
,
type
:
"
error
"
});
innerReject
(
error
);
// 异步请求出错
}
//返回单元格第二行的数据
//let celn=luckysheet.getcellvalue(1);
//返回当前工作表第1列数据
//let cown=luckysheet.getcellvalue(null,0);
let
rowws
;
let
config
;
let
bord
=
{
"
rangeType
"
:
"
range
"
,
"
borderType
"
:
"
border-all
"
,
...
...
@@ -382,105 +820,206 @@ export default {
"
color
"
:
"
#000000
"
,
"
range
"
:
[{
"
row
"
:
[
0
,
0
],
"
column
"
:
[
0
,
0
]
}]
}
let
cellValue
=
luckysheet
.
getcellvalue
(
row
);
luckysheet
.
insertRow
(
row
+
1
)
luckysheet
.
setCellValue
(
row
+
1
,
sysRulez
[
0
].
ct
,
splitElement
[
0
]);
luckysheet
.
setCellValue
(
row
+
1
,
sysRulez
[
0
].
ct
,
cellValue
[
0
]);
// config = luckysheet.getConfig(0);
// bord.value.row_index = row+1;
// bord.value.col_index = parseInt(sysRulez[0].ct);
// config.borderInfo.push(bord);
// luckysheet.setConfig(config);
//
// config = luckysheet.getConfig(0);
// bord.value.row_index = row+1;
// bord.value.col_index = parseInt(sysRulez[0].ct)+1;
// config.borderInfo.push(bord);
// luckysheet.setConfig(config);
luckysheet
.
setCellValue
(
row
+
1
,
sysRulez
[
1
].
ct
,
splitElement
[
1
]);
luckysheet
.
setCellValue
(
row
+
1
,
sysRulez
[
1
].
ct
,
cellValue
[
2
]);
// config = luckysheet.getConfig(0);
// bord.value.row_index = row+1;
// bord.value.col_index = parseInt(sysRulez[1].ct);
// config.borderInfo.push(bord);
// luckysheet.setConfig(config);
if
(
value
[
0
]
===
0
){
luckysheet
.
setCellValue
(
row
+
1
,
parseInt
(
sysRules
[
0
].
ct
)
+
1
,
0
);
luckysheet
.
setCellValue
(
row
+
1
,
parseInt
(
sysRules
[
0
].
ct
)
+
1
,
cellValue
[
4
]);
}
else
{
luckysheet
.
setCellValue
(
row
+
1
,
parseInt
(
sysRules
[
0
].
ct
)
+
1
,
value
[
1
]
/
value
[
0
]);
luckysheet
.
setCellValue
(
row
+
1
,
parseInt
(
sysRules
[
0
].
ct
)
+
1
,
cellValue
[
4
]);
}
// config = luckysheet.getConfig(0);
// bord.value.row_index = row+1;
// bord.value.col_index = parseInt(sysRules[0].ct)+1;
// config.borderInfo.push(bord);
// luckysheet.setConfig(config);
for
(
let
i
=
0
;
i
<
value
.
length
;
i
++
)
{
luckysheet
.
setCellValue
(
row
+
1
,
sysRules
[
i
].
ct
,
value
[
i
]);
luckysheet
.
setCellValue
(
row
+
1
,
sysRules
[
i
].
ct
,
{
"
column
"
:
[
0
,
0
]
}]
}
let
warn
=
0
;
map
.
forEach
((
value
,
key
)
=>
{
const
suffixArr
=
key
.
split
(
'
/
'
),
mat
=
suffixArr
[
0
],
depp
=
suffixArr
[
1
];
//console.log(mat);console.log(depp);
let
searchResult
=
luckysheet
.
find
(
mat
);
rowws
=
searchResult
[
0
].
row
;
if
(
searchResult
.
length
!=
0
&&
key
!=
null
)
{
luckysheet
.
insertRow
(
rowws
+
1
);
//输出部门数量金额
luckysheet
.
setCellValue
(
rowws
+
1
,
sysRulez
[
1
].
ct
,
depp
);
for
(
let
i
=
0
;
i
<
sysRules
.
length
;
i
++
)
{
luckysheet
.
setCellValue
(
rowws
+
1
,
sysRules
[
i
].
ct
,
value
[
i
]);
//修改单元格样式
/*luckysheet.setCellValue(rowws+g, sysRules[i].ct, {
"ct": {
"fa": "General",
"t": "n"
}
});
luckysheet
.
setCellValue
(
row
+
1
,
sysRules
[
i
].
ct
,
cellValue
[
3
]);
// config = luckysheet.getConfig(0);
// bord.value.row_index = row+1;
// bord.value.col_index = parseInt(sysRules[i].ct);
// config.borderInfo.push(bord);
// luckysheet.setConfig(config);
});*/
}
//输出单价
luckysheet
.
setCellValue
(
rowws
+
1
,
parseInt
(
sysRules
[
0
].
ct
)
+
1
,
value
[
1
]
/
value
[
0
]);
//修改单价样式
/*luckysheet.setCellValue(rowws+g,parseInt(sysRules[0].ct)+1,{
"ct": {
"fa": "0.0000",
"t": "n"
}
});*/
}
else
{
warn
++
;
}
config
=
luckysheet
.
getConfig
(
0
);
bord
.
range
[
0
].
row
=
[
row
+
1
,
row
+
1
];
bord
.
range
[
0
].
column
=
[
sysRulez
[
0
].
ct
,
sysRules
[
sysRules
.
length
-
1
].
ct
];
bord
.
range
[
0
].
row
=
[
rowws
+
1
,
rowws
+
1
];
bord
.
range
[
0
].
column
=
[
0
,
sysRules
[
sysRules
.
length
-
1
].
ct
];
config
.
borderInfo
.
push
(
bord
);
luckysheet
.
setConfig
(
config
);
});
console
.
log
(
warn
);
/*let find1 = luckysheet.find("合计");
let number = parseInt(find1[0].row)-1;
luckysheet.setCellValue(find1[0].row, sysRules[sysRules.length-1].ct, "=SUM(F2:F"+number+")")*/
}).
catch
(
Error
=>
{
console
.
log
(
"
这里是单个异步请求出错处
"
);
//必须加,不能删除
innerReject
(
Error
);
// 异步请求出错
});
}));
}
}
else
{
luckysheet
.
setCellValue
(
row
,
parseInt
(
sysRulez
[
1
].
ct
),
"
无
"
);
if
(
value
[
0
]
===
0
){
luckysheet
.
setCellValue
(
row
,
parseInt
(
sysRules
[
0
].
ct
)
+
1
,
0
);
}
else
{
luckysheet
.
setCellValue
(
row
,
parseInt
(
sysRules
[
0
].
ct
)
+
1
,
value
[
1
]
/
value
[
0
]);
break
;
default
:
{
let
map
=
new
Map
();
let
smallMat
=
[];
try
{
for
(
let
i
=
parseFloat
(
sysRulez
[
0
].
re
)
+
1
;
i
<
data
.
length
;
i
++
)
{
if
(
data
[
i
][
key_i
]
!=
null
)
{
let
num
=
data
[
i
][
key_i
].
m
;
smallMat
.
push
(
num
);
}
else
{
smallMat
.
push
(
null
);
}
for
(
let
i
=
0
;
i
<
value
.
length
;
i
++
)
{
luckysheet
.
setCellValue
(
row
,
sysRules
[
i
].
ct
,
value
[
i
]);
// config = luckysheet.getConfig(0);
// bord.value.row_index = row+1;
// bord.value.col_index = parseInt(sysRules[i].ct);
// config.borderInfo.push(bord);
// luckysheet.setConfig(config);
}
}
catch
(
err
){
throw
new
Error
(
"
导入失败,导入文件与模板规则不匹
"
);
}
asyncTasks
.
push
(
new
Promise
((
innerResolve
,
innerReject
)
=>
{
const
allNull
=
smallMat
.
every
(
item
=>
item
===
null
);
if
(
allNull
)
{
throw
new
Error
(
"
导入失败,导入文件错误,所选文件与模板规则不匹
"
);
}
materialConvert
(
smallMat
)
.
then
(
response
=>
{
let
array
=
response
.
rows
;
for
(
let
i
=
parseFloat
(
sysRulez
[
0
].
re
)
+
1
;
i
<
data
.
length
;
i
++
)
{
let
values
=
[];
let
index
;
if
(
data
[
i
][
key_i
]
!=
null
)
{
for
(
let
j
=
0
;
j
<
value
.
length
;
j
++
)
{
try
{
let
a
=
parseFloat
(
data
[
i
][
value
[
j
]].
v
);
values
.
push
(
a
);
}
catch
(
err
){
throw
new
Error
(
"
导入失败,导入文件不匹
"
);
}
});
let
find1
=
luckysheet
.
find
(
"
合计
"
);
let
number
=
parseInt
(
find1
[
0
].
row
)
-
1
;
luckysheet
.
setCellValue
(
find1
[
0
].
row
,
sysRules
[
sysRules
.
length
-
1
].
ct
,
"
=SUM(F2:F
"
+
number
+
"
)
"
);
}).
catch
(()
=>
{
// 处理错误逻辑,这里是一个空的错误处理函数
console
.
log
(
"
走到这了,物料转换后续处理出问题了!!
"
);
}
//插入多个value的值
index
=
smallMat
.
indexOf
(
data
[
i
][
key_i
].
m
);
let
key
=
array
[
index
];
if
(
map
.
has
(
key
))
{
let
oldValues
=
map
.
get
(
key
);
for
(
let
i
=
0
;
i
<
values
.
length
;
i
++
)
{
values
[
i
]
=
parseFloat
(
parseFloat
(
values
[
i
]
+
oldValues
[
i
]).
toFixed
(
2
));
}
map
.
set
(
key
,
values
);
}
else
{
map
.
set
(
key
,
values
);
}
}
}
//循环得到汇总结果
console
.
log
(
map
);
if
(
map
.
size
===
0
)
{
throw
new
Error
(
"
导入失败,导入文件错误
"
);
}
let
rowws
;
let
warn
=
0
;
for
(
let
i
=
0
;
i
<
sysRules
.
length
;
i
++
)
{
map
.
forEach
((
value
,
key
)
=>
{
let
searchResult
;
searchResult
=
luckysheet
.
find
(
key
);
if
(
searchResult
&&
searchResult
.
length
!==
0
&&
key
!=
null
)
{
rowws
=
searchResult
[
0
].
row
;
luckysheet
.
setCellValue
(
rowws
,
sysRules
[
i
].
ct
,
value
[
i
]);
luckysheet
.
setCellValue
(
rowws
,
sysRules
[
i
].
ct
,
{
"
ct
"
:
{
"
fa
"
:
"
General
"
,
"
t
"
:
"
n
"
}
});
}
else
{
warn
++
;
}
});
}
if
(
warn
/
sysRules
.
length
===
map
.
size
)
{
throw
new
Error
(
"
导入文件与所选模板规则不匹配
"
);
}
else
if
(
warn
>
0
)
{
this
.
$message
({
message
:
"
还有
"
+
warn
/
sysRules
.
length
+
"
条大类未能匹配到
"
,
type
:
"
warning
"
});
}
resolve
(
response
.
rows
);
innerResolve
();
// 标记当前异步任务完成
}).
catch
(
Error
=>
{
console
.
log
(
"
这里是单个异步请求出错处
"
);
//必须加,不能删除
innerReject
(
Error
);
// 异步请求出错
});
}));
}
break
;
}
//切换到想要的sheet
luckysheet
.
setSheetActive
(
0
);
Promise
.
all
(
asyncTasks
)
.
then
(()
=>
{
resolve
();
// 所有异步请求执行完成
})
.
catch
(
Error
=>
{
console
.
log
(
"
这里是所有的异步请求出错处
"
);
reject
(
Error
);
// 异步请求出错
});
});
},
/** 保存导入文件和生成文件 */
submit
(
contents
){
console
.
log
(
"
还是执行了保存方法
"
);
const
name
=
contents
.
info
.
name
;
const
obj
=
contents
.
sheets
;
let
list
=
[];
//导入文件内容转json
let
str
=
JSON
.
stringify
(
obj
)
// 对象转化为字符串
let
objsheet
=
luckysheet
.
getAllSheets
()
// 得到表的数据
//生成文件转json
let
strsheet
=
JSON
.
stringify
(
objsheet
)
// 对象转化为字符串
this
.
from
.
templateId
=
this
.
dfrom
.
templateId
=
tempId
;
this
.
from
.
importUuid
=
this
.
dfrom
.
importUuid
=
uuid1
;
this
.
from
.
roleId
=
this
.
dfrom
.
roleId
=
roleId
;
this
.
dfrom
.
historyName
=
name
;
this
.
dfrom
.
historyContent
=
str
;
this
.
dfrom
.
identifyingCode
=
0
;
this
.
from
.
status
=
this
.
dfrom
.
status
=
0
;
list
.
push
(
this
.
dfrom
);
this
.
from
.
historyName
=
fileName
+
'
(生成文件)
'
;
this
.
from
.
historyContent
=
strsheet
;
this
.
from
.
identifyingCode
=
1
;
list
.
push
(
this
.
from
);
console
.
log
(
list
);
addInsert
(
list
).
then
(
response
=>
{
if
(
response
.
code
==
200
){
this
.
$message
({
message
:
'
保存成功
'
,
type
:
'
success
'
})
}
});
},
/** 导出设置 */
handleExport
:
debounce
(
function
()
{
// 处理点击事件
...
...
@@ -501,5 +1040,20 @@ function debounce(func, delay) {
},
delay
);
};
}
function
getKeyByValue
(
map
,
value
)
{
for
(
let
[
key
,
val
]
of
map
)
{
if
(
val
===
value
)
{
return
key
;
}
if
(
Array
.
isArray
(
val
)
&&
val
.
includes
(
value
))
{
return
key
;
}
}
}
function
generateUUID
()
{
let
array
=
new
Uint32Array
(
4
);
window
.
crypto
.
getRandomValues
(
array
);
return
array
.
join
(
"
-
"
);
}
</
script
>
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment